Cync
[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
14 INTERNAL_SOURCE_EXTENSIONS= .c .S .s .cpp
15
16 INTERNAL_MKDIR=mkdir -p
17 INTERNAL_ECHO=echo
18
19 # (in) GENERIC_COMMAND_PREFIX
20 INTERNAL_CC:=$(GENERIC_COMMAND_PREFIX)gcc
21 INTERNAL_AR:=$(GENERIC_COMMAND_PREFIX)ar
22 INTERNAL_OBJCOPY:=$(GENERIC_COMMAND_PREFIX)objcopy
23 INTERNAL_STRIP:=$(GENERIC_COMMAND_PREFIX)strip
24
25 # (in) GENERIC_CFLAGS
26 # (in) GENERIC_LDFLAGS
27 # (in) GENERIC_ARFLAGS
28
29 # (in) GENERIC_INCLUDES
30
31 # (in) GENERIC_ADD_OFILES : for linking with
32
33 # (in) GENERIC_LIBRARY_SOURCE_DIR
34 # (in) GENERIC_LIBRARY_SOURCE_FILES
35 # (in) GENERIC_LIBRARY_TARGET_DIR : for .o files
36 INTERNAL_LIBRARY_SOURCE_FILES:=$(patsubst %,$(GENERIC_LIBRARY_SOURCE_DIR)/%,$(GENERIC_LIBRARY_SOURCE_FILES))
37 INTERNAL_LIBRARY_TARGET_OFILES:=$(foreach ext,$(INTERNAL_SOURCE_EXTENSIONS),\
38         $(patsubst $(GENERIC_LIBRARY_SOURCE_DIR)/%$(ext),$(GENERIC_LIBRARY_TARGET_DIR)/%.o,$(filter %$(ext),$(INTERNAL_LIBRARY_SOURCE_FILES))))
39
40 # (in) GENERIC_BINARIES_SOURCE_DIR
41 # (in) GENERIC_BINARIES_COMMON_SOURCE_FILES
42 # (in) GENERIC_BINARIES_SOURCE_ENTRYPOINTS
43 # (in) GENERIC_BINARIES_TARGET_DIR : for .o files
44 INTERNAL_BINARIES_COMMON_SOURCE_FILES:=$(patsubst %,$(GENERIC_BINARIES_SOURCE_DIR)/%,$(GENERIC_BINARIES_COMMON_SOURCE_FILES))
45 INTERNAL_BINARIES_COMMON_TARGET_OFILES:=$(foreach ext,$(INTERNAL_SOURCE_EXTENSIONS),\
46         $(patsubst $(GENERIC_BINARIES_SOURCE_DIR)/%$(ext),$(GENERIC_BINARIES_TARGET_DIR)/%.o,$(filter %$(ext),$(INTERNAL_BINARIES_COMMON_SOURCE_FILES))))
47 INTERNAL_BINARIES_TARGET_OENTRYPOINTS:=$(foreach ext,$(INTERNAL_SOURCE_EXTENSIONS),\
48         $(patsubst %$(ext),$(GENERIC_BINARIES_TARGET_DIR)/%.o,$(filter %$(ext),$(GENERIC_BINARIES_SOURCE_ENTRYPOINTS))))
49
50 # (in) GENERIC_TARGET_LIBRARY
51
52 # (in) GENERIC_TARGET_BINARIES_PREFIX : for binaries naming
53 # (in) GENERIC_TARGET_BINARIES_DIR : for binaries places
54 INTERNAL_TARGET_BINARIES:=$(foreach entrypoint,$(GENERIC_BINARIES_SOURCE_ENTRYPOINTS),$(shell basename $(entrypoint) .c))
55 INTERNAL_TARGET_BINARIES:=$(patsubst %.c,%,$(GENERIC_BINARIES_SOURCE_ENTRYPOINTS))
56 INTERNAL_TARGET_BINARIES:=$(patsubst %,$(GENERIC_TARGET_BINARIES_DIR)/$(GENERIC_TARGET_BINARIES_PREFIX)%,$(INTERNAL_TARGET_BINARIES))
57
58
59 ALL_TO_BE_DONE=                                         \
60         $(INTERNAL_LIBRARY_TARGET_OFILES)               \
61         $(GENERIC_TARGET_LIBRARY)                       \
62         $(INTERNAL_BINARIES_COMMON_TARGET_OFILES)       \
63         $(INTERNAL_BINARIES_TARGET_OENTRYPOINTS)        \
64         $(INTERNAL_TARGET_BINARIES)
65
66
67 CREATE_TARGET_DIRECTORY=$(INTERNAL_MKDIR) $(@D)
68
69 all: clean_log $(ALL_TO_BE_DONE)
70
71 clean_log:
72         @rm -f $(GENERIC_BINARIES_TARGET_DIR)/$(INTERNAL_LOG_FILE) $(GENERIC_LIBRARY_TARGET_DIR)/$(INTERNAL_LOG_FILE)
73
74 check:
75         @(cd $(GENERIC_LIBRARY_SOURCE_DIR) ; $(SDK_SOURCE_DIR)/Build/cvsstatus.sh $(SDK_SOURCE_DIR)/Build ADD)
76
77 clean:
78         $(RM) $(ALL_TO_BE_DONE) $(_INTERNAL_LIBRARY_DEPFILES) $(_INTERNAL_BINARIES_DEPFILES)
79
80 update:
81
82 $(GENERIC_TARGET_LIBRARY): $(INTERNAL_LIBRARY_TARGET_OFILES)
83         @$(CREATE_TARGET_DIRECTORY)
84         @$(INTERNAL_ECHO) "ar $(GENERIC_ARFLAGS)" $(subst $(GENERIC_LIBRARY_TARGET_DIR)/,,$@ $^)
85         @rm -f $@
86         @$(INTERNAL_AR) $(GENERIC_ARFLAGS) $@ $^
87 endif
88
89 # Template build rules
90 # first param  $(1) : rule type (LIBRARY or BINARIES)
91 # second param $(2) : source extension (.c for example)
92 define BUILD_OFILE_TEMPLATE
93   $$(GENERIC_$(1)_TARGET_DIR)/%$(2).d: $$(GENERIC_$(1)_SOURCE_DIR)/%$(2)
94         @$$(CREATE_TARGET_DIRECTORY)
95   ifeq ($$(QUIET_BUILD),yes)
96         @$$(INTERNAL_ECHO) "dep $$*$(2)"
97   endif
98         $$(INTERNAL_CC) -M $$(filter-out -Wall,$$(GENERIC_CFLAGS)) -w $$(CFLAGS_$$(subst /,_,$$*)) $$(GENERIC_INCLUDES) $$(GENERIC_$(1)_SOURCE_DIR)/$$*$(2) > $$@
99 ifeq ($(USE_IPHONE),yes)
100    @sed -ie 's,\(.*\.o\)\([ :]*\),\1 $$@\2,g' $$@
101 else
102         @sed -i 's,\(.*\.o\)\([ :]*\),\1 $$@\2,g' $$@   
103 endif
104   $$(GENERIC_$(1)_TARGET_DIR)/%.o: $$(GENERIC_$(1)_TARGET_DIR)/%$(2).d
105         @$$(CREATE_TARGET_DIRECTORY)
106   ifeq ($$(QUIET_BUILD),yes)
107         @$$(INTERNAL_ECHO) "cc $$*$(2)"
108   endif
109         @echo -E $$(INTERNAL_CC) $$(GENERIC_CFLAGS) $$(CFLAGS_$$(subst /,_,$$*)) $$(GENERIC_INCLUDES) -c -o $$@ $$(GENERIC_$(1)_SOURCE_DIR)/$$*$(2) >> $$(GENERIC_$(1)_TARGET_DIR)/$(INTERNAL_LOG_FILE)
110         $$(INTERNAL_CC) $$(GENERIC_CFLAGS) $$(CFLAGS_$$(subst /,_,$$*)) $$(GENERIC_INCLUDES) -c -o $$@ $$(GENERIC_$(1)_SOURCE_DIR)/$$*$(2) 2>&1 >> $$(GENERIC_$(1)_TARGET_DIR)/$(INTERNAL_LOG_FILE)
111   ifeq ("$$(USE_MEMPROT)","yes")
112   ifdef GENERIC_DOMAIN
113     ifeq ($$(QUIET_BUILD),yes)
114         @$$(INTERNAL_ECHO) "put_in_domain $$(GENERIC_DOMAIN) $$*.o"
115         @$$(PUT_IN_DOMAIN) $$(GENERIC_DOMAIN) $$@
116       else
117         $$(PUT_IN_DOMAIN) $$(GENERIC_DOMAIN) $$@
118       endif
119   else
120     ifeq ($$(QUIET_BUILD),yes)
121         @if [ ! -z $$(DOMAIN_$$(subst /,_,$$*)) ]; then                                 \
122                 $$(INTERNAL_ECHO) "put_in_domain $$(DOMAIN_$$(subst /,_,$$*)) $$*.o";   \
123                 $$(PUT_IN_DOMAIN) $$(DOMAIN_$$(subst /,_,$$*)) $$@;                     \
124         fi
125     else
126         @if [ ! -z $$(DOMAIN_$$(subst /,_,$$*)) ]; then                                 \
127                 $$(INTERNAL_ECHO) $$(PUT_IN_DOMAIN) $$(DOMAIN_$$(subst /,_,$$*)) $$@;   \
128                 $$(PUT_IN_DOMAIN) $$(DOMAIN_$$(subst /,_,$$*)) $$@;                     \
129         fi
130     endif
131   endif
132   endif
133 endef
134
135 # Build rules for each extension
136 $(foreach ext,$(INTERNAL_SOURCE_EXTENSIONS),$(eval $(call BUILD_OFILE_TEMPLATE,LIBRARY,$(ext))))
137 $(foreach ext,$(INTERNAL_SOURCE_EXTENSIONS),$(eval $(call BUILD_OFILE_TEMPLATE,BINARIES,$(ext))))
138
139 ifneq ($(MAKECMDGOALS),clean)
140 ifneq ($(MAKECMDGOALS),check)
141   -include $(INTERNAL_LIBRARY_DEPFILES) $(INTERNAL_BINARIES_DEPFILES)
142 endif
143 endif
144