CMakeLists.txt revision 2d1fdb26e458c4ddc04155c1d421bced3ba90cd0
1# Build for the undefined behavior sanitizer runtime support library. 2 3set(UBSAN_SOURCES 4 ubsan_diag.cc 5 ubsan_handlers.cc 6 ubsan_value.cc 7 ) 8 9set(UBSAN_CXX_SOURCES 10 ubsan_handlers_cxx.cc 11 ubsan_type_hash.cc 12 ) 13 14include_directories(..) 15 16set(UBSAN_CFLAGS ${SANITIZER_COMMON_CFLAGS}) 17 18add_custom_target(ubsan) 19 20if(APPLE) 21 # Build universal binary on APPLE. 22 add_compiler_rt_osx_static_runtime(clang_rt.ubsan_osx 23 ARCH ${UBSAN_SUPPORTED_ARCH} 24 SOURCES ${UBSAN_SOURCES} ${UBSAN_CXX_SOURCES} 25 $<TARGET_OBJECTS:RTSanitizerCommon.osx> 26 CFLAGS ${UBSAN_CFLAGS}) 27 add_dependencies(ubsan clang_rt.ubsan_osx) 28else() 29 # Build separate libraries for each target. 30 foreach(arch ${UBSAN_SUPPORTED_ARCH}) 31 # Main UBSan runtime. 32 add_compiler_rt_runtime(clang_rt.ubsan-${arch} ${arch} STATIC 33 SOURCES ${UBSAN_SOURCES} 34 CFLAGS ${UBSAN_CFLAGS}) 35 # C++-specific parts of UBSan runtime. Requires a C++ ABI library. 36 add_compiler_rt_runtime(clang_rt.ubsan_cxx-${arch} ${arch} STATIC 37 SOURCES ${UBSAN_CXX_SOURCES} 38 CFLAGS ${UBSAN_CFLAGS}) 39 add_dependencies(ubsan 40 clang_rt.san-${arch} 41 clang_rt.ubsan-${arch} 42 clang_rt.ubsan_cxx-${arch}) 43 if (UNIX AND NOT ${arch} STREQUAL "i386") 44 add_sanitizer_rt_symbols(clang_rt.ubsan-${arch} ubsan.syms.extra) 45 add_sanitizer_rt_symbols(clang_rt.ubsan_cxx-${arch} ubsan.syms.extra) 46 add_dependencies(ubsan 47 clang_rt.ubsan-${arch}-symbols 48 clang_rt.ubsan_cxx-${arch}-symbols) 49 endif() 50 endforeach() 51endif() 52 53add_dependencies(compiler-rt ubsan) 54