source: 3DVCSoftware/trunk/build/linux/common/makefile.base

Last change on this file was 1413, checked in by tech, 6 years ago

Merged HTM-16.2-dev@1412

File size: 13.0 KB
Line 
1#########################################################
2# check CONFIG parameter
3#########################################################
4
5ifneq ($(CONFIG), LIBRARY)
6ifneq ($(CONFIG), CONSOLE)
7CONFIG_ERR = TRUE
8endif
9endif
10
11#########################################################
12# executables used
13#########################################################
14
15CPP     = g++
16CC      = gcc
17AR      = ar
18LD      = $(CPP)
19ASM             = nasm
20
21#########################################################
22# output file names and version information
23#########################################################
24
25ifeq ($(CONFIG), LIBRARY)
26# the libraries that can be created
27STAT_DEBUG_OUT          = $(LIB_DIR)/lib$(PRJ_NAME)Staticd.a
28STAT_RELEASE_OUT        = $(LIB_DIR)/lib$(PRJ_NAME)Static.a
29DYN_DEBUG_OUT           = $(LIB_DIR)/lib$(PRJ_NAME)d.so
30DYN_RELEASE_OUT         = $(LIB_DIR)/lib$(PRJ_NAME).so
31#
32else
33ifeq ($(CONFIG), CONSOLE)
34# the executables that can be created
35STAT_DEBUG_OUT    = $(BIN_DIR)/$(PRJ_NAME)Staticd
36STAT_RELEASE_OUT  = $(BIN_DIR)/$(PRJ_NAME)Static
37DYN_DEBUG_OUT     = $(BIN_DIR)/$(PRJ_NAME)d
38DYN_RELEASE_OUT   = $(BIN_DIR)/$(PRJ_NAME)
39#
40endif
41endif
42
43
44#########################################################
45# c compiler flags
46#########################################################
47
48# default cpp flags for all configurations
49#CPPFLAGS          = -Wall $(DEFS) -I$(CURDIR)/$(INC_DIR) $(USER_INC_DIRS)
50CPPFLAGS          = $(DEFS) $(ADDDEFS) -I$(CURDIR)/$(INC_DIR) $(USER_INC_DIRS) -Wall -Wshadow -Wno-sign-compare -Werror
51
52##########
53# enforce 32-bit build : 1=yes, 0=no
54##########
55M32?= 0
56ifeq ($(M32),1)
57CPPFLAGS+=-m32
58endif
59##########
60
61ifeq ($(HIGHBITDEPTH), 1)
62CPPFLAGS+="-DRExt__HIGH_BIT_DEPTH_SUPPORT=1"
63endif
64
65ifeq ($(EXTENSION_360_VIDEO), 1)
66  CPPFLAGS+=-DEXTENSION_360_VIDEO=1
67else
68  CPPFLAGS+=-DEXTENSION_360_VIDEO=0
69endif
70
71#
72# debug cpp flags
73DEBUG_CPPFLAGS    = -g  -D_DEBUG
74#
75# release cpp
76RELEASE_CPPFLAGS  =  -O3 -Wuninitialized
77
78
79#########################################################
80# assembler compiler flags
81#########################################################
82
83# default asm flags for all configurations
84ASMFLAGS          = -f elf $(DEFS)
85#
86# debug asm flags
87DEBUG_ASMFLAGS    = -g
88#
89# release asm flags
90RELEASE_ASMFLAGS  =
91
92
93
94#########################################################
95# linker flags
96#########################################################
97
98# linker flags for all
99ALL_LDFLAGS       = -Wall
100
101##########
102# enforce 32-bit build : 1=yes, 0=no
103##########
104ifeq ($(M32),1)
105ALL_LDFLAGS+=-m32
106endif
107##########
108
109
110ifeq ($(CONFIG), LIBRARY)
111# linker flags for library
112# LDFLAGS           = $(ALL_LDFLAGS) -shared -Wl,-Bsymbolic
113LDFLAGS           = $(ALL_LDFLAGS) -shared
114#
115# debug linker flags for library
116DEBUG_LDFLAGS     = -Wl,-soname,lib$(PRJ_NAME)d.so.$(VER)
117#
118# release linker flags for library
119RELEASE_LDFLAGS   = -Wl,-soname,lib$(PRJ_NAME).so.$(VER)
120#
121else
122ifeq ($(CONFIG), CONSOLE)
123# linker flags for console
124LDFLAGS           = $(ALL_LDFLAGS)
125#
126# debug linker flags for console
127DEBUG_LDFLAGS     =
128#
129# release linker flags for console
130RELEASE_LDFLAGS   =
131#
132endif
133endif
134
135
136
137#########################################################
138# objects that have to be created
139#########################################################
140
141# the object types that have to be created     
142RELEASE_OBJS  = $(OBJS:.o=.r.o)
143DEBUG_OBJS    = $(OBJS:.o=.d.o)
144
145
146#########################################################
147# rules
148#########################################################
149
150# suffixes
151.SUFFIXES: .cpp .asm .r.o .d.o
152
153#########################################################
154# assembler rules
155#########################################################
156
157
158# create release objects
159$(OBJ_DIR)/%.r.o: $(SRC_DIR)/%.asm
160        $(ASM) $(ASMFLAGS) $(RELEASE_ASMFLAGS) -o $@ $<
161
162# create debug objects
163$(OBJ_DIR)/%.d.o: $(SRC_DIR)/%.asm
164        $(ASM) $(ASMFLAGS) $(DEBUG_ASMFLAGS) -o $@ $<
165
166# create release objects
167$(OBJ_DIR)/%.r.o: $(SRC_DIR1)/%.asm
168        $(ASM) $(ASMFLAGS) $(RELEASE_ASMFLAGS) -o $@ $<
169
170# create debug objects
171$(OBJ_DIR)/%.d.o: $(SRC_DIR1)/%.asm
172        $(ASM) $(ASMFLAGS) $(DEBUG_ASMFLAGS) -o $@ $<
173
174# create release objects
175$(OBJ_DIR)/%.r.o: $(SRC_DIR2)/%.asm
176        $(ASM) $(ASMFLAGS) $(RELEASE_ASMFLAGS) -o $@ $<
177
178# create debug objects
179$(OBJ_DIR)/%.d.o: $(SRC_DIR2)/%.asm
180        $(ASM) $(ASMFLAGS) $(DEBUG_ASMFLAGS) -o $@ $<
181
182# create release objects
183$(OBJ_DIR)/%.r.o: $(SRC_DIR3)/%.asm
184        $(ASM) $(ASMFLAGS) $(RELEASE_ASMFLAGS) -o $@ $<
185
186# create debug objects
187$(OBJ_DIR)/%.d.o: $(SRC_DIR3)/%.asm
188        $(ASM) $(ASMFLAGS) $(DEBUG_ASMFLAGS) -o $@ $<
189
190# create release objects
191$(OBJ_DIR)/%.r.o: $(SRC_DIR4)/%.asm
192        $(ASM) $(ASMFLAGS) $(RELEASE_ASMFLAGS) -o $@ $<
193
194# create debug objects
195$(OBJ_DIR)/%.d.o: $(SRC_DIR4)/%.asm
196        $(ASM) $(ASMFLAGS) $(DEBUG_ASMFLAGS) -o $@ $<
197
198
199
200#########################################################
201# c rules
202#########################################################
203
204# Generate dependency files during compilation
205# see also: http://make.paulandlesley.org/autodep.html
206#    2005-01-25 Steffen Kamp (kamp@ient.rwth-aachen.de), RWTH Aachen
207define COMPILE_AND_DEPEND_RELEASE
208        $(CPP) -c -MMD -MF $(OBJ_DIR)/$*.r.d -MT $(OBJ_DIR)/$*.r.o $(CPPFLAGS) $(RELEASE_CPPFLAGS) -o $@ $(CURDIR)/$<
209        @cp $(OBJ_DIR)/$*.r.d $(OBJ_DIR)/$*.r.P; \
210                sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
211                -e '/^$$/ d' -e 's/$$/ :/' < $(OBJ_DIR)/$*.r.d >> $(OBJ_DIR)/$*.r.P; \
212                rm -f $(OBJ_DIR)/$*.r.d
213endef
214define COMPILE_AND_DEPEND_DEBUG
215        $(CPP) -c -MMD -MF $(OBJ_DIR)/$*.d.d -MT $(OBJ_DIR)/$*.d.o $(CPPFLAGS) $(DEBUG_CPPFLAGS) -o $@ $(CURDIR)/$<
216        @cp $(OBJ_DIR)/$*.d.d $(OBJ_DIR)/$*.d.P; \
217                sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
218                -e '/^$$/ d' -e 's/$$/ :/' < $(OBJ_DIR)/$*.d.d >> $(OBJ_DIR)/$*.d.P; \
219                rm -f $(OBJ_DIR)/$*.d.d
220endef
221define COMPILE_AND_DEPEND_RELEASE_C
222        $(CC) -c -MMD -MF $(OBJ_DIR)/$*.r.d -MT $(OBJ_DIR)/$*.r.o $(CPPFLAGS) $(RELEASE_CPPFLAGS) -o $@ $(CURDIR)/$<
223        @cp $(OBJ_DIR)/$*.r.d $(OBJ_DIR)/$*.r.P; \
224                sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
225                -e '/^$$/ d' -e 's/$$/ :/' < $(OBJ_DIR)/$*.r.d >> $(OBJ_DIR)/$*.r.P; \
226                rm -f $(OBJ_DIR)/$*.r.d
227endef
228define COMPILE_AND_DEPEND_DEBUG_C
229        $(CC) -c -MMD -MF $(OBJ_DIR)/$*.d.d -MT $(OBJ_DIR)/$*.d.o $(CPPFLAGS) $(DEBUG_CPPFLAGS) -o $@ $(CURDIR)/$<
230        @cp $(OBJ_DIR)/$*.d.d $(OBJ_DIR)/$*.d.P; \
231                sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
232                -e '/^$$/ d' -e 's/$$/ :/' < $(OBJ_DIR)/$*.d.d >> $(OBJ_DIR)/$*.d.P; \
233                rm -f $(OBJ_DIR)/$*.d.d
234endef
235
236# create release objects
237$(OBJ_DIR)/%.r.o: $(SRC_DIR)/%.cpp
238        $(COMPILE_AND_DEPEND_RELEASE)
239
240# create debug objects
241$(OBJ_DIR)/%.d.o: $(SRC_DIR)/%.cpp
242        $(COMPILE_AND_DEPEND_DEBUG)
243
244# create release objects
245$(OBJ_DIR)/%.r.o: $(SRC_DIR1)/%.cpp
246        $(COMPILE_AND_DEPEND_RELEASE)
247
248# create debug objects
249$(OBJ_DIR)/%.d.o: $(SRC_DIR1)/%.cpp
250        $(COMPILE_AND_DEPEND_DEBUG)
251
252# create release objects
253$(OBJ_DIR)/%.r.o: $(SRC_DIR2)/%.cpp
254        $(COMPILE_AND_DEPEND_RELEASE)
255
256# create debug objects
257$(OBJ_DIR)/%.d.o: $(SRC_DIR2)/%.cpp
258        $(COMPILE_AND_DEPEND_DEBUG)
259
260# create release objects
261$(OBJ_DIR)/%.r.o: $(SRC_DIR3)/%.cpp
262        $(COMPILE_AND_DEPEND_RELEASE)
263
264# create debug objects
265$(OBJ_DIR)/%.d.o: $(SRC_DIR3)/%.cpp
266        $(COMPILE_AND_DEPEND_DEBUG)
267
268# create release objects
269$(OBJ_DIR)/%.r.o: $(SRC_DIR4)/%.cpp
270        $(COMPILE_AND_DEPEND_RELEASE)
271
272# create debug objects
273$(OBJ_DIR)/%.d.o: $(SRC_DIR4)/%.cpp
274        $(COMPILE_AND_DEPEND_DEBUG)
275
276# create release objects
277$(OBJ_DIR)/%.r.o: $(SRC_DIR)/%.c
278        $(COMPILE_AND_DEPEND_RELEASE_C)
279
280# create debug objects
281$(OBJ_DIR)/%.d.o: $(SRC_DIR)/%.c
282        $(COMPILE_AND_DEPEND_DEBUG_C)
283
284# create release objects
285$(OBJ_DIR)/%.r.o: $(SRC_DIR1)/%.c
286        $(COMPILE_AND_DEPEND_RELEASE_C)
287
288# create debug objects
289$(OBJ_DIR)/%.d.o: $(SRC_DIR1)/%.c
290        $(COMPILE_AND_DEPEND_DEBUG_C)
291
292# create release objects
293$(OBJ_DIR)/%.r.o: $(SRC_DIR2)/%.c
294        $(COMPILE_AND_DEPEND_RELEASE_C)
295
296# create debug objects
297$(OBJ_DIR)/%.d.o: $(SRC_DIR2)/%.c
298        $(COMPILE_AND_DEPEND_DEBUG_C)
299
300# create release objects
301$(OBJ_DIR)/%.r.o: $(SRC_DIR3)/%.c
302        $(COMPILE_AND_DEPEND_RELEASE_C)
303
304# create debug objects
305$(OBJ_DIR)/%.d.o: $(SRC_DIR3)/%.c
306        $(COMPILE_AND_DEPEND_DEBUG_C)
307
308# create release objects
309$(OBJ_DIR)/%.r.o: $(SRC_DIR4)/%.c
310        $(COMPILE_AND_DEPEND_RELEASE_C)
311
312# create debug objects
313$(OBJ_DIR)/%.d.o: $(SRC_DIR4)/%.c
314        $(COMPILE_AND_DEPEND_DEBUG_C)
315
316
317#########################################################
318# directory settings
319#########################################################
320
321ifeq ($(CONFIG), LIBRARY)
322# directories that have to be created for a library
323CHECK_DIRS = $(OBJ_DIR) $(LIB_DIR)
324#
325else
326ifeq ($(CONFIG), CONSOLE)
327# directories that have to be created for console and MFC
328CHECK_DIRS = $(OBJ_DIR) $(BIN_DIR)
329#
330endif
331endif
332
333
334#########################################################
335# targets
336#########################################################
337
338all:                    check_errors debug release
339
340debug:                  check_errors \
341                                        $(CHECK_DIRS) \
342                                        $(STAT_DEBUG_OUT)
343
344release:                check_errors \
345                                        $(CHECK_DIRS) \
346                                        $(STAT_RELEASE_OUT)
347
348
349#all:                   check_errors debug release
350#
351#debug:                 check_errors \
352#                                       $(CHECK_DIRS) \
353#                                       $(DYN_DEBUG_OUT) \
354#                                       $(STAT_DEBUG_OUT)
355#
356#release:               check_errors \
357#                                       $(CHECK_DIRS) \
358#                                       $(DYN_RELEASE_OUT) \
359#                                       $(STAT_RELEASE_OUT)
360#
361#stat_debug:            check_errors \
362#                                       $(CHECK_DIRS) \
363#                                       $(STAT_DEBUG_OUT)
364#         
365#dyn_debug:             check_errors \
366#                                       $(CHECK_DIRS) \
367#                                       $(DYN_DEBUG_OUT)
368#
369#stat_release:          check_errors \
370#                                       $(CHECK_DIRS) \
371#                                       $(STAT_RELEASE_OUT)
372#       
373#dyn_release:           check_errors \
374#                                       $(CHECK_DIRS) \
375#                                       $(DYN_RELEASE_OUT)
376
377##########################################################
378# check for errors
379##########################################################
380check_errors:
381        @if [ "$(CONFIG_ERR)" = "TRUE" ]; then\
382                echo "Wrong CONFIG parameter specified: $(CONFIG)";\
383                false;\
384        fi
385
386
387##########################################################
388# create directories
389##########################################################
390
391$(OBJ_DIR):
392        @if [ ! -d $(OBJ_DIR) ]; then\
393                mkdir $(OBJ_DIR);\
394        fi
395
396$(LIB_DIR):
397        @if [ ! -d $(LIB_DIR) ]; then\
398                mkdir $(LIB_DIR);\
399        fi
400
401$(BIN_DIR):
402        @if [ ! -d $(BIN_DIR) ]; then\
403                mkdir $(BIN_DIR);\
404        fi
405
406
407
408##########################################################
409# create output files
410##########################################################
411
412ifeq ($(CONFIG), LIBRARY)
413#
414# create static debug out
415$(STAT_DEBUG_OUT): $(DEBUG_OBJS)
416        $(AR) -crs $@ $(DEBUG_OBJS)
417#
418#
419# create release debug out
420$(STAT_RELEASE_OUT): $(RELEASE_OBJS)
421        $(AR) -crs $@ $(RELEASE_OBJS)
422#
423#
424# create dynamic debug out
425$(DYN_DEBUG_OUT): $(DYN_DEBUG_OUT).$(VER)
426        ln -fs lib$(PRJ_NAME)d.so.$(VER) $@
427#
428# create dynamic debug out
429$(DYN_DEBUG_OUT).$(VER): $(DEBUG_OBJS)
430        $(LD) $(LDFLAGS) $(DEBUG_LDFLAGS) -o $@ $(DEBUG_OBJS) -L$(LIB_DIR) $(USER_LIB_DIRS) $(LIBS) $(DEBUG_LIBS) $(DYN_LIBS) $(DYN_DEBUG_LIBS)
431#
432#
433# create dynamic release out
434$(DYN_RELEASE_OUT): $(DYN_RELEASE_OUT).$(VER)
435        ln -fs lib$(PRJ_NAME).so.$(VER) $@
436#
437# create dynamic release out
438$(DYN_RELEASE_OUT).$(VER): $(RELEASE_OBJS)
439        $(LD) $(LDFLAGS) $(RELEASE_LDFLAGS) -o $@ $(RELEASE_OBJS) -L$(LIB_DIR) $(USER_LIB_DIRS) $(LIBS) $(RELEASE_LIBS) $(DYN_LIBS) $(DYN_RELEASE_LIBS)
440#
441#
442#
443#
444#
445else
446ifeq ($(CONFIG), CONSOLE)
447#
448# added linked libraries to target prerequisites - $(*_PREREQS) variables - to force relinking when libraries have been rebuilt
449#    2005-01-25 Steffen Kamp (kamp@ient.rwth-aachen.de), RWTH Aachen
450#
451# create static debug out
452$(STAT_DEBUG_OUT): $(DEBUG_OBJS) $(STAT_DEBUG_PREREQS)
453        $(LD) -o $@ $(LDFLAGS) $(DEBUG_LDFLAGS) $(DEBUG_OBJS) -L$(LIB_DIR) $(USER_LIB_DIRS) $(LIBS) $(DEBUG_LIBS) $(STAT_LIBS) $(STAT_DEBUG_LIBS)
454#
455#
456# create static release out
457$(STAT_RELEASE_OUT): $(RELEASE_OBJS) $(STAT_RELEASE_PREREQS)
458        $(LD) -o $@ $(LDFLAGS) $(RELEASE_LDFLAGS) $(RELEASE_OBJS) -L$(LIB_DIR) $(USER_LIB_DIRS) $(LIBS) $(RELEASE_LIBS) $(STAT_LIBS) $(STAT_RELEASE_LIBS)
459#
460#
461# create dynamic debug out
462$(DYN_DEBUG_OUT): $(DEBUG_OBJS) $(DYN_DEBUG_PREREQS)
463        $(LD) -o $@ $(LDFLAGS) $(DEBUG_LDFLAGS) $(DEBUG_OBJS) -L$(LIB_DIR) $(USER_LIB_DIRS) $(LIBS) $(DEBUG_LIBS) $(DYN_LIBS) $(DYN_DEBUG_LIBS)
464#
465#
466# create dynamic release out
467$(DYN_RELEASE_OUT): $(RELEASE_OBJS) $(DYN_RELEASE_PREREQS)
468        $(LD) -o $@ $(LDFLAGS) $(RELEASE_LDFLAGS) $(RELEASE_OBJS) -L$(LIB_DIR) $(USER_LIB_DIRS) $(LIBS) $(RELEASE_LIBS) $(DYN_LIBS) $(DYN_RELEASE_LIBS)
469#
470#
471endif
472endif
473
474##########################################################
475# delete all produced files
476##########################################################
477
478clean:
479        /bin/rm -rf $(STAT_DEBUG_OUT)
480        /bin/rm -rf $(STAT_RELEASE_OUT)
481        /bin/rm -rf $(DYN_DEBUG_OUT)
482        /bin/rm -rf $(DYN_RELEASE_OUT)
483        /bin/rm -rf $(OBJ_DIR)
484
485ifeq ($(CONFIG), LIBRARY)
486        /bin/rm -rf $(DYN_DEBUG_OUT).$(VER)
487        /bin/rm -rf $(DYN_RELEASE_OUT).$(VER)
488endif
489
490
491##########################################################
492# include dependency files
493##########################################################
494
495-include $(OBJS:.o=.d.P)
496-include $(OBJS:.o=.r.P)
Note: See TracBrowser for help on using the repository browser.