blob: 257a15a933011f38a5ad1a0892b038ba0092af3a [file] [log] [blame]
Peter Collingbourne5cbab072013-08-07 22:47:26 +00001include_directories(..)
2
3# Runtime library sources and build flags.
4set(DFSAN_RTL_SOURCES
Peter Collingbourne12b08092013-08-15 21:18:53 +00005 dfsan.cc
6 dfsan_custom.cc
7 dfsan_interceptors.cc)
Alexey Samsonov878a9a52014-02-18 08:07:09 +00008set(DFSAN_COMMON_CFLAGS ${SANITIZER_COMMON_CFLAGS})
9# Prevent clang from generating libc calls.
Kuba Brecka14c0c592014-10-15 22:47:54 +000010append_list_if(COMPILER_RT_HAS_FFREESTANDING_FLAG -ffreestanding DFSAN_COMMON_CFLAGS)
Peter Collingbourne5cbab072013-08-07 22:47:26 +000011
12# Static runtime library.
Alexey Samsonovf6cf6ab2014-02-14 12:05:41 +000013add_custom_target(dfsan)
Peter Collingbournefd860bc2014-12-05 21:22:36 +000014foreach(arch ${DFSAN_SUPPORTED_ARCH})
Alexey Samsonov878a9a52014-02-18 08:07:09 +000015 set(DFSAN_CFLAGS ${DFSAN_COMMON_CFLAGS})
Kuba Brecka14c0c592014-10-15 22:47:54 +000016 append_list_if(COMPILER_RT_HAS_FPIE_FLAG -fPIE DFSAN_CFLAGS)
Alexey Samsonov78a84352014-03-31 13:45:36 +000017 add_compiler_rt_runtime(clang_rt.dfsan-${arch} ${arch} STATIC
Peter Collingbourne5cbab072013-08-07 22:47:26 +000018 SOURCES ${DFSAN_RTL_SOURCES}
19 $<TARGET_OBJECTS:RTInterception.${arch}>
20 $<TARGET_OBJECTS:RTSanitizerCommon.${arch}>
21 $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}>
Alexey Samsonov878a9a52014-02-18 08:07:09 +000022 CFLAGS ${DFSAN_CFLAGS})
23 set(DFSAN_NOLIBC_CFLAGS ${DFSAN_COMMON_CFLAGS} -DDFSAN_NOLIBC)
Alexey Samsonov78a84352014-03-31 13:45:36 +000024 add_compiler_rt_runtime(clang_rt.dfsan-libc-${arch} ${arch} STATIC
Peter Collingbourne5cbab072013-08-07 22:47:26 +000025 SOURCES ${DFSAN_RTL_SOURCES}
26 $<TARGET_OBJECTS:RTSanitizerCommon.${arch}>
Alexey Samsonov878a9a52014-02-18 08:07:09 +000027 CFLAGS ${DFSAN_NOLIBC_CFLAGS})
Peter Collingbourne014328e2013-08-29 22:49:00 +000028 add_sanitizer_rt_symbols(clang_rt.dfsan-${arch} dfsan.syms.extra)
Alexey Samsonovf6cf6ab2014-02-14 12:05:41 +000029 add_dependencies(dfsan
30 clang_rt.dfsan-${arch}
31 clang_rt.dfsan-${arch}-symbols)
Peter Collingbournefd860bc2014-12-05 21:22:36 +000032endforeach()
Peter Collingbourne5cbab072013-08-07 22:47:26 +000033
Alexey Samsonov1181a102014-02-18 14:28:53 +000034set(dfsan_abilist_filename ${COMPILER_RT_OUTPUT_DIR}/dfsan_abilist.txt)
Peter Collingbourne0e51eda2013-08-14 18:54:06 +000035add_custom_target(dfsan_abilist ALL
Chandler Carruthc42ddde2014-04-30 23:31:45 +000036 DEPENDS ${dfsan_abilist_filename})
Alexey Samsonov1181a102014-02-18 14:28:53 +000037add_custom_command(OUTPUT ${dfsan_abilist_filename}
Peter Collingbourne0e51eda2013-08-14 18:54:06 +000038 VERBATIM
39 COMMAND
40 cat ${CMAKE_CURRENT_SOURCE_DIR}/done_abilist.txt
Peter Collingbourne113ff7f2014-11-05 17:21:06 +000041 ${CMAKE_CURRENT_SOURCE_DIR}/libc_ubuntu1404_abilist.txt
Alexey Samsonov1181a102014-02-18 14:28:53 +000042 > ${dfsan_abilist_filename}
Peter Collingbourne113ff7f2014-11-05 17:21:06 +000043 DEPENDS done_abilist.txt libc_ubuntu1404_abilist.txt)
Alexey Samsonovf6cf6ab2014-02-14 12:05:41 +000044add_dependencies(dfsan dfsan_abilist)
Alexey Samsonov1181a102014-02-18 14:28:53 +000045install(FILES ${dfsan_abilist_filename}
46 DESTINATION ${COMPILER_RT_INSTALL_PATH})
Alexey Samsonov63a4af72014-02-18 09:33:45 +000047
48add_dependencies(compiler-rt dfsan)