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