CMakeLists.txt revision 43b4b9c18a7a588a60b9d976391ad8e2f5f9a309
1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov# Build for the undefined behavior sanitizer runtime support library.
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovset(UBSAN_SOURCES
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  ubsan_diag.cc
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  ubsan_handlers.cc
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  ubsan_handlers_cxx.cc
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  ubsan_type_hash.cc
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  ubsan_value.cc
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  )
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinclude_directories(..)
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovset(UBSAN_CFLAGS ${SANITIZER_COMMON_CFLAGS})
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovfilter_available_targets(UBSAN_SUPPORTED_ARCH
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  x86_64 i386)
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovset(UBSAN_RUNTIME_LIBRARIES)
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovif(APPLE)
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  # Build universal binary on APPLE.
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  add_library(clang_rt.ubsan_osx STATIC
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ${UBSAN_SOURCES}
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    $<TARGET_OBJECTS:RTSanitizerCommon.osx>
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    )
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  set_target_compile_flags(clang_rt.ubsan_osx ${UBSAN_CFLAGS})
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  set_target_properties(clang_rt.ubsan_osx PROPERTIES
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    OSX_ARCHITECTURES "${UBSAN_SUPPORTED_ARCH}")
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  list(APPEND UBSAN_RUNTIME_LIBRARIES clang_rt.ubsan_osx)
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovelse()
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  # Build separate libraries for each target.
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  foreach(arch ${UBSAN_SUPPORTED_ARCH})
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    add_library(clang_rt.ubsan-${arch} STATIC
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      ${UBSAN_SOURCES}
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      $<TARGET_OBJECTS:RTSanitizerCommon.${arch}>
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      )
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    set_target_compile_flags(clang_rt.ubsan-${arch}
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      ${UBSAN_CFLAGS} ${TARGET_${arch}_CFLAGS}
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      )
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    list(APPEND UBSAN_RUNTIME_LIBRARIES clang_rt.ubsan-${arch})
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  endforeach()
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovendif()
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovset_property(TARGET ${UBSAN_RUNTIME_LIBRARIES} APPEND PROPERTY
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  COMPILE_DEFINITIONS ${UBSAN_COMMON_DEFINITIONS})
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovadd_clang_compiler_rt_libraries(${UBSAN_RUNTIME_LIBRARIES})
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovadd_subdirectory(lit_tests)
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov