Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dac6b97f authored by LaMont Jones's avatar LaMont Jones Committed by Gerrit Code Review
Browse files

Merge "Enable build flags in protobuf" into main

parents b9ffad83 20dd4c23
Loading
Loading
Loading
Loading
+92 −2
Original line number Diff line number Diff line
@@ -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), \
@@ -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
#
@@ -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
@@ -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.
@@ -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)
@@ -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
# -----------------------------------------------------------------
@@ -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 :=