Loading core/release_config.mk +92 −2 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ # which has OWNERS control. If it isn't let others define their own. # TODO: Remove wildcard for build/release one when all branch manifests # have updated. _must_protobuf := config_map_files := $(wildcard build/release/release_config_map.mk) \ $(wildcard vendor/google_shared/build/release/release_config_map.mk) \ $(if $(wildcard vendor/google/release/release_config_map.mk), \ Loading @@ -53,12 +54,84 @@ config_map_files := $(wildcard build/release/release_config_map.mk) \ ) \ ) protobuf_map_files := $(wildcard build/release/release_config_map.textproto) \ $(wildcard vendor/google_shared/build/release/release_config_map.textproto) \ $(if $(wildcard vendor/google/release/release_config_map.textproto), \ vendor/google/release/release_config_map.textproto, \ $(sort \ $(wildcard device/*/release/release_config_map.textproto) \ $(wildcard device/*/*/release/release_config_map.textproto) \ $(wildcard vendor/*/release/release_config_map.textproto) \ $(wildcard vendor/*/*/release/release_config_map.textproto) \ ) \ ) # PRODUCT_RELEASE_CONFIG_MAPS is set by Soong using an initial run of product # config to capture only the list of config maps needed by the build. # Keep them in the order provided, but remove duplicates. # Treat .mk and .textproto as equal for duplicate elimination, but force # protobuf if any PRODUCT_RELEASE_CONFIG_MAPS specify .textproto. $(foreach map,$(PRODUCT_RELEASE_CONFIG_MAPS), \ $(if $(filter $(map),$(config_map_files)),,$(eval config_map_files += $(map))) \ $(if $(filter $(basename $(map)),$(basename $(config_map_files))),, \ $(eval config_map_files += $(map))) \ $(if $(filter $(basename $(map)).textproto,$(map)),$(eval _must_protobuf := true)) \ ) # If we are missing the textproto version of any of $(config_map_files), we cannot use protobuf. _can_protobuf := true $(foreach map,$(config_map_files), \ $(if $(wildcard $(basename $(map)).textproto),,$(eval _can_protobuf :=)) \ ) # If we are missing the mk version of any of $(protobuf_map_files), we must use protobuf. $(foreach map,$(protobuf_map_files), \ $(if $(wildcard $(basename $(map)).mk),,$(eval _must_protobuf := true)) \ ) ifneq (,$(_must_protobuf)) ifeq (,$(_can_protobuf)) # We must use protobuf, but we cannot use protobuf. $(error release config is a mixture of .scl and .textproto) endif endif _use_protobuf := ifneq (,$(_must_protobuf)) _use_protobuf := true else ifneq ($(_can_protobuf),) # Determine the default $(foreach map,$(config_map_files), \ $(if $(wildcard $(dir $(map))/build_config/DEFAULT=proto),$(eval _use_protobuf := true)) \ $(if $(wildcard $(dir $(map))/build_config/DEFAULT=make),$(eval _use_protobuf := )) \ ) # Update for this specific release config only (no inheritance). $(foreach map,$(config_map_files), \ $(if $(wildcard $(dir $(map))/build_config/$(TARGET_RELEASE)=proto),$(eval _use_protobuf := true)) \ $(if $(wildcard $(dir $(map))/build_config/$(TARGET_RELEASE)=make),$(eval _use_protobuf := )) \ ) endif endif ifneq (,$(_use_protobuf)) # The .textproto files are the canonical source of truth. _args := $(foreach map,$(config_map_files), --map $(map) ) ifneq (,$(_must_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) $(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)) ifeq (,$(_must_protobuf)$(RELEASE_BUILD_FLAGS_IN_PROTOBUF)) _use_protobuf := endif endif ifeq (,$(_use_protobuf)) # The .mk files are the canonical source of truth. # Declare an alias release-config # Loading Loading @@ -144,6 +217,9 @@ $(foreach r,$(_all_release_configs),\ $(error Alias release config "$(r)" may not specify release config files $(_all_release_configs.$(r).FILES))\ ))) # Use makefiles endif ifeq ($(TARGET_RELEASE),) # We allow some internal paths to explicitly set TARGET_RELEASE to the # empty string. For the most part, 'make' treats unset and empty string as Loading @@ -167,6 +243,7 @@ ifneq (PRODUCT_RELEASE_CONFIG_MAPS,$(DUMP_MANY_VARS)) endif endif ifeq (,$(_use_protobuf)) # Choose flag files # Don't sort this, use it in the order they gave us. # Do allow duplicate entries, retaining only the first usage. Loading Loading @@ -196,6 +273,9 @@ define _apply-release-config-overrides $(error invalid use of apply-release-config-overrides) endef # use makefiles endif # TODO: Remove this check after enough people have sourced lunch that we don't # need to worry about it trying to do get_build_vars TARGET_RELEASE. Maybe after ~9/2023 ifneq ($(CALLED_FROM_SETUP),true) Loading @@ -207,15 +287,20 @@ TARGET_RELEASE:= endif .KATI_READONLY := TARGET_RELEASE ifeq (,$(_use_protobuf)) $(foreach config, $(_all_release_configs), \ $(eval _all_release_configs.$(config).DECLARED_IN:= ) \ $(eval _all_release_configs.$(config).FILES:= ) \ ) applied_releases:= # use makefiles endif _all_release_configs:= config_map_files:= applied_releases:= protobuf_map_files:= ifeq (,$(_use_protobuf)) # ----------------------------------------------------------------- # Flag declarations and values # ----------------------------------------------------------------- Loading Loading @@ -252,3 +337,8 @@ filename_to_starlark:= # outside of the source tree. $(call run-starlark,$(OUT_DIR)/release_config_entrypoint.scl,$(OUT_DIR)/release_config_entrypoint.scl,--allow_external_entrypoint) # use makefiles endif _can_protobuf := _must_protobuf := _use_protobuf := Loading
core/release_config.mk +92 −2 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ # which has OWNERS control. If it isn't let others define their own. # TODO: Remove wildcard for build/release one when all branch manifests # have updated. _must_protobuf := config_map_files := $(wildcard build/release/release_config_map.mk) \ $(wildcard vendor/google_shared/build/release/release_config_map.mk) \ $(if $(wildcard vendor/google/release/release_config_map.mk), \ Loading @@ -53,12 +54,84 @@ config_map_files := $(wildcard build/release/release_config_map.mk) \ ) \ ) protobuf_map_files := $(wildcard build/release/release_config_map.textproto) \ $(wildcard vendor/google_shared/build/release/release_config_map.textproto) \ $(if $(wildcard vendor/google/release/release_config_map.textproto), \ vendor/google/release/release_config_map.textproto, \ $(sort \ $(wildcard device/*/release/release_config_map.textproto) \ $(wildcard device/*/*/release/release_config_map.textproto) \ $(wildcard vendor/*/release/release_config_map.textproto) \ $(wildcard vendor/*/*/release/release_config_map.textproto) \ ) \ ) # PRODUCT_RELEASE_CONFIG_MAPS is set by Soong using an initial run of product # config to capture only the list of config maps needed by the build. # Keep them in the order provided, but remove duplicates. # Treat .mk and .textproto as equal for duplicate elimination, but force # protobuf if any PRODUCT_RELEASE_CONFIG_MAPS specify .textproto. $(foreach map,$(PRODUCT_RELEASE_CONFIG_MAPS), \ $(if $(filter $(map),$(config_map_files)),,$(eval config_map_files += $(map))) \ $(if $(filter $(basename $(map)),$(basename $(config_map_files))),, \ $(eval config_map_files += $(map))) \ $(if $(filter $(basename $(map)).textproto,$(map)),$(eval _must_protobuf := true)) \ ) # If we are missing the textproto version of any of $(config_map_files), we cannot use protobuf. _can_protobuf := true $(foreach map,$(config_map_files), \ $(if $(wildcard $(basename $(map)).textproto),,$(eval _can_protobuf :=)) \ ) # If we are missing the mk version of any of $(protobuf_map_files), we must use protobuf. $(foreach map,$(protobuf_map_files), \ $(if $(wildcard $(basename $(map)).mk),,$(eval _must_protobuf := true)) \ ) ifneq (,$(_must_protobuf)) ifeq (,$(_can_protobuf)) # We must use protobuf, but we cannot use protobuf. $(error release config is a mixture of .scl and .textproto) endif endif _use_protobuf := ifneq (,$(_must_protobuf)) _use_protobuf := true else ifneq ($(_can_protobuf),) # Determine the default $(foreach map,$(config_map_files), \ $(if $(wildcard $(dir $(map))/build_config/DEFAULT=proto),$(eval _use_protobuf := true)) \ $(if $(wildcard $(dir $(map))/build_config/DEFAULT=make),$(eval _use_protobuf := )) \ ) # Update for this specific release config only (no inheritance). $(foreach map,$(config_map_files), \ $(if $(wildcard $(dir $(map))/build_config/$(TARGET_RELEASE)=proto),$(eval _use_protobuf := true)) \ $(if $(wildcard $(dir $(map))/build_config/$(TARGET_RELEASE)=make),$(eval _use_protobuf := )) \ ) endif endif ifneq (,$(_use_protobuf)) # The .textproto files are the canonical source of truth. _args := $(foreach map,$(config_map_files), --map $(map) ) ifneq (,$(_must_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) $(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)) ifeq (,$(_must_protobuf)$(RELEASE_BUILD_FLAGS_IN_PROTOBUF)) _use_protobuf := endif endif ifeq (,$(_use_protobuf)) # The .mk files are the canonical source of truth. # Declare an alias release-config # Loading Loading @@ -144,6 +217,9 @@ $(foreach r,$(_all_release_configs),\ $(error Alias release config "$(r)" may not specify release config files $(_all_release_configs.$(r).FILES))\ ))) # Use makefiles endif ifeq ($(TARGET_RELEASE),) # We allow some internal paths to explicitly set TARGET_RELEASE to the # empty string. For the most part, 'make' treats unset and empty string as Loading @@ -167,6 +243,7 @@ ifneq (PRODUCT_RELEASE_CONFIG_MAPS,$(DUMP_MANY_VARS)) endif endif ifeq (,$(_use_protobuf)) # Choose flag files # Don't sort this, use it in the order they gave us. # Do allow duplicate entries, retaining only the first usage. Loading Loading @@ -196,6 +273,9 @@ define _apply-release-config-overrides $(error invalid use of apply-release-config-overrides) endef # use makefiles endif # TODO: Remove this check after enough people have sourced lunch that we don't # need to worry about it trying to do get_build_vars TARGET_RELEASE. Maybe after ~9/2023 ifneq ($(CALLED_FROM_SETUP),true) Loading @@ -207,15 +287,20 @@ TARGET_RELEASE:= endif .KATI_READONLY := TARGET_RELEASE ifeq (,$(_use_protobuf)) $(foreach config, $(_all_release_configs), \ $(eval _all_release_configs.$(config).DECLARED_IN:= ) \ $(eval _all_release_configs.$(config).FILES:= ) \ ) applied_releases:= # use makefiles endif _all_release_configs:= config_map_files:= applied_releases:= protobuf_map_files:= ifeq (,$(_use_protobuf)) # ----------------------------------------------------------------- # Flag declarations and values # ----------------------------------------------------------------- Loading Loading @@ -252,3 +337,8 @@ filename_to_starlark:= # outside of the source tree. $(call run-starlark,$(OUT_DIR)/release_config_entrypoint.scl,$(OUT_DIR)/release_config_entrypoint.scl,--allow_external_entrypoint) # use makefiles endif _can_protobuf := _must_protobuf := _use_protobuf :=