diff --git a/core/release_config.mk b/core/release_config.mk index bb519804d1..5fe3d3905a 100644 --- a/core/release_config.mk +++ b/core/release_config.mk @@ -13,6 +13,16 @@ # limitations under the License. +# ----------------------------------------------------------------- +# Determine which pass this is. +# ----------------------------------------------------------------- +# On the first pass, we are asked for only PRODUCT_RELEASE_CONFIG_MAPS, +# on the second pass, we are asked for whatever else is wanted. +_final_product_config_pass:= +ifneq (PRODUCT_RELEASE_CONFIG_MAPS,$(DUMP_MANY_VARS)) + _final_product_config_pass:=true +endif + # ----------------------------------------------------------------- # Choose the flag files # ----------------------------------------------------------------- @@ -90,7 +100,7 @@ $(foreach map,$(protobuf_map_files), \ ifneq (,$(_must_protobuf)) ifeq (,$(_can_protobuf)) - # We must use protobuf, but we cannot use protobuf. + # We must use protobuf, but we cannot use protobuf. $(error release config is a mixture of .scl and .textproto) endif endif @@ -120,11 +130,22 @@ ifneq (,$(_use_protobuf)) # Disable the build flag in release-config. _args += --guard=false endif - $(KATI_shell_no_rerun $(OUT_DIR)/release-config $(_args) >$(OUT_DIR)/release-config.out && touch -t 200001010000 $(OUT_DIR)/release-config.out) + _flags_file:=$(OUT_DIR)/soong/release-config/release_config-$(TARGET_PRODUCT)-$(TARGET_RELEASE).vars + # release-config generates $(_flags_varmk) + _flags_varmk:=$(_flags_file:.vars=.varmk) + $(shell $(OUT_DIR)/release-config $(_args) >$(OUT_DIR)/release-config.out 2>&1 && touch -t 200001010000 $(_flags_varmk)) $(if $(filter-out 0,$(.SHELLSTATUS)),$(error release-config failed to run)) - # This will also set _all_release_configs for us. - $(eval include $(OUT_DIR)/soong/release-config/release_config-$(TARGET_PRODUCT)-$(TARGET_RELEASE).mk) - $(KATI_extra_file_deps $(OUT_DIR)/release-config $(config_map_files)) + ifneq (,$(_final_product_config_pass)) + # Save the final version of the config. + $(shell if ! cmp --quiet $(_flags_varmk) $(_flags_file); then cp $(_flags_varmk) $(_flags_file); fi) + # This will also set _all_release_configs and _used_files for us. + $(eval include $(_flags_file)) + $(KATI_extra_file_deps $(OUT_DIR)/release-config $(protobuf_map_files) $(_flags_file)) + else + # This is the first pass of product config. + $(eval include $(_flags_varmk)) + endif + _used_files := ifeq (,$(_must_protobuf)$(RELEASE_BUILD_FLAGS_IN_PROTOBUF)) _use_protobuf := endif @@ -237,7 +258,7 @@ endif # During pass 1 of product config, using a non-existent release config is not an error. # We can safely assume that we are doing pass 1 if DUMP_MANY_VARS=="PRODUCT_RELEASE_CONFIG_MAPS". -ifneq (PRODUCT_RELEASE_CONFIG_MAPS,$(DUMP_MANY_VARS)) +ifneq (,$(_final_product_config_pass)) ifeq ($(filter $(_all_release_configs), $(TARGET_RELEASE)),) $(error No release config found for TARGET_RELEASE: $(TARGET_RELEASE). Available releases are: $(_all_release_configs)) endif