1include_directories(..)
2
3# Runtime library sources and build flags.
4set(DFSAN_RTL_SOURCES
5  dfsan.cc
6  dfsan_custom.cc
7  dfsan_interceptors.cc)
8set(DFSAN_COMMON_CFLAGS ${SANITIZER_COMMON_CFLAGS})
9# Prevent clang from generating libc calls.
10append_if(COMPILER_RT_HAS_FFREESTANDING_FLAG -ffreestanding DFSAN_COMMON_CFLAGS)
11
12# Static runtime library.
13add_custom_target(dfsan)
14set(arch "x86_64")
15if(CAN_TARGET_${arch})
16  set(DFSAN_CFLAGS ${DFSAN_COMMON_CFLAGS})
17  append_if(COMPILER_RT_HAS_FPIE_FLAG -fPIE DFSAN_CFLAGS)
18  add_compiler_rt_runtime(clang_rt.dfsan-${arch} ${arch} STATIC
19    SOURCES ${DFSAN_RTL_SOURCES}
20            $<TARGET_OBJECTS:RTInterception.${arch}>
21            $<TARGET_OBJECTS:RTSanitizerCommon.${arch}>
22            $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}>
23    CFLAGS ${DFSAN_CFLAGS})
24  set(DFSAN_NOLIBC_CFLAGS ${DFSAN_COMMON_CFLAGS} -DDFSAN_NOLIBC)
25  add_compiler_rt_runtime(clang_rt.dfsan-libc-${arch} ${arch} STATIC
26    SOURCES ${DFSAN_RTL_SOURCES}
27            $<TARGET_OBJECTS:RTSanitizerCommon.${arch}>
28            CFLAGS ${DFSAN_NOLIBC_CFLAGS})
29  add_sanitizer_rt_symbols(clang_rt.dfsan-${arch} dfsan.syms.extra)
30  add_dependencies(dfsan
31    clang_rt.dfsan-${arch}
32    clang_rt.dfsan-${arch}-symbols)
33endif()
34
35set(dfsan_abilist_filename ${COMPILER_RT_OUTPUT_DIR}/dfsan_abilist.txt)
36add_custom_target(dfsan_abilist ALL
37  DEPENDS ${dfsan_abilist_filename})
38add_custom_command(OUTPUT ${dfsan_abilist_filename}
39                   VERBATIM
40                   COMMAND
41                     cat ${CMAKE_CURRENT_SOURCE_DIR}/done_abilist.txt
42                         ${CMAKE_CURRENT_SOURCE_DIR}/libc_ubuntu1204_abilist.txt
43                         > ${dfsan_abilist_filename}
44                   DEPENDS done_abilist.txt libc_ubuntu1204_abilist.txt)
45add_dependencies(dfsan dfsan_abilist)
46install(FILES ${dfsan_abilist_filename}
47        DESTINATION ${COMPILER_RT_INSTALL_PATH})
48
49add_dependencies(compiler-rt dfsan)
50