942017da1dd4fb6da59b22904b73b9e35f4117a5
[mardrone] / mardrone / ARDrone_SDK_Version_1_8_20110726 / ARDroneLib / VP_SDK / Build / generic.makefile
1
2 ###########################################################################################
3 #
4 # Generic makefile, used everywhere
5 # ----------------------------------------------------------------------------------
6 # Author : aurelien.morelle@parrot.com
7 # Date   : 2007/05/16
8 #
9 ###########################################################################################
10
11 INTERNAL_LOG_FILE=build.log
12
13 ifdef PARROTOS_MAKEFILE
14   TWEAKED_PARROTOS_MAKEFILE=$(GENERIC_LIBRARY_TARGET_DIR)/tweaked_parrotos.mak
15   include $(TWEAKED_PARROTOS_MAKEFILE)
16   GENERIC_LIBRARY_SOURCE_FILES=$(filter-out mDNSPosix/Responder.c,$(CFILES:P5_FFT.c=P5_FFT.s) $(SFILES) $(PSFILES))
17   GENERIC_INCLUDES+=$(patsubst %,-I$(GENERIC_LIBRARY_SOURCE_DIR)/%,$(MODULES))
18 endif
19
20 ifeq ($(QUIET_BUILD),yes)
21   Q=@
22   SILENT=2>&1 > /dev/null
23 endif
24
25 ifeq ($(USE_NDS),yes)
26   NDS_CPU_TYPE=$(shell echo $(NDS_CPU) | tr "A-Z" "a-z" | sed -e "s@[0-9][0-9]*@@")
27   NDS_CPU_NUM=$(shell echo $(NDS_CPU) | sed -e "s@[a-zA-Z][a-zA-Z]*@@")
28   INTERNAL_NDSTOOL:=$(Q)ndstool
29   INTERNAL_DSBUILD:=$(Q)dsbuild
30 endif
31
32 INTERNAL_SOURCE_EXTENSIONS= .c .S .s .cpp
33
34 INTERNAL_MKDIR=mkdir -p
35 INTERNAL_ECHO=echo
36
37 # (in) GENERIC_COMMAND_PREFIX
38 INTERNAL_CC:=$(GENERIC_COMMAND_PREFIX)gcc
39 INTERNAL_AR:=$(GENERIC_COMMAND_PREFIX)ar
40 INTERNAL_OBJCOPY:=$(GENERIC_COMMAND_PREFIX)objcopy
41 INTERNAL_STRIP:=$(GENERIC_COMMAND_PREFIX)strip
42
43 # (in) GENERIC_CFLAGS
44 # (in) GENERIC_LDFLAGS
45 # (in) GENERIC_ARFLAGS
46
47 # (in) GENERIC_INCLUDES
48
49 # (in) GENERIC_ADD_OFILES : for linking with
50
51 # (in) GENERIC_LIBRARY_SOURCE_DIR
52 # (in) GENERIC_LIBRARY_SOURCE_FILES
53 # (in) GENERIC_LIBRARY_TARGET_DIR : for .o files
54 INTERNAL_LIBRARY_SOURCE_FILES:=$(patsubst %,$(GENERIC_LIBRARY_SOURCE_DIR)/%,$(GENERIC_LIBRARY_SOURCE_FILES))
55 INTERNAL_LIBRARY_TARGET_OFILES:=$(foreach ext,$(INTERNAL_SOURCE_EXTENSIONS),\
56         $(patsubst $(GENERIC_LIBRARY_SOURCE_DIR)/%$(ext),$(GENERIC_LIBRARY_TARGET_DIR)/%.o,$(filter %$(ext),$(INTERNAL_LIBRARY_SOURCE_FILES))))
57
58 # (in) GENERIC_BINARIES_SOURCE_DIR
59 # (in) GENERIC_BINARIES_COMMON_SOURCE_FILES
60 # (in) GENERIC_BINARIES_SOURCE_ENTRYPOINTS
61 # (in) GENERIC_BINARIES_TARGET_DIR : for .o files
62 INTERNAL_BINARIES_COMMON_SOURCE_FILES:=$(patsubst %,$(GENERIC_BINARIES_SOURCE_DIR)/%,$(GENERIC_BINARIES_COMMON_SOURCE_FILES))
63 INTERNAL_BINARIES_COMMON_TARGET_OFILES:=$(foreach ext,$(INTERNAL_SOURCE_EXTENSIONS),\
64         $(patsubst $(GENERIC_BINARIES_SOURCE_DIR)/%$(ext),$(GENERIC_BINARIES_TARGET_DIR)/%.o,$(filter %$(ext),$(INTERNAL_BINARIES_COMMON_SOURCE_FILES))))
65 INTERNAL_BINARIES_TARGET_OENTRYPOINTS:=$(foreach ext,$(INTERNAL_SOURCE_EXTENSIONS),\
66         $(patsubst %$(ext),$(GENERIC_BINARIES_TARGET_DIR)/%.o,$(filter %$(ext),$(GENERIC_BINARIES_SOURCE_ENTRYPOINTS))))
67
68 # (in) GENERIC_TARGET_LIBRARY
69
70 # (in) GENERIC_TARGET_BINARIES_PREFIX : for binaries naming
71 # (in) GENERIC_TARGET_BINARIES_DIR : for binaries places
72 INTERNAL_TARGET_BINARIES:=$(foreach entrypoint,$(GENERIC_BINARIES_SOURCE_ENTRYPOINTS),$(shell basename $(entrypoint) .c))
73 INTERNAL_TARGET_BINARIES:=$(patsubst %.c,%,$(GENERIC_BINARIES_SOURCE_ENTRYPOINTS))
74 INTERNAL_TARGET_BINARIES:=$(patsubst %,$(GENERIC_TARGET_BINARIES_DIR)/$(GENERIC_TARGET_BINARIES_PREFIX)%,$(INTERNAL_TARGET_BINARIES))
75
76 _INTERNAL_LIBRARY_DEPFILES:=$(foreach ext,$(INTERNAL_SOURCE_EXTENSIONS),\
77         $(patsubst $(GENERIC_LIBRARY_SOURCE_DIR)/%$(ext),$(GENERIC_LIBRARY_TARGET_DIR)/%$(ext).d,$(filter %$(ext),$(INTERNAL_LIBRARY_SOURCE_FILES))))
78 _INTERNAL_BINARIES_DEPFILES:=$(foreach ext,$(INTERNAL_SOURCE_EXTENSIONS),\
79         $(patsubst $(GENERIC_BINARIES_SOURCE_DIR)/%$(ext),$(GENERIC_BINARIES_TARGET_DIR)/%$(ext).d,$(filter %$(ext),$(INTERNAL_BINARIES_COMMON_SOURCE_FILES))))
80 _INTERNAL_BINARIES_DEPFILES+=$(foreach ext,$(INTERNAL_SOURCE_EXTENSIONS),\
81         $(patsubst %$(ext),$(GENERIC_BINARIES_TARGET_DIR)/%$(ext).d,$(filter %$(ext),$(GENERIC_BINARIES_SOURCE_ENTRYPOINTS))))
82
83 ifneq ($(MAKECMDGOALS),clean)
84   INTERNAL_LIBRARY_DEPFILES:=$(_INTERNAL_LIBRARY_DEPFILES)
85   INTERNAL_BINARIES_DEPFILES:=$(_INTERNAL_BINARIES_DEPFILES)
86 endif
87
88 ALL_TO_BE_DONE=                                         \
89         $(INTERNAL_LIBRARY_DEPFILES)                    \
90         $(INTERNAL_BINARIES_DEPFILES)                   \
91         $(INTERNAL_LIBRARY_TARGET_OFILES)               \
92         $(GENERIC_TARGET_LIBRARY)                       \
93         $(INTERNAL_BINARIES_COMMON_TARGET_OFILES)       \
94         $(INTERNAL_BINARIES_TARGET_OENTRYPOINTS)        \
95         $(INTERNAL_TARGET_BINARIES)
96
97 ifeq ($(GENERIC_TARGET_LIBRARY),)
98 ifeq ($(USE_DLL),yes)
99   ALL_TO_BE_DONE+=$(GENERIC_TARGET_BINARIES_DIR)/$(GENERIC_TARGET_BINARIES_PREFIX)$(DLL_ID).dll
100 endif
101 endif
102
103 CREATE_TARGET_DIRECTORY=$(INTERNAL_MKDIR) $(@D)
104
105 all: clean_log $(ALL_TO_BE_DONE)
106
107 clean_log:
108         @rm -f $(GENERIC_BINARIES_TARGET_DIR)/$(INTERNAL_LOG_FILE) $(GENERIC_LIBRARY_TARGET_DIR)/$(INTERNAL_LOG_FILE)
109
110 check:
111         @(cd $(GENERIC_LIBRARY_SOURCE_DIR) ; $(SDK_SOURCE_DIR)/Build/cvsstatus.sh $(SDK_SOURCE_DIR)/Build ADD)
112
113 clean:
114         $(RM) $(ALL_TO_BE_DONE) $(_INTERNAL_LIBRARY_DEPFILES) $(_INTERNAL_BINARIES_DEPFILES)
115
116 update:
117
118 $(TWEAKED_PARROTOS_MAKEFILE): $(PARROTOS_MAKEFILE)
119         @$(CREATE_TARGET_DIRECTORY)
120         @echo "all:" >> $(TWEAKED_PARROTOS_MAKEFILE)
121         @cat $(PARROTOS_MAKEFILE) | grep -v "^[-]*include" | grep -v "^all:" | sed -e "s@^\([A-Z]*[=]*\)\([ \t]*\)\(/\)@\1\2@" | sed -e "s@^clean:@NOCLEAN:@" >> $(TWEAKED_PARROTOS_MAKEFILE)
122
123 ifneq ("$(INTERNAL_LIBRARY_TARGET_OFILES)","")
124 $(GENERIC_TARGET_LIBRARY): $(INTERNAL_LIBRARY_TARGET_OFILES)
125         @$(CREATE_TARGET_DIRECTORY)
126         @$(INTERNAL_ECHO) "ar $(GENERIC_ARFLAGS)" $(subst $(GENERIC_LIBRARY_TARGET_DIR)/,,$@ $^)
127         @rm -f $@
128         @$(INTERNAL_AR) $(GENERIC_ARFLAGS) $@ $^
129 endif
130
131 ifeq ($(USE_DLL),yes)
132 $(GENERIC_TARGET_BINARIES_DIR)/$(GENERIC_TARGET_BINARIES_PREFIX)$(DLL_ID).dll: $(INTERNAL_BINARIES_COMMON_TARGET_OFILES) $(GENERIC_ADD_OFILES) $(GENERIC_BINARIES_LIBS_DEPS)
133 else
134 $(GENERIC_TARGET_BINARIES_DIR)/$(GENERIC_TARGET_BINARIES_PREFIX)%: $(GENERIC_BINARIES_TARGET_DIR)/%.o $(INTERNAL_BINARIES_COMMON_TARGET_OFILES) $(GENERIC_ADD_OFILES) $(GENERIC_BINARIES_LIBS_DEPS)
135 endif
136         @$(CREATE_TARGET_DIRECTORY)
137   ifeq ($(QUIET_BUILD),yes)
138   ifeq ($(USE_NDS),yes)
139         @$(INTERNAL_ECHO) "dsbuild $(GENERIC_TARGET_BINARIES_PREFIX)$*.nds"
140   else
141     ifeq ($(USE_DLL),yes)
142         @$(INTERNAL_ECHO) "ld $(GENERIC_TARGET_BINARIES_PREFIX)$(DLL_ID).dll"
143     else
144         @$(INTERNAL_ECHO) "ld $(GENERIC_TARGET_BINARIES_PREFIX)$*"
145     endif
146   endif
147   endif
148   ifeq ($(USE_DLL),yes)
149         $(GENERIC_COMMAND_PREFIX)dlltool -e $(GENERIC_TARGET_BINARIES_DIR)/$(DLL_ID)_exports.o --export-all-symbols -l $(@:.dll=.lib) $(INTERNAL_BINARIES_COMMON_TARGET_OFILES)
150         $(INTERNAL_CC) --shared -o $@ $(INTERNAL_BINARIES_COMMON_TARGET_OFILES) $(GENERIC_TARGET_BINARIES_DIR)/$(DLL_ID)_exports.o $(GENERIC_ADD_OFILES) $(GENERIC_LIB_PATHS) $(GENERIC_LIBS) $(GENERIC_LDFLAGS) $(LDFLAGS_$(subst /,_,$*))
151         $(RM) $(GENERIC_TARGET_BINARIES_DIR)/$(DLL_ID)_exports.o
152   else
153         $(INTERNAL_CC) -o $@ $(GENERIC_BINARIES_TARGET_DIR)/$*.o $(INTERNAL_BINARIES_COMMON_TARGET_OFILES) $(GENERIC_ADD_OFILES) $(GENERIC_LIB_PATHS) $(GENERIC_LIBS) $(GENERIC_LDFLAGS) $(LDFLAGS_$(subst /,_,$*))
154   endif
155   ifeq ($(RELEASE_BUILD),yes)
156         cp $@ $(shell dirname $@)/sym_$(shell basename $@)
157         $(INTERNAL_STRIP) $@
158   endif
159   ifeq ($(USE_NDS),yes)
160         $(INTERNAL_OBJCOPY) -O binary $@ $@.$(NDS_CPU_TYPE)$(NDS_CPU_NUM)
161         $(INTERNAL_NDSTOOL) -c $@.nds -$(NDS_CPU_NUM) $@.$(NDS_CPU_TYPE)$(NDS_CPU_NUM) $(SILENT)
162         $(INTERNAL_DSBUILD) $@.nds $(SILENT)
163   endif
164
165 # Template build rules
166 # first param  $(1) : rule type (LIBRARY or BINARIES)
167 # second param $(2) : source extension (.c for example)
168 define BUILD_OFILE_TEMPLATE
169   $$(GENERIC_$(1)_TARGET_DIR)/%$(2).d: $$(GENERIC_$(1)_SOURCE_DIR)/%$(2)
170         @$$(CREATE_TARGET_DIRECTORY)
171   ifeq ($$(QUIET_BUILD),yes)
172         @$$(INTERNAL_ECHO) "dep $$*$(2)"
173   endif
174         $$(INTERNAL_CC) -M $$(filter-out -Wall,$$(GENERIC_CFLAGS)) -w $$(CFLAGS_$$(subst /,_,$$*)) $$(GENERIC_INCLUDES) $$(GENERIC_$(1)_SOURCE_DIR)/$$*$(2) > $$@
175 ifeq ($(USE_IPHONE),yes)
176    @sed -ie 's,\(.*\.o\)\([ :]*\),\1 $$@\2,g' $$@
177 else
178         @sed -i 's,\(.*\.o\)\([ :]*\),\1 $$@\2,g' $$@   
179 endif
180   $$(GENERIC_$(1)_TARGET_DIR)/%.o: $$(GENERIC_$(1)_TARGET_DIR)/%$(2).d
181         @$$(CREATE_TARGET_DIRECTORY)
182   ifeq ($$(QUIET_BUILD),yes)
183         @$$(INTERNAL_ECHO) "cc $$*$(2)"
184   endif
185         @echo -E $$(INTERNAL_CC) $$(GENERIC_CFLAGS) $$(CFLAGS_$$(subst /,_,$$*)) $$(GENERIC_INCLUDES) -c -o $$@ $$(GENERIC_$(1)_SOURCE_DIR)/$$*$(2) >> $$(GENERIC_$(1)_TARGET_DIR)/$(INTERNAL_LOG_FILE)
186         $$(INTERNAL_CC) $$(GENERIC_CFLAGS) $$(CFLAGS_$$(subst /,_,$$*)) $$(GENERIC_INCLUDES) -c -o $$@ $$(GENERIC_$(1)_SOURCE_DIR)/$$*$(2) 2>&1 >> $$(GENERIC_$(1)_TARGET_DIR)/$(INTERNAL_LOG_FILE)
187   ifeq ("$$(USE_MEMPROT)","yes")
188   ifdef GENERIC_DOMAIN
189     ifeq ($$(QUIET_BUILD),yes)
190         @$$(INTERNAL_ECHO) "put_in_domain $$(GENERIC_DOMAIN) $$*.o"
191         @$$(PUT_IN_DOMAIN) $$(GENERIC_DOMAIN) $$@
192       else
193         $$(PUT_IN_DOMAIN) $$(GENERIC_DOMAIN) $$@
194       endif
195   else
196     ifeq ($$(QUIET_BUILD),yes)
197         @if [ ! -z $$(DOMAIN_$$(subst /,_,$$*)) ]; then                                 \
198                 $$(INTERNAL_ECHO) "put_in_domain $$(DOMAIN_$$(subst /,_,$$*)) $$*.o";   \
199                 $$(PUT_IN_DOMAIN) $$(DOMAIN_$$(subst /,_,$$*)) $$@;                     \
200         fi
201     else
202         @if [ ! -z $$(DOMAIN_$$(subst /,_,$$*)) ]; then                                 \
203                 $$(INTERNAL_ECHO) $$(PUT_IN_DOMAIN) $$(DOMAIN_$$(subst /,_,$$*)) $$@;   \
204                 $$(PUT_IN_DOMAIN) $$(DOMAIN_$$(subst /,_,$$*)) $$@;                     \
205         fi
206     endif
207   endif
208   endif
209 endef
210
211 # Build rules for each extension
212 $(foreach ext,$(INTERNAL_SOURCE_EXTENSIONS),$(eval $(call BUILD_OFILE_TEMPLATE,LIBRARY,$(ext))))
213 $(foreach ext,$(INTERNAL_SOURCE_EXTENSIONS),$(eval $(call BUILD_OFILE_TEMPLATE,BINARIES,$(ext))))
214
215 ifneq ($(MAKECMDGOALS),clean)
216 ifneq ($(MAKECMDGOALS),check)
217   -include $(INTERNAL_LIBRARY_DEPFILES) $(INTERNAL_BINARIES_DEPFILES)
218 endif
219 endif
220