diff options
Diffstat (limited to 'core/product.mk')
-rw-r--r-- | core/product.mk | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/core/product.mk b/core/product.mk new file mode 100644 index 0000000..0d943cc --- /dev/null +++ b/core/product.mk @@ -0,0 +1,157 @@ +# +# Copyright (C) 2007 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# +# Functions for including AndroidProducts.mk files +# + +# +# Returns the list of all AndroidProducts.mk files. +# $(call ) isn't necessary. +# +define _find-android-products-files +$(foreach vendor,$(wildcard vendor/*), \ + $(if $(wildcard $(vendor)/AndroidProducts.mk), \ + $(vendor)/AndroidProducts.mk \ + , \ + $(wildcard $(vendor)/*/AndroidProducts.mk) \ + ) \ + ) \ + $(wildcard $(SRC_TARGET_DIR)/product/AndroidProducts.mk) +endef + +# +# Returns the sorted concatenation of all PRODUCT_MAKEFILES +# variables set in all AndroidProducts.mk files. +# $(call ) isn't necessary. +# +define get-all-product-makefiles +$(sort \ + $(foreach f,$(_find-android-products-files), \ + $(eval PRODUCT_MAKEFILES :=) \ + $(eval LOCAL_DIR := $(patsubst %/,%,$(dir $(f)))) \ + $(eval include $(f)) \ + $(PRODUCT_MAKEFILES) \ + ) \ + $(eval PRODUCT_MAKEFILES :=) \ + $(eval LOCAL_DIR :=) \ + ) +endef + +# +# Functions for including product makefiles +# + +_product_var_list := \ + PRODUCT_NAME \ + PRODUCT_MODEL \ + PRODUCT_LOCALES \ + PRODUCT_PACKAGES \ + PRODUCT_DEVICE \ + PRODUCT_MANUFACTURER \ + PRODUCT_BRAND \ + PRODUCT_PROPERTY_OVERRIDES \ + PRODUCT_COPY_FILES \ + PRODUCT_OTA_PUBLIC_KEYS + +define dump-product +$(info ==== $(1) ====)\ +$(foreach v,$(_product_var_list),\ +$(info PRODUCTS.$(1).$(v) := $(PRODUCTS.$(1).$(v))))\ +$(info --------) +endef + +define dump-products +$(foreach p,$(PRODUCTS),$(call dump-product,$(p))) +endef + +# +# $(1): product to inherit +# +define inherit-product + $(foreach v,$(_product_var_list), \ + $(eval $(v) := $($(v)) $(INHERIT_TAG)$(strip $(1)))) +endef + +# +# $(1): product makefile list +# +#TODO: check to make sure that products have all the necessary vars defined +define import-products +$(call import-nodes,PRODUCTS,$(1),$(_product_var_list)) +endef + + +# +# Does various consistency checks on all of the known products. +# Takes no parameters, so $(call ) is not necessary. +# +define check-all-products +$(if ,, \ + $(eval _cap_names :=) \ + $(foreach p,$(PRODUCTS), \ + $(eval pn := $(strip $(PRODUCTS.$(p).PRODUCT_NAME))) \ + $(if $(pn),,$(error $(p): PRODUCT_NAME must be defined.)) \ + $(if $(filter $(pn),$(_cap_names)), \ + $(error $(p): PRODUCT_NAME must be unique; "$(pn)" already used by $(strip \ + $(foreach \ + pp,$(PRODUCTS), + $(if $(filter $(pn),$(PRODUCTS.$(pp).PRODUCT_NAME)), \ + $(pp) \ + ))) \ + ) \ + ) \ + $(eval _cap_names += $(pn)) \ + $(if $(call is-c-identifier,$(pn)),, \ + $(error $(p): PRODUCT_NAME must be a valid C identifier, not "$(pn)") \ + ) \ + $(eval pb := $(strip $(PRODUCTS.$(p).PRODUCT_BRAND))) \ + $(if $(pb),,$(error $(p): PRODUCT_BRAND must be defined.)) \ + $(foreach cf,$(strip $(PRODUCTS.$(p).PRODUCT_COPY_FILES)), \ + $(if $(filter 2,$(words $(subst :,$(space),$(cf)))),, \ + $(error $(p): malformed COPY_FILE "$(cf)") \ + ) \ + ) \ + ) \ +) +endef + + +# +# Returns the product makefile path for the product with the provided name +# +# $(1): short product name like "generic" +# +define _resolve-short-product-name + $(eval pn := $(strip $(1))) + $(eval p := \ + $(foreach p,$(PRODUCTS), \ + $(if $(filter $(pn),$(PRODUCTS.$(p).PRODUCT_NAME)), \ + $(p) \ + )) \ + ) + $(eval p := $(sort $(p))) + $(if $(filter 1,$(words $(p))), \ + $(p), \ + $(if $(filter 0,$(words $(p))), \ + $(error No matches for product "$(pn)"), \ + $(error Product "$(pn)" ambiguous: matches $(p)) \ + ) \ + ) +endef +define resolve-short-product-name +$(strip $(call _resolve-short-product-name,$(1))) +endef |