]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - lib/hwasan/CMakeLists.txt
Vendor import of compiler-rt trunk r351319 (just before the release_80
[FreeBSD/FreeBSD.git] / lib / hwasan / CMakeLists.txt
1 include_directories(..)
2
3 # Runtime library sources and build flags.
4 set(HWASAN_RTL_SOURCES
5   hwasan.cc
6   hwasan_allocator.cc
7   hwasan_dynamic_shadow.cc
8   hwasan_interceptors.cc
9   hwasan_linux.cc
10   hwasan_memintrinsics.cc
11   hwasan_poisoning.cc
12   hwasan_report.cc
13   hwasan_thread.cc
14   hwasan_thread_list.cc
15   )
16
17 set(HWASAN_RTL_CXX_SOURCES
18   hwasan_new_delete.cc)
19
20 set(HWASAN_RTL_HEADERS
21   hwasan.h
22   hwasan_allocator.h
23   hwasan_dynamic_shadow.h
24   hwasan_flags.h
25   hwasan_flags.inc
26   hwasan_interface_internal.h
27   hwasan_mapping.h
28   hwasan_poisoning.h
29   hwasan_report.h
30   hwasan_thread.h
31   hwasan_thread_list.h
32   )
33
34 set(HWASAN_DEFINITIONS)
35 append_list_if(COMPILER_RT_HWASAN_WITH_INTERCEPTORS HWASAN_WITH_INTERCEPTORS=1 HWASAN_DEFINITIONS)
36
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)
42
43 set(HWASAN_DYNAMIC_LINK_FLAGS ${SANITIZER_COMMON_LINK_FLAGS})
44
45 if(ANDROID)
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)
50   endif()
51 endif()
52
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)
57
58 set(HWASAN_DYNAMIC_LIBS ${SANITIZER_CXX_ABI_LIBRARY} ${SANITIZER_COMMON_LINK_LIBS})
59
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)
64
65 if (TARGET cxx-headers OR HAVE_LIBCXX)
66   set(HWASAN_DEPS cxx-headers)
67 endif()
68
69 # Static runtime library.
70 add_compiler_rt_component(hwasan)
71
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}
78   DEPS ${HWASAN_DEPS})
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}
85   DEPS ${HWASAN_DEPS})
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}
92   DEPS ${HWASAN_DEPS})
93
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}
100   DEPS ${HWASAN_DEPS})
101
102 foreach(arch ${HWASAN_SUPPORTED_ARCH})
103   add_compiler_rt_runtime(clang_rt.hwasan
104     STATIC
105     ARCHS ${arch}
106     OBJECT_LIBS RTHwasan
107                 RTInterception
108                 RTSanitizerCommon
109                 RTSanitizerCommonLibc
110                 RTSanitizerCommonCoverage
111                 RTSanitizerCommonSymbolizer
112                 RTUbsan
113     CFLAGS ${HWASAN_RTL_CFLAGS}
114     PARENT_TARGET hwasan)
115   add_compiler_rt_runtime(clang_rt.hwasan_cxx
116     STATIC
117     ARCHS ${arch}
118     OBJECT_LIBS RTHwasan_cxx
119                 RTUbsan_cxx
120     CFLAGS ${HWASAN_RTL_CFLAGS}
121     PARENT_TARGET hwasan)
122
123   if (UNIX)
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)
129     set_property(SOURCE
130       ${CMAKE_CURRENT_BINARY_DIR}/dummy.cc
131       APPEND PROPERTY
132       OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/clang_rt.hwasan-dynamic-${arch}.vers)
133   else()
134     set(VERSION_SCRIPT_FLAG)
135   endif()
136
137
138   add_compiler_rt_runtime(clang_rt.hwasan
139     SHARED
140     ARCHS ${arch}
141     OBJECT_LIBS
142             RTHwasan_dynamic
143             RTInterception
144             RTSanitizerCommon
145             RTSanitizerCommonLibc
146             RTSanitizerCommonCoverage
147             RTSanitizerCommonSymbolizer
148             RTUbsan
149             RTUbsan_cxx
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)
162
163   if(SANITIZER_USE_SYMBOLS)
164     add_sanitizer_rt_symbols(clang_rt.hwasan
165       ARCHS ${arch}
166       EXTRA hwasan.syms.extra)
167     add_sanitizer_rt_symbols(clang_rt.hwasan_cxx
168       ARCHS ${arch}
169       EXTRA hwasan.syms.extra)
170     add_dependencies(hwasan clang_rt.hwasan-${arch}-symbols
171                           clang_rt.hwasan_cxx-${arch}-symbols)
172   endif()
173 endforeach()
174
175 add_compiler_rt_resource_file(hwasan_blacklist hwasan_blacklist.txt hwasan)
176
177 # if(COMPILER_RT_INCLUDE_TESTS)
178 #   add_subdirectory(tests)
179 # endif()