add "lock-free queue"
[model-checker-benchmarks.git] / queue / makefile
diff --git a/queue/makefile b/queue/makefile
new file mode 100644 (file)
index 0000000..ee96d75
--- /dev/null
@@ -0,0 +1,67 @@
+# -fno-schedule-insns -fno-rerun-loop-opt are a workaround for a compiler error in 4.2
+# -Wno-unused-parameter
+
+CC      = g++
+CFLAGS  = -g -O3 -fopenmp -fno-schedule-insns -fno-schedule-insns2 -W -Wall #-Wno-unused-parameter
+CFLAGS += `pkg-config --cflags glib-2.0`
+#CFLAGS += -march=i686
+#CFLAGS += -march=core2
+LDFLAGS = -lgomp
+LDFLAGS+= `pkg-config --libs glib-2.0`
+# g_blocking_queue also depends on gthread-2.0
+CFLAGS_GTHREAD = `pkg-config gthread-2.0`
+LDFLAGS_GTHREAD = `pkg-config --libs gthread-2.0`
+
+#compile-time parameters
+ifdef N_PRODUCERS
+CFLAGS += -DN_PRODUCERS=$(N_PRODUCERS)
+endif
+ifdef N_CONSUMERS
+CFLAGS += -DN_CONSUMERS=$(N_CONSUMERS)
+endif
+ifdef N_ITERATIONS
+CFLAGS += -DN_ITERATIONS=$(N_ITERATIONS)
+endif
+ifdef QUEUE_SIZE
+CFLAGS += -DQUEUE_SIZE=$(QUEUE_SIZE)
+endif
+
+
+LOCK_FREE_Q_INCLUDE = \
+    array_lock_free_queue.h \
+    array_lock_free_queue_impl.h
+
+BLOCKING_Q_INCLUDE = \
+    g_blocking_queue.h \
+    g_blocking_queue_impl.h
+
+LOCK_FREE_SINGLE_PRODUCER_Q_INCLUDE = \
+    array_lock_free_queue_single_producer.h \
+    array_lock_free_queue_single_producer_impl.h
+
+SHARED_INCLUDE = \
+    atomic_ops.h
+
+all : test_lock_free_q  test_lock_free_single_producer_q test_blocking_q
+
+test_lock_free_q : test_lock_free_q.o
+       $(CC) $(OBJS) -o $@ $@.o $(LDFLAGS)
+
+test_blocking_q : test_blocking_q.o
+       $(CC) $(OBJS) -o $@ $@.o $(LDFLAGS) $(LDFLAGS_GTHREAD)
+
+test_lock_free_single_producer_q : test_lock_free_single_producer_q.o
+           $(CC) $(OBJS) -o $@ $@.o $(LDFLAGS)
+    
+test_lock_free_q.o : test_lock_free_q.cpp $(SHARED_INCLUDE) $(LOCK_FREE_Q_INCLUDE)
+       $(CC) -c $< $(CFLAGS)
+
+test_lock_free_single_producer_q.o : test_lock_free_single_producer_q.cpp $(SHARED_INCLUDE) $(LOCK_FREE_SINGLE_PRODUCER_Q_INCLUDE)
+       $(CC) -c $< $(CFLAGS)
+    
+test_blocking_q.o: test_blocking_q.cpp $(SHARED_INCLUDE) $(BLOCKING_Q_INCLUDE)
+       $(CC) -c $< $(CFLAGS) $(CFLAGS_GTHREAD) 
+
+clean:
+       rm test_lock_free_q test_blocking_q test_lock_free_single_producer_q; rm *.o
+