ArDrone SDK 1.8 added
[mardrone] / mardrone / ARDrone_SDK_Version_1_8_20110726 / ARDroneLib / VP_SDK / Build / Makefile
1
2 ###########################################################################################
3 #
4 # Makefile called externally to build the SDK, alone or to be used in an application.
5 # ----------------------------------------------------------------------------------
6 # Author : aurelien.morelle@parrot.com
7 # Date   : 2007/05/16
8 #
9 # Builds libraries and examples.
10 #
11 # Needs some variables to be passed for it to know what to do.
12 # Variables definitions tests are done in varcontrol.makefile
13 #
14 ###########################################################################################
15
16
17                                ##############################                              
18 ###########################################################################################
19 # Variables definitions management
20 ###########################################################################################
21 include varcontrol.makefile
22 ###########################################################################################
23                                ##############################                              
24
25
26 #
27 # At that point, following global variables are defined :
28 # a : always / c : conditional
29
30 #       (a) NO_COM
31 #       (a) USE_BLUEZ
32 #       (a) USE_SDK
33 #       (a) RELEASE_BUILD
34
35 #       (c) SDK_VERSION
36 #       (c) PROJECT
37 #       (c) FF_ARCH
38
39
40                                ##############################                              
41 ###########################################################################################
42 # System variable definitions
43 ###########################################################################################
44 include sysvar.makefile
45 ###########################################################################################
46                                ##############################                              
47
48
49 #
50 # At that point, following global variables are defined :
51 # a : always / c : conditional
52
53 #       (a) OS_TARGET_DIR
54 #       (a) VLIB_TARGET_DIR
55 #       (c) COM_TARGET_DIR
56 #       (c) CODEC_TARGET_DIR
57 #       (c) JPEG_TARGET_DIR
58 #       (c) SDK_TARGET_DIR
59
60
61                                ##############################                              
62 ###########################################################################################
63 # Main rules
64 ###########################################################################################
65
66 TARGETS=vlib parrotOS_core parrotOS_utils parrotOS_drivers parrotOS_devs parrotOS_codec libplf sdk lib app
67
68 define ADD_RULE_TEMPLATE
69   ifeq ($$(USE_$(shell echo $(1) | tr "a-z" "A-Z")),yes)
70     TO_BUILD+=build_$(1)
71   endif
72 endef
73
74 # Add rule for each target
75 $(foreach target,$(TARGETS),$(eval $(call ADD_RULE_TEMPLATE,$(target))))
76
77 .PHONY: $(foreach target,$(TARGETS),build_$(target) clean_$(target))
78
79 all $(MAKECMDGOALS): $(TO_BUILD)
80         @if [ $(MAKECMDGOALS) ] && [ $(MAKECMDGOALS) = check ] ; then $(SDK_SOURCE_DIR)/Build/cvsstatus.sh $(SDK_SOURCE_DIR)/Build END ; fi
81
82 before_check:
83         @if [ $(MAKECMDGOALS) ] && [ $(MAKECMDGOALS) = check ] ; then rm -rf *.log ; fi
84
85 define GENERIC_RULES_TEMPLATE
86   ifneq ($(1),dll)
87     build_$(1): before_check
88         @$(MAKE) -f $(1).makefile $(MAKECMDGOALS)
89   endif
90 endef
91
92 build_dll: before_check
93         @$(MAKE) -f app.makefile $(MAKECMDGOALS)
94
95
96 # Build rules for each target
97 $(foreach target,$(TARGETS),$(eval $(call GENERIC_RULES_TEMPLATE,$(target))))
98 ###########################################################################################
99                                ##############################                              
100
101
102                                ##############################                              
103 ###########################################################################################
104 # Update generic flags
105 ###########################################################################################
106 FLAGS_FILTER_OUT=-O0 -O1 -O2 -O3 -Os -fno-rtti -frtti -fvtable-gc -Winline -Woverloaded-virtual -lstdc++
107 ifneq ($(USE_RTMON),yes)
108   FLAGS_FILTER_OUT+=-g
109 endif
110
111 DEFINE_FLAGS=USE_WIFI USE_CAMIF USE_BASEBAND NO_COM USE_SERIAL USE_VLIB USE_MINGW32 USE_DLL USE_LINUX USE_ELINUX USE_PARROTOS_CORE USE_PARROTOS_UTILS USE_PARROTOS_DRIVERS USE_PARROTOS_DEVS USE_PARROTOS_CODEC USE_LIBPLF USE_BROADCOM USE_IWLIB USE_ANDROID
112
113
114 ifeq ($(USE_ELINUX),yes)
115    include elinux.makefile
116 else
117    GENERIC_CFLAGS+= -Wall
118 endif
119
120 ifeq ($(USE_LIBPLF),yes)
121    GENERIC_CFLAGS+= -DOS_LINUX
122 endif
123
124 GENERIC_CFLAGS+=-Wall 
125 #-Werror -Wfatal-errors -Wno-unused-variable
126
127 GENERIC_LDFLAGS+=-Wl,--warn-common
128
129 ifeq ("$(BUILD_MODE)","PROD_MODE")
130   GENERIC_CFLAGS+=-O3 -DCOMPIL_MODE_PROD
131   GENERIC_CFLAGS:=$(filter-out -DNDEBUG,$(GENERIC_CFLAGS)) -DNDEBUG
132   GENERIC_LDFLAGS+=-O3
133   ifeq ($(USE_RTMON),yes)
134     GENERIC_CFLAGS+=-g
135     GENERIC_LDFLAGS+=-g
136   endif
137 endif
138 ifeq ("$(BUILD_MODE)","DEBUG_MODE")
139   GENERIC_CFLAGS+=-g -O0 -DDEBUG_MODE -DDEBUG -D_DEBUG
140   GENERIC_LDFLAGS+=-g -O0
141 endif
142
143 ifeq ($(USE_NDS),yes)
144     GENERIC_CFLAGS+=-D__NDS__ -DUSE_NDS
145     ifeq ($(NDS_CPU),ARM7)
146       GENERIC_CFLAGS+=-DARM7 -DSDK_ARM7 -mcpu=arm7tdmi -mtune=arm7tdmi
147       GENERIC_LDFLAGS+=-specs=ds_arm7.specs
148     endif
149     ifeq ($(NDS_CPU),ARM9)
150       GENERIC_CFLAGS+=-DARM9 -DSDK_ARM9 -mtune=arm9tdmi -march=armv5te
151       GENERIC_LDFLAGS+=-specs=ds_arm9.specs
152     endif
153     GENERIC_CFLAGS+=-fomit-frame-pointer -ffast-math
154     GENERIC_LDFLAGS+=-mno-fpu -Wl,-Map,.map
155 else
156     ifeq ($(USE_ELINUX),yes)    
157       GENERIC_CFLAGS+=-D_ELINUX=$(USE_ELINUX) -D__elinux__ -D__ELINUX__ -DPARROT5
158       ifeq ($(PROCESSOR),ARM_CORTEX_A8)
159         ## Check http://processors.wiki.ti.com/index.php/Cortex-A8      
160         GENERIC_CFLAGS+=-march=armv7-a -mtune=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp
161       endif
162       ifeq ($(PROCESSOR),ARM_926EJS)
163         ## Check http://www.codesourcery.com/sgpp/lite/arm/portal/kbentry26
164         GENERIC_CFLAGS+=-mcpu=arm926ej-s
165       endif
166     else
167              ifneq ($(USE_MINGW32),yes)
168                      GENERIC_CFLAGS+=-D__linux__
169                 
170            ifeq ($(USE_IPHONE),yes)
171                         GENERIC_CFLAGS+=-D__MACOSX__ -std=gnu99
172                         ifeq ($(IPHONE_PLATFORM),iphoneos)
173                            GENERIC_CFLAGS+=-arch $(ARDRONE_TARGET_ARCH)
174                         else  
175                            GENERIC_CFLAGS+=-arch i386
176                         endif
177                      else  
178                         ifeq ($(USE_LINUX), yes)        
179                                GENERIC_CFLAGS+=-D__LINUX__
180               else
181                  ifeq ($(USE_ANDROID),yes)
182                                                   TARGET_arm_release_CFLAGS :=  -O2 \
183                                                                 -fomit-frame-pointer \
184                                                                 -fstrict-aliasing    \
185                                                                 -funswitch-loops     \
186                                                                 -finline-limit=300
187
188                                                   TARGET_arm_debug_CFLAGS := $(TARGET_arm_release_CFLAGS) \
189                                                                 -fno-omit-frame-pointer \
190                                                                 -fno-strict-aliasing
191
192                                                   GENERIC_CFLAGS+= $(TARGET_arm_debug_CFLAGS) \
193                                                                  -fstack-protector \
194                                                                  -fno-short-enums \
195                                                                  -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ \
196                                                                  -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__
197                  endif
198                         endif
199                 endif
200         endif
201            endif
202 endif
203
204 GENERIC_CFLAGS+=-DTARGET_CPU_ARM=$(TARGET_CPU_ARM) -DTARGET_CPU_X86=$(TARGET_CPU_X86)
205
206 ifeq ("$(USE_MEMPROT)","yes")
207   GENERIC_CFLAGS+=-fno-common -mlong-calls
208 endif
209
210 ifeq ("$(USE_PVSP)","yes")
211   GENERIC_CFLAGS+=-DBLUES_SUPPORT_PVSP_BLOCK
212 endif
213
214 ifeq ("$(USE_BONJOUR)","yes")
215   GENERIC_CFLAGS+=                              \
216         -DMDNS_DEBUGMSGS=0                      \
217         -DMDNS_LOG_ANSWER_SUPPRESSION_TIMES=0   \
218         -DCOMPILER_LIKES_PRAGMA_MARK=0          \
219         -DHAVE_IPV6=0                           \
220         -DUSES_NETLINK=0                        \
221         -DTARGET_OS_LINUX=1                     \
222         -DNOT_HAVE_DAEMON=1                     \
223         -Dsigset_t=cyg_uint32
224 endif
225
226 define ADD_DEFINE_FLAG_TEMPLATE
227   ifeq ($$($(1)),yes)
228     GENERIC_CFLAGS+=-D$(1)
229   endif
230 endef
231
232 # Add define flags
233 $(foreach flag,$(DEFINE_FLAGS),$(eval $(call ADD_DEFINE_FLAG_TEMPLATE,$(flag))))
234
235 # All that needs to be exported
236 ########################
237 export GENERIC_CFLAGS
238 export GENERIC_LDFLAGS
239 export GENERIC_ARFLAGS=rcs
240 ###########################################################################################
241                                ##############################                              
242