From b7fa335ed80ab016ee8325a2ec561699c812241f Mon Sep 17 00:00:00 2001 From: Inseob Kim Date: Tue, 30 Jul 2024 16:32:20 +0900 Subject: [PATCH] Reland "Migrate init.environ.rc module to Soong" Makefile module still remains to handle post install commands. We're going to move that to somewhere else as a followup. Relanding with a fix for hwasan build. HWADDRESS_SANITIZER_GLOBAL_OPTIONS is set by Soong's MakeVars, so we can't refer the variable on soong config modules. Instead, as the variable is hard-coded, this change hard-codes options in Android.bp. Bug: 353429422 Test: boot cuttlefish w/ and w/o USE_SOONG_DEFINED_SYSTEM_IMAGE Test: boot shiba with SANITIZE_TARGET=hwaddress Change-Id: I4f61d7f800e0563c49dec0151d4a648ce9814bc9 --- rootdir/Android.bp | 55 ++++++++++++++++++++++++++++++++++++++++++++++ rootdir/Android.mk | 44 +++++-------------------------------- 2 files changed, 61 insertions(+), 38 deletions(-) diff --git a/rootdir/Android.bp b/rootdir/Android.bp index 7105ed52a..bbc50534c 100644 --- a/rootdir/Android.bp +++ b/rootdir/Android.bp @@ -134,3 +134,58 @@ llndk_libraries_txt { sanitizer_libraries_txt { name: "sanitizer.libraries.txt", } + +EXPORT_GLOBAL_ASAN_OPTIONS = select(soong_config_variable("ANDROID", "ASAN_ENABLED"), { + true: "export ASAN_OPTIONS include=/system/asan.options", + default: "", +}) + +EXPORT_GLOBAL_HWASAN_OPTIONS = select(soong_config_variable("ANDROID", "HWASAN_ENABLED"), { + true: "export HWASAN_OPTIONS heap_history_size=1023,stack_history_size=512,export_memory_stats=0,max_malloc_fill_size=131072,malloc_fill_byte=0", + default: "", +}) + +EXPORT_GLOBAL_GCOV_OPTIONS = select(soong_config_variable("ANDROID", "GCOV_COVERAGE"), { + true: "export GCOV_PREFIX /data/misc/trace", + default: "", +}) + +EXPORT_GLOBAL_CLANG_COVERAGE_OPTIONS = select((soong_config_variable("ANDROID", "CLANG_COVERAGE"), soong_config_variable("ANDROID", "CLANG_COVERAGE_CONTINUOUS_MODE")), { + (true, true): "export LLVM_PROFILE_FILE /data/misc/trace/clang%c-%20m.profraw", + (true, default): "export LLVM_PROFILE_FILE /data/misc/trace/clang-%20m.profraw", + (default, default): "", +}) + +EXPORT_GLOBAL_SCUDO_ALLOCATION_RING_BUFFER_SIZE = select(soong_config_variable("ANDROID", "SCUDO_ALLOCATION_RING_BUFFER_SIZE"), { + "": "", + any @ size: "export SCUDO_ALLOCATION_RING_BUFFER_SIZE " + size, + default: "", +}) + +genrule { + name: "init.environ.rc.gen", + srcs: ["init.environ.rc.in"], + out: ["init.environ.rc"], + cmd: "cp -f $(in) $(out) && " + + "sed -i -e 's?%EXPORT_GLOBAL_ASAN_OPTIONS%?" + EXPORT_GLOBAL_ASAN_OPTIONS + "?g' $(out) && " + + "sed -i -e 's?%EXPORT_GLOBAL_GCOV_OPTIONS%?" + EXPORT_GLOBAL_GCOV_OPTIONS + "?g' $(out) && " + + "sed -i -e 's?%EXPORT_GLOBAL_CLANG_COVERAGE_OPTIONS%?" + EXPORT_GLOBAL_CLANG_COVERAGE_OPTIONS + "?g' $(out) && " + + "sed -i -e 's?%EXPORT_GLOBAL_HWASAN_OPTIONS%?" + EXPORT_GLOBAL_HWASAN_OPTIONS + "?g' $(out) && " + + "sed -i -e 's?%EXPORT_GLOBAL_SCUDO_ALLOCATION_RING_BUFFER_SIZE%?" + EXPORT_GLOBAL_SCUDO_ALLOCATION_RING_BUFFER_SIZE + "?g' $(out)", +} + +prebuilt_root { + name: "init.environ.rc-soong", + src: ":init.environ.rc.gen", + filename: "init.environ.rc", + install_in_root: true, + no_full_install: true, + required: select((soong_config_variable("ANDROID", "ASAN_ENABLED"), soong_config_variable("ANDROID", "SANITIZE_TARGET_SYSTEM_ENABLED")), { + (true, true): [ + "asan.options", + "asan_extract", + ], + (true, default): ["asan.options"], + (default, default): [], + }), +} diff --git a/rootdir/Android.mk b/rootdir/Android.mk index e6ccda788..e743743bd 100644 --- a/rootdir/Android.mk +++ b/rootdir/Android.mk @@ -11,6 +11,7 @@ endif endif ####################################### # init.environ.rc +# TODO(b/353429422): move LOCAL_POST_INSTALL_CMD to other rules and remove Android.mk module. include $(CLEAR_VARS) LOCAL_MODULE_CLASS := ETC @@ -19,36 +20,8 @@ LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 LOCAL_LICENSE_CONDITIONS := notice LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT) -EXPORT_GLOBAL_ASAN_OPTIONS := ifneq ($(filter address,$(SANITIZE_TARGET)),) - EXPORT_GLOBAL_ASAN_OPTIONS := export ASAN_OPTIONS include=/system/asan.options - LOCAL_REQUIRED_MODULES := asan.options $(ASAN_OPTIONS_FILES) $(ASAN_EXTRACT_FILES) -endif - -EXPORT_GLOBAL_HWASAN_OPTIONS := -ifneq ($(filter hwaddress,$(SANITIZE_TARGET)),) - ifneq ($(HWADDRESS_SANITIZER_GLOBAL_OPTIONS),) - EXPORT_GLOBAL_HWASAN_OPTIONS := export HWASAN_OPTIONS $(HWADDRESS_SANITIZER_GLOBAL_OPTIONS) - endif -endif - -EXPORT_GLOBAL_SCUDO_ALLOCATION_RING_BUFFER_SIZE := -ifneq ($(PRODUCT_SCUDO_ALLOCATION_RING_BUFFER_SIZE),) - EXPORT_GLOBAL_SCUDO_ALLOCATION_RING_BUFFER_SIZE := export SCUDO_ALLOCATION_RING_BUFFER_SIZE $(PRODUCT_SCUDO_ALLOCATION_RING_BUFFER_SIZE) -endif - -EXPORT_GLOBAL_GCOV_OPTIONS := -ifeq ($(NATIVE_COVERAGE),true) - EXPORT_GLOBAL_GCOV_OPTIONS := export GCOV_PREFIX /data/misc/trace -endif - -EXPORT_GLOBAL_CLANG_COVERAGE_OPTIONS := -ifeq ($(CLANG_COVERAGE),true) - ifeq ($(CLANG_COVERAGE_CONTINUOUS_MODE),true) - EXPORT_GLOBAL_CLANG_COVERAGE_OPTIONS := export LLVM_PROFILE_FILE /data/misc/trace/clang%c-%20m.profraw - else - EXPORT_GLOBAL_CLANG_COVERAGE_OPTIONS := export LLVM_PROFILE_FILE /data/misc/trace/clang-%20m.profraw - endif + LOCAL_REQUIRED_MODULES := asan.options $(ASAN_EXTRACT_FILES) endif # Put it here instead of in init.rc module definition, @@ -173,15 +146,10 @@ ALL_DEFAULT_INSTALLED_MODULES += $(ALL_ROOTDIR_SYMLINKS) include $(BUILD_SYSTEM)/base_rules.mk $(ALL_ROOTDIR_SYMLINKS): $(LOCAL_BUILT_MODULE) -$(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/init.environ.rc.in - @echo "Generate: $< -> $@" - @mkdir -p $(dir $@) - $(hide) cp $< $@ - $(hide) sed -i -e 's?%EXPORT_GLOBAL_ASAN_OPTIONS%?$(EXPORT_GLOBAL_ASAN_OPTIONS)?g' $@ - $(hide) sed -i -e 's?%EXPORT_GLOBAL_GCOV_OPTIONS%?$(EXPORT_GLOBAL_GCOV_OPTIONS)?g' $@ - $(hide) sed -i -e 's?%EXPORT_GLOBAL_CLANG_COVERAGE_OPTIONS%?$(EXPORT_GLOBAL_CLANG_COVERAGE_OPTIONS)?g' $@ - $(hide) sed -i -e 's?%EXPORT_GLOBAL_HWASAN_OPTIONS%?$(EXPORT_GLOBAL_HWASAN_OPTIONS)?g' $@ - $(hide) sed -i -e 's?%EXPORT_GLOBAL_SCUDO_ALLOCATION_RING_BUFFER_SIZE%?$(EXPORT_GLOBAL_SCUDO_ALLOCATION_RING_BUFFER_SIZE)?g' $@ + +init.environ.rc-soong := $(call intermediates-dir-for,ETC,init.environ.rc-soong)/init.environ.rc-soong +$(eval $(call copy-one-file,$(init.environ.rc-soong),$(LOCAL_BUILT_MODULE))) +init.environ.rc-soong := ####################################### # ramdisk_node_list