From 2c7fb2df082b842fbc53e02744e27acc8c1dd0ed Mon Sep 17 00:00:00 2001 From: Qing Shen Date: Wed, 14 Aug 2024 01:21:56 +0000 Subject: [PATCH] Add a coverage suffix to avoid Ninja file regeneration. This CL uses the environment variable, EMMA_INSTRUMENT to determine whether or not coverage is enabled. If coverage is enabled, it adds a bunch of suffixes to the files generated in out/soong/ folders. This change reduces the build time by avoiding ninja regeneration when users simply switches from atest to atest --experimental-coverage, or vice versa, and no Android.bp changes are made. Bug: 331444846 Test: Locally run m libc, and then EMMA_INSTRUMENT m libc twice, no ninja regenerations required. Compared the hash of out/target/product/vsoc_x86_64/ between the before-change repo and after-change repo. Only diff is the after-change directory contains an extra file `out/target/product/vsoc_x86_64/.installable_files` while the original directory has only `out/target/product/vsoc_x86_64/.installable_files.previous`, both files have the same hash. Change-Id: I91eb1134ac552f47a40f3d5ddaab630d146b0773 --- core/base_rules.mk | 2 +- core/config.mk | 11 +++++++++-- core/dex_preopt_config.mk | 2 +- core/main.mk | 10 ++++++---- core/soong_config.mk | 6 +++--- 5 files changed, 20 insertions(+), 11 deletions(-) diff --git a/core/base_rules.mk b/core/base_rules.mk index ca553f6b05..b9b1954f50 100644 --- a/core/base_rules.mk +++ b/core/base_rules.mk @@ -340,7 +340,7 @@ LOCAL_BUILT_MODULE := $(intermediates)/$(my_built_module_stem) ifneq (,$(LOCAL_SOONG_INSTALLED_MODULE)) ifneq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK)) - $(call pretty-error, LOCAL_SOONG_INSTALLED_MODULE can only be used from $(SOONG_ANDROID_MK)) + $(call pretty-error, LOCAL_MODULE_MAKEFILE can only be used from $(SOONG_ANDROID_MK)) endif # Use the install path requested by Soong. LOCAL_INSTALLED_MODULE := $(LOCAL_SOONG_INSTALLED_MODULE) diff --git a/core/config.mk b/core/config.mk index ae659441de..b01110181f 100644 --- a/core/config.mk +++ b/core/config.mk @@ -1252,8 +1252,15 @@ include $(BUILD_SYSTEM)/sysprop_config.mk # consistency with those defined in BoardConfig.mk files. include $(BUILD_SYSTEM)/android_soong_config_vars.mk -SOONG_VARIABLES := $(SOONG_OUT_DIR)/soong.$(TARGET_PRODUCT).variables -SOONG_EXTRA_VARIABLES := $(SOONG_OUT_DIR)/soong.$(TARGET_PRODUCT).extra.variables +# EMMA_INSTRUMENT is set to true when coverage is enabled. Creates a suffix to +# differeciate the coverage version of ninja files. This will save 5 minutes of +# build time used to regenerate ninja. +ifeq (true,$(EMMA_INSTRUMENT)) +COVERAGE_SUFFIX := .coverage +endif + +SOONG_VARIABLES := $(SOONG_OUT_DIR)/soong.$(TARGET_PRODUCT)$(COVERAGE_SUFFIX).variables +SOONG_EXTRA_VARIABLES := $(SOONG_OUT_DIR)/soong.$(TARGET_PRODUCT)$(COVERAGE_SUFFIX).extra.variables ifeq ($(CALLED_FROM_SETUP),true) include $(BUILD_SYSTEM)/ninja_config.mk diff --git a/core/dex_preopt_config.mk b/core/dex_preopt_config.mk index d51de33273..f1e9fb59b7 100644 --- a/core/dex_preopt_config.mk +++ b/core/dex_preopt_config.mk @@ -1,4 +1,4 @@ -DEX_PREOPT_CONFIG := $(SOONG_OUT_DIR)/dexpreopt.config +DEX_PREOPT_CONFIG := $(SOONG_OUT_DIR)/dexpreopt${COVERAGE_SUFFIX}.config ENABLE_PREOPT := true ENABLE_PREOPT_BOOT_IMAGES := true diff --git a/core/main.mk b/core/main.mk index 8d737939fd..4344fc5b69 100644 --- a/core/main.mk +++ b/core/main.mk @@ -31,8 +31,7 @@ endif .KATI_READONLY := $(foreach n,$(SOONG_CONFIG_NAMESPACES),SOONG_CONFIG_$(n)) .KATI_READONLY := $(foreach n,$(SOONG_CONFIG_NAMESPACES),$(foreach k,$(SOONG_CONFIG_$(n)),SOONG_CONFIG_$(n)_$(k))) -include $(SOONG_MAKEVARS_MK) - +include $(SOONG_OUT_DIR)/make_vars-$(TARGET_PRODUCT)$(COVERAGE_SUFFIX).mk YACC :=$= $(BISON) -d include $(BUILD_SYSTEM)/clang/config.mk @@ -276,12 +275,15 @@ FULL_BUILD := true # Include all of the makefiles in the system # -subdir_makefiles := $(SOONG_OUT_DIR)/installs-$(TARGET_PRODUCT).mk $(SOONG_ANDROID_MK) +subdir_makefiles := $(SOONG_OUT_DIR)/installs-$(TARGET_PRODUCT)$(COVERAGE_SUFFIX).mk $(SOONG_ANDROID_MK) + # Android.mk files are only used on Linux builds, Mac only supports Android.bp ifeq ($(HOST_OS),linux) subdir_makefiles += $(file <$(OUT_DIR)/.module_paths/Android.mk.list) endif -subdir_makefiles += $(SOONG_OUT_DIR)/late-$(TARGET_PRODUCT).mk + +subdir_makefiles += $(SOONG_OUT_DIR)/late-$(TARGET_PRODUCT)$(COVERAGE_SUFFIX).mk + subdir_makefiles_total := $(words int $(subdir_makefiles) post finish) .KATI_READONLY := subdir_makefiles_total diff --git a/core/soong_config.mk b/core/soong_config.mk index 72ee2e441e..77c8b6f26d 100644 --- a/core/soong_config.mk +++ b/core/soong_config.mk @@ -1,5 +1,5 @@ -SOONG_MAKEVARS_MK := $(SOONG_OUT_DIR)/make_vars-$(TARGET_PRODUCT).mk -SOONG_ANDROID_MK := $(SOONG_OUT_DIR)/Android-$(TARGET_PRODUCT).mk +SOONG_MAKEVARS_MK := $(SOONG_OUT_DIR)/make_vars-$(TARGET_PRODUCT)$(COVERAGE_SUFFIX).mk +SOONG_ANDROID_MK := $(SOONG_OUT_DIR)/Android-$(TARGET_PRODUCT)$(COVERAGE_SUFFIX).mk include $(BUILD_SYSTEM)/art_config.mk include $(BUILD_SYSTEM)/dex_preopt_config.mk @@ -26,7 +26,7 @@ ifeq ($(WRITE_SOONG_VARIABLES),true) $(shell mkdir -p $(dir $(SOONG_VARIABLES))) $(call json_start) -$(call add_json_str, Make_suffix, -$(TARGET_PRODUCT)) +$(call add_json_str, Make_suffix, -$(TARGET_PRODUCT)$(COVERAGE_SUFFIX)) $(call add_json_str, BuildId, $(BUILD_ID)) $(call add_json_str, BuildFingerprintFile, build_fingerprint.txt)