diff --git a/core/android_soong_config_vars.mk b/core/android_soong_config_vars.mk index 13a5bc0f5b..6d4bed256d 100644 --- a/core/android_soong_config_vars.mk +++ b/core/android_soong_config_vars.mk @@ -37,7 +37,7 @@ $(call add_soong_config_var,ANDROID,TARGET_ENABLE_MEDIADRM_64) $(call add_soong_config_var,ANDROID,TARGET_DYNAMIC_64_32_MEDIASERVER) # PRODUCT_PRECOMPILED_SEPOLICY defaults to true. Explicitly check if it's "false" or not. -$(call add_soong_config_var_value,ANDROID,PRODUCT_PRECOMPILED_SEPOLICY,$(if $(filter false,$(PRODUCT_PRECOMPILED_SEPOLICY)),false,true)) +$(call soong_config_set_bool,ANDROID,PRODUCT_PRECOMPILED_SEPOLICY,$(if $(filter false,$(PRODUCT_PRECOMPILED_SEPOLICY)),false,true)) ifdef ART_DEBUG_OPT_FLAG $(call soong_config_set,art_module,art_debug_opt_flag,$(ART_DEBUG_OPT_FLAG)) diff --git a/core/config.mk b/core/config.mk index 37e29eb290..317cdfe4ba 100644 --- a/core/config.mk +++ b/core/config.mk @@ -316,6 +316,19 @@ $(call soong_config_define_internal,$1,$2) \ $(eval SOONG_CONFIG_$(strip $1)_$(strip $2):=$(strip $3)) endef +# soong_config_set_bool is the same as soong_config_set, but it will +# also type the variable as a bool, so that when using select() expressions +# in blueprint files they can use boolean values instead of strings. +# It will only accept "true" for its value, any other value will be +# treated as false. +# $1 is the namespace. $2 is the variable name. $3 is the variable value. +# Ex: $(call soong_config_set_bool,acme,COOL_FEATURE,true) +define soong_config_set_bool +$(call soong_config_define_internal,$1,$2) \ +$(eval SOONG_CONFIG_$(strip $1)_$(strip $2):=$(filter true,$3)) +$(eval SOONG_CONFIG_TYPE_$(strip $1)_$(strip $2):=bool) +endef + # soong_config_append appends to the value of the variable in the given Soong # config namespace. If the variable does not exist, it will be defined. If the # namespace does not exist, it will be defined. diff --git a/core/soong_config.mk b/core/soong_config.mk index d002398164..c5f15367c9 100644 --- a/core/soong_config.mk +++ b/core/soong_config.mk @@ -266,6 +266,18 @@ $(foreach namespace,$(sort $(SOONG_CONFIG_NAMESPACES)),\ $(call end_json_map)) $(call end_json_map) +# Add the types of the variables in VendorVars. Since this is much newer +# than VendorVars, which has a history of just using string values for everything, +# variables are assumed to be strings by default. For strings, SOONG_CONFIG_TYPE_* +# will not be set, and they will not have an entry in the VendorVarTypes map. +$(call add_json_map, VendorVarTypes) +$(foreach namespace,$(sort $(SOONG_CONFIG_NAMESPACES)),\ + $(call add_json_map, $(namespace))\ + $(foreach key,$(sort $(SOONG_CONFIG_$(namespace))),\ + $(if $(SOONG_CONFIG_TYPE_$(namespace)_$(key)),$(call add_json_str,$(key),$(subst ",\",$(SOONG_CONFIG_TYPE_$(namespace)_$(key))))))\ + $(call end_json_map)) +$(call end_json_map) + $(call add_json_bool, EnforceProductPartitionInterface, $(filter true,$(PRODUCT_ENFORCE_PRODUCT_PARTITION_INTERFACE))) $(call add_json_str, DeviceCurrentApiLevelForVendorModules, $(BOARD_CURRENT_API_LEVEL_FOR_VENDOR_MODULES))