config_sanitizers.mk revision 27ccb75af78f2fe9bf05f9141b5470fd3c0eeeba
1############################################## 2## Perform configuration steps for sanitizers. 3############################################## 4 5# Configure SANITIZE_HOST. 6ifdef LOCAL_IS_HOST_MODULE 7 my_sanitize_host := $(strip $(SANITIZE_HOST)) 8endif 9 10# SANTIZIZE_HOST=true is a deprecated way to say SANITIZE_HOST=address. 11ifeq ($(my_sanitize_host),true) 12 my_sanitize_host := address 13endif 14 15# `LOCAL_CLANG := false` disables SANITIZE_HOST. 16ifeq ($(my_clang),false) 17 my_sanitize_host := 18endif 19 20my_sanitize := $(strip $(LOCAL_SANITIZE)) 21 22# Keep compatibility for LOCAL_ADDRESS_SANITIZER until all targets have moved to 23# `LOCAL_SANITIZE := address`. 24ifeq ($(strip $(LOCAL_ADDRESS_SANITIZER)),true) 25 my_sanitize += address 26endif 27 28# And `LOCAL_SANITIZE := never`. 29ifeq ($(strip $(LOCAL_ADDRESS_SANITIZER)),false) 30 my_sanitize := never 31endif 32 33# Don't apply sanitizers to NDK code. 34ifdef LOCAL_SDK_VERSION 35 my_sanitize := never 36endif 37 38ifeq ($(my_sanitize),) 39 my_sanitize := $(my_sanitize_host) 40endif 41 42ifeq ($(my_sanitize),never) 43 my_sanitize := 44endif 45 46unknown_sanitizers := $(filter-out address, \ 47 $(filter-out undefined,$(my_sanitize))) 48 49ifneq ($(unknown_sanitizers),) 50 $(error Unknown sanitizers: $(unknown_sanitizers)) 51endif 52 53ifneq ($(my_sanitize),) 54 my_clang := true 55 56 fsanitize_arg := $(subst $(space),$(comma),$(my_sanitize)), 57 my_cflags += -fsanitize=$(fsanitize_arg) 58 59 ifdef LOCAL_IS_HOST_MODULE 60 my_ldflags += -fsanitize=$(fsanitize_arg) 61 endif 62endif 63 64ifneq ($(filter address,$(my_sanitize)),) 65 # Frame pointer based unwinder in ASan requires ARM frame setup. 66 LOCAL_ARM_MODE := arm 67 my_cflags += $(ADDRESS_SANITIZER_CONFIG_EXTRA_CFLAGS) 68 my_ldflags += $(ADDRESS_SANITIZER_CONFIG_EXTRA_LDFLAGS) 69 ifdef LOCAL_IS_HOST_MODULE 70 # -nodefaultlibs (provided with libc++) prevents the driver from linking 71 # libraries needed with -fsanitize=address. http://b/18650275 (WAI) 72 my_ldlibs += -ldl -lpthread 73 else 74 my_shared_libraries += $(ADDRESS_SANITIZER_CONFIG_EXTRA_SHARED_LIBRARIES) 75 my_static_libraries += $(ADDRESS_SANITIZER_CONFIG_EXTRA_STATIC_LIBRARIES) 76 endif 77endif 78 79ifneq ($(filter undefined,$(my_sanitize)),) 80 ifdef LOCAL_IS_HOST_MODULE 81 my_ldlibs += -ldl 82 else 83 $(error ubsan is not yet supported on the target) 84 endif 85endif 86