188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Copyright (C) 2007 The Android Open Source Project 388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Licensed under the Apache License, Version 2.0 (the "License"); 588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# you may not use this file except in compliance with the License. 688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# You may obtain a copy of the License at 788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# http://www.apache.org/licenses/LICENSE-2.0 988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 1088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Unless required by applicable law or agreed to in writing, software 1188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# distributed under the License is distributed on an "AS IS" BASIS, 1288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# See the License for the specific language governing permissions and 1488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# limitations under the License. 1588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 1688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 1788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 1888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Functions for including AndroidProducts.mk files 19157a5e1695593f935c3223430f4530e21f990378Ying Wang# PRODUCT_MAKEFILES is set up in AndroidProducts.mks. 20157a5e1695593f935c3223430f4530e21f990378Ying Wang# Format of PRODUCT_MAKEFILES: 21157a5e1695593f935c3223430f4530e21f990378Ying Wang# <product_name>:<path_to_the_product_makefile> 22157a5e1695593f935c3223430f4530e21f990378Ying Wang# If the <product_name> is the same as the base file name (without dir 23157a5e1695593f935c3223430f4530e21f990378Ying Wang# and the .mk suffix) of the product makefile, "<product_name>:" can be 24157a5e1695593f935c3223430f4530e21f990378Ying Wang# omitted. 2588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 267dfdb843b25b4ef04c47b148e0095f292eceacd4Ying Wang# Search for AndroidProducts.mks in the given dir. 277dfdb843b25b4ef04c47b148e0095f292eceacd4Ying Wang# $(1): the path to the dir 287dfdb843b25b4ef04c47b148e0095f292eceacd4Ying Wangdefine _search-android-products-files-in-dir 297dfdb843b25b4ef04c47b148e0095f292eceacd4Ying Wang$(sort $(shell test -d $(1) && find -L $(1) \ 307dfdb843b25b4ef04c47b148e0095f292eceacd4Ying Wang -maxdepth 6 \ 317dfdb843b25b4ef04c47b148e0095f292eceacd4Ying Wang -name .git -prune \ 327dfdb843b25b4ef04c47b148e0095f292eceacd4Ying Wang -o -name AndroidProducts.mk -print)) 337dfdb843b25b4ef04c47b148e0095f292eceacd4Ying Wangendef 347dfdb843b25b4ef04c47b148e0095f292eceacd4Ying Wang 3588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 3688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Returns the list of all AndroidProducts.mk files. 3788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(call ) isn't necessary. 3888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 3988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine _find-android-products-files 407dfdb843b25b4ef04c47b148e0095f292eceacd4Ying Wang$(foreach d, device vendor product,$(call _search-android-products-files-in-dir,$(d))) \ 4188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(SRC_TARGET_DIR)/product/AndroidProducts.mk 4288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef 4388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 4488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 451a031e411ef5eca621c1958103407a6dc40a5114Ying Wang# Returns the sorted concatenation of PRODUCT_MAKEFILES 461a031e411ef5eca621c1958103407a6dc40a5114Ying Wang# variables set in the given AndroidProducts.mk files. 471a031e411ef5eca621c1958103407a6dc40a5114Ying Wang# $(1): the list of AndroidProducts.mk files. 4888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 491a031e411ef5eca621c1958103407a6dc40a5114Ying Wangdefine get-product-makefiles 5088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(sort \ 511a031e411ef5eca621c1958103407a6dc40a5114Ying Wang $(foreach f,$(1), \ 5288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval PRODUCT_MAKEFILES :=) \ 5388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval LOCAL_DIR := $(patsubst %/,%,$(dir $(f)))) \ 5488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval include $(f)) \ 5588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(PRODUCT_MAKEFILES) \ 5688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project ) \ 5788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval PRODUCT_MAKEFILES :=) \ 5888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval LOCAL_DIR :=) \ 5988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project ) 6088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef 6188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 6288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 631a031e411ef5eca621c1958103407a6dc40a5114Ying Wang# Returns the sorted concatenation of all PRODUCT_MAKEFILES 641a031e411ef5eca621c1958103407a6dc40a5114Ying Wang# variables set in all AndroidProducts.mk files. 651a031e411ef5eca621c1958103407a6dc40a5114Ying Wang# $(call ) isn't necessary. 661a031e411ef5eca621c1958103407a6dc40a5114Ying Wang# 671a031e411ef5eca621c1958103407a6dc40a5114Ying Wangdefine get-all-product-makefiles 681a031e411ef5eca621c1958103407a6dc40a5114Ying Wang$(call get-product-makefiles,$(_find-android-products-files)) 691a031e411ef5eca621c1958103407a6dc40a5114Ying Wangendef 701a031e411ef5eca621c1958103407a6dc40a5114Ying Wang 711a031e411ef5eca621c1958103407a6dc40a5114Ying Wang# 7288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Functions for including product makefiles 7388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 7488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 7588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project_product_var_list := \ 7688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project PRODUCT_NAME \ 7788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project PRODUCT_MODEL \ 7888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project PRODUCT_LOCALES \ 794f1ab92aac00a73276793ed25af669d112618a32Ying Wang PRODUCT_AAPT_CONFIG \ 80a0f464a8e7f006177db084df7e925bbb8e5ffed3Dianne Hackborn PRODUCT_AAPT_PREF_CONFIG \ 8160686586a5f9c8f78b9ad16e19782da85e89a760Ying Wang PRODUCT_AAPT_PREBUILT_DPI \ 8288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project PRODUCT_PACKAGES \ 83d7d0afcaea24b0fb0cb37dca921a5ff52fd2485bJoe Onorato PRODUCT_PACKAGES_DEBUG \ 84d7d0afcaea24b0fb0cb37dca921a5ff52fd2485bJoe Onorato PRODUCT_PACKAGES_ENG \ 85d7d0afcaea24b0fb0cb37dca921a5ff52fd2485bJoe Onorato PRODUCT_PACKAGES_TESTS \ 8688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project PRODUCT_DEVICE \ 8788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project PRODUCT_MANUFACTURER \ 8888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project PRODUCT_BRAND \ 8988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project PRODUCT_PROPERTY_OVERRIDES \ 900d23fec792d2bc92417d2b2e716be73704efc240Mike Lockwood PRODUCT_DEFAULT_PROPERTY_OVERRIDES \ 91700b88e1451f216d137d8a356496bf51712512c6Joe Onorato PRODUCT_CHARACTERISTICS \ 9288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project PRODUCT_COPY_FILES \ 9388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project PRODUCT_OTA_PUBLIC_KEYS \ 945d4808db1630048f6eb0610b75af01c9fc877412Doug Zongker PRODUCT_EXTRA_RECOVERY_KEYS \ 9588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project PRODUCT_PACKAGE_OVERLAYS \ 9688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project DEVICE_PACKAGE_OVERLAYS \ 97780128a6f05ad6bcd594ce10953a8ca533e63597Ying Wang PRODUCT_SDK_ATREE_FILES \ 98214a42bbb6e60f1231aa178c114a55dbe363c845Joe Onorato PRODUCT_SDK_ADDON_NAME \ 99214a42bbb6e60f1231aa178c114a55dbe363c845Joe Onorato PRODUCT_SDK_ADDON_COPY_FILES \ 100214a42bbb6e60f1231aa178c114a55dbe363c845Joe Onorato PRODUCT_SDK_ADDON_COPY_MODULES \ 101a032d3d07372423176e072dfcbcf60a53f8a7d57Ying Wang PRODUCT_SDK_ADDON_DOC_MODULES \ 1020d7d09ae040f6d6bd44ec393e60f4aab2a6a0ddfRaphael Moll PRODUCT_SDK_ADDON_SYS_IMG_SOURCE_PROP \ 1033c21fe5b12d95fe374b9b8c874dc4c48b7f9fce1Ying Wang PRODUCT_DEFAULT_WIFI_CHANNELS \ 1043c21fe5b12d95fe374b9b8c874dc4c48b7f9fce1Ying Wang PRODUCT_DEFAULT_DEV_CERTIFICATE \ 105dbb31be41302aa4426006685e9c652de8074906aYing Wang PRODUCT_RESTRICT_VENDOR_FILES \ 106f926990ba3f04c03037b838cd5fe8f33c21e8013Dima Zavin PRODUCT_VENDOR_KERNEL_HEADERS \ 107fd6f7513f82a4b2ec9810d6cb6c33a94060d14e9Geremy Condra PRODUCT_BOOT_JARS \ 1088b3f08bc7b9870c8c43c7c5bb39f343eaa25d6aaSami Tolvanen PRODUCT_SUPPORTS_BOOT_SIGNER \ 10917be3d3921d273bed31cfc4098d76b7462b085b4David Riley PRODUCT_SUPPORTS_VBOOT \ 110fd6f7513f82a4b2ec9810d6cb6c33a94060d14e9Geremy Condra PRODUCT_SUPPORTS_VERITY \ 111f99b53143d3a25bf157ac32a8fe80378ab57d7a8Sami Tolvanen PRODUCT_SUPPORTS_VERITY_FEC \ 11226d22f713948dfc5292268b7307de7a3b9e22e4dJeff Sharkey PRODUCT_OEM_PROPERTIES \ 11326d22f713948dfc5292268b7307de7a3b9e22e4dJeff Sharkey PRODUCT_SYSTEM_PROPERTY_BLACKLIST \ 11489ec496f989c44315b25ec08915d847edd322739Narayan Kamath PRODUCT_SYSTEM_SERVER_JARS \ 11517be3d3921d273bed31cfc4098d76b7462b085b4David Riley PRODUCT_VBOOT_SIGNING_KEY \ 116e8c212235fc4a83a20cb9bd25f17897a75b15440Furquan Shaikh PRODUCT_VBOOT_SIGNING_SUBKEY \ 1175b5f4958d89dae6a79a9715f4d91c30cb38a4680Geremy Condra PRODUCT_VERITY_SIGNING_KEY \ 118f4eabc3961c3b7f7730329fd527824df35e5b242Daniel Rosenberg PRODUCT_SYSTEM_VERITY_PARTITION \ 1198755756f26a1eaf384ecae64fd00c1873abcf26fYing Wang PRODUCT_VENDOR_VERITY_PARTITION \ 12020ebd2ef081f2a3e85a4adcf8837e6f5b68bdeeaYing Wang PRODUCT_DEX_PREOPT_MODULE_CONFIGS \ 12120ebd2ef081f2a3e85a4adcf8837e6f5b68bdeeaYing Wang PRODUCT_DEX_PREOPT_DEFAULT_FLAGS \ 12220ebd2ef081f2a3e85a4adcf8837e6f5b68bdeeaYing Wang PRODUCT_DEX_PREOPT_BOOT_FLAGS \ 123bb5454b6db5770f0b0275424148b2d7d3c52a56dAndreas Gampe PRODUCT_SANITIZER_MODULE_CONFIGS \ 1241868a601b766a2c6a7a35e232ab7e0d6f025744eMohamad Ayyash PRODUCT_SYSTEM_BASE_FS_PATH \ 1251868a601b766a2c6a7a35e232ab7e0d6f025744eMohamad Ayyash PRODUCT_VENDOR_BASE_FS_PATH \ 12681ee18670d9c0745aabc2453e049142269504e2dGustav Sennton PRODUCT_SHIPPING_API_LEVEL \ 1271868a601b766a2c6a7a35e232ab7e0d6f025744eMohamad Ayyash 12820ebd2ef081f2a3e85a4adcf8837e6f5b68bdeeaYing Wang 1293c21fe5b12d95fe374b9b8c874dc4c48b7f9fce1Ying Wang 13088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine dump-product 13188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(info ==== $(1) ====)\ 13288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(foreach v,$(_product_var_list),\ 13388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(info PRODUCTS.$(1).$(v) := $(PRODUCTS.$(1).$(v))))\ 13488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(info --------) 13588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef 13688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 13788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine dump-products 13888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(foreach p,$(PRODUCTS),$(call dump-product,$(p))) 13988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef 14088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 14188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 14288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): product to inherit 14388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 1446a5f7f068b54c5cc083a3e8224c010060aab24e9The Android Open Source Project# Does three things: 1456a5f7f068b54c5cc083a3e8224c010060aab24e9The Android Open Source Project# 1. Inherits all of the variables from $1. 1466a5f7f068b54c5cc083a3e8224c010060aab24e9The Android Open Source Project# 2. Records the inheritance in the .INHERITS_FROM variable 1476a5f7f068b54c5cc083a3e8224c010060aab24e9The Android Open Source Project# 3. Records that we've visited this node, in ALL_PRODUCTS 1486a5f7f068b54c5cc083a3e8224c010060aab24e9The Android Open Source Project# 14988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine inherit-product 150a17426104219f3c06244f92d73b6c938949d0fe3Ying Wang $(if $(findstring ../,$(1)),\ 151a17426104219f3c06244f92d73b6c938949d0fe3Ying Wang $(eval np := $(call normalize-paths,$(1))),\ 152a17426104219f3c06244f92d73b6c938949d0fe3Ying Wang $(eval np := $(strip $(1))))\ 15388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(foreach v,$(_product_var_list), \ 154a17426104219f3c06244f92d73b6c938949d0fe3Ying Wang $(eval $(v) := $($(v)) $(INHERIT_TAG)$(np))) \ 1556a5f7f068b54c5cc083a3e8224c010060aab24e9The Android Open Source Project $(eval inherit_var := \ 1566a5f7f068b54c5cc083a3e8224c010060aab24e9The Android Open Source Project PRODUCTS.$(strip $(word 1,$(_include_stack))).INHERITS_FROM) \ 157a17426104219f3c06244f92d73b6c938949d0fe3Ying Wang $(eval $(inherit_var) := $(sort $($(inherit_var)) $(np))) \ 1586a5f7f068b54c5cc083a3e8224c010060aab24e9The Android Open Source Project $(eval inherit_var:=) \ 1596a5f7f068b54c5cc083a3e8224c010060aab24e9The Android Open Source Project $(eval ALL_PRODUCTS := $(sort $(ALL_PRODUCTS) $(word 1,$(_include_stack)))) 16088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef 16188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 16228a846d013fc89c9b7e480e0610895ac6b119fabJoe Onorato 16328a846d013fc89c9b7e480e0610895ac6b119fabJoe Onorato# 16428a846d013fc89c9b7e480e0610895ac6b119fabJoe Onorato# Do inherit-product only if $(1) exists 16528a846d013fc89c9b7e480e0610895ac6b119fabJoe Onorato# 16628a846d013fc89c9b7e480e0610895ac6b119fabJoe Onoratodefine inherit-product-if-exists 16728a846d013fc89c9b7e480e0610895ac6b119fabJoe Onorato $(if $(wildcard $(1)),$(call inherit-product,$(1)),) 16828a846d013fc89c9b7e480e0610895ac6b119fabJoe Onoratoendef 16928a846d013fc89c9b7e480e0610895ac6b119fabJoe Onorato 17088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 17188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): product makefile list 17288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 17388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#TODO: check to make sure that products have all the necessary vars defined 17488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine import-products 17588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(call import-nodes,PRODUCTS,$(1),$(_product_var_list)) 17688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef 17788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 17888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 17988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 18088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Does various consistency checks on all of the known products. 18188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Takes no parameters, so $(call ) is not necessary. 18288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 18388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine check-all-products 18488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(if ,, \ 18588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval _cap_names :=) \ 18688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(foreach p,$(PRODUCTS), \ 18788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval pn := $(strip $(PRODUCTS.$(p).PRODUCT_NAME))) \ 18888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(if $(pn),,$(error $(p): PRODUCT_NAME must be defined.)) \ 18988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(if $(filter $(pn),$(_cap_names)), \ 19088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(error $(p): PRODUCT_NAME must be unique; "$(pn)" already used by $(strip \ 19188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(foreach \ 19288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project pp,$(PRODUCTS), 19388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(if $(filter $(pn),$(PRODUCTS.$(pp).PRODUCT_NAME)), \ 19488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(pp) \ 19588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project ))) \ 19688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project ) \ 19788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project ) \ 19888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval _cap_names += $(pn)) \ 19988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(if $(call is-c-identifier,$(pn)),, \ 20088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(error $(p): PRODUCT_NAME must be a valid C identifier, not "$(pn)") \ 20188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project ) \ 20288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval pb := $(strip $(PRODUCTS.$(p).PRODUCT_BRAND))) \ 20388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(if $(pb),,$(error $(p): PRODUCT_BRAND must be defined.)) \ 20488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(foreach cf,$(strip $(PRODUCTS.$(p).PRODUCT_COPY_FILES)), \ 2054b0486b4a6108ea863da6232cc376cd1edc55640Ying Wang $(if $(filter 2 3,$(words $(subst :,$(space),$(cf)))),, \ 20688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(error $(p): malformed COPY_FILE "$(cf)") \ 20788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project ) \ 20888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project ) \ 20988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project ) \ 21088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project) 21188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef 21288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 21388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 21488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 21588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# Returns the product makefile path for the product with the provided name 21688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 21788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# $(1): short product name like "generic" 21888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project# 21988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine _resolve-short-product-name 22088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval pn := $(strip $(1))) 22188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval p := \ 22288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(foreach p,$(PRODUCTS), \ 22388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(if $(filter $(pn),$(PRODUCTS.$(p).PRODUCT_NAME)), \ 22488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(p) \ 22588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project )) \ 22688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project ) 22788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(eval p := $(sort $(p))) 22888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(if $(filter 1,$(words $(p))), \ 22988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(p), \ 23088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(if $(filter 0,$(words $(p))), \ 23188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(error No matches for product "$(pn)"), \ 23288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project $(error Product "$(pn)" ambiguous: matches $(p)) \ 23388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project ) \ 23488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project ) 23588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef 23688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectdefine resolve-short-product-name 23788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project$(strip $(call _resolve-short-product-name,$(1))) 23888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectendef 2398dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato 2408dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato 241f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang_product_stash_var_list := $(_product_var_list) \ 2420650d1503d89f1563978f6006a2f904da7140027Ying Wang PRODUCT_BOOTCLASSPATH \ 24389ec496f989c44315b25ec08915d847edd322739Narayan Kamath PRODUCT_SYSTEM_SERVER_CLASSPATH \ 244f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang TARGET_ARCH \ 245f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang TARGET_ARCH_VARIANT \ 2467028f5ec862229090818ee8dfe33107ffbaec9c7Ben Cheng TARGET_CPU_VARIANT \ 247f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang TARGET_BOARD_PLATFORM \ 248f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang TARGET_BOARD_PLATFORM_GPU \ 249f926990ba3f04c03037b838cd5fe8f33c21e8013Dima Zavin TARGET_BOARD_KERNEL_HEADERS \ 250f926990ba3f04c03037b838cd5fe8f33c21e8013Dima Zavin TARGET_DEVICE_KERNEL_HEADERS \ 251f926990ba3f04c03037b838cd5fe8f33c21e8013Dima Zavin TARGET_PRODUCT_KERNEL_HEADERS \ 252f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang TARGET_BOOTLOADER_BOARD_NAME \ 253f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang TARGET_NO_BOOTLOADER \ 254f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang TARGET_NO_KERNEL \ 255f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang TARGET_NO_RECOVERY \ 256f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang TARGET_NO_RADIOIMAGE \ 257f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang TARGET_HARDWARE_3D \ 258f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang TARGET_CPU_ABI \ 259f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang TARGET_CPU_ABI2 \ 260f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang 261f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang 262f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang_product_stash_var_list += \ 263f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang BOARD_WPA_SUPPLICANT_DRIVER \ 264f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang BOARD_WLAN_DEVICE \ 265f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang BOARD_USES_GENERIC_AUDIO \ 266f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang BOARD_KERNEL_CMDLINE \ 267f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang BOARD_KERNEL_BASE \ 268f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang BOARD_HAVE_BLUETOOTH \ 269f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang BOARD_VENDOR_USE_AKMD \ 270f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang BOARD_EGL_CFG \ 271f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang BOARD_BOOTIMAGE_PARTITION_SIZE \ 272f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang BOARD_RECOVERYIMAGE_PARTITION_SIZE \ 273f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang BOARD_SYSTEMIMAGE_PARTITION_SIZE \ 27468946958193d6dbe540544a0669373d2acd95a35Mohamad Ayyash BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE \ 2755bfed5a320860de5d44c915c88cf7f72c2cdb574JP Abgrall BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE \ 276f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang BOARD_USERDATAIMAGE_PARTITION_SIZE \ 2779f8e8db188371cb3787a91a03d193f87ad244ea3Ying Wang BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE \ 2789f8e8db188371cb3787a91a03d193f87ad244ea3Ying Wang BOARD_CACHEIMAGE_PARTITION_SIZE \ 279f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang BOARD_FLASH_BLOCK_SIZE \ 280dde3184ae86b4c1c1f51ada592fd710bdebd0aeeDaniel Rosenberg BOARD_VENDORIMAGE_PARTITION_SIZE \ 281dde3184ae86b4c1c1f51ada592fd710bdebd0aeeDaniel Rosenberg BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE \ 282f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang BOARD_INSTALLER_CMDLINE \ 283f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang 284f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang 2853c21fe5b12d95fe374b9b8c874dc4c48b7f9fce1Ying Wang_product_stash_var_list += \ 2869c440215350f0777deb5ce58de9946484f2aa0ebYing Wang DEFAULT_SYSTEM_DEV_CERTIFICATE \ 2877326f7b746b82ec60d7381f1fe967a2cd8c7f8e9Alex Light WITH_DEXPREOPT \ 2887326f7b746b82ec60d7381f1fe967a2cd8c7f8e9Alex Light WITH_DEXPREOPT_BOOT_IMG_ONLY 2893c21fe5b12d95fe374b9b8c874dc4c48b7f9fce1Ying Wang 2900c91fa84ff8e5f29dbe3a492fc7898eb1eb63b2aDan Albert_product_stash_var_list += \ 2910c91fa84ff8e5f29dbe3a492fc7898eb1eb63b2aDan Albert GLOBAL_CFLAGS_NO_OVERRIDE \ 2920c91fa84ff8e5f29dbe3a492fc7898eb1eb63b2aDan Albert GLOBAL_CPPFLAGS_NO_OVERRIDE \ 293d1600411495c0bd52dd0f3809ed6bf0d6faca349Dan Albert GLOBAL_CLANG_CFLAGS_NO_OVERRIDE \ 2940c91fa84ff8e5f29dbe3a492fc7898eb1eb63b2aDan Albert 2958dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato# 2968fb5dfc5c716f823b48617fa35a486b2bc696731Brian Carlstrom# Stash values of the variables in _product_stash_var_list. 2978dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato# $(1): Renamed prefix 2988dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato# 2998dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onoratodefine stash-product-vars 300f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang$(foreach v,$(_product_stash_var_list), \ 3018dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato $(eval $(strip $(1))_$(call rot13,$(v)):=$$($$(v))) \ 3028dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato ) 3038dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onoratoendef 3048dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato 3058dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato# 3068dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato# Assert that the the variable stashed by stash-product-vars remains untouched. 3078dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato# $(1): The prefix as supplied to stash-product-vars 3088dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato# 3098dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onoratodefine assert-product-vars 3108dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato$(strip \ 3118dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato $(eval changed_variables:=) 312f9953b4a613d378cdb5cc18c1fa46ad3512eb0b9Ying Wang $(foreach v,$(_product_stash_var_list), \ 3137522f04a4b0327cf493dfe6c501634b2b1e1367aYing Wang $(if $(call streq,$($(v)),$($(strip $(1))_$(call rot13,$(v)))),, \ 3148dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato $(eval $(warning $(v) has been modified: $($(v)))) \ 3157522f04a4b0327cf493dfe6c501634b2b1e1367aYing Wang $(eval $(warning previous value: $($(strip $(1))_$(call rot13,$(v))))) \ 3168dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato $(eval changed_variables := $(changed_variables) $(v))) \ 3178dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato ) \ 3188dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato $(if $(changed_variables),\ 3198dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato $(eval $(error The following variables have been changed: $(changed_variables))),) 3208dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onorato) 3218dc8faaaeadf83353b8144cc0db58972f19f5c7eJoe Onoratoendef 322c41c5f4e46ff8da87de593e581ac9ed27b42504bKeun young Park 323c41c5f4e46ff8da87de593e581ac9ed27b42504bKeun young Parkdefine add-to-product-copy-files-if-exists 324c41c5f4e46ff8da87de593e581ac9ed27b42504bKeun young Park$(if $(wildcard $(word 1,$(subst :, ,$(1)))),$(1)) 325c41c5f4e46ff8da87de593e581ac9ed27b42504bKeun young Parkendef 32620ebd2ef081f2a3e85a4adcf8837e6f5b68bdeeaYing Wang 32720ebd2ef081f2a3e85a4adcf8837e6f5b68bdeeaYing Wang# whitespace placeholder when we record module's dex-preopt config. 32820ebd2ef081f2a3e85a4adcf8837e6f5b68bdeeaYing Wang_PDPMC_SP_PLACE_HOLDER := |@SP@| 32920ebd2ef081f2a3e85a4adcf8837e6f5b68bdeeaYing Wang# Set up dex-preopt config for a module. 33020ebd2ef081f2a3e85a4adcf8837e6f5b68bdeeaYing Wang# $(1) list of module names 33120ebd2ef081f2a3e85a4adcf8837e6f5b68bdeeaYing Wang# $(2) the modules' dex-preopt config 33220ebd2ef081f2a3e85a4adcf8837e6f5b68bdeeaYing Wangdefine add-product-dex-preopt-module-config 33320ebd2ef081f2a3e85a4adcf8837e6f5b68bdeeaYing Wang$(eval _c := $(subst $(space),$(_PDPMC_SP_PLACE_HOLDER),$(strip $(2))))\ 33420ebd2ef081f2a3e85a4adcf8837e6f5b68bdeeaYing Wang$(eval PRODUCT_DEX_PREOPT_MODULE_CONFIGS += \ 33520ebd2ef081f2a3e85a4adcf8837e6f5b68bdeeaYing Wang $(foreach m,$(1),$(m)=$(_c))) 33620ebd2ef081f2a3e85a4adcf8837e6f5b68bdeeaYing Wangendef 337bb5454b6db5770f0b0275424148b2d7d3c52a56dAndreas Gampe 338bb5454b6db5770f0b0275424148b2d7d3c52a56dAndreas Gampe# whitespace placeholder when we record module's sanitizer config. 339bb5454b6db5770f0b0275424148b2d7d3c52a56dAndreas Gampe_PSMC_SP_PLACE_HOLDER := |@SP@| 340bb5454b6db5770f0b0275424148b2d7d3c52a56dAndreas Gampe# Set up sanitizer config for a module. 341bb5454b6db5770f0b0275424148b2d7d3c52a56dAndreas Gampe# $(1) list of module names 342bb5454b6db5770f0b0275424148b2d7d3c52a56dAndreas Gampe# $(2) the modules' sanitizer config 343bb5454b6db5770f0b0275424148b2d7d3c52a56dAndreas Gampedefine add-product-sanitizer-module-config 344bb5454b6db5770f0b0275424148b2d7d3c52a56dAndreas Gampe$(eval _c := $(subst $(space),$(_PSMC_SP_PLACE_HOLDER),$(strip $(2))))\ 345bb5454b6db5770f0b0275424148b2d7d3c52a56dAndreas Gampe$(eval PRODUCT_SANITIZER_MODULE_CONFIGS += \ 346bb5454b6db5770f0b0275424148b2d7d3c52a56dAndreas Gampe $(foreach m,$(1),$(m)=$(_c))) 347bb5454b6db5770f0b0275424148b2d7d3c52a56dAndreas Gampeendef 348