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