From 8b0ccdafbbfc68787bf30fbf5898791924c18ac1 Mon Sep 17 00:00:00 2001 From: Inseob Kim Date: Tue, 4 Aug 2020 00:51:33 +0900 Subject: [PATCH] Separate lists of soong sanitize modules Dependencies of makefile modules are being redirected according to SOONG_CFI_STATIC_LIBRARIES and SOONG_HWASAN_STATIC_LIBRARIES. But the variables are shared among all variants (e.g. core, vendor, product, arch), which can cause build error. This splits the Makefile variables into several lists, one list per each arch and each image variant, to correctly make the redirection. Bug: 162476652 Test: build and inspect ninja Change-Id: I8a46804d4b7c1c485e59e10710cc514a89333fa4 --- core/base_rules.mk | 14 ++++++++++++ core/binary.mk | 53 ++++++++++++++++++++++++---------------------- 2 files changed, 42 insertions(+), 25 deletions(-) diff --git a/core/base_rules.mk b/core/base_rules.mk index 3f93c2ca8..abe059b25 100644 --- a/core/base_rules.mk +++ b/core/base_rules.mk @@ -77,6 +77,20 @@ LOCAL_SYSTEM_EXT_MODULE := true endif _path := +ifeq ($(LOCAL_HOST_MODULE),true) +my_image_variant := host +else ifeq ($(LOCAL_VENDOR_MODULE),true) +my_image_variant := vendor +else ifeq ($(LOCAL_OEM_MODULE),true) +my_image_variant := vendor +else ifeq ($(LOCAL_ODM_MODULE),true) +my_image_variant := vendor +else ifeq ($(LOCAL_PRODUCT_MODULE),true) +my_image_variant := product +else +my_image_variant := core +endif + # TODO(b/135957588) Remove following workaround # LOCAL_PRODUCT_SERVICES_MODULE to LOCAL_PRODUCT_MODULE for all Android.mk ifndef LOCAL_PRODUCT_MODULE diff --git a/core/binary.mk b/core/binary.mk index be7dc2737..320a24978 100644 --- a/core/binary.mk +++ b/core/binary.mk @@ -102,6 +102,8 @@ my_ndk_sysroot_include := my_ndk_sysroot_lib := my_api_level := 10000 +my_arch := $(TARGET_$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH) + ifneq ($(LOCAL_SDK_VERSION),) ifdef LOCAL_IS_HOST_MODULE $(error $(LOCAL_PATH): LOCAL_SDK_VERSION cannot be used in host module) @@ -110,7 +112,6 @@ ifneq ($(LOCAL_SDK_VERSION),) # Make sure we've built the NDK. my_additional_dependencies += $(SOONG_OUT_DIR)/ndk_base.timestamp - my_arch := $(TARGET_$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH) ifneq (,$(filter arm64 x86_64,$(my_arch))) my_min_sdk_version := 21 else @@ -1059,38 +1060,40 @@ $(call track-src-file-obj,$(asm_sources_asm),$(asm_objects_asm)) asm_objects += $(asm_objects_asm) endif +################################################################### +## Convert to sanitized names where they exist. +## These lists come from sanitizerStaticLibsMap; see +## build/soong/cc/sanitize.go +## +## $(1): list of static dependencies +## $(2): name of sanitizer (e.g. cfi, hwasan) +################################################################## +define use_soong_sanitized_static_libraries + $(foreach lib,$(1),$(if $(filter $(lib),\ + $(SOONG_$(2)_$(my_image_variant)_$(my_arch)_STATIC_LIBRARIES)),\ + $(lib).$(2),$(lib))) +endef + ################################################################### ## When compiling a CFI enabled target, use the .cfi variant of any ## static dependencies (where they exist). ################################################################## -define use_soong_cfi_static_libraries - $(foreach l,$(1),$(if $(filter $(l),$(SOONG_CFI_STATIC_LIBRARIES)),\ - $(l).cfi,$(l))) -endef - ifneq ($(filter cfi,$(my_sanitize)),) - my_whole_static_libraries := $(call use_soong_cfi_static_libraries,\ - $(my_whole_static_libraries)) - my_static_libraries := $(call use_soong_cfi_static_libraries,\ - $(my_static_libraries)) + my_whole_static_libraries := $(call use_soong_sanitized_static_libraries,\ + $(my_whole_static_libraries),cfi) + my_static_libraries := $(call use_soong_sanitized_static_libraries,\ + $(my_static_libraries),cfi) endif -ifneq ($(LOCAL_USE_VNDK),) - my_soong_hwasan_static_libraries := $(SOONG_HWASAN_VENDOR_STATIC_LIBRARIES) -else - my_soong_hwasan_static_libraries = $(SOONG_HWASAN_STATIC_LIBRARIES) -endif - -define use_soong_hwasan_static_libraries - $(foreach l,$(1),$(if $(filter $(l),$(my_soong_hwasan_static_libraries)),\ - $(l).hwasan,$(l))) -endef - +################################################################### +## When compiling a hwasan enabled target, use the .hwasan variant +## of any static dependencies (where they exist). +################################################################## ifneq ($(filter hwaddress,$(my_sanitize)),) - my_whole_static_libraries := $(call use_soong_hwasan_static_libraries,\ - $(my_whole_static_libraries)) - my_static_libraries := $(call use_soong_hwasan_static_libraries,\ - $(my_static_libraries)) + my_whole_static_libraries := $(call use_soong_sanitized_static_libraries,\ + $(my_whole_static_libraries),hwasan) + my_static_libraries := $(call use_soong_sanitized_static_libraries,\ + $(my_static_libraries),hwasan) endif ###########################################################