From a5fa89818921fbc54d7e6d79efe5d3aa826b4d45 Mon Sep 17 00:00:00 2001 From: Anton Hansson Date: Tue, 24 Jul 2018 13:31:08 +0100 Subject: [PATCH] Don't apply path enforcements for non-full builds. The installed files lists are wildly inaccurate unless all the makefiles in the tree have been parsed, so the "redundant whitelist" computation will be too trigger-happy in this case. Bug: 111757442 Test: mmm -j system/extras/partition_tools Test: m out/target/product/generic_arm64/offending-artifacts.txt Change-Id: Id3a9f61d2366de77cdedf9cb1e4e39f7d18ade6f --- core/main.mk | 65 ++++++++++++++++++++++++++-------------------------- 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/core/main.mk b/core/main.mk index 76a1f3fe64..29f93d5cc8 100644 --- a/core/main.mk +++ b/core/main.mk @@ -977,6 +977,39 @@ endif ifdef FULL_BUILD product_FILES := $(call product-installed-files, $(INTERNAL_PRODUCT)) + + # Verify the artifact path requirements made by included products. + all_offending_files := + $(foreach makefile,$(ARTIFACT_PATH_REQUIREMENT_PRODUCTS),\ + $(eval requirements := $(PRODUCTS.$(makefile).ARTIFACT_PATH_REQUIREMENTS)) \ + $(eval ### Verify that the product only produces files inside its path requirements.) \ + $(eval whitelist := $(PRODUCTS.$(makefile).ARTIFACT_PATH_WHITELIST)) \ + $(eval path_patterns := $(call resolve-product-relative-paths,$(requirements),%)) \ + $(eval whitelist_patterns := $(call resolve-product-relative-paths,$(whitelist))) \ + $(eval files := $(call product-installed-files, $(makefile))) \ + $(eval files := $(filter-out $(TARGET_OUT_FAKE)/% $(HOST_OUT)/%,$(files))) \ + $(eval # RROs become REQUIRED by the source module, but are always placed on the vendor partition.) \ + $(eval files := $(filter-out %__auto_generated_rro.apk,$(files))) \ + $(eval offending_files := $(filter-out $(path_patterns) $(whitelist_patterns),$(files))) \ + $(call maybe-print-list-and-error,$(offending_files),$(makefile) produces files outside its artifact path requirement.) \ + $(eval unused_whitelist := $(filter-out $(files),$(whitelist_patterns))) \ + $(call maybe-print-list-and-error,$(unused_whitelist),$(makefile) includes redundant whitelist entries in its artifact path requirement.) \ + $(eval ### Optionally verify that nothing else produces files inside this artifact path requirement.) \ + $(eval extra_files := $(filter-out $(files) $(HOST_OUT)/%,$(product_FILES))) \ + $(eval files_in_requirement := $(filter $(path_patterns),$(extra_files))) \ + $(eval all_offending_files += $(files_in_requirement)) \ + $(eval whitelist := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST)) \ + $(eval whitelist_patterns := $(call resolve-product-relative-paths,$(whitelist))) \ + $(eval offending_files := $(filter-out $(whitelist_patterns),$(files_in_requirement))) \ + $(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS),\ + $(call maybe-print-list-and-error,$(offending_files),$(INTERNAL_PRODUCT) produces files inside $(makefile)s artifact path requirement.) \ + $(eval unused_whitelist := $(filter-out $(extra_files),$(whitelist_patterns))) \ + $(call maybe-print-list-and-error,$(unused_whitelist),$(INTERNAL_PRODUCT) includes redundant artifact path requirement whitelist entries.) \ + ) \ + ) +$(PRODUCT_OUT)/offending_artifacts.txt: + rm -f $@ + $(foreach f,$(sort $(all_offending_files)),echo $(f) >> $@;) else # We're not doing a full build, and are probably only including # a subset of the module makefiles. Don't try to build any modules @@ -985,38 +1018,6 @@ else product_FILES := endif -# Verify the artifact path requirements made by included products. -$(foreach makefile,$(ARTIFACT_PATH_REQUIREMENT_PRODUCTS),\ - $(eval requirements := $(PRODUCTS.$(makefile).ARTIFACT_PATH_REQUIREMENTS)) \ - $(eval ### Verify that the product only produces files inside its path requirements.) \ - $(eval whitelist := $(PRODUCTS.$(makefile).ARTIFACT_PATH_WHITELIST)) \ - $(eval path_patterns := $(call resolve-product-relative-paths,$(requirements),%)) \ - $(eval whitelist_patterns := $(call resolve-product-relative-paths,$(whitelist))) \ - $(eval files := $(call product-installed-files, $(makefile))) \ - $(eval files := $(filter-out $(TARGET_OUT_FAKE)/% $(HOST_OUT)/%,$(files))) \ - $(eval # RROs become REQUIRED by the source module, but are always placed on the vendor partition.) \ - $(eval files := $(filter-out %__auto_generated_rro.apk,$(files))) \ - $(eval offending_files := $(filter-out $(path_patterns) $(whitelist_patterns),$(files))) \ - $(call maybe-print-list-and-error,$(offending_files),$(makefile) produces files outside its artifact path requirement.) \ - $(eval unused_whitelist := $(filter-out $(files),$(whitelist_patterns))) \ - $(call maybe-print-list-and-error,$(unused_whitelist),$(makefile) includes redundant whitelist entries in its artifact path requirement.) \ - $(eval ### Optionally verify that nothing else produces files inside this artifact path requirement.) \ - $(eval extra_files := $(filter-out $(files) $(HOST_OUT)/%,$(product_FILES))) \ - $(eval files_in_requirement := $(filter $(path_patterns),$(extra_files))) \ - $(eval all_offending_files += $(files_in_requirement)) \ - $(eval whitelist := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST)) \ - $(eval whitelist_patterns := $(call resolve-product-relative-paths,$(whitelist))) \ - $(eval offending_files := $(filter-out $(whitelist_patterns),$(files_in_requirement))) \ - $(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS),\ - $(call maybe-print-list-and-error,$(offending_files),$(INTERNAL_PRODUCT) produces files inside $(makefile)s artifact path requirement.) \ - $(eval unused_whitelist := $(filter-out $(extra_files),$(whitelist_patterns))) \ - $(call maybe-print-list-and-error,$(unused_whitelist),$(INTERNAL_PRODUCT) includes redundant artifact path requirement whitelist entries.) \ - ) \ -) -$(PRODUCT_OUT)/offending_artifacts.txt: - rm -f $@ - $(foreach f,$(sort $(all_offending_files)),echo $(f) >> $@;) - ifeq (0,1) $(info product_FILES for $(TARGET_DEVICE) ($(INTERNAL_PRODUCT)):) $(foreach p,$(product_FILES),$(info : $(p)))