1*7c3d14c8STreehugger Robot# Build for the undefined behavior sanitizer runtime support library. 2*7c3d14c8STreehugger Robot 3*7c3d14c8STreehugger Robotset(UBSAN_SOURCES 4*7c3d14c8STreehugger Robot ubsan_diag.cc 5*7c3d14c8STreehugger Robot ubsan_init.cc 6*7c3d14c8STreehugger Robot ubsan_flags.cc 7*7c3d14c8STreehugger Robot ubsan_handlers.cc 8*7c3d14c8STreehugger Robot ubsan_value.cc 9*7c3d14c8STreehugger Robot ) 10*7c3d14c8STreehugger Robot 11*7c3d14c8STreehugger Robotset(UBSAN_STANDALONE_SOURCES 12*7c3d14c8STreehugger Robot ubsan_init_standalone.cc 13*7c3d14c8STreehugger Robot ) 14*7c3d14c8STreehugger Robot 15*7c3d14c8STreehugger Robotset(UBSAN_CXX_SOURCES 16*7c3d14c8STreehugger Robot ubsan_handlers_cxx.cc 17*7c3d14c8STreehugger Robot ubsan_type_hash.cc 18*7c3d14c8STreehugger Robot ubsan_type_hash_itanium.cc 19*7c3d14c8STreehugger Robot ubsan_type_hash_win.cc 20*7c3d14c8STreehugger Robot ) 21*7c3d14c8STreehugger Robot 22*7c3d14c8STreehugger Robotinclude_directories(..) 23*7c3d14c8STreehugger Robot 24*7c3d14c8STreehugger Robotset(UBSAN_CFLAGS ${SANITIZER_COMMON_CFLAGS}) 25*7c3d14c8STreehugger Robotappend_rtti_flag(OFF UBSAN_CFLAGS) 26*7c3d14c8STreehugger Robotappend_list_if(SANITIZER_CAN_USE_CXXABI -DUBSAN_CAN_USE_CXXABI UBSAN_CFLAGS) 27*7c3d14c8STreehugger Robot 28*7c3d14c8STreehugger Robotset(UBSAN_STANDALONE_CFLAGS ${SANITIZER_COMMON_CFLAGS}) 29*7c3d14c8STreehugger Robotappend_rtti_flag(OFF UBSAN_STANDALONE_CFLAGS) 30*7c3d14c8STreehugger Robotappend_list_if(SANITIZER_CAN_USE_CXXABI -DUBSAN_CAN_USE_CXXABI UBSAN_STANDALONE_CFLAGS) 31*7c3d14c8STreehugger Robot 32*7c3d14c8STreehugger Robotset(UBSAN_CXXFLAGS ${SANITIZER_COMMON_CFLAGS}) 33*7c3d14c8STreehugger Robotappend_rtti_flag(ON UBSAN_STANDALONE_CXXFLAGS) 34*7c3d14c8STreehugger Robotappend_list_if(SANITIZER_CAN_USE_CXXABI -DUBSAN_CAN_USE_CXXABI UBSAN_CXXFLAGS) 35*7c3d14c8STreehugger Robot 36*7c3d14c8STreehugger Robotadd_custom_target(ubsan) 37*7c3d14c8STreehugger Robotset_target_properties(ubsan PROPERTIES FOLDER "Compiler-RT Misc") 38*7c3d14c8STreehugger Robot 39*7c3d14c8STreehugger Robotif(APPLE) 40*7c3d14c8STreehugger Robot set(UBSAN_COMMON_SOURCES ${UBSAN_SOURCES}) 41*7c3d14c8STreehugger Robot if(SANITIZER_CAN_USE_CXXABI) 42*7c3d14c8STreehugger Robot list(APPEND UBSAN_COMMON_SOURCES ${UBSAN_CXX_SOURCES}) 43*7c3d14c8STreehugger Robot endif() 44*7c3d14c8STreehugger Robot 45*7c3d14c8STreehugger Robot # Common parts of UBSan runtime. 46*7c3d14c8STreehugger Robot add_compiler_rt_object_libraries(RTUbsan 47*7c3d14c8STreehugger Robot OS ${SANITIZER_COMMON_SUPPORTED_OS} 48*7c3d14c8STreehugger Robot ARCHS ${UBSAN_COMMON_SUPPORTED_ARCH} 49*7c3d14c8STreehugger Robot SOURCES ${UBSAN_COMMON_SOURCES} 50*7c3d14c8STreehugger Robot CFLAGS ${UBSAN_CXXFLAGS}) 51*7c3d14c8STreehugger Robot 52*7c3d14c8STreehugger Robot if(COMPILER_RT_HAS_UBSAN) 53*7c3d14c8STreehugger Robot # Initializer of standalone UBSan runtime. 54*7c3d14c8STreehugger Robot add_compiler_rt_object_libraries(RTUbsan_standalone 55*7c3d14c8STreehugger Robot OS ${SANITIZER_COMMON_SUPPORTED_OS} 56*7c3d14c8STreehugger Robot ARCHS ${UBSAN_SUPPORTED_ARCH} 57*7c3d14c8STreehugger Robot SOURCES ${UBSAN_STANDALONE_SOURCES} 58*7c3d14c8STreehugger Robot CFLAGS ${UBSAN_STANDALONE_CFLAGS}) 59*7c3d14c8STreehugger Robot 60*7c3d14c8STreehugger Robot add_compiler_rt_runtime(clang_rt.ubsan 61*7c3d14c8STreehugger Robot SHARED 62*7c3d14c8STreehugger Robot OS ${SANITIZER_COMMON_SUPPORTED_OS} 63*7c3d14c8STreehugger Robot ARCHS ${UBSAN_SUPPORTED_ARCH} 64*7c3d14c8STreehugger Robot OBJECT_LIBS RTUbsan 65*7c3d14c8STreehugger Robot RTUbsan_standalone 66*7c3d14c8STreehugger Robot RTSanitizerCommon 67*7c3d14c8STreehugger Robot RTSanitizerCommonLibc 68*7c3d14c8STreehugger Robot PARENT_TARGET ubsan) 69*7c3d14c8STreehugger Robot endif() 70*7c3d14c8STreehugger Robot 71*7c3d14c8STreehugger Robotelse() 72*7c3d14c8STreehugger Robot # Common parts of UBSan runtime. 73*7c3d14c8STreehugger Robot add_compiler_rt_object_libraries(RTUbsan 74*7c3d14c8STreehugger Robot ARCHS ${UBSAN_COMMON_SUPPORTED_ARCH} 75*7c3d14c8STreehugger Robot SOURCES ${UBSAN_SOURCES} CFLAGS ${UBSAN_CFLAGS}) 76*7c3d14c8STreehugger Robot # C++-specific parts of UBSan runtime. Requires a C++ ABI library. 77*7c3d14c8STreehugger Robot add_compiler_rt_object_libraries(RTUbsan_cxx 78*7c3d14c8STreehugger Robot ARCHS ${UBSAN_COMMON_SUPPORTED_ARCH} 79*7c3d14c8STreehugger Robot SOURCES ${UBSAN_CXX_SOURCES} CFLAGS ${UBSAN_CXXFLAGS}) 80*7c3d14c8STreehugger Robot 81*7c3d14c8STreehugger Robot if(COMPILER_RT_HAS_UBSAN) 82*7c3d14c8STreehugger Robot # Initializer of standalone UBSan runtime. 83*7c3d14c8STreehugger Robot add_compiler_rt_object_libraries(RTUbsan_standalone 84*7c3d14c8STreehugger Robot ARCHS ${UBSAN_SUPPORTED_ARCH} 85*7c3d14c8STreehugger Robot SOURCES ${UBSAN_STANDALONE_SOURCES} CFLAGS ${UBSAN_STANDALONE_CFLAGS}) 86*7c3d14c8STreehugger Robot 87*7c3d14c8STreehugger Robot # Standalone UBSan runtimes. 88*7c3d14c8STreehugger Robot add_compiler_rt_runtime(clang_rt.ubsan_standalone 89*7c3d14c8STreehugger Robot STATIC 90*7c3d14c8STreehugger Robot ARCHS ${UBSAN_SUPPORTED_ARCH} 91*7c3d14c8STreehugger Robot OBJECT_LIBS RTSanitizerCommon 92*7c3d14c8STreehugger Robot RTSanitizerCommonLibc 93*7c3d14c8STreehugger Robot RTUbsan 94*7c3d14c8STreehugger Robot RTUbsan_standalone 95*7c3d14c8STreehugger Robot CFLAGS ${UBSAN_CFLAGS} 96*7c3d14c8STreehugger Robot PARENT_TARGET ubsan) 97*7c3d14c8STreehugger Robot 98*7c3d14c8STreehugger Robot add_compiler_rt_runtime(clang_rt.ubsan_standalone_cxx 99*7c3d14c8STreehugger Robot STATIC 100*7c3d14c8STreehugger Robot ARCHS ${UBSAN_SUPPORTED_ARCH} 101*7c3d14c8STreehugger Robot OBJECT_LIBS RTUbsan_cxx 102*7c3d14c8STreehugger Robot CFLAGS ${UBSAN_CXXFLAGS} 103*7c3d14c8STreehugger Robot PARENT_TARGET ubsan) 104*7c3d14c8STreehugger Robot 105*7c3d14c8STreehugger Robot if (UNIX) 106*7c3d14c8STreehugger Robot set(ARCHS_FOR_SYMBOLS ${UBSAN_SUPPORTED_ARCH}) 107*7c3d14c8STreehugger Robot list(REMOVE_ITEM ARCHS_FOR_SYMBOLS i386 i686) 108*7c3d14c8STreehugger Robot add_sanitizer_rt_symbols(clang_rt.ubsan_standalone 109*7c3d14c8STreehugger Robot ARCHS ${ARCHS_FOR_SYMBOLS} 110*7c3d14c8STreehugger Robot PARENT_TARGET ubsan 111*7c3d14c8STreehugger Robot EXTRA ubsan.syms.extra) 112*7c3d14c8STreehugger Robot add_sanitizer_rt_symbols(clang_rt.ubsan_standalone_cxx 113*7c3d14c8STreehugger Robot ARCHS ${ARCHS_FOR_SYMBOLS} 114*7c3d14c8STreehugger Robot PARENT_TARGET ubsan 115*7c3d14c8STreehugger Robot EXTRA ubsan.syms.extra) 116*7c3d14c8STreehugger Robot endif() 117*7c3d14c8STreehugger Robot endif() 118*7c3d14c8STreehugger Robotendif() 119*7c3d14c8STreehugger Robot 120*7c3d14c8STreehugger Robotadd_dependencies(compiler-rt ubsan) 121