| # |
| # Copyright (C) 2012 The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| # |
| |
| LOCAL_PATH:= $(call my-dir) |
| |
| ASAN_NEEDS_SEGV=0 |
| ASAN_HAS_EXCEPTIONS=1 |
| ASAN_FLEXIBLE_MAPPING_AND_OFFSET=0 |
| |
| asan_rtl_files := \ |
| asan_activation.cc \ |
| asan_allocator.cc \ |
| asan_fake_stack.cc \ |
| asan_flags.cc \ |
| asan_globals.cc \ |
| asan_interceptors.cc \ |
| asan_linux.cc \ |
| asan_mac.cc \ |
| asan_malloc_linux.cc \ |
| asan_malloc_mac.cc \ |
| asan_malloc_win.cc \ |
| asan_poisoning.cc \ |
| asan_posix.cc \ |
| asan_report.cc \ |
| asan_rtl.cc \ |
| asan_stack.cc \ |
| asan_stats.cc \ |
| asan_suppressions.cc \ |
| asan_thread.cc \ |
| asan_win.cc \ |
| ../interception/interception_linux.cc \ |
| ../lsan/lsan_common.cc \ |
| ../lsan/lsan_common_linux.cc \ |
| ../sanitizer_common/sanitizer_allocator.cc \ |
| ../sanitizer_common/sanitizer_common.cc \ |
| ../sanitizer_common/sanitizer_common_libcdep.cc \ |
| ../sanitizer_common/sanitizer_coverage_libcdep.cc \ |
| ../sanitizer_common/sanitizer_coverage_mapping_libcdep.cc \ |
| ../sanitizer_common/sanitizer_deadlock_detector1.cc \ |
| ../sanitizer_common/sanitizer_deadlock_detector2.cc \ |
| ../sanitizer_common/sanitizer_flags.cc \ |
| ../sanitizer_common/sanitizer_flag_parser.cc \ |
| ../sanitizer_common/sanitizer_libc.cc \ |
| ../sanitizer_common/sanitizer_libignore.cc \ |
| ../sanitizer_common/sanitizer_linux.cc \ |
| ../sanitizer_common/sanitizer_linux_libcdep.cc \ |
| ../sanitizer_common/sanitizer_mac.cc \ |
| ../sanitizer_common/sanitizer_persistent_allocator.cc \ |
| ../sanitizer_common/sanitizer_platform_limits_linux.cc \ |
| ../sanitizer_common/sanitizer_platform_limits_posix.cc \ |
| ../sanitizer_common/sanitizer_posix.cc \ |
| ../sanitizer_common/sanitizer_posix_libcdep.cc \ |
| ../sanitizer_common/sanitizer_printf.cc \ |
| ../sanitizer_common/sanitizer_procmaps_common.cc \ |
| ../sanitizer_common/sanitizer_procmaps_freebsd.cc \ |
| ../sanitizer_common/sanitizer_procmaps_linux.cc \ |
| ../sanitizer_common/sanitizer_procmaps_mac.cc \ |
| ../sanitizer_common/sanitizer_stackdepot.cc \ |
| ../sanitizer_common/sanitizer_stacktrace.cc \ |
| ../sanitizer_common/sanitizer_stacktrace_libcdep.cc \ |
| ../sanitizer_common/sanitizer_stacktrace_printer.cc \ |
| ../sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc \ |
| ../sanitizer_common/sanitizer_suppressions.cc \ |
| ../sanitizer_common/sanitizer_symbolizer.cc \ |
| ../sanitizer_common/sanitizer_symbolizer_libbacktrace.cc \ |
| ../sanitizer_common/sanitizer_symbolizer_libcdep.cc \ |
| ../sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc \ |
| ../sanitizer_common/sanitizer_symbolizer_process_libcdep.cc \ |
| ../sanitizer_common/sanitizer_symbolizer_win.cc \ |
| ../sanitizer_common/sanitizer_thread_registry.cc \ |
| ../sanitizer_common/sanitizer_tls_get_addr.cc \ |
| ../sanitizer_common/sanitizer_unwind_posix_libcdep.cc \ |
| ../sanitizer_common/sanitizer_win.cc \ |
| |
| asan_rtl_cxx_files := \ |
| asan_new_delete.cc \ |
| |
| asan_rtl_cflags := \ |
| -fvisibility=hidden \ |
| -fno-exceptions \ |
| -DASAN_LOW_MEMORY=1 \ |
| -DASAN_NEEDS_SEGV=$(ASAN_NEEDS_SEGV) \ |
| -DASAN_HAS_EXCEPTIONS=$(ASAN_HAS_EXCEPTIONS) \ |
| -DASAN_FLEXIBLE_MAPPING_AND_OFFSET=$(ASAN_FLEXIBLE_MAPPING_AND_OFFSET) \ |
| -Wno-covered-switch-default \ |
| -Wno-non-virtual-dtor \ |
| -Wno-sign-compare \ |
| -Wno-unused-parameter \ |
| -std=c++11 \ |
| -fno-rtti \ |
| |
| asan_test_files := \ |
| tests/asan_globals_test.cc \ |
| tests/asan_test.cc |
| |
| #tests/asan_noinst_test.cc \ |
| #tests/asan_test_main.cc \ |
| |
| asan_test_cflags := \ |
| -fsanitize-blacklist=external/compiler-rt/lib/asan/tests/asan_test.ignore \ |
| -DASAN_LOW_MEMORY=1 \ |
| -DASAN_UAR=0 \ |
| -DASAN_NEEDS_SEGV=$(ASAN_NEEDS_SEGV) \ |
| -DASAN_HAS_EXCEPTIONS=$(ASAN_HAS_EXCEPTIONS) \ |
| -DASAN_HAS_BLACKLIST=1 \ |
| -Wno-covered-switch-default \ |
| -Wno-non-virtual-dtor \ |
| -Wno-sign-compare \ |
| -Wno-unused-parameter \ |
| -std=c++11 |
| |
| |
| ifeq ($(TARGET_ARCH),arm) |
| |
| include $(CLEAR_VARS) |
| |
| LOCAL_MODULE := libasan |
| LOCAL_C_INCLUDES := \ |
| external/compiler-rt/lib \ |
| external/compiler-rt/include |
| LOCAL_CFLAGS += $(asan_rtl_cflags) |
| LOCAL_SRC_FILES := asan_preinit.cc |
| #LOCAL_SRC_FILES := asan_android_stub.cc asan_preinit.cc |
| LOCAL_CPP_EXTENSION := .cc |
| LOCAL_CLANG := true |
| LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk |
| LOCAL_ADDRESS_SANITIZER := false |
| include $(BUILD_STATIC_LIBRARY) |
| |
| define build-asan-rt-shared-library |
| |
| include $(CLEAR_VARS) |
| LOCAL_MODULE := $(1) |
| LOCAL_MULTILIB := $(2) |
| # We need to unwind by frame pointers through a small portion of ASan runtime library code, |
| # and that only works with ARM, not with Thumb. |
| LOCAL_ARM_MODE := arm |
| LOCAL_C_INCLUDES := \ |
| external/compiler-rt/lib \ |
| external/compiler-rt/include |
| LOCAL_CFLAGS += $(asan_rtl_cflags) |
| LOCAL_SRC_FILES := $(asan_rtl_files) $(asan_rtl_cxx_files) |
| LOCAL_CPP_EXTENSION := .cc |
| LOCAL_SHARED_LIBRARIES := liblog libc libdl |
| LOCAL_STATIC_LIBRARIES := libcompiler_rt |
| # MacOS toolchain is out-of-date and does not support -z global. |
| # TODO: re-enable once the toolchain issue is fixed. |
| ifneq ($(HOST_OS),darwin) |
| LOCAL_LDFLAGS += -Wl,-z,global |
| endif |
| LOCAL_CLANG := true |
| LOCAL_ADDRESS_SANITIZER := false |
| LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk |
| include $(BUILD_SHARED_LIBRARY) |
| |
| endef |
| |
| ifdef 2ND_ADDRESS_SANITIZER_RUNTIME_LIBRARY |
| $(eval $(call build-asan-rt-shared-library,$(ADDRESS_SANITIZER_RUNTIME_LIBRARY),64)) |
| $(eval $(call build-asan-rt-shared-library,$(2ND_ADDRESS_SANITIZER_RUNTIME_LIBRARY),32)) |
| else |
| $(eval $(call build-asan-rt-shared-library,$(ADDRESS_SANITIZER_RUNTIME_LIBRARY),32)) |
| endif |
| |
| include $(CLEAR_VARS) |
| |
| LOCAL_MODULE := asanwrapper |
| LOCAL_SRC_FILES := asanwrapper.cc |
| LOCAL_CPP_EXTENSION := .cc |
| LOCAL_CPPFLAGS := -std=c++11 |
| LOCAL_SHARED_LIBRARIES += libc |
| LOCAL_ADDRESS_SANITIZER := false |
| LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk |
| LOCAL_CXX_STL := libc++ |
| |
| include $(BUILD_EXECUTABLE) |
| |
| |
| include $(CLEAR_VARS) |
| |
| LOCAL_MODULE := libasan_noinst_test |
| LOCAL_MODULE_TAGS := tests |
| LOCAL_C_INCLUDES := \ |
| external/gtest/include \ |
| external/compiler-rt/include \ |
| external/compiler-rt/lib \ |
| external/compiler-rt/lib/asan/tests \ |
| external/compiler-rt/lib/sanitizer_common/tests |
| LOCAL_CFLAGS += \ |
| -Wno-non-virtual-dtor \ |
| -Wno-unused-parameter \ |
| -Wno-sign-compare \ |
| -DASAN_UAR=0 \ |
| -DASAN_HAS_BLACKLIST=1 \ |
| -DASAN_HAS_EXCEPTIONS=$(ASAN_HAS_EXCEPTIONS) \ |
| -DASAN_NEEDS_SEGV=$(ASAN_NEEDS_SEGV) \ |
| -std=c++11 |
| LOCAL_SRC_FILES := tests/asan_noinst_test.cc tests/asan_test_main.cc |
| LOCAL_CPP_EXTENSION := .cc |
| LOCAL_CLANG := true |
| LOCAL_ADDRESS_SANITIZER := false |
| LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk |
| LOCAL_CXX_STL := libc++ |
| |
| include $(BUILD_STATIC_LIBRARY) |
| |
| |
| include $(CLEAR_VARS) |
| |
| LOCAL_MODULE := asan_test |
| LOCAL_MODULE_TAGS := tests |
| LOCAL_C_INCLUDES := \ |
| external/gtest/include \ |
| external/compiler-rt/lib \ |
| external/compiler-rt/lib/asan/tests \ |
| external/compiler-rt/lib/sanitizer_common/tests |
| LOCAL_CFLAGS += $(asan_test_cflags) |
| LOCAL_SRC_FILES := $(asan_test_files) |
| LOCAL_CPP_EXTENSION := .cc |
| LOCAL_STATIC_LIBRARIES := libgtest libasan_noinst_test |
| LOCAL_SHARED_LIBRARIES := libc |
| LOCAL_ADDRESS_SANITIZER := true |
| LOCAL_CLANG := true |
| LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk |
| LOCAL_CXX_STL := libc++ |
| |
| include $(BUILD_EXECUTABLE) |
| |
| endif # ifeq($(TARGET_ARCH),arm) |
| |
| ################################################################################ |
| # Host modules |
| |
| ifneq ($(HOST_OS),darwin) |
| include $(CLEAR_VARS) |
| LOCAL_MODULE := libasan |
| LOCAL_C_INCLUDES := external/compiler-rt/lib external/compiler-rt/include |
| LOCAL_CFLAGS += $(asan_rtl_cflags) |
| LOCAL_SRC_FILES := $(asan_rtl_files) |
| LOCAL_CPP_EXTENSION := .cc |
| LOCAL_CLANG := true |
| LOCAL_MULTILIB := both |
| LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk |
| LOCAL_ADDRESS_SANITIZER := false |
| include $(BUILD_HOST_STATIC_LIBRARY) |
| |
| include $(CLEAR_VARS) |
| LOCAL_MODULE := libasan_cxx |
| LOCAL_C_INCLUDES := external/compiler-rt/lib external/compiler-rt/include |
| LOCAL_CFLAGS += $(asan_rtl_cflags) |
| LOCAL_SRC_FILES := $(asan_rtl_cxx_files) |
| LOCAL_CPP_EXTENSION := .cc |
| LOCAL_CLANG := true |
| LOCAL_MULTILIB := both |
| LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk |
| LOCAL_ADDRESS_SANITIZER := false |
| include $(BUILD_HOST_STATIC_LIBRARY) |
| |
| include $(CLEAR_VARS) |
| LOCAL_MODULE := libasan_noinst_test |
| LOCAL_MODULE_TAGS := tests |
| LOCAL_C_INCLUDES := \ |
| external/gtest/include \ |
| external/compiler-rt/include \ |
| external/compiler-rt/lib \ |
| external/compiler-rt/lib/asan/tests \ |
| external/compiler-rt/lib/sanitizer_common/tests |
| LOCAL_CFLAGS += \ |
| -Wno-unused-parameter \ |
| -Wno-sign-compare \ |
| -DASAN_UAR=0 \ |
| -DASAN_HAS_BLACKLIST=1 \ |
| -DASAN_HAS_EXCEPTIONS=$(ASAN_HAS_EXCEPTIONS) \ |
| -DASAN_NEEDS_SEGV=$(ASAN_NEEDS_SEGV) \ |
| -std=c++11 |
| LOCAL_SRC_FILES := tests/asan_noinst_test.cc tests/asan_test_main.cc |
| LOCAL_CPP_EXTENSION := .cc |
| LOCAL_CLANG := true |
| LOCAL_CXX_STL := libc++ |
| LOCAL_MULTILIB := both |
| LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk |
| LOCAL_ADDRESS_SANITIZER := false |
| include $(BUILD_HOST_STATIC_LIBRARY) |
| |
| include $(CLEAR_VARS) |
| LOCAL_MODULE := asan_test |
| LOCAL_MODULE_TAGS := tests |
| LOCAL_C_INCLUDES := \ |
| external/compiler-rt/lib \ |
| external/compiler-rt/lib/asan/tests \ |
| external/compiler-rt/lib/sanitizer_common/tests |
| LOCAL_CFLAGS += $(asan_test_cflags) |
| LOCAL_SRC_FILES := $(asan_test_files) |
| LOCAL_CPP_EXTENSION := .cc |
| LOCAL_STATIC_LIBRARIES := libasan_noinst_test |
| LOCAL_ADDRESS_SANITIZER := true |
| LOCAL_CLANG := true |
| LOCAL_CXX_STL := libc++ |
| LOCAL_MULTILIB := both |
| LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32 |
| LOCAL_MODULE_STEM_64 := $(LOCAL_MODULE)64 |
| LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk |
| include $(BUILD_HOST_NATIVE_TEST) |
| endif |