tsan: handle memory read/write in syscalls
[blocksruntime.git] / cmake / Modules / SanitizerUtils.cmake
blobaa7be300c0ba429b030912c8f978650785669999
1 include(LLVMParseArguments)
3 set(SANITIZER_GEN_DYNAMIC_LIST
4   ${COMPILER_RT_SOURCE_DIR}/lib/sanitizer_common/scripts/gen_dynamic_list.py)
6 set(SANITIZER_LINT_SCRIPT
7   ${COMPILER_RT_SOURCE_DIR}/lib/sanitizer_common/scripts/check_lint.sh)
9 # Create a target "<name>-symbols" that would generate the list of symbols
10 # that need to be exported from sanitizer runtime "<name>". Function
11 # interceptors are exported automatically, user can also provide files with
12 # symbol names that should be exported as well.
13 #   add_sanitizer_rt_symbols(<name> <files with extra symbols to export>)
14 macro(add_sanitizer_rt_symbols name)
15   get_target_property(libfile ${name} LOCATION)
16   set(symsfile "${libfile}.syms")
17   add_custom_command(OUTPUT ${symsfile}
18     COMMAND ${PYTHON_EXECUTABLE}
19       ${SANITIZER_GEN_DYNAMIC_LIST} ${libfile} ${ARGN}
20       > ${symsfile}
21     DEPENDS ${name} ${SANITIZER_GEN_DYNAMIC_LIST} ${ARGN}
22     WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
23     COMMENT "Generating exported symbols for ${name}"
24     VERBATIM)
25   add_custom_target(${name}-symbols ALL
26     DEPENDS ${symsfile}
27     SOURCES ${SANITIZER_GEN_DYNAMIC_LIST} ${ARGN})
28   install(FILES ${symsfile} DESTINATION ${COMPILER_RT_LIBRARY_INSTALL_DIR})
29 endmacro()
31 # Add target to check code style for sanitizer runtimes.
32 if(UNIX)
33   add_custom_target(SanitizerLintCheck
34     COMMAND LLVM_CHECKOUT=${LLVM_MAIN_SRC_DIR} SILENT=1 TMPDIR=
35       PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}
36       ${SANITIZER_LINT_SCRIPT}
37     DEPENDS ${SANITIZER_LINT_SCRIPT}
38     COMMENT "Running lint check for sanitizer sources..."
39     VERBATIM)
40 endif()