313afc01f1736b2b5a0574546b99e426cdce33b7
[libcds.git] / build / Makefile
1 # Makefile 
2
3
4 .PHONY: all
5 .SUFFIXES:.cpp .c .ro
6
7 # make_distrib.pl substitutes the correct version
8 VERSION=1.6.0
9
10 # boost_thread lib used by test application. 
11 # You may change the library name
12 LD_BOOST_THREAD_LIB=-lboost_thread -lboost_system 
13
14 ifeq ($(platform),mingw)
15     LD_TEST_COMMON_LIBS=-lcds -lrtm
16     LD_TEST_COMMON_DEBUG_LIBS=-lcds-debug -lrtm
17     BASE_OPT = -D_REENTRANT -D_FILE_OFFSET_BITS=64 -I..
18     # -Wa,--hash-size=2048
19     CPP_BUILD_CDS_OPT=-DCDS_BUILD_LIB
20 else
21 ifeq ($(platform),darwin)
22     LD_TEST_COMMON_LIBS=-lcds
23     LD_TEST_COMMON_DEBUG_LIBS=-lcds-debug
24 else
25     LD_TEST_COMMON_LIBS=-lcds -lpthread -lrt
26     LD_TEST_COMMON_DEBUG_LIBS=-lcds-debug -lpthread -lrt
27 endif
28     BASE_OPT = -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -D_FILE_OFFSET_BITS=64 -I..
29     CPP_BUILD_CDS_OPT=
30 endif
31
32 COMP_OPT = -c $(CFLAGS) $(BASE_OPT)
33 CPP_COMP_OPT = -std=c++0x -c $(CXXFLAGS) $(BASE_OPT)
34
35 COMPILER_ROOT = $(shell dirname `dirname \`which        $(CXX)\``)
36
37 LD_OPTS = $(LDFLAGS)
38
39
40
41 ####################################
42 # cds library
43
44 include ../projects/source.libcds.mk
45 CDS_OBJS := $(addprefix $(OBJ_PATH)/,$(notdir $(CDS_SOURCES)))
46 CDS_OBJS :=$(CDS_OBJS:%.cpp=%.o)
47 CDS_SOURCES := $(CDS_SOURCES:%.cpp=../%.cpp)
48
49 ifeq ($(platform),mingw)
50     CDS_DEBUG_LIB=libcds-debug.dll
51     CDS_RELEASE_LIB=libcds.dll
52 else
53 ifeq ($(platform),darwin)
54     CDS_DEBUG_LIB=libcds-debug.dylib
55     CDS_RELEASE_LIB=libcds.dylib
56 else
57     CDS_DEBUG_LIB=libcds-debug.so
58     CDS_RELEASE_LIB=libcds.so
59 endif
60 endif
61
62 $(CDS_OBJS): $(OBJ_PATH)/%.o: ../src/%.cpp
63         $(CXX) $(CPP_COMP_OPT) $(CPP_BUILD_CDS_OPT) -o $@ $<
64
65 ifeq ($(platform),mingw)
66 $(CDS_DEBUG_LIB): $(BIN_PATH)/$(CDS_DEBUG_LIB)
67
68 $(BIN_PATH)/$(CDS_DEBUG_LIB) : $(CDS_OBJS)
69         $(CXX) $(LD_OPTS) -Wl,--out-implib,$(BIN_PATH)/$(CDS_DEBUG_LIB).a $(CDS_OBJS) -o $@ 
70
71 $(CDS_RELEASE_LIB) : $(BIN_PATH)/$(CDS_RELEASE_LIB)
72
73 $(BIN_PATH)/$(CDS_RELEASE_LIB) : $(CDS_OBJS)
74         $(CXX) $(LD_OPTS) $(CDS_OBJS) -Wl,--out-implib,$(BIN_PATH)/$(CDS_RELEASE_LIB).a -o $@ 
75     
76 debug : $(CDS_DEBUG_LIB)
77 release : $(CDS_RELEASE_LIB)
78 else
79 $(CDS_DEBUG_LIB).$(VERSION) : $(CDS_OBJS)
80         $(CXX) $(LD_OPTS) $(CDS_PLATFORM_RELEASE_LDFLAGS) $(CDS_OBJS) -o $@ 
81         mv ./$(CDS_DEBUG_LIB).$(VERSION) $(BIN_PATH)/$(CDS_DEBUG_LIB).$(VERSION)
82         ln -sf $(CDS_DEBUG_LIB).$(VERSION) $(BIN_PATH)/$(CDS_DEBUG_LIB)
83
84 $(CDS_RELEASE_LIB).$(VERSION) : $(CDS_OBJS)
85         $(CXX) $(LD_OPTS) $(CDS_OBJS) $(CDS_PLATFORM_DEBUG_LDFLAGS) -o $@ 
86         mv ./$(CDS_RELEASE_LIB).$(VERSION) $(BIN_PATH)/$(CDS_RELEASE_LIB).$(VERSION)
87         ln -sf $(CDS_RELEASE_LIB).$(VERSION) $(BIN_PATH)/$(CDS_RELEASE_LIB)
88     
89 debug : $(CDS_DEBUG_LIB).$(VERSION)
90 release : $(CDS_RELEASE_LIB).$(VERSION)
91     
92 endif
93     
94 all: debug release
95
96 ##########################################
97 # Make tests
98
99 OBJ_TEST_PATH=$(OBJ_PATH)
100
101 include ../projects/source.test-common.mk
102 CDS_TESTCOMMON_SOURCES := $(CDS_TESTCOMMON_SOURCES:%.cpp=../%.cpp)
103 TEST_COMMON_OBJS := $(CDS_TESTCOMMON_SOURCES:%.cpp=%.o)
104
105 TEST_COMMONHDR_SRC_DIR=../tests
106 $(TEST_COMMON_OBJS) : %.o : %.cpp
107         $(CXX) $(CPP_COMP_OPT) -I$(TEST_COMMONHDR_SRC_DIR) $< -o $@
108
109
110 include ../projects/source.test-hdr.mk
111 CDS_TESTHDR_SOURCES := $(CDS_TESTHDR_SOURCES:%.cpp=../%.cpp)
112 TESTHDR_OBJS := $(CDS_TESTHDR_SOURCES:%.cpp=%.o)
113
114 TESTHDR_SRC_DIR=../tests/test-hdr
115 $(TESTHDR_OBJS): %.o: %.cpp
116         $(CXX) $(CPP_COMP_OPT) -I$(TESTHDR_SRC_DIR) -I$(TEST_COMMONHDR_SRC_DIR) $< -o $@
117
118 include ../projects/source.test-hdr.offsetof.mk
119 CDS_TESTHDR_OFFSETOF_SOURCES := $(CDS_TESTHDR_OFFSETOF_SOURCES:%.cpp=../%.cpp)
120 TESTHDR_OBJS_NO_OFFSETOF_WARN := $(CDS_TESTHDR_OFFSETOF_SOURCES:%.cpp=%.o)
121
122 $(TESTHDR_OBJS_NO_OFFSETOF_WARN): %.o: %.cpp
123         $(CXX) $(CPP_COMP_OPT) -I$(TESTHDR_SRC_DIR) -I$(TEST_COMMONHDR_SRC_DIR) -Wno-invalid-offsetof $< -o $@
124
125
126 TEST_SRC_DIR=../tests/unit
127 TEST_DATA_DIR=`pwd`/../tests/data
128
129 CDSUNIT_COMMON_FILE=
130
131 include ../projects/source.unit.map.mk
132 CDSUNIT_MAP_SOURCES := $(CDSUNIT_MAP_SOURCES:%.cpp=../%.cpp)
133 CDSUNIT_MAP_FILE := $(CDSUNIT_MAP_SOURCES:%.cpp=%.o)
134
135 include ../projects/source.unit.set.mk
136 CDSUNIT_SET_SOURCES := $(CDSUNIT_SET_SOURCES:%.cpp=../%.cpp)
137 CDSUNIT_SET_FILE := $(CDSUNIT_SET_SOURCES:%.cpp=%.o)
138
139 include ../projects/source.unit.queue.mk
140 CDSUNIT_QUEUE_SOURCES := $(CDSUNIT_QUEUE_SOURCES:%.cpp=../%.cpp)
141 CDSUNIT_QUEUE_FILE := $(CDSUNIT_QUEUE_SOURCES:%.cpp=%.o)
142
143 include ../projects/source.unit.pqueue.mk
144 CDSUNIT_PQUEUE_SOURCES := $(CDSUNIT_PQUEUE_SOURCES:%.cpp=../%.cpp)
145 CDSUNIT_PQUEUE_FILE := $(CDSUNIT_PQUEUE_SOURCES:%.cpp=%.o)
146
147 include ../projects/source.unit.stack.mk
148 CDSUNIT_STACK_SOURCES := $(CDSUNIT_STACK_SOURCES:%.cpp=../%.cpp)
149 CDSUNIT_STACK_FILE := $(CDSUNIT_STACK_SOURCES:%.cpp=%.o)
150
151 include ../projects/source.unit.misc.mk
152 CDSUNIT_MISC_SOURCES := $(CDSUNIT_MISC_SOURCES:%.cpp=../%.cpp)
153 CDSUNIT_MISC_FILE := $(CDSUNIT_MISC_SOURCES:%.cpp=%.o)
154
155 TEST_OBJ_FILE= $(CDSUNIT_COMMON_FILE) $(CDSUNIT_MAP_FILE) $(CDSUNIT_SET_FILE) $(CDSUNIT_QUEUE_FILE) $(CDSUNIT_PQUEUE_FILE) \
156         $(CDSUNIT_STACK_FILE) $(CDSUNIT_MISC_FILE)
157
158 $(TEST_OBJ_FILE): %.o: %.cpp
159         $(CXX) $(CPP_COMP_OPT) -I$(TEST_SRC_DIR) -I$(TEST_COMMONHDR_SRC_DIR) $< -o $@
160
161 CDSUNIT_MAP_EXE=$(BIN_PATH)/cdsu-map
162 CDSUNIT_SET_EXE=$(BIN_PATH)/cdsu-set
163 CDSUNIT_QUEUE_EXE=$(BIN_PATH)/cdsu-queue
164 CDSUNIT_PQUEUE_EXE=$(BIN_PATH)/cdsu-pqueue
165 CDSUNIT_STACK_EXE=$(BIN_PATH)/cdsu-stack
166 CDSUNIT_MISC_EXE=$(BIN_PATH)/cdsu-misc
167 CDSUNIT_EXE_FILES= $(CDSUNIT_MAP_EXE) $(CDSUNIT_SET_EXE) $(CDSUNIT_QUEUE_EXE) $(CDSUNIT_PQUEUE_EXE) $(CDSUNIT_STACK_EXE) $(CDSUNIT_MISC_EXE)
168
169 unit-map: $(CDSUNIT_MAP_EXE)
170 unit-set: $(CDSUNIT_SET_EXE)
171 unit-queue: $(CDSUNIT_QUEUE_EXE)
172 unit-pqueue: $(CDSUNIT_PQUEUE_EXE)
173 unit-stack: $(CDSUNIT_STACK_EXE)
174
175 ifeq ($(platform),mingw)
176 make_test : $(BIN_PATH)/test-hdr $(CDSUNIT_EXE_FILES)
177         cd $(TEST_DATA_DIR); perl -X split.pl
178         cp -f $(TEST_DATA_DIR)/test.conf $(TEST_DATA_DIR)/test-debug.conf $(TEST_DATA_DIR)/dictionary.txt $(BIN_PATH)
179 else
180 make_test : $(BIN_PATH)/test-hdr $(CDSUNIT_EXE_FILES)
181         cd $(TEST_DATA_DIR); perl -X split.pl
182         ln -sf $(TEST_DATA_DIR)/test.conf $(TEST_DATA_DIR)/test-debug.conf $(TEST_DATA_DIR)/dictionary.txt $(BIN_PATH)
183 endif
184
185 $(BIN_PATH)/test-hdr : $(TEST_COMMON_OBJS) $(TESTHDR_OBJS) $(TESTHDR_OBJS_NO_OFFSETOF_WARN)
186         $(CXX) $(LD_OPTS) -L$(BIN_PATH) \
187         $(TESTHDR_OBJS) $(TESTHDR_OBJS_NO_OFFSETOF_WARN) $(TEST_COMMON_OBJS) \
188         $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_LIBS) -o $@
189
190 $(CDSUNIT_MAP_EXE) : $(CDSUNIT_MAP_FILE) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS)
191         $(CXX) $(LD_OPTS) -L$(BIN_PATH) $(CDSUNIT_MAP_FILE) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS) $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_LIBS) -o $@
192
193 $(CDSUNIT_SET_EXE) : $(CDSUNIT_SET_FILE) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS)
194         $(CXX) $(LD_OPTS) -L$(BIN_PATH) $(CDSUNIT_SET_FILE) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS) $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_LIBS) -o $@
195
196 $(CDSUNIT_QUEUE_EXE) : $(CDSUNIT_QUEUE_FILE) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS)
197         $(CXX) $(LD_OPTS) -L$(BIN_PATH) $(CDSUNIT_QUEUE_FILE) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS) $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_LIBS) -o $@
198
199 $(CDSUNIT_PQUEUE_EXE) : $(CDSUNIT_PQUEUE_FILE) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS)
200         $(CXX) $(LD_OPTS) -L$(BIN_PATH) $(CDSUNIT_PQUEUE_FILE) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS) $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_LIBS) -o $@
201
202 $(CDSUNIT_STACK_EXE) : $(CDSUNIT_STACK_FILE) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS)
203         $(CXX) $(LD_OPTS) -L$(BIN_PATH) $(CDSUNIT_STACK_FILE) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS) $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_LIBS) -o $@
204
205 $(CDSUNIT_MISC_EXE) : $(CDSUNIT_MISC_FILE) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS)
206         $(CXX) $(LD_OPTS) -L$(BIN_PATH) $(CDSUNIT_MISC_FILE) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS) $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_LIBS) -o $@
207
208
209 CDSUNIT_MAP_EXE_DBG=$(CDSUNIT_MAP_EXE)-d
210 CDSUNIT_SET_EXE_DBG=$(CDSUNIT_SET_EXE)-d
211 CDSUNIT_QUEUE_EXE_DBG=$(CDSUNIT_QUEUE_EXE)-d
212 CDSUNIT_PQUEUE_EXE_DBG=$(CDSUNIT_PQUEUE_EXE)-d
213 CDSUNIT_STACK_EXE_DBG=$(CDSUNIT_STACK_EXE)-d
214 CDSUNIT_MISC_EXE_DBG=$(CDSUNIT_MISC_EXE)-d
215 CDSUNIT_EXE_DBG_FILES= $(CDSUNIT_MAP_EXE_DBG) $(CDSUNIT_SET_EXE_DBG) $(CDSUNIT_QUEUE_EXE_DBG) $(CDSUNIT_PQUEUE_EXE_DBG) \
216         $(CDSUNIT_STACK_EXE_DBG) $(CDSUNIT_MISC_EXE_DBG)
217
218 unit-map-dbg: $(CDSUNIT_MAP_EXE_DBG)
219 unit-set-dbg: $(CDSUNIT_SET_EXE_DBG)
220 unit-queue-dbg: $(CDSUNIT_QUEUE_EXE_DBG)
221 unit-pqueue-dbg: $(CDSUNIT_PQUEUE_EXE_DBG)
222 unit-stack-dbg: $(CDSUNIT_STACK_EXE_DBG)
223
224 ifeq ($(platform),mingw)
225 make_debug_test : $(BIN_PATH)/test-hdr-debug $(CDSUNIT_EXE_DBG_FILES)
226         cd $(TEST_DATA_DIR); perl -X split.pl
227         cp -f $(TEST_DATA_DIR)/test.conf $(TEST_DATA_DIR)/test-debug.conf $(TEST_DATA_DIR)/dictionary.txt $(BIN_PATH)
228 else
229 make_debug_test : $(BIN_PATH)/test-hdr-debug $(CDSUNIT_EXE_DBG_FILES)
230         cd $(TEST_DATA_DIR); perl -X split.pl
231         ln -sf $(TEST_DATA_DIR)/test.conf $(TEST_DATA_DIR)/test-debug.conf $(TEST_DATA_DIR)/dictionary.txt $(BIN_PATH)
232 endif
233
234 $(BIN_PATH)/test-hdr-debug : $(TESTHDR_OBJS) $(TESTHDR_OBJS_NO_OFFSETOF_WARN) $(TEST_COMMON_OBJS)
235         $(CXX) $(LD_OPTS) -L$(BIN_PATH) \
236         $(TESTHDR_OBJS) $(TESTHDR_OBJS_NO_OFFSETOF_WARN) $(TEST_COMMON_OBJS) \
237         $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_DEBUG_LIBS) -o $@
238
239 $(CDSUNIT_MAP_EXE_DBG) : $(CDSUNIT_MAP_FILE) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS)
240         $(CXX) $(LD_OPTS) -L$(BIN_PATH) $(CDSUNIT_MAP_FILE) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS) $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_DEBUG_LIBS) -o $@
241
242 $(CDSUNIT_SET_EXE_DBG) : $(CDSUNIT_SET_FILE) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS)
243         $(CXX) $(LD_OPTS) -L$(BIN_PATH) $(CDSUNIT_SET_FILE) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS) $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_DEBUG_LIBS) -o $@
244
245 $(CDSUNIT_QUEUE_EXE_DBG) : $(CDSUNIT_QUEUE_FILE) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS)
246         $(CXX) $(LD_OPTS) -L$(BIN_PATH) $(CDSUNIT_QUEUE_FILE) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS) $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_DEBUG_LIBS) -o $@
247
248 $(CDSUNIT_PQUEUE_EXE_DBG) : $(CDSUNIT_PQUEUE_FILE) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS)
249         $(CXX) $(LD_OPTS) -L$(BIN_PATH) $(CDSUNIT_PQUEUE_FILE) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS) $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_DEBUG_LIBS) -o $@
250
251 $(CDSUNIT_STACK_EXE_DBG) : $(CDSUNIT_STACK_FILE) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS)
252         $(CXX) $(LD_OPTS) -L$(BIN_PATH) $(CDSUNIT_STACK_FILE) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS) $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_DEBUG_LIBS) -o $@
253
254 $(CDSUNIT_MISC_EXE_DBG) : $(CDSUNIT_MISC_FILE) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS)
255         $(CXX) $(LD_OPTS) -L$(BIN_PATH) $(CDSUNIT_MISC_FILE) $(CDSUNIT_COMMON_FILE) $(TEST_COMMON_OBJS) $(LD_BOOST_THREAD_LIB) $(LD_TEST_COMMON_DEBUG_LIBS) -o $@
256
257 test: make_test 
258 test_debug: make_debug_test
259
260 test_hdr: $(BIN_PATH)/test-hdr
261 test_hdr_debug: $(BIN_PATH)/test-hdr-debug
262
263 ##########################################
264 #
265 clean: 
266         rm -f $(OBJ_PATH)/debug/*
267         rm -f $(OBJ_PATH)/release/*
268         rm -f $(TEST_COMMON_OBJS) $(TESTHDR_OBJS) $(TESTHDR_OBJS_NO_OFFSETOF_WARN) $(TEST_OBJ_FILE)
269         rm -f $(BIN_PATH)/libcds*
270         rm -f $(BIN_PATH)/cdsu-*
271         rm -f $(BIN_PATH)/test-hdr
272