diff --git a/emper/Runtime.cpp b/emper/Runtime.cpp index 2cc9e480b524f777e94f152fdda963cef656b601..93528d5d749d6de36cd8a03d4acc0512f638b3a6 100644 --- a/emper/Runtime.cpp +++ b/emper/Runtime.cpp @@ -8,7 +8,6 @@ // Non portable. #include <sched.h> // for cpu_set_t, CPU_SET, CPU_ZERO #include <sys/sysinfo.h> // for get_nprocs -#include <urcu.h> // for rcu_register_thread #include <cstdlib> // for rand, srand, abort #include <cstring> @@ -23,9 +22,14 @@ #include "Fiber.hpp" // for Fiber #include "RuntimeStrategy.hpp" // for RuntimeStrategy #include "RuntimeStrategyStats.hpp" // for RuntimeStrategyStats +#include "emper-config.h" // IWYU pragma: keep #include "lib/DebugUtil.hpp" #include "strategies/ws/WsStrategy.hpp" // for WsStrategy, WsStrategy::INST... +#ifdef EMPER_LIBURCU +#include <urcu.h> // for rcu_register_thread +#endif + #ifndef NDEBUG #include <syscall.h> // for SYS_gettid #include <unistd.h> // for syscall @@ -79,9 +83,9 @@ Runtime::Runtime(workerid_t workerCount, RuntimeStrategy& strategy, unsigned int workerIds[i] = i; auto thread_function = [](void* voidWorkerId) -> void* { - if constexpr (emper::LIBURCU) { - rcu_register_thread(); - } +#ifdef EMPER_LIBURCU + rcu_register_thread(); +#endif return currentRuntime->workerLoop(voidWorkerId); }; diff --git a/meson.build b/meson.build index 6c2c21e593783963abaa0561fc907a93b5a9502d..7e7331d03768f8aaed6dfb94062853110a9268af 100644 --- a/meson.build +++ b/meson.build @@ -12,14 +12,19 @@ project('EMPER', 'c', 'cpp', add_project_arguments('-Wno-non-virtual-dtor', language: 'cpp') thread_dep = dependency('threads') -liburcu_dep = dependency('liburcu') -emper_dependencies = [thread_dep, liburcu_dep] +emper_dependencies = [thread_dep] run_target('iwyu', command: 'tools/check-iwyu') conf_data = configuration_data() -conf_data.set('EMPER_LIBURCU', get_option('userspace-rcu')) +option_urcu = get_option('userspace-rcu') +conf_data.set('EMPER_LIBURCU', option_urcu) +if option_urcu + liburcu_dep = dependency('liburcu') + emper_dependencies += [liburcu_dep] +endif + conf_data.set('EMPER_WORKER_SLEEP', get_option('worker_sleep')) conf_data.set('EMPER_LOCKED_WS_QUEUE', get_option('locked_ws_queue')) conf_data.set('EMPER_OVERFLOW_QUEUE', get_option('overflow_queue')) diff --git a/meson_options.txt b/meson_options.txt index 8032e30c80192ddd7463a3d70e288570472e3bbd..983904624b8500ecd34566f60f4b91a9875d2611 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -1,7 +1,7 @@ option( 'userspace-rcu', type: 'boolean', - value: true, + value: false, description: 'Allow EMPER fibers to use userspace RCU', ) option( diff --git a/tests/meson.build b/tests/meson.build index 4365140346e0ac17d97cd37f6ecb7a60834376f4..f2c0134f59c8c6b5513e872cc60d2ce0948b8533 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -1,6 +1,6 @@ cc = meson.get_compiler('c') -liburcu_memb = cc.find_library('urcu-memb') -liburcu_cds = cc.find_library('urcu-cds') +liburcu_memb = option_urcu ? cc.find_library('urcu-memb') : disabler() +liburcu_cds = option_urcu ? cc.find_library('urcu-cds') : disabler() tests = { 'SimpleFibTest.cpp':