blob: 5314b579cd5e3967441a627a7d0e1196ffdf95bf [file] [log] [blame]
Richard Smith6ebe4512012-10-09 19:34:32 +00001# Build for the undefined behavior sanitizer runtime support library.
2
3set(UBSAN_SOURCES
4 ubsan_diag.cc
Stephen Hines6d186232014-11-26 17:56:19 -08005 ubsan_init.cc
6 ubsan_flags.cc
Richard Smith6ebe4512012-10-09 19:34:32 +00007 ubsan_handlers.cc
Richard Smith3e587a42013-03-20 23:49:17 +00008 ubsan_value.cc
9 )
10
Pirama Arumuga Nainar259f7062015-05-06 11:49:53 -070011set(UBSAN_STANDALONE_SOURCES
12 ubsan_init_standalone.cc
13 )
14
Richard Smith3e587a42013-03-20 23:49:17 +000015set(UBSAN_CXX_SOURCES
Richard Smitheda8bd02012-10-25 02:07:02 +000016 ubsan_handlers_cxx.cc
17 ubsan_type_hash.cc
Richard Smith6ebe4512012-10-09 19:34:32 +000018 )
19
20include_directories(..)
21
22set(UBSAN_CFLAGS ${SANITIZER_COMMON_CFLAGS})
Stephen Hines6d186232014-11-26 17:56:19 -080023append_no_rtti_flag(UBSAN_CFLAGS)
Pirama Arumuga Nainar259f7062015-05-06 11:49:53 -070024set(UBSAN_STANDALONE_CFLAGS ${SANITIZER_COMMON_CFLAGS})
25append_no_rtti_flag(UBSAN_STANDALONE_CFLAGS)
Stephen Hines6d186232014-11-26 17:56:19 -080026set(UBSAN_CXXFLAGS ${SANITIZER_COMMON_CFLAGS})
Richard Smith6ebe4512012-10-09 19:34:32 +000027
Stephen Hines2d1fdb22014-05-28 23:58:16 -070028add_custom_target(ubsan)
Richard Smith6ebe4512012-10-09 19:34:32 +000029
Alexey Samsonov5b16dba2012-11-16 12:57:07 +000030if(APPLE)
Pirama Arumuga Nainarcdce50b2015-07-01 12:26:56 -070031 # Common parts of UBSan runtime.
32 add_compiler_rt_object_libraries(RTUbsan
33 OS ${SANITIZER_COMMON_SUPPORTED_OS}
34 ARCH ${UBSAN_COMMON_SUPPORTED_ARCH}
35 SOURCES ${UBSAN_SOURCES} ${UBSAN_CXX_SOURCES}
36 CFLAGS ${UBSAN_CXXFLAGS})
Pirama Arumuga Nainar7c915052015-04-08 08:58:29 -070037
Pirama Arumuga Nainarcdce50b2015-07-01 12:26:56 -070038 if(COMPILER_RT_HAS_UBSAN)
39 # Initializer of standalone UBSan runtime.
40 add_compiler_rt_object_libraries(RTUbsan_standalone
41 OS ${SANITIZER_COMMON_SUPPORTED_OS}
42 ARCH ${UBSAN_SUPPORTED_ARCH}
43 SOURCES ${UBSAN_STANDALONE_SOURCES}
44 CFLAGS ${UBSAN_STANDALONE_CFLAGS})
45 foreach(os ${SANITIZER_COMMON_SUPPORTED_OS})
Pirama Arumuga Nainar259f7062015-05-06 11:49:53 -070046 add_compiler_rt_darwin_dynamic_runtime(clang_rt.ubsan_${os}_dynamic ${os}
47 ARCH ${UBSAN_SUPPORTED_ARCH}
48 SOURCES $<TARGET_OBJECTS:RTUbsan.${os}>
49 $<TARGET_OBJECTS:RTUbsan_standalone.${os}>
50 $<TARGET_OBJECTS:RTSanitizerCommon.${os}>)
51
52 add_dependencies(ubsan clang_rt.ubsan_${os}_dynamic)
Pirama Arumuga Nainarcdce50b2015-07-01 12:26:56 -070053 endforeach()
54 endif()
55
Alexey Samsonov5b16dba2012-11-16 12:57:07 +000056else()
Pirama Arumuga Nainar259f7062015-05-06 11:49:53 -070057 # Common parts of UBSan runtime.
Pirama Arumuga Nainarcdce50b2015-07-01 12:26:56 -070058 add_compiler_rt_object_libraries(RTUbsan
59 ARCH ${UBSAN_COMMON_SUPPORTED_ARCH}
60 SOURCES ${UBSAN_SOURCES} CFLAGS ${UBSAN_CFLAGS})
61 # C++-specific parts of UBSan runtime. Requires a C++ ABI library.
62 add_compiler_rt_object_libraries(RTUbsan_cxx
63 ARCH ${UBSAN_COMMON_SUPPORTED_ARCH}
64 SOURCES ${UBSAN_CXX_SOURCES} CFLAGS ${UBSAN_CXXFLAGS})
Pirama Arumuga Nainar259f7062015-05-06 11:49:53 -070065
66 if(COMPILER_RT_HAS_UBSAN)
Pirama Arumuga Nainarcdce50b2015-07-01 12:26:56 -070067 # Initializer of standalone UBSan runtime.
68 add_compiler_rt_object_libraries(RTUbsan_standalone
69 ARCH ${UBSAN_SUPPORTED_ARCH}
70 SOURCES ${UBSAN_STANDALONE_SOURCES} CFLAGS ${UBSAN_STANDALONE_CFLAGS})
71
Pirama Arumuga Nainar259f7062015-05-06 11:49:53 -070072 foreach(arch ${UBSAN_SUPPORTED_ARCH})
Pirama Arumuga Nainar259f7062015-05-06 11:49:53 -070073 # Standalone UBSan runtimes.
74 add_compiler_rt_runtime(clang_rt.ubsan_standalone-${arch} ${arch} STATIC
75 SOURCES $<TARGET_OBJECTS:RTSanitizerCommon.${arch}>
76 $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}>
77 $<TARGET_OBJECTS:RTUbsan.${arch}>
78 $<TARGET_OBJECTS:RTUbsan_standalone.${arch}>
79 CFLAGS ${UBSAN_CFLAGS})
80 add_compiler_rt_runtime(clang_rt.ubsan_standalone_cxx-${arch} ${arch} STATIC
81 SOURCES $<TARGET_OBJECTS:RTUbsan_cxx.${arch}>
82 CFLAGS ${UBSAN_CXXFLAGS})
83
84 add_dependencies(ubsan
85 clang_rt.ubsan_standalone-${arch}
86 clang_rt.ubsan_standalone_cxx-${arch})
87 if (UNIX AND NOT ${arch} MATCHES "i386|i686")
88 add_sanitizer_rt_symbols(clang_rt.ubsan_standalone-${arch} ubsan.syms.extra)
89 add_sanitizer_rt_symbols(clang_rt.ubsan_standalone_cxx-${arch} ubsan.syms.extra)
90 add_dependencies(ubsan
91 clang_rt.ubsan_standalone-${arch}-symbols
92 clang_rt.ubsan_standalone_cxx-${arch}-symbols)
93 endif()
94 endforeach()
95 endif()
Richard Smith6ebe4512012-10-09 19:34:32 +000096endif()
97
Stephen Hines2d1fdb22014-05-28 23:58:16 -070098add_dependencies(compiler-rt ubsan)