diff --git a/emper/lib/sync/SpuriousFutex2Semaphore.cpp b/emper/lib/sync/SpuriousFutex2Semaphore.cpp
index 41abdc8b1aeb0a3ee88a3937ba59ba19aafc3f72..72ffa3901253a873465e376c551ca3a02076698d 100644
--- a/emper/lib/sync/SpuriousFutex2Semaphore.cpp
+++ b/emper/lib/sync/SpuriousFutex2Semaphore.cpp
@@ -10,6 +10,7 @@
 #include <cerrno>
 
 #include "Worker.hpp"
+#include "emper-config.h"
 
 #ifndef SYS_futex_waitv
 #define SYS_futex_waitv 449
@@ -19,18 +20,21 @@
 #define FUTEX_32 2
 #endif
 
+#ifdef EMPER_DEFINE_FUTEX_WAITV
 struct futex_waitv {
 	uint64_t val;
 	uint64_t uaddr;
 	uint32_t flags;
-	uint32_t _reserved;
+	// NOLINTNEXTLINE(bugprone-reserved-identifier)
+	uint32_t __reserved;
 };
+#endif
 
 static void init_futex_waitv(struct futex_waitv* waiter, uint64_t val, void* uaddr) {
 	waiter->val = val;
 	waiter->uaddr = reinterpret_cast<uintptr_t>(uaddr);
 	waiter->flags = FUTEX_PRIVATE_FLAG | FUTEX_32;
-	waiter->_reserved = 0;
+	waiter->__reserved = 0;
 }
 
 namespace emper::lib::sync {
diff --git a/emper/lib/sync/meson.build b/emper/lib/sync/meson.build
index c4476caeaea16eed711961c3b8673669073a658c..8e4cd142c4b2eff6e7b86a73270923231981f5b0 100644
--- a/emper/lib/sync/meson.build
+++ b/emper/lib/sync/meson.build
@@ -1,3 +1,8 @@
+if not cpp_compiler.has_member('struct futex_waitv', 'val',
+                               prefix: '#include <linux/futex.h>')
+	conf_data.set('EMPER_DEFINE_FUTEX_WAITV', true)
+endif
+
 emper_cpp_sources += files(
   'SpuriousFutex2Semaphore.cpp',
 )