1*9e94795aSAndroid Build Coastguard Worker# 2*9e94795aSAndroid Build Coastguard Worker# Copyright (C) 2008 The Android Open Source Project 3*9e94795aSAndroid Build Coastguard Worker# 4*9e94795aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 5*9e94795aSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 6*9e94795aSAndroid Build Coastguard Worker# You may obtain a copy of the License at 7*9e94795aSAndroid Build Coastguard Worker# 8*9e94795aSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 9*9e94795aSAndroid Build Coastguard Worker# 10*9e94795aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 11*9e94795aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 12*9e94795aSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*9e94795aSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 14*9e94795aSAndroid Build Coastguard Worker# limitations under the License. 15*9e94795aSAndroid Build Coastguard Worker# 16*9e94795aSAndroid Build Coastguard Worker 17*9e94795aSAndroid Build Coastguard Worker## 18*9e94795aSAndroid Build Coastguard Worker## Common build system definitions. Mostly standard 19*9e94795aSAndroid Build Coastguard Worker## commands for building various types of targets, which 20*9e94795aSAndroid Build Coastguard Worker## are used by others to construct the final targets. 21*9e94795aSAndroid Build Coastguard Worker## 22*9e94795aSAndroid Build Coastguard Worker 23*9e94795aSAndroid Build Coastguard Worker# These are variables we use to collect overall lists 24*9e94795aSAndroid Build Coastguard Worker# of things being processed. 25*9e94795aSAndroid Build Coastguard Worker 26*9e94795aSAndroid Build Coastguard Worker# Full paths to all of the documentation 27*9e94795aSAndroid Build Coastguard WorkerALL_DOCS:= 28*9e94795aSAndroid Build Coastguard Worker 29*9e94795aSAndroid Build Coastguard Worker# The short names of all of the targets in the system. 30*9e94795aSAndroid Build Coastguard Worker# For each element of ALL_MODULES, two other variables 31*9e94795aSAndroid Build Coastguard Worker# are defined: 32*9e94795aSAndroid Build Coastguard Worker# $(ALL_MODULES.$(target)).BUILT 33*9e94795aSAndroid Build Coastguard Worker# $(ALL_MODULES.$(target)).INSTALLED 34*9e94795aSAndroid Build Coastguard Worker# The BUILT variable contains LOCAL_BUILT_MODULE for that 35*9e94795aSAndroid Build Coastguard Worker# target, and the INSTALLED variable contains the LOCAL_INSTALLED_MODULE. 36*9e94795aSAndroid Build Coastguard Worker# Some targets may have multiple files listed in the BUILT and INSTALLED 37*9e94795aSAndroid Build Coastguard Worker# sub-variables. 38*9e94795aSAndroid Build Coastguard WorkerALL_MODULES:= 39*9e94795aSAndroid Build Coastguard Worker 40*9e94795aSAndroid Build Coastguard WorkerALL_MAKE_MODULE_INFO_JSON_MODULES:= 41*9e94795aSAndroid Build Coastguard Worker 42*9e94795aSAndroid Build Coastguard Worker# The relative paths of the non-module targets in the system. 43*9e94795aSAndroid Build Coastguard WorkerALL_NON_MODULES:= 44*9e94795aSAndroid Build Coastguard WorkerNON_MODULES_WITHOUT_LICENSE_METADATA:= 45*9e94795aSAndroid Build Coastguard Worker 46*9e94795aSAndroid Build Coastguard Worker# List of copied targets that need license metadata copied. 47*9e94795aSAndroid Build Coastguard WorkerALL_COPIED_TARGETS:= 48*9e94795aSAndroid Build Coastguard Worker 49*9e94795aSAndroid Build Coastguard Worker# Full paths to targets that should be added to the "make droid" 50*9e94795aSAndroid Build Coastguard Worker# set of installed targets. 51*9e94795aSAndroid Build Coastguard WorkerALL_DEFAULT_INSTALLED_MODULES:= 52*9e94795aSAndroid Build Coastguard Worker 53*9e94795aSAndroid Build Coastguard Worker# Full path to all asm, C, C++, lex and yacc generated C files. 54*9e94795aSAndroid Build Coastguard Worker# These all have an order-only dependency on the copied headers 55*9e94795aSAndroid Build Coastguard WorkerALL_C_CPP_ETC_OBJECTS:= 56*9e94795aSAndroid Build Coastguard Worker 57*9e94795aSAndroid Build Coastguard Worker# These files go into the SDK 58*9e94795aSAndroid Build Coastguard WorkerALL_SDK_FILES:= 59*9e94795aSAndroid Build Coastguard Worker 60*9e94795aSAndroid Build Coastguard Worker# Files for dalvik. This is often build without building the rest of the OS. 61*9e94795aSAndroid Build Coastguard WorkerINTERNAL_DALVIK_MODULES:= 62*9e94795aSAndroid Build Coastguard Worker 63*9e94795aSAndroid Build Coastguard Worker# All findbugs xml files 64*9e94795aSAndroid Build Coastguard WorkerALL_FINDBUGS_FILES:= 65*9e94795aSAndroid Build Coastguard Worker 66*9e94795aSAndroid Build Coastguard Worker# Packages with certificate violation 67*9e94795aSAndroid Build Coastguard WorkerCERTIFICATE_VIOLATION_MODULES := 68*9e94795aSAndroid Build Coastguard Worker 69*9e94795aSAndroid Build Coastguard Worker# Target and host installed module's dependencies on shared libraries. 70*9e94795aSAndroid Build Coastguard Worker# They are list of "<module_name>:<installed_file>:lib1,lib2...". 71*9e94795aSAndroid Build Coastguard WorkerTARGET_DEPENDENCIES_ON_SHARED_LIBRARIES := 72*9e94795aSAndroid Build Coastguard Worker$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_DEPENDENCIES_ON_SHARED_LIBRARIES := 73*9e94795aSAndroid Build Coastguard WorkerHOST_DEPENDENCIES_ON_SHARED_LIBRARIES := 74*9e94795aSAndroid Build Coastguard Worker$(HOST_2ND_ARCH_VAR_PREFIX)HOST_DEPENDENCIES_ON_SHARED_LIBRARIES := 75*9e94795aSAndroid Build Coastguard WorkerHOST_CROSS_DEPENDENCIES_ON_SHARED_LIBRARIES := 76*9e94795aSAndroid Build Coastguard Worker$(HOST_CROSS_2ND_ARCH_VAR_PREFIX)HOST_CROSS_DEPENDENCIES_ON_SHARED_LIBRARIES := 77*9e94795aSAndroid Build Coastguard Worker 78*9e94795aSAndroid Build Coastguard Worker# Generated class file names for Android resource. 79*9e94795aSAndroid Build Coastguard Worker# They are escaped and quoted so can be passed safely to a bash command. 80*9e94795aSAndroid Build Coastguard WorkerANDROID_RESOURCE_GENERATED_CLASSES := 'R.class' 'R$$*.class' 'Manifest.class' 'Manifest$$*.class' 81*9e94795aSAndroid Build Coastguard Worker 82*9e94795aSAndroid Build Coastguard Worker# Display names for various build targets 83*9e94795aSAndroid Build Coastguard WorkerTARGET_DISPLAY := target 84*9e94795aSAndroid Build Coastguard WorkerHOST_DISPLAY := host 85*9e94795aSAndroid Build Coastguard WorkerHOST_CROSS_DISPLAY := host cross 86*9e94795aSAndroid Build Coastguard Worker 87*9e94795aSAndroid Build Coastguard Worker# All installed initrc files 88*9e94795aSAndroid Build Coastguard WorkerALL_INIT_RC_INSTALLED_PAIRS := 89*9e94795aSAndroid Build Coastguard Worker 90*9e94795aSAndroid Build Coastguard Worker# All installed vintf manifest fragments for a partition at 91*9e94795aSAndroid Build Coastguard WorkerALL_VINTF_MANIFEST_FRAGMENTS_LIST:= 92*9e94795aSAndroid Build Coastguard Worker 93*9e94795aSAndroid Build Coastguard Worker# All tests that should be skipped in presubmit check. 94*9e94795aSAndroid Build Coastguard WorkerALL_DISABLED_PRESUBMIT_TESTS := 95*9e94795aSAndroid Build Coastguard Worker 96*9e94795aSAndroid Build Coastguard Worker# All compatibility suites mentioned in LOCAL_COMPATIBILITY_SUITE 97*9e94795aSAndroid Build Coastguard WorkerALL_COMPATIBILITY_SUITES := 98*9e94795aSAndroid Build Coastguard Worker 99*9e94795aSAndroid Build Coastguard Worker# All compatibility suite files to dist. 100*9e94795aSAndroid Build Coastguard WorkerALL_COMPATIBILITY_DIST_FILES := 101*9e94795aSAndroid Build Coastguard Worker 102*9e94795aSAndroid Build Coastguard Worker# All LINK_TYPE entries 103*9e94795aSAndroid Build Coastguard WorkerALL_LINK_TYPES := 104*9e94795aSAndroid Build Coastguard Worker 105*9e94795aSAndroid Build Coastguard Worker# All exported/imported include entries 106*9e94795aSAndroid Build Coastguard WorkerEXPORTS_LIST := 107*9e94795aSAndroid Build Coastguard Worker 108*9e94795aSAndroid Build Coastguard Worker# All modules already converted to Soong 109*9e94795aSAndroid Build Coastguard WorkerSOONG_ALREADY_CONV := 110*9e94795aSAndroid Build Coastguard Worker 111*9e94795aSAndroid Build Coastguard Worker########################################################### 112*9e94795aSAndroid Build Coastguard Worker## Debugging; prints a variable list to stdout 113*9e94795aSAndroid Build Coastguard Worker########################################################### 114*9e94795aSAndroid Build Coastguard Worker 115*9e94795aSAndroid Build Coastguard Worker# $(1): variable name list, not variable values 116*9e94795aSAndroid Build Coastguard Workerdefine print-vars 117*9e94795aSAndroid Build Coastguard Worker$(foreach var,$(1), \ 118*9e94795aSAndroid Build Coastguard Worker $(info $(var):) \ 119*9e94795aSAndroid Build Coastguard Worker $(foreach word,$($(var)), \ 120*9e94795aSAndroid Build Coastguard Worker $(info $(space)$(space)$(word)) \ 121*9e94795aSAndroid Build Coastguard Worker ) \ 122*9e94795aSAndroid Build Coastguard Worker ) 123*9e94795aSAndroid Build Coastguard Workerendef 124*9e94795aSAndroid Build Coastguard Worker 125*9e94795aSAndroid Build Coastguard Worker########################################################### 126*9e94795aSAndroid Build Coastguard Worker## Evaluates to true if the string contains the word true, 127*9e94795aSAndroid Build Coastguard Worker## and empty otherwise 128*9e94795aSAndroid Build Coastguard Worker## $(1): a var to test 129*9e94795aSAndroid Build Coastguard Worker########################################################### 130*9e94795aSAndroid Build Coastguard Worker 131*9e94795aSAndroid Build Coastguard Workerdefine true-or-empty 132*9e94795aSAndroid Build Coastguard Worker$(filter true, $(1)) 133*9e94795aSAndroid Build Coastguard Workerendef 134*9e94795aSAndroid Build Coastguard Worker 135*9e94795aSAndroid Build Coastguard Workerdefine boolean-not 136*9e94795aSAndroid Build Coastguard Worker$(if $(filter true,$(1)),,true) 137*9e94795aSAndroid Build Coastguard Workerendef 138*9e94795aSAndroid Build Coastguard Worker 139*9e94795aSAndroid Build Coastguard Worker########################################################### 140*9e94795aSAndroid Build Coastguard Worker## Rule for touching GCNO files. 141*9e94795aSAndroid Build Coastguard Worker########################################################### 142*9e94795aSAndroid Build Coastguard Workerdefine gcno-touch-rule 143*9e94795aSAndroid Build Coastguard Worker$(2): $(1) 144*9e94795aSAndroid Build Coastguard Worker touch -c $$@ 145*9e94795aSAndroid Build Coastguard Workerendef 146*9e94795aSAndroid Build Coastguard Worker 147*9e94795aSAndroid Build Coastguard Worker########################################################### 148*9e94795aSAndroid Build Coastguard Worker 149*9e94795aSAndroid Build Coastguard Worker########################################################### 150*9e94795aSAndroid Build Coastguard Worker## Retrieve the directory of the current makefile 151*9e94795aSAndroid Build Coastguard Worker## Must be called before including any other makefile!! 152*9e94795aSAndroid Build Coastguard Worker########################################################### 153*9e94795aSAndroid Build Coastguard Worker 154*9e94795aSAndroid Build Coastguard Worker# Figure out where we are. 155*9e94795aSAndroid Build Coastguard Workerdefine my-dir 156*9e94795aSAndroid Build Coastguard Worker$(strip \ 157*9e94795aSAndroid Build Coastguard Worker $(eval LOCAL_MODULE_MAKEFILE := $$(lastword $$(MAKEFILE_LIST))) \ 158*9e94795aSAndroid Build Coastguard Worker $(if $(filter $(BUILD_SYSTEM)/% $(OUT_DIR)/%,$(LOCAL_MODULE_MAKEFILE)), \ 159*9e94795aSAndroid Build Coastguard Worker $(error my-dir must be called before including any other makefile.) \ 160*9e94795aSAndroid Build Coastguard Worker , \ 161*9e94795aSAndroid Build Coastguard Worker $(patsubst %/,%,$(dir $(LOCAL_MODULE_MAKEFILE))) \ 162*9e94795aSAndroid Build Coastguard Worker ) \ 163*9e94795aSAndroid Build Coastguard Worker ) 164*9e94795aSAndroid Build Coastguard Workerendef 165*9e94795aSAndroid Build Coastguard Worker 166*9e94795aSAndroid Build Coastguard Worker 167*9e94795aSAndroid Build Coastguard Worker########################################################### 168*9e94795aSAndroid Build Coastguard Worker## Retrieve a list of all makefiles immediately below some directory 169*9e94795aSAndroid Build Coastguard Worker########################################################### 170*9e94795aSAndroid Build Coastguard Worker 171*9e94795aSAndroid Build Coastguard Workerdefine all-makefiles-under 172*9e94795aSAndroid Build Coastguard Worker$(wildcard $(1)/*/Android.mk) 173*9e94795aSAndroid Build Coastguard Workerendef 174*9e94795aSAndroid Build Coastguard Worker 175*9e94795aSAndroid Build Coastguard Worker########################################################### 176*9e94795aSAndroid Build Coastguard Worker## Look under a directory for makefiles that don't have parent 177*9e94795aSAndroid Build Coastguard Worker## makefiles. 178*9e94795aSAndroid Build Coastguard Worker########################################################### 179*9e94795aSAndroid Build Coastguard Worker 180*9e94795aSAndroid Build Coastguard Worker# $(1): directory to search under 181*9e94795aSAndroid Build Coastguard Worker# Ignores $(1)/Android.mk 182*9e94795aSAndroid Build Coastguard Workerdefine first-makefiles-under 183*9e94795aSAndroid Build Coastguard Worker$(shell build/make/tools/findleaves.py $(FIND_LEAVES_EXCLUDES) \ 184*9e94795aSAndroid Build Coastguard Worker --mindepth=2 $(addprefix --dir=,$(1)) Android.mk) 185*9e94795aSAndroid Build Coastguard Workerendef 186*9e94795aSAndroid Build Coastguard Worker 187*9e94795aSAndroid Build Coastguard Worker########################################################### 188*9e94795aSAndroid Build Coastguard Worker## Retrieve a list of all makefiles immediately below your directory 189*9e94795aSAndroid Build Coastguard Worker## Must be called before including any other makefile!! 190*9e94795aSAndroid Build Coastguard Worker########################################################### 191*9e94795aSAndroid Build Coastguard Worker 192*9e94795aSAndroid Build Coastguard Workerdefine all-subdir-makefiles 193*9e94795aSAndroid Build Coastguard Worker$(call all-makefiles-under,$(call my-dir)) 194*9e94795aSAndroid Build Coastguard Workerendef 195*9e94795aSAndroid Build Coastguard Worker 196*9e94795aSAndroid Build Coastguard Worker########################################################### 197*9e94795aSAndroid Build Coastguard Worker## Look in the named list of directories for makefiles, 198*9e94795aSAndroid Build Coastguard Worker## relative to the current directory. 199*9e94795aSAndroid Build Coastguard Worker## Must be called before including any other makefile!! 200*9e94795aSAndroid Build Coastguard Worker########################################################### 201*9e94795aSAndroid Build Coastguard Worker 202*9e94795aSAndroid Build Coastguard Worker# $(1): List of directories to look for under this directory 203*9e94795aSAndroid Build Coastguard Workerdefine all-named-subdir-makefiles 204*9e94795aSAndroid Build Coastguard Worker$(wildcard $(addsuffix /Android.mk, $(addprefix $(call my-dir)/,$(1)))) 205*9e94795aSAndroid Build Coastguard Workerendef 206*9e94795aSAndroid Build Coastguard Worker 207*9e94795aSAndroid Build Coastguard Worker########################################################### 208*9e94795aSAndroid Build Coastguard Worker## Find all of the directories under the named directories with 209*9e94795aSAndroid Build Coastguard Worker## the specified name. 210*9e94795aSAndroid Build Coastguard Worker## Meant to be used like: 211*9e94795aSAndroid Build Coastguard Worker## INC_DIRS := $(call all-named-dirs-under,inc,.) 212*9e94795aSAndroid Build Coastguard Worker########################################################### 213*9e94795aSAndroid Build Coastguard Worker 214*9e94795aSAndroid Build Coastguard Workerdefine all-named-dirs-under 215*9e94795aSAndroid Build Coastguard Worker$(call find-subdir-files,$(2) -type d -name "$(1)") 216*9e94795aSAndroid Build Coastguard Workerendef 217*9e94795aSAndroid Build Coastguard Worker 218*9e94795aSAndroid Build Coastguard Worker########################################################### 219*9e94795aSAndroid Build Coastguard Worker## Find all the directories under the current directory that 220*9e94795aSAndroid Build Coastguard Worker## haves name that match $(1) 221*9e94795aSAndroid Build Coastguard Worker########################################################### 222*9e94795aSAndroid Build Coastguard Worker 223*9e94795aSAndroid Build Coastguard Workerdefine all-subdir-named-dirs 224*9e94795aSAndroid Build Coastguard Worker$(call all-named-dirs-under,$(1),.) 225*9e94795aSAndroid Build Coastguard Workerendef 226*9e94795aSAndroid Build Coastguard Worker 227*9e94795aSAndroid Build Coastguard Worker########################################################### 228*9e94795aSAndroid Build Coastguard Worker## Find all of the files under the named directories with 229*9e94795aSAndroid Build Coastguard Worker## the specified name. 230*9e94795aSAndroid Build Coastguard Worker## Meant to be used like: 231*9e94795aSAndroid Build Coastguard Worker## SRC_FILES := $(call all-named-files-under,*.h,src tests) 232*9e94795aSAndroid Build Coastguard Worker########################################################### 233*9e94795aSAndroid Build Coastguard Worker 234*9e94795aSAndroid Build Coastguard Workerdefine all-named-files-under 235*9e94795aSAndroid Build Coastguard Worker$(call find-files-in-subdirs,$(LOCAL_PATH),"$(1)",$(2)) 236*9e94795aSAndroid Build Coastguard Workerendef 237*9e94795aSAndroid Build Coastguard Worker 238*9e94795aSAndroid Build Coastguard Worker########################################################### 239*9e94795aSAndroid Build Coastguard Worker## Find all of the files under the current directory with 240*9e94795aSAndroid Build Coastguard Worker## the specified name. 241*9e94795aSAndroid Build Coastguard Worker########################################################### 242*9e94795aSAndroid Build Coastguard Worker 243*9e94795aSAndroid Build Coastguard Workerdefine all-subdir-named-files 244*9e94795aSAndroid Build Coastguard Worker$(call all-named-files-under,$(1),.) 245*9e94795aSAndroid Build Coastguard Workerendef 246*9e94795aSAndroid Build Coastguard Worker 247*9e94795aSAndroid Build Coastguard Worker########################################################### 248*9e94795aSAndroid Build Coastguard Worker## Find all of the java files under the named directories. 249*9e94795aSAndroid Build Coastguard Worker## Meant to be used like: 250*9e94795aSAndroid Build Coastguard Worker## SRC_FILES := $(call all-java-files-under,src tests) 251*9e94795aSAndroid Build Coastguard Worker########################################################### 252*9e94795aSAndroid Build Coastguard Worker 253*9e94795aSAndroid Build Coastguard Workerdefine all-java-files-under 254*9e94795aSAndroid Build Coastguard Worker$(call all-named-files-under,*.java,$(1)) 255*9e94795aSAndroid Build Coastguard Workerendef 256*9e94795aSAndroid Build Coastguard Worker 257*9e94795aSAndroid Build Coastguard Worker########################################################### 258*9e94795aSAndroid Build Coastguard Worker## Find all of the java files from here. Meant to be used like: 259*9e94795aSAndroid Build Coastguard Worker## SRC_FILES := $(call all-subdir-java-files) 260*9e94795aSAndroid Build Coastguard Worker########################################################### 261*9e94795aSAndroid Build Coastguard Worker 262*9e94795aSAndroid Build Coastguard Workerdefine all-subdir-java-files 263*9e94795aSAndroid Build Coastguard Worker$(call all-java-files-under,.) 264*9e94795aSAndroid Build Coastguard Workerendef 265*9e94795aSAndroid Build Coastguard Worker 266*9e94795aSAndroid Build Coastguard Worker########################################################### 267*9e94795aSAndroid Build Coastguard Worker## Find all of the c files under the named directories. 268*9e94795aSAndroid Build Coastguard Worker## Meant to be used like: 269*9e94795aSAndroid Build Coastguard Worker## SRC_FILES := $(call all-c-files-under,src tests) 270*9e94795aSAndroid Build Coastguard Worker########################################################### 271*9e94795aSAndroid Build Coastguard Worker 272*9e94795aSAndroid Build Coastguard Workerdefine all-c-files-under 273*9e94795aSAndroid Build Coastguard Worker$(call all-named-files-under,*.c,$(1)) 274*9e94795aSAndroid Build Coastguard Workerendef 275*9e94795aSAndroid Build Coastguard Worker 276*9e94795aSAndroid Build Coastguard Worker########################################################### 277*9e94795aSAndroid Build Coastguard Worker## Find all of the c files from here. Meant to be used like: 278*9e94795aSAndroid Build Coastguard Worker## SRC_FILES := $(call all-subdir-c-files) 279*9e94795aSAndroid Build Coastguard Worker########################################################### 280*9e94795aSAndroid Build Coastguard Worker 281*9e94795aSAndroid Build Coastguard Workerdefine all-subdir-c-files 282*9e94795aSAndroid Build Coastguard Worker$(call all-c-files-under,.) 283*9e94795aSAndroid Build Coastguard Workerendef 284*9e94795aSAndroid Build Coastguard Worker 285*9e94795aSAndroid Build Coastguard Worker########################################################### 286*9e94795aSAndroid Build Coastguard Worker## Find all of the cpp files under the named directories. 287*9e94795aSAndroid Build Coastguard Worker## LOCAL_CPP_EXTENSION is respected if set. 288*9e94795aSAndroid Build Coastguard Worker## Meant to be used like: 289*9e94795aSAndroid Build Coastguard Worker## SRC_FILES := $(call all-cpp-files-under,src tests) 290*9e94795aSAndroid Build Coastguard Worker########################################################### 291*9e94795aSAndroid Build Coastguard Worker 292*9e94795aSAndroid Build Coastguard Workerdefine all-cpp-files-under 293*9e94795aSAndroid Build Coastguard Worker$(sort $(patsubst ./%,%, \ 294*9e94795aSAndroid Build Coastguard Worker $(shell cd $(LOCAL_PATH) ; \ 295*9e94795aSAndroid Build Coastguard Worker find -L $(1) -name "*$(or $(LOCAL_CPP_EXTENSION),.cpp)" -and -not -name ".*") \ 296*9e94795aSAndroid Build Coastguard Worker )) 297*9e94795aSAndroid Build Coastguard Workerendef 298*9e94795aSAndroid Build Coastguard Worker 299*9e94795aSAndroid Build Coastguard Worker########################################################### 300*9e94795aSAndroid Build Coastguard Worker## Find all of the cpp files from here. Meant to be used like: 301*9e94795aSAndroid Build Coastguard Worker## SRC_FILES := $(call all-subdir-cpp-files) 302*9e94795aSAndroid Build Coastguard Worker########################################################### 303*9e94795aSAndroid Build Coastguard Worker 304*9e94795aSAndroid Build Coastguard Workerdefine all-subdir-cpp-files 305*9e94795aSAndroid Build Coastguard Worker$(call all-cpp-files-under,.) 306*9e94795aSAndroid Build Coastguard Workerendef 307*9e94795aSAndroid Build Coastguard Worker 308*9e94795aSAndroid Build Coastguard Worker########################################################### 309*9e94795aSAndroid Build Coastguard Worker## Find all files named "I*.aidl" under the named directories, 310*9e94795aSAndroid Build Coastguard Worker## which must be relative to $(LOCAL_PATH). The returned list 311*9e94795aSAndroid Build Coastguard Worker## is relative to $(LOCAL_PATH). 312*9e94795aSAndroid Build Coastguard Worker########################################################### 313*9e94795aSAndroid Build Coastguard Worker 314*9e94795aSAndroid Build Coastguard Workerdefine all-Iaidl-files-under 315*9e94795aSAndroid Build Coastguard Worker$(call all-named-files-under,I*.aidl,$(1)) 316*9e94795aSAndroid Build Coastguard Workerendef 317*9e94795aSAndroid Build Coastguard Worker 318*9e94795aSAndroid Build Coastguard Worker########################################################### 319*9e94795aSAndroid Build Coastguard Worker## Find all of the "I*.aidl" files under $(LOCAL_PATH). 320*9e94795aSAndroid Build Coastguard Worker########################################################### 321*9e94795aSAndroid Build Coastguard Worker 322*9e94795aSAndroid Build Coastguard Workerdefine all-subdir-Iaidl-files 323*9e94795aSAndroid Build Coastguard Worker$(call all-Iaidl-files-under,.) 324*9e94795aSAndroid Build Coastguard Workerendef 325*9e94795aSAndroid Build Coastguard Worker 326*9e94795aSAndroid Build Coastguard Worker########################################################### 327*9e94795aSAndroid Build Coastguard Worker## Find all files named "*.vts" under the named directories, 328*9e94795aSAndroid Build Coastguard Worker## which must be relative to $(LOCAL_PATH). The returned list 329*9e94795aSAndroid Build Coastguard Worker## is relative to $(LOCAL_PATH). 330*9e94795aSAndroid Build Coastguard Worker########################################################### 331*9e94795aSAndroid Build Coastguard Worker 332*9e94795aSAndroid Build Coastguard Workerdefine all-vts-files-under 333*9e94795aSAndroid Build Coastguard Worker$(call all-named-files-under,*.vts,$(1)) 334*9e94795aSAndroid Build Coastguard Workerendef 335*9e94795aSAndroid Build Coastguard Worker 336*9e94795aSAndroid Build Coastguard Worker########################################################### 337*9e94795aSAndroid Build Coastguard Worker## Find all of the "*.vts" files under $(LOCAL_PATH). 338*9e94795aSAndroid Build Coastguard Worker########################################################### 339*9e94795aSAndroid Build Coastguard Worker 340*9e94795aSAndroid Build Coastguard Workerdefine all-subdir-vts-files 341*9e94795aSAndroid Build Coastguard Worker$(call all-vts-files-under,.) 342*9e94795aSAndroid Build Coastguard Workerendef 343*9e94795aSAndroid Build Coastguard Worker 344*9e94795aSAndroid Build Coastguard Worker########################################################### 345*9e94795aSAndroid Build Coastguard Worker## Find all of the logtags files under the named directories. 346*9e94795aSAndroid Build Coastguard Worker## Meant to be used like: 347*9e94795aSAndroid Build Coastguard Worker## SRC_FILES := $(call all-logtags-files-under,src) 348*9e94795aSAndroid Build Coastguard Worker########################################################### 349*9e94795aSAndroid Build Coastguard Worker 350*9e94795aSAndroid Build Coastguard Workerdefine all-logtags-files-under 351*9e94795aSAndroid Build Coastguard Worker$(call all-named-files-under,*.logtags,$(1)) 352*9e94795aSAndroid Build Coastguard Workerendef 353*9e94795aSAndroid Build Coastguard Worker 354*9e94795aSAndroid Build Coastguard Worker########################################################### 355*9e94795aSAndroid Build Coastguard Worker## Find all of the .proto files under the named directories. 356*9e94795aSAndroid Build Coastguard Worker## Meant to be used like: 357*9e94795aSAndroid Build Coastguard Worker## SRC_FILES := $(call all-proto-files-under,src) 358*9e94795aSAndroid Build Coastguard Worker########################################################### 359*9e94795aSAndroid Build Coastguard Worker 360*9e94795aSAndroid Build Coastguard Workerdefine all-proto-files-under 361*9e94795aSAndroid Build Coastguard Worker$(call all-named-files-under,*.proto,$(1)) 362*9e94795aSAndroid Build Coastguard Workerendef 363*9e94795aSAndroid Build Coastguard Worker 364*9e94795aSAndroid Build Coastguard Worker########################################################### 365*9e94795aSAndroid Build Coastguard Worker## Find all of the RenderScript files under the named directories. 366*9e94795aSAndroid Build Coastguard Worker## Meant to be used like: 367*9e94795aSAndroid Build Coastguard Worker## SRC_FILES := $(call all-renderscript-files-under,src) 368*9e94795aSAndroid Build Coastguard Worker########################################################### 369*9e94795aSAndroid Build Coastguard Worker 370*9e94795aSAndroid Build Coastguard Workerdefine all-renderscript-files-under 371*9e94795aSAndroid Build Coastguard Worker$(call find-subdir-files,$(1) \( -name "*.rscript" -or -name "*.fs" \) -and -not -name ".*") 372*9e94795aSAndroid Build Coastguard Workerendef 373*9e94795aSAndroid Build Coastguard Worker 374*9e94795aSAndroid Build Coastguard Worker########################################################### 375*9e94795aSAndroid Build Coastguard Worker## Find all of the S files under the named directories. 376*9e94795aSAndroid Build Coastguard Worker## Meant to be used like: 377*9e94795aSAndroid Build Coastguard Worker## SRC_FILES := $(call all-c-files-under,src tests) 378*9e94795aSAndroid Build Coastguard Worker########################################################### 379*9e94795aSAndroid Build Coastguard Worker 380*9e94795aSAndroid Build Coastguard Workerdefine all-S-files-under 381*9e94795aSAndroid Build Coastguard Worker$(call all-named-files-under,*.S,$(1)) 382*9e94795aSAndroid Build Coastguard Workerendef 383*9e94795aSAndroid Build Coastguard Worker 384*9e94795aSAndroid Build Coastguard Worker########################################################### 385*9e94795aSAndroid Build Coastguard Worker## Find all of the html files under the named directories. 386*9e94795aSAndroid Build Coastguard Worker## Meant to be used like: 387*9e94795aSAndroid Build Coastguard Worker## SRC_FILES := $(call all-html-files-under,src tests) 388*9e94795aSAndroid Build Coastguard Worker########################################################### 389*9e94795aSAndroid Build Coastguard Worker 390*9e94795aSAndroid Build Coastguard Workerdefine all-html-files-under 391*9e94795aSAndroid Build Coastguard Worker$(call all-named-files-under,*.html,$(1)) 392*9e94795aSAndroid Build Coastguard Workerendef 393*9e94795aSAndroid Build Coastguard Worker 394*9e94795aSAndroid Build Coastguard Worker########################################################### 395*9e94795aSAndroid Build Coastguard Worker## Find all of the html files from here. Meant to be used like: 396*9e94795aSAndroid Build Coastguard Worker## SRC_FILES := $(call all-subdir-html-files) 397*9e94795aSAndroid Build Coastguard Worker########################################################### 398*9e94795aSAndroid Build Coastguard Worker 399*9e94795aSAndroid Build Coastguard Workerdefine all-subdir-html-files 400*9e94795aSAndroid Build Coastguard Worker$(call all-html-files-under,.) 401*9e94795aSAndroid Build Coastguard Workerendef 402*9e94795aSAndroid Build Coastguard Worker 403*9e94795aSAndroid Build Coastguard Worker########################################################### 404*9e94795aSAndroid Build Coastguard Worker## Find all of the files matching pattern 405*9e94795aSAndroid Build Coastguard Worker## SRC_FILES := $(call find-subdir-files, <pattern>) 406*9e94795aSAndroid Build Coastguard Worker########################################################### 407*9e94795aSAndroid Build Coastguard Worker 408*9e94795aSAndroid Build Coastguard Workerdefine find-subdir-files 409*9e94795aSAndroid Build Coastguard Worker$(sort $(patsubst ./%,%,$(shell cd $(LOCAL_PATH) ; find -L $(1)))) 410*9e94795aSAndroid Build Coastguard Workerendef 411*9e94795aSAndroid Build Coastguard Worker 412*9e94795aSAndroid Build Coastguard Worker########################################################### 413*9e94795aSAndroid Build Coastguard Worker# find the files in the subdirectory $1 of LOCAL_DIR 414*9e94795aSAndroid Build Coastguard Worker# matching pattern $2, filtering out files $3 415*9e94795aSAndroid Build Coastguard Worker# e.g. 416*9e94795aSAndroid Build Coastguard Worker# SRC_FILES += $(call find-subdir-subdir-files, \ 417*9e94795aSAndroid Build Coastguard Worker# css, *.cpp, DontWantThis.cpp) 418*9e94795aSAndroid Build Coastguard Worker########################################################### 419*9e94795aSAndroid Build Coastguard Worker 420*9e94795aSAndroid Build Coastguard Workerdefine find-subdir-subdir-files 421*9e94795aSAndroid Build Coastguard Worker$(sort $(filter-out $(patsubst %,$(1)/%,$(3)),$(patsubst ./%,%,$(shell cd \ 422*9e94795aSAndroid Build Coastguard Worker $(LOCAL_PATH) ; find -L $(1) -maxdepth 1 -name $(2))))) 423*9e94795aSAndroid Build Coastguard Workerendef 424*9e94795aSAndroid Build Coastguard Worker 425*9e94795aSAndroid Build Coastguard Worker########################################################### 426*9e94795aSAndroid Build Coastguard Worker## Find all of the files matching pattern 427*9e94795aSAndroid Build Coastguard Worker## SRC_FILES := $(call all-subdir-java-files) 428*9e94795aSAndroid Build Coastguard Worker########################################################### 429*9e94795aSAndroid Build Coastguard Worker 430*9e94795aSAndroid Build Coastguard Workerdefine find-subdir-assets 431*9e94795aSAndroid Build Coastguard Worker$(sort $(if $(1),$(patsubst ./%,%, \ 432*9e94795aSAndroid Build Coastguard Worker $(shell if [ -d $(1) ] ; then cd $(1) ; find -L ./ -not -name '.*' -and -type f ; fi)), \ 433*9e94795aSAndroid Build Coastguard Worker $(warning Empty argument supplied to find-subdir-assets in $(LOCAL_PATH)) \ 434*9e94795aSAndroid Build Coastguard Worker)) 435*9e94795aSAndroid Build Coastguard Workerendef 436*9e94795aSAndroid Build Coastguard Worker 437*9e94795aSAndroid Build Coastguard Worker########################################################### 438*9e94795aSAndroid Build Coastguard Worker## Find various file types in a list of directories relative to $(LOCAL_PATH) 439*9e94795aSAndroid Build Coastguard Worker########################################################### 440*9e94795aSAndroid Build Coastguard Worker 441*9e94795aSAndroid Build Coastguard Workerdefine find-other-java-files 442*9e94795aSAndroid Build Coastguard Worker$(call all-java-files-under,$(1)) 443*9e94795aSAndroid Build Coastguard Workerendef 444*9e94795aSAndroid Build Coastguard Worker 445*9e94795aSAndroid Build Coastguard Workerdefine find-other-html-files 446*9e94795aSAndroid Build Coastguard Worker$(call all-html-files-under,$(1)) 447*9e94795aSAndroid Build Coastguard Workerendef 448*9e94795aSAndroid Build Coastguard Worker 449*9e94795aSAndroid Build Coastguard Worker########################################################### 450*9e94795aSAndroid Build Coastguard Worker# Use utility find to find given files in the given subdirs. 451*9e94795aSAndroid Build Coastguard Worker# This function uses $(1), instead of LOCAL_PATH as the base. 452*9e94795aSAndroid Build Coastguard Worker# $(1): the base dir, relative to the root of the source tree. 453*9e94795aSAndroid Build Coastguard Worker# $(2): the file name pattern to be passed to find as "-name". 454*9e94795aSAndroid Build Coastguard Worker# $(3): a list of subdirs of the base dir. 455*9e94795aSAndroid Build Coastguard Worker# Returns: a list of paths relative to the base dir. 456*9e94795aSAndroid Build Coastguard Worker########################################################### 457*9e94795aSAndroid Build Coastguard Worker 458*9e94795aSAndroid Build Coastguard Workerdefine find-files-in-subdirs 459*9e94795aSAndroid Build Coastguard Worker$(sort $(patsubst ./%,%, \ 460*9e94795aSAndroid Build Coastguard Worker $(shell cd $(1) ; \ 461*9e94795aSAndroid Build Coastguard Worker find -L $(3) -name $(2) -and -not -name ".*") \ 462*9e94795aSAndroid Build Coastguard Worker )) 463*9e94795aSAndroid Build Coastguard Workerendef 464*9e94795aSAndroid Build Coastguard Worker 465*9e94795aSAndroid Build Coastguard Worker########################################################### 466*9e94795aSAndroid Build Coastguard Worker## Scan through each directory of $(1) looking for files 467*9e94795aSAndroid Build Coastguard Worker## that match $(2) using $(wildcard). Useful for seeing if 468*9e94795aSAndroid Build Coastguard Worker## a given directory or one of its parents contains 469*9e94795aSAndroid Build Coastguard Worker## a particular file. Returns the first match found, 470*9e94795aSAndroid Build Coastguard Worker## starting furthest from the root. 471*9e94795aSAndroid Build Coastguard Worker########################################################### 472*9e94795aSAndroid Build Coastguard Worker 473*9e94795aSAndroid Build Coastguard Workerdefine find-parent-file 474*9e94795aSAndroid Build Coastguard Worker$(strip \ 475*9e94795aSAndroid Build Coastguard Worker $(eval _fpf := $(sort $(wildcard $(foreach f, $(2), $(strip $(1))/$(f))))) \ 476*9e94795aSAndroid Build Coastguard Worker $(if $(_fpf),$(_fpf), \ 477*9e94795aSAndroid Build Coastguard Worker $(if $(filter-out ./ .,$(1)), \ 478*9e94795aSAndroid Build Coastguard Worker $(call find-parent-file,$(patsubst %/,%,$(dir $(1))),$(2)) \ 479*9e94795aSAndroid Build Coastguard Worker ) \ 480*9e94795aSAndroid Build Coastguard Worker ) \ 481*9e94795aSAndroid Build Coastguard Worker) 482*9e94795aSAndroid Build Coastguard Workerendef 483*9e94795aSAndroid Build Coastguard Worker 484*9e94795aSAndroid Build Coastguard Worker########################################################### 485*9e94795aSAndroid Build Coastguard Worker## Find test data in a form required by LOCAL_TEST_DATA 486*9e94795aSAndroid Build Coastguard Worker## $(1): the base dir, relative to the root of the source tree. 487*9e94795aSAndroid Build Coastguard Worker## $(2): the file name pattern to be passed to find as "-name" 488*9e94795aSAndroid Build Coastguard Worker## $(3): a list of subdirs of the base dir 489*9e94795aSAndroid Build Coastguard Worker########################################################### 490*9e94795aSAndroid Build Coastguard Worker 491*9e94795aSAndroid Build Coastguard Workerdefine find-test-data-in-subdirs 492*9e94795aSAndroid Build Coastguard Worker$(foreach f,$(sort $(patsubst ./%,%, \ 493*9e94795aSAndroid Build Coastguard Worker $(shell cd $(1) ; \ 494*9e94795aSAndroid Build Coastguard Worker find -L $(3) -type f -and -name $(2) -and -not -name ".*") \ 495*9e94795aSAndroid Build Coastguard Worker)),$(1):$(f)) 496*9e94795aSAndroid Build Coastguard Workerendef 497*9e94795aSAndroid Build Coastguard Worker 498*9e94795aSAndroid Build Coastguard Worker########################################################### 499*9e94795aSAndroid Build Coastguard Worker## Function we can evaluate to introduce a dynamic dependency 500*9e94795aSAndroid Build Coastguard Worker########################################################### 501*9e94795aSAndroid Build Coastguard Worker 502*9e94795aSAndroid Build Coastguard Workerdefine add-dependency 503*9e94795aSAndroid Build Coastguard Worker$(1): $(2) 504*9e94795aSAndroid Build Coastguard Workerendef 505*9e94795aSAndroid Build Coastguard Worker 506*9e94795aSAndroid Build Coastguard Worker########################################################### 507*9e94795aSAndroid Build Coastguard Worker## Reverse order of a list 508*9e94795aSAndroid Build Coastguard Worker########################################################### 509*9e94795aSAndroid Build Coastguard Worker 510*9e94795aSAndroid Build Coastguard Workerdefine reverse-list 511*9e94795aSAndroid Build Coastguard Worker$(if $(1),$(call reverse-list,$(wordlist 2,$(words $(1)),$(1)))) $(firstword $(1)) 512*9e94795aSAndroid Build Coastguard Workerendef 513*9e94795aSAndroid Build Coastguard Worker 514*9e94795aSAndroid Build Coastguard Worker########################################################### 515*9e94795aSAndroid Build Coastguard Worker## Sometimes a notice dependency will reference an unadorned 516*9e94795aSAndroid Build Coastguard Worker## module name that only appears in ALL_MODULES adorned with 517*9e94795aSAndroid Build Coastguard Worker## an ARCH suffix or a `host_cross_` prefix. 518*9e94795aSAndroid Build Coastguard Worker## 519*9e94795aSAndroid Build Coastguard Worker## After all of the modules are processed in base_rules.mk, 520*9e94795aSAndroid Build Coastguard Worker## replace all such dependencies with every matching adorned 521*9e94795aSAndroid Build Coastguard Worker## module name. 522*9e94795aSAndroid Build Coastguard Worker########################################################### 523*9e94795aSAndroid Build Coastguard Worker 524*9e94795aSAndroid Build Coastguard Workerdefine fix-notice-deps 525*9e94795aSAndroid Build Coastguard Worker$(strip \ 526*9e94795aSAndroid Build Coastguard Worker $(eval _all_module_refs := \ 527*9e94795aSAndroid Build Coastguard Worker $(sort \ 528*9e94795aSAndroid Build Coastguard Worker $(foreach m,$(sort $(ALL_MODULES)), \ 529*9e94795aSAndroid Build Coastguard Worker $(call word-colon,1,$(ALL_MODULES.$(m).NOTICE_DEPS)) \ 530*9e94795aSAndroid Build Coastguard Worker ) \ 531*9e94795aSAndroid Build Coastguard Worker ) \ 532*9e94795aSAndroid Build Coastguard Worker ) \ 533*9e94795aSAndroid Build Coastguard Worker $(foreach m, $(_all_module_refs), \ 534*9e94795aSAndroid Build Coastguard Worker $(eval _lookup.$(m) := \ 535*9e94795aSAndroid Build Coastguard Worker $(sort \ 536*9e94795aSAndroid Build Coastguard Worker $(if $(strip $(ALL_MODULES.$(m).PATH)), \ 537*9e94795aSAndroid Build Coastguard Worker $(m), \ 538*9e94795aSAndroid Build Coastguard Worker $(filter $(m)_32 $(m)_64 host_cross_$(m) host_cross_$(m)_32 host_cross_$(m)_64, $(ALL_MODULES)) \ 539*9e94795aSAndroid Build Coastguard Worker ) \ 540*9e94795aSAndroid Build Coastguard Worker ) \ 541*9e94795aSAndroid Build Coastguard Worker ) \ 542*9e94795aSAndroid Build Coastguard Worker ) \ 543*9e94795aSAndroid Build Coastguard Worker $(foreach m, $(ALL_MODULES), \ 544*9e94795aSAndroid Build Coastguard Worker $(eval ALL_MODULES.$(m).NOTICE_DEPS := \ 545*9e94795aSAndroid Build Coastguard Worker $(sort \ 546*9e94795aSAndroid Build Coastguard Worker $(foreach d,$(sort $(ALL_MODULES.$(m).NOTICE_DEPS)), \ 547*9e94795aSAndroid Build Coastguard Worker $(foreach n,$(_lookup.$(call word-colon,1,$(d))),$(n):$(call wordlist-colon,2,9999,$(d))) \ 548*9e94795aSAndroid Build Coastguard Worker ) \ 549*9e94795aSAndroid Build Coastguard Worker ) \ 550*9e94795aSAndroid Build Coastguard Worker ) \ 551*9e94795aSAndroid Build Coastguard Worker ) \ 552*9e94795aSAndroid Build Coastguard Worker) 553*9e94795aSAndroid Build Coastguard Workerendef 554*9e94795aSAndroid Build Coastguard Worker 555*9e94795aSAndroid Build Coastguard Worker########################################################### 556*9e94795aSAndroid Build Coastguard Worker## Target directory for license metadata files. 557*9e94795aSAndroid Build Coastguard Worker########################################################### 558*9e94795aSAndroid Build Coastguard Workerdefine license-metadata-dir 559*9e94795aSAndroid Build Coastguard Worker$(call generated-sources-dir-for,META,lic,$(filter-out $(PRODUCT_OUT)%,$(1))) 560*9e94795aSAndroid Build Coastguard Workerendef 561*9e94795aSAndroid Build Coastguard Worker 562*9e94795aSAndroid Build Coastguard WorkerTARGETS_MISSING_LICENSE_METADATA:= 563*9e94795aSAndroid Build Coastguard Worker 564*9e94795aSAndroid Build Coastguard Worker########################################################### 565*9e94795aSAndroid Build Coastguard Worker# License metadata targets corresponding to targets in $(1) 566*9e94795aSAndroid Build Coastguard Worker########################################################### 567*9e94795aSAndroid Build Coastguard Workerdefine corresponding-license-metadata 568*9e94795aSAndroid Build Coastguard Worker$(strip $(filter-out 0p,$(foreach target, $(sort $(1)), \ 569*9e94795aSAndroid Build Coastguard Worker $(if $(strip $(ALL_MODULES.$(target).META_LIC)), \ 570*9e94795aSAndroid Build Coastguard Worker $(ALL_MODULES.$(target).META_LIC), \ 571*9e94795aSAndroid Build Coastguard Worker $(if $(strip $(ALL_TARGETS.$(target).META_LIC)), \ 572*9e94795aSAndroid Build Coastguard Worker $(ALL_TARGETS.$(target).META_LIC), \ 573*9e94795aSAndroid Build Coastguard Worker $(eval TARGETS_MISSING_LICENSE_METADATA += $(target)) \ 574*9e94795aSAndroid Build Coastguard Worker ) \ 575*9e94795aSAndroid Build Coastguard Worker ) \ 576*9e94795aSAndroid Build Coastguard Worker))) 577*9e94795aSAndroid Build Coastguard Workerendef 578*9e94795aSAndroid Build Coastguard Worker 579*9e94795aSAndroid Build Coastguard Worker########################################################### 580*9e94795aSAndroid Build Coastguard Worker## Record a target $(1) copied from another target(s) $(2) that will need 581*9e94795aSAndroid Build Coastguard Worker## license metadata. 582*9e94795aSAndroid Build Coastguard Worker########################################################### 583*9e94795aSAndroid Build Coastguard Workerdefine declare-copy-target-license-metadata 584*9e94795aSAndroid Build Coastguard Worker$(strip $(if $(filter $(OUT_DIR)%,$(2)),\ 585*9e94795aSAndroid Build Coastguard Worker $(eval _tgt:=$(strip $(1)))\ 586*9e94795aSAndroid Build Coastguard Worker $(eval ALL_COPIED_TARGETS.$(_tgt).SOURCES := $(sort $(ALL_COPIED_TARGETS.$(_tgt).SOURCES) $(filter $(OUT_DIR)%,$(2))))\ 587*9e94795aSAndroid Build Coastguard Worker $(eval ALL_COPIED_TARGETS += $(_tgt)))) 588*9e94795aSAndroid Build Coastguard Workerendef 589*9e94795aSAndroid Build Coastguard Worker 590*9e94795aSAndroid Build Coastguard Worker########################################################### 591*9e94795aSAndroid Build Coastguard Worker## License metadata build rule for my_register_name $(1) 592*9e94795aSAndroid Build Coastguard Worker########################################################### 593*9e94795aSAndroid Build Coastguard Workerdefine license-metadata-rule 594*9e94795aSAndroid Build Coastguard Worker$(foreach meta_lic, $(ALL_MODULES.$(1).DELAYED_META_LIC),$(call _license-metadata-rule,$(1),$(meta_lic))) 595*9e94795aSAndroid Build Coastguard Workerendef 596*9e94795aSAndroid Build Coastguard Worker 597*9e94795aSAndroid Build Coastguard Worker$(KATI_obsolete_var notice-rule, This function has been removed) 598*9e94795aSAndroid Build Coastguard Worker 599*9e94795aSAndroid Build Coastguard Workerdefine _license-metadata-rule 600*9e94795aSAndroid Build Coastguard Worker$(strip $(eval _srcs := $(strip $(foreach d,$(ALL_MODULES.$(1).NOTICE_DEPS),$(if $(strip $(ALL_MODULES.$(call word-colon,1,$(d)).INSTALLED)), $(ALL_MODULES.$(call word-colon,1,$(d)).INSTALLED),$(if $(strip $(ALL_MODULES.$(call word-colon,1,$(d)).BUILT)), $(ALL_MODULES.$(call word-colon,1,$(d)).BUILT), $(call word-colon,1,$d))))))) 601*9e94795aSAndroid Build Coastguard Worker$(strip $(eval _deps := $(sort $(filter-out $(2)%,\ 602*9e94795aSAndroid Build Coastguard Worker $(foreach d,$(ALL_MODULES.$(1).NOTICE_DEPS),\ 603*9e94795aSAndroid Build Coastguard Worker $(addsuffix :$(call wordlist-colon,2,9999,$(d)), \ 604*9e94795aSAndroid Build Coastguard Worker $(foreach dt,$(ALL_MODULES.$(d).BUILT) $(ALL_MODULES.$(d).INSTALLED),\ 605*9e94795aSAndroid Build Coastguard Worker $(ALL_TARGETS.$(dt).META_LIC)))))))) 606*9e94795aSAndroid Build Coastguard Worker$(strip $(eval _notices := $(sort $(ALL_MODULES.$(1).NOTICES)))) 607*9e94795aSAndroid Build Coastguard Worker$(strip $(eval _tgts := $(sort $(ALL_MODULES.$(1).BUILT)))) 608*9e94795aSAndroid Build Coastguard Worker$(strip $(eval _inst := $(sort $(ALL_MODULES.$(1).INSTALLED)))) 609*9e94795aSAndroid Build Coastguard Worker$(strip $(eval _path := $(sort $(ALL_MODULES.$(1).PATH)))) 610*9e94795aSAndroid Build Coastguard Worker$(strip $(eval _map := $(strip $(foreach _m,$(sort $(ALL_MODULES.$(1).LICENSE_INSTALL_MAP)), \ 611*9e94795aSAndroid Build Coastguard Worker $(eval _s := $(call word-colon,1,$(_m))) \ 612*9e94795aSAndroid Build Coastguard Worker $(eval _d := $(call word-colon,2,$(_m))) \ 613*9e94795aSAndroid Build Coastguard Worker $(eval _ns := $(if $(strip $(ALL_MODULES.$(_s).INSTALLED)),$(ALL_MODULES.$(_s).INSTALLED),$(if $(strip $(ALL_MODULES.$(_s).BUILT)),$(ALL_MODULES.$(_s).BUILT),$(_s)))) \ 614*9e94795aSAndroid Build Coastguard Worker $(foreach ns,$(_ns),$(ns):$(_d) ) \ 615*9e94795aSAndroid Build Coastguard Worker)))) 616*9e94795aSAndroid Build Coastguard Worker 617*9e94795aSAndroid Build Coastguard Worker$(2): PRIVATE_KINDS := $(sort $(ALL_MODULES.$(1).LICENSE_KINDS)) 618*9e94795aSAndroid Build Coastguard Worker$(2): PRIVATE_CONDITIONS := $(sort $(ALL_MODULES.$(1).LICENSE_CONDITIONS)) 619*9e94795aSAndroid Build Coastguard Worker$(2): PRIVATE_NOTICES := $(_notices) 620*9e94795aSAndroid Build Coastguard Worker$(2): PRIVATE_NOTICE_DEPS := $(_deps) 621*9e94795aSAndroid Build Coastguard Worker$(2): PRIVATE_SOURCES := $(_srcs) 622*9e94795aSAndroid Build Coastguard Worker$(2): PRIVATE_TARGETS := $(_tgts) 623*9e94795aSAndroid Build Coastguard Worker$(2): PRIVATE_INSTALLED := $(_inst) 624*9e94795aSAndroid Build Coastguard Worker$(2): PRIVATE_PATH := $(_path) 625*9e94795aSAndroid Build Coastguard Worker$(2): PRIVATE_IS_CONTAINER := $(ALL_MODULES.$(1).IS_CONTAINER) 626*9e94795aSAndroid Build Coastguard Worker$(2): PRIVATE_PACKAGE_NAME := $(strip $(ALL_MODULES.$(1).LICENSE_PACKAGE_NAME)) 627*9e94795aSAndroid Build Coastguard Worker$(2): PRIVATE_INSTALL_MAP := $(_map) 628*9e94795aSAndroid Build Coastguard Worker$(2): PRIVATE_MODULE_NAME := $(1) 629*9e94795aSAndroid Build Coastguard Worker$(2): PRIVATE_MODULE_TYPE := $(ALL_MODULES.$(1).MODULE_TYPE) 630*9e94795aSAndroid Build Coastguard Worker$(2): PRIVATE_MODULE_CLASS := $(ALL_MODULES.$(1).MODULE_CLASS) 631*9e94795aSAndroid Build Coastguard Worker$(2): PRIVATE_INSTALL_MAP := $(_map) 632*9e94795aSAndroid Build Coastguard Worker$(2): PRIVATE_ARGUMENT_FILE := $(call intermediates-dir-for,PACKAGING,notice)/$(2)/arguments 633*9e94795aSAndroid Build Coastguard Worker$(2): $(BUILD_LICENSE_METADATA) 634*9e94795aSAndroid Build Coastguard Worker$(2) : $(foreach d,$(_deps),$(call word-colon,1,$(d))) $(foreach n,$(_notices),$(call word-colon,1,$(n)) ) 635*9e94795aSAndroid Build Coastguard Worker rm -f $$@ 636*9e94795aSAndroid Build Coastguard Worker mkdir -p $$(dir $$@) 637*9e94795aSAndroid Build Coastguard Worker mkdir -p $$(dir $$(PRIVATE_ARGUMENT_FILE)) 638*9e94795aSAndroid Build Coastguard Worker $$(call dump-words-to-file,\ 639*9e94795aSAndroid Build Coastguard Worker $$(addprefix -mn ,$$(PRIVATE_MODULE_NAME))\ 640*9e94795aSAndroid Build Coastguard Worker $$(addprefix -mt ,$$(PRIVATE_MODULE_TYPE))\ 641*9e94795aSAndroid Build Coastguard Worker $$(addprefix -mc ,$$(PRIVATE_MODULE_CLASS))\ 642*9e94795aSAndroid Build Coastguard Worker $$(addprefix -k ,$$(PRIVATE_KINDS))\ 643*9e94795aSAndroid Build Coastguard Worker $$(addprefix -c ,$$(PRIVATE_CONDITIONS))\ 644*9e94795aSAndroid Build Coastguard Worker $$(addprefix -n ,$$(PRIVATE_NOTICES))\ 645*9e94795aSAndroid Build Coastguard Worker $$(addprefix -d ,$$(PRIVATE_NOTICE_DEPS))\ 646*9e94795aSAndroid Build Coastguard Worker $$(addprefix -s ,$$(PRIVATE_SOURCES))\ 647*9e94795aSAndroid Build Coastguard Worker $$(addprefix -m ,$$(PRIVATE_INSTALL_MAP))\ 648*9e94795aSAndroid Build Coastguard Worker $$(addprefix -t ,$$(PRIVATE_TARGETS))\ 649*9e94795aSAndroid Build Coastguard Worker $$(addprefix -i ,$$(PRIVATE_INSTALLED))\ 650*9e94795aSAndroid Build Coastguard Worker $$(addprefix -r ,$$(PRIVATE_PATH)),\ 651*9e94795aSAndroid Build Coastguard Worker $$(PRIVATE_ARGUMENT_FILE)) 652*9e94795aSAndroid Build Coastguard Worker OUT_DIR=$(OUT_DIR) $(BUILD_LICENSE_METADATA) \ 653*9e94795aSAndroid Build Coastguard Worker $$(if $$(PRIVATE_IS_CONTAINER),-is_container) \ 654*9e94795aSAndroid Build Coastguard Worker -p '$$(PRIVATE_PACKAGE_NAME)' \ 655*9e94795aSAndroid Build Coastguard Worker @$$(PRIVATE_ARGUMENT_FILE) \ 656*9e94795aSAndroid Build Coastguard Worker -o $$@ 657*9e94795aSAndroid Build Coastguard Workerendef 658*9e94795aSAndroid Build Coastguard Worker 659*9e94795aSAndroid Build Coastguard Worker 660*9e94795aSAndroid Build Coastguard Worker########################################################### 661*9e94795aSAndroid Build Coastguard Worker## License metadata build rule for non-module target $(1) 662*9e94795aSAndroid Build Coastguard Worker########################################################### 663*9e94795aSAndroid Build Coastguard Workerdefine non-module-license-metadata-rule 664*9e94795aSAndroid Build Coastguard Worker$(strip $(eval _dir := $(call license-metadata-dir,$(1)))) 665*9e94795aSAndroid Build Coastguard Worker$(strip $(eval _tgt := $(strip $(1)))) 666*9e94795aSAndroid Build Coastguard Worker$(strip $(eval _meta := $(call append-path,$(_dir),$(patsubst $(OUT_DIR)%,out%,$(_tgt).meta_lic)))) 667*9e94795aSAndroid Build Coastguard Worker$(strip $(eval _deps := $(sort $(filter-out 0p: :,$(foreach d,$(strip $(ALL_NON_MODULES.$(_tgt).DEPENDENCIES)),$(ALL_TARGETS.$(call word-colon,1,$(d)).META_LIC):$(call wordlist-colon,2,9999,$(d))))))) 668*9e94795aSAndroid Build Coastguard Worker$(strip $(eval _notices := $(sort $(ALL_NON_MODULES.$(_tgt).NOTICES)))) 669*9e94795aSAndroid Build Coastguard Worker$(strip $(eval _path := $(sort $(ALL_NON_MODULES.$(_tgt).PATH)))) 670*9e94795aSAndroid Build Coastguard Worker$(strip $(eval _install_map := $(ALL_NON_MODULES.$(_tgt).ROOT_MAPPINGS))) 671*9e94795aSAndroid Build Coastguard Worker 672*9e94795aSAndroid Build Coastguard Worker$(_meta): PRIVATE_KINDS := $(sort $(ALL_NON_MODULES.$(_tgt).LICENSE_KINDS)) 673*9e94795aSAndroid Build Coastguard Worker$(_meta): PRIVATE_CONDITIONS := $(sort $(ALL_NON_MODULES.$(_tgt).LICENSE_CONDITIONS)) 674*9e94795aSAndroid Build Coastguard Worker$(_meta): PRIVATE_NOTICES := $(_notices) 675*9e94795aSAndroid Build Coastguard Worker$(_meta): PRIVATE_NOTICE_DEPS := $(_deps) 676*9e94795aSAndroid Build Coastguard Worker$(_meta): PRIVATE_SOURCES := $(ALL_NON_MODULES.$(_tgt).DEPENDENCIES) 677*9e94795aSAndroid Build Coastguard Worker$(_meta): PRIVATE_TARGETS := $(_tgt) 678*9e94795aSAndroid Build Coastguard Worker$(_meta): PRIVATE_PATH := $(_path) 679*9e94795aSAndroid Build Coastguard Worker$(_meta): PRIVATE_IS_CONTAINER := $(ALL_NON_MODULES.$(_tgt).IS_CONTAINER) 680*9e94795aSAndroid Build Coastguard Worker$(_meta): PRIVATE_PACKAGE_NAME := $(strip $(ALL_NON_MODULES.$(_tgt).LICENSE_PACKAGE_NAME)) 681*9e94795aSAndroid Build Coastguard Worker$(_meta): PRIVATE_INSTALL_MAP := $(strip $(_install_map)) 682*9e94795aSAndroid Build Coastguard Worker$(_meta): PRIVATE_ARGUMENT_FILE := $(call intermediates-dir-for,PACKAGING,notice)/$(_meta)/arguments 683*9e94795aSAndroid Build Coastguard Worker$(_meta): $(BUILD_LICENSE_METADATA) 684*9e94795aSAndroid Build Coastguard Worker$(_meta) : $(foreach d,$(_deps),$(call word-colon,1,$(d))) $(foreach n,$(_notices),$(call word-colon,1,$(n)) ) 685*9e94795aSAndroid Build Coastguard Worker rm -f $$@ 686*9e94795aSAndroid Build Coastguard Worker mkdir -p $$(dir $$@) 687*9e94795aSAndroid Build Coastguard Worker mkdir -p $$(dir $$(PRIVATE_ARGUMENT_FILE)) 688*9e94795aSAndroid Build Coastguard Worker $$(call dump-words-to-file,\ 689*9e94795aSAndroid Build Coastguard Worker $$(addprefix -k ,$$(PRIVATE_KINDS))\ 690*9e94795aSAndroid Build Coastguard Worker $$(addprefix -c ,$$(PRIVATE_CONDITIONS))\ 691*9e94795aSAndroid Build Coastguard Worker $$(addprefix -n ,$$(PRIVATE_NOTICES))\ 692*9e94795aSAndroid Build Coastguard Worker $$(addprefix -d ,$$(PRIVATE_NOTICE_DEPS))\ 693*9e94795aSAndroid Build Coastguard Worker $$(addprefix -s ,$$(PRIVATE_SOURCES))\ 694*9e94795aSAndroid Build Coastguard Worker $$(addprefix -m ,$$(PRIVATE_INSTALL_MAP))\ 695*9e94795aSAndroid Build Coastguard Worker $$(addprefix -t ,$$(PRIVATE_TARGETS))\ 696*9e94795aSAndroid Build Coastguard Worker $$(addprefix -r ,$$(PRIVATE_PATH)),\ 697*9e94795aSAndroid Build Coastguard Worker $$(PRIVATE_ARGUMENT_FILE)) 698*9e94795aSAndroid Build Coastguard Worker OUT_DIR=$(OUT_DIR) $(BUILD_LICENSE_METADATA) \ 699*9e94795aSAndroid Build Coastguard Worker -mt raw -mc unknown \ 700*9e94795aSAndroid Build Coastguard Worker $$(if $$(PRIVATE_IS_CONTAINER),-is_container) \ 701*9e94795aSAndroid Build Coastguard Worker $$(addprefix -r ,$$(PRIVATE_PATH)) \ 702*9e94795aSAndroid Build Coastguard Worker @$$(PRIVATE_ARGUMENT_FILE) \ 703*9e94795aSAndroid Build Coastguard Worker -o $$@ 704*9e94795aSAndroid Build Coastguard Worker 705*9e94795aSAndroid Build Coastguard Workerendef 706*9e94795aSAndroid Build Coastguard Worker 707*9e94795aSAndroid Build Coastguard Worker########################################################### 708*9e94795aSAndroid Build Coastguard Worker## Record missing dependencies for non-module target $(1) 709*9e94795aSAndroid Build Coastguard Worker########################################################### 710*9e94795aSAndroid Build Coastguard Workerdefine record-missing-non-module-dependencies 711*9e94795aSAndroid Build Coastguard Worker$(strip $(eval _tgt := $(strip $(1)))) 712*9e94795aSAndroid Build Coastguard Worker$(strip $(foreach d,$(strip $(ALL_NON_MODULES.$(_tgt).DEPENDENCIES)), \ 713*9e94795aSAndroid Build Coastguard Worker $(if $(strip $(ALL_TARGETS.$(d).META_LIC)), \ 714*9e94795aSAndroid Build Coastguard Worker , \ 715*9e94795aSAndroid Build Coastguard Worker $(eval NON_MODULES_WITHOUT_LICENSE_METADATA += $(d))) \ 716*9e94795aSAndroid Build Coastguard Worker)) 717*9e94795aSAndroid Build Coastguard Workerendef 718*9e94795aSAndroid Build Coastguard Worker 719*9e94795aSAndroid Build Coastguard Worker########################################################### 720*9e94795aSAndroid Build Coastguard Worker## License metadata build rule for copied target $(1) 721*9e94795aSAndroid Build Coastguard Worker########################################################### 722*9e94795aSAndroid Build Coastguard Workerdefine copied-target-license-metadata-rule 723*9e94795aSAndroid Build Coastguard Worker$(if $(strip $(ALL_TARGETS.$(1).META_LIC)),,$(call _copied-target-license-metadata-rule,$(1))) 724*9e94795aSAndroid Build Coastguard Workerendef 725*9e94795aSAndroid Build Coastguard Worker 726*9e94795aSAndroid Build Coastguard Workerdefine _copied-target-license-metadata-rule 727*9e94795aSAndroid Build Coastguard Worker$(strip $(eval _dir := $(call license-metadata-dir,$(1)))) 728*9e94795aSAndroid Build Coastguard Worker$(strip $(eval _meta := $(call append-path,$(_dir),$(patsubst $(OUT_DIR)%,out%,$(1).meta_lic)))) 729*9e94795aSAndroid Build Coastguard Worker$(strip $(eval ALL_TARGETS.$(1).META_LIC:=$(_meta))) 730*9e94795aSAndroid Build Coastguard Worker$(strip $(eval _dep:=)) 731*9e94795aSAndroid Build Coastguard Worker$(strip $(foreach s,$(ALL_COPIED_TARGETS.$(1).SOURCES),\ 732*9e94795aSAndroid Build Coastguard Worker $(eval _dmeta:=$(ALL_TARGETS.$(s).META_LIC))\ 733*9e94795aSAndroid Build Coastguard Worker $(if $(filter-out 0p,$(_dep)),\ 734*9e94795aSAndroid Build Coastguard Worker $(if $(filter-out $(_dep),$(_dmeta)),$(error cannot copy target from multiple modules: $(1) from $(_dep) and $(_dmeta))),\ 735*9e94795aSAndroid Build Coastguard Worker $(eval _dep:=$(_dmeta))))) 736*9e94795aSAndroid Build Coastguard Worker$(if $(filter 0p,$(_dep)),$(eval ALL_TARGETS.$(1).META_LIC:=0p)) 737*9e94795aSAndroid Build Coastguard Worker$(strip $(if $(strip $(_dep)),,$(error cannot copy target from unknown module: $(1) from $(ALL_COPIED_TARGETS.$(1).SOURCES)))) 738*9e94795aSAndroid Build Coastguard Worker 739*9e94795aSAndroid Build Coastguard Workerifneq (0p,$(ALL_TARGETS.$(1).META_LIC)) 740*9e94795aSAndroid Build Coastguard Worker$(_meta): PRIVATE_DEST_TARGET := $(1) 741*9e94795aSAndroid Build Coastguard Worker$(_meta): PRIVATE_SOURCE_TARGETS := $(ALL_COPIED_TARGETS.$(1).SOURCES) 742*9e94795aSAndroid Build Coastguard Worker$(_meta): PRIVATE_SOURCE_METADATA := $(_dep) 743*9e94795aSAndroid Build Coastguard Worker$(_meta): PRIVATE_ARGUMENT_FILE := $(call intermediates-dir-for,PACKAGING,copynotice)/$(_meta)/arguments 744*9e94795aSAndroid Build Coastguard Worker$(_meta) : $(_dep) $(COPY_LICENSE_METADATA) 745*9e94795aSAndroid Build Coastguard Worker rm -f $$@ 746*9e94795aSAndroid Build Coastguard Worker mkdir -p $$(dir $$@) 747*9e94795aSAndroid Build Coastguard Worker mkdir -p $$(dir $$(PRIVATE_ARGUMENT_FILE)) 748*9e94795aSAndroid Build Coastguard Worker $$(call dump-words-to-file,\ 749*9e94795aSAndroid Build Coastguard Worker $$(addprefix -i ,$$(PRIVATE_DEST_TARGET))\ 750*9e94795aSAndroid Build Coastguard Worker $$(addprefix -s ,$$(PRIVATE_SOURCE_TARGETS))\ 751*9e94795aSAndroid Build Coastguard Worker $$(addprefix -d ,$$(PRIVATE_SOURCE_METADATA)),\ 752*9e94795aSAndroid Build Coastguard Worker $$(PRIVATE_ARGUMENT_FILE)) 753*9e94795aSAndroid Build Coastguard Worker OUT_DIR=$(OUT_DIR) $(COPY_LICENSE_METADATA) \ 754*9e94795aSAndroid Build Coastguard Worker @$$(PRIVATE_ARGUMENT_FILE) \ 755*9e94795aSAndroid Build Coastguard Worker -o $$@ 756*9e94795aSAndroid Build Coastguard Worker 757*9e94795aSAndroid Build Coastguard Workerendif 758*9e94795aSAndroid Build Coastguard Worker 759*9e94795aSAndroid Build Coastguard Worker$(eval _dep:=) 760*9e94795aSAndroid Build Coastguard Worker$(eval _dmeta:=) 761*9e94795aSAndroid Build Coastguard Worker$(eval _meta:=) 762*9e94795aSAndroid Build Coastguard Worker$(eval _dir:=) 763*9e94795aSAndroid Build Coastguard Workerendef 764*9e94795aSAndroid Build Coastguard Worker 765*9e94795aSAndroid Build Coastguard Worker########################################################### 766*9e94795aSAndroid Build Coastguard Worker## Declare the license metadata for non-module target $(1). 767*9e94795aSAndroid Build Coastguard Worker## 768*9e94795aSAndroid Build Coastguard Worker## $(2) -- license kinds e.g. SPDX-license-identifier-Apache-2.0 769*9e94795aSAndroid Build Coastguard Worker## $(3) -- license conditions e.g. notice by_exception_only 770*9e94795aSAndroid Build Coastguard Worker## $(4) -- license text filenames (notices) 771*9e94795aSAndroid Build Coastguard Worker## $(5) -- package name 772*9e94795aSAndroid Build Coastguard Worker## $(6) -- project path 773*9e94795aSAndroid Build Coastguard Worker########################################################### 774*9e94795aSAndroid Build Coastguard Workerdefine declare-license-metadata 775*9e94795aSAndroid Build Coastguard Worker$(strip \ 776*9e94795aSAndroid Build Coastguard Worker $(eval _tgt := $(subst //,/,$(strip $(1)))) \ 777*9e94795aSAndroid Build Coastguard Worker $(eval ALL_NON_MODULES += $(_tgt)) \ 778*9e94795aSAndroid Build Coastguard Worker $(eval ALL_TARGETS.$(_tgt).META_LIC := $(call license-metadata-dir,$(1))/$(patsubst $(OUT_DIR)%,out%,$(_tgt)).meta_lic) \ 779*9e94795aSAndroid Build Coastguard Worker $(eval ALL_NON_MODULES.$(_tgt).LICENSE_KINDS := $(strip $(2))) \ 780*9e94795aSAndroid Build Coastguard Worker $(eval ALL_NON_MODULES.$(_tgt).LICENSE_CONDITIONS := $(strip $(3))) \ 781*9e94795aSAndroid Build Coastguard Worker $(eval ALL_NON_MODULES.$(_tgt).NOTICES := $(strip $(4))) \ 782*9e94795aSAndroid Build Coastguard Worker $(eval ALL_NON_MODULES.$(_tgt).LICENSE_PACKAGE_NAME := $(strip $(5))) \ 783*9e94795aSAndroid Build Coastguard Worker $(eval ALL_NON_MODULES.$(_tgt).PATH := $(strip $(6))) \ 784*9e94795aSAndroid Build Coastguard Worker) 785*9e94795aSAndroid Build Coastguard Workerendef 786*9e94795aSAndroid Build Coastguard Worker 787*9e94795aSAndroid Build Coastguard Worker########################################################### 788*9e94795aSAndroid Build Coastguard Worker## Declare that non-module targets copied from project $(1) and 789*9e94795aSAndroid Build Coastguard Worker## optionally ending in $(2) have the following license 790*9e94795aSAndroid Build Coastguard Worker## metadata: 791*9e94795aSAndroid Build Coastguard Worker## 792*9e94795aSAndroid Build Coastguard Worker## $(3) -- license kinds e.g. SPDX-license-identifier-Apache-2.0 793*9e94795aSAndroid Build Coastguard Worker## $(4) -- license conditions e.g. notice by_exception_only 794*9e94795aSAndroid Build Coastguard Worker## $(5) -- license text filenames (notices) 795*9e94795aSAndroid Build Coastguard Worker## $(6) -- package name 796*9e94795aSAndroid Build Coastguard Worker########################################################### 797*9e94795aSAndroid Build Coastguard Workerdefine declare-copy-files-license-metadata 798*9e94795aSAndroid Build Coastguard Worker$(strip \ 799*9e94795aSAndroid Build Coastguard Worker $(foreach _pair,$(filter $(1)%$(2),$(PRODUCT_COPY_FILES)),$(eval $(call declare-license-metadata,$(PRODUCT_OUT)/$(call word-colon,2,$(_pair)),$(3),$(4),$(5),$(6),$(1)))) \ 800*9e94795aSAndroid Build Coastguard Worker) 801*9e94795aSAndroid Build Coastguard Workerendef 802*9e94795aSAndroid Build Coastguard Worker 803*9e94795aSAndroid Build Coastguard Worker########################################################### 804*9e94795aSAndroid Build Coastguard Worker## Declare the license metadata for non-module container-type target $(1). 805*9e94795aSAndroid Build Coastguard Worker## 806*9e94795aSAndroid Build Coastguard Worker## Container-type targets are targets like .zip files that 807*9e94795aSAndroid Build Coastguard Worker## merely aggregate other files. 808*9e94795aSAndroid Build Coastguard Worker## 809*9e94795aSAndroid Build Coastguard Worker## $(2) -- license kinds e.g. SPDX-license-identifier-Apache-2.0 810*9e94795aSAndroid Build Coastguard Worker## $(3) -- license conditions e.g. notice by_exception_only 811*9e94795aSAndroid Build Coastguard Worker## $(4) -- license text filenames (notices) 812*9e94795aSAndroid Build Coastguard Worker## $(5) -- package name 813*9e94795aSAndroid Build Coastguard Worker## $(6) -- project path 814*9e94795aSAndroid Build Coastguard Worker########################################################### 815*9e94795aSAndroid Build Coastguard Workerdefine declare-container-license-metadata 816*9e94795aSAndroid Build Coastguard Worker$(strip \ 817*9e94795aSAndroid Build Coastguard Worker $(eval _tgt := $(subst //,/,$(strip $(1)))) \ 818*9e94795aSAndroid Build Coastguard Worker $(eval ALL_NON_MODULES += $(_tgt)) \ 819*9e94795aSAndroid Build Coastguard Worker $(eval ALL_TARGETS.$(_tgt).META_LIC := $(call license-metadata-dir,$(1))/$(patsubst $(OUT_DIR)%,out%,$(_tgt)).meta_lic) \ 820*9e94795aSAndroid Build Coastguard Worker $(eval ALL_NON_MODULES.$(_tgt).LICENSE_KINDS := $(strip $(2))) \ 821*9e94795aSAndroid Build Coastguard Worker $(eval ALL_NON_MODULES.$(_tgt).LICENSE_CONDITIONS := $(strip $(3))) \ 822*9e94795aSAndroid Build Coastguard Worker $(eval ALL_NON_MODULES.$(_tgt).NOTICES := $(strip $(4))) \ 823*9e94795aSAndroid Build Coastguard Worker $(eval ALL_NON_MODULES.$(_tgt).LICENSE_PACKAGE_NAME := $(strip $(5))) \ 824*9e94795aSAndroid Build Coastguard Worker $(eval ALL_NON_MODULES.$(_tgt).PATH := $(strip $(6))) \ 825*9e94795aSAndroid Build Coastguard Worker $(eval ALL_NON_MODULES.$(_tgt).IS_CONTAINER := true) \ 826*9e94795aSAndroid Build Coastguard Worker) 827*9e94795aSAndroid Build Coastguard Workerendef 828*9e94795aSAndroid Build Coastguard Worker 829*9e94795aSAndroid Build Coastguard Worker########################################################### 830*9e94795aSAndroid Build Coastguard Worker## Declare that non-module target $(1) is a non-copyrightable file. 831*9e94795aSAndroid Build Coastguard Worker## 832*9e94795aSAndroid Build Coastguard Worker## e.g. an information-only file merely listing other files. 833*9e94795aSAndroid Build Coastguard Worker########################################################### 834*9e94795aSAndroid Build Coastguard Workerdefine declare-0p-target 835*9e94795aSAndroid Build Coastguard Worker$(strip \ 836*9e94795aSAndroid Build Coastguard Worker $(eval _tgt := $(subst //,/,$(strip $(1)))) \ 837*9e94795aSAndroid Build Coastguard Worker $(eval ALL_0P_TARGETS += $(_tgt)) \ 838*9e94795aSAndroid Build Coastguard Worker) 839*9e94795aSAndroid Build Coastguard Workerendef 840*9e94795aSAndroid Build Coastguard Worker 841*9e94795aSAndroid Build Coastguard Worker########################################################### 842*9e94795aSAndroid Build Coastguard Worker## Declare that non-module targets copied from project $(1) and 843*9e94795aSAndroid Build Coastguard Worker## optionally ending in $(2) are non-copyrightable files. 844*9e94795aSAndroid Build Coastguard Worker## 845*9e94795aSAndroid Build Coastguard Worker## e.g. an information-only file merely listing other files. 846*9e94795aSAndroid Build Coastguard Worker########################################################### 847*9e94795aSAndroid Build Coastguard Workerdefine declare-0p-copy-files 848*9e94795aSAndroid Build Coastguard Worker$(strip \ 849*9e94795aSAndroid Build Coastguard Worker $(foreach _pair,$(filter $(1)%$(2),$(PRODUCT_COPY_FILES)),$(eval $(call declare-0p-target,$(PRODUCT_OUT)/$(call word-colon,2,$(_pair))))) \ 850*9e94795aSAndroid Build Coastguard Worker) 851*9e94795aSAndroid Build Coastguard Workerendef 852*9e94795aSAndroid Build Coastguard Worker 853*9e94795aSAndroid Build Coastguard Worker########################################################### 854*9e94795aSAndroid Build Coastguard Worker## Declare non-module target $(1) to have a first-party license 855*9e94795aSAndroid Build Coastguard Worker## (Android Apache 2.0) 856*9e94795aSAndroid Build Coastguard Worker## 857*9e94795aSAndroid Build Coastguard Worker## $(2) -- project path 858*9e94795aSAndroid Build Coastguard Worker########################################################### 859*9e94795aSAndroid Build Coastguard Workerdefine declare-1p-target 860*9e94795aSAndroid Build Coastguard Worker$(call declare-license-metadata,$(1),SPDX-license-identifier-Apache-2.0,notice,build/soong/licenses/LICENSE,Android,$(2)) 861*9e94795aSAndroid Build Coastguard Workerendef 862*9e94795aSAndroid Build Coastguard Worker 863*9e94795aSAndroid Build Coastguard Worker########################################################### 864*9e94795aSAndroid Build Coastguard Worker## Declare that non-module targets copied from project $(1) and 865*9e94795aSAndroid Build Coastguard Worker## optionally ending in $(2) are first-party licensed 866*9e94795aSAndroid Build Coastguard Worker## (Android Apache 2.0) 867*9e94795aSAndroid Build Coastguard Worker########################################################### 868*9e94795aSAndroid Build Coastguard Workerdefine declare-1p-copy-files 869*9e94795aSAndroid Build Coastguard Worker$(foreach _pair,$(filter $(1)%$(2),$(PRODUCT_COPY_FILES)),$(call declare-1p-target,$(PRODUCT_OUT)/$(call word-colon,2,$(_pair)),$(1))) 870*9e94795aSAndroid Build Coastguard Workerendef 871*9e94795aSAndroid Build Coastguard Worker 872*9e94795aSAndroid Build Coastguard Worker########################################################### 873*9e94795aSAndroid Build Coastguard Worker## Declare non-module container-type target $(1) to have a 874*9e94795aSAndroid Build Coastguard Worker## first-party license (Android Apache 2.0). 875*9e94795aSAndroid Build Coastguard Worker## 876*9e94795aSAndroid Build Coastguard Worker## Container-type targets are targets like .zip files that 877*9e94795aSAndroid Build Coastguard Worker## merely aggregate other files. 878*9e94795aSAndroid Build Coastguard Worker## 879*9e94795aSAndroid Build Coastguard Worker## $92) -- project path 880*9e94795aSAndroid Build Coastguard Worker########################################################### 881*9e94795aSAndroid Build Coastguard Workerdefine declare-1p-container 882*9e94795aSAndroid Build Coastguard Worker$(call declare-container-license-metadata,$(1),SPDX-license-identifier-Apache-2.0,notice,build/soong/licenses/LICENSE,Android,$(2)) 883*9e94795aSAndroid Build Coastguard Workerendef 884*9e94795aSAndroid Build Coastguard Worker 885*9e94795aSAndroid Build Coastguard Worker########################################################### 886*9e94795aSAndroid Build Coastguard Worker## Declare license dependencies $(2) with optional colon-separated 887*9e94795aSAndroid Build Coastguard Worker## annotations for non-module target $(1) 888*9e94795aSAndroid Build Coastguard Worker########################################################### 889*9e94795aSAndroid Build Coastguard Workerdefine declare-license-deps 890*9e94795aSAndroid Build Coastguard Worker$(strip \ 891*9e94795aSAndroid Build Coastguard Worker $(eval _tgt := $(subst //,/,$(strip $(1)))) \ 892*9e94795aSAndroid Build Coastguard Worker $(eval ALL_NON_MODULES += $(_tgt)) \ 893*9e94795aSAndroid Build Coastguard Worker $(eval ALL_TARGETS.$(_tgt).META_LIC := $(call license-metadata-dir,$(1))/$(patsubst $(OUT_DIR)%,out%,$(_tgt)).meta_lic) \ 894*9e94795aSAndroid Build Coastguard Worker $(eval ALL_NON_MODULES.$(_tgt).DEPENDENCIES := $(strip $(ALL_NON_MODULES.$(_tgt).DEPENDENCIES) $(2))) \ 895*9e94795aSAndroid Build Coastguard Worker) 896*9e94795aSAndroid Build Coastguard Workerendef 897*9e94795aSAndroid Build Coastguard Worker 898*9e94795aSAndroid Build Coastguard Worker########################################################### 899*9e94795aSAndroid Build Coastguard Worker## Declare license dependencies $(2) with optional colon-separated 900*9e94795aSAndroid Build Coastguard Worker## annotations for non-module container-type target $(1) 901*9e94795aSAndroid Build Coastguard Worker## 902*9e94795aSAndroid Build Coastguard Worker## Container-type targets are targets like .zip files that 903*9e94795aSAndroid Build Coastguard Worker## merely aggregate other files. 904*9e94795aSAndroid Build Coastguard Worker## 905*9e94795aSAndroid Build Coastguard Worker## $(3) -- root mappings space-separated source:target 906*9e94795aSAndroid Build Coastguard Worker########################################################### 907*9e94795aSAndroid Build Coastguard Workerdefine declare-container-license-deps 908*9e94795aSAndroid Build Coastguard Worker$(strip \ 909*9e94795aSAndroid Build Coastguard Worker $(eval _tgt := $(subst //,/,$(strip $(1)))) \ 910*9e94795aSAndroid Build Coastguard Worker $(eval ALL_NON_MODULES += $(_tgt)) \ 911*9e94795aSAndroid Build Coastguard Worker $(eval ALL_TARGETS.$(_tgt).META_LIC := $(call license-metadata-dir,$(1))/$(patsubst $(OUT_DIR)%,out%,$(_tgt)).meta_lic) \ 912*9e94795aSAndroid Build Coastguard Worker $(eval ALL_NON_MODULES.$(_tgt).DEPENDENCIES := $(strip $(ALL_NON_MODULES.$(_tgt).DEPENDENCIES) $(2))) \ 913*9e94795aSAndroid Build Coastguard Worker $(eval ALL_NON_MODULES.$(_tgt).IS_CONTAINER := true) \ 914*9e94795aSAndroid Build Coastguard Worker $(eval ALL_NON_MODULES.$(_tgt).ROOT_MAPPINGS := $(strip $(ALL_NON_MODULES.$(_tgt).ROOT_MAPPINGS) $(3))) \ 915*9e94795aSAndroid Build Coastguard Worker) 916*9e94795aSAndroid Build Coastguard Workerendef 917*9e94795aSAndroid Build Coastguard Worker 918*9e94795aSAndroid Build Coastguard Worker########################################################### 919*9e94795aSAndroid Build Coastguard Worker## Declares the rule to report targets with no license metadata. 920*9e94795aSAndroid Build Coastguard Worker########################################################### 921*9e94795aSAndroid Build Coastguard Workerdefine report-missing-licenses-rule 922*9e94795aSAndroid Build Coastguard Worker.PHONY: reportmissinglicenses 923*9e94795aSAndroid Build Coastguard Workerreportmissinglicenses: PRIVATE_NON_MODULES:=$(sort $(NON_MODULES_WITHOUT_LICENSE_METADATA) $(TARGETS_MISSING_LICENSE_METADATA)) 924*9e94795aSAndroid Build Coastguard Workerreportmissinglicenses: PRIVATE_COPIED_FILES:=$(sort $(filter $(NON_MODULES_WITHOUT_LICENSE_METADATA) $(TARGETS_MISSING_LICENSE_METADATA),\ 925*9e94795aSAndroid Build Coastguard Worker $(foreach _pair,$(PRODUCT_COPY_FILES), $(PRODUCT_OUT)/$(call word-colon,2,$(_pair))))) 926*9e94795aSAndroid Build Coastguard Workerreportmissinglicenses: 927*9e94795aSAndroid Build Coastguard Worker @echo Reporting $$(words $$(PRIVATE_NON_MODULES)) targets without license metadata 928*9e94795aSAndroid Build Coastguard Worker $$(foreach t,$$(PRIVATE_NON_MODULES),if ! [ -h $$(t) ]; then echo No license metadata for $$(t) >&2; fi;) 929*9e94795aSAndroid Build Coastguard Worker $$(foreach t,$$(PRIVATE_COPIED_FILES),if ! [ -h $$(t) ]; then echo No license metadata for copied file $$(t) >&2; fi;) 930*9e94795aSAndroid Build Coastguard Worker echo $$(words $$(PRIVATE_NON_MODULES)) targets missing license metadata >&2 931*9e94795aSAndroid Build Coastguard Worker 932*9e94795aSAndroid Build Coastguard Workerendef 933*9e94795aSAndroid Build Coastguard Worker 934*9e94795aSAndroid Build Coastguard Worker 935*9e94795aSAndroid Build Coastguard Worker########################################################### 936*9e94795aSAndroid Build Coastguard Worker# Returns the unique list of built license metadata files. 937*9e94795aSAndroid Build Coastguard Worker########################################################### 938*9e94795aSAndroid Build Coastguard Workerdefine all-license-metadata 939*9e94795aSAndroid Build Coastguard Worker$(sort \ 940*9e94795aSAndroid Build Coastguard Worker $(foreach t,$(ALL_NON_MODULES),$(if $(filter 0p,$(ALL_TARGETS.$(t).META_LIC)),, $(ALL_TARGETS.$(t).META_LIC))) \ 941*9e94795aSAndroid Build Coastguard Worker $(foreach m,$(ALL_MODULES), $(ALL_MODULES.$(m).META_LIC)) \ 942*9e94795aSAndroid Build Coastguard Worker) 943*9e94795aSAndroid Build Coastguard Workerendef 944*9e94795aSAndroid Build Coastguard Worker 945*9e94795aSAndroid Build Coastguard Worker########################################################### 946*9e94795aSAndroid Build Coastguard Worker# Declares the rule to report all library names used in any notice files. 947*9e94795aSAndroid Build Coastguard Worker########################################################### 948*9e94795aSAndroid Build Coastguard Workerdefine report-all-notice-library-names-rule 949*9e94795aSAndroid Build Coastguard Worker$(strip $(eval _all := $(call all-license-metadata))) 950*9e94795aSAndroid Build Coastguard Worker 951*9e94795aSAndroid Build Coastguard Worker.PHONY: reportallnoticelibrarynames 952*9e94795aSAndroid Build Coastguard Workerreportallnoticelibrarynames: PRIVATE_LIST_FILE := $(call license-metadata-dir,COMMON)/filelist 953*9e94795aSAndroid Build Coastguard Workerreportallnoticelibrarynames: | $(COMPLIANCENOTICE_SHIPPEDLIBS) 954*9e94795aSAndroid Build Coastguard Workerreportallnoticelibrarynames: $(_all) 955*9e94795aSAndroid Build Coastguard Worker @echo Reporting notice library names for at least $$(words $(_all)) license metadata files 956*9e94795aSAndroid Build Coastguard Worker $(hide) rm -f $$(PRIVATE_LIST_FILE) 957*9e94795aSAndroid Build Coastguard Worker $(hide) mkdir -p $$(dir $$(PRIVATE_LIST_FILE)) 958*9e94795aSAndroid Build Coastguard Worker $(hide) find out -name '*meta_lic' -type f -printf '"%p"\n' >$$(PRIVATE_LIST_FILE) 959*9e94795aSAndroid Build Coastguard Worker OUT_DIR=$(OUT_DIR) $(COMPLIANCENOTICE_SHIPPEDLIBS) @$$(PRIVATE_LIST_FILE) 960*9e94795aSAndroid Build Coastguard Workerendef 961*9e94795aSAndroid Build Coastguard Worker 962*9e94795aSAndroid Build Coastguard Worker########################################################### 963*9e94795aSAndroid Build Coastguard Worker# Declares the rule to build all license metadata. 964*9e94795aSAndroid Build Coastguard Worker########################################################### 965*9e94795aSAndroid Build Coastguard Workerdefine build-all-license-metadata-rule 966*9e94795aSAndroid Build Coastguard Worker$(strip $(eval _all := $(call all-license-metadata))) 967*9e94795aSAndroid Build Coastguard Worker 968*9e94795aSAndroid Build Coastguard Worker.PHONY: alllicensemetadata 969*9e94795aSAndroid Build Coastguard Workeralllicensemetadata: $(_all) 970*9e94795aSAndroid Build Coastguard Worker @echo Building all $(words $(_all)) license metadata files 971*9e94795aSAndroid Build Coastguard Workerendef 972*9e94795aSAndroid Build Coastguard Worker 973*9e94795aSAndroid Build Coastguard Worker 974*9e94795aSAndroid Build Coastguard Worker########################################################### 975*9e94795aSAndroid Build Coastguard Worker## Declares a license metadata build rule for ALL_MODULES 976*9e94795aSAndroid Build Coastguard Worker########################################################### 977*9e94795aSAndroid Build Coastguard Workerdefine build-license-metadata 978*9e94795aSAndroid Build Coastguard Worker$(strip \ 979*9e94795aSAndroid Build Coastguard Worker $(foreach t,$(sort $(ALL_0P_TARGETS)), \ 980*9e94795aSAndroid Build Coastguard Worker $(eval ALL_TARGETS.$(t).META_LIC := 0p) \ 981*9e94795aSAndroid Build Coastguard Worker ) \ 982*9e94795aSAndroid Build Coastguard Worker $(foreach t,$(sort $(ALL_COPIED_TARGETS)),$(eval $(call copied-target-license-metadata-rule,$(t)))) \ 983*9e94795aSAndroid Build Coastguard Worker $(foreach t,$(sort $(ALL_NON_MODULES)),$(eval $(call non-module-license-metadata-rule,$(t)))) \ 984*9e94795aSAndroid Build Coastguard Worker $(foreach m,$(sort $(ALL_MODULES)),$(eval $(call license-metadata-rule,$(m)))) \ 985*9e94795aSAndroid Build Coastguard Worker $(eval $(call build-all-license-metadata-rule))) 986*9e94795aSAndroid Build Coastguard Workerendef 987*9e94795aSAndroid Build Coastguard Worker 988*9e94795aSAndroid Build Coastguard Worker########################################################### 989*9e94795aSAndroid Build Coastguard Worker## Returns correct _idfPrefix from the list: 990*9e94795aSAndroid Build Coastguard Worker## { HOST, HOST_CROSS, TARGET } 991*9e94795aSAndroid Build Coastguard Worker########################################################### 992*9e94795aSAndroid Build Coastguard Worker# the following rules checked in order: 993*9e94795aSAndroid Build Coastguard Worker# ($1 is in {HOST_CROSS} => $1; 994*9e94795aSAndroid Build Coastguard Worker# ($1 is empty) => TARGET; 995*9e94795aSAndroid Build Coastguard Worker# ($2 is not empty) => HOST_CROSS; 996*9e94795aSAndroid Build Coastguard Worker# => HOST; 997*9e94795aSAndroid Build Coastguard Workerdefine find-idf-prefix 998*9e94795aSAndroid Build Coastguard Worker$(strip \ 999*9e94795aSAndroid Build Coastguard Worker $(eval _idf_pfx_:=$(strip $(filter HOST_CROSS,$(1)))) \ 1000*9e94795aSAndroid Build Coastguard Worker $(eval _idf_pfx_:=$(if $(strip $(1)),$(if $(_idf_pfx_),$(_idf_pfx_),$(if $(strip $(2)),HOST_CROSS,HOST)),TARGET)) \ 1001*9e94795aSAndroid Build Coastguard Worker $(_idf_pfx_) 1002*9e94795aSAndroid Build Coastguard Worker) 1003*9e94795aSAndroid Build Coastguard Workerendef 1004*9e94795aSAndroid Build Coastguard Worker 1005*9e94795aSAndroid Build Coastguard Worker########################################################### 1006*9e94795aSAndroid Build Coastguard Worker## The intermediates directory. Where object files go for 1007*9e94795aSAndroid Build Coastguard Worker## a given target. We could technically get away without 1008*9e94795aSAndroid Build Coastguard Worker## the "_intermediates" suffix on the directory, but it's 1009*9e94795aSAndroid Build Coastguard Worker## nice to be able to grep for that string to find out if 1010*9e94795aSAndroid Build Coastguard Worker## anyone's abusing the system. 1011*9e94795aSAndroid Build Coastguard Worker########################################################### 1012*9e94795aSAndroid Build Coastguard Worker 1013*9e94795aSAndroid Build Coastguard Worker# $(1): target class, like "APPS" 1014*9e94795aSAndroid Build Coastguard Worker# $(2): target name, like "NotePad" 1015*9e94795aSAndroid Build Coastguard Worker# $(3): { HOST, HOST_CROSS, <empty (TARGET)>, <other non-empty (HOST)> } 1016*9e94795aSAndroid Build Coastguard Worker# $(4): if non-empty, force the intermediates to be COMMON 1017*9e94795aSAndroid Build Coastguard Worker# $(5): if non-empty, force the intermediates to be for the 2nd arch 1018*9e94795aSAndroid Build Coastguard Worker# $(6): if non-empty, force the intermediates to be for the host cross os 1019*9e94795aSAndroid Build Coastguard Workerdefine intermediates-dir-for 1020*9e94795aSAndroid Build Coastguard Worker$(strip \ 1021*9e94795aSAndroid Build Coastguard Worker $(eval _idfClass := $(strip $(1))) \ 1022*9e94795aSAndroid Build Coastguard Worker $(if $(_idfClass),, \ 1023*9e94795aSAndroid Build Coastguard Worker $(error $(LOCAL_PATH): Class not defined in call to intermediates-dir-for)) \ 1024*9e94795aSAndroid Build Coastguard Worker $(eval _idfName := $(strip $(2))) \ 1025*9e94795aSAndroid Build Coastguard Worker $(if $(_idfName),, \ 1026*9e94795aSAndroid Build Coastguard Worker $(error $(LOCAL_PATH): Name not defined in call to intermediates-dir-for)) \ 1027*9e94795aSAndroid Build Coastguard Worker $(eval _idfPrefix := $(call find-idf-prefix,$(3),$(6))) \ 1028*9e94795aSAndroid Build Coastguard Worker $(eval _idf2ndArchPrefix := $(if $(strip $(5)),$(TARGET_2ND_ARCH_VAR_PREFIX))) \ 1029*9e94795aSAndroid Build Coastguard Worker $(if $(filter $(_idfPrefix)_$(_idfClass),$(COMMON_MODULE_CLASSES))$(4), \ 1030*9e94795aSAndroid Build Coastguard Worker $(eval _idfIntBase := $($(_idfPrefix)_OUT_COMMON_INTERMEDIATES)) \ 1031*9e94795aSAndroid Build Coastguard Worker ,$(if $(filter $(_idfClass),$(PER_ARCH_MODULE_CLASSES)),\ 1032*9e94795aSAndroid Build Coastguard Worker $(eval _idfIntBase := $($(_idf2ndArchPrefix)$(_idfPrefix)_OUT_INTERMEDIATES)) \ 1033*9e94795aSAndroid Build Coastguard Worker ,$(eval _idfIntBase := $($(_idfPrefix)_OUT_INTERMEDIATES)) \ 1034*9e94795aSAndroid Build Coastguard Worker ) \ 1035*9e94795aSAndroid Build Coastguard Worker ) \ 1036*9e94795aSAndroid Build Coastguard Worker $(_idfIntBase)/$(_idfClass)/$(_idfName)_intermediates \ 1037*9e94795aSAndroid Build Coastguard Worker) 1038*9e94795aSAndroid Build Coastguard Workerendef 1039*9e94795aSAndroid Build Coastguard Worker 1040*9e94795aSAndroid Build Coastguard Worker# Uses LOCAL_MODULE_CLASS, LOCAL_MODULE, and LOCAL_IS_HOST_MODULE 1041*9e94795aSAndroid Build Coastguard Worker# to determine the intermediates directory. 1042*9e94795aSAndroid Build Coastguard Worker# 1043*9e94795aSAndroid Build Coastguard Worker# $(1): if non-empty, force the intermediates to be COMMON 1044*9e94795aSAndroid Build Coastguard Worker# $(2): if non-empty, force the intermediates to be for the 2nd arch 1045*9e94795aSAndroid Build Coastguard Worker# $(3): if non-empty, force the intermediates to be for the host cross os 1046*9e94795aSAndroid Build Coastguard Workerdefine local-intermediates-dir 1047*9e94795aSAndroid Build Coastguard Worker$(strip \ 1048*9e94795aSAndroid Build Coastguard Worker $(if $(strip $(LOCAL_MODULE_CLASS)),, \ 1049*9e94795aSAndroid Build Coastguard Worker $(error $(LOCAL_PATH): LOCAL_MODULE_CLASS not defined before call to local-intermediates-dir)) \ 1050*9e94795aSAndroid Build Coastguard Worker $(if $(strip $(LOCAL_MODULE)),, \ 1051*9e94795aSAndroid Build Coastguard Worker $(error $(LOCAL_PATH): LOCAL_MODULE not defined before call to local-intermediates-dir)) \ 1052*9e94795aSAndroid Build Coastguard Worker $(call intermediates-dir-for,$(LOCAL_MODULE_CLASS),$(LOCAL_MODULE),$(if $(strip $(LOCAL_IS_HOST_MODULE)),HOST),$(1),$(2),$(3)) \ 1053*9e94795aSAndroid Build Coastguard Worker) 1054*9e94795aSAndroid Build Coastguard Workerendef 1055*9e94795aSAndroid Build Coastguard Worker 1056*9e94795aSAndroid Build Coastguard Worker# Uses LOCAL_MODULE_CLASS, LOCAL_MODULE, and LOCAL_IS_HOST_MODULE 1057*9e94795aSAndroid Build Coastguard Worker# to determine the intermediates directory. 1058*9e94795aSAndroid Build Coastguard Worker# 1059*9e94795aSAndroid Build Coastguard Worker# $(1): if non-empty, force the intermediates to be COMMON 1060*9e94795aSAndroid Build Coastguard Worker# $(2): if non-empty, force the intermediates to be for the 2nd arch 1061*9e94795aSAndroid Build Coastguard Worker# $(3): if non-empty, force the intermediates to be for the host cross os 1062*9e94795aSAndroid Build Coastguard Workerdefine local-meta-intermediates-dir 1063*9e94795aSAndroid Build Coastguard Worker$(strip \ 1064*9e94795aSAndroid Build Coastguard Worker $(if $(strip $(LOCAL_MODULE_CLASS)),, \ 1065*9e94795aSAndroid Build Coastguard Worker $(error $(LOCAL_PATH): LOCAL_MODULE_CLASS not defined before call to local-meta-intermediates-dir)) \ 1066*9e94795aSAndroid Build Coastguard Worker $(if $(strip $(LOCAL_MODULE)),, \ 1067*9e94795aSAndroid Build Coastguard Worker $(error $(LOCAL_PATH): LOCAL_MODULE not defined before call to local-meta-intermediates-dir)) \ 1068*9e94795aSAndroid Build Coastguard Worker $(call intermediates-dir-for,META$(LOCAL_MODULE_CLASS),$(LOCAL_MODULE),$(if $(strip $(LOCAL_IS_HOST_MODULE)),HOST),$(1),$(2),$(3)) \ 1069*9e94795aSAndroid Build Coastguard Worker) 1070*9e94795aSAndroid Build Coastguard Workerendef 1071*9e94795aSAndroid Build Coastguard Worker 1072*9e94795aSAndroid Build Coastguard Worker########################################################### 1073*9e94795aSAndroid Build Coastguard Worker## The generated sources directory. Placing generated 1074*9e94795aSAndroid Build Coastguard Worker## source files directly in the intermediates directory 1075*9e94795aSAndroid Build Coastguard Worker## causes problems for multiarch builds, where there are 1076*9e94795aSAndroid Build Coastguard Worker## two intermediates directories for a single target. Put 1077*9e94795aSAndroid Build Coastguard Worker## them in a separate directory, and they will be copied to 1078*9e94795aSAndroid Build Coastguard Worker## each intermediates directory automatically. 1079*9e94795aSAndroid Build Coastguard Worker########################################################### 1080*9e94795aSAndroid Build Coastguard Worker 1081*9e94795aSAndroid Build Coastguard Worker# $(1): target class, like "APPS" 1082*9e94795aSAndroid Build Coastguard Worker# $(2): target name, like "NotePad" 1083*9e94795aSAndroid Build Coastguard Worker# $(3): { HOST, HOST_CROSS, <empty (TARGET)>, <other non-empty (HOST)> } 1084*9e94795aSAndroid Build Coastguard Worker# $(4): if non-empty, force the generated sources to be COMMON 1085*9e94795aSAndroid Build Coastguard Workerdefine generated-sources-dir-for 1086*9e94795aSAndroid Build Coastguard Worker$(strip \ 1087*9e94795aSAndroid Build Coastguard Worker $(eval _idfClass := $(strip $(1))) \ 1088*9e94795aSAndroid Build Coastguard Worker $(if $(_idfClass),, \ 1089*9e94795aSAndroid Build Coastguard Worker $(error $(LOCAL_PATH): Class not defined in call to generated-sources-dir-for)) \ 1090*9e94795aSAndroid Build Coastguard Worker $(eval _idfName := $(strip $(2))) \ 1091*9e94795aSAndroid Build Coastguard Worker $(if $(_idfName),, \ 1092*9e94795aSAndroid Build Coastguard Worker $(error $(LOCAL_PATH): Name not defined in call to generated-sources-dir-for)) \ 1093*9e94795aSAndroid Build Coastguard Worker $(eval _idfPrefix := $(call find-idf-prefix,$(3),)) \ 1094*9e94795aSAndroid Build Coastguard Worker $(if $(filter $(_idfPrefix)_$(_idfClass),$(COMMON_MODULE_CLASSES))$(4), \ 1095*9e94795aSAndroid Build Coastguard Worker $(eval _idfIntBase := $($(_idfPrefix)_OUT_COMMON_GEN)) \ 1096*9e94795aSAndroid Build Coastguard Worker , \ 1097*9e94795aSAndroid Build Coastguard Worker $(eval _idfIntBase := $($(_idfPrefix)_OUT_GEN)) \ 1098*9e94795aSAndroid Build Coastguard Worker ) \ 1099*9e94795aSAndroid Build Coastguard Worker $(_idfIntBase)/$(_idfClass)/$(_idfName)_intermediates \ 1100*9e94795aSAndroid Build Coastguard Worker) 1101*9e94795aSAndroid Build Coastguard Workerendef 1102*9e94795aSAndroid Build Coastguard Worker 1103*9e94795aSAndroid Build Coastguard Worker# Uses LOCAL_MODULE_CLASS, LOCAL_MODULE, and LOCAL_IS_HOST_MODULE 1104*9e94795aSAndroid Build Coastguard Worker# to determine the generated sources directory. 1105*9e94795aSAndroid Build Coastguard Worker# 1106*9e94795aSAndroid Build Coastguard Worker# $(1): if non-empty, force the intermediates to be COMMON 1107*9e94795aSAndroid Build Coastguard Workerdefine local-generated-sources-dir 1108*9e94795aSAndroid Build Coastguard Worker$(strip \ 1109*9e94795aSAndroid Build Coastguard Worker $(if $(strip $(LOCAL_MODULE_CLASS)),, \ 1110*9e94795aSAndroid Build Coastguard Worker $(error $(LOCAL_PATH): LOCAL_MODULE_CLASS not defined before call to local-generated-sources-dir)) \ 1111*9e94795aSAndroid Build Coastguard Worker $(if $(strip $(LOCAL_MODULE)),, \ 1112*9e94795aSAndroid Build Coastguard Worker $(error $(LOCAL_PATH): LOCAL_MODULE not defined before call to local-generated-sources-dir)) \ 1113*9e94795aSAndroid Build Coastguard Worker $(call generated-sources-dir-for,$(LOCAL_MODULE_CLASS),$(LOCAL_MODULE),$(if $(strip $(LOCAL_IS_HOST_MODULE)),HOST),$(1)) \ 1114*9e94795aSAndroid Build Coastguard Worker) 1115*9e94795aSAndroid Build Coastguard Workerendef 1116*9e94795aSAndroid Build Coastguard Worker 1117*9e94795aSAndroid Build Coastguard Worker########################################################### 1118*9e94795aSAndroid Build Coastguard Worker## The packaging directory for a module. Similar to intermedates, but 1119*9e94795aSAndroid Build Coastguard Worker## in a location that will be wiped by an m installclean. 1120*9e94795aSAndroid Build Coastguard Worker########################################################### 1121*9e94795aSAndroid Build Coastguard Worker 1122*9e94795aSAndroid Build Coastguard Worker# $(1): subdir in PACKAGING 1123*9e94795aSAndroid Build Coastguard Worker# $(2): target class, like "APPS" 1124*9e94795aSAndroid Build Coastguard Worker# $(3): target name, like "NotePad" 1125*9e94795aSAndroid Build Coastguard Worker# $(4): { HOST, HOST_CROSS, <empty (TARGET)>, <other non-empty (HOST)> } 1126*9e94795aSAndroid Build Coastguard Workerdefine packaging-dir-for 1127*9e94795aSAndroid Build Coastguard Worker$(strip \ 1128*9e94795aSAndroid Build Coastguard Worker $(eval _pdfClass := $(strip $(2))) \ 1129*9e94795aSAndroid Build Coastguard Worker $(if $(_pdfClass),, \ 1130*9e94795aSAndroid Build Coastguard Worker $(error $(LOCAL_PATH): Class not defined in call to generated-sources-dir-for)) \ 1131*9e94795aSAndroid Build Coastguard Worker $(eval _pdfName := $(strip $(3))) \ 1132*9e94795aSAndroid Build Coastguard Worker $(if $(_pdfName),, \ 1133*9e94795aSAndroid Build Coastguard Worker $(error $(LOCAL_PATH): Name not defined in call to generated-sources-dir-for)) \ 1134*9e94795aSAndroid Build Coastguard Worker $(call intermediates-dir-for,PACKAGING,$(1),$(4))/$(_pdfClass)/$(_pdfName)_intermediates \ 1135*9e94795aSAndroid Build Coastguard Worker) 1136*9e94795aSAndroid Build Coastguard Workerendef 1137*9e94795aSAndroid Build Coastguard Worker 1138*9e94795aSAndroid Build Coastguard Worker# Uses LOCAL_MODULE_CLASS, LOCAL_MODULE, and LOCAL_IS_HOST_MODULE 1139*9e94795aSAndroid Build Coastguard Worker# to determine the packaging directory. 1140*9e94795aSAndroid Build Coastguard Worker# 1141*9e94795aSAndroid Build Coastguard Worker# $(1): subdir in PACKAGING 1142*9e94795aSAndroid Build Coastguard Workerdefine local-packaging-dir 1143*9e94795aSAndroid Build Coastguard Worker$(strip \ 1144*9e94795aSAndroid Build Coastguard Worker $(if $(strip $(LOCAL_MODULE_CLASS)),, \ 1145*9e94795aSAndroid Build Coastguard Worker $(error $(LOCAL_PATH): LOCAL_MODULE_CLASS not defined before call to local-generated-sources-dir)) \ 1146*9e94795aSAndroid Build Coastguard Worker $(if $(strip $(LOCAL_MODULE)),, \ 1147*9e94795aSAndroid Build Coastguard Worker $(error $(LOCAL_PATH): LOCAL_MODULE not defined before call to local-generated-sources-dir)) \ 1148*9e94795aSAndroid Build Coastguard Worker $(call packaging-dir-for,$(1),$(LOCAL_MODULE_CLASS),$(LOCAL_MODULE),$(if $(strip $(LOCAL_IS_HOST_MODULE)),HOST)) \ 1149*9e94795aSAndroid Build Coastguard Worker) 1150*9e94795aSAndroid Build Coastguard Workerendef 1151*9e94795aSAndroid Build Coastguard Worker 1152*9e94795aSAndroid Build Coastguard Worker 1153*9e94795aSAndroid Build Coastguard Worker########################################################### 1154*9e94795aSAndroid Build Coastguard Worker## Convert a list of short module names (e.g., "framework", "Browser") 1155*9e94795aSAndroid Build Coastguard Worker## into the list of files that are built for those modules. 1156*9e94795aSAndroid Build Coastguard Worker## NOTE: this won't return reliable results until after all 1157*9e94795aSAndroid Build Coastguard Worker## sub-makefiles have been included. 1158*9e94795aSAndroid Build Coastguard Worker## $(1): target list 1159*9e94795aSAndroid Build Coastguard Worker########################################################### 1160*9e94795aSAndroid Build Coastguard Worker 1161*9e94795aSAndroid Build Coastguard Workerdefine module-built-files 1162*9e94795aSAndroid Build Coastguard Worker$(foreach module,$(1),$(ALL_MODULES.$(module).BUILT)) 1163*9e94795aSAndroid Build Coastguard Workerendef 1164*9e94795aSAndroid Build Coastguard Worker 1165*9e94795aSAndroid Build Coastguard Worker########################################################### 1166*9e94795aSAndroid Build Coastguard Worker## Convert a list of short modules names (e.g., "framework", "Browser") 1167*9e94795aSAndroid Build Coastguard Worker## into the list of files that are installed for those modules. 1168*9e94795aSAndroid Build Coastguard Worker## NOTE: this won't return reliable results until after all 1169*9e94795aSAndroid Build Coastguard Worker## sub-makefiles have been included. 1170*9e94795aSAndroid Build Coastguard Worker## $(1): target list 1171*9e94795aSAndroid Build Coastguard Worker########################################################### 1172*9e94795aSAndroid Build Coastguard Worker 1173*9e94795aSAndroid Build Coastguard Workerdefine module-installed-files 1174*9e94795aSAndroid Build Coastguard Worker$(foreach module,$(1),$(ALL_MODULES.$(module).INSTALLED)) 1175*9e94795aSAndroid Build Coastguard Workerendef 1176*9e94795aSAndroid Build Coastguard Worker 1177*9e94795aSAndroid Build Coastguard Worker########################################################### 1178*9e94795aSAndroid Build Coastguard Worker## Convert a list of short modules names (e.g., "framework", "Browser") 1179*9e94795aSAndroid Build Coastguard Worker## into the list of files that are built *for the target* for those modules. 1180*9e94795aSAndroid Build Coastguard Worker## NOTE: this won't return reliable results until after all 1181*9e94795aSAndroid Build Coastguard Worker## sub-makefiles have been included. 1182*9e94795aSAndroid Build Coastguard Worker## $(1): target list 1183*9e94795aSAndroid Build Coastguard Worker########################################################### 1184*9e94795aSAndroid Build Coastguard Worker 1185*9e94795aSAndroid Build Coastguard Workerdefine module-target-built-files 1186*9e94795aSAndroid Build Coastguard Worker$(foreach module,$(1),$(ALL_MODULES.$(module).TARGET_BUILT)) 1187*9e94795aSAndroid Build Coastguard Workerendef 1188*9e94795aSAndroid Build Coastguard Worker 1189*9e94795aSAndroid Build Coastguard Worker########################################################### 1190*9e94795aSAndroid Build Coastguard Worker## Convert a list of short modules names (e.g., "framework", "Browser") 1191*9e94795aSAndroid Build Coastguard Worker## into the list of files that should be used when linking 1192*9e94795aSAndroid Build Coastguard Worker## against that module as a public API. 1193*9e94795aSAndroid Build Coastguard Worker## TODO: Allow this for more than JAVA_LIBRARIES modules 1194*9e94795aSAndroid Build Coastguard Worker## NOTE: this won't return reliable results until after all 1195*9e94795aSAndroid Build Coastguard Worker## sub-makefiles have been included. 1196*9e94795aSAndroid Build Coastguard Worker## $(1): target list 1197*9e94795aSAndroid Build Coastguard Worker########################################################### 1198*9e94795aSAndroid Build Coastguard Worker 1199*9e94795aSAndroid Build Coastguard Workerdefine module-stubs-files 1200*9e94795aSAndroid Build Coastguard Worker$(foreach module,$(1),$(if $(filter $(module),$(JAVA_SDK_LIBRARIES)),\ 1201*9e94795aSAndroid Build Coastguard Worker$(call java-lib-files,$(module).stubs),$(ALL_MODULES.$(module).STUBS))) 1202*9e94795aSAndroid Build Coastguard Workerendef 1203*9e94795aSAndroid Build Coastguard Worker 1204*9e94795aSAndroid Build Coastguard Worker########################################################### 1205*9e94795aSAndroid Build Coastguard Worker## Evaluates to the timestamp file for a doc module, which 1206*9e94795aSAndroid Build Coastguard Worker## is the dependency that should be used. 1207*9e94795aSAndroid Build Coastguard Worker## $(1): doc module 1208*9e94795aSAndroid Build Coastguard Worker########################################################### 1209*9e94795aSAndroid Build Coastguard Worker 1210*9e94795aSAndroid Build Coastguard Workerdefine doc-timestamp-for 1211*9e94795aSAndroid Build Coastguard Worker$(OUT_DOCS)/$(strip $(1))-timestamp 1212*9e94795aSAndroid Build Coastguard Workerendef 1213*9e94795aSAndroid Build Coastguard Worker 1214*9e94795aSAndroid Build Coastguard Worker 1215*9e94795aSAndroid Build Coastguard Worker########################################################### 1216*9e94795aSAndroid Build Coastguard Worker## Convert "core ext framework" to "out/.../javalib.jar ..." 1217*9e94795aSAndroid Build Coastguard Worker## $(1): library list 1218*9e94795aSAndroid Build Coastguard Worker## $(2): Non-empty if IS_HOST_MODULE 1219*9e94795aSAndroid Build Coastguard Worker########################################################### 1220*9e94795aSAndroid Build Coastguard Worker 1221*9e94795aSAndroid Build Coastguard Worker# Get the jar files (you can pass to "javac -classpath") of static or shared 1222*9e94795aSAndroid Build Coastguard Worker# Java libraries that you want to link against. 1223*9e94795aSAndroid Build Coastguard Worker# $(1): library name list 1224*9e94795aSAndroid Build Coastguard Worker# $(2): Non-empty if IS_HOST_MODULE 1225*9e94795aSAndroid Build Coastguard Workerdefine java-lib-files 1226*9e94795aSAndroid Build Coastguard Worker$(foreach lib,$(1),$(call intermediates-dir-for,JAVA_LIBRARIES,$(lib),$(2),COMMON)/classes.jar) 1227*9e94795aSAndroid Build Coastguard Workerendef 1228*9e94795aSAndroid Build Coastguard Worker 1229*9e94795aSAndroid Build Coastguard Worker# Get the header jar files (you can pass to "javac -classpath") of static or shared 1230*9e94795aSAndroid Build Coastguard Worker# Java libraries that you want to link against. 1231*9e94795aSAndroid Build Coastguard Worker# $(1): library name list 1232*9e94795aSAndroid Build Coastguard Worker# $(2): Non-empty if IS_HOST_MODULE 1233*9e94795aSAndroid Build Coastguard Workerifneq ($(TURBINE_ENABLED),false) 1234*9e94795aSAndroid Build Coastguard Workerdefine java-lib-header-files 1235*9e94795aSAndroid Build Coastguard Worker$(foreach lib,$(1),$(call intermediates-dir-for,JAVA_LIBRARIES,$(lib),$(2),COMMON)/classes-header.jar) 1236*9e94795aSAndroid Build Coastguard Workerendef 1237*9e94795aSAndroid Build Coastguard Workerelse 1238*9e94795aSAndroid Build Coastguard Workerdefine java-lib-header-files 1239*9e94795aSAndroid Build Coastguard Worker$(call java-lib-files,$(1),$(2)) 1240*9e94795aSAndroid Build Coastguard Workerendef 1241*9e94795aSAndroid Build Coastguard Workerendif 1242*9e94795aSAndroid Build Coastguard Worker 1243*9e94795aSAndroid Build Coastguard Worker# Get the dependency files (you can put on the right side of "|" of a build rule) 1244*9e94795aSAndroid Build Coastguard Worker# of the Java libraries. 1245*9e94795aSAndroid Build Coastguard Worker# $(1): library name list 1246*9e94795aSAndroid Build Coastguard Worker# $(2): Non-empty if IS_HOST_MODULE 1247*9e94795aSAndroid Build Coastguard Worker# Historically for target Java libraries we used a different file (javalib.jar) 1248*9e94795aSAndroid Build Coastguard Worker# as the dependency. 1249*9e94795aSAndroid Build Coastguard Worker# Now we can use classes.jar as dependency, so java-lib-deps is the same 1250*9e94795aSAndroid Build Coastguard Worker# as java-lib-files. 1251*9e94795aSAndroid Build Coastguard Workerdefine java-lib-deps 1252*9e94795aSAndroid Build Coastguard Worker$(call java-lib-files,$(1),$(2)) 1253*9e94795aSAndroid Build Coastguard Workerendef 1254*9e94795aSAndroid Build Coastguard Worker 1255*9e94795aSAndroid Build Coastguard Worker# Get the jar files (you can pass to "javac -classpath") of static or shared 1256*9e94795aSAndroid Build Coastguard Worker# APK libraries that you want to link against. 1257*9e94795aSAndroid Build Coastguard Worker# $(1): library name list 1258*9e94795aSAndroid Build Coastguard Workerdefine app-lib-files 1259*9e94795aSAndroid Build Coastguard Worker$(foreach lib,$(1),$(call intermediates-dir-for,APPS,$(lib),,COMMON)/classes.jar) 1260*9e94795aSAndroid Build Coastguard Workerendef 1261*9e94795aSAndroid Build Coastguard Worker 1262*9e94795aSAndroid Build Coastguard Worker# Get the header jar files (you can pass to "javac -classpath") of static or shared 1263*9e94795aSAndroid Build Coastguard Worker# APK libraries that you want to link against. 1264*9e94795aSAndroid Build Coastguard Worker# $(1): library name list 1265*9e94795aSAndroid Build Coastguard Workerifneq ($(TURBINE_ENABLED),false) 1266*9e94795aSAndroid Build Coastguard Workerdefine app-lib-header-files 1267*9e94795aSAndroid Build Coastguard Worker$(foreach lib,$(1),$(call intermediates-dir-for,APPS,$(lib),,COMMON)/classes-header.jar) 1268*9e94795aSAndroid Build Coastguard Workerendef 1269*9e94795aSAndroid Build Coastguard Workerelse 1270*9e94795aSAndroid Build Coastguard Workerdefine app-lib-header-files 1271*9e94795aSAndroid Build Coastguard Worker$(call app-lib-files,$(1)) 1272*9e94795aSAndroid Build Coastguard Workerendef 1273*9e94795aSAndroid Build Coastguard Workerendif 1274*9e94795aSAndroid Build Coastguard Worker 1275*9e94795aSAndroid Build Coastguard Worker# Get the exported-sdk-libs files which collectively give you the list of exported java sdk 1276*9e94795aSAndroid Build Coastguard Worker# lib names that are (transitively) exported from the given set of java libs 1277*9e94795aSAndroid Build Coastguard Worker# $(1): library name list 1278*9e94795aSAndroid Build Coastguard Workerdefine exported-sdk-libs-files 1279*9e94795aSAndroid Build Coastguard Worker$(foreach lib,$(1),$(call intermediates-dir-for,JAVA_LIBRARIES,$(lib),,COMMON)/exported-sdk-libs) 1280*9e94795aSAndroid Build Coastguard Workerendef 1281*9e94795aSAndroid Build Coastguard Worker 1282*9e94795aSAndroid Build Coastguard Worker########################################################### 1283*9e94795aSAndroid Build Coastguard Worker## Append a leaf to a base path. Properly deals with 1284*9e94795aSAndroid Build Coastguard Worker## base paths ending in /. 1285*9e94795aSAndroid Build Coastguard Worker## 1286*9e94795aSAndroid Build Coastguard Worker## $(1): base path 1287*9e94795aSAndroid Build Coastguard Worker## $(2): leaf path 1288*9e94795aSAndroid Build Coastguard Worker########################################################### 1289*9e94795aSAndroid Build Coastguard Worker 1290*9e94795aSAndroid Build Coastguard Workerdefine append-path 1291*9e94795aSAndroid Build Coastguard Worker$(subst //,/,$(1)/$(2)) 1292*9e94795aSAndroid Build Coastguard Workerendef 1293*9e94795aSAndroid Build Coastguard Worker 1294*9e94795aSAndroid Build Coastguard Worker 1295*9e94795aSAndroid Build Coastguard Worker########################################################### 1296*9e94795aSAndroid Build Coastguard Worker## Color-coded warnings and errors 1297*9e94795aSAndroid Build Coastguard Worker## Use echo-(warning|error) in a build rule 1298*9e94795aSAndroid Build Coastguard Worker## Use pretty-(warning|error) instead of $(warning)/$(error) 1299*9e94795aSAndroid Build Coastguard Worker########################################################### 1300*9e94795aSAndroid Build Coastguard WorkerESC_BOLD := \033[1m 1301*9e94795aSAndroid Build Coastguard WorkerESC_WARNING := \033[35m 1302*9e94795aSAndroid Build Coastguard WorkerESC_ERROR := \033[31m 1303*9e94795aSAndroid Build Coastguard WorkerESC_RESET := \033[0m 1304*9e94795aSAndroid Build Coastguard Worker 1305*9e94795aSAndroid Build Coastguard Worker# $(1): path (and optionally line) information 1306*9e94795aSAndroid Build Coastguard Worker# $(2): message to print 1307*9e94795aSAndroid Build Coastguard Workerdefine echo-warning 1308*9e94795aSAndroid Build Coastguard Workerecho -e "$(ESC_BOLD)$(1): $(ESC_WARNING)warning:$(ESC_RESET)$(ESC_BOLD)" '$(subst ','\'',$(2))' "$(ESC_RESET)" >&2 1309*9e94795aSAndroid Build Coastguard Workerendef 1310*9e94795aSAndroid Build Coastguard Worker 1311*9e94795aSAndroid Build Coastguard Worker# $(1): path (and optionally line) information 1312*9e94795aSAndroid Build Coastguard Worker# $(2): message to print 1313*9e94795aSAndroid Build Coastguard Workerdefine echo-error 1314*9e94795aSAndroid Build Coastguard Workerecho -e "$(ESC_BOLD)$(1): $(ESC_ERROR)error:$(ESC_RESET)$(ESC_BOLD)" '$(subst ','\'',$(2))' "$(ESC_RESET)" >&2 1315*9e94795aSAndroid Build Coastguard Workerendef 1316*9e94795aSAndroid Build Coastguard Worker 1317*9e94795aSAndroid Build Coastguard Worker########################################################### 1318*9e94795aSAndroid Build Coastguard Worker## Legacy showcommands compatibility 1319*9e94795aSAndroid Build Coastguard Worker########################################################### 1320*9e94795aSAndroid Build Coastguard Worker 1321*9e94795aSAndroid Build Coastguard Workerdefine pretty 1322*9e94795aSAndroid Build Coastguard Worker@echo $1 1323*9e94795aSAndroid Build Coastguard Workerendef 1324*9e94795aSAndroid Build Coastguard Worker 1325*9e94795aSAndroid Build Coastguard Worker########################################################### 1326*9e94795aSAndroid Build Coastguard Worker## Commands for including the dependency files the compiler generates 1327*9e94795aSAndroid Build Coastguard Worker########################################################### 1328*9e94795aSAndroid Build Coastguard Worker# $(1): the .P file 1329*9e94795aSAndroid Build Coastguard Worker# $(2): the main build target 1330*9e94795aSAndroid Build Coastguard Workerdefine include-depfile 1331*9e94795aSAndroid Build Coastguard Worker$(eval $(2) : .KATI_DEPFILE := $1) 1332*9e94795aSAndroid Build Coastguard Workerendef 1333*9e94795aSAndroid Build Coastguard Worker 1334*9e94795aSAndroid Build Coastguard Worker# $(1): object files 1335*9e94795aSAndroid Build Coastguard Workerdefine include-depfiles-for-objs 1336*9e94795aSAndroid Build Coastguard Worker$(foreach obj, $(1), $(call include-depfile, $(obj:%.o=%.d), $(obj))) 1337*9e94795aSAndroid Build Coastguard Workerendef 1338*9e94795aSAndroid Build Coastguard Worker 1339*9e94795aSAndroid Build Coastguard Worker########################################################### 1340*9e94795aSAndroid Build Coastguard Worker## Track source files compiled to objects 1341*9e94795aSAndroid Build Coastguard Worker########################################################### 1342*9e94795aSAndroid Build Coastguard Worker# $(1): list of sources 1343*9e94795aSAndroid Build Coastguard Worker# $(2): list of matching objects 1344*9e94795aSAndroid Build Coastguard Workerdefine track-src-file-obj 1345*9e94795aSAndroid Build Coastguard Worker$(eval $(call _track-src-file-obj,$(1))) 1346*9e94795aSAndroid Build Coastguard Workerendef 1347*9e94795aSAndroid Build Coastguard Workerdefine _track-src-file-obj 1348*9e94795aSAndroid Build Coastguard Workeri := w 1349*9e94795aSAndroid Build Coastguard Worker$(foreach s,$(1), 1350*9e94795aSAndroid Build Coastguard Workermy_tracked_src_files += $(s) 1351*9e94795aSAndroid Build Coastguard Workermy_src_file_obj_$(s) := $$(word $$(words $$(i)),$$(2)) 1352*9e94795aSAndroid Build Coastguard Workeri += w) 1353*9e94795aSAndroid Build Coastguard Workerendef 1354*9e94795aSAndroid Build Coastguard Worker 1355*9e94795aSAndroid Build Coastguard Worker# $(1): list of sources 1356*9e94795aSAndroid Build Coastguard Worker# $(2): list of matching generated sources 1357*9e94795aSAndroid Build Coastguard Workerdefine track-src-file-gen 1358*9e94795aSAndroid Build Coastguard Worker$(eval $(call _track-src-file-gen,$(2))) 1359*9e94795aSAndroid Build Coastguard Workerendef 1360*9e94795aSAndroid Build Coastguard Workerdefine _track-src-file-gen 1361*9e94795aSAndroid Build Coastguard Workeri := w 1362*9e94795aSAndroid Build Coastguard Worker$(foreach s,$(1), 1363*9e94795aSAndroid Build Coastguard Workermy_tracked_gen_files += $(s) 1364*9e94795aSAndroid Build Coastguard Workermy_src_file_gen_$(s) := $$(word $$(words $$(i)),$$(1)) 1365*9e94795aSAndroid Build Coastguard Workeri += w) 1366*9e94795aSAndroid Build Coastguard Workerendef 1367*9e94795aSAndroid Build Coastguard Worker 1368*9e94795aSAndroid Build Coastguard Worker# $(1): list of generated sources 1369*9e94795aSAndroid Build Coastguard Worker# $(2): list of matching objects 1370*9e94795aSAndroid Build Coastguard Workerdefine track-gen-file-obj 1371*9e94795aSAndroid Build Coastguard Worker$(call track-src-file-obj,$(foreach f,$(1),\ 1372*9e94795aSAndroid Build Coastguard Worker $(or $(my_src_file_gen_$(f)),$(f))),$(2)) 1373*9e94795aSAndroid Build Coastguard Workerendef 1374*9e94795aSAndroid Build Coastguard Worker 1375*9e94795aSAndroid Build Coastguard Worker########################################################### 1376*9e94795aSAndroid Build Coastguard Worker## Commands for running lex 1377*9e94795aSAndroid Build Coastguard Worker########################################################### 1378*9e94795aSAndroid Build Coastguard Worker 1379*9e94795aSAndroid Build Coastguard Workerdefine transform-l-to-c-or-cpp 1380*9e94795aSAndroid Build Coastguard Worker@echo "Lex: $(PRIVATE_MODULE) <= $<" 1381*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 1382*9e94795aSAndroid Build Coastguard WorkerM4=$(M4) $(LEX) -o$@ $< 1383*9e94795aSAndroid Build Coastguard Workerendef 1384*9e94795aSAndroid Build Coastguard Worker 1385*9e94795aSAndroid Build Coastguard Worker########################################################### 1386*9e94795aSAndroid Build Coastguard Worker## Commands for running yacc 1387*9e94795aSAndroid Build Coastguard Worker## 1388*9e94795aSAndroid Build Coastguard Worker########################################################### 1389*9e94795aSAndroid Build Coastguard Worker 1390*9e94795aSAndroid Build Coastguard Workerdefine transform-y-to-c-or-cpp 1391*9e94795aSAndroid Build Coastguard Worker@echo "Yacc: $(PRIVATE_MODULE) <= $<" 1392*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 1393*9e94795aSAndroid Build Coastguard WorkerM4=$(M4) $(YACC) $(PRIVATE_YACCFLAGS) \ 1394*9e94795aSAndroid Build Coastguard Worker --defines=$(basename $@).h \ 1395*9e94795aSAndroid Build Coastguard Worker -o $@ $< 1396*9e94795aSAndroid Build Coastguard Workerendef 1397*9e94795aSAndroid Build Coastguard Worker 1398*9e94795aSAndroid Build Coastguard Worker########################################################### 1399*9e94795aSAndroid Build Coastguard Worker## Commands to compile RenderScript to Java 1400*9e94795aSAndroid Build Coastguard Worker########################################################### 1401*9e94795aSAndroid Build Coastguard Worker 1402*9e94795aSAndroid Build Coastguard Worker## Merge multiple .d files generated by llvm-rs-cc. This is necessary 1403*9e94795aSAndroid Build Coastguard Worker## because ninja can handle only a single depfile per build target. 1404*9e94795aSAndroid Build Coastguard Worker## .d files generated by llvm-rs-cc define .stamp, .bc, and optionally 1405*9e94795aSAndroid Build Coastguard Worker## .java as build targets. However, there's no way to let ninja know 1406*9e94795aSAndroid Build Coastguard Worker## dependencies to .bc files and .java files, so we give up build 1407*9e94795aSAndroid Build Coastguard Worker## targets for them. As we write the .stamp file as the target by 1408*9e94795aSAndroid Build Coastguard Worker## ourselves, the awk script removes the first lines before the colon 1409*9e94795aSAndroid Build Coastguard Worker## and append a backslash to the last line to concatenate contents of 1410*9e94795aSAndroid Build Coastguard Worker## multiple files. 1411*9e94795aSAndroid Build Coastguard Worker# $(1): .d files to be merged 1412*9e94795aSAndroid Build Coastguard Worker# $(2): merged .d file 1413*9e94795aSAndroid Build Coastguard Workerdefine _merge-renderscript-d 1414*9e94795aSAndroid Build Coastguard Worker$(hide) echo '$@: $(backslash)' > $2 1415*9e94795aSAndroid Build Coastguard Worker$(foreach d,$1, \ 1416*9e94795aSAndroid Build Coastguard Worker $(hide) awk 'start { sub(/( \\)?$$/, " \\"); print } /:/ { start=1 }' < $d >> $2$(newline)) 1417*9e94795aSAndroid Build Coastguard Worker$(hide) echo >> $2 1418*9e94795aSAndroid Build Coastguard Workerendef 1419*9e94795aSAndroid Build Coastguard Worker 1420*9e94795aSAndroid Build Coastguard Worker# b/37755219 1421*9e94795aSAndroid Build Coastguard WorkerRS_CC_ASAN_OPTIONS := ASAN_OPTIONS=detect_leaks=0:detect_container_overflow=0 1422*9e94795aSAndroid Build Coastguard Worker 1423*9e94795aSAndroid Build Coastguard Workerdefine transform-renderscripts-to-java-and-bc 1424*9e94795aSAndroid Build Coastguard Worker@echo "RenderScript: $(PRIVATE_MODULE) <= $(PRIVATE_RS_SOURCE_FILES)" 1425*9e94795aSAndroid Build Coastguard Worker$(hide) rm -rf $(PRIVATE_RS_OUTPUT_DIR) 1426*9e94795aSAndroid Build Coastguard Worker$(hide) mkdir -p $(PRIVATE_RS_OUTPUT_DIR)/res/raw 1427*9e94795aSAndroid Build Coastguard Worker$(hide) mkdir -p $(PRIVATE_RS_OUTPUT_DIR)/src 1428*9e94795aSAndroid Build Coastguard Worker$(hide) $(RS_CC_ASAN_OPTIONS) $(PRIVATE_RS_CC) \ 1429*9e94795aSAndroid Build Coastguard Worker -o $(PRIVATE_RS_OUTPUT_DIR)/res/raw \ 1430*9e94795aSAndroid Build Coastguard Worker -p $(PRIVATE_RS_OUTPUT_DIR)/src \ 1431*9e94795aSAndroid Build Coastguard Worker -d $(PRIVATE_RS_OUTPUT_DIR) \ 1432*9e94795aSAndroid Build Coastguard Worker -a $@ -MD \ 1433*9e94795aSAndroid Build Coastguard Worker $(addprefix -target-api , $(PRIVATE_RS_TARGET_API)) \ 1434*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_RS_FLAGS) \ 1435*9e94795aSAndroid Build Coastguard Worker $(foreach inc,$(PRIVATE_RS_INCLUDES),$(addprefix -I , $(inc))) \ 1436*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_RS_SOURCE_FILES) 1437*9e94795aSAndroid Build Coastguard Worker$(SOONG_ZIP) -o $@ -C $(PRIVATE_RS_OUTPUT_DIR)/src -D $(PRIVATE_RS_OUTPUT_DIR)/src 1438*9e94795aSAndroid Build Coastguard Worker$(SOONG_ZIP) -o $(PRIVATE_RS_OUTPUT_RES_ZIP) -C $(PRIVATE_RS_OUTPUT_DIR)/res -D $(PRIVATE_RS_OUTPUT_DIR)/res 1439*9e94795aSAndroid Build Coastguard Worker$(call _merge-renderscript-d,$(PRIVATE_DEP_FILES),$@.d) 1440*9e94795aSAndroid Build Coastguard Workerendef 1441*9e94795aSAndroid Build Coastguard Worker 1442*9e94795aSAndroid Build Coastguard Workerdefine transform-bc-to-so 1443*9e94795aSAndroid Build Coastguard Worker@echo "Renderscript compatibility: $(notdir $@) <= $(notdir $<)" 1444*9e94795aSAndroid Build Coastguard Worker$(hide) mkdir -p $(dir $@) 1445*9e94795aSAndroid Build Coastguard Worker$(hide) $(BCC_COMPAT) -O3 -o $(dir $@)/$(notdir $(<:.bc=.o)) -fPIC -shared \ 1446*9e94795aSAndroid Build Coastguard Worker -rt-path $(RS_PREBUILT_CLCORE) -mtriple $(RS_COMPAT_TRIPLE) $< 1447*9e94795aSAndroid Build Coastguard Worker$(hide) $(PRIVATE_CXX_LINK) -fuse-ld=lld -target $(CLANG_TARGET_TRIPLE) -shared -Wl,-soname,$(notdir $@) -nostdlib \ 1448*9e94795aSAndroid Build Coastguard Worker -Wl,-rpath,\$$ORIGIN/../lib \ 1449*9e94795aSAndroid Build Coastguard Worker $(dir $@)/$(notdir $(<:.bc=.o)) \ 1450*9e94795aSAndroid Build Coastguard Worker $(RS_PREBUILT_COMPILER_RT) \ 1451*9e94795aSAndroid Build Coastguard Worker -o $@ $(CLANG_TARGET_GLOBAL_LLDFLAGS) -Wl,--hash-style=sysv \ 1452*9e94795aSAndroid Build Coastguard Worker -L $(SOONG_OUT_DIR)/ndk/platforms/android-$(PRIVATE_SDK_VERSION)/arch-$(TARGET_ARCH)/usr/lib64 \ 1453*9e94795aSAndroid Build Coastguard Worker -L $(SOONG_OUT_DIR)/ndk/platforms/android-$(PRIVATE_SDK_VERSION)/arch-$(TARGET_ARCH)/usr/lib \ 1454*9e94795aSAndroid Build Coastguard Worker $(call intermediates-dir-for,SHARED_LIBRARIES,libRSSupport)/libRSSupport.so \ 1455*9e94795aSAndroid Build Coastguard Worker -lm -lc 1456*9e94795aSAndroid Build Coastguard Workerendef 1457*9e94795aSAndroid Build Coastguard Worker 1458*9e94795aSAndroid Build Coastguard Worker########################################################### 1459*9e94795aSAndroid Build Coastguard Worker## Commands to compile RenderScript to C++ 1460*9e94795aSAndroid Build Coastguard Worker########################################################### 1461*9e94795aSAndroid Build Coastguard Worker 1462*9e94795aSAndroid Build Coastguard Workerdefine transform-renderscripts-to-cpp-and-bc 1463*9e94795aSAndroid Build Coastguard Worker@echo "RenderScript: $(PRIVATE_MODULE) <= $(PRIVATE_RS_SOURCE_FILES)" 1464*9e94795aSAndroid Build Coastguard Worker$(hide) rm -rf $(PRIVATE_RS_OUTPUT_DIR) 1465*9e94795aSAndroid Build Coastguard Worker$(hide) mkdir -p $(PRIVATE_RS_OUTPUT_DIR)/ 1466*9e94795aSAndroid Build Coastguard Worker$(hide) $(RS_CC_ASAN_OPTIONS) $(PRIVATE_RS_CC) \ 1467*9e94795aSAndroid Build Coastguard Worker -o $(PRIVATE_RS_OUTPUT_DIR)/ \ 1468*9e94795aSAndroid Build Coastguard Worker -d $(PRIVATE_RS_OUTPUT_DIR) \ 1469*9e94795aSAndroid Build Coastguard Worker -a $@ -MD \ 1470*9e94795aSAndroid Build Coastguard Worker -reflect-c++ \ 1471*9e94795aSAndroid Build Coastguard Worker $(addprefix -target-api , $(PRIVATE_RS_TARGET_API)) \ 1472*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_RS_FLAGS) \ 1473*9e94795aSAndroid Build Coastguard Worker $(addprefix -I , $(PRIVATE_RS_INCLUDES)) \ 1474*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_RS_SOURCE_FILES) 1475*9e94795aSAndroid Build Coastguard Worker$(call _merge-renderscript-d,$(PRIVATE_DEP_FILES),$@.d) 1476*9e94795aSAndroid Build Coastguard Worker$(hide) mkdir -p $(dir $@) 1477*9e94795aSAndroid Build Coastguard Worker$(hide) touch $@ 1478*9e94795aSAndroid Build Coastguard Workerendef 1479*9e94795aSAndroid Build Coastguard Worker 1480*9e94795aSAndroid Build Coastguard Worker 1481*9e94795aSAndroid Build Coastguard Worker########################################################### 1482*9e94795aSAndroid Build Coastguard Worker## Commands for running aidl 1483*9e94795aSAndroid Build Coastguard Worker########################################################### 1484*9e94795aSAndroid Build Coastguard Worker 1485*9e94795aSAndroid Build Coastguard Workerdefine transform-aidl-to-java 1486*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 1487*9e94795aSAndroid Build Coastguard Worker@echo "Aidl: $(PRIVATE_MODULE) <= $<" 1488*9e94795aSAndroid Build Coastguard Worker$(hide) $(AIDL) -d$(patsubst %.java,%.P,$@) $(PRIVATE_AIDL_FLAGS) $< $@ 1489*9e94795aSAndroid Build Coastguard Workerendef 1490*9e94795aSAndroid Build Coastguard Worker#$(AIDL) $(PRIVATE_AIDL_FLAGS) $< - | indent -nut -br -npcs -l1000 > $@ 1491*9e94795aSAndroid Build Coastguard Worker 1492*9e94795aSAndroid Build Coastguard Workerdefine transform-aidl-to-cpp 1493*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 1494*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(PRIVATE_HEADER_OUTPUT_DIR) 1495*9e94795aSAndroid Build Coastguard Worker@echo "Generating C++ from AIDL: $(PRIVATE_MODULE) <= $<" 1496*9e94795aSAndroid Build Coastguard Worker$(hide) $(AIDL_CPP) -d$(basename $@).aidl.d --ninja $(PRIVATE_AIDL_FLAGS) \ 1497*9e94795aSAndroid Build Coastguard Worker $< $(PRIVATE_HEADER_OUTPUT_DIR) $@ 1498*9e94795aSAndroid Build Coastguard Workerendef 1499*9e94795aSAndroid Build Coastguard Worker 1500*9e94795aSAndroid Build Coastguard Worker## Given a .aidl file path, generate the rule to compile it a .java file 1501*9e94795aSAndroid Build Coastguard Worker# $(1): a .aidl source file 1502*9e94795aSAndroid Build Coastguard Worker# $(2): a directory to place the generated .java files in 1503*9e94795aSAndroid Build Coastguard Worker# $(3): name of a variable to add the path to the generated source file to 1504*9e94795aSAndroid Build Coastguard Worker# 1505*9e94795aSAndroid Build Coastguard Worker# You must call this with $(eval). 1506*9e94795aSAndroid Build Coastguard Workerdefine define-aidl-java-rule 1507*9e94795aSAndroid Build Coastguard Workerdefine_aidl_java_rule_src := $(patsubst %.aidl,%.java,$(subst ../,dotdot/,$(addprefix $(2)/,$(1)))) 1508*9e94795aSAndroid Build Coastguard Worker$$(define_aidl_java_rule_src) : $(call clean-path,$(LOCAL_PATH)/$(1)) $(AIDL) 1509*9e94795aSAndroid Build Coastguard Worker $$(transform-aidl-to-java) 1510*9e94795aSAndroid Build Coastguard Worker$(3) += $$(define_aidl_java_rule_src) 1511*9e94795aSAndroid Build Coastguard Workerendef 1512*9e94795aSAndroid Build Coastguard Worker 1513*9e94795aSAndroid Build Coastguard Worker## Given a .aidl file path generate the rule to compile it a .cpp file. 1514*9e94795aSAndroid Build Coastguard Worker# $(1): a .aidl source file 1515*9e94795aSAndroid Build Coastguard Worker# $(2): a directory to place the generated .cpp files in 1516*9e94795aSAndroid Build Coastguard Worker# $(3): name of a variable to add the path to the generated source file to 1517*9e94795aSAndroid Build Coastguard Worker# 1518*9e94795aSAndroid Build Coastguard Worker# You must call this with $(eval). 1519*9e94795aSAndroid Build Coastguard Workerdefine define-aidl-cpp-rule 1520*9e94795aSAndroid Build Coastguard Workerdefine_aidl_cpp_rule_src := $(patsubst %.aidl,%$(LOCAL_CPP_EXTENSION),$(subst ../,dotdot/,$(addprefix $(2)/,$(1)))) 1521*9e94795aSAndroid Build Coastguard Worker$$(define_aidl_cpp_rule_src) : $(call clean-path,$(LOCAL_PATH)/$(1)) $(AIDL_CPP) 1522*9e94795aSAndroid Build Coastguard Worker $$(transform-aidl-to-cpp) 1523*9e94795aSAndroid Build Coastguard Worker$(3) += $$(define_aidl_cpp_rule_src) 1524*9e94795aSAndroid Build Coastguard Workerendef 1525*9e94795aSAndroid Build Coastguard Worker 1526*9e94795aSAndroid Build Coastguard Worker########################################################### 1527*9e94795aSAndroid Build Coastguard Worker## Commands for running vts 1528*9e94795aSAndroid Build Coastguard Worker########################################################### 1529*9e94795aSAndroid Build Coastguard Worker 1530*9e94795aSAndroid Build Coastguard Workerdefine transform-vts-to-cpp 1531*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 1532*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(PRIVATE_HEADER_OUTPUT_DIR) 1533*9e94795aSAndroid Build Coastguard Worker@echo "Generating C++ from VTS: $(PRIVATE_MODULE) <= $<" 1534*9e94795aSAndroid Build Coastguard Worker$(hide) $(VTSC) -TODO_b/120496070 $(PRIVATE_VTS_FLAGS) \ 1535*9e94795aSAndroid Build Coastguard Worker $< $(PRIVATE_HEADER_OUTPUT_DIR) $@ 1536*9e94795aSAndroid Build Coastguard Workerendef 1537*9e94795aSAndroid Build Coastguard Worker 1538*9e94795aSAndroid Build Coastguard Worker## Given a .vts file path generate the rule to compile it a .cpp file. 1539*9e94795aSAndroid Build Coastguard Worker# $(1): a .vts source file 1540*9e94795aSAndroid Build Coastguard Worker# $(2): a directory to place the generated .cpp files in 1541*9e94795aSAndroid Build Coastguard Worker# $(3): name of a variable to add the path to the generated source file to 1542*9e94795aSAndroid Build Coastguard Worker# 1543*9e94795aSAndroid Build Coastguard Worker# You must call this with $(eval). 1544*9e94795aSAndroid Build Coastguard Workerdefine define-vts-cpp-rule 1545*9e94795aSAndroid Build Coastguard Workerdefine_vts_cpp_rule_src := $(patsubst %.vts,%$(LOCAL_CPP_EXTENSION),$(subst ../,dotdot/,$(addprefix $(2)/,$(1)))) 1546*9e94795aSAndroid Build Coastguard Worker$$(define_vts_cpp_rule_src) : $(LOCAL_PATH)/$(1) $(VTSC) 1547*9e94795aSAndroid Build Coastguard Worker $$(transform-vts-to-cpp) 1548*9e94795aSAndroid Build Coastguard Worker$(3) += $$(define_vts_cpp_rule_src) 1549*9e94795aSAndroid Build Coastguard Workerendef 1550*9e94795aSAndroid Build Coastguard Worker 1551*9e94795aSAndroid Build Coastguard Worker########################################################### 1552*9e94795aSAndroid Build Coastguard Worker## Commands for running java-event-log-tags.py 1553*9e94795aSAndroid Build Coastguard Worker########################################################### 1554*9e94795aSAndroid Build Coastguard Worker 1555*9e94795aSAndroid Build Coastguard Workerdefine transform-logtags-to-java 1556*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 1557*9e94795aSAndroid Build Coastguard Worker@echo "logtags: $@ <= $<" 1558*9e94795aSAndroid Build Coastguard Worker$(hide) $(JAVATAGS) -o $@ $< $(PRIVATE_MERGED_TAG) 1559*9e94795aSAndroid Build Coastguard Workerendef 1560*9e94795aSAndroid Build Coastguard Worker 1561*9e94795aSAndroid Build Coastguard Worker 1562*9e94795aSAndroid Build Coastguard Worker########################################################### 1563*9e94795aSAndroid Build Coastguard Worker## Commands for running protoc to compile .proto into .java 1564*9e94795aSAndroid Build Coastguard Worker########################################################### 1565*9e94795aSAndroid Build Coastguard Worker 1566*9e94795aSAndroid Build Coastguard Workerdefine transform-proto-to-java 1567*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 1568*9e94795aSAndroid Build Coastguard Worker@echo "Protoc: $@ <= $(PRIVATE_PROTO_SRC_FILES)" 1569*9e94795aSAndroid Build Coastguard Worker@rm -rf $(PRIVATE_PROTO_JAVA_OUTPUT_DIR) 1570*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(PRIVATE_PROTO_JAVA_OUTPUT_DIR) 1571*9e94795aSAndroid Build Coastguard Worker$(hide) for f in $(PRIVATE_PROTO_SRC_FILES); do \ 1572*9e94795aSAndroid Build Coastguard Worker $(PROTOC) \ 1573*9e94795aSAndroid Build Coastguard Worker $(addprefix --proto_path=, $(PRIVATE_PROTO_INCLUDES)) \ 1574*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_PROTO_JAVA_OUTPUT_OPTION)="$(PRIVATE_PROTO_JAVA_OUTPUT_PARAMS):$(PRIVATE_PROTO_JAVA_OUTPUT_DIR)" \ 1575*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_PROTOC_FLAGS) \ 1576*9e94795aSAndroid Build Coastguard Worker $$f || exit 33; \ 1577*9e94795aSAndroid Build Coastguard Worker done 1578*9e94795aSAndroid Build Coastguard Worker$(SOONG_ZIP) -o $@ -C $(PRIVATE_PROTO_JAVA_OUTPUT_DIR) -D $(PRIVATE_PROTO_JAVA_OUTPUT_DIR) 1579*9e94795aSAndroid Build Coastguard Workerendef 1580*9e94795aSAndroid Build Coastguard Worker 1581*9e94795aSAndroid Build Coastguard Worker###################################################################### 1582*9e94795aSAndroid Build Coastguard Worker## Commands for running protoc to compile .proto into .pb.cc (or.pb.c) and .pb.h 1583*9e94795aSAndroid Build Coastguard Worker###################################################################### 1584*9e94795aSAndroid Build Coastguard Worker 1585*9e94795aSAndroid Build Coastguard Workerdefine transform-proto-to-cc 1586*9e94795aSAndroid Build Coastguard Worker@echo "Protoc: $@ <= $<" 1587*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 1588*9e94795aSAndroid Build Coastguard Worker$(hide) \ 1589*9e94795aSAndroid Build Coastguard Worker $(PROTOC) \ 1590*9e94795aSAndroid Build Coastguard Worker $(addprefix --proto_path=, $(PRIVATE_PROTO_INCLUDES)) \ 1591*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_PROTOC_FLAGS) \ 1592*9e94795aSAndroid Build Coastguard Worker $< 1593*9e94795aSAndroid Build Coastguard Worker@# aprotoc outputs only .cc. Rename it to .cpp if necessary. 1594*9e94795aSAndroid Build Coastguard Worker$(if $(PRIVATE_RENAME_CPP_EXT),\ 1595*9e94795aSAndroid Build Coastguard Worker $(hide) mv $(basename $@).cc $@) 1596*9e94795aSAndroid Build Coastguard Workerendef 1597*9e94795aSAndroid Build Coastguard Worker 1598*9e94795aSAndroid Build Coastguard Worker########################################################### 1599*9e94795aSAndroid Build Coastguard Worker## Helper to set include paths form transform-*-to-o 1600*9e94795aSAndroid Build Coastguard Worker########################################################### 1601*9e94795aSAndroid Build Coastguard Workerdefine c-includes 1602*9e94795aSAndroid Build Coastguard Worker$(addprefix -I , $(PRIVATE_C_INCLUDES)) \ 1603*9e94795aSAndroid Build Coastguard Worker$(foreach i,$(PRIVATE_IMPORTED_INCLUDES),$(EXPORTS.$(i)))\ 1604*9e94795aSAndroid Build Coastguard Worker$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),,\ 1605*9e94795aSAndroid Build Coastguard Worker $(addprefix -I ,\ 1606*9e94795aSAndroid Build Coastguard Worker $(filter-out $(PRIVATE_C_INCLUDES), \ 1607*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_GLOBAL_C_INCLUDES))) \ 1608*9e94795aSAndroid Build Coastguard Worker $(addprefix -isystem ,\ 1609*9e94795aSAndroid Build Coastguard Worker $(filter-out $(PRIVATE_C_INCLUDES), \ 1610*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_GLOBAL_C_SYSTEM_INCLUDES)))) 1611*9e94795aSAndroid Build Coastguard Workerendef 1612*9e94795aSAndroid Build Coastguard Worker 1613*9e94795aSAndroid Build Coastguard Worker########################################################### 1614*9e94795aSAndroid Build Coastguard Worker## Commands for running gcc to compile a C++ file 1615*9e94795aSAndroid Build Coastguard Worker########################################################### 1616*9e94795aSAndroid Build Coastguard Worker 1617*9e94795aSAndroid Build Coastguard Workerdefine transform-cpp-to-o-compiler-args 1618*9e94795aSAndroid Build Coastguard Worker$(c-includes) \ 1619*9e94795aSAndroid Build Coastguard Worker-c \ 1620*9e94795aSAndroid Build Coastguard Worker$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \ 1621*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_TARGET_GLOBAL_CFLAGS) \ 1622*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_TARGET_GLOBAL_CPPFLAGS) \ 1623*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_ARM_CFLAGS) \ 1624*9e94795aSAndroid Build Coastguard Worker ) \ 1625*9e94795aSAndroid Build Coastguard Worker$(PRIVATE_RTTI_FLAG) \ 1626*9e94795aSAndroid Build Coastguard Worker$(PRIVATE_CFLAGS) \ 1627*9e94795aSAndroid Build Coastguard Worker$(PRIVATE_CPPFLAGS) \ 1628*9e94795aSAndroid Build Coastguard Worker$(PRIVATE_DEBUG_CFLAGS) \ 1629*9e94795aSAndroid Build Coastguard Worker$(PRIVATE_CFLAGS_NO_OVERRIDE) \ 1630*9e94795aSAndroid Build Coastguard Worker$(PRIVATE_CPPFLAGS_NO_OVERRIDE) 1631*9e94795aSAndroid Build Coastguard Workerendef 1632*9e94795aSAndroid Build Coastguard Worker 1633*9e94795aSAndroid Build Coastguard Worker# PATH_TO_CLANG_TIDY is defined in build/soong 1634*9e94795aSAndroid Build Coastguard Workerdefine call-clang-tidy 1635*9e94795aSAndroid Build Coastguard Worker$(PATH_TO_CLANG_TIDY) \ 1636*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_TIDY_FLAGS) \ 1637*9e94795aSAndroid Build Coastguard Worker -checks=$(PRIVATE_TIDY_CHECKS) 1638*9e94795aSAndroid Build Coastguard Workerendef 1639*9e94795aSAndroid Build Coastguard Worker 1640*9e94795aSAndroid Build Coastguard Workerdefine clang-tidy-cpp 1641*9e94795aSAndroid Build Coastguard Worker$(hide) $(call-clang-tidy) $< -- $(transform-cpp-to-o-compiler-args) 1642*9e94795aSAndroid Build Coastguard Workerendef 1643*9e94795aSAndroid Build Coastguard Worker 1644*9e94795aSAndroid Build Coastguard Workerifneq (,$(filter 1 true,$(WITH_TIDY_ONLY))) 1645*9e94795aSAndroid Build Coastguard Workerdefine transform-cpp-to-o 1646*9e94795aSAndroid Build Coastguard Worker$(if $(PRIVATE_TIDY_CHECKS), 1647*9e94795aSAndroid Build Coastguard Worker @echo "$($(PRIVATE_PREFIX)DISPLAY) tidy $(PRIVATE_ARM_MODE) C++: $<" 1648*9e94795aSAndroid Build Coastguard Worker $(clang-tidy-cpp)) 1649*9e94795aSAndroid Build Coastguard Workerendef 1650*9e94795aSAndroid Build Coastguard Workerelse 1651*9e94795aSAndroid Build Coastguard Workerdefine transform-cpp-to-o 1652*9e94795aSAndroid Build Coastguard Worker@echo "$($(PRIVATE_PREFIX)DISPLAY) $(PRIVATE_ARM_MODE) C++: $(PRIVATE_MODULE) <= $<" 1653*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 1654*9e94795aSAndroid Build Coastguard Worker$(if $(PRIVATE_TIDY_CHECKS),$(clang-tidy-cpp)) 1655*9e94795aSAndroid Build Coastguard Worker$(hide) $(RELATIVE_PWD) $(PRIVATE_CXX) \ 1656*9e94795aSAndroid Build Coastguard Worker $(transform-cpp-to-o-compiler-args) \ 1657*9e94795aSAndroid Build Coastguard Worker -MD -MF $(patsubst %.o,%.d,$@) -o $@ $< 1658*9e94795aSAndroid Build Coastguard Workerendef 1659*9e94795aSAndroid Build Coastguard Workerendif 1660*9e94795aSAndroid Build Coastguard Worker 1661*9e94795aSAndroid Build Coastguard Worker 1662*9e94795aSAndroid Build Coastguard Worker########################################################### 1663*9e94795aSAndroid Build Coastguard Worker## Commands for running gcc to compile a C file 1664*9e94795aSAndroid Build Coastguard Worker########################################################### 1665*9e94795aSAndroid Build Coastguard Worker 1666*9e94795aSAndroid Build Coastguard Worker# $(1): extra flags 1667*9e94795aSAndroid Build Coastguard Workerdefine transform-c-or-s-to-o-compiler-args 1668*9e94795aSAndroid Build Coastguard Worker$(c-includes) \ 1669*9e94795aSAndroid Build Coastguard Worker-c \ 1670*9e94795aSAndroid Build Coastguard Worker$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \ 1671*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_TARGET_GLOBAL_CFLAGS) \ 1672*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_TARGET_GLOBAL_CONLYFLAGS) \ 1673*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_ARM_CFLAGS) \ 1674*9e94795aSAndroid Build Coastguard Worker ) \ 1675*9e94795aSAndroid Build Coastguard Worker $(1) 1676*9e94795aSAndroid Build Coastguard Workerendef 1677*9e94795aSAndroid Build Coastguard Worker 1678*9e94795aSAndroid Build Coastguard Workerdefine transform-c-to-o-compiler-args 1679*9e94795aSAndroid Build Coastguard Worker$(call transform-c-or-s-to-o-compiler-args, \ 1680*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_CFLAGS) \ 1681*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_CONLYFLAGS) \ 1682*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_DEBUG_CFLAGS) \ 1683*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_CFLAGS_NO_OVERRIDE)) 1684*9e94795aSAndroid Build Coastguard Workerendef 1685*9e94795aSAndroid Build Coastguard Worker 1686*9e94795aSAndroid Build Coastguard Workerdefine clang-tidy-c 1687*9e94795aSAndroid Build Coastguard Worker$(hide) $(call-clang-tidy) $< -- $(transform-c-to-o-compiler-args) 1688*9e94795aSAndroid Build Coastguard Workerendef 1689*9e94795aSAndroid Build Coastguard Worker 1690*9e94795aSAndroid Build Coastguard Workerifneq (,$(filter 1 true,$(WITH_TIDY_ONLY))) 1691*9e94795aSAndroid Build Coastguard Workerdefine transform-c-to-o 1692*9e94795aSAndroid Build Coastguard Worker$(if $(PRIVATE_TIDY_CHECKS), 1693*9e94795aSAndroid Build Coastguard Worker @echo "$($(PRIVATE_PREFIX)DISPLAY) tidy $(PRIVATE_ARM_MODE) C: $<" 1694*9e94795aSAndroid Build Coastguard Worker $(clang-tidy-c)) 1695*9e94795aSAndroid Build Coastguard Workerendef 1696*9e94795aSAndroid Build Coastguard Workerelse 1697*9e94795aSAndroid Build Coastguard Workerdefine transform-c-to-o 1698*9e94795aSAndroid Build Coastguard Worker@echo "$($(PRIVATE_PREFIX)DISPLAY) $(PRIVATE_ARM_MODE) C: $(PRIVATE_MODULE) <= $<" 1699*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 1700*9e94795aSAndroid Build Coastguard Worker$(if $(PRIVATE_TIDY_CHECKS),$(clang-tidy-c)) 1701*9e94795aSAndroid Build Coastguard Worker$(hide) $(RELATIVE_PWD) $(PRIVATE_CC) \ 1702*9e94795aSAndroid Build Coastguard Worker $(transform-c-to-o-compiler-args) \ 1703*9e94795aSAndroid Build Coastguard Worker -MD -MF $(patsubst %.o,%.d,$@) -o $@ $< 1704*9e94795aSAndroid Build Coastguard Workerendef 1705*9e94795aSAndroid Build Coastguard Workerendif 1706*9e94795aSAndroid Build Coastguard Worker 1707*9e94795aSAndroid Build Coastguard Workerdefine transform-s-to-o 1708*9e94795aSAndroid Build Coastguard Worker@echo "$($(PRIVATE_PREFIX)DISPLAY) asm: $(PRIVATE_MODULE) <= $<" 1709*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 1710*9e94795aSAndroid Build Coastguard Worker$(RELATIVE_PWD) $(PRIVATE_CC) \ 1711*9e94795aSAndroid Build Coastguard Worker $(call transform-c-or-s-to-o-compiler-args, $(PRIVATE_ASFLAGS)) \ 1712*9e94795aSAndroid Build Coastguard Worker -MD -MF $(patsubst %.o,%.d,$@) -o $@ $< 1713*9e94795aSAndroid Build Coastguard Workerendef 1714*9e94795aSAndroid Build Coastguard Worker 1715*9e94795aSAndroid Build Coastguard Worker# YASM compilation 1716*9e94795aSAndroid Build Coastguard Workerdefine transform-asm-to-o 1717*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 1718*9e94795aSAndroid Build Coastguard Worker$(hide) $(YASM) \ 1719*9e94795aSAndroid Build Coastguard Worker $(addprefix -I , $(PRIVATE_C_INCLUDES)) \ 1720*9e94795aSAndroid Build Coastguard Worker $($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_YASM_FLAGS) \ 1721*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_ASFLAGS) \ 1722*9e94795aSAndroid Build Coastguard Worker -o $@ $< 1723*9e94795aSAndroid Build Coastguard Workerendef 1724*9e94795aSAndroid Build Coastguard Worker 1725*9e94795aSAndroid Build Coastguard Worker########################################################### 1726*9e94795aSAndroid Build Coastguard Worker## Commands for running gcc to compile an Objective-C file 1727*9e94795aSAndroid Build Coastguard Worker## This should never happen for target builds but this 1728*9e94795aSAndroid Build Coastguard Worker## will error at build time. 1729*9e94795aSAndroid Build Coastguard Worker########################################################### 1730*9e94795aSAndroid Build Coastguard Worker 1731*9e94795aSAndroid Build Coastguard Workerdefine transform-m-to-o 1732*9e94795aSAndroid Build Coastguard Worker@echo "$($(PRIVATE_PREFIX)DISPLAY) ObjC: $(PRIVATE_MODULE) <= $<" 1733*9e94795aSAndroid Build Coastguard Worker$(call transform-c-or-s-to-o, $(PRIVATE_CFLAGS) $(PRIVATE_DEBUG_CFLAGS)) 1734*9e94795aSAndroid Build Coastguard Workerendef 1735*9e94795aSAndroid Build Coastguard Worker 1736*9e94795aSAndroid Build Coastguard Worker########################################################### 1737*9e94795aSAndroid Build Coastguard Worker## Commands for running gcc to compile a host C++ file 1738*9e94795aSAndroid Build Coastguard Worker########################################################### 1739*9e94795aSAndroid Build Coastguard Worker 1740*9e94795aSAndroid Build Coastguard Workerdefine transform-host-cpp-to-o-compiler-args 1741*9e94795aSAndroid Build Coastguard Worker$(c-includes) \ 1742*9e94795aSAndroid Build Coastguard Worker-c \ 1743*9e94795aSAndroid Build Coastguard Worker$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \ 1744*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_HOST_GLOBAL_CFLAGS) \ 1745*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_HOST_GLOBAL_CPPFLAGS) \ 1746*9e94795aSAndroid Build Coastguard Worker ) \ 1747*9e94795aSAndroid Build Coastguard Worker$(PRIVATE_CFLAGS) \ 1748*9e94795aSAndroid Build Coastguard Worker$(PRIVATE_CPPFLAGS) \ 1749*9e94795aSAndroid Build Coastguard Worker$(PRIVATE_DEBUG_CFLAGS) \ 1750*9e94795aSAndroid Build Coastguard Worker$(PRIVATE_CFLAGS_NO_OVERRIDE) \ 1751*9e94795aSAndroid Build Coastguard Worker$(PRIVATE_CPPFLAGS_NO_OVERRIDE) 1752*9e94795aSAndroid Build Coastguard Workerendef 1753*9e94795aSAndroid Build Coastguard Worker 1754*9e94795aSAndroid Build Coastguard Workerdefine clang-tidy-host-cpp 1755*9e94795aSAndroid Build Coastguard Worker$(hide) $(call-clang-tidy) $< -- $(transform-host-cpp-to-o-compiler-args) 1756*9e94795aSAndroid Build Coastguard Workerendef 1757*9e94795aSAndroid Build Coastguard Worker 1758*9e94795aSAndroid Build Coastguard Workerifneq (,$(filter 1 true,$(WITH_TIDY_ONLY))) 1759*9e94795aSAndroid Build Coastguard Workerdefine transform-host-cpp-to-o 1760*9e94795aSAndroid Build Coastguard Worker$(if $(PRIVATE_TIDY_CHECKS), 1761*9e94795aSAndroid Build Coastguard Worker @echo "tidy $($(PRIVATE_PREFIX)DISPLAY) C++: $<" 1762*9e94795aSAndroid Build Coastguard Worker $(clang-tidy-host-cpp)) 1763*9e94795aSAndroid Build Coastguard Workerendef 1764*9e94795aSAndroid Build Coastguard Workerelse 1765*9e94795aSAndroid Build Coastguard Workerdefine transform-host-cpp-to-o 1766*9e94795aSAndroid Build Coastguard Worker@echo "$($(PRIVATE_PREFIX)DISPLAY) C++: $(PRIVATE_MODULE) <= $<" 1767*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 1768*9e94795aSAndroid Build Coastguard Worker$(if $(PRIVATE_TIDY_CHECKS),$(clang-tidy-host-cpp)) 1769*9e94795aSAndroid Build Coastguard Worker$(hide) $(RELATIVE_PWD) $(PRIVATE_CXX) \ 1770*9e94795aSAndroid Build Coastguard Worker $(transform-host-cpp-to-o-compiler-args) \ 1771*9e94795aSAndroid Build Coastguard Worker -MD -MF $(patsubst %.o,%.d,$@) -o $@ $< 1772*9e94795aSAndroid Build Coastguard Workerendef 1773*9e94795aSAndroid Build Coastguard Workerendif 1774*9e94795aSAndroid Build Coastguard Worker 1775*9e94795aSAndroid Build Coastguard Worker 1776*9e94795aSAndroid Build Coastguard Worker########################################################### 1777*9e94795aSAndroid Build Coastguard Worker## Commands for running gcc to compile a host C file 1778*9e94795aSAndroid Build Coastguard Worker########################################################### 1779*9e94795aSAndroid Build Coastguard Worker 1780*9e94795aSAndroid Build Coastguard Workerdefine transform-host-c-or-s-to-o-common-args 1781*9e94795aSAndroid Build Coastguard Worker$(c-includes) \ 1782*9e94795aSAndroid Build Coastguard Worker-c \ 1783*9e94795aSAndroid Build Coastguard Worker$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \ 1784*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_HOST_GLOBAL_CFLAGS) \ 1785*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_HOST_GLOBAL_CONLYFLAGS) \ 1786*9e94795aSAndroid Build Coastguard Worker ) 1787*9e94795aSAndroid Build Coastguard Workerendef 1788*9e94795aSAndroid Build Coastguard Worker 1789*9e94795aSAndroid Build Coastguard Worker# $(1): extra flags 1790*9e94795aSAndroid Build Coastguard Workerdefine transform-host-c-or-s-to-o 1791*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 1792*9e94795aSAndroid Build Coastguard Worker$(hide) $(RELATIVE_PWD) $(PRIVATE_CC) \ 1793*9e94795aSAndroid Build Coastguard Worker $(transform-host-c-or-s-to-o-common-args) \ 1794*9e94795aSAndroid Build Coastguard Worker $(1) \ 1795*9e94795aSAndroid Build Coastguard Worker -MD -MF $(patsubst %.o,%.d,$@) -o $@ $< 1796*9e94795aSAndroid Build Coastguard Workerendef 1797*9e94795aSAndroid Build Coastguard Worker 1798*9e94795aSAndroid Build Coastguard Workerdefine transform-host-c-to-o-compiler-args 1799*9e94795aSAndroid Build Coastguard Worker $(transform-host-c-or-s-to-o-common-args) \ 1800*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_CFLAGS) $(PRIVATE_CONLYFLAGS) \ 1801*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_DEBUG_CFLAGS) $(PRIVATE_CFLAGS_NO_OVERRIDE) 1802*9e94795aSAndroid Build Coastguard Workerendef 1803*9e94795aSAndroid Build Coastguard Worker 1804*9e94795aSAndroid Build Coastguard Workerdefine clang-tidy-host-c 1805*9e94795aSAndroid Build Coastguard Worker$(hide) $(call-clang-tidy) $< -- $(transform-host-c-to-o-compiler-args) 1806*9e94795aSAndroid Build Coastguard Workerendef 1807*9e94795aSAndroid Build Coastguard Worker 1808*9e94795aSAndroid Build Coastguard Workerifneq (,$(filter 1 true,$(WITH_TIDY_ONLY))) 1809*9e94795aSAndroid Build Coastguard Workerdefine transform-host-c-to-o 1810*9e94795aSAndroid Build Coastguard Worker$(if $(PRIVATE_TIDY_CHECKS), 1811*9e94795aSAndroid Build Coastguard Worker @echo "tidy $($(PRIVATE_PREFIX)DISPLAY) C: $<" 1812*9e94795aSAndroid Build Coastguard Worker $(clang-tidy-host-c)) 1813*9e94795aSAndroid Build Coastguard Workerendef 1814*9e94795aSAndroid Build Coastguard Workerelse 1815*9e94795aSAndroid Build Coastguard Workerdefine transform-host-c-to-o 1816*9e94795aSAndroid Build Coastguard Worker@echo "$($(PRIVATE_PREFIX)DISPLAY) C: $(PRIVATE_MODULE) <= $<" 1817*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 1818*9e94795aSAndroid Build Coastguard Worker$(if $(PRIVATE_TIDY_CHECKS), $(clang-tidy-host-c)) 1819*9e94795aSAndroid Build Coastguard Worker$(hide) $(RELATIVE_PWD) $(PRIVATE_CC) \ 1820*9e94795aSAndroid Build Coastguard Worker $(transform-host-c-to-o-compiler-args) \ 1821*9e94795aSAndroid Build Coastguard Worker -MD -MF $(patsubst %.o,%.d,$@) -o $@ $< 1822*9e94795aSAndroid Build Coastguard Workerendef 1823*9e94795aSAndroid Build Coastguard Workerendif 1824*9e94795aSAndroid Build Coastguard Worker 1825*9e94795aSAndroid Build Coastguard Workerdefine transform-host-s-to-o 1826*9e94795aSAndroid Build Coastguard Worker@echo "$($(PRIVATE_PREFIX)DISPLAY) asm: $(PRIVATE_MODULE) <= $<" 1827*9e94795aSAndroid Build Coastguard Worker$(call transform-host-c-or-s-to-o, $(PRIVATE_ASFLAGS)) 1828*9e94795aSAndroid Build Coastguard Workerendef 1829*9e94795aSAndroid Build Coastguard Worker 1830*9e94795aSAndroid Build Coastguard Worker########################################################### 1831*9e94795aSAndroid Build Coastguard Worker## Commands for running gcc to compile a host Objective-C file 1832*9e94795aSAndroid Build Coastguard Worker########################################################### 1833*9e94795aSAndroid Build Coastguard Worker 1834*9e94795aSAndroid Build Coastguard Workerdefine transform-host-m-to-o 1835*9e94795aSAndroid Build Coastguard Worker@echo "$($(PRIVATE_PREFIX)DISPLAY) ObjC: $(PRIVATE_MODULE) <= $<" 1836*9e94795aSAndroid Build Coastguard Worker$(call transform-host-c-or-s-to-o, $(PRIVATE_CFLAGS) $(PRIVATE_DEBUG_CFLAGS) $(PRIVATE_CFLAGS_NO_OVERRIDE)) 1837*9e94795aSAndroid Build Coastguard Workerendef 1838*9e94795aSAndroid Build Coastguard Worker 1839*9e94795aSAndroid Build Coastguard Worker########################################################### 1840*9e94795aSAndroid Build Coastguard Worker## Commands for running gcc to compile a host Objective-C++ file 1841*9e94795aSAndroid Build Coastguard Worker########################################################### 1842*9e94795aSAndroid Build Coastguard Worker 1843*9e94795aSAndroid Build Coastguard Workerdefine transform-host-mm-to-o 1844*9e94795aSAndroid Build Coastguard Worker$(transform-host-cpp-to-o) 1845*9e94795aSAndroid Build Coastguard Workerendef 1846*9e94795aSAndroid Build Coastguard Worker 1847*9e94795aSAndroid Build Coastguard Worker 1848*9e94795aSAndroid Build Coastguard Worker########################################################### 1849*9e94795aSAndroid Build Coastguard Worker## Rules to compile a single C/C++ source with ../ in the path 1850*9e94795aSAndroid Build Coastguard Worker########################################################### 1851*9e94795aSAndroid Build Coastguard Worker# Replace "../" in object paths with $(DOTDOT_REPLACEMENT). 1852*9e94795aSAndroid Build Coastguard WorkerDOTDOT_REPLACEMENT := dotdot/ 1853*9e94795aSAndroid Build Coastguard Worker 1854*9e94795aSAndroid Build Coastguard Worker## Rule to compile a C++ source file with ../ in the path. 1855*9e94795aSAndroid Build Coastguard Worker## Must be called with $(eval). 1856*9e94795aSAndroid Build Coastguard Worker# $(1): the C++ source file in LOCAL_SRC_FILES. 1857*9e94795aSAndroid Build Coastguard Worker# $(2): the additional dependencies. 1858*9e94795aSAndroid Build Coastguard Worker# $(3): the variable name to collect the output object file. 1859*9e94795aSAndroid Build Coastguard Worker# $(4): the ninja pool to use for the rule 1860*9e94795aSAndroid Build Coastguard Workerdefine compile-dotdot-cpp-file 1861*9e94795aSAndroid Build Coastguard Workero := $(intermediates)/$(patsubst %$(LOCAL_CPP_EXTENSION),%.o,$(subst ../,$(DOTDOT_REPLACEMENT),$(1))) 1862*9e94795aSAndroid Build Coastguard Worker$$(o) : .KATI_NINJA_POOL := $(4) 1863*9e94795aSAndroid Build Coastguard Worker$$(o) : $(TOPDIR)$(LOCAL_PATH)/$(1) $(2) $(CLANG_CXX) 1864*9e94795aSAndroid Build Coastguard Worker $$(transform-$$(PRIVATE_HOST)cpp-to-o) 1865*9e94795aSAndroid Build Coastguard Worker$$(call include-depfiles-for-objs, $$(o)) 1866*9e94795aSAndroid Build Coastguard Worker$(3) += $$(o) 1867*9e94795aSAndroid Build Coastguard Workerendef 1868*9e94795aSAndroid Build Coastguard Worker 1869*9e94795aSAndroid Build Coastguard Worker## Rule to compile a C source file with ../ in the path. 1870*9e94795aSAndroid Build Coastguard Worker## Must be called with $(eval). 1871*9e94795aSAndroid Build Coastguard Worker# $(1): the C source file in LOCAL_SRC_FILES. 1872*9e94795aSAndroid Build Coastguard Worker# $(2): the additional dependencies. 1873*9e94795aSAndroid Build Coastguard Worker# $(3): the variable name to collect the output object file. 1874*9e94795aSAndroid Build Coastguard Worker# $(4): the ninja pool to use for the rule 1875*9e94795aSAndroid Build Coastguard Workerdefine compile-dotdot-c-file 1876*9e94795aSAndroid Build Coastguard Workero := $(intermediates)/$(patsubst %.c,%.o,$(subst ../,$(DOTDOT_REPLACEMENT),$(1))) 1877*9e94795aSAndroid Build Coastguard Worker$$(o) : .KATI_NINJA_POOL := $(4) 1878*9e94795aSAndroid Build Coastguard Worker$$(o) : $(TOPDIR)$(LOCAL_PATH)/$(1) $(2) $(CLANG) 1879*9e94795aSAndroid Build Coastguard Worker $$(transform-$$(PRIVATE_HOST)c-to-o) 1880*9e94795aSAndroid Build Coastguard Worker$$(call include-depfiles-for-objs, $$(o)) 1881*9e94795aSAndroid Build Coastguard Worker$(3) += $$(o) 1882*9e94795aSAndroid Build Coastguard Workerendef 1883*9e94795aSAndroid Build Coastguard Worker 1884*9e94795aSAndroid Build Coastguard Worker## Rule to compile a .S source file with ../ in the path. 1885*9e94795aSAndroid Build Coastguard Worker## Must be called with $(eval). 1886*9e94795aSAndroid Build Coastguard Worker# $(1): the .S source file in LOCAL_SRC_FILES. 1887*9e94795aSAndroid Build Coastguard Worker# $(2): the additional dependencies. 1888*9e94795aSAndroid Build Coastguard Worker# $(3): the variable name to collect the output object file. 1889*9e94795aSAndroid Build Coastguard Worker# $(4): the ninja pool to use for the rule 1890*9e94795aSAndroid Build Coastguard Workerdefine compile-dotdot-s-file 1891*9e94795aSAndroid Build Coastguard Workero := $(intermediates)/$(patsubst %.S,%.o,$(subst ../,$(DOTDOT_REPLACEMENT),$(1))) 1892*9e94795aSAndroid Build Coastguard Worker$$(o) : .KATI_NINJA_POOL := $(4) 1893*9e94795aSAndroid Build Coastguard Worker$$(o) : $(TOPDIR)$(LOCAL_PATH)/$(1) $(2) $(CLANG) 1894*9e94795aSAndroid Build Coastguard Worker $$(transform-$$(PRIVATE_HOST)s-to-o) 1895*9e94795aSAndroid Build Coastguard Worker$$(call include-depfiles-for-objs, $$(o)) 1896*9e94795aSAndroid Build Coastguard Worker$(3) += $$(o) 1897*9e94795aSAndroid Build Coastguard Workerendef 1898*9e94795aSAndroid Build Coastguard Worker 1899*9e94795aSAndroid Build Coastguard Worker## Rule to compile a .s source file with ../ in the path. 1900*9e94795aSAndroid Build Coastguard Worker## Must be called with $(eval). 1901*9e94795aSAndroid Build Coastguard Worker# $(1): the .s source file in LOCAL_SRC_FILES. 1902*9e94795aSAndroid Build Coastguard Worker# $(2): the additional dependencies. 1903*9e94795aSAndroid Build Coastguard Worker# $(3): the variable name to collect the output object file. 1904*9e94795aSAndroid Build Coastguard Worker# $(4): the ninja pool to use for the rule 1905*9e94795aSAndroid Build Coastguard Workerdefine compile-dotdot-s-file-no-deps 1906*9e94795aSAndroid Build Coastguard Workero := $(intermediates)/$(patsubst %.s,%.o,$(subst ../,$(DOTDOT_REPLACEMENT),$(1))) 1907*9e94795aSAndroid Build Coastguard Worker$$(o) : .KATI_NINJA_POOL := $(4) 1908*9e94795aSAndroid Build Coastguard Worker$$(o) : $(TOPDIR)$(LOCAL_PATH)/$(1) $(2) $(CLANG) 1909*9e94795aSAndroid Build Coastguard Worker $$(transform-$$(PRIVATE_HOST)s-to-o) 1910*9e94795aSAndroid Build Coastguard Worker$(3) += $$(o) 1911*9e94795aSAndroid Build Coastguard Workerendef 1912*9e94795aSAndroid Build Coastguard Worker 1913*9e94795aSAndroid Build Coastguard Worker########################################################### 1914*9e94795aSAndroid Build Coastguard Worker## Commands for running ar 1915*9e94795aSAndroid Build Coastguard Worker########################################################### 1916*9e94795aSAndroid Build Coastguard Worker 1917*9e94795aSAndroid Build Coastguard Workerdefine _concat-if-arg2-not-empty 1918*9e94795aSAndroid Build Coastguard Worker$(if $(2),$(hide) $(1) $(2)) 1919*9e94795aSAndroid Build Coastguard Workerendef 1920*9e94795aSAndroid Build Coastguard Worker 1921*9e94795aSAndroid Build Coastguard Worker# Split long argument list into smaller groups and call the command repeatedly 1922*9e94795aSAndroid Build Coastguard Worker# Call the command at least once even if there are no arguments, as otherwise 1923*9e94795aSAndroid Build Coastguard Worker# the output file won't be created. 1924*9e94795aSAndroid Build Coastguard Worker# 1925*9e94795aSAndroid Build Coastguard Worker# $(1): the command without arguments 1926*9e94795aSAndroid Build Coastguard Worker# $(2): the arguments 1927*9e94795aSAndroid Build Coastguard Workerdefine split-long-arguments 1928*9e94795aSAndroid Build Coastguard Worker$(hide) $(1) $(wordlist 1,500,$(2)) 1929*9e94795aSAndroid Build Coastguard Worker$(call _concat-if-arg2-not-empty,$(1),$(wordlist 501,1000,$(2))) 1930*9e94795aSAndroid Build Coastguard Worker$(call _concat-if-arg2-not-empty,$(1),$(wordlist 1001,1500,$(2))) 1931*9e94795aSAndroid Build Coastguard Worker$(call _concat-if-arg2-not-empty,$(1),$(wordlist 1501,2000,$(2))) 1932*9e94795aSAndroid Build Coastguard Worker$(call _concat-if-arg2-not-empty,$(1),$(wordlist 2001,2500,$(2))) 1933*9e94795aSAndroid Build Coastguard Worker$(call _concat-if-arg2-not-empty,$(1),$(wordlist 2501,3000,$(2))) 1934*9e94795aSAndroid Build Coastguard Worker$(call _concat-if-arg2-not-empty,$(1),$(wordlist 3001,99999,$(2))) 1935*9e94795aSAndroid Build Coastguard Workerendef 1936*9e94795aSAndroid Build Coastguard Worker 1937*9e94795aSAndroid Build Coastguard Worker# $(1): the full path of the source static library. 1938*9e94795aSAndroid Build Coastguard Worker# $(2): the full path of the destination static library. 1939*9e94795aSAndroid Build Coastguard Workerdefine _extract-and-include-single-target-whole-static-lib 1940*9e94795aSAndroid Build Coastguard Worker$(hide) ldir=$(PRIVATE_INTERMEDIATES_DIR)/WHOLE/$(basename $(notdir $(1)))_objs;\ 1941*9e94795aSAndroid Build Coastguard Worker rm -rf $$ldir; \ 1942*9e94795aSAndroid Build Coastguard Worker mkdir -p $$ldir; \ 1943*9e94795aSAndroid Build Coastguard Worker cp $(1) $$ldir; \ 1944*9e94795aSAndroid Build Coastguard Worker lib_to_include=$$ldir/$(notdir $(1)); \ 1945*9e94795aSAndroid Build Coastguard Worker filelist=; \ 1946*9e94795aSAndroid Build Coastguard Worker subdir=0; \ 1947*9e94795aSAndroid Build Coastguard Worker for f in `$($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_AR) t $(1)`; do \ 1948*9e94795aSAndroid Build Coastguard Worker if [ -e $$ldir/$$f ]; then \ 1949*9e94795aSAndroid Build Coastguard Worker mkdir $$ldir/$$subdir; \ 1950*9e94795aSAndroid Build Coastguard Worker ext=$$subdir/; \ 1951*9e94795aSAndroid Build Coastguard Worker subdir=$$((subdir+1)); \ 1952*9e94795aSAndroid Build Coastguard Worker $($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_AR) m $$lib_to_include $$f; \ 1953*9e94795aSAndroid Build Coastguard Worker else \ 1954*9e94795aSAndroid Build Coastguard Worker ext=; \ 1955*9e94795aSAndroid Build Coastguard Worker fi; \ 1956*9e94795aSAndroid Build Coastguard Worker $($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_AR) p $$lib_to_include $$f > $$ldir/$$ext$$f; \ 1957*9e94795aSAndroid Build Coastguard Worker filelist="$$filelist $$ldir/$$ext$$f"; \ 1958*9e94795aSAndroid Build Coastguard Worker done ; \ 1959*9e94795aSAndroid Build Coastguard Worker $($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_AR) $($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_ARFLAGS) \ 1960*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_ARFLAGS) $(2) $$filelist 1961*9e94795aSAndroid Build Coastguard Worker 1962*9e94795aSAndroid Build Coastguard Workerendef 1963*9e94795aSAndroid Build Coastguard Worker 1964*9e94795aSAndroid Build Coastguard Worker# $(1): the full path of the source static library. 1965*9e94795aSAndroid Build Coastguard Worker# $(2): the full path of the destination static library. 1966*9e94795aSAndroid Build Coastguard Workerdefine extract-and-include-whole-static-libs-first 1967*9e94795aSAndroid Build Coastguard Worker$(if $(strip $(1)), 1968*9e94795aSAndroid Build Coastguard Worker$(hide) cp $(1) $(2)) 1969*9e94795aSAndroid Build Coastguard Workerendef 1970*9e94795aSAndroid Build Coastguard Worker 1971*9e94795aSAndroid Build Coastguard Worker# $(1): the full path of the destination static library. 1972*9e94795aSAndroid Build Coastguard Workerdefine extract-and-include-target-whole-static-libs 1973*9e94795aSAndroid Build Coastguard Worker$(call extract-and-include-whole-static-libs-first, $(firstword $(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)),$(1)) 1974*9e94795aSAndroid Build Coastguard Worker$(foreach lib,$(wordlist 2,999,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)), \ 1975*9e94795aSAndroid Build Coastguard Worker $(call _extract-and-include-single-target-whole-static-lib, $(lib), $(1))) 1976*9e94795aSAndroid Build Coastguard Workerendef 1977*9e94795aSAndroid Build Coastguard Worker 1978*9e94795aSAndroid Build Coastguard Worker# Explicitly delete the archive first so that ar doesn't 1979*9e94795aSAndroid Build Coastguard Worker# try to add to an existing archive. 1980*9e94795aSAndroid Build Coastguard Workerdefine transform-o-to-static-lib 1981*9e94795aSAndroid Build Coastguard Worker@echo "$($(PRIVATE_PREFIX)DISPLAY) StaticLib: $(PRIVATE_MODULE) ($@)" 1982*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 1983*9e94795aSAndroid Build Coastguard Worker@rm -f $@ $@.tmp 1984*9e94795aSAndroid Build Coastguard Worker$(call extract-and-include-target-whole-static-libs,$@.tmp) 1985*9e94795aSAndroid Build Coastguard Worker$(call split-long-arguments,$($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_AR) \ 1986*9e94795aSAndroid Build Coastguard Worker $($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_ARFLAGS) \ 1987*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_ARFLAGS) \ 1988*9e94795aSAndroid Build Coastguard Worker $@.tmp,$(PRIVATE_ALL_OBJECTS)) 1989*9e94795aSAndroid Build Coastguard Worker$(hide) mv -f $@.tmp $@ 1990*9e94795aSAndroid Build Coastguard Workerendef 1991*9e94795aSAndroid Build Coastguard Worker 1992*9e94795aSAndroid Build Coastguard Worker########################################################### 1993*9e94795aSAndroid Build Coastguard Worker## Commands for running host ar 1994*9e94795aSAndroid Build Coastguard Worker########################################################### 1995*9e94795aSAndroid Build Coastguard Worker 1996*9e94795aSAndroid Build Coastguard Worker# $(1): the full path of the source static library. 1997*9e94795aSAndroid Build Coastguard Worker# $(2): the full path of the destination static library. 1998*9e94795aSAndroid Build Coastguard Workerdefine _extract-and-include-single-host-whole-static-lib 1999*9e94795aSAndroid Build Coastguard Worker$(hide) ldir=$(PRIVATE_INTERMEDIATES_DIR)/WHOLE/$(basename $(notdir $(1)))_objs;\ 2000*9e94795aSAndroid Build Coastguard Worker rm -rf $$ldir; \ 2001*9e94795aSAndroid Build Coastguard Worker mkdir -p $$ldir; \ 2002*9e94795aSAndroid Build Coastguard Worker cp $(1) $$ldir; \ 2003*9e94795aSAndroid Build Coastguard Worker lib_to_include=$$ldir/$(notdir $(1)); \ 2004*9e94795aSAndroid Build Coastguard Worker filelist=; \ 2005*9e94795aSAndroid Build Coastguard Worker subdir=0; \ 2006*9e94795aSAndroid Build Coastguard Worker for f in `$($(PRIVATE_2ND_ARCH_VAR_PREFIX)$(PRIVATE_PREFIX)AR) t $(1) | \grep '\.o$$'`; do \ 2007*9e94795aSAndroid Build Coastguard Worker if [ -e $$ldir/$$f ]; then \ 2008*9e94795aSAndroid Build Coastguard Worker mkdir $$ldir/$$subdir; \ 2009*9e94795aSAndroid Build Coastguard Worker ext=$$subdir/; \ 2010*9e94795aSAndroid Build Coastguard Worker subdir=$$((subdir+1)); \ 2011*9e94795aSAndroid Build Coastguard Worker $($(PRIVATE_2ND_ARCH_VAR_PREFIX)$(PRIVATE_PREFIX)AR) m $$lib_to_include $$f; \ 2012*9e94795aSAndroid Build Coastguard Worker else \ 2013*9e94795aSAndroid Build Coastguard Worker ext=; \ 2014*9e94795aSAndroid Build Coastguard Worker fi; \ 2015*9e94795aSAndroid Build Coastguard Worker $($(PRIVATE_2ND_ARCH_VAR_PREFIX)$(PRIVATE_PREFIX)AR) p $$lib_to_include $$f > $$ldir/$$ext$$f; \ 2016*9e94795aSAndroid Build Coastguard Worker filelist="$$filelist $$ldir/$$ext$$f"; \ 2017*9e94795aSAndroid Build Coastguard Worker done ; \ 2018*9e94795aSAndroid Build Coastguard Worker $($(PRIVATE_2ND_ARCH_VAR_PREFIX)$(PRIVATE_PREFIX)AR) $($(PRIVATE_2ND_ARCH_VAR_PREFIX)$(PRIVATE_PREFIX)GLOBAL_ARFLAGS) \ 2019*9e94795aSAndroid Build Coastguard Worker $(2) $$filelist 2020*9e94795aSAndroid Build Coastguard Worker 2021*9e94795aSAndroid Build Coastguard Workerendef 2022*9e94795aSAndroid Build Coastguard Worker 2023*9e94795aSAndroid Build Coastguard Workerdefine extract-and-include-host-whole-static-libs 2024*9e94795aSAndroid Build Coastguard Worker$(call extract-and-include-whole-static-libs-first, $(firstword $(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)),$(1)) 2025*9e94795aSAndroid Build Coastguard Worker$(foreach lib,$(wordlist 2,999,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)), \ 2026*9e94795aSAndroid Build Coastguard Worker $(call _extract-and-include-single-host-whole-static-lib, $(lib),$(1))) 2027*9e94795aSAndroid Build Coastguard Workerendef 2028*9e94795aSAndroid Build Coastguard Worker 2029*9e94795aSAndroid Build Coastguard Workerifeq ($(HOST_OS),darwin) 2030*9e94795aSAndroid Build Coastguard Worker# On Darwin the host ar fails if there is nothing to add to .a at all. 2031*9e94795aSAndroid Build Coastguard Worker# We work around by adding a dummy.o and then deleting it. 2032*9e94795aSAndroid Build Coastguard Workerdefine create-dummy.o-if-no-objs 2033*9e94795aSAndroid Build Coastguard Worker$(if $(PRIVATE_ALL_OBJECTS),,$(hide) touch $(dir $(1))dummy.o) 2034*9e94795aSAndroid Build Coastguard Workerendef 2035*9e94795aSAndroid Build Coastguard Worker 2036*9e94795aSAndroid Build Coastguard Workerdefine get-dummy.o-if-no-objs 2037*9e94795aSAndroid Build Coastguard Worker$(if $(PRIVATE_ALL_OBJECTS),,$(dir $(1))dummy.o) 2038*9e94795aSAndroid Build Coastguard Workerendef 2039*9e94795aSAndroid Build Coastguard Worker 2040*9e94795aSAndroid Build Coastguard Workerdefine delete-dummy.o-if-no-objs 2041*9e94795aSAndroid Build Coastguard Worker$(if $(PRIVATE_ALL_OBJECTS),,$(hide) $($(PRIVATE_2ND_ARCH_VAR_PREFIX)$(PRIVATE_PREFIX)AR) d $(1) $(dir $(1))dummy.o \ 2042*9e94795aSAndroid Build Coastguard Worker && rm -f $(dir $(1))dummy.o) 2043*9e94795aSAndroid Build Coastguard Workerendef 2044*9e94795aSAndroid Build Coastguard Workerelse 2045*9e94795aSAndroid Build Coastguard Workercreate-dummy.o-if-no-objs = 2046*9e94795aSAndroid Build Coastguard Workerget-dummy.o-if-no-objs = 2047*9e94795aSAndroid Build Coastguard Workerdelete-dummy.o-if-no-objs = 2048*9e94795aSAndroid Build Coastguard Workerendif # HOST_OS is darwin 2049*9e94795aSAndroid Build Coastguard Worker 2050*9e94795aSAndroid Build Coastguard Worker# Explicitly delete the archive first so that ar doesn't 2051*9e94795aSAndroid Build Coastguard Worker# try to add to an existing archive. 2052*9e94795aSAndroid Build Coastguard Workerdefine transform-host-o-to-static-lib 2053*9e94795aSAndroid Build Coastguard Worker@echo "$($(PRIVATE_PREFIX)DISPLAY) StaticLib: $(PRIVATE_MODULE) ($@)" 2054*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 2055*9e94795aSAndroid Build Coastguard Worker@rm -f $@ $@.tmp 2056*9e94795aSAndroid Build Coastguard Worker$(call extract-and-include-host-whole-static-libs,$@.tmp) 2057*9e94795aSAndroid Build Coastguard Worker$(call create-dummy.o-if-no-objs,$@.tmp) 2058*9e94795aSAndroid Build Coastguard Worker$(call split-long-arguments,$($(PRIVATE_2ND_ARCH_VAR_PREFIX)$(PRIVATE_PREFIX)AR) \ 2059*9e94795aSAndroid Build Coastguard Worker $($(PRIVATE_2ND_ARCH_VAR_PREFIX)$(PRIVATE_PREFIX)GLOBAL_ARFLAGS) $@.tmp,\ 2060*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_ALL_OBJECTS) $(call get-dummy.o-if-no-objs,$@.tmp)) 2061*9e94795aSAndroid Build Coastguard Worker$(call delete-dummy.o-if-no-objs,$@.tmp) 2062*9e94795aSAndroid Build Coastguard Worker$(hide) mv -f $@.tmp $@ 2063*9e94795aSAndroid Build Coastguard Workerendef 2064*9e94795aSAndroid Build Coastguard Worker 2065*9e94795aSAndroid Build Coastguard Worker 2066*9e94795aSAndroid Build Coastguard Worker########################################################### 2067*9e94795aSAndroid Build Coastguard Worker## Commands for running gcc to link a shared library or package 2068*9e94795aSAndroid Build Coastguard Worker########################################################### 2069*9e94795aSAndroid Build Coastguard Worker 2070*9e94795aSAndroid Build Coastguard Worker# ld just seems to be so finicky with command order that we allow 2071*9e94795aSAndroid Build Coastguard Worker# it to be overriden en-masse see combo/linux-arm.make for an example. 2072*9e94795aSAndroid Build Coastguard Workerifneq ($(HOST_CUSTOM_LD_COMMAND),true) 2073*9e94795aSAndroid Build Coastguard Workerdefine transform-host-o-to-shared-lib-inner 2074*9e94795aSAndroid Build Coastguard Worker$(hide) $(PRIVATE_CXX_LINK) \ 2075*9e94795aSAndroid Build Coastguard Worker -Wl,-rpath,\$$ORIGIN/../$(notdir $($(PRIVATE_2ND_ARCH_VAR_PREFIX)$(PRIVATE_PREFIX)OUT_SHARED_LIBRARIES)) \ 2076*9e94795aSAndroid Build Coastguard Worker -Wl,-rpath,\$$ORIGIN/$(notdir $($(PRIVATE_2ND_ARCH_VAR_PREFIX)$(PRIVATE_PREFIX)OUT_SHARED_LIBRARIES)) \ 2077*9e94795aSAndroid Build Coastguard Worker -shared -Wl,-soname,$(notdir $@) \ 2078*9e94795aSAndroid Build Coastguard Worker $(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \ 2079*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_HOST_GLOBAL_LDFLAGS) \ 2080*9e94795aSAndroid Build Coastguard Worker ) \ 2081*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_LDFLAGS) \ 2082*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_CRTBEGIN) \ 2083*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_ALL_OBJECTS) \ 2084*9e94795aSAndroid Build Coastguard Worker -Wl,--whole-archive \ 2085*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES) \ 2086*9e94795aSAndroid Build Coastguard Worker -Wl,--no-whole-archive \ 2087*9e94795aSAndroid Build Coastguard Worker $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \ 2088*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_ALL_STATIC_LIBRARIES) \ 2089*9e94795aSAndroid Build Coastguard Worker $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \ 2090*9e94795aSAndroid Build Coastguard Worker $(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_HOST_LIBPROFILE_RT)) \ 2091*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_LIBCRT_BUILTINS) \ 2092*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_ALL_SHARED_LIBRARIES) \ 2093*9e94795aSAndroid Build Coastguard Worker -o $@ \ 2094*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_CRTEND) \ 2095*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_LDLIBS) 2096*9e94795aSAndroid Build Coastguard Workerendef 2097*9e94795aSAndroid Build Coastguard Workerendif 2098*9e94795aSAndroid Build Coastguard Worker 2099*9e94795aSAndroid Build Coastguard Workerdefine transform-host-o-to-shared-lib 2100*9e94795aSAndroid Build Coastguard Worker@echo "$($(PRIVATE_PREFIX)DISPLAY) SharedLib: $(PRIVATE_MODULE) ($@)" 2101*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 2102*9e94795aSAndroid Build Coastguard Worker$(transform-host-o-to-shared-lib-inner) 2103*9e94795aSAndroid Build Coastguard Workerendef 2104*9e94795aSAndroid Build Coastguard Worker 2105*9e94795aSAndroid Build Coastguard Workerdefine transform-host-o-to-package 2106*9e94795aSAndroid Build Coastguard Worker@echo "$($(PRIVATE_PREFIX)DISPLAY) Package: $(PRIVATE_MODULE) ($@)" 2107*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 2108*9e94795aSAndroid Build Coastguard Worker$(transform-host-o-to-shared-lib-inner) 2109*9e94795aSAndroid Build Coastguard Workerendef 2110*9e94795aSAndroid Build Coastguard Worker 2111*9e94795aSAndroid Build Coastguard Worker 2112*9e94795aSAndroid Build Coastguard Worker########################################################### 2113*9e94795aSAndroid Build Coastguard Worker## Commands for running gcc to link a shared library or package 2114*9e94795aSAndroid Build Coastguard Worker########################################################### 2115*9e94795aSAndroid Build Coastguard Worker 2116*9e94795aSAndroid Build Coastguard Workerdefine transform-o-to-shared-lib-inner 2117*9e94795aSAndroid Build Coastguard Worker$(hide) $(PRIVATE_CXX_LINK) \ 2118*9e94795aSAndroid Build Coastguard Worker -nostdlib -Wl,-soname,$(notdir $@) \ 2119*9e94795aSAndroid Build Coastguard Worker -Wl,--gc-sections \ 2120*9e94795aSAndroid Build Coastguard Worker -shared \ 2121*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_TARGET_CRTBEGIN_SO_O) \ 2122*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_ALL_OBJECTS) \ 2123*9e94795aSAndroid Build Coastguard Worker -Wl,--whole-archive \ 2124*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES) \ 2125*9e94795aSAndroid Build Coastguard Worker -Wl,--no-whole-archive \ 2126*9e94795aSAndroid Build Coastguard Worker $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \ 2127*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_ALL_STATIC_LIBRARIES) \ 2128*9e94795aSAndroid Build Coastguard Worker $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \ 2129*9e94795aSAndroid Build Coastguard Worker $(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_TARGET_COVERAGE_LIB)) \ 2130*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_TARGET_LIBCRT_BUILTINS) \ 2131*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_TARGET_GLOBAL_LDFLAGS) \ 2132*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_LDFLAGS) \ 2133*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_ALL_SHARED_LIBRARIES) \ 2134*9e94795aSAndroid Build Coastguard Worker -o $@ \ 2135*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_TARGET_CRTEND_SO_O) \ 2136*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_LDLIBS) 2137*9e94795aSAndroid Build Coastguard Workerendef 2138*9e94795aSAndroid Build Coastguard Worker 2139*9e94795aSAndroid Build Coastguard Workerdefine transform-o-to-shared-lib 2140*9e94795aSAndroid Build Coastguard Worker@echo "$($(PRIVATE_PREFIX)DISPLAY) SharedLib: $(PRIVATE_MODULE) ($@)" 2141*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 2142*9e94795aSAndroid Build Coastguard Worker$(transform-o-to-shared-lib-inner) 2143*9e94795aSAndroid Build Coastguard Workerendef 2144*9e94795aSAndroid Build Coastguard Worker 2145*9e94795aSAndroid Build Coastguard Worker########################################################### 2146*9e94795aSAndroid Build Coastguard Worker## Commands for running gcc to link an executable 2147*9e94795aSAndroid Build Coastguard Worker########################################################### 2148*9e94795aSAndroid Build Coastguard Worker 2149*9e94795aSAndroid Build Coastguard Workerdefine transform-o-to-executable-inner 2150*9e94795aSAndroid Build Coastguard Worker$(hide) $(PRIVATE_CXX_LINK) -pie \ 2151*9e94795aSAndroid Build Coastguard Worker -nostdlib -Bdynamic \ 2152*9e94795aSAndroid Build Coastguard Worker -Wl,-dynamic-linker,$(PRIVATE_LINKER) \ 2153*9e94795aSAndroid Build Coastguard Worker -Wl,--gc-sections \ 2154*9e94795aSAndroid Build Coastguard Worker -Wl,-z,nocopyreloc \ 2155*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_TARGET_CRTBEGIN_DYNAMIC_O) \ 2156*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_ALL_OBJECTS) \ 2157*9e94795aSAndroid Build Coastguard Worker -Wl,--whole-archive \ 2158*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES) \ 2159*9e94795aSAndroid Build Coastguard Worker -Wl,--no-whole-archive \ 2160*9e94795aSAndroid Build Coastguard Worker $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \ 2161*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_ALL_STATIC_LIBRARIES) \ 2162*9e94795aSAndroid Build Coastguard Worker $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \ 2163*9e94795aSAndroid Build Coastguard Worker $(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_TARGET_COVERAGE_LIB)) \ 2164*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_TARGET_LIBCRT_BUILTINS) \ 2165*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_TARGET_GLOBAL_LDFLAGS) \ 2166*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_LDFLAGS) \ 2167*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_ALL_SHARED_LIBRARIES) \ 2168*9e94795aSAndroid Build Coastguard Worker -o $@ \ 2169*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_TARGET_CRTEND_O) \ 2170*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_LDLIBS) 2171*9e94795aSAndroid Build Coastguard Workerendef 2172*9e94795aSAndroid Build Coastguard Worker 2173*9e94795aSAndroid Build Coastguard Workerdefine transform-o-to-executable 2174*9e94795aSAndroid Build Coastguard Worker@echo "$($(PRIVATE_PREFIX)DISPLAY) Executable: $(PRIVATE_MODULE) ($@)" 2175*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 2176*9e94795aSAndroid Build Coastguard Worker$(transform-o-to-executable-inner) 2177*9e94795aSAndroid Build Coastguard Workerendef 2178*9e94795aSAndroid Build Coastguard Worker 2179*9e94795aSAndroid Build Coastguard Worker 2180*9e94795aSAndroid Build Coastguard Worker########################################################### 2181*9e94795aSAndroid Build Coastguard Worker## Commands for linking a static executable. In practice, 2182*9e94795aSAndroid Build Coastguard Worker## we only use this on arm, so the other platforms don't 2183*9e94795aSAndroid Build Coastguard Worker## have transform-o-to-static-executable defined. 2184*9e94795aSAndroid Build Coastguard Worker## Clang driver needs -static to create static executable. 2185*9e94795aSAndroid Build Coastguard Worker## However, bionic/linker uses -shared to overwrite. 2186*9e94795aSAndroid Build Coastguard Worker## Linker for x86 targets does not allow coexistance of -static and -shared, 2187*9e94795aSAndroid Build Coastguard Worker## so we add -static only if -shared is not used. 2188*9e94795aSAndroid Build Coastguard Worker########################################################### 2189*9e94795aSAndroid Build Coastguard Worker 2190*9e94795aSAndroid Build Coastguard Workerdefine transform-o-to-static-executable-inner 2191*9e94795aSAndroid Build Coastguard Worker$(hide) $(PRIVATE_CXX_LINK) \ 2192*9e94795aSAndroid Build Coastguard Worker -nostdlib -Bstatic \ 2193*9e94795aSAndroid Build Coastguard Worker $(if $(filter $(PRIVATE_LDFLAGS),-shared),,-static) \ 2194*9e94795aSAndroid Build Coastguard Worker -Wl,--gc-sections \ 2195*9e94795aSAndroid Build Coastguard Worker -o $@ \ 2196*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_TARGET_CRTBEGIN_STATIC_O) \ 2197*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_TARGET_GLOBAL_LDFLAGS) \ 2198*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_LDFLAGS) \ 2199*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_ALL_OBJECTS) \ 2200*9e94795aSAndroid Build Coastguard Worker -Wl,--whole-archive \ 2201*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES) \ 2202*9e94795aSAndroid Build Coastguard Worker -Wl,--no-whole-archive \ 2203*9e94795aSAndroid Build Coastguard Worker $(filter-out %libcompiler_rt.hwasan.a %libc_nomalloc.hwasan.a %libc.hwasan.a %libcompiler_rt.a %libc_nomalloc.a %libc.a,$(PRIVATE_ALL_STATIC_LIBRARIES)) \ 2204*9e94795aSAndroid Build Coastguard Worker -Wl,--start-group \ 2205*9e94795aSAndroid Build Coastguard Worker $(filter %libc.a %libc.hwasan.a,$(PRIVATE_ALL_STATIC_LIBRARIES)) \ 2206*9e94795aSAndroid Build Coastguard Worker $(filter %libc_nomalloc.a %libc_nomalloc.hwasan.a,$(PRIVATE_ALL_STATIC_LIBRARIES)) \ 2207*9e94795aSAndroid Build Coastguard Worker $(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_TARGET_COVERAGE_LIB)) \ 2208*9e94795aSAndroid Build Coastguard Worker $(filter %libcompiler_rt.a %libcompiler_rt.hwasan.a,$(PRIVATE_ALL_STATIC_LIBRARIES)) \ 2209*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_TARGET_LIBCRT_BUILTINS) \ 2210*9e94795aSAndroid Build Coastguard Worker -Wl,--end-group \ 2211*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_TARGET_CRTEND_O) 2212*9e94795aSAndroid Build Coastguard Workerendef 2213*9e94795aSAndroid Build Coastguard Worker 2214*9e94795aSAndroid Build Coastguard Workerdefine transform-o-to-static-executable 2215*9e94795aSAndroid Build Coastguard Worker@echo "$($(PRIVATE_PREFIX)DISPLAY) StaticExecutable: $(PRIVATE_MODULE) ($@)" 2216*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 2217*9e94795aSAndroid Build Coastguard Worker$(transform-o-to-static-executable-inner) 2218*9e94795aSAndroid Build Coastguard Workerendef 2219*9e94795aSAndroid Build Coastguard Worker 2220*9e94795aSAndroid Build Coastguard Worker 2221*9e94795aSAndroid Build Coastguard Worker########################################################### 2222*9e94795aSAndroid Build Coastguard Worker## Commands for running gcc to link a host executable 2223*9e94795aSAndroid Build Coastguard Worker########################################################### 2224*9e94795aSAndroid Build Coastguard Worker 2225*9e94795aSAndroid Build Coastguard Workerifneq ($(HOST_CUSTOM_LD_COMMAND),true) 2226*9e94795aSAndroid Build Coastguard Workerdefine transform-host-o-to-executable-inner 2227*9e94795aSAndroid Build Coastguard Worker$(hide) $(PRIVATE_CXX_LINK) \ 2228*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_CRTBEGIN) \ 2229*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_ALL_OBJECTS) \ 2230*9e94795aSAndroid Build Coastguard Worker -Wl,--whole-archive \ 2231*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES) \ 2232*9e94795aSAndroid Build Coastguard Worker -Wl,--no-whole-archive \ 2233*9e94795aSAndroid Build Coastguard Worker $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \ 2234*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_ALL_STATIC_LIBRARIES) \ 2235*9e94795aSAndroid Build Coastguard Worker $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \ 2236*9e94795aSAndroid Build Coastguard Worker $(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_HOST_LIBPROFILE_RT)) \ 2237*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_LIBCRT_BUILTINS) \ 2238*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_ALL_SHARED_LIBRARIES) \ 2239*9e94795aSAndroid Build Coastguard Worker $(foreach path,$(PRIVATE_RPATHS), \ 2240*9e94795aSAndroid Build Coastguard Worker -Wl,-rpath,\$$ORIGIN/$(path)) \ 2241*9e94795aSAndroid Build Coastguard Worker $(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \ 2242*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_HOST_GLOBAL_LDFLAGS) \ 2243*9e94795aSAndroid Build Coastguard Worker ) \ 2244*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_LDFLAGS) \ 2245*9e94795aSAndroid Build Coastguard Worker -o $@ \ 2246*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_CRTEND) \ 2247*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_LDLIBS) 2248*9e94795aSAndroid Build Coastguard Workerendef 2249*9e94795aSAndroid Build Coastguard Workerendif 2250*9e94795aSAndroid Build Coastguard Worker 2251*9e94795aSAndroid Build Coastguard Workerdefine transform-host-o-to-executable 2252*9e94795aSAndroid Build Coastguard Worker@echo "$($(PRIVATE_PREFIX)DISPLAY) Executable: $(PRIVATE_MODULE) ($@)" 2253*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 2254*9e94795aSAndroid Build Coastguard Worker$(transform-host-o-to-executable-inner) 2255*9e94795aSAndroid Build Coastguard Workerendef 2256*9e94795aSAndroid Build Coastguard Worker 2257*9e94795aSAndroid Build Coastguard Worker########################################################### 2258*9e94795aSAndroid Build Coastguard Worker## Commands for packaging native coverage files 2259*9e94795aSAndroid Build Coastguard Worker########################################################### 2260*9e94795aSAndroid Build Coastguard Workerdefine package-coverage-files 2261*9e94795aSAndroid Build Coastguard Worker @rm -f $@ $@.lst $@.premerged 2262*9e94795aSAndroid Build Coastguard Worker @touch $@.lst 2263*9e94795aSAndroid Build Coastguard Worker $(foreach obj,$(strip $(PRIVATE_ALL_OBJECTS)), $(hide) echo $(obj) >> $@.lst$(newline)) 2264*9e94795aSAndroid Build Coastguard Worker $(hide) $(SOONG_ZIP) -o $@.premerged -C $(OUT_DIR) -l $@.lst 2265*9e94795aSAndroid Build Coastguard Worker $(hide) $(MERGE_ZIPS) -ignore-duplicates $@ $@.premerged $(strip $(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) 2266*9e94795aSAndroid Build Coastguard Workerendef 2267*9e94795aSAndroid Build Coastguard Worker 2268*9e94795aSAndroid Build Coastguard Worker########################################################### 2269*9e94795aSAndroid Build Coastguard Worker## Commands for running javac to make .class files 2270*9e94795aSAndroid Build Coastguard Worker########################################################### 2271*9e94795aSAndroid Build Coastguard Worker 2272*9e94795aSAndroid Build Coastguard Worker# b/37750224 2273*9e94795aSAndroid Build Coastguard WorkerAAPT_ASAN_OPTIONS := ASAN_OPTIONS=detect_leaks=0 2274*9e94795aSAndroid Build Coastguard Worker 2275*9e94795aSAndroid Build Coastguard Worker# Search for generated R.java in $1, copy the found R.java as $2. 2276*9e94795aSAndroid Build Coastguard Workerdefine find-generated-R.java 2277*9e94795aSAndroid Build Coastguard Worker$(hide) for GENERATED_R_FILE in `find $(1) \ 2278*9e94795aSAndroid Build Coastguard Worker -name R.java 2> /dev/null`; do \ 2279*9e94795aSAndroid Build Coastguard Worker cp $$GENERATED_R_FILE $(2) || exit 32; \ 2280*9e94795aSAndroid Build Coastguard Worker done; 2281*9e94795aSAndroid Build Coastguard Worker@# Ensure that the target file is always created, i.e. also in case we did not 2282*9e94795aSAndroid Build Coastguard Worker@# enter the GENERATED_R_FILE-loop above. This avoids unnecessary rebuilding. 2283*9e94795aSAndroid Build Coastguard Worker$(hide) touch $(2) 2284*9e94795aSAndroid Build Coastguard Workerendef 2285*9e94795aSAndroid Build Coastguard Worker 2286*9e94795aSAndroid Build Coastguard Worker########################################################### 2287*9e94795aSAndroid Build Coastguard Worker# AAPT2 compilation and link 2288*9e94795aSAndroid Build Coastguard Worker########################################################### 2289*9e94795aSAndroid Build Coastguard Workerdefine aapt2-compile-one-resource-file 2290*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 2291*9e94795aSAndroid Build Coastguard Worker$(hide) $(AAPT2) compile -o $(dir $@) $(PRIVATE_AAPT2_CFLAGS) $< 2292*9e94795aSAndroid Build Coastguard Workerendef 2293*9e94795aSAndroid Build Coastguard Worker 2294*9e94795aSAndroid Build Coastguard Workerdefine aapt2-compile-resource-dirs 2295*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 2296*9e94795aSAndroid Build Coastguard Worker$(hide) $(AAPT2) compile -o $@ $(addprefix --dir ,$(PRIVATE_SOURCE_RES_DIRS)) \ 2297*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_AAPT2_CFLAGS) 2298*9e94795aSAndroid Build Coastguard Workerendef 2299*9e94795aSAndroid Build Coastguard Worker 2300*9e94795aSAndroid Build Coastguard Worker# TODO(b/74574557): use aapt2 compile --zip if it gets implemented 2301*9e94795aSAndroid Build Coastguard Workerdefine aapt2-compile-resource-zips 2302*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 2303*9e94795aSAndroid Build Coastguard Worker$(ZIPSYNC) -d $@.contents -l $@.list $(PRIVATE_SOURCE_RES_ZIPS) 2304*9e94795aSAndroid Build Coastguard Worker$(hide) $(AAPT2) compile -o $@ --dir $@.contents $(PRIVATE_AAPT2_CFLAGS) 2305*9e94795aSAndroid Build Coastguard Workerendef 2306*9e94795aSAndroid Build Coastguard Worker 2307*9e94795aSAndroid Build Coastguard Worker# Set up rule to compile one resource file with aapt2. 2308*9e94795aSAndroid Build Coastguard Worker# Must be called with $(eval). 2309*9e94795aSAndroid Build Coastguard Worker# $(1): the source file 2310*9e94795aSAndroid Build Coastguard Worker# $(2): the output file 2311*9e94795aSAndroid Build Coastguard Workerdefine aapt2-compile-one-resource-file-rule 2312*9e94795aSAndroid Build Coastguard Worker$(2) : $(1) $(AAPT2) 2313*9e94795aSAndroid Build Coastguard Worker @echo "AAPT2 compile $$@ <- $$<" 2314*9e94795aSAndroid Build Coastguard Worker $$(call aapt2-compile-one-resource-file) 2315*9e94795aSAndroid Build Coastguard Workerendef 2316*9e94795aSAndroid Build Coastguard Worker 2317*9e94795aSAndroid Build Coastguard Worker# Convert input resource file path to output file path. 2318*9e94795aSAndroid Build Coastguard Worker# values-[config]/<file>.xml -> values-[config]_<file>.arsc.flat; 2319*9e94795aSAndroid Build Coastguard Worker# For other resource file, just replace the last "/" with "_" and 2320*9e94795aSAndroid Build Coastguard Worker# add .flat extension. 2321*9e94795aSAndroid Build Coastguard Worker# 2322*9e94795aSAndroid Build Coastguard Worker# $(1): the input resource file path 2323*9e94795aSAndroid Build Coastguard Worker# $(2): the base dir of the output file path 2324*9e94795aSAndroid Build Coastguard Worker# Returns: the compiled output file path 2325*9e94795aSAndroid Build Coastguard Workerdefine aapt2-compiled-resource-out-file 2326*9e94795aSAndroid Build Coastguard Worker$(strip \ 2327*9e94795aSAndroid Build Coastguard Worker $(eval _p_w := $(strip $(subst /,$(space),$(dir $(call clean-path,$(1)))))) 2328*9e94795aSAndroid Build Coastguard Worker $(2)/$(subst $(space),/,$(_p_w))_$(if $(filter values%,$(lastword $(_p_w))),$(patsubst %.xml,%.arsc,$(notdir $(1))),$(notdir $(1))).flat) 2329*9e94795aSAndroid Build Coastguard Workerendef 2330*9e94795aSAndroid Build Coastguard Worker 2331*9e94795aSAndroid Build Coastguard Workerdefine aapt2-link 2332*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 2333*9e94795aSAndroid Build Coastguard Workerrm -rf $(PRIVATE_JAVA_GEN_DIR) 2334*9e94795aSAndroid Build Coastguard Workermkdir -p $(PRIVATE_JAVA_GEN_DIR) 2335*9e94795aSAndroid Build Coastguard Worker$(call dump-words-to-file,$(PRIVATE_RES_FLAT),$(dir $@)aapt2-flat-list) 2336*9e94795aSAndroid Build Coastguard Worker$(call dump-words-to-file,$(PRIVATE_OVERLAY_FLAT),$(dir $@)aapt2-flat-overlay-list) 2337*9e94795aSAndroid Build Coastguard Workercat $(PRIVATE_STATIC_LIBRARY_TRANSITIVE_RES_PACKAGES_LISTS) | sort -u | tr '\n' ' ' > $(dir $@)aapt2-transitive-overlay-list 2338*9e94795aSAndroid Build Coastguard Worker$(hide) $(AAPT2) link -o $@ \ 2339*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_AAPT_FLAGS) \ 2340*9e94795aSAndroid Build Coastguard Worker $(if $(PRIVATE_STATIC_LIBRARY_EXTRA_PACKAGES),$$(cat $(PRIVATE_STATIC_LIBRARY_EXTRA_PACKAGES))) \ 2341*9e94795aSAndroid Build Coastguard Worker $(addprefix --manifest ,$(PRIVATE_ANDROID_MANIFEST)) \ 2342*9e94795aSAndroid Build Coastguard Worker $(addprefix -I ,$(PRIVATE_AAPT_INCLUDES)) \ 2343*9e94795aSAndroid Build Coastguard Worker $(addprefix -I ,$(PRIVATE_SHARED_ANDROID_LIBRARIES)) \ 2344*9e94795aSAndroid Build Coastguard Worker $(addprefix -A ,$(foreach d,$(PRIVATE_ASSET_DIR),$(call clean-path,$(d)))) \ 2345*9e94795aSAndroid Build Coastguard Worker $(addprefix --java ,$(PRIVATE_JAVA_GEN_DIR)) \ 2346*9e94795aSAndroid Build Coastguard Worker $(addprefix --proguard ,$(PRIVATE_PROGUARD_OPTIONS_FILE)) \ 2347*9e94795aSAndroid Build Coastguard Worker $(addprefix --min-sdk-version ,$(PRIVATE_DEFAULT_APP_TARGET_SDK)) \ 2348*9e94795aSAndroid Build Coastguard Worker $(addprefix --target-sdk-version ,$(PRIVATE_DEFAULT_APP_TARGET_SDK)) \ 2349*9e94795aSAndroid Build Coastguard Worker $(if $(filter --product,$(PRIVATE_AAPT_FLAGS)),,$(addprefix --product ,$(PRIVATE_TARGET_AAPT_CHARACTERISTICS))) \ 2350*9e94795aSAndroid Build Coastguard Worker $(addprefix -c ,$(PRIVATE_PRODUCT_AAPT_CONFIG)) \ 2351*9e94795aSAndroid Build Coastguard Worker $(addprefix --preferred-density ,$(PRIVATE_PRODUCT_AAPT_PREF_CONFIG)) \ 2352*9e94795aSAndroid Build Coastguard Worker $(if $(filter --version-code,$(PRIVATE_AAPT_FLAGS)),,--version-code $(PLATFORM_SDK_VERSION)) \ 2353*9e94795aSAndroid Build Coastguard Worker $(if $(filter --version-name,$(PRIVATE_AAPT_FLAGS)),,--version-name $(APPS_DEFAULT_VERSION_NAME)) \ 2354*9e94795aSAndroid Build Coastguard Worker $(addprefix --rename-manifest-package ,$(PRIVATE_MANIFEST_PACKAGE_NAME)) \ 2355*9e94795aSAndroid Build Coastguard Worker $(addprefix --rename-instrumentation-target-package ,$(PRIVATE_MANIFEST_INSTRUMENTATION_FOR)) \ 2356*9e94795aSAndroid Build Coastguard Worker -R \@$(dir $@)aapt2-flat-overlay-list \ 2357*9e94795aSAndroid Build Coastguard Worker -R \@$(dir $@)aapt2-transitive-overlay-list \ 2358*9e94795aSAndroid Build Coastguard Worker \@$(dir $@)aapt2-flat-list 2359*9e94795aSAndroid Build Coastguard Worker$(SOONG_ZIP) -o $(PRIVATE_SRCJAR) -C $(PRIVATE_JAVA_GEN_DIR) -D $(PRIVATE_JAVA_GEN_DIR) 2360*9e94795aSAndroid Build Coastguard Worker$(EXTRACT_JAR_PACKAGES) -i $(PRIVATE_SRCJAR) -o $(PRIVATE_AAPT_EXTRA_PACKAGES) --prefix '--extra-packages ' 2361*9e94795aSAndroid Build Coastguard Workerendef 2362*9e94795aSAndroid Build Coastguard Worker 2363*9e94795aSAndroid Build Coastguard Workerdefine _create-default-manifest-file 2364*9e94795aSAndroid Build Coastguard Worker$(1): 2365*9e94795aSAndroid Build Coastguard Worker rm -f $1 2366*9e94795aSAndroid Build Coastguard Worker (echo '<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="missing.manifest">' && \ 2367*9e94795aSAndroid Build Coastguard Worker echo ' <uses-sdk android:minSdkVersion="$(2)" />' && \ 2368*9e94795aSAndroid Build Coastguard Worker echo '</manifest>' ) > $1 2369*9e94795aSAndroid Build Coastguard Workerendef 2370*9e94795aSAndroid Build Coastguard Worker 2371*9e94795aSAndroid Build Coastguard Workerdefine create-default-manifest-file 2372*9e94795aSAndroid Build Coastguard Worker $(eval $(call _create-default-manifest-file,$(1),$(2))) 2373*9e94795aSAndroid Build Coastguard Workerendef 2374*9e94795aSAndroid Build Coastguard Worker 2375*9e94795aSAndroid Build Coastguard Worker 2376*9e94795aSAndroid Build Coastguard Worker########################################################### 2377*9e94795aSAndroid Build Coastguard Workerxlint_unchecked := -Xlint:unchecked 2378*9e94795aSAndroid Build Coastguard Worker 2379*9e94795aSAndroid Build Coastguard Worker# emit-line, <word list>, <output file> 2380*9e94795aSAndroid Build Coastguard Workerdefine emit-line 2381*9e94795aSAndroid Build Coastguard Worker $(if $(1),echo -n '$(strip $(1)) ' >> $(2)) 2382*9e94795aSAndroid Build Coastguard Workerendef 2383*9e94795aSAndroid Build Coastguard Worker 2384*9e94795aSAndroid Build Coastguard Worker# dump-words-to-file, <word list>, <output file> 2385*9e94795aSAndroid Build Coastguard Workerdefine dump-words-to-file 2386*9e94795aSAndroid Build Coastguard Worker @rm -f $(2) 2387*9e94795aSAndroid Build Coastguard Worker @touch $(2) 2388*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 1,500,$(1)),$(2)) 2389*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 501,1000,$(1)),$(2)) 2390*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 1001,1500,$(1)),$(2)) 2391*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 1501,2000,$(1)),$(2)) 2392*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 2001,2500,$(1)),$(2)) 2393*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 2501,3000,$(1)),$(2)) 2394*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 3001,3500,$(1)),$(2)) 2395*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 3501,4000,$(1)),$(2)) 2396*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 4001,4500,$(1)),$(2)) 2397*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 4501,5000,$(1)),$(2)) 2398*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 5001,5500,$(1)),$(2)) 2399*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 5501,6000,$(1)),$(2)) 2400*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 6001,6500,$(1)),$(2)) 2401*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 6501,7000,$(1)),$(2)) 2402*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 7001,7500,$(1)),$(2)) 2403*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 7501,8000,$(1)),$(2)) 2404*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 8001,8500,$(1)),$(2)) 2405*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 8501,9000,$(1)),$(2)) 2406*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 9001,9500,$(1)),$(2)) 2407*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 9501,10000,$(1)),$(2)) 2408*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 10001,10500,$(1)),$(2)) 2409*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 10501,11000,$(1)),$(2)) 2410*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 11001,11500,$(1)),$(2)) 2411*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 11501,12000,$(1)),$(2)) 2412*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 12001,12500,$(1)),$(2)) 2413*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 12501,13000,$(1)),$(2)) 2414*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 13001,13500,$(1)),$(2)) 2415*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 13501,14000,$(1)),$(2)) 2416*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 14001,14500,$(1)),$(2)) 2417*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 14501,15000,$(1)),$(2)) 2418*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 15001,15500,$(1)),$(2)) 2419*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 15501,16000,$(1)),$(2)) 2420*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 16001,16500,$(1)),$(2)) 2421*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 16501,17000,$(1)),$(2)) 2422*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 17001,17500,$(1)),$(2)) 2423*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 17501,18000,$(1)),$(2)) 2424*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 18001,18500,$(1)),$(2)) 2425*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 18501,19000,$(1)),$(2)) 2426*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 19001,19500,$(1)),$(2)) 2427*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 19501,20000,$(1)),$(2)) 2428*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 20001,20500,$(1)),$(2)) 2429*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 20501,21000,$(1)),$(2)) 2430*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 21001,21500,$(1)),$(2)) 2431*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 21501,22000,$(1)),$(2)) 2432*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 22001,22500,$(1)),$(2)) 2433*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 22501,23000,$(1)),$(2)) 2434*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 23001,23500,$(1)),$(2)) 2435*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 23501,24000,$(1)),$(2)) 2436*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 24001,24500,$(1)),$(2)) 2437*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 24501,25000,$(1)),$(2)) 2438*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 25001,25500,$(1)),$(2)) 2439*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 25501,26000,$(1)),$(2)) 2440*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 26001,26500,$(1)),$(2)) 2441*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 26501,27000,$(1)),$(2)) 2442*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 27001,27500,$(1)),$(2)) 2443*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 27501,28000,$(1)),$(2)) 2444*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 28001,28500,$(1)),$(2)) 2445*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 28501,29000,$(1)),$(2)) 2446*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 29001,29500,$(1)),$(2)) 2447*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 29501,30000,$(1)),$(2)) 2448*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 30001,30500,$(1)),$(2)) 2449*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 30501,31000,$(1)),$(2)) 2450*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 31001,31500,$(1)),$(2)) 2451*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 31501,32000,$(1)),$(2)) 2452*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 32001,32500,$(1)),$(2)) 2453*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 32501,33000,$(1)),$(2)) 2454*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 33001,33500,$(1)),$(2)) 2455*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 33501,34000,$(1)),$(2)) 2456*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 34001,34500,$(1)),$(2)) 2457*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 34501,35000,$(1)),$(2)) 2458*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 35001,35500,$(1)),$(2)) 2459*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 35501,36000,$(1)),$(2)) 2460*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 36001,36500,$(1)),$(2)) 2461*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 36501,37000,$(1)),$(2)) 2462*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 37001,37500,$(1)),$(2)) 2463*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 37501,38000,$(1)),$(2)) 2464*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 38001,38500,$(1)),$(2)) 2465*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 38501,39000,$(1)),$(2)) 2466*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 39001,39500,$(1)),$(2)) 2467*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 39501,40000,$(1)),$(2)) 2468*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 40001,40500,$(1)),$(2)) 2469*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 40501,41000,$(1)),$(2)) 2470*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 41001,41500,$(1)),$(2)) 2471*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 41501,42000,$(1)),$(2)) 2472*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 42001,42500,$(1)),$(2)) 2473*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 42501,43000,$(1)),$(2)) 2474*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 43001,43500,$(1)),$(2)) 2475*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 43501,44000,$(1)),$(2)) 2476*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 44001,44500,$(1)),$(2)) 2477*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 44501,45000,$(1)),$(2)) 2478*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 45001,45500,$(1)),$(2)) 2479*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 45501,46000,$(1)),$(2)) 2480*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 46001,46500,$(1)),$(2)) 2481*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 46501,47000,$(1)),$(2)) 2482*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 47001,47500,$(1)),$(2)) 2483*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 47501,48000,$(1)),$(2)) 2484*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 48001,48500,$(1)),$(2)) 2485*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 48501,49000,$(1)),$(2)) 2486*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 49001,49500,$(1)),$(2)) 2487*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 49501,50000,$(1)),$(2)) 2488*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 50001,50500,$(1)),$(2)) 2489*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 50501,51000,$(1)),$(2)) 2490*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 51001,51500,$(1)),$(2)) 2491*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 51501,52000,$(1)),$(2)) 2492*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 52001,52500,$(1)),$(2)) 2493*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 52501,53000,$(1)),$(2)) 2494*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 53001,53500,$(1)),$(2)) 2495*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 53501,54000,$(1)),$(2)) 2496*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 54001,54500,$(1)),$(2)) 2497*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 54501,55000,$(1)),$(2)) 2498*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 55001,55500,$(1)),$(2)) 2499*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 55501,56000,$(1)),$(2)) 2500*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 56001,56500,$(1)),$(2)) 2501*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 56501,57000,$(1)),$(2)) 2502*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 57001,57500,$(1)),$(2)) 2503*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 57501,58000,$(1)),$(2)) 2504*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 58001,58500,$(1)),$(2)) 2505*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 58501,59000,$(1)),$(2)) 2506*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 59001,59500,$(1)),$(2)) 2507*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 59501,60000,$(1)),$(2)) 2508*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 60001,60500,$(1)),$(2)) 2509*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 60501,61000,$(1)),$(2)) 2510*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 61001,61500,$(1)),$(2)) 2511*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 61501,62000,$(1)),$(2)) 2512*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 62001,62500,$(1)),$(2)) 2513*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 62501,63000,$(1)),$(2)) 2514*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 63001,63500,$(1)),$(2)) 2515*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 63501,64000,$(1)),$(2)) 2516*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 64001,64500,$(1)),$(2)) 2517*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 64501,65000,$(1)),$(2)) 2518*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 65001,65500,$(1)),$(2)) 2519*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 65501,66000,$(1)),$(2)) 2520*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 66001,66500,$(1)),$(2)) 2521*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 66501,67000,$(1)),$(2)) 2522*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 67001,67500,$(1)),$(2)) 2523*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 67501,68000,$(1)),$(2)) 2524*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 68001,68500,$(1)),$(2)) 2525*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 68501,69000,$(1)),$(2)) 2526*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 69001,69500,$(1)),$(2)) 2527*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 69501,70000,$(1)),$(2)) 2528*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 70001,70500,$(1)),$(2)) 2529*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 70501,71000,$(1)),$(2)) 2530*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 71001,71500,$(1)),$(2)) 2531*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 71501,72000,$(1)),$(2)) 2532*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 72001,72500,$(1)),$(2)) 2533*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 72501,73000,$(1)),$(2)) 2534*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 73001,73500,$(1)),$(2)) 2535*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 73501,74000,$(1)),$(2)) 2536*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 74001,74500,$(1)),$(2)) 2537*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 74501,75000,$(1)),$(2)) 2538*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 75001,75500,$(1)),$(2)) 2539*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 75501,76000,$(1)),$(2)) 2540*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 76001,76500,$(1)),$(2)) 2541*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 76501,77000,$(1)),$(2)) 2542*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 77001,77500,$(1)),$(2)) 2543*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 77501,78000,$(1)),$(2)) 2544*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 78001,78500,$(1)),$(2)) 2545*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 78501,79000,$(1)),$(2)) 2546*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 79001,79500,$(1)),$(2)) 2547*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 79501,80000,$(1)),$(2)) 2548*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 80001,80500,$(1)),$(2)) 2549*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 80501,81000,$(1)),$(2)) 2550*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 81001,81500,$(1)),$(2)) 2551*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 81501,82000,$(1)),$(2)) 2552*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 82001,82500,$(1)),$(2)) 2553*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 82501,83000,$(1)),$(2)) 2554*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 83001,83500,$(1)),$(2)) 2555*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 83501,84000,$(1)),$(2)) 2556*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 84001,84500,$(1)),$(2)) 2557*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 84501,85000,$(1)),$(2)) 2558*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 85001,85500,$(1)),$(2)) 2559*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 85501,86000,$(1)),$(2)) 2560*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 86001,86500,$(1)),$(2)) 2561*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 86501,87000,$(1)),$(2)) 2562*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 87001,87500,$(1)),$(2)) 2563*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 87501,88000,$(1)),$(2)) 2564*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 88001,88500,$(1)),$(2)) 2565*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 88501,89000,$(1)),$(2)) 2566*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 89001,89500,$(1)),$(2)) 2567*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 89501,90000,$(1)),$(2)) 2568*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 90001,90500,$(1)),$(2)) 2569*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 90501,91000,$(1)),$(2)) 2570*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 91001,91500,$(1)),$(2)) 2571*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 91501,92000,$(1)),$(2)) 2572*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 92001,92500,$(1)),$(2)) 2573*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 92501,93000,$(1)),$(2)) 2574*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 93001,93500,$(1)),$(2)) 2575*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 93501,94000,$(1)),$(2)) 2576*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 94001,94500,$(1)),$(2)) 2577*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 94501,95000,$(1)),$(2)) 2578*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 95001,95500,$(1)),$(2)) 2579*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 95501,96000,$(1)),$(2)) 2580*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 96001,96500,$(1)),$(2)) 2581*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 96501,97000,$(1)),$(2)) 2582*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 97001,97500,$(1)),$(2)) 2583*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 97501,98000,$(1)),$(2)) 2584*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 98001,98500,$(1)),$(2)) 2585*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 98501,99000,$(1)),$(2)) 2586*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 99001,99500,$(1)),$(2)) 2587*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 99501,100000,$(1)),$(2)) 2588*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 100001,100500,$(1)),$(2)) 2589*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 100501,101000,$(1)),$(2)) 2590*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 101001,101500,$(1)),$(2)) 2591*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 101501,102000,$(1)),$(2)) 2592*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 102001,102500,$(1)),$(2)) 2593*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 102501,103000,$(1)),$(2)) 2594*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 103001,103500,$(1)),$(2)) 2595*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 103501,104000,$(1)),$(2)) 2596*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 104001,104500,$(1)),$(2)) 2597*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 104501,105000,$(1)),$(2)) 2598*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 105001,105500,$(1)),$(2)) 2599*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 105501,106000,$(1)),$(2)) 2600*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 106001,106500,$(1)),$(2)) 2601*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 106501,107000,$(1)),$(2)) 2602*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 107001,107500,$(1)),$(2)) 2603*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 107501,108000,$(1)),$(2)) 2604*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 108001,108500,$(1)),$(2)) 2605*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 108501,109000,$(1)),$(2)) 2606*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 109001,109500,$(1)),$(2)) 2607*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 109501,110000,$(1)),$(2)) 2608*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 110001,110500,$(1)),$(2)) 2609*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 110501,111000,$(1)),$(2)) 2610*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 111001,111500,$(1)),$(2)) 2611*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 111501,112000,$(1)),$(2)) 2612*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 112001,112500,$(1)),$(2)) 2613*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 112501,113000,$(1)),$(2)) 2614*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 113001,113500,$(1)),$(2)) 2615*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 113501,114000,$(1)),$(2)) 2616*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 114001,114500,$(1)),$(2)) 2617*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 114501,115000,$(1)),$(2)) 2618*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 115001,115500,$(1)),$(2)) 2619*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 115501,116000,$(1)),$(2)) 2620*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 116001,116500,$(1)),$(2)) 2621*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 116501,117000,$(1)),$(2)) 2622*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 117001,117500,$(1)),$(2)) 2623*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 117501,118000,$(1)),$(2)) 2624*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 118001,118500,$(1)),$(2)) 2625*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 118501,119000,$(1)),$(2)) 2626*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 119001,119500,$(1)),$(2)) 2627*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 119501,120000,$(1)),$(2)) 2628*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 120001,120500,$(1)),$(2)) 2629*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 120501,121000,$(1)),$(2)) 2630*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 121001,121500,$(1)),$(2)) 2631*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 121501,122000,$(1)),$(2)) 2632*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 122001,122500,$(1)),$(2)) 2633*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 122501,123000,$(1)),$(2)) 2634*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 123001,123500,$(1)),$(2)) 2635*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 123501,124000,$(1)),$(2)) 2636*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 124001,124500,$(1)),$(2)) 2637*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 124501,125000,$(1)),$(2)) 2638*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 125001,125500,$(1)),$(2)) 2639*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 125501,126000,$(1)),$(2)) 2640*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 126001,126500,$(1)),$(2)) 2641*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 126501,127000,$(1)),$(2)) 2642*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 127001,127500,$(1)),$(2)) 2643*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 127501,128000,$(1)),$(2)) 2644*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 128001,128500,$(1)),$(2)) 2645*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 128501,129000,$(1)),$(2)) 2646*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 129001,129500,$(1)),$(2)) 2647*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 129501,130000,$(1)),$(2)) 2648*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 130001,130500,$(1)),$(2)) 2649*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 130501,131000,$(1)),$(2)) 2650*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 131001,131500,$(1)),$(2)) 2651*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 131501,132000,$(1)),$(2)) 2652*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 132001,132500,$(1)),$(2)) 2653*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 132501,133000,$(1)),$(2)) 2654*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 133001,133500,$(1)),$(2)) 2655*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 133501,134000,$(1)),$(2)) 2656*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 134001,134500,$(1)),$(2)) 2657*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 134501,135000,$(1)),$(2)) 2658*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 135001,135500,$(1)),$(2)) 2659*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 135501,136000,$(1)),$(2)) 2660*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 136001,136500,$(1)),$(2)) 2661*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 136501,137000,$(1)),$(2)) 2662*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 137001,137500,$(1)),$(2)) 2663*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 137501,138000,$(1)),$(2)) 2664*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 138001,138500,$(1)),$(2)) 2665*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 138501,139000,$(1)),$(2)) 2666*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 139001,139500,$(1)),$(2)) 2667*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 139501,140000,$(1)),$(2)) 2668*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 140001,140500,$(1)),$(2)) 2669*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 140501,141000,$(1)),$(2)) 2670*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 141001,141500,$(1)),$(2)) 2671*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 141501,142000,$(1)),$(2)) 2672*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 142001,142500,$(1)),$(2)) 2673*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 142501,143000,$(1)),$(2)) 2674*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 143001,143500,$(1)),$(2)) 2675*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 143501,144000,$(1)),$(2)) 2676*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 144001,144500,$(1)),$(2)) 2677*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 144501,145000,$(1)),$(2)) 2678*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 145001,145500,$(1)),$(2)) 2679*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 145501,146000,$(1)),$(2)) 2680*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 146001,146500,$(1)),$(2)) 2681*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 146501,147000,$(1)),$(2)) 2682*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 147001,147500,$(1)),$(2)) 2683*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 147501,148000,$(1)),$(2)) 2684*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 148001,148500,$(1)),$(2)) 2685*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 148501,149000,$(1)),$(2)) 2686*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 149001,149500,$(1)),$(2)) 2687*9e94795aSAndroid Build Coastguard Worker @$(call emit-line,$(wordlist 149501,150000,$(1)),$(2)) 2688*9e94795aSAndroid Build Coastguard Worker @$(if $(wordlist 150001,150002,$(1)),$(error dump-words-to-file: Too many words ($(words $(1))))) 2689*9e94795aSAndroid Build Coastguard Workerendef 2690*9e94795aSAndroid Build Coastguard Worker# Return jar arguments to compress files in a given directory 2691*9e94795aSAndroid Build Coastguard Worker# $(1): directory 2692*9e94795aSAndroid Build Coastguard Worker# 2693*9e94795aSAndroid Build Coastguard Worker# Returns an @-file argument that contains the output of a subshell 2694*9e94795aSAndroid Build Coastguard Worker# that looks like -C $(1) path/to/file1 -C $(1) path/to/file2 2695*9e94795aSAndroid Build Coastguard Worker# Also adds "-C out/empty ." which avoids errors in jar when 2696*9e94795aSAndroid Build Coastguard Worker# there are no files in the directory. 2697*9e94795aSAndroid Build Coastguard Workerdefine jar-args-sorted-files-in-directory 2698*9e94795aSAndroid Build Coastguard Worker @<(find $(1) -type f | sort | $(JAR_ARGS) $(1); echo "-C $(EMPTY_DIRECTORY) .") 2699*9e94795aSAndroid Build Coastguard Workerendef 2700*9e94795aSAndroid Build Coastguard Worker 2701*9e94795aSAndroid Build Coastguard Worker# append additional Java sources(resources/Proto sources, and etc) to $(1). 2702*9e94795aSAndroid Build Coastguard Workerdefine fetch-additional-java-source 2703*9e94795aSAndroid Build Coastguard Worker$(hide) if [ -d "$(PRIVATE_SOURCE_INTERMEDIATES_DIR)" ]; then \ 2704*9e94795aSAndroid Build Coastguard Worker find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name '*.java' -and -not -name '.*' >> $(1); \ 2705*9e94795aSAndroid Build Coastguard Workerfi 2706*9e94795aSAndroid Build Coastguard Workerendef 2707*9e94795aSAndroid Build Coastguard Worker 2708*9e94795aSAndroid Build Coastguard Worker# Some historical notes: 2709*9e94795aSAndroid Build Coastguard Worker# - below we write the list of java files to java-source-list to avoid argument 2710*9e94795aSAndroid Build Coastguard Worker# list length problems with Cygwin 2711*9e94795aSAndroid Build Coastguard Worker# - we filter out duplicate java file names because eclipse's compiler 2712*9e94795aSAndroid Build Coastguard Worker# doesn't like them. 2713*9e94795aSAndroid Build Coastguard Workerdefine write-java-source-list 2714*9e94795aSAndroid Build Coastguard Worker@echo "$($(PRIVATE_PREFIX)DISPLAY) Java source list: $(PRIVATE_MODULE)" 2715*9e94795aSAndroid Build Coastguard Worker$(hide) rm -f $@ 2716*9e94795aSAndroid Build Coastguard Worker$(call dump-words-to-file,$(sort $(PRIVATE_JAVA_SOURCES)),$@.tmp) 2717*9e94795aSAndroid Build Coastguard Worker$(call fetch-additional-java-source,$@.tmp) 2718*9e94795aSAndroid Build Coastguard Worker$(hide) tr ' ' '\n' < $@.tmp | $(NORMALIZE_PATH) | sort -u > $@ 2719*9e94795aSAndroid Build Coastguard Workerendef 2720*9e94795aSAndroid Build Coastguard Worker 2721*9e94795aSAndroid Build Coastguard Worker# Common definition to invoke javac on the host and target. 2722*9e94795aSAndroid Build Coastguard Worker# 2723*9e94795aSAndroid Build Coastguard Worker# $(1): javac 2724*9e94795aSAndroid Build Coastguard Worker# $(2): classpath_libs 2725*9e94795aSAndroid Build Coastguard Workerdefine compile-java 2726*9e94795aSAndroid Build Coastguard Worker$(hide) rm -f $@ 2727*9e94795aSAndroid Build Coastguard Worker$(hide) rm -rf $(PRIVATE_CLASS_INTERMEDIATES_DIR) $(PRIVATE_ANNO_INTERMEDIATES_DIR) 2728*9e94795aSAndroid Build Coastguard Worker$(hide) mkdir -p $(dir $@) 2729*9e94795aSAndroid Build Coastguard Worker$(hide) mkdir -p $(PRIVATE_CLASS_INTERMEDIATES_DIR) $(PRIVATE_ANNO_INTERMEDIATES_DIR) 2730*9e94795aSAndroid Build Coastguard Worker$(if $(PRIVATE_SRCJARS),\ 2731*9e94795aSAndroid Build Coastguard Worker $(ZIPSYNC) -d $(PRIVATE_SRCJAR_INTERMEDIATES_DIR) -l $(PRIVATE_SRCJAR_LIST_FILE) -f "*.java" $(PRIVATE_SRCJARS)) 2732*9e94795aSAndroid Build Coastguard Worker$(hide) if [ -s $(PRIVATE_JAVA_SOURCE_LIST) $(if $(PRIVATE_SRCJARS),-o -s $(PRIVATE_SRCJAR_LIST_FILE) )] ; then \ 2733*9e94795aSAndroid Build Coastguard Worker $(SOONG_JAVAC_WRAPPER) $(JAVAC_WRAPPER) $(1) -encoding UTF-8 \ 2734*9e94795aSAndroid Build Coastguard Worker $(if $(findstring true,$(PRIVATE_WARNINGS_ENABLE)),$(xlint_unchecked),) \ 2735*9e94795aSAndroid Build Coastguard Worker $(if $(PRIVATE_USE_SYSTEM_MODULES), \ 2736*9e94795aSAndroid Build Coastguard Worker $(addprefix --system=,$(PRIVATE_SYSTEM_MODULES_DIR)), \ 2737*9e94795aSAndroid Build Coastguard Worker $(addprefix -bootclasspath ,$(strip \ 2738*9e94795aSAndroid Build Coastguard Worker $(call normalize-path-list,$(PRIVATE_BOOTCLASSPATH)) \ 2739*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_EMPTY_BOOTCLASSPATH)))) \ 2740*9e94795aSAndroid Build Coastguard Worker $(if $(PRIVATE_USE_SYSTEM_MODULES), \ 2741*9e94795aSAndroid Build Coastguard Worker $(if $(PRIVATE_PATCH_MODULE), \ 2742*9e94795aSAndroid Build Coastguard Worker --patch-module=$(PRIVATE_PATCH_MODULE)=$(call normalize-path-list,. $(2)))) \ 2743*9e94795aSAndroid Build Coastguard Worker $(addprefix -classpath ,$(call normalize-path-list,$(strip \ 2744*9e94795aSAndroid Build Coastguard Worker $(if $(PRIVATE_USE_SYSTEM_MODULES), \ 2745*9e94795aSAndroid Build Coastguard Worker $(filter-out $(PRIVATE_SYSTEM_MODULES_LIBS),$(PRIVATE_BOOTCLASSPATH))) \ 2746*9e94795aSAndroid Build Coastguard Worker $(2)))) \ 2747*9e94795aSAndroid Build Coastguard Worker $(if $(findstring true,$(PRIVATE_WARNINGS_ENABLE)),$(xlint_unchecked),) \ 2748*9e94795aSAndroid Build Coastguard Worker -d $(PRIVATE_CLASS_INTERMEDIATES_DIR) -s $(PRIVATE_ANNO_INTERMEDIATES_DIR) \ 2749*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_JAVACFLAGS) \ 2750*9e94795aSAndroid Build Coastguard Worker \@$(PRIVATE_JAVA_SOURCE_LIST) \ 2751*9e94795aSAndroid Build Coastguard Worker $(if $(PRIVATE_SRCJARS),\@$(PRIVATE_SRCJAR_LIST_FILE)) \ 2752*9e94795aSAndroid Build Coastguard Worker || ( rm -rf $(PRIVATE_CLASS_INTERMEDIATES_DIR) ; exit 41 ) \ 2753*9e94795aSAndroid Build Coastguard Workerfi 2754*9e94795aSAndroid Build Coastguard Worker$(if $(PRIVATE_JAR_EXCLUDE_FILES), $(hide) find $(PRIVATE_CLASS_INTERMEDIATES_DIR) \ 2755*9e94795aSAndroid Build Coastguard Worker -name $(word 1, $(PRIVATE_JAR_EXCLUDE_FILES)) \ 2756*9e94795aSAndroid Build Coastguard Worker $(addprefix -o -name , $(wordlist 2, 999, $(PRIVATE_JAR_EXCLUDE_FILES))) \ 2757*9e94795aSAndroid Build Coastguard Worker | xargs rm -rf) 2758*9e94795aSAndroid Build Coastguard Worker$(if $(PRIVATE_JAR_PACKAGES), \ 2759*9e94795aSAndroid Build Coastguard Worker $(hide) find $(PRIVATE_CLASS_INTERMEDIATES_DIR) -mindepth 1 -type f \ 2760*9e94795aSAndroid Build Coastguard Worker $(foreach pkg, $(PRIVATE_JAR_PACKAGES), \ 2761*9e94795aSAndroid Build Coastguard Worker -not -path $(PRIVATE_CLASS_INTERMEDIATES_DIR)/$(subst .,/,$(pkg))/\*) -delete ; \ 2762*9e94795aSAndroid Build Coastguard Worker find $(PRIVATE_CLASS_INTERMEDIATES_DIR) -empty -delete) 2763*9e94795aSAndroid Build Coastguard Worker$(if $(PRIVATE_JAR_EXCLUDE_PACKAGES), $(hide) rm -rf \ 2764*9e94795aSAndroid Build Coastguard Worker $(foreach pkg, $(PRIVATE_JAR_EXCLUDE_PACKAGES), \ 2765*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_CLASS_INTERMEDIATES_DIR)/$(subst .,/,$(pkg)))) 2766*9e94795aSAndroid Build Coastguard Worker$(hide) $(SOONG_ZIP) -jar -o $@ -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) -D $(PRIVATE_CLASS_INTERMEDIATES_DIR) 2767*9e94795aSAndroid Build Coastguard Worker$(if $(PRIVATE_EXTRA_JAR_ARGS),$(call add-java-resources-to,$@)) 2768*9e94795aSAndroid Build Coastguard Workerendef 2769*9e94795aSAndroid Build Coastguard Worker 2770*9e94795aSAndroid Build Coastguard Workerdefine transform-java-to-header.jar 2771*9e94795aSAndroid Build Coastguard Worker@echo "$($(PRIVATE_PREFIX)DISPLAY) Turbine: $(PRIVATE_MODULE)" 2772*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 2773*9e94795aSAndroid Build Coastguard Worker@rm -rf $(dir $@)/classes-turbine 2774*9e94795aSAndroid Build Coastguard Worker@mkdir $(dir $@)/classes-turbine 2775*9e94795aSAndroid Build Coastguard Worker$(hide) if [ -s $(PRIVATE_JAVA_SOURCE_LIST) -o -n "$(PRIVATE_SRCJARS)" ] ; then \ 2776*9e94795aSAndroid Build Coastguard Worker $(JAVA) -jar $(TURBINE) \ 2777*9e94795aSAndroid Build Coastguard Worker --output $@.premerged --temp_dir $(dir $@)/classes-turbine \ 2778*9e94795aSAndroid Build Coastguard Worker --sources \@$(PRIVATE_JAVA_SOURCE_LIST) --source_jars $(PRIVATE_SRCJARS) \ 2779*9e94795aSAndroid Build Coastguard Worker --javacopts $(PRIVATE_JAVACFLAGS) $(COMMON_JDK_FLAGS) -- \ 2780*9e94795aSAndroid Build Coastguard Worker $(if $(PRIVATE_USE_SYSTEM_MODULES), \ 2781*9e94795aSAndroid Build Coastguard Worker --system $(PRIVATE_SYSTEM_MODULES_DIR), \ 2782*9e94795aSAndroid Build Coastguard Worker --bootclasspath $(strip $(PRIVATE_BOOTCLASSPATH))) \ 2783*9e94795aSAndroid Build Coastguard Worker --classpath $(strip $(if $(PRIVATE_USE_SYSTEM_MODULES), \ 2784*9e94795aSAndroid Build Coastguard Worker $(filter-out $(PRIVATE_SYSTEM_MODULES_LIBS),$(PRIVATE_BOOTCLASSPATH))) \ 2785*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_ALL_JAVA_HEADER_LIBRARIES)) \ 2786*9e94795aSAndroid Build Coastguard Worker || ( rm -rf $(dir $@)/classes-turbine ; exit 41 ) && \ 2787*9e94795aSAndroid Build Coastguard Worker $(MERGE_ZIPS) -j --ignore-duplicates -stripDir META-INF $@.tmp $@.premerged $(PRIVATE_STATIC_JAVA_HEADER_LIBRARIES) ; \ 2788*9e94795aSAndroid Build Coastguard Workerelse \ 2789*9e94795aSAndroid Build Coastguard Worker $(MERGE_ZIPS) -j --ignore-duplicates -stripDir META-INF $@.tmp $(PRIVATE_STATIC_JAVA_HEADER_LIBRARIES) ; \ 2790*9e94795aSAndroid Build Coastguard Workerfi 2791*9e94795aSAndroid Build Coastguard Worker$(hide) $(ZIPTIME) $@.tmp 2792*9e94795aSAndroid Build Coastguard Worker$(hide) $(call commit-change-for-toc,$@) 2793*9e94795aSAndroid Build Coastguard Workerendef 2794*9e94795aSAndroid Build Coastguard Worker 2795*9e94795aSAndroid Build Coastguard Worker# Runs jarjar on an input file. Jarjar doesn't exit with a nonzero return code 2796*9e94795aSAndroid Build Coastguard Worker# when there is a syntax error in a rules file and doesn't write the output 2797*9e94795aSAndroid Build Coastguard Worker# file, so removes the output file before running jarjar and check if it exists 2798*9e94795aSAndroid Build Coastguard Worker# after running jarjar. 2799*9e94795aSAndroid Build Coastguard Workerdefine transform-jarjar 2800*9e94795aSAndroid Build Coastguard Workerecho $($(PRIVATE_PREFIX)DISPLAY) JarJar: $@ 2801*9e94795aSAndroid Build Coastguard Workerrm -f $@ 2802*9e94795aSAndroid Build Coastguard Worker$(JAVA) -jar $(JARJAR) process $(PRIVATE_JARJAR_RULES) $< $@ 2803*9e94795aSAndroid Build Coastguard Worker[ -e $@ ] || (echo "Missing output file"; exit 1) 2804*9e94795aSAndroid Build Coastguard Workerendef 2805*9e94795aSAndroid Build Coastguard Worker 2806*9e94795aSAndroid Build Coastguard Worker# Moves $1.tmp to $1 if necessary. This is designed to be used with 2807*9e94795aSAndroid Build Coastguard Worker# .KATI_RESTAT. For kati, this function doesn't update the timestamp 2808*9e94795aSAndroid Build Coastguard Worker# of $1 when $1.tmp is identical to $1 so that ninja won't rebuild 2809*9e94795aSAndroid Build Coastguard Worker# targets which depend on $1. 2810*9e94795aSAndroid Build Coastguard Workerdefine commit-change-for-toc 2811*9e94795aSAndroid Build Coastguard Worker$(hide) if cmp -s $1.tmp $1 ; then \ 2812*9e94795aSAndroid Build Coastguard Worker rm $1.tmp ; \ 2813*9e94795aSAndroid Build Coastguard Workerelse \ 2814*9e94795aSAndroid Build Coastguard Worker mv $1.tmp $1 ; \ 2815*9e94795aSAndroid Build Coastguard Workerfi 2816*9e94795aSAndroid Build Coastguard Workerendef 2817*9e94795aSAndroid Build Coastguard Worker 2818*9e94795aSAndroid Build Coastguard Workerifeq (,$(TARGET_BUILD_APPS)) 2819*9e94795aSAndroid Build Coastguard Worker 2820*9e94795aSAndroid Build Coastguard Worker## Rule to create a table of contents from a .dex file. 2821*9e94795aSAndroid Build Coastguard Worker## Must be called with $(eval). 2822*9e94795aSAndroid Build Coastguard Worker# $(1): The directory which contains classes*.dex files 2823*9e94795aSAndroid Build Coastguard Workerdefine _transform-dex-to-toc 2824*9e94795aSAndroid Build Coastguard Worker$1/classes.dex.toc: PRIVATE_INPUT_DEX_FILES := $1/classes*.dex 2825*9e94795aSAndroid Build Coastguard Worker$1/classes.dex.toc: $1/classes.dex $(DEXDUMP) 2826*9e94795aSAndroid Build Coastguard Worker @echo Generating TOC: $$@ 2827*9e94795aSAndroid Build Coastguard Worker $(hide) ANDROID_LOG_TAGS="*:e" $(DEXDUMP) -l xml $$(PRIVATE_INPUT_DEX_FILES) > $$@.tmp 2828*9e94795aSAndroid Build Coastguard Worker $$(call commit-change-for-toc,$$@) 2829*9e94795aSAndroid Build Coastguard Workerendef 2830*9e94795aSAndroid Build Coastguard Worker 2831*9e94795aSAndroid Build Coastguard Worker## Define a rule which generates .dex.toc and mark it as .KATI_RESTAT. 2832*9e94795aSAndroid Build Coastguard Worker# $(1): The directory which contains classes*.dex files 2833*9e94795aSAndroid Build Coastguard Workerdefine define-dex-to-toc-rule 2834*9e94795aSAndroid Build Coastguard Worker$(eval $(call _transform-dex-to-toc,$1))\ 2835*9e94795aSAndroid Build Coastguard Worker$(eval .KATI_RESTAT: $1/classes.dex.toc) 2836*9e94795aSAndroid Build Coastguard Workerendef 2837*9e94795aSAndroid Build Coastguard Worker 2838*9e94795aSAndroid Build Coastguard Workerelse 2839*9e94795aSAndroid Build Coastguard Worker 2840*9e94795aSAndroid Build Coastguard Worker# Turn off .toc optimization for apps build as we cannot build dexdump. 2841*9e94795aSAndroid Build Coastguard Workerdefine define-dex-to-toc-rule 2842*9e94795aSAndroid Build Coastguard Workerendef 2843*9e94795aSAndroid Build Coastguard Worker 2844*9e94795aSAndroid Build Coastguard Workerendif # TARGET_BUILD_APPS 2845*9e94795aSAndroid Build Coastguard Worker 2846*9e94795aSAndroid Build Coastguard Worker 2847*9e94795aSAndroid Build Coastguard Worker# Takes an sdk version that might be PLATFORM_VERSION_CODENAME (for example P), 2848*9e94795aSAndroid Build Coastguard Worker# returns a number greater than the highest existing sdk version if it is, or 2849*9e94795aSAndroid Build Coastguard Worker# the input if it is not. 2850*9e94795aSAndroid Build Coastguard Workerdefine codename-or-sdk-to-sdk 2851*9e94795aSAndroid Build Coastguard Worker$(if $(filter $(1),$(PLATFORM_VERSION_CODENAME)),10000,$(1)) 2852*9e94795aSAndroid Build Coastguard Workerendef 2853*9e94795aSAndroid Build Coastguard Worker 2854*9e94795aSAndroid Build Coastguard Worker# Uses LOCAL_SDK_VERSION and PLATFORM_SDK_VERSION to determine a compileSdkVersion 2855*9e94795aSAndroid Build Coastguard Worker# in the form of a number or a codename (28 or P) 2856*9e94795aSAndroid Build Coastguard Workerdefine module-sdk-version 2857*9e94795aSAndroid Build Coastguard Worker$(strip \ 2858*9e94795aSAndroid Build Coastguard Worker $(if $(filter-out current system_current test_current core_current,$(LOCAL_SDK_VERSION)), \ 2859*9e94795aSAndroid Build Coastguard Worker $(call get-numeric-sdk-version,$(LOCAL_SDK_VERSION)), \ 2860*9e94795aSAndroid Build Coastguard Worker $(PLATFORM_SDK_VERSION))) 2861*9e94795aSAndroid Build Coastguard Workerendef 2862*9e94795aSAndroid Build Coastguard Worker 2863*9e94795aSAndroid Build Coastguard Worker# Uses LOCAL_SDK_VERSION and DEFAULT_APP_TARGET_SDK to determine 2864*9e94795aSAndroid Build Coastguard Worker# a targetSdkVersion in the form of a number or a codename (28 or P). 2865*9e94795aSAndroid Build Coastguard Workerdefine module-target-sdk-version 2866*9e94795aSAndroid Build Coastguard Worker$(strip \ 2867*9e94795aSAndroid Build Coastguard Worker $(if $(filter-out current system_current test_current core_current,$(LOCAL_SDK_VERSION)), \ 2868*9e94795aSAndroid Build Coastguard Worker $(call get-numeric-sdk-version,$(LOCAL_SDK_VERSION)), \ 2869*9e94795aSAndroid Build Coastguard Worker $(DEFAULT_APP_TARGET_SDK))) 2870*9e94795aSAndroid Build Coastguard Workerendef 2871*9e94795aSAndroid Build Coastguard Worker 2872*9e94795aSAndroid Build Coastguard Worker# Uses LOCAL_MIN_SDK_VERSION, LOCAL_SDK_VERSION and DEFAULT_APP_TARGET_SDK to determine 2873*9e94795aSAndroid Build Coastguard Worker# a minSdkVersion in the form of a number or a codename (28 or P). 2874*9e94795aSAndroid Build Coastguard Workerdefine module-min-sdk-version 2875*9e94795aSAndroid Build Coastguard Worker$(if $(LOCAL_MIN_SDK_VERSION),$(LOCAL_MIN_SDK_VERSION),$(call module-target-sdk-version)) 2876*9e94795aSAndroid Build Coastguard Workerendef 2877*9e94795aSAndroid Build Coastguard Worker 2878*9e94795aSAndroid Build Coastguard Worker# Checks if module is in vendor or product 2879*9e94795aSAndroid Build Coastguard Workerdefine module-in-vendor-or-product 2880*9e94795aSAndroid Build Coastguard Worker$(if $(filter true,$(LOCAL_IN_VENDOR) $(LOCAL_IN_PRODUCT)),true) 2881*9e94795aSAndroid Build Coastguard Workerendef 2882*9e94795aSAndroid Build Coastguard Worker 2883*9e94795aSAndroid Build Coastguard Workerdefine transform-classes.jar-to-dex 2884*9e94795aSAndroid Build Coastguard Worker@echo "target Dex: $(PRIVATE_MODULE)" 2885*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@)tmp 2886*9e94795aSAndroid Build Coastguard Worker$(hide) rm -f $(dir $@)classes*.dex $(dir $@)d8_input.jar 2887*9e94795aSAndroid Build Coastguard Worker$(hide) $(ZIP2ZIP) -j -i $< -o $(dir $@)d8_input.jar "**/*.class" 2888*9e94795aSAndroid Build Coastguard Worker$(hide) $(D8_WRAPPER) $(D8_COMMAND) \ 2889*9e94795aSAndroid Build Coastguard Worker --output $(dir $@)tmp \ 2890*9e94795aSAndroid Build Coastguard Worker $(addprefix --lib ,$(PRIVATE_D8_LIBS)) \ 2891*9e94795aSAndroid Build Coastguard Worker --min-api $(PRIVATE_MIN_SDK_VERSION) \ 2892*9e94795aSAndroid Build Coastguard Worker $(subst --main-dex-list=, --main-dex-list , \ 2893*9e94795aSAndroid Build Coastguard Worker $(filter-out --core-library --multi-dex --minimal-main-dex,$(PRIVATE_DX_FLAGS))) \ 2894*9e94795aSAndroid Build Coastguard Worker $(dir $@)d8_input.jar 2895*9e94795aSAndroid Build Coastguard Worker$(hide) mv $(dir $@)tmp/* $(dir $@) 2896*9e94795aSAndroid Build Coastguard Worker$(hide) rm -f $(dir $@)d8_input.jar 2897*9e94795aSAndroid Build Coastguard Worker$(hide) rm -rf $(dir $@)tmp 2898*9e94795aSAndroid Build Coastguard Workerendef 2899*9e94795aSAndroid Build Coastguard Worker 2900*9e94795aSAndroid Build Coastguard Worker# We need the extra blank line, so that the command will be on a separate line. 2901*9e94795aSAndroid Build Coastguard Worker# $(1): the package 2902*9e94795aSAndroid Build Coastguard Worker# $(2): the ABI name 2903*9e94795aSAndroid Build Coastguard Worker# $(3): the list of shared libraies 2904*9e94795aSAndroid Build Coastguard Workerdefine _add-jni-shared-libs-to-package-per-abi 2905*9e94795aSAndroid Build Coastguard Worker$(hide) cp $(3) $(dir $(1))lib/$(2) 2906*9e94795aSAndroid Build Coastguard Worker 2907*9e94795aSAndroid Build Coastguard Workerendef 2908*9e94795aSAndroid Build Coastguard Worker 2909*9e94795aSAndroid Build Coastguard Worker# $(1): the package file 2910*9e94795aSAndroid Build Coastguard Worker# $(2): if true, uncompress jni libs 2911*9e94795aSAndroid Build Coastguard Workerdefine create-jni-shared-libs-package 2912*9e94795aSAndroid Build Coastguard Workerrm -rf $(dir $(1))lib 2913*9e94795aSAndroid Build Coastguard Workermkdir -p $(addprefix $(dir $(1))lib/,$(PRIVATE_JNI_SHARED_LIBRARIES_ABI)) 2914*9e94795aSAndroid Build Coastguard Worker$(foreach abi,$(PRIVATE_JNI_SHARED_LIBRARIES_ABI),\ 2915*9e94795aSAndroid Build Coastguard Worker $(call _add-jni-shared-libs-to-package-per-abi,$(1),$(abi),\ 2916*9e94795aSAndroid Build Coastguard Worker $(patsubst $(abi):%,%,$(filter $(abi):%,$(PRIVATE_JNI_SHARED_LIBRARIES))))) 2917*9e94795aSAndroid Build Coastguard Worker$(SOONG_ZIP) $(if $(2),-L 0) -o $(1) -C $(dir $(1)) -D $(dir $(1))lib 2918*9e94795aSAndroid Build Coastguard Workerrm -rf $(dir $(1))lib 2919*9e94795aSAndroid Build Coastguard Workerendef 2920*9e94795aSAndroid Build Coastguard Worker 2921*9e94795aSAndroid Build Coastguard Worker# $(1): the jar file. 2922*9e94795aSAndroid Build Coastguard Worker# $(2): the classes.dex file. 2923*9e94795aSAndroid Build Coastguard Workerdefine create-dex-jar 2924*9e94795aSAndroid Build Coastguard Workerfind $(dir $(2)) -maxdepth 1 -name "classes*.dex" | sort > $(1).lst 2925*9e94795aSAndroid Build Coastguard Worker$(SOONG_ZIP) -o $(1) -C $(dir $(2)) -l $(1).lst 2926*9e94795aSAndroid Build Coastguard Workerendef 2927*9e94795aSAndroid Build Coastguard Worker 2928*9e94795aSAndroid Build Coastguard Worker# Add java resources added by the current module to an existing package. 2929*9e94795aSAndroid Build Coastguard Worker# $(1) destination package. 2930*9e94795aSAndroid Build Coastguard Workerdefine add-java-resources-to 2931*9e94795aSAndroid Build Coastguard Worker $(call _java-resources,$(1),u) 2932*9e94795aSAndroid Build Coastguard Workerendef 2933*9e94795aSAndroid Build Coastguard Worker 2934*9e94795aSAndroid Build Coastguard Worker# Add java resources added by the current module to a new jar. 2935*9e94795aSAndroid Build Coastguard Worker# $(1) destination jar. 2936*9e94795aSAndroid Build Coastguard Workerdefine create-java-resources-jar 2937*9e94795aSAndroid Build Coastguard Worker $(call _java-resources,$(1),c) 2938*9e94795aSAndroid Build Coastguard Workerendef 2939*9e94795aSAndroid Build Coastguard Worker 2940*9e94795aSAndroid Build Coastguard Workerdefine _java-resources 2941*9e94795aSAndroid Build Coastguard Worker$(call dump-words-to-file, $(PRIVATE_EXTRA_JAR_ARGS), $(1).jar-arg-list) 2942*9e94795aSAndroid Build Coastguard Worker$(hide) $(JAR) $(2)f $(1) @$(1).jar-arg-list 2943*9e94795aSAndroid Build Coastguard Worker@rm -f $(1).jar-arg-list 2944*9e94795aSAndroid Build Coastguard Workerendef 2945*9e94795aSAndroid Build Coastguard Worker 2946*9e94795aSAndroid Build Coastguard Worker# Add resources (non .class files) from a jar to a package 2947*9e94795aSAndroid Build Coastguard Worker# $(1): the package file 2948*9e94795aSAndroid Build Coastguard Worker# $(2): the jar file 2949*9e94795aSAndroid Build Coastguard Worker# $(3): temporary directory 2950*9e94795aSAndroid Build Coastguard Workerdefine add-jar-resources-to-package 2951*9e94795aSAndroid Build Coastguard Worker rm -rf $(3) 2952*9e94795aSAndroid Build Coastguard Worker mkdir -p $(3) 2953*9e94795aSAndroid Build Coastguard Worker zipinfo -1 $(2) > /dev/null 2954*9e94795aSAndroid Build Coastguard Worker unzip -qo $(2) -d $(3) $$(zipinfo -1 $(2) | grep -v -E "\.class$$") 2955*9e94795aSAndroid Build Coastguard Worker $(JAR) uf $(1) $(call jar-args-sorted-files-in-directory,$(3)) 2956*9e94795aSAndroid Build Coastguard Workerendef 2957*9e94795aSAndroid Build Coastguard Worker 2958*9e94795aSAndroid Build Coastguard Worker# $(1): the output resources jar. 2959*9e94795aSAndroid Build Coastguard Worker# $(2): the input jar 2960*9e94795aSAndroid Build Coastguard Workerdefine extract-resources-jar 2961*9e94795aSAndroid Build Coastguard Worker $(ZIP2ZIP) -i $(2) -o $(1) -x '**/*.class' -x '**/*/' 2962*9e94795aSAndroid Build Coastguard Workerendef 2963*9e94795aSAndroid Build Coastguard Worker 2964*9e94795aSAndroid Build Coastguard Worker# Sign a package using the specified key/cert. 2965*9e94795aSAndroid Build Coastguard Worker# 2966*9e94795aSAndroid Build Coastguard Workerdefine sign-package 2967*9e94795aSAndroid Build Coastguard Worker$(call sign-package-arg,$@) 2968*9e94795aSAndroid Build Coastguard Workerendef 2969*9e94795aSAndroid Build Coastguard Worker 2970*9e94795aSAndroid Build Coastguard Worker# $(1): the package file we are signing. 2971*9e94795aSAndroid Build Coastguard Workerdefine sign-package-arg 2972*9e94795aSAndroid Build Coastguard Worker$(hide) mv $(1) $(1).unsigned 2973*9e94795aSAndroid Build Coastguard Worker$(hide) $(JAVA) -Djava.library.path=$$(dirname $(SIGNAPK_JNI_LIBRARY_PATH)) -jar $(SIGNAPK_JAR) \ 2974*9e94795aSAndroid Build Coastguard Worker $(if $(strip $(PRIVATE_CERTIFICATE_LINEAGE)), --lineage $(PRIVATE_CERTIFICATE_LINEAGE)) \ 2975*9e94795aSAndroid Build Coastguard Worker $(if $(strip $(PRIVATE_ROTATION_MIN_SDK_VERSION)), --rotation-min-sdk-version $(PRIVATE_ROTATION_MIN_SDK_VERSION)) \ 2976*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_CERTIFICATE) $(PRIVATE_PRIVATE_KEY) \ 2977*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_ADDITIONAL_CERTIFICATES) $(1).unsigned $(1).signed 2978*9e94795aSAndroid Build Coastguard Worker$(hide) mv $(1).signed $(1) 2979*9e94795aSAndroid Build Coastguard Workerendef 2980*9e94795aSAndroid Build Coastguard Worker 2981*9e94795aSAndroid Build Coastguard Worker# Align STORED entries of a package on 4-byte boundaries to make them easier to mmap. 2982*9e94795aSAndroid Build Coastguard Worker# 2983*9e94795aSAndroid Build Coastguard Workerdefine align-package 2984*9e94795aSAndroid Build Coastguard Worker$(hide) if ! $(ZIPALIGN) -c -p 4 $@ >/dev/null ; then \ 2985*9e94795aSAndroid Build Coastguard Worker mv $@ $@.unaligned; \ 2986*9e94795aSAndroid Build Coastguard Worker $(ZIPALIGN) \ 2987*9e94795aSAndroid Build Coastguard Worker -f \ 2988*9e94795aSAndroid Build Coastguard Worker -p \ 2989*9e94795aSAndroid Build Coastguard Worker 4 \ 2990*9e94795aSAndroid Build Coastguard Worker $@.unaligned $@.aligned; \ 2991*9e94795aSAndroid Build Coastguard Worker mv $@.aligned $@; \ 2992*9e94795aSAndroid Build Coastguard Worker fi 2993*9e94795aSAndroid Build Coastguard Workerendef 2994*9e94795aSAndroid Build Coastguard Worker 2995*9e94795aSAndroid Build Coastguard Worker# Verifies ZIP alignment of a package. 2996*9e94795aSAndroid Build Coastguard Worker# 2997*9e94795aSAndroid Build Coastguard Workerdefine check-package-alignment 2998*9e94795aSAndroid Build Coastguard Worker$(hide) if ! $(ZIPALIGN) -c -p 4 $@ >/dev/null ; then \ 2999*9e94795aSAndroid Build Coastguard Worker $(call echo-error,$@,Improper package alignment); \ 3000*9e94795aSAndroid Build Coastguard Worker exit 1; \ 3001*9e94795aSAndroid Build Coastguard Worker fi 3002*9e94795aSAndroid Build Coastguard Workerendef 3003*9e94795aSAndroid Build Coastguard Worker 3004*9e94795aSAndroid Build Coastguard Worker# Compress a package using the standard gzip algorithm. 3005*9e94795aSAndroid Build Coastguard Workerdefine compress-package 3006*9e94795aSAndroid Build Coastguard Worker$(hide) \ 3007*9e94795aSAndroid Build Coastguard Worker mv $@ $@.uncompressed; \ 3008*9e94795aSAndroid Build Coastguard Worker $(GZIP) -9 -c $@.uncompressed > $@.compressed; \ 3009*9e94795aSAndroid Build Coastguard Worker rm -f $@.uncompressed; \ 3010*9e94795aSAndroid Build Coastguard Worker mv $@.compressed $@; 3011*9e94795aSAndroid Build Coastguard Workerendef 3012*9e94795aSAndroid Build Coastguard Worker 3013*9e94795aSAndroid Build Coastguard Workerifeq ($(HOST_OS),linux) 3014*9e94795aSAndroid Build Coastguard Worker# Runs appcompat and store logs in $(PRODUCT_OUT)/appcompat 3015*9e94795aSAndroid Build Coastguard Workerdefine extract-package 3016*9e94795aSAndroid Build Coastguard Worker$(AAPT2) dump resources $@ | awk -F ' |=' '/^Package/{print $$3; exit}' >> $(PRODUCT_OUT)/appcompat/$(PRIVATE_MODULE).log && 3017*9e94795aSAndroid Build Coastguard Workerendef 3018*9e94795aSAndroid Build Coastguard Workerdefine appcompat-header 3019*9e94795aSAndroid Build Coastguard Worker$(hide) \ 3020*9e94795aSAndroid Build Coastguard Worker mkdir -p $(PRODUCT_OUT)/appcompat && \ 3021*9e94795aSAndroid Build Coastguard Worker rm -f $(PRODUCT_OUT)/appcompat/$(PRIVATE_MODULE).log && \ 3022*9e94795aSAndroid Build Coastguard Worker echo -n "Package name: " >> $(PRODUCT_OUT)/appcompat/$(PRIVATE_MODULE).log && \ 3023*9e94795aSAndroid Build Coastguard Worker $(extract-package) \ 3024*9e94795aSAndroid Build Coastguard Worker echo "Module name in Android tree: $(PRIVATE_MODULE)" >> $(PRODUCT_OUT)/appcompat/$(PRIVATE_MODULE).log && \ 3025*9e94795aSAndroid Build Coastguard Worker echo "Local path in Android tree: $(PRIVATE_PATH)" >> $(PRODUCT_OUT)/appcompat/$(PRIVATE_MODULE).log && \ 3026*9e94795aSAndroid Build Coastguard Worker echo "Install path: $(patsubst $(PRODUCT_OUT)/%,%,$(PRIVATE_INSTALLED_MODULE))" >> $(PRODUCT_OUT)/appcompat/$(PRIVATE_MODULE).log && \ 3027*9e94795aSAndroid Build Coastguard Worker echo >> $(PRODUCT_OUT)/appcompat/$(PRIVATE_MODULE).log 3028*9e94795aSAndroid Build Coastguard Workerendef 3029*9e94795aSAndroid Build Coastguard WorkerART_VERIDEX_APPCOMPAT:=$(HOST_OUT)/bin/appcompat 3030*9e94795aSAndroid Build Coastguard Workerdefine run-appcompat 3031*9e94795aSAndroid Build Coastguard Worker$(hide) \ 3032*9e94795aSAndroid Build Coastguard Worker echo "appcompat output:" >> $(PRODUCT_OUT)/appcompat/$(PRIVATE_MODULE).log && \ 3033*9e94795aSAndroid Build Coastguard Worker ANDROID_LOG_TAGS="*:e" $(ART_VERIDEX_APPCOMPAT) --dex-file=$@ 2>&1 >> $(PRODUCT_OUT)/appcompat/$(PRIVATE_MODULE).log 3034*9e94795aSAndroid Build Coastguard Workerendef 3035*9e94795aSAndroid Build Coastguard Workerappcompat-files = \ 3036*9e94795aSAndroid Build Coastguard Worker $(AAPT2) \ 3037*9e94795aSAndroid Build Coastguard Worker $(ART_VERIDEX_APPCOMPAT) \ 3038*9e94795aSAndroid Build Coastguard Workerelse 3039*9e94795aSAndroid Build Coastguard Workerappcompat-header = 3040*9e94795aSAndroid Build Coastguard Workerrun-appcompat = 3041*9e94795aSAndroid Build Coastguard Workerappcompat-files = 3042*9e94795aSAndroid Build Coastguard Workerendif # HOST_OS == linux 3043*9e94795aSAndroid Build Coastguard Worker.KATI_READONLY: appcompat-header run-appcompat appcompat-files 3044*9e94795aSAndroid Build Coastguard Worker 3045*9e94795aSAndroid Build Coastguard Worker# Remove dynamic timestamps from packages 3046*9e94795aSAndroid Build Coastguard Worker# 3047*9e94795aSAndroid Build Coastguard Workerdefine remove-timestamps-from-package 3048*9e94795aSAndroid Build Coastguard Worker$(hide) $(ZIPTIME) $@ 3049*9e94795aSAndroid Build Coastguard Workerendef 3050*9e94795aSAndroid Build Coastguard Worker 3051*9e94795aSAndroid Build Coastguard Worker# Uncompress dex files embedded in an apk. 3052*9e94795aSAndroid Build Coastguard Worker# 3053*9e94795aSAndroid Build Coastguard Workerdefine uncompress-dexs 3054*9e94795aSAndroid Build Coastguard Worker if (zipinfo $@ '*.dex' 2>/dev/null | grep -v ' stor ' >/dev/null) ; then \ 3055*9e94795aSAndroid Build Coastguard Worker $(ZIP2ZIP) -i $@ -o $@.tmp -0 "classes*.dex" && \ 3056*9e94795aSAndroid Build Coastguard Worker mv -f $@.tmp $@ ; \ 3057*9e94795aSAndroid Build Coastguard Worker fi 3058*9e94795aSAndroid Build Coastguard Workerendef 3059*9e94795aSAndroid Build Coastguard Worker 3060*9e94795aSAndroid Build Coastguard Worker# Uncompress shared JNI libraries embedded in an apk. 3061*9e94795aSAndroid Build Coastguard Worker# 3062*9e94795aSAndroid Build Coastguard Workerdefine uncompress-prebuilt-embedded-jni-libs 3063*9e94795aSAndroid Build Coastguard Worker if (zipinfo $@ 'lib/*.so' 2>/dev/null | grep -v ' stor ' >/dev/null) ; then \ 3064*9e94795aSAndroid Build Coastguard Worker $(ZIP2ZIP) -i $@ -o $@.tmp -0 'lib/**/*.so' && mv -f $@.tmp $@ ; \ 3065*9e94795aSAndroid Build Coastguard Worker fi 3066*9e94795aSAndroid Build Coastguard Workerendef 3067*9e94795aSAndroid Build Coastguard Worker 3068*9e94795aSAndroid Build Coastguard Worker# Verifies shared JNI libraries and dex files in an apk are uncompressed. 3069*9e94795aSAndroid Build Coastguard Worker# 3070*9e94795aSAndroid Build Coastguard Workerdefine check-jni-dex-compression 3071*9e94795aSAndroid Build Coastguard Worker if (zipinfo $@ 'lib/*.so' '*.dex' 2>/dev/null | grep -v ' stor ' >/dev/null) ; then \ 3072*9e94795aSAndroid Build Coastguard Worker $(call echo-error,$@,Contains compressed JNI libraries and/or dex files); \ 3073*9e94795aSAndroid Build Coastguard Worker exit 1; \ 3074*9e94795aSAndroid Build Coastguard Worker fi 3075*9e94795aSAndroid Build Coastguard Workerendef 3076*9e94795aSAndroid Build Coastguard Worker 3077*9e94795aSAndroid Build Coastguard Worker# Remove unwanted shared JNI libraries embedded in an apk. 3078*9e94795aSAndroid Build Coastguard Worker# 3079*9e94795aSAndroid Build Coastguard Workerdefine remove-unwanted-prebuilt-embedded-jni-libs 3080*9e94795aSAndroid Build Coastguard Worker $(if $(PRIVATE_EMBEDDED_JNI_LIBS), \ 3081*9e94795aSAndroid Build Coastguard Worker $(ZIP2ZIP) -i $@ -o $@.tmp \ 3082*9e94795aSAndroid Build Coastguard Worker -x 'lib/**/*.so' $(addprefix -X ,$(PRIVATE_EMBEDDED_JNI_LIBS)) && \ 3083*9e94795aSAndroid Build Coastguard Worker mv -f $@.tmp $@) 3084*9e94795aSAndroid Build Coastguard Workerendef 3085*9e94795aSAndroid Build Coastguard Worker 3086*9e94795aSAndroid Build Coastguard Worker# TODO(joeo): If we can ever upgrade to post 3.81 make and get the 3087*9e94795aSAndroid Build Coastguard Worker# new prebuilt rules to work, we should change this to copy the 3088*9e94795aSAndroid Build Coastguard Worker# resources to the out directory and then copy the resources. 3089*9e94795aSAndroid Build Coastguard Worker 3090*9e94795aSAndroid Build Coastguard Worker# Note: we intentionally don't clean PRIVATE_CLASS_INTERMEDIATES_DIR 3091*9e94795aSAndroid Build Coastguard Worker# in transform-java-to-classes for the sake of vm-tests. 3092*9e94795aSAndroid Build Coastguard Workerdefine transform-host-java-to-package 3093*9e94795aSAndroid Build Coastguard Worker@echo "Host Java: $(PRIVATE_MODULE) ($(PRIVATE_CLASS_INTERMEDIATES_DIR))" 3094*9e94795aSAndroid Build Coastguard Worker$(call compile-java,$(HOST_JAVAC),$(PRIVATE_ALL_JAVA_LIBRARIES)) 3095*9e94795aSAndroid Build Coastguard Workerendef 3096*9e94795aSAndroid Build Coastguard Worker 3097*9e94795aSAndroid Build Coastguard Worker# Note: we intentionally don't clean PRIVATE_CLASS_INTERMEDIATES_DIR 3098*9e94795aSAndroid Build Coastguard Worker# in transform-java-to-classes for the sake of vm-tests. 3099*9e94795aSAndroid Build Coastguard Workerdefine transform-host-java-to-dalvik-package 3100*9e94795aSAndroid Build Coastguard Worker@echo "Dalvik Java: $(PRIVATE_MODULE) ($(PRIVATE_CLASS_INTERMEDIATES_DIR))" 3101*9e94795aSAndroid Build Coastguard Worker$(call compile-java,$(HOST_JAVAC),$(PRIVATE_ALL_JAVA_HEADER_LIBRARIES)) 3102*9e94795aSAndroid Build Coastguard Workerendef 3103*9e94795aSAndroid Build Coastguard Worker 3104*9e94795aSAndroid Build Coastguard Worker########################################################### 3105*9e94795aSAndroid Build Coastguard Worker## Commands for copying files 3106*9e94795aSAndroid Build Coastguard Worker########################################################### 3107*9e94795aSAndroid Build Coastguard Worker 3108*9e94795aSAndroid Build Coastguard Worker# Define a rule to copy a header. Used via $(eval) by copy_headers.make. 3109*9e94795aSAndroid Build Coastguard Worker# $(1): source header 3110*9e94795aSAndroid Build Coastguard Worker# $(2): destination header 3111*9e94795aSAndroid Build Coastguard Workerdefine copy-one-header 3112*9e94795aSAndroid Build Coastguard Worker$(2): $(1) 3113*9e94795aSAndroid Build Coastguard Worker @echo "Header: $$@" 3114*9e94795aSAndroid Build Coastguard Worker $$(copy-file-to-new-target-with-cp) 3115*9e94795aSAndroid Build Coastguard Workerendef 3116*9e94795aSAndroid Build Coastguard Worker 3117*9e94795aSAndroid Build Coastguard Worker# Define a rule to copy a file. For use via $(eval). 3118*9e94795aSAndroid Build Coastguard Worker# $(1): source file 3119*9e94795aSAndroid Build Coastguard Worker# $(2): destination file 3120*9e94795aSAndroid Build Coastguard Workerdefine copy-one-file 3121*9e94795aSAndroid Build Coastguard Worker$(2): $(1) 3122*9e94795aSAndroid Build Coastguard Worker @echo "Copy: $$@" 3123*9e94795aSAndroid Build Coastguard Worker $$(copy-file-to-target) 3124*9e94795aSAndroid Build Coastguard Workerendef 3125*9e94795aSAndroid Build Coastguard Worker 3126*9e94795aSAndroid Build Coastguard Worker# Define a rule to copy a license metadata file. For use via $(eval). 3127*9e94795aSAndroid Build Coastguard Worker# $(1): source license metadata file 3128*9e94795aSAndroid Build Coastguard Worker# $(2): destination license metadata file 3129*9e94795aSAndroid Build Coastguard Worker# $(3): built targets 3130*9e94795aSAndroid Build Coastguard Worker# $(4): installed targets 3131*9e94795aSAndroid Build Coastguard Workerdefine copy-one-license-metadata-file 3132*9e94795aSAndroid Build Coastguard Worker$(2): PRIVATE_BUILT=$(3) 3133*9e94795aSAndroid Build Coastguard Worker$(2): PRIVATE_INSTALLED=$(4) 3134*9e94795aSAndroid Build Coastguard Worker$(2): $(1) 3135*9e94795aSAndroid Build Coastguard Worker @echo "Copy: $$@" 3136*9e94795aSAndroid Build Coastguard Worker $$(call copy-license-metadata-file-to-target,$$(PRIVATE_BUILT),$$(PRIVATE_INSTALLED)) 3137*9e94795aSAndroid Build Coastguard Workerendef 3138*9e94795aSAndroid Build Coastguard Worker 3139*9e94795aSAndroid Build Coastguard Workerdefine copy-and-uncompress-dexs 3140*9e94795aSAndroid Build Coastguard Worker$(2): $(1) $(ZIPALIGN) $(ZIP2ZIP) 3141*9e94795aSAndroid Build Coastguard Worker @echo "Uncompress dexs in: $$@" 3142*9e94795aSAndroid Build Coastguard Worker $$(copy-file-to-target) 3143*9e94795aSAndroid Build Coastguard Worker $$(uncompress-dexs) 3144*9e94795aSAndroid Build Coastguard Worker $$(align-package) 3145*9e94795aSAndroid Build Coastguard Workerendef 3146*9e94795aSAndroid Build Coastguard Worker 3147*9e94795aSAndroid Build Coastguard Worker# Create copy pair for compatibility suite 3148*9e94795aSAndroid Build Coastguard Worker# Filter out $(LOCAL_INSTALLED_MODULE) to prevent overriding target 3149*9e94795aSAndroid Build Coastguard Worker# $(1): source path 3150*9e94795aSAndroid Build Coastguard Worker# $(2): destination path 3151*9e94795aSAndroid Build Coastguard Worker# The format of copy pair is src:dst 3152*9e94795aSAndroid Build Coastguard Workerdefine compat-copy-pair 3153*9e94795aSAndroid Build Coastguard Worker$(if $(filter-out $(2), $(LOCAL_INSTALLED_MODULE)), $(1):$(2)) 3154*9e94795aSAndroid Build Coastguard Workerendef 3155*9e94795aSAndroid Build Coastguard Worker 3156*9e94795aSAndroid Build Coastguard Worker# Create copy pair for $(1) $(2) 3157*9e94795aSAndroid Build Coastguard Worker# If $(2) is substring of $(3) do nothing. 3158*9e94795aSAndroid Build Coastguard Worker# $(1): source path 3159*9e94795aSAndroid Build Coastguard Worker# $(2): destination path 3160*9e94795aSAndroid Build Coastguard Worker# $(3): filter-out target 3161*9e94795aSAndroid Build Coastguard Worker# The format of copy pair is src:dst 3162*9e94795aSAndroid Build Coastguard Workerdefine filter-copy-pair 3163*9e94795aSAndroid Build Coastguard Worker$(if $(findstring $(2), $(3)),,$(1):$(2)) 3164*9e94795aSAndroid Build Coastguard Workerendef 3165*9e94795aSAndroid Build Coastguard Worker 3166*9e94795aSAndroid Build Coastguard Worker# Copies many files. 3167*9e94795aSAndroid Build Coastguard Worker# $(1): The files to copy. Each entry is a ':' separated src:dst pair 3168*9e94795aSAndroid Build Coastguard Worker# $(2): An optional directory to prepend to the destination 3169*9e94795aSAndroid Build Coastguard Worker# Evaluates to the list of the dst files (ie suitable for a dependency list) 3170*9e94795aSAndroid Build Coastguard Workerdefine copy-many-files 3171*9e94795aSAndroid Build Coastguard Worker$(foreach f, $(1), $(strip \ 3172*9e94795aSAndroid Build Coastguard Worker $(eval _cmf_tuple := $(subst :, ,$(f))) \ 3173*9e94795aSAndroid Build Coastguard Worker $(eval _cmf_src := $(word 1,$(_cmf_tuple))) \ 3174*9e94795aSAndroid Build Coastguard Worker $(eval _cmf_dest := $(word 2,$(_cmf_tuple))) \ 3175*9e94795aSAndroid Build Coastguard Worker $(if $(strip $(2)), \ 3176*9e94795aSAndroid Build Coastguard Worker $(eval _cmf_dest := $(patsubst %/,%,$(strip $(2)))/$(patsubst /%,%,$(_cmf_dest)))) \ 3177*9e94795aSAndroid Build Coastguard Worker $(if $(filter-out $(_cmf_src), $(_cmf_dest)), \ 3178*9e94795aSAndroid Build Coastguard Worker $(eval $(call copy-one-file,$(_cmf_src),$(_cmf_dest)))) \ 3179*9e94795aSAndroid Build Coastguard Worker $(_cmf_dest))) 3180*9e94795aSAndroid Build Coastguard Workerendef 3181*9e94795aSAndroid Build Coastguard Worker 3182*9e94795aSAndroid Build Coastguard Worker# Copy the file only if it's a well-formed init script file. For use via $(eval). 3183*9e94795aSAndroid Build Coastguard Worker# $(1): source file 3184*9e94795aSAndroid Build Coastguard Worker# $(2): destination file 3185*9e94795aSAndroid Build Coastguard Workerdefine copy-init-script-file-checked 3186*9e94795aSAndroid Build Coastguard Workerifdef TARGET_BUILD_UNBUNDLED 3187*9e94795aSAndroid Build Coastguard Worker# TODO (b/185624993): Remove the check on TARGET_BUILD_UNBUNDLED when host_init_verifier can run 3188*9e94795aSAndroid Build Coastguard Worker# without requiring the HIDL interface map. 3189*9e94795aSAndroid Build Coastguard Worker$(2): $(1) 3190*9e94795aSAndroid Build Coastguard Workerelse ifneq ($(HOST_OS),darwin) 3191*9e94795aSAndroid Build Coastguard Worker# Host init verifier doesn't exist on darwin. 3192*9e94795aSAndroid Build Coastguard Worker$(2): \ 3193*9e94795aSAndroid Build Coastguard Worker $(1) \ 3194*9e94795aSAndroid Build Coastguard Worker $(HOST_INIT_VERIFIER) \ 3195*9e94795aSAndroid Build Coastguard Worker $(call intermediates-dir-for,ETC,passwd_system)/passwd_system \ 3196*9e94795aSAndroid Build Coastguard Worker $(call intermediates-dir-for,ETC,passwd_system_ext)/passwd_system_ext \ 3197*9e94795aSAndroid Build Coastguard Worker $(call intermediates-dir-for,ETC,passwd_vendor)/passwd_vendor \ 3198*9e94795aSAndroid Build Coastguard Worker $(call intermediates-dir-for,ETC,passwd_odm)/passwd_odm \ 3199*9e94795aSAndroid Build Coastguard Worker $(call intermediates-dir-for,ETC,passwd_product)/passwd_product \ 3200*9e94795aSAndroid Build Coastguard Worker $(call intermediates-dir-for,ETC,plat_property_contexts)/plat_property_contexts \ 3201*9e94795aSAndroid Build Coastguard Worker $(call intermediates-dir-for,ETC,system_ext_property_contexts)/system_ext_property_contexts \ 3202*9e94795aSAndroid Build Coastguard Worker $(call intermediates-dir-for,ETC,product_property_contexts)/product_property_contexts \ 3203*9e94795aSAndroid Build Coastguard Worker $(call intermediates-dir-for,ETC,vendor_property_contexts)/vendor_property_contexts \ 3204*9e94795aSAndroid Build Coastguard Worker $(call intermediates-dir-for,ETC,odm_property_contexts)/odm_property_contexts 3205*9e94795aSAndroid Build Coastguard Worker $(hide) $(HOST_INIT_VERIFIER) \ 3206*9e94795aSAndroid Build Coastguard Worker -p $(call intermediates-dir-for,ETC,passwd_system)/passwd_system \ 3207*9e94795aSAndroid Build Coastguard Worker -p $(call intermediates-dir-for,ETC,passwd_system_ext)/passwd_system_ext \ 3208*9e94795aSAndroid Build Coastguard Worker -p $(call intermediates-dir-for,ETC,passwd_vendor)/passwd_vendor \ 3209*9e94795aSAndroid Build Coastguard Worker -p $(call intermediates-dir-for,ETC,passwd_odm)/passwd_odm \ 3210*9e94795aSAndroid Build Coastguard Worker -p $(call intermediates-dir-for,ETC,passwd_product)/passwd_product \ 3211*9e94795aSAndroid Build Coastguard Worker --property-contexts=$(call intermediates-dir-for,ETC,plat_property_contexts)/plat_property_contexts \ 3212*9e94795aSAndroid Build Coastguard Worker --property-contexts=$(call intermediates-dir-for,ETC,system_ext_property_contexts)/system_ext_property_contexts \ 3213*9e94795aSAndroid Build Coastguard Worker --property-contexts=$(call intermediates-dir-for,ETC,product_property_contexts)/product_property_contexts \ 3214*9e94795aSAndroid Build Coastguard Worker --property-contexts=$(call intermediates-dir-for,ETC,vendor_property_contexts)/vendor_property_contexts \ 3215*9e94795aSAndroid Build Coastguard Worker --property-contexts=$(call intermediates-dir-for,ETC,odm_property_contexts)/odm_property_contexts \ 3216*9e94795aSAndroid Build Coastguard Worker $$< 3217*9e94795aSAndroid Build Coastguard Workerelse 3218*9e94795aSAndroid Build Coastguard Worker$(2): $(1) 3219*9e94795aSAndroid Build Coastguard Workerendif 3220*9e94795aSAndroid Build Coastguard Worker @echo "Copy init script: $$@" 3221*9e94795aSAndroid Build Coastguard Worker $$(copy-file-to-target) 3222*9e94795aSAndroid Build Coastguard Workerendef 3223*9e94795aSAndroid Build Coastguard Worker 3224*9e94795aSAndroid Build Coastguard Worker# Copies many init script files and check they are well-formed. 3225*9e94795aSAndroid Build Coastguard Worker# $(1): The init script files to copy. Each entry is a ':' separated src:dst pair. 3226*9e94795aSAndroid Build Coastguard Workerdefine copy-many-init-script-files-checked 3227*9e94795aSAndroid Build Coastguard Worker$(foreach f, $(1), $(strip \ 3228*9e94795aSAndroid Build Coastguard Worker $(eval _cmf_tuple := $(subst :, ,$(f))) \ 3229*9e94795aSAndroid Build Coastguard Worker $(eval _cmf_src := $(word 1,$(_cmf_tuple))) \ 3230*9e94795aSAndroid Build Coastguard Worker $(eval _cmf_dest := $(word 2,$(_cmf_tuple))) \ 3231*9e94795aSAndroid Build Coastguard Worker $(eval $(call copy-init-script-file-checked,$(_cmf_src),$(_cmf_dest))))) 3232*9e94795aSAndroid Build Coastguard Workerendef 3233*9e94795aSAndroid Build Coastguard Worker 3234*9e94795aSAndroid Build Coastguard Worker# Copy the file only if it's a well-formed xml file. For use via $(eval). 3235*9e94795aSAndroid Build Coastguard Worker# $(1): source file 3236*9e94795aSAndroid Build Coastguard Worker# $(2): destination file, must end with .xml. 3237*9e94795aSAndroid Build Coastguard Workerdefine copy-xml-file-checked 3238*9e94795aSAndroid Build Coastguard Worker$(2): $(1) $(XMLLINT) 3239*9e94795aSAndroid Build Coastguard Worker @echo "Copy xml: $$@" 3240*9e94795aSAndroid Build Coastguard Worker $(hide) $(XMLLINT) $$< >/dev/null # Don't print the xml file to stdout. 3241*9e94795aSAndroid Build Coastguard Worker $$(copy-file-to-target) 3242*9e94795aSAndroid Build Coastguard Workerendef 3243*9e94795aSAndroid Build Coastguard Worker 3244*9e94795aSAndroid Build Coastguard Worker# Copies many xml files and check they are well-formed. 3245*9e94795aSAndroid Build Coastguard Worker# $(1): The xml files to copy. Each entry is a ':' separated src:dst pair. 3246*9e94795aSAndroid Build Coastguard Worker# Evaluates to the list of the dst files. (ie suitable for a dependency list.) 3247*9e94795aSAndroid Build Coastguard Workerdefine copy-many-xml-files-checked 3248*9e94795aSAndroid Build Coastguard Worker$(foreach f, $(1), $(strip \ 3249*9e94795aSAndroid Build Coastguard Worker $(eval _cmf_tuple := $(subst :, ,$(f))) \ 3250*9e94795aSAndroid Build Coastguard Worker $(eval _cmf_src := $(word 1,$(_cmf_tuple))) \ 3251*9e94795aSAndroid Build Coastguard Worker $(eval _cmf_dest := $(word 2,$(_cmf_tuple))) \ 3252*9e94795aSAndroid Build Coastguard Worker $(eval $(call copy-xml-file-checked,$(_cmf_src),$(_cmf_dest))) \ 3253*9e94795aSAndroid Build Coastguard Worker $(_cmf_dest))) 3254*9e94795aSAndroid Build Coastguard Workerendef 3255*9e94795aSAndroid Build Coastguard Worker 3256*9e94795aSAndroid Build Coastguard Worker# Copy the file only if it is a well-formed manifest file. For use viea $(eval) 3257*9e94795aSAndroid Build Coastguard Worker# $(1): source file 3258*9e94795aSAndroid Build Coastguard Worker# $(2): destination file 3259*9e94795aSAndroid Build Coastguard Workerdefine copy-vintf-manifest-checked 3260*9e94795aSAndroid Build Coastguard Worker$(2): $(1) $(HOST_OUT_EXECUTABLES)/assemble_vintf 3261*9e94795aSAndroid Build Coastguard Worker @echo "Copy xml: $$@" 3262*9e94795aSAndroid Build Coastguard Worker $(hide) mkdir -p "$$(dir $$@)" 3263*9e94795aSAndroid Build Coastguard Worker $(hide) VINTF_IGNORE_TARGET_FCM_VERSION=true\ 3264*9e94795aSAndroid Build Coastguard Worker $(HOST_OUT_EXECUTABLES)/assemble_vintf -i $$< -o $$@ 3265*9e94795aSAndroid Build Coastguard Workerendef 3266*9e94795aSAndroid Build Coastguard Worker 3267*9e94795aSAndroid Build Coastguard Worker# Copies many vintf manifest files checked. 3268*9e94795aSAndroid Build Coastguard Worker# $(1): The files to copy. Each entry is a ':' separated src:dst pair 3269*9e94795aSAndroid Build Coastguard Workerdefine copy-many-vintf-manifest-files-checked 3270*9e94795aSAndroid Build Coastguard Worker$(foreach f, $(1), $(strip \ 3271*9e94795aSAndroid Build Coastguard Worker $(eval _cmf_tuple := $(subst :, ,$(f))) \ 3272*9e94795aSAndroid Build Coastguard Worker $(eval _cmf_src := $(word 1,$(_cmf_tuple))) \ 3273*9e94795aSAndroid Build Coastguard Worker $(eval _cmf_dest := $(word 2,$(_cmf_tuple))) \ 3274*9e94795aSAndroid Build Coastguard Worker $(eval $(call copy-vintf-manifest-checked,$(_cmf_src),$(_cmf_dest))))) 3275*9e94795aSAndroid Build Coastguard Workerendef 3276*9e94795aSAndroid Build Coastguard Worker 3277*9e94795aSAndroid Build Coastguard Worker# Copy the file only if it's not an ELF file. For use via $(eval). 3278*9e94795aSAndroid Build Coastguard Worker# $(1): source file 3279*9e94795aSAndroid Build Coastguard Worker# $(2): destination file 3280*9e94795aSAndroid Build Coastguard Worker# $(3): message to print on error 3281*9e94795aSAndroid Build Coastguard Workerdefine copy-non-elf-file-checked 3282*9e94795aSAndroid Build Coastguard Worker$(eval check_non_elf_file_timestamp := \ 3283*9e94795aSAndroid Build Coastguard Worker $(call intermediates-dir-for,FAKE,check-non-elf-file-timestamps)/$(2).timestamp) 3284*9e94795aSAndroid Build Coastguard Worker$(check_non_elf_file_timestamp): $(1) $(LLVM_READOBJ) 3285*9e94795aSAndroid Build Coastguard Worker @echo "Check non-ELF: $$<" 3286*9e94795aSAndroid Build Coastguard Worker $(hide) mkdir -p "$$(dir $$@)" 3287*9e94795aSAndroid Build Coastguard Worker $(hide) rm -f "$$@" 3288*9e94795aSAndroid Build Coastguard Worker $(hide) \ 3289*9e94795aSAndroid Build Coastguard Worker if $(LLVM_READOBJ) -h "$$<" >/dev/null 2>&1; then \ 3290*9e94795aSAndroid Build Coastguard Worker $(call echo-error,$(2),$(3)); \ 3291*9e94795aSAndroid Build Coastguard Worker $(call echo-error,$(2),found ELF file: $$<); \ 3292*9e94795aSAndroid Build Coastguard Worker false; \ 3293*9e94795aSAndroid Build Coastguard Worker fi 3294*9e94795aSAndroid Build Coastguard Worker $(hide) touch "$$@" 3295*9e94795aSAndroid Build Coastguard Worker 3296*9e94795aSAndroid Build Coastguard Worker$(2): $(1) $(check_non_elf_file_timestamp) 3297*9e94795aSAndroid Build Coastguard Worker @echo "Copy non-ELF: $$@" 3298*9e94795aSAndroid Build Coastguard Worker $$(copy-file-to-target) 3299*9e94795aSAndroid Build Coastguard Worker 3300*9e94795aSAndroid Build Coastguard Workercheck-elf-prebuilt-product-copy-files: $(check_non_elf_file_timestamp) 3301*9e94795aSAndroid Build Coastguard Workerendef 3302*9e94795aSAndroid Build Coastguard Worker 3303*9e94795aSAndroid Build Coastguard Worker# The -t option to acp and the -p option to cp is 3304*9e94795aSAndroid Build Coastguard Worker# required for OSX. OSX has a ridiculous restriction 3305*9e94795aSAndroid Build Coastguard Worker# where it's an error for a .a file's modification time 3306*9e94795aSAndroid Build Coastguard Worker# to disagree with an internal timestamp, and this 3307*9e94795aSAndroid Build Coastguard Worker# macro is used to install .a files (among other things). 3308*9e94795aSAndroid Build Coastguard Worker 3309*9e94795aSAndroid Build Coastguard Worker# Copy a single file from one place to another, 3310*9e94795aSAndroid Build Coastguard Worker# preserving permissions and overwriting any existing 3311*9e94795aSAndroid Build Coastguard Worker# file. 3312*9e94795aSAndroid Build Coastguard Worker# When we used acp, it could not handle high resolution timestamps 3313*9e94795aSAndroid Build Coastguard Worker# on file systems like ext4. Because of that, '-t' option was disabled 3314*9e94795aSAndroid Build Coastguard Worker# and copy-file-to-target was identical to copy-file-to-new-target. 3315*9e94795aSAndroid Build Coastguard Worker# Keep the behavior until we audit and ensure that switching this back 3316*9e94795aSAndroid Build Coastguard Worker# won't break anything. 3317*9e94795aSAndroid Build Coastguard Workerdefine copy-file-to-target 3318*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 3319*9e94795aSAndroid Build Coastguard Worker$(hide) rm -f $@ 3320*9e94795aSAndroid Build Coastguard Worker$(hide) cp "$<" "$@" 3321*9e94795aSAndroid Build Coastguard Workerendef 3322*9e94795aSAndroid Build Coastguard Worker 3323*9e94795aSAndroid Build Coastguard Worker# Same as copy-file-to-target, but assume file is a licenes metadata file, 3324*9e94795aSAndroid Build Coastguard Worker# and append built from $(1) and installed from $(2). 3325*9e94795aSAndroid Build Coastguard Workerdefine copy-license-metadata-file-to-target 3326*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 3327*9e94795aSAndroid Build Coastguard Worker$(hide) rm -f $@ 3328*9e94795aSAndroid Build Coastguard Worker$(hide) cp "$<" "$@" $(strip \ 3329*9e94795aSAndroid Build Coastguard Worker $(foreach b,$(1), && (grep -F 'built: "'"$(b)"'"' "$@" >/dev/null || echo 'built: "'"$(b)"'"' >>"$@")) \ 3330*9e94795aSAndroid Build Coastguard Worker $(foreach i,$(2), && (grep -F 'installed: "'"$(i)"'"' "$@" >/dev/null || echo 'installed: "'"$(i)"'"' >>"$@")) \ 3331*9e94795aSAndroid Build Coastguard Worker) 3332*9e94795aSAndroid Build Coastguard Workerendef 3333*9e94795aSAndroid Build Coastguard Worker 3334*9e94795aSAndroid Build Coastguard Worker# The same as copy-file-to-target, but use the local 3335*9e94795aSAndroid Build Coastguard Worker# cp command instead of acp. 3336*9e94795aSAndroid Build Coastguard Workerdefine copy-file-to-target-with-cp 3337*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 3338*9e94795aSAndroid Build Coastguard Worker$(hide) rm -f $@ 3339*9e94795aSAndroid Build Coastguard Worker$(hide) cp -p "$<" "$@" 3340*9e94795aSAndroid Build Coastguard Workerendef 3341*9e94795aSAndroid Build Coastguard Worker 3342*9e94795aSAndroid Build Coastguard Worker# The same as copy-file-to-target, but don't preserve 3343*9e94795aSAndroid Build Coastguard Worker# the old modification time. 3344*9e94795aSAndroid Build Coastguard Workerdefine copy-file-to-new-target 3345*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 3346*9e94795aSAndroid Build Coastguard Worker$(hide) rm -f $@ 3347*9e94795aSAndroid Build Coastguard Worker$(hide) cp $< $@ 3348*9e94795aSAndroid Build Coastguard Workerendef 3349*9e94795aSAndroid Build Coastguard Worker 3350*9e94795aSAndroid Build Coastguard Worker# The same as copy-file-to-new-target, but use the local 3351*9e94795aSAndroid Build Coastguard Worker# cp command instead of acp. 3352*9e94795aSAndroid Build Coastguard Workerdefine copy-file-to-new-target-with-cp 3353*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 3354*9e94795aSAndroid Build Coastguard Worker$(hide) rm -f $@ 3355*9e94795aSAndroid Build Coastguard Worker$(hide) cp $< $@ 3356*9e94795aSAndroid Build Coastguard Workerendef 3357*9e94795aSAndroid Build Coastguard Worker 3358*9e94795aSAndroid Build Coastguard Worker# The same as copy-file-to-new-target, but preserve symlinks. Symlinks are 3359*9e94795aSAndroid Build Coastguard Worker# converted to absolute to not break. 3360*9e94795aSAndroid Build Coastguard Workerdefine copy-file-or-link-to-new-target 3361*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 3362*9e94795aSAndroid Build Coastguard Worker$(hide) rm -f $@ 3363*9e94795aSAndroid Build Coastguard Worker$(hide) if [ -h $< ]; then \ 3364*9e94795aSAndroid Build Coastguard Worker ln -s $$(realpath $<) $@; \ 3365*9e94795aSAndroid Build Coastguard Workerelse \ 3366*9e94795aSAndroid Build Coastguard Worker cp $< $@; \ 3367*9e94795aSAndroid Build Coastguard Workerfi 3368*9e94795aSAndroid Build Coastguard Workerendef 3369*9e94795aSAndroid Build Coastguard Worker 3370*9e94795aSAndroid Build Coastguard Worker# Copy a prebuilt file to a target location. 3371*9e94795aSAndroid Build Coastguard Workerdefine transform-prebuilt-to-target 3372*9e94795aSAndroid Build Coastguard Worker@echo "$($(PRIVATE_PREFIX)DISPLAY) Prebuilt: $(PRIVATE_MODULE) ($@)" 3373*9e94795aSAndroid Build Coastguard Worker$(copy-file-to-target) 3374*9e94795aSAndroid Build Coastguard Workerendef 3375*9e94795aSAndroid Build Coastguard Worker 3376*9e94795aSAndroid Build Coastguard Worker# Copy a prebuilt file to a target location, but preserve symlinks rather than 3377*9e94795aSAndroid Build Coastguard Worker# dereference them. 3378*9e94795aSAndroid Build Coastguard Workerdefine copy-or-link-prebuilt-to-target 3379*9e94795aSAndroid Build Coastguard Worker@echo "$($(PRIVATE_PREFIX)DISPLAY) Prebuilt: $(PRIVATE_MODULE) ($@)" 3380*9e94795aSAndroid Build Coastguard Worker$(copy-file-or-link-to-new-target) 3381*9e94795aSAndroid Build Coastguard Workerendef 3382*9e94795aSAndroid Build Coastguard Worker 3383*9e94795aSAndroid Build Coastguard Worker# Copy a list of files/directories to target location, with sub dir structure preserved. 3384*9e94795aSAndroid Build Coastguard Worker# For example $(HOST_OUT_EXECUTABLES)/aapt -> $(staging)/bin/aapt . 3385*9e94795aSAndroid Build Coastguard Worker# $(1): the source list of files/directories. 3386*9e94795aSAndroid Build Coastguard Worker# $(2): the path prefix to strip. In the above example it would be $(HOST_OUT). 3387*9e94795aSAndroid Build Coastguard Worker# $(3): the target location. 3388*9e94795aSAndroid Build Coastguard Workerdefine copy-files-with-structure 3389*9e94795aSAndroid Build Coastguard Worker$(foreach t,$(1),\ 3390*9e94795aSAndroid Build Coastguard Worker $(eval s := $(patsubst $(2)%,%,$(t)))\ 3391*9e94795aSAndroid Build Coastguard Worker $(hide) mkdir -p $(dir $(3)/$(s)); cp -Rf $(t) $(3)/$(s)$(newline)) 3392*9e94795aSAndroid Build Coastguard Workerendef 3393*9e94795aSAndroid Build Coastguard Worker 3394*9e94795aSAndroid Build Coastguard Worker# Define a rule to create a symlink to a file. 3395*9e94795aSAndroid Build Coastguard Worker# $(1): any dependencies 3396*9e94795aSAndroid Build Coastguard Worker# $(2): source (may be relative) 3397*9e94795aSAndroid Build Coastguard Worker# $(3): full path to destination 3398*9e94795aSAndroid Build Coastguard Workerdefine symlink-file 3399*9e94795aSAndroid Build Coastguard Worker$(eval $(_symlink-file)) 3400*9e94795aSAndroid Build Coastguard Worker$(eval $(call declare-license-metadata,$(3),,,,,,)) 3401*9e94795aSAndroid Build Coastguard Worker$(eval $(call declare-license-deps,$(3),$(1))) 3402*9e94795aSAndroid Build Coastguard Workerendef 3403*9e94795aSAndroid Build Coastguard Worker 3404*9e94795aSAndroid Build Coastguard Workerdefine _symlink-file 3405*9e94795aSAndroid Build Coastguard Worker$(3): $(1) 3406*9e94795aSAndroid Build Coastguard Worker @echo "Symlink: $$@ -> $(2)" 3407*9e94795aSAndroid Build Coastguard Worker @mkdir -p $$(dir $$@) 3408*9e94795aSAndroid Build Coastguard Worker @rm -rf $$@ 3409*9e94795aSAndroid Build Coastguard Worker $(hide) ln -sf $(2) $$@ 3410*9e94795aSAndroid Build Coastguard Workerendef 3411*9e94795aSAndroid Build Coastguard Worker 3412*9e94795aSAndroid Build Coastguard Worker# Copy an apk to a target location while removing classes*.dex 3413*9e94795aSAndroid Build Coastguard Worker# $(1): source file 3414*9e94795aSAndroid Build Coastguard Worker# $(2): destination file 3415*9e94795aSAndroid Build Coastguard Worker# $(3): LOCAL_STRIP_DEX, if non-empty then strip classes*.dex 3416*9e94795aSAndroid Build Coastguard Workerdefine dexpreopt-copy-jar 3417*9e94795aSAndroid Build Coastguard Worker$(2): $(1) 3418*9e94795aSAndroid Build Coastguard Worker @echo "Copy: $$@" 3419*9e94795aSAndroid Build Coastguard Worker $$(copy-file-to-target) 3420*9e94795aSAndroid Build Coastguard Worker $(if $(3),$$(call dexpreopt-remove-classes.dex,$$@)) 3421*9e94795aSAndroid Build Coastguard Workerendef 3422*9e94795aSAndroid Build Coastguard Worker 3423*9e94795aSAndroid Build Coastguard Worker# $(1): the .jar or .apk to remove classes.dex. Note that if all dex files 3424*9e94795aSAndroid Build Coastguard Worker# are uncompressed in the archive, then dexopt will not do a copy of the dex 3425*9e94795aSAndroid Build Coastguard Worker# files and we should not strip. 3426*9e94795aSAndroid Build Coastguard Workerdefine dexpreopt-remove-classes.dex 3427*9e94795aSAndroid Build Coastguard Worker$(hide) if (zipinfo $1 '*.dex' 2>/dev/null | grep -v ' stor ' >/dev/null) ; then \ 3428*9e94795aSAndroid Build Coastguard Workerzip --quiet --delete $(1) classes.dex; \ 3429*9e94795aSAndroid Build Coastguard Workerdex_index=2; \ 3430*9e94795aSAndroid Build Coastguard Workerwhile zip --quiet --delete $(1) classes$${dex_index}.dex > /dev/null; do \ 3431*9e94795aSAndroid Build Coastguard Worker let dex_index=dex_index+1; \ 3432*9e94795aSAndroid Build Coastguard Workerdone \ 3433*9e94795aSAndroid Build Coastguard Workerfi 3434*9e94795aSAndroid Build Coastguard Workerendef 3435*9e94795aSAndroid Build Coastguard Worker 3436*9e94795aSAndroid Build Coastguard Worker# Copy an unstripped binary to the symbols directory while also extracting 3437*9e94795aSAndroid Build Coastguard Worker# a hash mapping to the mapping directory. 3438*9e94795aSAndroid Build Coastguard Worker# $(1): unstripped intermediates file 3439*9e94795aSAndroid Build Coastguard Worker# $(2): path in symbols directory 3440*9e94795aSAndroid Build Coastguard Workerdefine copy-unstripped-elf-file-with-mapping 3441*9e94795aSAndroid Build Coastguard Worker$(call _copy-symbols-file-with-mapping,$(1),$(2),\ 3442*9e94795aSAndroid Build Coastguard Worker elf,$(patsubst $(TARGET_OUT_UNSTRIPPED)/%,$(call intermediates-dir-for,PACKAGING,elf_symbol_mapping)/%,$(2).textproto)) 3443*9e94795aSAndroid Build Coastguard Workerendef 3444*9e94795aSAndroid Build Coastguard Worker 3445*9e94795aSAndroid Build Coastguard Worker# Copy an R8 dictionary to the packaging directory while also extracting 3446*9e94795aSAndroid Build Coastguard Worker# a hash mapping to the mapping directory. 3447*9e94795aSAndroid Build Coastguard Worker# $(1): unstripped intermediates file 3448*9e94795aSAndroid Build Coastguard Worker# $(2): path in packaging directory 3449*9e94795aSAndroid Build Coastguard Worker# $(3): path in mappings packaging directory 3450*9e94795aSAndroid Build Coastguard Workerdefine copy-r8-dictionary-file-with-mapping 3451*9e94795aSAndroid Build Coastguard Worker$(call _copy-symbols-file-with-mapping,$(1),$(2),r8,$(3)) 3452*9e94795aSAndroid Build Coastguard Workerendef 3453*9e94795aSAndroid Build Coastguard Worker 3454*9e94795aSAndroid Build Coastguard Worker# Copy an unstripped binary or R8 dictionary to the symbols directory 3455*9e94795aSAndroid Build Coastguard Worker# while also extracting a hash mapping to the mapping directory. 3456*9e94795aSAndroid Build Coastguard Worker# $(1): unstripped intermediates file 3457*9e94795aSAndroid Build Coastguard Worker# $(2): path in symbols directory 3458*9e94795aSAndroid Build Coastguard Worker# $(3): file type (elf or r8) 3459*9e94795aSAndroid Build Coastguard Worker# $(4): path in the mappings directory 3460*9e94795aSAndroid Build Coastguard Worker# 3461*9e94795aSAndroid Build Coastguard Worker# Regarding the restats at the end: I think you should only need to use KATI_RESTAT on $(2), but 3462*9e94795aSAndroid Build Coastguard Worker# there appears to be a bug in kati where it was not adding restat=true in the ninja file unless we 3463*9e94795aSAndroid Build Coastguard Worker# also added 4 to KATI_RESTAT. 3464*9e94795aSAndroid Build Coastguard Workerdefine _copy-symbols-file-with-mapping 3465*9e94795aSAndroid Build Coastguard Worker$(2): .KATI_IMPLICIT_OUTPUTS := $(4) 3466*9e94795aSAndroid Build Coastguard Worker$(2): $(SYMBOLS_MAP) 3467*9e94795aSAndroid Build Coastguard Worker$(2): $(1) 3468*9e94795aSAndroid Build Coastguard Worker @echo "Copy symbols with mapping: $$@" 3469*9e94795aSAndroid Build Coastguard Worker $$(copy-file-to-target) 3470*9e94795aSAndroid Build Coastguard Worker $(SYMBOLS_MAP) -$(strip $(3)) $(2) -write_if_changed $(4) 3471*9e94795aSAndroid Build Coastguard Worker.KATI_RESTAT: $(2) 3472*9e94795aSAndroid Build Coastguard Worker.KATI_RESTAT: $(4) 3473*9e94795aSAndroid Build Coastguard Workerendef 3474*9e94795aSAndroid Build Coastguard Worker 3475*9e94795aSAndroid Build Coastguard Worker 3476*9e94795aSAndroid Build Coastguard Worker########################################################### 3477*9e94795aSAndroid Build Coastguard Worker## Commands to call R8 3478*9e94795aSAndroid Build Coastguard Worker########################################################### 3479*9e94795aSAndroid Build Coastguard Worker 3480*9e94795aSAndroid Build Coastguard Worker# Use --debug flag for eng builds by default 3481*9e94795aSAndroid Build Coastguard Workerifeq (eng,$(TARGET_BUILD_VARIANT)) 3482*9e94795aSAndroid Build Coastguard WorkerR8_DEBUG_MODE := --debug 3483*9e94795aSAndroid Build Coastguard Workerelse 3484*9e94795aSAndroid Build Coastguard WorkerR8_DEBUG_MODE := 3485*9e94795aSAndroid Build Coastguard Workerendif 3486*9e94795aSAndroid Build Coastguard Worker 3487*9e94795aSAndroid Build Coastguard Workerdefine transform-jar-to-dex-r8 3488*9e94795aSAndroid Build Coastguard Worker@echo R8: $@ 3489*9e94795aSAndroid Build Coastguard Worker$(hide) rm -f $(PRIVATE_PROGUARD_DICTIONARY) 3490*9e94795aSAndroid Build Coastguard Worker$(hide) $(R8_WRAPPER) $(R8_COMMAND) \ 3491*9e94795aSAndroid Build Coastguard Worker -injars '$<' \ 3492*9e94795aSAndroid Build Coastguard Worker --min-api $(PRIVATE_MIN_SDK_VERSION) \ 3493*9e94795aSAndroid Build Coastguard Worker --no-data-resources \ 3494*9e94795aSAndroid Build Coastguard Worker --force-proguard-compatibility --output $(subst classes.dex,,$@) \ 3495*9e94795aSAndroid Build Coastguard Worker $(R8_DEBUG_MODE) \ 3496*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_PROGUARD_FLAGS) \ 3497*9e94795aSAndroid Build Coastguard Worker $(addprefix -injars , $(PRIVATE_EXTRA_INPUT_JAR)) \ 3498*9e94795aSAndroid Build Coastguard Worker $(PRIVATE_DX_FLAGS) \ 3499*9e94795aSAndroid Build Coastguard Worker -ignorewarnings 3500*9e94795aSAndroid Build Coastguard Worker$(hide) touch $(PRIVATE_PROGUARD_DICTIONARY) 3501*9e94795aSAndroid Build Coastguard Workerendef 3502*9e94795aSAndroid Build Coastguard Worker 3503*9e94795aSAndroid Build Coastguard Worker########################################################### 3504*9e94795aSAndroid Build Coastguard Worker## Stuff source generated from one-off tools 3505*9e94795aSAndroid Build Coastguard Worker########################################################### 3506*9e94795aSAndroid Build Coastguard Worker 3507*9e94795aSAndroid Build Coastguard Workerdefine transform-generated-source 3508*9e94795aSAndroid Build Coastguard Worker@echo "$($(PRIVATE_PREFIX)DISPLAY) Generated: $(PRIVATE_MODULE) <= $<" 3509*9e94795aSAndroid Build Coastguard Worker@mkdir -p $(dir $@) 3510*9e94795aSAndroid Build Coastguard Worker$(hide) $(PRIVATE_CUSTOM_TOOL) 3511*9e94795aSAndroid Build Coastguard Workerendef 3512*9e94795aSAndroid Build Coastguard Worker 3513*9e94795aSAndroid Build Coastguard Worker 3514*9e94795aSAndroid Build Coastguard Worker########################################################### 3515*9e94795aSAndroid Build Coastguard Worker## Assertions about attributes of the target 3516*9e94795aSAndroid Build Coastguard Worker########################################################### 3517*9e94795aSAndroid Build Coastguard Worker 3518*9e94795aSAndroid Build Coastguard Worker# $(1): The file to check 3519*9e94795aSAndroid Build Coastguard Workerdefine get-file-size 3520*9e94795aSAndroid Build Coastguard Workerstat -c "%s" "$(1)" | tr -d '\n' 3521*9e94795aSAndroid Build Coastguard Workerendef 3522*9e94795aSAndroid Build Coastguard Worker 3523*9e94795aSAndroid Build Coastguard Worker# $(1): The file(s) to check (often $@) 3524*9e94795aSAndroid Build Coastguard Worker# $(2): The partition size. 3525*9e94795aSAndroid Build Coastguard Workerdefine assert-max-image-size 3526*9e94795aSAndroid Build Coastguard Worker$(if $(2), \ 3527*9e94795aSAndroid Build Coastguard Worker size=$$(for i in $(1); do $(call get-file-size,$$i); echo +; done; echo 0); \ 3528*9e94795aSAndroid Build Coastguard Worker total=$$(( $$( echo "$$size" ) )); \ 3529*9e94795aSAndroid Build Coastguard Worker printname=$$(echo -n "$(1)" | tr " " +); \ 3530*9e94795aSAndroid Build Coastguard Worker maxsize=$$(($(2))); \ 3531*9e94795aSAndroid Build Coastguard Worker if [ "$$total" -gt "$$maxsize" ]; then \ 3532*9e94795aSAndroid Build Coastguard Worker echo "error: $$printname too large ($$total > $$maxsize)"; \ 3533*9e94795aSAndroid Build Coastguard Worker false; \ 3534*9e94795aSAndroid Build Coastguard Worker elif [ "$$total" -gt $$((maxsize - 32768)) ]; then \ 3535*9e94795aSAndroid Build Coastguard Worker echo "WARNING: $$printname approaching size limit ($$total now; limit $$maxsize)"; \ 3536*9e94795aSAndroid Build Coastguard Worker fi \ 3537*9e94795aSAndroid Build Coastguard Worker , \ 3538*9e94795aSAndroid Build Coastguard Worker true \ 3539*9e94795aSAndroid Build Coastguard Worker ) 3540*9e94795aSAndroid Build Coastguard Workerendef 3541*9e94795aSAndroid Build Coastguard Worker 3542*9e94795aSAndroid Build Coastguard Worker 3543*9e94795aSAndroid Build Coastguard Worker########################################################### 3544*9e94795aSAndroid Build Coastguard Worker## Define device-specific radio files 3545*9e94795aSAndroid Build Coastguard Worker########################################################### 3546*9e94795aSAndroid Build Coastguard WorkerINSTALLED_RADIOIMAGE_TARGET := 3547*9e94795aSAndroid Build Coastguard Worker 3548*9e94795aSAndroid Build Coastguard Worker# Copy a radio image file to the output location, and add it to 3549*9e94795aSAndroid Build Coastguard Worker# INSTALLED_RADIOIMAGE_TARGET. 3550*9e94795aSAndroid Build Coastguard Worker# $(1): filename 3551*9e94795aSAndroid Build Coastguard Workerdefine add-radio-file 3552*9e94795aSAndroid Build Coastguard Worker $(eval $(call add-radio-file-internal,$(1),$(notdir $(1)))) 3553*9e94795aSAndroid Build Coastguard Workerendef 3554*9e94795aSAndroid Build Coastguard Workerdefine add-radio-file-internal 3555*9e94795aSAndroid Build Coastguard WorkerINSTALLED_RADIOIMAGE_TARGET += $$(PRODUCT_OUT)/$(2) 3556*9e94795aSAndroid Build Coastguard Worker$$(PRODUCT_OUT)/$(2) : $$(LOCAL_PATH)/$(1) 3557*9e94795aSAndroid Build Coastguard Worker $$(transform-prebuilt-to-target) 3558*9e94795aSAndroid Build Coastguard Workerendef 3559*9e94795aSAndroid Build Coastguard Worker 3560*9e94795aSAndroid Build Coastguard Worker# Version of add-radio-file that also arranges for the version of the 3561*9e94795aSAndroid Build Coastguard Worker# file to be checked against the contents of 3562*9e94795aSAndroid Build Coastguard Worker# $(TARGET_BOARD_INFO_FILE). 3563*9e94795aSAndroid Build Coastguard Worker# $(1): filename 3564*9e94795aSAndroid Build Coastguard Worker# $(2): name of version variable in board-info (eg, "version-baseband") 3565*9e94795aSAndroid Build Coastguard Workerdefine add-radio-file-checked 3566*9e94795aSAndroid Build Coastguard Worker $(eval $(call add-radio-file-checked-internal,$(1),$(notdir $(1)),$(2))) 3567*9e94795aSAndroid Build Coastguard Workerendef 3568*9e94795aSAndroid Build Coastguard Workerdefine add-radio-file-checked-internal 3569*9e94795aSAndroid Build Coastguard WorkerINSTALLED_RADIOIMAGE_TARGET += $$(PRODUCT_OUT)/$(2) 3570*9e94795aSAndroid Build Coastguard WorkerBOARD_INFO_CHECK += $(3):$(LOCAL_PATH)/$(1) 3571*9e94795aSAndroid Build Coastguard Worker$$(PRODUCT_OUT)/$(2) : $$(LOCAL_PATH)/$(1) 3572*9e94795aSAndroid Build Coastguard Worker $$(transform-prebuilt-to-target) 3573*9e94795aSAndroid Build Coastguard Workerendef 3574*9e94795aSAndroid Build Coastguard Worker 3575*9e94795aSAndroid Build Coastguard Worker## Whether to build from source if prebuilt alternative exists 3576*9e94795aSAndroid Build Coastguard Worker########################################################### 3577*9e94795aSAndroid Build Coastguard Worker# $(1): module name 3578*9e94795aSAndroid Build Coastguard Worker# $(2): LOCAL_PATH 3579*9e94795aSAndroid Build Coastguard Worker# Expands to empty string if not from source. 3580*9e94795aSAndroid Build Coastguard Workerifeq (true,$(ANDROID_BUILD_FROM_SOURCE)) 3581*9e94795aSAndroid Build Coastguard Workerdefine if-build-from-source 3582*9e94795aSAndroid Build Coastguard Workertrue 3583*9e94795aSAndroid Build Coastguard Workerendef 3584*9e94795aSAndroid Build Coastguard Workerelse 3585*9e94795aSAndroid Build Coastguard Workerdefine if-build-from-source 3586*9e94795aSAndroid Build Coastguard Worker$(if $(filter $(ANDROID_NO_PREBUILT_MODULES),$(1))$(filter \ 3587*9e94795aSAndroid Build Coastguard Worker $(addsuffix %,$(ANDROID_NO_PREBUILT_PATHS)),$(2)),true) 3588*9e94795aSAndroid Build Coastguard Workerendef 3589*9e94795aSAndroid Build Coastguard Workerendif 3590*9e94795aSAndroid Build Coastguard Worker 3591*9e94795aSAndroid Build Coastguard Worker# Include makefile $(1) if build from source for module $(2) 3592*9e94795aSAndroid Build Coastguard Worker# $(1): the makefile to include 3593*9e94795aSAndroid Build Coastguard Worker# $(2): module name 3594*9e94795aSAndroid Build Coastguard Worker# $(3): LOCAL_PATH 3595*9e94795aSAndroid Build Coastguard Workerdefine include-if-build-from-source 3596*9e94795aSAndroid Build Coastguard Worker$(if $(call if-build-from-source,$(2),$(3)),$(eval include $(1))) 3597*9e94795aSAndroid Build Coastguard Workerendef 3598*9e94795aSAndroid Build Coastguard Worker 3599*9e94795aSAndroid Build Coastguard Worker# Return the arch for the source file of a prebuilt 3600*9e94795aSAndroid Build Coastguard Worker# Return "none" if no matching arch found and return empty 3601*9e94795aSAndroid Build Coastguard Worker# if the input is empty, so the result can be passed to 3602*9e94795aSAndroid Build Coastguard Worker# LOCAL_MODULE_TARGET_ARCH. 3603*9e94795aSAndroid Build Coastguard Worker# $(1) the list of archs supported by the prebuilt 3604*9e94795aSAndroid Build Coastguard Workerdefine get-prebuilt-src-arch 3605*9e94795aSAndroid Build Coastguard Worker$(strip $(if $(filter $(TARGET_ARCH),$(1)),$(TARGET_ARCH),\ 3606*9e94795aSAndroid Build Coastguard Worker $(if $(filter $(TARGET_2ND_ARCH),$(1)),$(TARGET_2ND_ARCH),$(if $(1),none)))) 3607*9e94795aSAndroid Build Coastguard Workerendef 3608*9e94795aSAndroid Build Coastguard Worker 3609*9e94795aSAndroid Build Coastguard Worker# ############################################################### 3610*9e94795aSAndroid Build Coastguard Worker# Set up statistics gathering 3611*9e94795aSAndroid Build Coastguard Worker# ############################################################### 3612*9e94795aSAndroid Build Coastguard WorkerSTATS.MODULE_TYPE := \ 3613*9e94795aSAndroid Build Coastguard Worker HOST_STATIC_LIBRARY \ 3614*9e94795aSAndroid Build Coastguard Worker HOST_SHARED_LIBRARY \ 3615*9e94795aSAndroid Build Coastguard Worker STATIC_LIBRARY \ 3616*9e94795aSAndroid Build Coastguard Worker SHARED_LIBRARY \ 3617*9e94795aSAndroid Build Coastguard Worker EXECUTABLE \ 3618*9e94795aSAndroid Build Coastguard Worker HOST_EXECUTABLE \ 3619*9e94795aSAndroid Build Coastguard Worker PACKAGE \ 3620*9e94795aSAndroid Build Coastguard Worker PHONY_PACKAGE \ 3621*9e94795aSAndroid Build Coastguard Worker HOST_PREBUILT \ 3622*9e94795aSAndroid Build Coastguard Worker PREBUILT \ 3623*9e94795aSAndroid Build Coastguard Worker MULTI_PREBUILT \ 3624*9e94795aSAndroid Build Coastguard Worker JAVA_LIBRARY \ 3625*9e94795aSAndroid Build Coastguard Worker STATIC_JAVA_LIBRARY \ 3626*9e94795aSAndroid Build Coastguard Worker HOST_JAVA_LIBRARY \ 3627*9e94795aSAndroid Build Coastguard Worker DROIDDOC \ 3628*9e94795aSAndroid Build Coastguard Worker COPY_HEADERS \ 3629*9e94795aSAndroid Build Coastguard Worker NATIVE_TEST \ 3630*9e94795aSAndroid Build Coastguard Worker NATIVE_BENCHMARK \ 3631*9e94795aSAndroid Build Coastguard Worker HOST_NATIVE_TEST \ 3632*9e94795aSAndroid Build Coastguard Worker FUZZ_TEST \ 3633*9e94795aSAndroid Build Coastguard Worker HOST_FUZZ_TEST \ 3634*9e94795aSAndroid Build Coastguard Worker STATIC_TEST_LIBRARY \ 3635*9e94795aSAndroid Build Coastguard Worker HOST_STATIC_TEST_LIBRARY \ 3636*9e94795aSAndroid Build Coastguard Worker NOTICE_FILE \ 3637*9e94795aSAndroid Build Coastguard Worker base_rules \ 3638*9e94795aSAndroid Build Coastguard Worker HEADER_LIBRARY \ 3639*9e94795aSAndroid Build Coastguard Worker HOST_TEST_CONFIG \ 3640*9e94795aSAndroid Build Coastguard Worker TARGET_TEST_CONFIG 3641*9e94795aSAndroid Build Coastguard Worker 3642*9e94795aSAndroid Build Coastguard Worker$(foreach s,$(STATS.MODULE_TYPE),$(eval STATS.MODULE_TYPE.$(s) :=)) 3643*9e94795aSAndroid Build Coastguard Workerdefine record-module-type 3644*9e94795aSAndroid Build Coastguard Worker$(strip $(if $(LOCAL_RECORDED_MODULE_TYPE),, 3645*9e94795aSAndroid Build Coastguard Worker $(if $(filter-out $(SOONG_ANDROID_MK),$(LOCAL_MODULE_MAKEFILE)), 3646*9e94795aSAndroid Build Coastguard Worker $(if $(filter $(1),$(STATS.MODULE_TYPE)), 3647*9e94795aSAndroid Build Coastguard Worker $(eval LOCAL_RECORDED_MODULE_TYPE := true) 3648*9e94795aSAndroid Build Coastguard Worker $(eval STATS.MODULE_TYPE.$(1) += 1), 3649*9e94795aSAndroid Build Coastguard Worker $(error Invalid module type: $(1)))))) 3650*9e94795aSAndroid Build Coastguard Workerendef 3651*9e94795aSAndroid Build Coastguard Worker 3652*9e94795aSAndroid Build Coastguard Worker########################################################### 3653*9e94795aSAndroid Build Coastguard Worker## Compatibility suite tools 3654*9e94795aSAndroid Build Coastguard Worker########################################################### 3655*9e94795aSAndroid Build Coastguard Worker 3656*9e94795aSAndroid Build Coastguard Worker# Return a list of output directories for a given suite and the current LOCAL_MODULE. 3657*9e94795aSAndroid Build Coastguard Worker# Can be passed a subdirectory to use for the common testcase directory. 3658*9e94795aSAndroid Build Coastguard Workerdefine compatibility_suite_dirs 3659*9e94795aSAndroid Build Coastguard Worker $(strip \ 3660*9e94795aSAndroid Build Coastguard Worker $(if $(COMPATIBILITY_TESTCASES_OUT_$(1)), \ 3661*9e94795aSAndroid Build Coastguard Worker $(if $(COMPATIBILITY_TESTCASES_OUT_INCLUDE_MODULE_FOLDER_$(1))$(LOCAL_COMPATIBILITY_PER_TESTCASE_DIRECTORY),\ 3662*9e94795aSAndroid Build Coastguard Worker $(COMPATIBILITY_TESTCASES_OUT_$(1))/$(LOCAL_MODULE)$(2),\ 3663*9e94795aSAndroid Build Coastguard Worker $(COMPATIBILITY_TESTCASES_OUT_$(1)))) \ 3664*9e94795aSAndroid Build Coastguard Worker $($(my_prefix)OUT_TESTCASES)/$(LOCAL_MODULE)$(2)) 3665*9e94795aSAndroid Build Coastguard Workerendef 3666*9e94795aSAndroid Build Coastguard Worker 3667*9e94795aSAndroid Build Coastguard Worker# For each suite: 3668*9e94795aSAndroid Build Coastguard Worker# 1. Copy the files to the many suite output directories. 3669*9e94795aSAndroid Build Coastguard Worker# And for test config files, we'll check the .xml is well-formed before copy. 3670*9e94795aSAndroid Build Coastguard Worker# 2. Add all the files to each suite's dependent files list. 3671*9e94795aSAndroid Build Coastguard Worker# 3. Do the dependency addition to my_all_targets. 3672*9e94795aSAndroid Build Coastguard Worker# 4. Save the module name to COMPATIBILITY.$(suite).MODULES for each suite. 3673*9e94795aSAndroid Build Coastguard Worker# 5. Collect files to dist to ALL_COMPATIBILITY_DIST_FILES. 3674*9e94795aSAndroid Build Coastguard Worker# Requires for each suite: use my_compat_dist_config_$(suite) to define the test config. 3675*9e94795aSAndroid Build Coastguard Worker# and use my_compat_dist_$(suite) to define the others. 3676*9e94795aSAndroid Build Coastguard Workerdefine create-suite-dependencies 3677*9e94795aSAndroid Build Coastguard Worker$(foreach suite, $(LOCAL_COMPATIBILITY_SUITE), \ 3678*9e94795aSAndroid Build Coastguard Worker $(eval $(if $(strip $(module_license_metadata)),\ 3679*9e94795aSAndroid Build Coastguard Worker $$(foreach f,$$(my_compat_dist_$(suite)),$$(call declare-copy-target-license-metadata,$$(call word-colon,2,$$(f)),$$(call word-colon,1,$$(f)))),\ 3680*9e94795aSAndroid Build Coastguard Worker $$(eval my_test_data += $$(my_compat_dist_$(suite))) \ 3681*9e94795aSAndroid Build Coastguard Worker )) \ 3682*9e94795aSAndroid Build Coastguard Worker $(eval $(if $(strip $(module_license_metadata)),\ 3683*9e94795aSAndroid Build Coastguard Worker $$(foreach f,$$(my_compat_dist_config_$(suite)),$$(call declare-copy-target-license-metadata,$$(call word-colon,2,$$(f)),$$(call word-colon,1,$$(f)))),\ 3684*9e94795aSAndroid Build Coastguard Worker $$(eval my_test_config += $$(my_compat_dist_config_$(suite))) \ 3685*9e94795aSAndroid Build Coastguard Worker )) \ 3686*9e94795aSAndroid Build Coastguard Worker $(if $(filter $(suite),$(ALL_COMPATIBILITY_SUITES)),,\ 3687*9e94795aSAndroid Build Coastguard Worker $(eval ALL_COMPATIBILITY_SUITES += $(suite)) \ 3688*9e94795aSAndroid Build Coastguard Worker $(eval COMPATIBILITY.$(suite).FILES :=) \ 3689*9e94795aSAndroid Build Coastguard Worker $(eval COMPATIBILITY.$(suite).MODULES :=) \ 3690*9e94795aSAndroid Build Coastguard Worker $(eval COMPATIBILITY.$(suite).API_MAP_FILES :=)) \ 3691*9e94795aSAndroid Build Coastguard Worker $(eval COMPATIBILITY.$(suite).FILES += \ 3692*9e94795aSAndroid Build Coastguard Worker $$(foreach f,$$(my_compat_dist_$(suite)),$$(call word-colon,2,$$(f))) \ 3693*9e94795aSAndroid Build Coastguard Worker $$(foreach f,$$(my_compat_dist_config_$(suite)),$$(call word-colon,2,$$(f))) \ 3694*9e94795aSAndroid Build Coastguard Worker $$(my_compat_dist_test_data_$(suite))) \ 3695*9e94795aSAndroid Build Coastguard Worker $(eval COMPATIBILITY.$(suite).ARCH_DIRS.$(my_register_name) := $(my_compat_module_arch_dir_$(suite).$(my_register_name))) \ 3696*9e94795aSAndroid Build Coastguard Worker $(eval COMPATIBILITY.$(suite).API_MAP_FILES += $$(my_compat_api_map_$(suite))) \ 3697*9e94795aSAndroid Build Coastguard Worker $(eval COMPATIBILITY.$(suite).SOONG_INSTALLED_COMPATIBILITY_SUPPORT_FILES += $(LOCAL_SOONG_INSTALLED_COMPATIBILITY_SUPPORT_FILES)) \ 3698*9e94795aSAndroid Build Coastguard Worker $(eval ALL_COMPATIBILITY_DIST_FILES += $$(my_compat_dist_$(suite))) \ 3699*9e94795aSAndroid Build Coastguard Worker $(eval COMPATIBILITY.$(suite).MODULES += $$(my_register_name))) \ 3700*9e94795aSAndroid Build Coastguard Worker$(eval $(my_all_targets) : \ 3701*9e94795aSAndroid Build Coastguard Worker $(sort $(foreach suite,$(LOCAL_COMPATIBILITY_SUITE), \ 3702*9e94795aSAndroid Build Coastguard Worker $(foreach f,$(my_compat_dist_$(suite)), $(call word-colon,2,$(f))))) \ 3703*9e94795aSAndroid Build Coastguard Worker $(call copy-many-xml-files-checked, \ 3704*9e94795aSAndroid Build Coastguard Worker $(sort $(foreach suite,$(LOCAL_COMPATIBILITY_SUITE),$(my_compat_dist_config_$(suite)))))) 3705*9e94795aSAndroid Build Coastguard Workerendef 3706*9e94795aSAndroid Build Coastguard Worker 3707*9e94795aSAndroid Build Coastguard Worker########################################################### 3708*9e94795aSAndroid Build Coastguard Worker## Path Cleaning 3709*9e94795aSAndroid Build Coastguard Worker########################################################### 3710*9e94795aSAndroid Build Coastguard Worker 3711*9e94795aSAndroid Build Coastguard Worker# Remove "dir .." combinations (but keep ".. ..") 3712*9e94795aSAndroid Build Coastguard Worker# 3713*9e94795aSAndroid Build Coastguard Worker# $(1): The expanded path, where / is converted to ' ' to work with $(word) 3714*9e94795aSAndroid Build Coastguard Workerdefine _clean-path-strip-dotdot 3715*9e94795aSAndroid Build Coastguard Worker$(strip \ 3716*9e94795aSAndroid Build Coastguard Worker $(if $(word 2,$(1)), 3717*9e94795aSAndroid Build Coastguard Worker $(if $(call streq,$(word 2,$(1)),..), 3718*9e94795aSAndroid Build Coastguard Worker $(if $(call streq,$(word 1,$(1)),..), 3719*9e94795aSAndroid Build Coastguard Worker $(word 1,$(1)) $(call _clean-path-strip-dotdot,$(wordlist 2,$(words $(1)),$(1))) 3720*9e94795aSAndroid Build Coastguard Worker , 3721*9e94795aSAndroid Build Coastguard Worker $(call _clean-path-strip-dotdot,$(wordlist 3,$(words $(1)),$(1))) 3722*9e94795aSAndroid Build Coastguard Worker ) 3723*9e94795aSAndroid Build Coastguard Worker , 3724*9e94795aSAndroid Build Coastguard Worker $(word 1,$(1)) $(call _clean-path-strip-dotdot,$(wordlist 2,$(words $(1)),$(1))) 3725*9e94795aSAndroid Build Coastguard Worker ) 3726*9e94795aSAndroid Build Coastguard Worker , 3727*9e94795aSAndroid Build Coastguard Worker $(1) 3728*9e94795aSAndroid Build Coastguard Worker ) 3729*9e94795aSAndroid Build Coastguard Worker) 3730*9e94795aSAndroid Build Coastguard Workerendef 3731*9e94795aSAndroid Build Coastguard Worker 3732*9e94795aSAndroid Build Coastguard Worker# Remove any leading .. from the path (in case of /..) 3733*9e94795aSAndroid Build Coastguard Worker# 3734*9e94795aSAndroid Build Coastguard Worker# Should only be called if the original path started with / 3735*9e94795aSAndroid Build Coastguard Worker# $(1): The expanded path, where / is converted to ' ' to work with $(word) 3736*9e94795aSAndroid Build Coastguard Workerdefine _clean-path-strip-root-dotdots 3737*9e94795aSAndroid Build Coastguard Worker$(strip $(if $(call streq,$(firstword $(1)),..), 3738*9e94795aSAndroid Build Coastguard Worker $(call _clean-path-strip-root-dotdots,$(wordlist 2,$(words $(1)),$(1))), 3739*9e94795aSAndroid Build Coastguard Worker $(1))) 3740*9e94795aSAndroid Build Coastguard Workerendef 3741*9e94795aSAndroid Build Coastguard Worker 3742*9e94795aSAndroid Build Coastguard Worker# Call _clean-path-strip-dotdot until the path stops changing 3743*9e94795aSAndroid Build Coastguard Worker# $(1): Non-empty if this path started with a / 3744*9e94795aSAndroid Build Coastguard Worker# $(2): The expanded path, where / is converted to ' ' to work with $(word) 3745*9e94795aSAndroid Build Coastguard Workerdefine _clean-path-expanded 3746*9e94795aSAndroid Build Coastguard Worker$(strip \ 3747*9e94795aSAndroid Build Coastguard Worker $(eval _ep := $(call _clean-path-strip-dotdot,$(2))) 3748*9e94795aSAndroid Build Coastguard Worker $(if $(1),$(eval _ep := $(call _clean-path-strip-root-dotdots,$(_ep)))) 3749*9e94795aSAndroid Build Coastguard Worker $(if $(call streq,$(2),$(_ep)), 3750*9e94795aSAndroid Build Coastguard Worker $(_ep), 3751*9e94795aSAndroid Build Coastguard Worker $(call _clean-path-expanded,$(1),$(_ep)))) 3752*9e94795aSAndroid Build Coastguard Workerendef 3753*9e94795aSAndroid Build Coastguard Worker 3754*9e94795aSAndroid Build Coastguard Worker# Clean the file path -- remove //, dir/.., extra . 3755*9e94795aSAndroid Build Coastguard Worker# 3756*9e94795aSAndroid Build Coastguard Worker# This should be the same semantics as golang's filepath.Clean 3757*9e94795aSAndroid Build Coastguard Worker# 3758*9e94795aSAndroid Build Coastguard Worker# $(1): The file path to clean 3759*9e94795aSAndroid Build Coastguard Workerdefine clean-path 3760*9e94795aSAndroid Build Coastguard Worker$(strip \ 3761*9e94795aSAndroid Build Coastguard Worker $(if $(call streq,$(words $(1)),1), 3762*9e94795aSAndroid Build Coastguard Worker $(eval _rooted := $(filter /%,$(1))) 3763*9e94795aSAndroid Build Coastguard Worker $(eval _expanded_path := $(filter-out .,$(subst /,$(space),$(1)))) 3764*9e94795aSAndroid Build Coastguard Worker $(eval _path := $(if $(_rooted),/)$(subst $(space),/,$(call _clean-path-expanded,$(_rooted),$(_expanded_path)))) 3765*9e94795aSAndroid Build Coastguard Worker $(if $(_path), 3766*9e94795aSAndroid Build Coastguard Worker $(_path), 3767*9e94795aSAndroid Build Coastguard Worker . 3768*9e94795aSAndroid Build Coastguard Worker ) 3769*9e94795aSAndroid Build Coastguard Worker , 3770*9e94795aSAndroid Build Coastguard Worker $(if $(call streq,$(words $(1)),0), 3771*9e94795aSAndroid Build Coastguard Worker ., 3772*9e94795aSAndroid Build Coastguard Worker $(error Call clean-path with only one path (without spaces)) 3773*9e94795aSAndroid Build Coastguard Worker ) 3774*9e94795aSAndroid Build Coastguard Worker ) 3775*9e94795aSAndroid Build Coastguard Worker) 3776*9e94795aSAndroid Build Coastguard Workerendef 3777*9e94795aSAndroid Build Coastguard Worker 3778*9e94795aSAndroid Build Coastguard Workerifeq ($(TEST_MAKE_clean_path),true) 3779*9e94795aSAndroid Build Coastguard Worker define my_test 3780*9e94795aSAndroid Build Coastguard Worker $(if $(call streq,$(call clean-path,$(1)),$(2)),, 3781*9e94795aSAndroid Build Coastguard Worker $(eval my_failed := true) 3782*9e94795aSAndroid Build Coastguard Worker $(warning clean-path test '$(1)': expected '$(2)', got '$(call clean-path,$(1))')) 3783*9e94795aSAndroid Build Coastguard Worker endef 3784*9e94795aSAndroid Build Coastguard Worker my_failed := 3785*9e94795aSAndroid Build Coastguard Worker 3786*9e94795aSAndroid Build Coastguard Worker # Already clean 3787*9e94795aSAndroid Build Coastguard Worker $(call my_test,abc,abc) 3788*9e94795aSAndroid Build Coastguard Worker $(call my_test,abc/def,abc/def) 3789*9e94795aSAndroid Build Coastguard Worker $(call my_test,a/b/c,a/b/c) 3790*9e94795aSAndroid Build Coastguard Worker $(call my_test,.,.) 3791*9e94795aSAndroid Build Coastguard Worker $(call my_test,..,..) 3792*9e94795aSAndroid Build Coastguard Worker $(call my_test,../..,../..) 3793*9e94795aSAndroid Build Coastguard Worker $(call my_test,../../abc,../../abc) 3794*9e94795aSAndroid Build Coastguard Worker $(call my_test,/abc,/abc) 3795*9e94795aSAndroid Build Coastguard Worker $(call my_test,/,/) 3796*9e94795aSAndroid Build Coastguard Worker 3797*9e94795aSAndroid Build Coastguard Worker # Empty is current dir 3798*9e94795aSAndroid Build Coastguard Worker $(call my_test,,.) 3799*9e94795aSAndroid Build Coastguard Worker 3800*9e94795aSAndroid Build Coastguard Worker # Remove trailing slash 3801*9e94795aSAndroid Build Coastguard Worker $(call my_test,abc/,abc) 3802*9e94795aSAndroid Build Coastguard Worker $(call my_test,abc/def/,abc/def) 3803*9e94795aSAndroid Build Coastguard Worker $(call my_test,a/b/c/,a/b/c) 3804*9e94795aSAndroid Build Coastguard Worker $(call my_test,./,.) 3805*9e94795aSAndroid Build Coastguard Worker $(call my_test,../,..) 3806*9e94795aSAndroid Build Coastguard Worker $(call my_test,../../,../..) 3807*9e94795aSAndroid Build Coastguard Worker $(call my_test,/abc/,/abc) 3808*9e94795aSAndroid Build Coastguard Worker 3809*9e94795aSAndroid Build Coastguard Worker # Remove doubled slash 3810*9e94795aSAndroid Build Coastguard Worker $(call my_test,abc//def//ghi,abc/def/ghi) 3811*9e94795aSAndroid Build Coastguard Worker $(call my_test,//abc,/abc) 3812*9e94795aSAndroid Build Coastguard Worker $(call my_test,///abc,/abc) 3813*9e94795aSAndroid Build Coastguard Worker $(call my_test,//abc//,/abc) 3814*9e94795aSAndroid Build Coastguard Worker $(call my_test,abc//,abc) 3815*9e94795aSAndroid Build Coastguard Worker 3816*9e94795aSAndroid Build Coastguard Worker # Remove . elements 3817*9e94795aSAndroid Build Coastguard Worker $(call my_test,abc/./def,abc/def) 3818*9e94795aSAndroid Build Coastguard Worker $(call my_test,/./abc/def,/abc/def) 3819*9e94795aSAndroid Build Coastguard Worker $(call my_test,abc/.,abc) 3820*9e94795aSAndroid Build Coastguard Worker 3821*9e94795aSAndroid Build Coastguard Worker # Remove .. elements 3822*9e94795aSAndroid Build Coastguard Worker $(call my_test,abc/def/ghi/../jkl,abc/def/jkl) 3823*9e94795aSAndroid Build Coastguard Worker $(call my_test,abc/def/../ghi/../jkl,abc/jkl) 3824*9e94795aSAndroid Build Coastguard Worker $(call my_test,abc/def/..,abc) 3825*9e94795aSAndroid Build Coastguard Worker $(call my_test,abc/def/../..,.) 3826*9e94795aSAndroid Build Coastguard Worker $(call my_test,/abc/def/../..,/) 3827*9e94795aSAndroid Build Coastguard Worker $(call my_test,abc/def/../../..,..) 3828*9e94795aSAndroid Build Coastguard Worker $(call my_test,/abc/def/../../..,/) 3829*9e94795aSAndroid Build Coastguard Worker $(call my_test,abc/def/../../../ghi/jkl/../../../mno,../../mno) 3830*9e94795aSAndroid Build Coastguard Worker $(call my_test,/../abc,/abc) 3831*9e94795aSAndroid Build Coastguard Worker 3832*9e94795aSAndroid Build Coastguard Worker # Combinations 3833*9e94795aSAndroid Build Coastguard Worker $(call my_test,abc/./../def,def) 3834*9e94795aSAndroid Build Coastguard Worker $(call my_test,abc//./../def,def) 3835*9e94795aSAndroid Build Coastguard Worker $(call my_test,abc/../../././../def,../../def) 3836*9e94795aSAndroid Build Coastguard Worker 3837*9e94795aSAndroid Build Coastguard Worker ifdef my_failed 3838*9e94795aSAndroid Build Coastguard Worker $(error failed clean-path test) 3839*9e94795aSAndroid Build Coastguard Worker endif 3840*9e94795aSAndroid Build Coastguard Workerendif 3841*9e94795aSAndroid Build Coastguard Worker 3842*9e94795aSAndroid Build Coastguard Worker########################################################### 3843*9e94795aSAndroid Build Coastguard Worker## Given a filepath, returns nonempty if the path cannot be 3844*9e94795aSAndroid Build Coastguard Worker## validated to be contained in the current directory 3845*9e94795aSAndroid Build Coastguard Worker## This is, this function checks for '/' and '..' 3846*9e94795aSAndroid Build Coastguard Worker## 3847*9e94795aSAndroid Build Coastguard Worker## $(1): path to validate 3848*9e94795aSAndroid Build Coastguard Workerdefine try-validate-path-is-subdir 3849*9e94795aSAndroid Build Coastguard Worker$(strip \ 3850*9e94795aSAndroid Build Coastguard Worker $(if $(filter /%,$(1)), 3851*9e94795aSAndroid Build Coastguard Worker $(1) starts with a slash 3852*9e94795aSAndroid Build Coastguard Worker ) 3853*9e94795aSAndroid Build Coastguard Worker $(if $(filter ../%,$(call clean-path,$(1))), 3854*9e94795aSAndroid Build Coastguard Worker $(1) escapes its parent using '..' 3855*9e94795aSAndroid Build Coastguard Worker ) 3856*9e94795aSAndroid Build Coastguard Worker $(if $(strip $(1)), 3857*9e94795aSAndroid Build Coastguard Worker , 3858*9e94795aSAndroid Build Coastguard Worker '$(1)' is empty 3859*9e94795aSAndroid Build Coastguard Worker ) 3860*9e94795aSAndroid Build Coastguard Worker) 3861*9e94795aSAndroid Build Coastguard Workerendef 3862*9e94795aSAndroid Build Coastguard Worker 3863*9e94795aSAndroid Build Coastguard Workerdefine validate-path-is-subdir 3864*9e94795aSAndroid Build Coastguard Worker$(if $(call try-validate-path-is-subdir,$(1)), 3865*9e94795aSAndroid Build Coastguard Worker $(call pretty-error, Illegal path: $(call try-validate-path-is-subdir,$(1))) 3866*9e94795aSAndroid Build Coastguard Worker) 3867*9e94795aSAndroid Build Coastguard Workerendef 3868*9e94795aSAndroid Build Coastguard Worker 3869*9e94795aSAndroid Build Coastguard Worker########################################################### 3870*9e94795aSAndroid Build Coastguard Worker## Given a space-delimited list of filepaths, returns 3871*9e94795aSAndroid Build Coastguard Worker## nonempty if any cannot be validated to be contained in 3872*9e94795aSAndroid Build Coastguard Worker## the current directory 3873*9e94795aSAndroid Build Coastguard Worker## 3874*9e94795aSAndroid Build Coastguard Worker## $(1): path list to validate 3875*9e94795aSAndroid Build Coastguard Workerdefine try-validate-paths-are-subdirs 3876*9e94795aSAndroid Build Coastguard Worker$(strip \ 3877*9e94795aSAndroid Build Coastguard Worker $(foreach my_path,$(1),\ 3878*9e94795aSAndroid Build Coastguard Worker $(call try-validate-path-is-subdir,$(my_path))\ 3879*9e94795aSAndroid Build Coastguard Worker ) 3880*9e94795aSAndroid Build Coastguard Worker) 3881*9e94795aSAndroid Build Coastguard Workerendef 3882*9e94795aSAndroid Build Coastguard Worker 3883*9e94795aSAndroid Build Coastguard Workerdefine validate-paths-are-subdirs 3884*9e94795aSAndroid Build Coastguard Worker$(if $(call try-validate-paths-are-subdirs,$(1)), 3885*9e94795aSAndroid Build Coastguard Worker $(call pretty-error,Illegal paths:\'$(call try-validate-paths-are-subdirs,$(1))\') 3886*9e94795aSAndroid Build Coastguard Worker) 3887*9e94795aSAndroid Build Coastguard Workerendef 3888*9e94795aSAndroid Build Coastguard Worker 3889*9e94795aSAndroid Build Coastguard Worker########################################################### 3890*9e94795aSAndroid Build Coastguard Worker## Tests of try-validate-path-is-subdir 3891*9e94795aSAndroid Build Coastguard Worker## and try-validate-paths-are-subdirs 3892*9e94795aSAndroid Build Coastguard Workerdefine test-validate-paths-are-subdirs 3893*9e94795aSAndroid Build Coastguard Worker$(eval my_error := $(call try-validate-path-is-subdir,/tmp)) \ 3894*9e94795aSAndroid Build Coastguard Worker$(if $(call streq,$(my_error),/tmp starts with a slash), 3895*9e94795aSAndroid Build Coastguard Worker, 3896*9e94795aSAndroid Build Coastguard Worker $(error incorrect error message for path /tmp. Got '$(my_error)') 3897*9e94795aSAndroid Build Coastguard Worker) \ 3898*9e94795aSAndroid Build Coastguard Worker$(eval my_error := $(call try-validate-path-is-subdir,../sibling)) \ 3899*9e94795aSAndroid Build Coastguard Worker$(if $(call streq,$(my_error),../sibling escapes its parent using '..'), 3900*9e94795aSAndroid Build Coastguard Worker, 3901*9e94795aSAndroid Build Coastguard Worker $(error incorrect error message for path ../sibling. Got '$(my_error)') 3902*9e94795aSAndroid Build Coastguard Worker) \ 3903*9e94795aSAndroid Build Coastguard Worker$(eval my_error := $(call try-validate-path-is-subdir,child/../../sibling)) \ 3904*9e94795aSAndroid Build Coastguard Worker$(if $(call streq,$(my_error),child/../../sibling escapes its parent using '..'), 3905*9e94795aSAndroid Build Coastguard Worker, 3906*9e94795aSAndroid Build Coastguard Worker $(error incorrect error message for path child/../../sibling. Got '$(my_error)') 3907*9e94795aSAndroid Build Coastguard Worker) \ 3908*9e94795aSAndroid Build Coastguard Worker$(eval my_error := $(call try-validate-path-is-subdir,)) \ 3909*9e94795aSAndroid Build Coastguard Worker$(if $(call streq,$(my_error),'' is empty), 3910*9e94795aSAndroid Build Coastguard Worker, 3911*9e94795aSAndroid Build Coastguard Worker $(error incorrect error message for empty path ''. Got '$(my_error)') 3912*9e94795aSAndroid Build Coastguard Worker) \ 3913*9e94795aSAndroid Build Coastguard Worker$(eval my_error := $(call try-validate-path-is-subdir,subdir/subsubdir)) \ 3914*9e94795aSAndroid Build Coastguard Worker$(if $(call streq,$(my_error),), 3915*9e94795aSAndroid Build Coastguard Worker, 3916*9e94795aSAndroid Build Coastguard Worker $(error rejected valid path 'subdir/subsubdir'. Got '$(my_error)') 3917*9e94795aSAndroid Build Coastguard Worker) 3918*9e94795aSAndroid Build Coastguard Worker 3919*9e94795aSAndroid Build Coastguard Worker$(eval my_error := $(call try-validate-paths-are-subdirs,a/b /c/d e/f)) 3920*9e94795aSAndroid Build Coastguard Worker$(if $(call streq,$(my_error),/c/d starts with a slash), 3921*9e94795aSAndroid Build Coastguard Worker, 3922*9e94795aSAndroid Build Coastguard Worker $(error incorrect error message for path list 'a/b /c/d e/f'. Got '$(my_error)') 3923*9e94795aSAndroid Build Coastguard Worker) 3924*9e94795aSAndroid Build Coastguard Worker$(eval my_error := $(call try-validate-paths-are-subdirs,a/b c/d)) 3925*9e94795aSAndroid Build Coastguard Worker$(if $(call streq,$(my_error),), 3926*9e94795aSAndroid Build Coastguard Worker, 3927*9e94795aSAndroid Build Coastguard Worker $(error rejected valid path list 'a/b c/d'. Got '$(my_error)') 3928*9e94795aSAndroid Build Coastguard Worker) 3929*9e94795aSAndroid Build Coastguard Workerendef 3930*9e94795aSAndroid Build Coastguard Worker# run test 3931*9e94795aSAndroid Build Coastguard Worker$(strip $(call test-validate-paths-are-subdirs)) 3932*9e94795aSAndroid Build Coastguard Worker 3933*9e94795aSAndroid Build Coastguard Worker########################################################### 3934*9e94795aSAndroid Build Coastguard Worker## Validate jacoco class filters and convert them to 3935*9e94795aSAndroid Build Coastguard Worker## file arguments 3936*9e94795aSAndroid Build Coastguard Worker## Jacoco class filters are comma-separated lists of class 3937*9e94795aSAndroid Build Coastguard Worker## files (android.app.Application), and may have '*' as the 3938*9e94795aSAndroid Build Coastguard Worker## last character to match all classes in a package 3939*9e94795aSAndroid Build Coastguard Worker## including subpackages. 3940*9e94795aSAndroid Build Coastguard Workerdefine jacoco-class-filter-to-file-args 3941*9e94795aSAndroid Build Coastguard Worker$(strip $(call jacoco-validate-file-args,\ 3942*9e94795aSAndroid Build Coastguard Worker $(subst $(comma),$(space),\ 3943*9e94795aSAndroid Build Coastguard Worker $(subst .,/,\ 3944*9e94795aSAndroid Build Coastguard Worker $(strip $(1)))))) 3945*9e94795aSAndroid Build Coastguard Workerendef 3946*9e94795aSAndroid Build Coastguard Worker 3947*9e94795aSAndroid Build Coastguard Workerdefine jacoco-validate-file-args 3948*9e94795aSAndroid Build Coastguard Worker$(strip $(1)\ 3949*9e94795aSAndroid Build Coastguard Worker $(call validate-paths-are-subdirs,$(1)) 3950*9e94795aSAndroid Build Coastguard Worker $(foreach arg,$(1),\ 3951*9e94795aSAndroid Build Coastguard Worker $(if $(findstring ?,$(arg)),$(call pretty-error,\ 3952*9e94795aSAndroid Build Coastguard Worker '?' filters are not supported in LOCAL_JACK_COVERAGE_INCLUDE_FILTER or LOCAL_JACK_COVERAGE_EXCLUDE_FILTER))\ 3953*9e94795aSAndroid Build Coastguard Worker $(if $(findstring *,$(patsubst %*,%,$(arg))),$(call pretty-error,\ 3954*9e94795aSAndroid Build Coastguard Worker '*' is only supported at the end of a filter in LOCAL_JACK_COVERAGE_INCLUDE_FILTER or LOCAL_JACK_COVERAGE_EXCLUDE_FILTER))\ 3955*9e94795aSAndroid Build Coastguard Worker )) 3956*9e94795aSAndroid Build Coastguard Workerendef 3957*9e94795aSAndroid Build Coastguard Worker 3958*9e94795aSAndroid Build Coastguard Worker########################################################### 3959*9e94795aSAndroid Build Coastguard Worker## Other includes 3960*9e94795aSAndroid Build Coastguard Worker########################################################### 3961*9e94795aSAndroid Build Coastguard Worker 3962*9e94795aSAndroid Build Coastguard Worker# Include any vendor specific definitions.mk file 3963*9e94795aSAndroid Build Coastguard Worker-include $(TOPDIR)vendor/*/build/core/definitions.mk 3964*9e94795aSAndroid Build Coastguard Worker-include $(TOPDIR)device/*/build/core/definitions.mk 3965*9e94795aSAndroid Build Coastguard Worker-include $(TOPDIR)product/*/build/core/definitions.mk 3966*9e94795aSAndroid Build Coastguard Worker# Also the project-specific definitions.mk file 3967*9e94795aSAndroid Build Coastguard Worker-include $(TOPDIR)vendor/*/*/build/core/definitions.mk 3968*9e94795aSAndroid Build Coastguard Worker-include $(TOPDIR)device/*/*/build/core/definitions.mk 3969*9e94795aSAndroid Build Coastguard Worker-include $(TOPDIR)product/*/*/build/core/definitions.mk 3970*9e94795aSAndroid Build Coastguard Worker 3971*9e94795aSAndroid Build Coastguard Worker# broken: 3972*9e94795aSAndroid Build Coastguard Worker# $(foreach file,$^,$(if $(findstring,.a,$(suffix $file)),-l$(file),$(file))) 3973*9e94795aSAndroid Build Coastguard Worker 3974*9e94795aSAndroid Build Coastguard Worker########################################################### 3975*9e94795aSAndroid Build Coastguard Worker## Misc notes 3976*9e94795aSAndroid Build Coastguard Worker########################################################### 3977*9e94795aSAndroid Build Coastguard Worker 3978*9e94795aSAndroid Build Coastguard Worker#DEPDIR = .deps 3979*9e94795aSAndroid Build Coastguard Worker#df = $(DEPDIR)/$(*F) 3980*9e94795aSAndroid Build Coastguard Worker 3981*9e94795aSAndroid Build Coastguard Worker#SRCS = foo.c bar.c ... 3982*9e94795aSAndroid Build Coastguard Worker 3983*9e94795aSAndroid Build Coastguard Worker#%.o : %.c 3984*9e94795aSAndroid Build Coastguard Worker# @$(MAKEDEPEND); \ 3985*9e94795aSAndroid Build Coastguard Worker# cp $(df).d $(df).P; \ 3986*9e94795aSAndroid Build Coastguard Worker# sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ 3987*9e94795aSAndroid Build Coastguard Worker# -e '/^$$/ d' -e 's/$$/ :/' < $(df).d >> $(df).P; \ 3988*9e94795aSAndroid Build Coastguard Worker# rm -f $(df).d 3989*9e94795aSAndroid Build Coastguard Worker# $(COMPILE.c) -o $@ $< 3990*9e94795aSAndroid Build Coastguard Worker 3991*9e94795aSAndroid Build Coastguard Worker#-include $(SRCS:%.c=$(DEPDIR)/%.P) 3992*9e94795aSAndroid Build Coastguard Worker 3993*9e94795aSAndroid Build Coastguard Worker 3994*9e94795aSAndroid Build Coastguard Worker#%.o : %.c 3995*9e94795aSAndroid Build Coastguard Worker# $(COMPILE.c) -MD -o $@ $< 3996*9e94795aSAndroid Build Coastguard Worker# @cp $*.d $*.P; \ 3997*9e94795aSAndroid Build Coastguard Worker# sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ 3998*9e94795aSAndroid Build Coastguard Worker# -e '/^$$/ d' -e 's/$$/ :/' < $*.d >> $*.P; \ 3999*9e94795aSAndroid Build Coastguard Worker# rm -f $*.d 4000*9e94795aSAndroid Build Coastguard Worker 4001*9e94795aSAndroid Build Coastguard Worker 4002*9e94795aSAndroid Build Coastguard Worker########################################################### 4003*9e94795aSAndroid Build Coastguard Worker# Append the information to generate a RRO package for the 4004*9e94795aSAndroid Build Coastguard Worker# source module. 4005*9e94795aSAndroid Build Coastguard Worker# 4006*9e94795aSAndroid Build Coastguard Worker# $(1): Source module name. 4007*9e94795aSAndroid Build Coastguard Worker# $(2): Whether $(3) is a manifest package name or not. 4008*9e94795aSAndroid Build Coastguard Worker# $(3): Manifest package name if $(2) is true. 4009*9e94795aSAndroid Build Coastguard Worker# Otherwise, android manifest file path of the 4010*9e94795aSAndroid Build Coastguard Worker# source module. 4011*9e94795aSAndroid Build Coastguard Worker# $(4): Whether LOCAL_EXPORT_PACKAGE_RESOURCES is set or 4012*9e94795aSAndroid Build Coastguard Worker# not for the source module. 4013*9e94795aSAndroid Build Coastguard Worker# $(5): Resource overlay list. 4014*9e94795aSAndroid Build Coastguard Worker# $(6): Target partition 4015*9e94795aSAndroid Build Coastguard Worker########################################################### 4016*9e94795aSAndroid Build Coastguard Workerdefine append_enforce_rro_sources 4017*9e94795aSAndroid Build Coastguard Worker $(eval ENFORCE_RRO_SOURCES += \ 4018*9e94795aSAndroid Build Coastguard Worker $(strip $(1))||$(strip $(2))||$(strip $(3))||$(strip $(4))||$(call normalize-path-list, $(strip $(5)))||$(strip $(6)) \ 4019*9e94795aSAndroid Build Coastguard Worker ) 4020*9e94795aSAndroid Build Coastguard Workerendef 4021*9e94795aSAndroid Build Coastguard Worker 4022*9e94795aSAndroid Build Coastguard Worker########################################################### 4023*9e94795aSAndroid Build Coastguard Worker# Generate all RRO packages for source modules stored in 4024*9e94795aSAndroid Build Coastguard Worker# ENFORCE_RRO_SOURCES 4025*9e94795aSAndroid Build Coastguard Worker########################################################### 4026*9e94795aSAndroid Build Coastguard Workerdefine generate_all_enforce_rro_packages 4027*9e94795aSAndroid Build Coastguard Worker$(foreach source,$(ENFORCE_RRO_SOURCES), \ 4028*9e94795aSAndroid Build Coastguard Worker $(eval _o := $(subst ||,$(space),$(source))) \ 4029*9e94795aSAndroid Build Coastguard Worker $(eval enforce_rro_source_module := $(word 1,$(_o))) \ 4030*9e94795aSAndroid Build Coastguard Worker $(eval enforce_rro_source_is_manifest_package_name := $(word 2,$(_o))) \ 4031*9e94795aSAndroid Build Coastguard Worker $(eval enforce_rro_source_manifest_package_info := $(word 3,$(_o))) \ 4032*9e94795aSAndroid Build Coastguard Worker $(eval enforce_rro_use_res_lib := $(word 4,$(_o))) \ 4033*9e94795aSAndroid Build Coastguard Worker $(eval enforce_rro_source_overlays := $(subst :, ,$(word 5,$(_o)))) \ 4034*9e94795aSAndroid Build Coastguard Worker $(eval enforce_rro_partition := $(word 6,$(_o))) \ 4035*9e94795aSAndroid Build Coastguard Worker $(eval include $(BUILD_SYSTEM)/generate_enforce_rro.mk) \ 4036*9e94795aSAndroid Build Coastguard Worker $(eval ALL_MODULES.$$(enforce_rro_source_module).REQUIRED_FROM_TARGET += $$(LOCAL_PACKAGE_NAME)) \ 4037*9e94795aSAndroid Build Coastguard Worker) 4038*9e94795aSAndroid Build Coastguard Workerendef 4039*9e94795aSAndroid Build Coastguard Worker 4040*9e94795aSAndroid Build Coastguard Worker########################################################### 4041*9e94795aSAndroid Build Coastguard Worker## Find system_$(VER) in LOCAL_SDK_VERSION 4042*9e94795aSAndroid Build Coastguard Worker## note: system_server_* is excluded. It's a different API surface 4043*9e94795aSAndroid Build Coastguard Worker## 4044*9e94795aSAndroid Build Coastguard Worker## $(1): LOCAL_SDK_VERSION 4045*9e94795aSAndroid Build Coastguard Worker########################################################### 4046*9e94795aSAndroid Build Coastguard Workerdefine has-system-sdk-version 4047*9e94795aSAndroid Build Coastguard Worker$(filter-out system_server_%,$(filter system_%,$(1))) 4048*9e94795aSAndroid Build Coastguard Workerendef 4049*9e94795aSAndroid Build Coastguard Worker 4050*9e94795aSAndroid Build Coastguard Worker########################################################### 4051*9e94795aSAndroid Build Coastguard Worker## Get numerical version in LOCAL_SDK_VERSION 4052*9e94795aSAndroid Build Coastguard Worker## 4053*9e94795aSAndroid Build Coastguard Worker## $(1): LOCAL_SDK_VERSION 4054*9e94795aSAndroid Build Coastguard Worker########################################################### 4055*9e94795aSAndroid Build Coastguard Workerdefine get-numeric-sdk-version 4056*9e94795aSAndroid Build Coastguard Worker$(filter-out current,\ 4057*9e94795aSAndroid Build Coastguard Worker $(if $(call has-system-sdk-version,$(1)),$(patsubst system_%,%,$(1)),$(1))) 4058*9e94795aSAndroid Build Coastguard Workerendef 4059*9e94795aSAndroid Build Coastguard Worker 4060*9e94795aSAndroid Build Coastguard Worker########################################################### 4061*9e94795aSAndroid Build Coastguard Worker## Verify module name meets character requirements: 4062*9e94795aSAndroid Build Coastguard Worker## a-z A-Z 0-9 4063*9e94795aSAndroid Build Coastguard Worker## _.+-,@~ 4064*9e94795aSAndroid Build Coastguard Worker## 4065*9e94795aSAndroid Build Coastguard Worker## This is a subset of bazel's target name restrictions: 4066*9e94795aSAndroid Build Coastguard Worker## https://docs.bazel.build/versions/master/build-ref.html#name 4067*9e94795aSAndroid Build Coastguard Worker## 4068*9e94795aSAndroid Build Coastguard Worker## Kati has problems with '=': https://github.com/google/kati/issues/138 4069*9e94795aSAndroid Build Coastguard Worker########################################################### 4070*9e94795aSAndroid Build Coastguard Workerdefine verify-module-name 4071*9e94795aSAndroid Build Coastguard Worker$(if $(filter-out $(LOCAL_MODULE),$(subst /,,$(LOCAL_MODULE))), \ 4072*9e94795aSAndroid Build Coastguard Worker $(call pretty-warning,Module name contains a /$(comma) use LOCAL_MODULE_STEM and LOCAL_MODULE_RELATIVE_PATH instead)) \ 4073*9e94795aSAndroid Build Coastguard Worker$(if $(call _invalid-name-chars,$(LOCAL_MODULE)), \ 4074*9e94795aSAndroid Build Coastguard Worker $(call pretty-error,Invalid characters in module name: $(call _invalid-name-chars,$(LOCAL_MODULE)))) 4075*9e94795aSAndroid Build Coastguard Workerendef 4076*9e94795aSAndroid Build Coastguard Workerdefine _invalid-name-chars 4077*9e94795aSAndroid Build Coastguard Worker$(subst _,,$(subst .,,$(subst +,,$(subst -,,$(subst $(comma),,$(subst @,,$(subst ~,,$(subst 0,,$(subst 1,,$(subst 2,,$(subst 3,,$(subst 4,,$(subst 5,,$(subst 6,,$(subst 7,,$(subst 8,,$(subst 9,,$(subst a,,$(subst b,,$(subst c,,$(subst d,,$(subst e,,$(subst f,,$(subst g,,$(subst h,,$(subst i,,$(subst j,,$(subst k,,$(subst l,,$(subst m,,$(subst n,,$(subst o,,$(subst p,,$(subst q,,$(subst r,,$(subst s,,$(subst t,,$(subst u,,$(subst v,,$(subst w,,$(subst x,,$(subst y,,$(subst z,,$(call to-lower,$(1))))))))))))))))))))))))))))))))))))))))))))) 4078*9e94795aSAndroid Build Coastguard Workerendef 4079*9e94795aSAndroid Build Coastguard Worker.KATI_READONLY := verify-module-name _invalid-name-chars 4080*9e94795aSAndroid Build Coastguard Worker 4081*9e94795aSAndroid Build Coastguard Worker########################################################### 4082*9e94795aSAndroid Build Coastguard Worker## Verify module stem meets character requirements: 4083*9e94795aSAndroid Build Coastguard Worker## a-z A-Z 0-9 4084*9e94795aSAndroid Build Coastguard Worker## _.+-,@~ 4085*9e94795aSAndroid Build Coastguard Worker## 4086*9e94795aSAndroid Build Coastguard Worker## This is a subset of bazel's target name restrictions: 4087*9e94795aSAndroid Build Coastguard Worker## https://docs.bazel.build/versions/master/build-ref.html#name 4088*9e94795aSAndroid Build Coastguard Worker## 4089*9e94795aSAndroid Build Coastguard Worker## $(1): The module stem variable to check 4090*9e94795aSAndroid Build Coastguard Worker########################################################### 4091*9e94795aSAndroid Build Coastguard Workerdefine verify-module-stem 4092*9e94795aSAndroid Build Coastguard Worker$(if $(filter-out $($(1)),$(subst /,,$($(1)))), \ 4093*9e94795aSAndroid Build Coastguard Worker $(call pretty-warning,Module stem \($(1)\) contains a /$(comma) use LOCAL_MODULE_RELATIVE_PATH instead)) \ 4094*9e94795aSAndroid Build Coastguard Worker$(if $(call _invalid-name-chars,$($(1))), \ 4095*9e94795aSAndroid Build Coastguard Worker $(call pretty-error,Invalid characters in module stem \($(1)\): $(call _invalid-name-chars,$($(1))))) 4096*9e94795aSAndroid Build Coastguard Workerendef 4097*9e94795aSAndroid Build Coastguard Worker.KATI_READONLY := verify-module-stem 4098*9e94795aSAndroid Build Coastguard Worker 4099*9e94795aSAndroid Build Coastguard Worker$(KATI_obsolete_var \ 4100*9e94795aSAndroid Build Coastguard Worker create-empty-package \ 4101*9e94795aSAndroid Build Coastguard Worker initialize-package-file \ 4102*9e94795aSAndroid Build Coastguard Worker add-jni-shared-libs-to-package \ 4103*9e94795aSAndroid Build Coastguard Worker inherit-package,\ 4104*9e94795aSAndroid Build Coastguard Worker These functions have been removed) 4105*9e94795aSAndroid Build Coastguard Worker 4106*9e94795aSAndroid Build Coastguard Worker########################################################### 4107*9e94795aSAndroid Build Coastguard Worker## Verify the variants of a VNDK library are identical 4108*9e94795aSAndroid Build Coastguard Worker## 4109*9e94795aSAndroid Build Coastguard Worker## $(1): Path to the core variant shared library file. 4110*9e94795aSAndroid Build Coastguard Worker## $(2): Path to the vendor variant shared library file. 4111*9e94795aSAndroid Build Coastguard Worker## $(3): TOOLS_PREFIX 4112*9e94795aSAndroid Build Coastguard Worker########################################################### 4113*9e94795aSAndroid Build Coastguard WorkerLIBRARY_IDENTITY_CHECK_SCRIPT := build/make/tools/check_identical_lib.sh 4114*9e94795aSAndroid Build Coastguard Workerdefine verify-vndk-libs-identical 4115*9e94795aSAndroid Build Coastguard Worker@echo "Checking VNDK vendor variant: $(2)" 4116*9e94795aSAndroid Build Coastguard Worker$(hide) CLANG_BIN="$(LLVM_PREBUILTS_PATH)" \ 4117*9e94795aSAndroid Build Coastguard Worker CROSS_COMPILE="$(strip $(3))" \ 4118*9e94795aSAndroid Build Coastguard Worker XZ="$(XZ)" \ 4119*9e94795aSAndroid Build Coastguard Worker $(LIBRARY_IDENTITY_CHECK_SCRIPT) $(SOONG_STRIP_PATH) $(1) $(2) 4120*9e94795aSAndroid Build Coastguard Workerendef 4121*9e94795aSAndroid Build Coastguard Worker 4122*9e94795aSAndroid Build Coastguard Worker# Convert Soong libraries that have SDK variant 4123*9e94795aSAndroid Build Coastguard Workerdefine use_soong_sdk_libraries 4124*9e94795aSAndroid Build Coastguard Worker $(foreach l,$(1),$(if $(filter $(l),$(SOONG_SDK_VARIANT_MODULES)),\ 4125*9e94795aSAndroid Build Coastguard Worker $(l).sdk,$(l))) 4126*9e94795aSAndroid Build Coastguard Workerendef 4127