xref: /aosp_15_r20/system/chre/build/build_template.mk (revision 84e339476a462649f82315436d70fd732297a399)
1*84e33947SAndroid Build Coastguard Worker#
2*84e33947SAndroid Build Coastguard Worker# Build Template
3*84e33947SAndroid Build Coastguard Worker#
4*84e33947SAndroid Build Coastguard Worker# Invoke this template with a set of variables in order to make build targets
5*84e33947SAndroid Build Coastguard Worker# for a build variant that targets a specific CPU architecture.
6*84e33947SAndroid Build Coastguard Worker#
7*84e33947SAndroid Build Coastguard Worker
8*84e33947SAndroid Build Coastguard Worker################################################################################
9*84e33947SAndroid Build Coastguard Worker#
10*84e33947SAndroid Build Coastguard Worker# Build Template
11*84e33947SAndroid Build Coastguard Worker#
12*84e33947SAndroid Build Coastguard Worker# Invoke this to instantiate a set of build targets. Two build targets are
13*84e33947SAndroid Build Coastguard Worker# produced by this template that can be either used directly or depended on to
14*84e33947SAndroid Build Coastguard Worker# perform post processing (ie: during a nanoapp build).
15*84e33947SAndroid Build Coastguard Worker#
16*84e33947SAndroid Build Coastguard Worker# TARGET_NAME_ar - An archive of the code compiled by this template.
17*84e33947SAndroid Build Coastguard Worker# TARGET_NAME_so - A shared object of the code compiled by this template.
18*84e33947SAndroid Build Coastguard Worker# TARGET_NAME    - A convenience target that depends on the above archive and
19*84e33947SAndroid Build Coastguard Worker#                  shared object targets.
20*84e33947SAndroid Build Coastguard Worker#
21*84e33947SAndroid Build Coastguard Worker# Nanoapps can optionally use the NANOAPP_LATE_CFLAGS variable to provide
22*84e33947SAndroid Build Coastguard Worker# compile flags, which will be added at the end of the compile command
23*84e33947SAndroid Build Coastguard Worker# (for instance, it can be used to override common flags in COMMON_CFLAGS).
24*84e33947SAndroid Build Coastguard Worker#
25*84e33947SAndroid Build Coastguard Worker# Argument List:
26*84e33947SAndroid Build Coastguard Worker#     $1  - TARGET_NAME          - The name of the target being built.
27*84e33947SAndroid Build Coastguard Worker#     $2  - TARGET_CFLAGS        - The compiler flags to use for this target.
28*84e33947SAndroid Build Coastguard Worker#     $3  - TARGET_CC            - The C/C++ compiler for the target variant.
29*84e33947SAndroid Build Coastguard Worker#     $4  - TARGET_SO_LDFLAGS    - The linker flags to use for this target.
30*84e33947SAndroid Build Coastguard Worker#     $5  - TARGET_LD            - The linker for the target variant.
31*84e33947SAndroid Build Coastguard Worker#     $6  - TARGET_ARFLAGS       - The archival flags to use for this target.
32*84e33947SAndroid Build Coastguard Worker#     $7  - TARGET_AR            - The archival tool for the targer variant.
33*84e33947SAndroid Build Coastguard Worker#     $8  - TARGET_VARIANT_SRCS  - Source files specific to this variant.
34*84e33947SAndroid Build Coastguard Worker#     $9  - TARGET_BUILD_BIN     - Build a binary. Typically this means that the
35*84e33947SAndroid Build Coastguard Worker#                                  source files provided include an entry point.
36*84e33947SAndroid Build Coastguard Worker#     $10 - TARGET_BIN_LDFLAGS   - Linker flags that are passed to the linker
37*84e33947SAndroid Build Coastguard Worker#                                  when building an executable binary.
38*84e33947SAndroid Build Coastguard Worker#     $11 - TARGET_SO_EARLY_LIBS - Link against a set of libraries when building
39*84e33947SAndroid Build Coastguard Worker#                                  a shared object or binary. These are placed
40*84e33947SAndroid Build Coastguard Worker#                                  before the objects produced by this build.
41*84e33947SAndroid Build Coastguard Worker#     $12 - TARGET_SO_LATE_LIBS  - Link against a set of libraries when building
42*84e33947SAndroid Build Coastguard Worker#                                  a shared object or binary. These are placed
43*84e33947SAndroid Build Coastguard Worker#                                  after the objects produced by this build.
44*84e33947SAndroid Build Coastguard Worker#     $13 - TARGET_PLATFORM_ID   - The ID of the platform that this nanoapp
45*84e33947SAndroid Build Coastguard Worker#                                  build targets.
46*84e33947SAndroid Build Coastguard Worker#     $14 - TARGET_ACONFIGFLAGS  - The list of aconfig flag value files specific
47*84e33947SAndroid Build Coastguard Worker#                                  to this build target
48*84e33947SAndroid Build Coastguard Worker#     $15 - TARGET_ADDITIONAL_LD - Additional linker for this target variant.
49*84e33947SAndroid Build Coastguard Worker#
50*84e33947SAndroid Build Coastguard Worker################################################################################
51*84e33947SAndroid Build Coastguard Worker
52*84e33947SAndroid Build Coastguard Workerifndef BUILD_TEMPLATE
53*84e33947SAndroid Build Coastguard Workerdefine BUILD_TEMPLATE
54*84e33947SAndroid Build Coastguard Worker
55*84e33947SAndroid Build Coastguard Worker# Target Objects ###############################################################
56*84e33947SAndroid Build Coastguard Worker
57*84e33947SAndroid Build Coastguard Worker# Remove duplicates
58*84e33947SAndroid Build Coastguard WorkerCOMMON_SRCS := $(sort $(COMMON_SRCS))
59*84e33947SAndroid Build Coastguard Worker
60*84e33947SAndroid Build Coastguard Worker# Source files.
61*84e33947SAndroid Build Coastguard Worker$(1)_CC_SRCS = $$(filter %.cc, $(COMMON_SRCS) $(8))
62*84e33947SAndroid Build Coastguard Worker$(1)_CPP_SRCS = $$(filter %.cpp, $(COMMON_SRCS) $(8))
63*84e33947SAndroid Build Coastguard Worker$(1)_C_SRCS = $$(filter %.c, $(COMMON_SRCS) $(8))
64*84e33947SAndroid Build Coastguard Worker$(1)_S_SRCS = $$(filter %.S, $(COMMON_SRCS) $(8))
65*84e33947SAndroid Build Coastguard Worker
66*84e33947SAndroid Build Coastguard Worker# Object files.
67*84e33947SAndroid Build Coastguard Worker$(1)_OBJS_DIR = $(1)_objs
68*84e33947SAndroid Build Coastguard Worker$(1)_CC_OBJS = $$(patsubst %.cc, $(OUT)/$$($(1)_OBJS_DIR)/%.o, \
69*84e33947SAndroid Build Coastguard Worker                           $$($(1)_CC_SRCS))
70*84e33947SAndroid Build Coastguard Worker$(1)_CPP_OBJS = $$(patsubst %.cpp, $(OUT)/$$($(1)_OBJS_DIR)/%.o, \
71*84e33947SAndroid Build Coastguard Worker                            $$($(1)_CPP_SRCS))
72*84e33947SAndroid Build Coastguard Worker$(1)_C_OBJS = $$(patsubst %.c, $(OUT)/$$($(1)_OBJS_DIR)/%.o, \
73*84e33947SAndroid Build Coastguard Worker                          $$($(1)_C_SRCS))
74*84e33947SAndroid Build Coastguard Worker$(1)_S_OBJS = $$(patsubst %.S, $(OUT)/$$($(1)_OBJS_DIR)/%.o, \
75*84e33947SAndroid Build Coastguard Worker                          $$($(1)_S_SRCS))
76*84e33947SAndroid Build Coastguard Worker
77*84e33947SAndroid Build Coastguard Worker# Automatic dependency resolution Makefiles.
78*84e33947SAndroid Build Coastguard Worker$(1)_CC_DEPS = $$(patsubst %.cc, $(OUT)/$$($(1)_OBJS_DIR)/%.d, \
79*84e33947SAndroid Build Coastguard Worker                           $$($(1)_CC_SRCS))
80*84e33947SAndroid Build Coastguard Worker$(1)_CPP_DEPS = $$(patsubst %.cpp, $(OUT)/$$($(1)_OBJS_DIR)/%.d, \
81*84e33947SAndroid Build Coastguard Worker                            $$($(1)_CPP_SRCS))
82*84e33947SAndroid Build Coastguard Worker$(1)_C_DEPS = $$(patsubst %.c, $(OUT)/$$($(1)_OBJS_DIR)/%.d, \
83*84e33947SAndroid Build Coastguard Worker                          $$($(1)_C_SRCS))
84*84e33947SAndroid Build Coastguard Worker$(1)_S_DEPS = $$(patsubst %.S, $(OUT)/$$($(1)_OBJS_DIR)/%.d, \
85*84e33947SAndroid Build Coastguard Worker                          $$($(1)_S_SRCS))
86*84e33947SAndroid Build Coastguard Worker
87*84e33947SAndroid Build Coastguard Worker# Add object file directories.
88*84e33947SAndroid Build Coastguard Worker$(1)_DIRS = $$(sort $$(dir $$($(1)_CC_OBJS) \
89*84e33947SAndroid Build Coastguard Worker                           $$($(1)_CPP_OBJS) \
90*84e33947SAndroid Build Coastguard Worker                           $$($(1)_C_OBJS) \
91*84e33947SAndroid Build Coastguard Worker                           $$($(1)_S_OBJS)))
92*84e33947SAndroid Build Coastguard Worker
93*84e33947SAndroid Build Coastguard Worker# Outputs ######################################################################
94*84e33947SAndroid Build Coastguard Worker
95*84e33947SAndroid Build Coastguard Worker# Shared Object
96*84e33947SAndroid Build Coastguard Worker$(1)_SO = $(OUT)/$(1)/$(OUTPUT_NAME).so
97*84e33947SAndroid Build Coastguard Worker
98*84e33947SAndroid Build Coastguard Worker# Static Archive
99*84e33947SAndroid Build Coastguard Worker$(1)_AR = $(OUT)/$(1)/$(OUTPUT_NAME).a
100*84e33947SAndroid Build Coastguard Worker
101*84e33947SAndroid Build Coastguard Worker# Nanoapp Header
102*84e33947SAndroid Build Coastguard Worker$(1)_HEADER = $$(if $(IS_NANOAPP_BUILD), $(OUT)/$(1)/$(OUTPUT_NAME).napp_header, )
103*84e33947SAndroid Build Coastguard Worker
104*84e33947SAndroid Build Coastguard Worker# Optional Binary
105*84e33947SAndroid Build Coastguard Worker$(1)_BIN = $$(if $(9), $(OUT)/$(1)/$(OUTPUT_NAME), )
106*84e33947SAndroid Build Coastguard Worker
107*84e33947SAndroid Build Coastguard Worker# Optional token mapping
108*84e33947SAndroid Build Coastguard Worker$(1)_TOKEN_MAP = $$(if $(CHRE_TOKENIZED_LOGGING_ENABLED), \
109*84e33947SAndroid Build Coastguard Worker                    $(OUT)/$(1)/$(OUTPUT_NAME)_log_database.bin,)
110*84e33947SAndroid Build Coastguard Worker
111*84e33947SAndroid Build Coastguard Worker$(1)_TOKEN_MAP_CSV = $$(if $(CHRE_TOKENIZED_LOGGING_ENABLED), \
112*84e33947SAndroid Build Coastguard Worker                        $(OUT)/$(1)/$(OUTPUT_NAME)_log_database.csv,)
113*84e33947SAndroid Build Coastguard Worker
114*84e33947SAndroid Build Coastguard Worker# Top-level Build Rule #########################################################
115*84e33947SAndroid Build Coastguard Worker
116*84e33947SAndroid Build Coastguard Worker# Define the phony target.
117*84e33947SAndroid Build Coastguard Worker.PHONY: $(1)_ar
118*84e33947SAndroid Build Coastguard Worker$(1)_ar: $$($(1)_AR)
119*84e33947SAndroid Build Coastguard Worker
120*84e33947SAndroid Build Coastguard Worker.PHONY: $(1)_so
121*84e33947SAndroid Build Coastguard Worker$(1)_so: $$($(1)_SO)
122*84e33947SAndroid Build Coastguard Worker
123*84e33947SAndroid Build Coastguard Worker.PHONY: $(1)_bin
124*84e33947SAndroid Build Coastguard Worker$(1)_bin: $$($(1)_BIN)
125*84e33947SAndroid Build Coastguard Worker
126*84e33947SAndroid Build Coastguard Worker.PHONY: $(1)_header
127*84e33947SAndroid Build Coastguard Worker$(1)_header: $$($(1)_HEADER)
128*84e33947SAndroid Build Coastguard Worker
129*84e33947SAndroid Build Coastguard Worker.PHONY: $(1)_token_map
130*84e33947SAndroid Build Coastguard Worker$(1)_token_map: $$($(1)_TOKEN_MAP)
131*84e33947SAndroid Build Coastguard Worker
132*84e33947SAndroid Build Coastguard Worker.PHONY: $(1)_flags
133*84e33947SAndroid Build Coastguard Worker$(1)_flags: $$((1)_FLAGS)
134*84e33947SAndroid Build Coastguard Worker
135*84e33947SAndroid Build Coastguard Worker.PHONY: $(1)
136*84e33947SAndroid Build Coastguard Workerifeq ($(IS_ARCHIVE_ONLY_BUILD),true)
137*84e33947SAndroid Build Coastguard Worker$(1): $(1)_flags $(1)_ar $(1)_token_map
138*84e33947SAndroid Build Coastguard Workerelse
139*84e33947SAndroid Build Coastguard Worker$(1): $(1)_flags $(1)_ar $(1)_so $(1)_bin $(1)_header $(1)_token_map
140*84e33947SAndroid Build Coastguard Workerendif
141*84e33947SAndroid Build Coastguard Worker
142*84e33947SAndroid Build Coastguard Worker# If building the runtime, simply add the archive and shared object to the all
143*84e33947SAndroid Build Coastguard Worker# target. When building CHRE, it is expected that this runtime just be linked
144*84e33947SAndroid Build Coastguard Worker# into another build system (or the entire runtime is built using another build
145*84e33947SAndroid Build Coastguard Worker# system).
146*84e33947SAndroid Build Coastguard Workerifeq ($(IS_NANOAPP_BUILD),)
147*84e33947SAndroid Build Coastguard Workerall: $(1)
148*84e33947SAndroid Build Coastguard Workerendif
149*84e33947SAndroid Build Coastguard Worker
150*84e33947SAndroid Build Coastguard Worker# Nanoapp Header Generation ####################################################
151*84e33947SAndroid Build Coastguard Worker
152*84e33947SAndroid Build Coastguard Worker#
153*84e33947SAndroid Build Coastguard Worker# Whoa there... what have we here? Some binary file generation ala bash? ಠ_ಠ
154*84e33947SAndroid Build Coastguard Worker#
155*84e33947SAndroid Build Coastguard Worker# The following build rule generates a nanoapp header. A nanoapp header is a
156*84e33947SAndroid Build Coastguard Worker# small binary blob that is prepended to a nanoapp. Android can parse this
157*84e33947SAndroid Build Coastguard Worker# blob to determine some attributes about the nanoapp, such as version and
158*84e33947SAndroid Build Coastguard Worker# target hub. The layout is as follows:
159*84e33947SAndroid Build Coastguard Worker#
160*84e33947SAndroid Build Coastguard Worker# struct NanoAppBinaryHeader {
161*84e33947SAndroid Build Coastguard Worker#   uint32_t headerVersion;        // 0x1 for this version
162*84e33947SAndroid Build Coastguard Worker#   uint32_t magic;                // "NANO"
163*84e33947SAndroid Build Coastguard Worker#   uint64_t appId;                // App Id, contains vendor id
164*84e33947SAndroid Build Coastguard Worker#   uint32_t appVersion;           // Version of the app
165*84e33947SAndroid Build Coastguard Worker#   uint32_t flags;                // Signed, encrypted, TCM-capable
166*84e33947SAndroid Build Coastguard Worker#   uint64_t hwHubType;            // Which hub type is this compiled for
167*84e33947SAndroid Build Coastguard Worker#   uint8_t targetChreApiMajorVersion; // CHRE API version
168*84e33947SAndroid Build Coastguard Worker#   uint8_t targetChreApiMinorVersion;
169*84e33947SAndroid Build Coastguard Worker#   uint8_t reserved[6];
170*84e33947SAndroid Build Coastguard Worker# } __attribute__((packed));
171*84e33947SAndroid Build Coastguard Worker#
172*84e33947SAndroid Build Coastguard Worker# The basic idea here is to generate a hexdump formatted file and then reverse
173*84e33947SAndroid Build Coastguard Worker# that hexdump into binary form. The way that is accomplished is as follows.
174*84e33947SAndroid Build Coastguard Worker#
175*84e33947SAndroid Build Coastguard Worker# ... Why tho?
176*84e33947SAndroid Build Coastguard Worker#
177*84e33947SAndroid Build Coastguard Worker# The build system has a lot of knowledge of what it is building: the name of
178*84e33947SAndroid Build Coastguard Worker# the nanoapp, the version and the app ID. Marshalling this data from the
179*84e33947SAndroid Build Coastguard Worker# Makefile environment into something like python or even a small C program
180*84e33947SAndroid Build Coastguard Worker# is an unnecessary step.
181*84e33947SAndroid Build Coastguard Worker#
182*84e33947SAndroid Build Coastguard Worker# For the flags field of the struct, the following values are currently defined:
183*84e33947SAndroid Build Coastguard Worker# Signed                 = 0x00000001
184*84e33947SAndroid Build Coastguard Worker# Encrypted              = 0x00000002
185*84e33947SAndroid Build Coastguard Worker# TCM-capable            = 0x00000004
186*84e33947SAndroid Build Coastguard Worker#
187*84e33947SAndroid Build Coastguard Worker# The highest order byte is reserved for platform-specific usage.
188*84e33947SAndroid Build Coastguard Worker
189*84e33947SAndroid Build Coastguard Worker$$($(1)_HEADER): $$(OUT)/$(1) $$($(1)_DIRS)
190*84e33947SAndroid Build Coastguard Worker	printf "00000000  %.8x " `$(BE_TO_LE_SCRIPT) 0x00000001` > $$@
191*84e33947SAndroid Build Coastguard Worker	printf "%.8x " `$(BE_TO_LE_SCRIPT) 0x4f4e414e` >> $$@
192*84e33947SAndroid Build Coastguard Worker	printf "%.16x\n" `$(BE_TO_LE_SCRIPT) $(NANOAPP_ID)` >> $$@
193*84e33947SAndroid Build Coastguard Worker	printf "00000010  %.8x " `$(BE_TO_LE_SCRIPT) $(NANOAPP_VERSION)` >> $$@
194*84e33947SAndroid Build Coastguard Worker	printf "%.8x " `$(BE_TO_LE_SCRIPT) $(TARGET_NANOAPP_FLAGS)` >> $$@
195*84e33947SAndroid Build Coastguard Worker	printf "%.16x\n" `$(BE_TO_LE_SCRIPT) $(13)` >> $$@
196*84e33947SAndroid Build Coastguard Worker	printf "00000020  %.2x " \
197*84e33947SAndroid Build Coastguard Worker	    `$(BE_TO_LE_SCRIPT) $(TARGET_CHRE_API_VERSION_MAJOR)` >> $$@
198*84e33947SAndroid Build Coastguard Worker	printf "%.2x " \
199*84e33947SAndroid Build Coastguard Worker	    `$(BE_TO_LE_SCRIPT) $(TARGET_CHRE_API_VERSION_MINOR)` >> $$@
200*84e33947SAndroid Build Coastguard Worker	printf "%.12x \n" `$(BE_TO_LE_SCRIPT) 0x000000` >> $$@
201*84e33947SAndroid Build Coastguard Worker	cp $$@ $$@_ascii
202*84e33947SAndroid Build Coastguard Worker	xxd -r $$@_ascii > $$@
203*84e33947SAndroid Build Coastguard Worker	rm $$@_ascii
204*84e33947SAndroid Build Coastguard Worker
205*84e33947SAndroid Build Coastguard Worker# Compile ######################################################################
206*84e33947SAndroid Build Coastguard Worker
207*84e33947SAndroid Build Coastguard Worker$$($(1)_CPP_OBJS): $(OUT)/$$($(1)_OBJS_DIR)/%.o: %.cpp $(MAKEFILE_LIST)
208*84e33947SAndroid Build Coastguard Worker	@echo " [CPP] $$<"
209*84e33947SAndroid Build Coastguard Worker	$(V)$(3) $(COMMON_CXX_CFLAGS) -DCHRE_FILENAME=\"$$(notdir $$<)\" $(2) -c \
210*84e33947SAndroid Build Coastguard Worker		$$< -o $$@
211*84e33947SAndroid Build Coastguard Worker
212*84e33947SAndroid Build Coastguard Worker$$($(1)_CC_OBJS): $(OUT)/$$($(1)_OBJS_DIR)/%.o: %.cc $(MAKEFILE_LIST)
213*84e33947SAndroid Build Coastguard Worker	@echo " [CC] $$<"
214*84e33947SAndroid Build Coastguard Worker	$(V)$(3) $(COMMON_CXX_CFLAGS) -DCHRE_FILENAME=\"$$(notdir $$<)\" $(2) -c \
215*84e33947SAndroid Build Coastguard Worker		$$< -o $$@
216*84e33947SAndroid Build Coastguard Worker
217*84e33947SAndroid Build Coastguard Worker$$($(1)_C_OBJS): $(OUT)/$$($(1)_OBJS_DIR)/%.o: %.c $(MAKEFILE_LIST)
218*84e33947SAndroid Build Coastguard Worker	@echo " [C] $$<"
219*84e33947SAndroid Build Coastguard Worker	$(V)$(3) $(COMMON_C_CFLAGS) -DCHRE_FILENAME=\"$$(notdir $$<)\" $(2) -c $$< \
220*84e33947SAndroid Build Coastguard Worker		-o $$@
221*84e33947SAndroid Build Coastguard Worker
222*84e33947SAndroid Build Coastguard Worker$$($(1)_S_OBJS): $(OUT)/$$($(1)_OBJS_DIR)/%.o: %.S $(MAKEFILE_LIST)
223*84e33947SAndroid Build Coastguard Worker	@echo " [AS] $$<"
224*84e33947SAndroid Build Coastguard Worker	$(V)$(3) -DCHRE_FILENAME=\"$$(notdir $$<)\" $(2) -c $$< \
225*84e33947SAndroid Build Coastguard Worker		-o $$@
226*84e33947SAndroid Build Coastguard Worker
227*84e33947SAndroid Build Coastguard Worker# Archive ######################################################################
228*84e33947SAndroid Build Coastguard Worker
229*84e33947SAndroid Build Coastguard Worker# Add common and target-specific archive flags.
230*84e33947SAndroid Build Coastguard Worker$(1)_ARFLAGS = $(COMMON_ARFLAGS) \
231*84e33947SAndroid Build Coastguard Worker    $(6)
232*84e33947SAndroid Build Coastguard Worker
233*84e33947SAndroid Build Coastguard Worker$$($(1)_AR): $$($(1)_CC_OBJS) $$($(1)_CPP_OBJS) $$($(1)_C_OBJS) \
234*84e33947SAndroid Build Coastguard Worker              $$($(1)_S_OBJS) | $$(OUT)/$(1) $$($(1)_DIRS)
235*84e33947SAndroid Build Coastguard Worker	@echo " [AR] $$@"
236*84e33947SAndroid Build Coastguard Worker	$(V)$(7) $$($(1)_ARFLAGS) $$@ $$(filter %.o, $$^)
237*84e33947SAndroid Build Coastguard Worker
238*84e33947SAndroid Build Coastguard Worker# Token Mapping ################################################################
239*84e33947SAndroid Build Coastguard Worker
240*84e33947SAndroid Build Coastguard Worker$$($(1)_TOKEN_MAP): $$($(1)_AR)
241*84e33947SAndroid Build Coastguard Worker	@echo " [TOKEN_MAP_GEN] $$@"
242*84e33947SAndroid Build Coastguard Worker	$(V)mkdir -p $$(@D)
243*84e33947SAndroid Build Coastguard Worker	$(V)$(TOKEN_MAP_GEN_CMD) $$($(1)_TOKEN_MAP) $$($(1)_AR) 2>&1
244*84e33947SAndroid Build Coastguard Worker	$(V)$(TOKEN_MAP_CSV_GEN_CMD) $$($(1)_TOKEN_MAP_CSV) $$($(1)_AR) 2>&1
245*84e33947SAndroid Build Coastguard Worker
246*84e33947SAndroid Build Coastguard Worker# Rust #########################################################################
247*84e33947SAndroid Build Coastguard Worker
248*84e33947SAndroid Build Coastguard Workerifeq ($(IS_BUILD_REQUIRING_RUST),)
249*84e33947SAndroid Build Coastguard WorkerRUST_DEPENDENCIES =
250*84e33947SAndroid Build Coastguard Workerelse
251*84e33947SAndroid Build Coastguard WorkerRUST_DEPENDENCIES = rust_archive_$(1)
252*84e33947SAndroid Build Coastguard Workerendif
253*84e33947SAndroid Build Coastguard Worker
254*84e33947SAndroid Build Coastguard Worker# Always invoke the cargo build, let cargo decide if updates are needed
255*84e33947SAndroid Build Coastguard Worker.PHONY: rust_archive_$(1)
256*84e33947SAndroid Build Coastguard Workerrust_archive_$(1):
257*84e33947SAndroid Build Coastguard Worker	@echo " [RUST_ARCHIVE] $$@"
258*84e33947SAndroid Build Coastguard Worker	$(RUST_FLAGS) cargo +nightly build -Z build-std=core,alloc \
259*84e33947SAndroid Build Coastguard Worker	    --$(RUST_OPT_LEVEL) --target $(RUST_TARGET_DIR)/$(RUST_TARGET).json
260*84e33947SAndroid Build Coastguard Worker
261*84e33947SAndroid Build Coastguard Worker# Aconfig Flag Generation ######################################################
262*84e33947SAndroid Build Coastguard Worker
263*84e33947SAndroid Build Coastguard Worker# This must be handled in the final build_template to allow for layers of flag
264*84e33947SAndroid Build Coastguard Worker# overwriting ( common > device_specific > local ).
265*84e33947SAndroid Build Coastguard Worker
266*84e33947SAndroid Build Coastguard Workerifeq ($(IS_BUILD_REQUIRING_FLAG_LIBRARY),)
267*84e33947SAndroid Build Coastguard WorkerFLAG_DEPENDENCIES =
268*84e33947SAndroid Build Coastguard Workerelse
269*84e33947SAndroid Build Coastguard WorkerFLAG_DEPENDENCIES = flagging_library_$(1)
270*84e33947SAndroid Build Coastguard Workerendif
271*84e33947SAndroid Build Coastguard Worker
272*84e33947SAndroid Build Coastguard Worker$$((1)_FLAGS): $(FLAG_DEPENDENCIES)
273*84e33947SAndroid Build Coastguard Worker
274*84e33947SAndroid Build Coastguard Worker.PHONY: flagging_library_$(1)
275*84e33947SAndroid Build Coastguard Workerflagging_library_$(1):
276*84e33947SAndroid Build Coastguard Worker	@echo " [ACONFIG] $$@"
277*84e33947SAndroid Build Coastguard Worker	$(ACONFIG_FLAG_BUILD_SCRIPT) $(ACONFIG_BIN) $(ACONFIG_EMB_DIR) \
278*84e33947SAndroid Build Coastguard Worker	    $(COMMON_ACONFIG_FLAG_VALUES) $(TARGET_ACONFIGFLAGS)
279*84e33947SAndroid Build Coastguard Worker
280*84e33947SAndroid Build Coastguard Worker# Link #########################################################################
281*84e33947SAndroid Build Coastguard Worker
282*84e33947SAndroid Build Coastguard Worker$$($(1)_SO): $$($(1)_CC_DEPS) \
283*84e33947SAndroid Build Coastguard Worker              $$($(1)_CPP_DEPS) $$($(1)_C_DEPS) $$($(1)_S_DEPS) \
284*84e33947SAndroid Build Coastguard Worker              $$($(1)_CC_OBJS) $$($(1)_CPP_OBJS) $$($(1)_C_OBJS) \
285*84e33947SAndroid Build Coastguard Worker              $$($(1)_S_OBJS) $(RUST_DEPENDENCIES) | $$(OUT)/$(1) $$($(1)_DIRS)
286*84e33947SAndroid Build Coastguard Worker	$(5) $(4) -o $$@ $(11) $$(filter %.o, $$^) $(12) $(15)
287*84e33947SAndroid Build Coastguard Worker
288*84e33947SAndroid Build Coastguard Worker$$($(1)_BIN): $$($(1)_CC_DEPS) \
289*84e33947SAndroid Build Coastguard Worker               $$($(1)_CPP_DEPS) $$($(1)_C_DEPS) $$($(1)_S_DEPS) \
290*84e33947SAndroid Build Coastguard Worker               $$($(1)_CC_OBJS) $$($(1)_CPP_OBJS) $$($(1)_C_OBJS) \
291*84e33947SAndroid Build Coastguard Worker               $$($(1)_S_OBJS) | $$(OUT)/$(1) $$($(1)_DIRS)
292*84e33947SAndroid Build Coastguard Worker	$(V)$(3) -o $$@ $(11) $$(filter %.o, $$^) $(12) $(10)
293*84e33947SAndroid Build Coastguard Worker
294*84e33947SAndroid Build Coastguard Worker# Output Directories ###########################################################
295*84e33947SAndroid Build Coastguard Worker
296*84e33947SAndroid Build Coastguard Worker$$($$$(1)_DIRS):
297*84e33947SAndroid Build Coastguard Worker	$(V)mkdir -p $$@
298*84e33947SAndroid Build Coastguard Worker
299*84e33947SAndroid Build Coastguard Worker$$(OUT)/$(1):
300*84e33947SAndroid Build Coastguard Worker	$(V)mkdir -p $$@
301*84e33947SAndroid Build Coastguard Worker
302*84e33947SAndroid Build Coastguard Worker# Automatic Dependency Resolution ##############################################
303*84e33947SAndroid Build Coastguard Worker
304*84e33947SAndroid Build Coastguard Worker$$($(1)_CC_DEPS): $(OUT)/$$($(1)_OBJS_DIR)/%.d: %.cc
305*84e33947SAndroid Build Coastguard Worker	$(V)mkdir -p $$(dir $$@)
306*84e33947SAndroid Build Coastguard Worker	$(V)$(3) $(DEP_CFLAGS) $(COMMON_CXX_CFLAGS) \
307*84e33947SAndroid Build Coastguard Worker		-DCHRE_FILENAME=\"$$(notdir $$<)\" $(2) -c $$< -o $$@
308*84e33947SAndroid Build Coastguard Worker
309*84e33947SAndroid Build Coastguard Worker$$($(1)_CPP_DEPS): $(OUT)/$$($(1)_OBJS_DIR)/%.d: %.cpp
310*84e33947SAndroid Build Coastguard Worker	$(V)mkdir -p $$(dir $$@)
311*84e33947SAndroid Build Coastguard Worker	$(V)$(3) $(DEP_CFLAGS) $(COMMON_CXX_CFLAGS) \
312*84e33947SAndroid Build Coastguard Worker		-DCHRE_FILENAME=\"$$(notdir $$<)\" $(2) -c $$< -o $$@
313*84e33947SAndroid Build Coastguard Worker
314*84e33947SAndroid Build Coastguard Worker$$($(1)_C_DEPS): $(OUT)/$$($(1)_OBJS_DIR)/%.d: %.c
315*84e33947SAndroid Build Coastguard Worker	$(V)mkdir -p $$(dir $$@)
316*84e33947SAndroid Build Coastguard Worker	$(V)$(3) $(DEP_CFLAGS) $(COMMON_C_CFLAGS) \
317*84e33947SAndroid Build Coastguard Worker		-DCHRE_FILENAME=\"$$(notdir $$<)\" $(2) -c $$< -o $$@
318*84e33947SAndroid Build Coastguard Worker
319*84e33947SAndroid Build Coastguard Worker$$($(1)_S_DEPS): $(OUT)/$$($(1)_OBJS_DIR)/%.d: %.S
320*84e33947SAndroid Build Coastguard Worker	$(V)mkdir -p $$(dir $$@)
321*84e33947SAndroid Build Coastguard Worker	$(V)$(3) $(DEP_CFLAGS) \
322*84e33947SAndroid Build Coastguard Worker		-DCHRE_FILENAME=\"$$(notdir $$<)\" $(2) -c $$< -o $$@
323*84e33947SAndroid Build Coastguard Worker
324*84e33947SAndroid Build Coastguard Worker# Include generated dependency files if they are in the requested build target.
325*84e33947SAndroid Build Coastguard Worker# This avoids dependency generation from occuring for a debug target when a
326*84e33947SAndroid Build Coastguard Worker# non-debug target is requested.
327*84e33947SAndroid Build Coastguard Workerifneq ($(filter $(1) all, $(MAKECMDGOALS)),)
328*84e33947SAndroid Build Coastguard Worker-include $$(patsubst %.o, %.d, $$($(1)_CC_DEPS))
329*84e33947SAndroid Build Coastguard Worker-include $$(patsubst %.o, %.d, $$($(1)_CPP_DEPS))
330*84e33947SAndroid Build Coastguard Worker-include $$(patsubst %.o, %.d, $$($(1)_C_DEPS))
331*84e33947SAndroid Build Coastguard Worker-include $$(patsubst %.o, %.d, $$($(1)_S_DEPS))
332*84e33947SAndroid Build Coastguard Workerendif
333*84e33947SAndroid Build Coastguard Worker
334*84e33947SAndroid Build Coastguard Workerendef
335*84e33947SAndroid Build Coastguard Workerendif
336*84e33947SAndroid Build Coastguard Worker
337*84e33947SAndroid Build Coastguard Worker# Template Invocation ##########################################################
338*84e33947SAndroid Build Coastguard Worker
339*84e33947SAndroid Build Coastguard WorkerTARGET_CFLAGS_LOCAL = $(TARGET_CFLAGS)
340*84e33947SAndroid Build Coastguard WorkerTARGET_CFLAGS_LOCAL += -DCHRE_PLATFORM_ID=$(TARGET_PLATFORM_ID)
341*84e33947SAndroid Build Coastguard Worker
342*84e33947SAndroid Build Coastguard Worker# Default the nanoapp header flag values to signed if not overidden.
343*84e33947SAndroid Build Coastguard WorkerTARGET_NANOAPP_FLAGS ?= 0x00000001
344*84e33947SAndroid Build Coastguard Worker$(eval $(call BUILD_TEMPLATE,$(TARGET_NAME), \
345*84e33947SAndroid Build Coastguard Worker                             $(COMMON_CFLAGS) $(TARGET_CFLAGS_LOCAL) \
346*84e33947SAndroid Build Coastguard Worker                                 $(NANOAPP_LATE_CFLAGS), \
347*84e33947SAndroid Build Coastguard Worker                             $(TARGET_CC), \
348*84e33947SAndroid Build Coastguard Worker                             $(TARGET_SO_LDFLAGS), \
349*84e33947SAndroid Build Coastguard Worker                             $(TARGET_LD), \
350*84e33947SAndroid Build Coastguard Worker                             $(TARGET_ARFLAGS), \
351*84e33947SAndroid Build Coastguard Worker                             $(TARGET_AR), \
352*84e33947SAndroid Build Coastguard Worker                             $(TARGET_VARIANT_SRCS), \
353*84e33947SAndroid Build Coastguard Worker                             $(TARGET_BUILD_BIN), \
354*84e33947SAndroid Build Coastguard Worker                             $(TARGET_BIN_LDFLAGS), \
355*84e33947SAndroid Build Coastguard Worker                             $(TARGET_SO_EARLY_LIBS), \
356*84e33947SAndroid Build Coastguard Worker                             $(TARGET_SO_LATE_LIBS), \
357*84e33947SAndroid Build Coastguard Worker                             $(TARGET_PLATFORM_ID), \
358*84e33947SAndroid Build Coastguard Worker                             $(TARGET_ACONFIGFLAGS), \
359*84e33947SAndroid Build Coastguard Worker                             $(TARGET_ADDITIONAL_LD)))
360*84e33947SAndroid Build Coastguard Worker
361*84e33947SAndroid Build Coastguard Worker# Debug Template Invocation ####################################################
362*84e33947SAndroid Build Coastguard Worker
363*84e33947SAndroid Build Coastguard Worker$(eval $(call BUILD_TEMPLATE,$(TARGET_NAME)_debug, \
364*84e33947SAndroid Build Coastguard Worker                             $(COMMON_CFLAGS) $(COMMON_DEBUG_CFLAGS) \
365*84e33947SAndroid Build Coastguard Worker                                 $(TARGET_CFLAGS_LOCAL) $(TARGET_DEBUG_CFLAGS) \
366*84e33947SAndroid Build Coastguard Worker                                 $(NANOAPP_LATE_CFLAGS), \
367*84e33947SAndroid Build Coastguard Worker                             $(TARGET_CC), \
368*84e33947SAndroid Build Coastguard Worker                             $(TARGET_SO_LDFLAGS), \
369*84e33947SAndroid Build Coastguard Worker                             $(TARGET_LD), \
370*84e33947SAndroid Build Coastguard Worker                             $(TARGET_ARFLAGS), \
371*84e33947SAndroid Build Coastguard Worker                             $(TARGET_AR), \
372*84e33947SAndroid Build Coastguard Worker                             $(TARGET_VARIANT_SRCS), \
373*84e33947SAndroid Build Coastguard Worker                             $(TARGET_BUILD_BIN), \
374*84e33947SAndroid Build Coastguard Worker                             $(TARGET_BIN_LDFLAGS), \
375*84e33947SAndroid Build Coastguard Worker                             $(TARGET_SO_EARLY_LIBS), \
376*84e33947SAndroid Build Coastguard Worker                             $(TARGET_SO_LATE_LIBS), \
377*84e33947SAndroid Build Coastguard Worker                             $(TARGET_PLATFORM_ID), \
378*84e33947SAndroid Build Coastguard Worker                             $(TARGET_ACONFIGFLAGS), \
379*84e33947SAndroid Build Coastguard Worker                             $(TARGET_ADDITIONAL_LD)))
380