1 include_directories(..)
3 # Runtime library sources and build flags.
7 hwasan_dynamic_shadow.cc
10 hwasan_memintrinsics.cc
17 set(HWASAN_RTL_CXX_SOURCES
20 set(HWASAN_RTL_HEADERS
23 hwasan_dynamic_shadow.h
26 hwasan_interface_internal.h
34 set(HWASAN_DEFINITIONS)
35 append_list_if(COMPILER_RT_HWASAN_WITH_INTERCEPTORS HWASAN_WITH_INTERCEPTORS=1 HWASAN_DEFINITIONS)
37 set(HWASAN_RTL_CFLAGS ${SANITIZER_COMMON_CFLAGS})
38 append_rtti_flag(OFF HWASAN_RTL_CFLAGS)
39 append_list_if(COMPILER_RT_HAS_FPIC_FLAG -fPIC HWASAN_RTL_CFLAGS)
40 # Prevent clang from generating libc calls.
41 append_list_if(COMPILER_RT_HAS_FFREESTANDING_FLAG -ffreestanding HWASAN_RTL_CFLAGS)
43 set(HWASAN_DYNAMIC_LINK_FLAGS ${SANITIZER_COMMON_LINK_FLAGS})
46 # Put most Sanitizer shared libraries in the global group. For more details, see
47 # android-changes-for-ndk-developers.md#changes-to-library-search-order
48 if (COMPILER_RT_HAS_Z_GLOBAL)
49 list(APPEND HWASAN_DYNAMIC_LINK_FLAGS -Wl,-z,global)
53 set(HWASAN_DYNAMIC_CFLAGS ${HWASAN_RTL_CFLAGS})
54 append_list_if(COMPILER_RT_HAS_FTLS_MODEL_INITIAL_EXEC
55 -ftls-model=initial-exec HWASAN_DYNAMIC_CFLAGS)
56 append_list_if(MSVC /DEBUG HWASAN_DYNAMIC_LINK_FLAGS)
58 set(HWASAN_DYNAMIC_LIBS ${SANITIZER_CXX_ABI_LIBRARY} ${SANITIZER_COMMON_LINK_LIBS})
60 append_list_if(COMPILER_RT_HAS_LIBDL dl HWASAN_DYNAMIC_LIBS)
61 append_list_if(COMPILER_RT_HAS_LIBRT rt HWASAN_DYNAMIC_LIBS)
62 append_list_if(COMPILER_RT_HAS_LIBM m HWASAN_DYNAMIC_LIBS)
63 append_list_if(COMPILER_RT_HAS_LIBPTHREAD pthread HWASAN_DYNAMIC_LIBS)
65 if (TARGET cxx-headers OR HAVE_LIBCXX)
66 set(HWASAN_DEPS cxx-headers)
69 # Static runtime library.
70 add_compiler_rt_component(hwasan)
72 add_compiler_rt_object_libraries(RTHwasan
73 ARCHS ${HWASAN_SUPPORTED_ARCH}
74 SOURCES ${HWASAN_RTL_SOURCES}
75 ADDITIONAL_HEADERS ${HWASAN_RTL_HEADERS}
76 CFLAGS ${HWASAN_RTL_CFLAGS}
77 DEFS ${HWASAN_DEFINITIONS}
79 add_compiler_rt_object_libraries(RTHwasan_cxx
80 ARCHS ${HWASAN_SUPPORTED_ARCH}
81 SOURCES ${HWASAN_RTL_CXX_SOURCES}
82 ADDITIONAL_HEADERS ${HWASAN_RTL_HEADERS}
83 CFLAGS ${HWASAN_RTL_CFLAGS}
84 DEFS ${HWASAN_DEFINITIONS}
86 add_compiler_rt_object_libraries(RTHwasan_dynamic
87 ARCHS ${HWASAN_SUPPORTED_ARCH}
88 SOURCES ${HWASAN_RTL_SOURCES} ${HWASAN_RTL_CXX_SOURCES}
89 ADDITIONAL_HEADERS ${HWASAN_RTL_HEADERS}
90 CFLAGS ${HWASAN_DYNAMIC_CFLAGS}
91 DEFS ${HWASAN_DEFINITIONS}
94 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/dummy.cc "")
95 add_compiler_rt_object_libraries(RTHwasan_dynamic_version_script_dummy
96 ARCHS ${HWASAN_SUPPORTED_ARCH}
97 SOURCES ${CMAKE_CURRENT_BINARY_DIR}/dummy.cc
98 CFLAGS ${HWASAN_DYNAMIC_CFLAGS}
99 DEFS ${HWASAN_DEFINITIONS}
102 foreach(arch ${HWASAN_SUPPORTED_ARCH})
103 add_compiler_rt_runtime(clang_rt.hwasan
109 RTSanitizerCommonLibc
110 RTSanitizerCommonCoverage
111 RTSanitizerCommonSymbolizer
113 CFLAGS ${HWASAN_RTL_CFLAGS}
114 PARENT_TARGET hwasan)
115 add_compiler_rt_runtime(clang_rt.hwasan_cxx
118 OBJECT_LIBS RTHwasan_cxx
120 CFLAGS ${HWASAN_RTL_CFLAGS}
121 PARENT_TARGET hwasan)
124 add_sanitizer_rt_version_list(clang_rt.hwasan-dynamic-${arch}
125 LIBS clang_rt.hwasan-${arch} clang_rt.hwasan_cxx-${arch}
126 EXTRA hwasan.syms.extra)
127 set(VERSION_SCRIPT_FLAG
128 -Wl,--version-script,${CMAKE_CURRENT_BINARY_DIR}/clang_rt.hwasan-dynamic-${arch}.vers)
130 ${CMAKE_CURRENT_BINARY_DIR}/dummy.cc
132 OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/clang_rt.hwasan-dynamic-${arch}.vers)
134 set(VERSION_SCRIPT_FLAG)
138 add_compiler_rt_runtime(clang_rt.hwasan
145 RTSanitizerCommonLibc
146 RTSanitizerCommonCoverage
147 RTSanitizerCommonSymbolizer
150 # The only purpose of RTHWAsan_dynamic_version_script_dummy is to
151 # carry a dependency of the shared runtime on the version script.
152 # Replacing it with a straightforward
153 # add_dependencies(clang_rt.asan-dynamic-${arch} clang_rt.asan-dynamic-${arch}-version-list)
154 # generates an order-only dependency in ninja.
155 RTHwasan_dynamic_version_script_dummy
156 CFLAGS ${HWASAN_DYNAMIC_CFLAGS}
157 LINK_FLAGS ${HWASAN_DYNAMIC_LINK_FLAGS}
158 ${VERSION_SCRIPT_FLAG}
159 LINK_LIBS ${HWASAN_DYNAMIC_LIBS}
160 DEFS ${ASAN_DYNAMIC_DEFINITIONS}
161 PARENT_TARGET hwasan)
163 if(SANITIZER_USE_SYMBOLS)
164 add_sanitizer_rt_symbols(clang_rt.hwasan
166 EXTRA hwasan.syms.extra)
167 add_sanitizer_rt_symbols(clang_rt.hwasan_cxx
169 EXTRA hwasan.syms.extra)
170 add_dependencies(hwasan clang_rt.hwasan-${arch}-symbols
171 clang_rt.hwasan_cxx-${arch}-symbols)
175 add_compiler_rt_resource_file(hwasan_blacklist hwasan_blacklist.txt hwasan)
177 # if(COMPILER_RT_INCLUDE_TESTS)
178 # add_subdirectory(tests)