COMPAT+=compat_futex.c
endif
-lib_LTLIBRARIES = liburcu-cds.la liburcu.la liburcu-qsbr.la \
- liburcu-mb.la liburcu-signal.la liburcu-bp.la
+lib_LTLIBRARIES = liburcu.la liburcu-qsbr.la \
+ liburcu-mb.la liburcu-signal.la liburcu-bp.la \
+ liburcu-cds.la liburcu-cds-qsbr.la \
+ liburcu-cds-mb.la liburcu-cds-signal.la liburcu-cds-bp.la \
+ liburcu-cds-common.la
-liburcu_cds_la_SOURCES = wfqueue.c wfstack.c rculfqueue.c rculfstack.c \
- $(COMPAT)
+liburcu_cds_common_la_SOURCES = wfqueue.c wfstack.c $(COMPAT)
liburcu_la_SOURCES = urcu.c urcu-pointer.c $(COMPAT)
-liburcu_la_LIBADD = liburcu-cds.la
+liburcu_la_LIBADD = liburcu-cds-common.la
+liburcu_cds_la_SOURCES = rculfqueue.c rculfstack.c $(COMPAT)
liburcu_qsbr_la_SOURCES = urcu-qsbr.c urcu-pointer.c $(COMPAT)
-liburcu_qsbr_la_LIBADD = liburcu-cds.la
+liburcu_qsbr_la_LIBADD = liburcu-cds-common.la
+liburcu_cds_qsbr_la_SOURCES = rculfqueue.c rculfstack.c $(COMPAT)
+liburcu_cds_qsbr_la_CFLAGS = -DRCU_QSBR
liburcu_mb_la_SOURCES = urcu.c urcu-pointer.c $(COMPAT)
liburcu_mb_la_CFLAGS = -DRCU_MB
-liburcu_mb_la_LIBADD = liburcu-cds.la
+liburcu_mb_la_LIBADD = liburcu-cds-common.la
+liburcu_cds_mb_la_SOURCES = rculfqueue.c rculfstack.c $(COMPAT)
+liburcu_cds_mb_la_CFLAGS = -DRCU_MB
liburcu_signal_la_SOURCES = urcu.c urcu-pointer.c $(COMPAT)
liburcu_signal_la_CFLAGS = -DRCU_SIGNAL
-liburcu_signal_la_LIBADD = liburcu-cds.la
+liburcu_signal_la_LIBADD = liburcu-cds-common.la
+liburcu_cds_signal_la_SOURCES = rculfqueue.c rculfstack.c $(COMPAT)
+liburcu_cds_signal_la_CFLAGS = -DRCU_SIGNAL
liburcu_bp_la_SOURCES = urcu-bp.c urcu-pointer.c $(COMPAT)
-liburcu_bp_la_LIBADD = liburcu-cds.la
+liburcu_bp_la_LIBADD = liburcu-cds-common.la
+liburcu_cds_bp_la_SOURCES = rculfqueue.c rculfstack.c $(COMPAT)
+liburcu_cds_bp_la_CFLAGS = -DRCU_BP
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = liburcu-cds.pc liburcu.pc liburcu-bp.pc liburcu-qsbr.pc \
*/
#define _LGPL_SOURCE
-/* Use the urcu symbols to select the appropriate rcu flavor at link time */
-#include "urcu.h"
+
+#ifdef RCU_QSBR
+# include "urcu-qsbr.h"
+#elif defined(RCU_BP)
+# include "urcu-bp.h"
+#else
+# include "urcu.h"
+#endif
#undef _LGPL_SOURCE
/* Do not #define _LGPL_SOURCE to ensure we can emit the wrapper symbols */
/* Use the urcu symbols to select the appropriate rcu flavor at link time */
#define _LGPL_SOURCE
-#include "urcu.h"
+
+#ifdef RCU_QSBR
+# include "urcu-qsbr.h"
+#elif defined(RCU_BP)
+# include "urcu-bp.h"
+#else
+# include "urcu.h"
+#endif
#undef _LGPL_SOURCE
/* Do not #define _LGPL_SOURCE to ensure we can emit the wrapper symbols */
URCU_DEFER=$(top_srcdir)/urcu.c $(top_srcdir)/urcu-pointer.c $(top_srcdir)/wfqueue.c $(COMPAT)
URCU_LIB=$(top_builddir)/liburcu.la
+URCU_CDS_LIB=$(top_builddir)/liburcu-cds.la
URCU_QSBR_LIB=$(top_builddir)/liburcu-qsbr.la
+URCU_CDS_QSBR_LIB=$(top_builddir)/liburcu-cds-qsbr.la
URCU_MB_LIB=$(top_builddir)/liburcu-mb.la
+URCU_CDS_MB_LIB=$(top_builddir)/liburcu-cds-mb.la
URCU_SIGNAL_LIB=$(top_builddir)/liburcu-signal.la
+URCU_CDS_SIGNAL_LIB=$(top_builddir)/liburcu-cds-signal.la
URCU_BP_LIB=$(top_builddir)/liburcu-bp.la
-URCU_CDS_LIB=$(top_builddir)/liburcu-cds.la
+URCU_CDS_BP_LIB=$(top_builddir)/liburcu-cds-bp.la
+URCU_CDS_COMMON_LIB=$(top_builddir)/liburcu-cds-common.la
EXTRA_DIST = $(top_srcdir)/tests/api.h
rcutorture_urcu_SOURCES = urcutorture.c
rcutorture_urcu_CFLAGS = -DRCU_MEMBARRIER $(AM_CFLAGS)
-rcutorture_urcu_LDADD = $(URCU) $(URCU_CDS_LIB)
+rcutorture_urcu_LDADD = $(URCU)
rcutorture_urcu_mb_SOURCES = urcutorture.c
rcutorture_urcu_mb_CFLAGS = -DRCU_MB $(AM_CFLAGS)
-rcutorture_urcu_mb_LDADD = $(URCU_MB_LIB) $(URCU_CDS_LIB)
+rcutorture_urcu_mb_LDADD = $(URCU_MB_LIB)
rcutorture_qsbr_SOURCES = urcutorture.c
rcutorture_qsbr_CFLAGS = -DTORTURE_QSBR -DRCU_QSBR $(AM_CFLAGS)
-rcutorture_qsbr_LDADD = $(URCU_QSBR_LIB) $(URCU_CDS_LIB)
+rcutorture_qsbr_LDADD = $(URCU_QSBR_LIB)
rcutorture_urcu_signal_SOURCES = urcutorture.c
rcutorture_urcu_signal_CFLAGS = -DRCU_SIGNAL $(AM_CFLAGS)
-rcutorture_urcu_signal_LDADD = $(URCU_SIGNAL_LIB) $(URCU_CDS_LIB)
+rcutorture_urcu_signal_LDADD = $(URCU_SIGNAL_LIB)
rcutorture_urcu_bp_SOURCES = urcutorture.c
rcutorture_urcu_bp_CFLAGS = -DRCU_BP $(AM_CFLAGS)
-rcutorture_urcu_bp_LDADD = $(URCU_BP_LIB) $(URCU_CDS_LIB)
+rcutorture_urcu_bp_LDADD = $(URCU_BP_LIB)
test_mutex_SOURCES = test_mutex.c $(URCU)
test_urcu_bp_dynamic_link_SOURCES = test_urcu_bp.c $(URCU_BP)
test_urcu_bp_dynamic_link_CFLAGS = -DDYNAMIC_LINK_TEST $(AM_CFLAGS)
-test_urcu_lfq_SOURCES = test_urcu_lfq.c $(URCU)
+test_urcu_lfq_SOURCES = test_urcu_lfq.c $(URCU) $(URCU_CDS_LIB)
test_urcu_lfq_dynlink_SOURCES = test_urcu_lfq.c $(URCU)
test_urcu_lfq_dynlink_CFLAGS = -DDYNAMIC_LINK_TEST $(AM_CFLAGS)
test_urcu_lfq_dynlink_LDADD = $(URCU_CDS_LIB)
-test_urcu_wfq_SOURCES = test_urcu_wfq.c $(COMPAT)
+test_urcu_wfq_SOURCES = test_urcu_wfq.c $(URCU_CDS_COMMON_LIB) $(COMPAT)
test_urcu_wfq_dynlink_SOURCES = test_urcu_wfq.c
test_urcu_wfq_dynlink_CFLAGS = -DDYNAMIC_LINK_TEST $(AM_CFLAGS)
-test_urcu_wfq_dynlink_LDADD = $(URCU_CDS_LIB)
+test_urcu_wfq_dynlink_LDADD = $(URCU_CDS_COMMON_LIB)
-test_urcu_lfs_SOURCES = test_urcu_lfs.c $(URCU_DEFER)
+test_urcu_lfs_SOURCES = test_urcu_lfs.c $(URCU_CDS_LIB) $(URCU_DEFER)
test_urcu_lfs_dynlink_SOURCES = test_urcu_lfs.c $(URCU_DEFER)
test_urcu_lfs_dynlink_CFLAGS = -DDYNAMIC_LINK_TEST $(AM_CFLAGS)
test_urcu_lfs_dynlink_LDADD = $(URCU_CDS_LIB)
-test_urcu_wfs_SOURCES = test_urcu_wfs.c $(COMPAT)
+test_urcu_wfs_SOURCES = test_urcu_wfs.c $(URCU_CDS_COMMON_LIB) $(COMPAT)
test_urcu_wfs_dynlink_SOURCES = test_urcu_wfs.c
test_urcu_wfs_dynlink_CFLAGS = -DDYNAMIC_LINK_TEST $(AM_CFLAGS)
-test_urcu_wfs_dynlink_LDADD = $(URCU_CDS_LIB)
+test_urcu_wfs_dynlink_LDADD = $(URCU_CDS_COMMON_LIB)
urcutorture.c: api.h
#define rcu_defer_barrier rcu_defer_barrier_bp
#define rcu_defer_barrier_thread rcu_defer_barrier_thread_bp
+/* Concurrent Data Structures */
+#define cds_lfq_node_init_rcu cds_lfq_node_init_rcu_bp
+#define cds_lfq_init_rcu cds_lfq_init_rcu_bp
+#define cds_lfq_destroy_rcu cds_lfq_destroy_rcu_bp
+#define cds_lfq_enqueue_rcu cds_lfq_enqueue_rcu_bp
+#define cds_lfq_dequeue_rcu cds_lfq_dequeue_rcu_bp
+
+#define cds_lfs_node_init_rcu cds_lfs_node_init_rcu_bp
+#define cds_lfs_init_rcu cds_lfs_init_rcu_bp
+#define cds_lfs_push_rcu cds_lfs_push_rcu_bp
+#define cds_lfs_pop_rcu cds_lfs_pop_rcu_bp
+
#endif /* _URCU_BP_MAP_H */
#define rcu_defer_barrier rcu_defer_barrier_qsbr
#define rcu_defer_barrier_thread rcu_defer_barrier_thread_qsbr
+/* Concurrent Data Structures */
+#define cds_lfq_node_init_rcu cds_lfq_node_init_rcu_qsbr
+#define cds_lfq_init_rcu cds_lfq_init_rcu_qsbr
+#define cds_lfq_destroy_rcu cds_lfq_destroy_rcu_qsbr
+#define cds_lfq_enqueue_rcu cds_lfq_enqueue_rcu_qsbr
+#define cds_lfq_dequeue_rcu cds_lfq_dequeue_rcu_qsbr
+
+#define cds_lfs_node_init_rcu cds_lfs_node_init_rcu_qsbr
+#define cds_lfs_init_rcu cds_lfs_init_rcu_qsbr
+#define cds_lfs_push_rcu cds_lfs_push_rcu_qsbr
+#define cds_lfs_pop_rcu cds_lfs_pop_rcu_qsbr
+
#endif /* _URCU_QSBR_MAP_H */
#define rcu_defer_barrier rcu_defer_barrier_memb
#define rcu_defer_barrier_thread rcu_defer_barrier_thread_memb
+/* Concurrent Data Structures */
+#define cds_lfq_node_init_rcu cds_lfq_node_init_rcu_memb
+#define cds_lfq_init_rcu cds_lfq_init_rcu_memb
+#define cds_lfq_destroy_rcu cds_lfq_destroy_rcu_memb
+#define cds_lfq_enqueue_rcu cds_lfq_enqueue_rcu_memb
+#define cds_lfq_dequeue_rcu cds_lfq_dequeue_rcu_memb
+
+#define cds_lfs_node_init_rcu cds_lfs_node_init_rcu_memb
+#define cds_lfs_init_rcu cds_lfs_init_rcu_memb
+#define cds_lfs_push_rcu cds_lfs_push_rcu_memb
+#define cds_lfs_pop_rcu cds_lfs_pop_rcu_memb
+
#elif defined(RCU_SIGNAL)
#define rcu_read_lock rcu_read_lock_sig
#define rcu_defer_barrier rcu_defer_barrier_sig
#define rcu_defer_barrier_thread rcu_defer_barrier_thread_sig
+/* Concurrent Data Structures */
+#define cds_lfq_node_init_rcu cds_lfq_node_init_rcu_sig
+#define cds_lfq_init_rcu cds_lfq_init_rcu_sig
+#define cds_lfq_destroy_rcu cds_lfq_destroy_rcu_sig
+#define cds_lfq_enqueue_rcu cds_lfq_enqueue_rcu_sig
+#define cds_lfq_dequeue_rcu cds_lfq_dequeue_rcu_sig
+
+#define cds_lfs_node_init_rcu cds_lfs_node_init_rcu_sig
+#define cds_lfs_init_rcu cds_lfs_init_rcu_sig
+#define cds_lfs_push_rcu cds_lfs_push_rcu_sig
+#define cds_lfs_pop_rcu cds_lfs_pop_rcu_sig
+
#elif defined(RCU_MB)
#define rcu_read_lock rcu_read_lock_mb
#define rcu_defer_barrier rcu_defer_barrier_mb
#define rcu_defer_barrier_thread rcu_defer_barrier_thread_mb
+/* Concurrent Data Structures */
+#define cds_lfq_node_init_rcu cds_lfq_node_init_rcu_mb
+#define cds_lfq_init_rcu cds_lfq_init_rcu_mb
+#define cds_lfq_destroy_rcu cds_lfq_destroy_rcu_mb
+#define cds_lfq_enqueue_rcu cds_lfq_enqueue_rcu_mb
+#define cds_lfq_dequeue_rcu cds_lfq_dequeue_rcu_mb
+
+#define cds_lfs_node_init_rcu cds_lfs_node_init_rcu_mb
+#define cds_lfs_init_rcu cds_lfs_init_rcu_mb
+#define cds_lfs_push_rcu cds_lfs_push_rcu_mb
+#define cds_lfs_pop_rcu cds_lfs_pop_rcu_mb
+
#else
#error "Undefined selection"
#include <urcu/static/rculfqueue.h>
-#define cds_lfq_node_init_rcu _cds_lfq_node_init_rcu
-#define cds_lfq_init_rcu _cds_lfq_init_rcu
-#define cds_lfq_destroy_rcu _cds_lfq_destroy_rcu
-#define cds_lfq_enqueue_rcu _cds_lfq_enqueue_rcu
-#define cds_lfq_dequeue_rcu _cds_lfq_dequeue_rcu
+#define cds_lfq_node_init_rcu_qsbr _cds_lfq_node_init_rcu
+#define cds_lfq_init_rcu_qsbr _cds_lfq_init_rcu
+#define cds_lfq_destroy_rcu_qsbr _cds_lfq_destroy_rcu
+#define cds_lfq_enqueue_rcu_qsbr _cds_lfq_enqueue_rcu
+#define cds_lfq_dequeue_rcu_qsbr _cds_lfq_dequeue_rcu
+
+#define cds_lfq_node_init_rcu_bp _cds_lfq_node_init_rcu
+#define cds_lfq_init_rcu_bp _cds_lfq_init_rcu
+#define cds_lfq_destroy_rcu_bp _cds_lfq_destroy_rcu
+#define cds_lfq_enqueue_rcu_bp _cds_lfq_enqueue_rcu
+#define cds_lfq_dequeue_rcu_bp _cds_lfq_dequeue_rcu
+
+#define cds_lfq_node_init_rcu_memb _cds_lfq_node_init_rcu
+#define cds_lfq_init_rcu_memb _cds_lfq_init_rcu
+#define cds_lfq_destroy_rcu_memb _cds_lfq_destroy_rcu
+#define cds_lfq_enqueue_rcu_memb _cds_lfq_enqueue_rcu
+#define cds_lfq_dequeue_rcu_memb _cds_lfq_dequeue_rcu
+
+#define cds_lfq_node_init_rcu_mb _cds_lfq_node_init_rcu
+#define cds_lfq_init_rcu_mb _cds_lfq_init_rcu
+#define cds_lfq_destroy_rcu_mb _cds_lfq_destroy_rcu
+#define cds_lfq_enqueue_rcu_mb _cds_lfq_enqueue_rcu
+#define cds_lfq_dequeue_rcu_mb _cds_lfq_dequeue_rcu
+
+#define cds_lfq_node_init_rcu_sig _cds_lfq_node_init_rcu
+#define cds_lfq_init_rcu_sig _cds_lfq_init_rcu
+#define cds_lfq_destroy_rcu_sig _cds_lfq_destroy_rcu
+#define cds_lfq_enqueue_rcu_sig _cds_lfq_enqueue_rcu
+#define cds_lfq_dequeue_rcu_sig _cds_lfq_dequeue_rcu
#else /* !_LGPL_SOURCE */
#include <urcu/static/rculfstack.h>
-#define cds_lfs_node_init_rcu _cds_lfs_node_init_rcu
-#define cds_lfs_init_rcu _cds_lfs_init_rcu
-#define cds_lfs_push_rcu _cds_lfs_push_rcu
-#define cds_lfs_pop_rcu _cds_lfs_pop_rcu
+#define cds_lfs_node_init_rcu_qsbr _cds_lfs_node_init_rcu
+#define cds_lfs_init_rcu_qsbr _cds_lfs_init_rcu
+#define cds_lfs_push_rcu_qsbr _cds_lfs_push_rcu
+#define cds_lfs_pop_rcu_qsbr _cds_lfs_pop_rcu
+
+#define cds_lfs_node_init_rcu_bp _cds_lfs_node_init_rcu
+#define cds_lfs_init_rcu_bp _cds_lfs_init_rcu
+#define cds_lfs_push_rcu_bp _cds_lfs_push_rcu
+#define cds_lfs_pop_rcu_bp _cds_lfs_pop_rcu
+
+#define cds_lfs_node_init_rcu_memb _cds_lfs_node_init_rcu
+#define cds_lfs_init_rcu_memb _cds_lfs_init_rcu
+#define cds_lfs_push_rcu_memb _cds_lfs_push_rcu
+#define cds_lfs_pop_rcu_memb _cds_lfs_pop_rcu
+
+#define cds_lfs_node_init_rcu_mb _cds_lfs_node_init_rcu
+#define cds_lfs_init_rcu_mb _cds_lfs_init_rcu
+#define cds_lfs_push_rcu_mb _cds_lfs_push_rcu
+#define cds_lfs_pop_rcu_mb _cds_lfs_pop_rcu
+
+#define cds_lfs_node_init_rcu_sig _cds_lfs_node_init_rcu
+#define cds_lfs_init_rcu_sig _cds_lfs_init_rcu
+#define cds_lfs_push_rcu_sig _cds_lfs_push_rcu
+#define cds_lfs_pop_rcu_sig _cds_lfs_pop_rcu
#else /* !_LGPL_SOURCE */