Add artifact path requirement support to Starlark

Artifact path requirements requires setting some new variables,
and also dumping the state of the product config variables
after evaluating partial products that set artifact path requirements.

Bug: 188079133
Test: Removed the code that disabled artifacts path requirements from the rbc dashboard script,
      and verified that it was still green for aosp_arm64
Change-Id: I228e35285d788f4c83aa695c0f28b7c7db02544c
This commit is contained in:
Cole Faust
2022-03-21 16:43:49 -07:00
parent 0472730380
commit 2e8bb7989e
3 changed files with 30 additions and 9 deletions

View File

@@ -1351,7 +1351,7 @@ else ifdef FULL_BUILD
# Verify the artifact path requirements made by included products. # Verify the artifact path requirements made by included products.
is_asan := $(if $(filter address,$(SANITIZE_TARGET)),true) is_asan := $(if $(filter address,$(SANITIZE_TARGET)),true)
ifeq (,$(or $(is_asan),$(DISABLE_ARTIFACT_PATH_REQUIREMENTS),$(RBC_PRODUCT_CONFIG),$(RBC_BOARD_CONFIG))) ifeq (,$(or $(is_asan),$(DISABLE_ARTIFACT_PATH_REQUIREMENTS)))
include $(BUILD_SYSTEM)/artifact_path_requirements.mk include $(BUILD_SYSTEM)/artifact_path_requirements.mk
endif endif
else else

View File

@@ -263,7 +263,10 @@ endif # Import all or just the current product makefile
# Quick check # Quick check
$(check-all-products) $(check-all-products)
ifeq ($(SKIP_ARTIFACT_PATH_REQUIREMENT_PRODUCTS_CHECK),) # This step was already handled in the RBC product configuration.
# Since the equivalent starlark code will not add the partial products to
# the PRODUCTS variable, it's ok for them to be set before check-all-products
ifeq ($(RBC_PRODUCT_CONFIG)$(SKIP_ARTIFACT_PATH_REQUIREMENT_PRODUCTS_CHECK),)
# Import all the products that have made artifact path requirements, so that we can verify # Import all the products that have made artifact path requirements, so that we can verify
# the artifacts they produce. # the artifacts they produce.
# These are imported after check-all-products because some of them might not be real products. # These are imported after check-all-products because some of them might not be real products.

View File

@@ -157,6 +157,13 @@ def _product_configuration(top_pcm_name, top_pcm, input_variables_init):
handle = __h_new() handle = __h_new()
pcm(globals, handle) pcm(globals, handle)
if handle.artifact_path_requirements:
globals["PRODUCTS."+name+".mk.ARTIFACT_PATH_REQUIREMENTS"] = handle.artifact_path_requirements
globals["PRODUCTS."+name+".mk.ARTIFACT_PATH_ALLOWED_LIST"] = handle.artifact_path_allowed_list
globals["PRODUCTS."+name+".mk.ARTIFACT_PATH_REQUIREMENT_IS_RELAXED"] = "true" if handle.artifact_path_requirement_is_relaxed[0] else ""
globals.setdefault("ARTIFACT_PATH_REQUIREMENT_PRODUCTS", [])
globals["ARTIFACT_PATH_REQUIREMENT_PRODUCTS"] += [name+".mk"]
# Now we know everything about this PCM, record it in 'configs'. # Now we know everything about this PCM, record it in 'configs'.
children = handle.inherited_modules children = handle.inherited_modules
if _options.trace_modules: if _options.trace_modules:
@@ -211,6 +218,10 @@ def _product_configuration(top_pcm_name, top_pcm, input_variables_init):
_percolate_inherited(configs, pcm_name, cfg, children_names) _percolate_inherited(configs, pcm_name, cfg, children_names)
configs[pcm_name] = pcm, cfg, children_names, True configs[pcm_name] = pcm, cfg, children_names, True
if (pcm_name + ".mk") in globals.get("ARTIFACT_PATH_REQUIREMENT_PRODUCTS", []):
for var, val in cfg.items():
globals["PRODUCTS."+pcm_name+".mk."+var] = val
# Copy product config variables from the cfg dictionary to the # Copy product config variables from the cfg dictionary to the
# PRODUCTS.<top_level_makefile_name>.<var_name> global variables. # PRODUCTS.<top_level_makefile_name>.<var_name> global variables.
for var, val in configs[top_pcm_name][1].items(): for var, val in configs[top_pcm_name][1].items():
@@ -419,7 +430,10 @@ def __h_new():
return struct( return struct(
cfg = dict(), cfg = dict(),
inherited_modules = dict(), inherited_modules = dict(),
default_list_value = list() default_list_value = list(),
artifact_path_requirements = list(),
artifact_path_allowed_list = list(),
artifact_path_requirement_is_relaxed = [False], # as a list so that we can reassign it
) )
def __h_cfg(handle): def __h_cfg(handle):
@@ -564,13 +578,17 @@ def _notdir(paths):
""" """
return " ".join([__base(w) for w in __words(paths)]) return " ".join([__base(w) for w in __words(paths)])
def _require_artifacts_in_path(paths, allowed_paths): def _require_artifacts_in_path(handle, paths, allowed_paths):
"""TODO.""" """Equivalent to require-artifacts-in-path in Make."""
pass handle.artifact_path_requirements.clear()
handle.artifact_path_requirements.extend(__words(paths))
handle.artifact_path_allowed_list.clear()
handle.artifact_path_allowed_list.extend(__words(allowed_paths))
def _require_artifacts_in_path_relaxed(paths, allowed_paths): def _require_artifacts_in_path_relaxed(handle, paths, allowed_paths):
"""TODO.""" """Equivalent to require-artifacts-in-path-relaxed in Make."""
pass _require_artifacts_in_path(handle, paths, allowed_paths)
handle.artifact_path_requirement_is_relaxed[0] = True
def _expand_wildcard(pattern): def _expand_wildcard(pattern):
"""Expands shell wildcard pattern.""" """Expands shell wildcard pattern."""