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