diff options
-rw-r--r-- | cmake/Modules/SanitizerUtils.cmake | 78 | ||||
-rw-r--r-- | lib/asan/CMakeLists.txt | 6 | ||||
-rw-r--r-- | lib/dfsan/CMakeLists.txt | 3 | ||||
-rw-r--r-- | lib/msan/CMakeLists.txt | 6 | ||||
-rw-r--r-- | lib/tsan/CMakeLists.txt | 6 | ||||
-rw-r--r-- | lib/ubsan/CMakeLists.txt | 22 |
6 files changed, 67 insertions, 54 deletions
diff --git a/cmake/Modules/SanitizerUtils.cmake b/cmake/Modules/SanitizerUtils.cmake index 96e9ab441..3eb49c83f 100644 --- a/cmake/Modules/SanitizerUtils.cmake +++ b/cmake/Modules/SanitizerUtils.cmake @@ -4,56 +4,60 @@ set(SANITIZER_GEN_DYNAMIC_LIST set(SANITIZER_LINT_SCRIPT ${COMPILER_RT_SOURCE_DIR}/lib/sanitizer_common/scripts/check_lint.sh) -# Create a target "<name>-symbols" that would generate the list of symbols -# that need to be exported from sanitizer runtime "<name>". Function +# Create a target "<name>-<arch>-symbols" that would generate the list of +# symbols that need to be exported from sanitizer runtime "<name>". Function # interceptors are exported automatically, user can also provide files with # symbol names that should be exported as well. # add_sanitizer_rt_symbols(<name> +# ARCHS <architectures> # PARENT_TARGET <convenience parent target> # EXTRA <files with extra symbols to export>) macro(add_sanitizer_rt_symbols name) cmake_parse_arguments(ARG "" "PARENT_TARGET" - "EXTRA" + "ARCHS;EXTRA" ${ARGN}) - set(stamp ${CMAKE_CURRENT_BINARY_DIR}/${name}.syms-stamp) - set(extra_args) - foreach(arg ${ARG_EXTRA}) - list(APPEND extra_args "--extra" ${arg}) - endforeach() - add_custom_command(OUTPUT ${stamp} - COMMAND ${PYTHON_EXECUTABLE} - ${SANITIZER_GEN_DYNAMIC_LIST} ${extra_args} $<TARGET_FILE:${name}> - > $<TARGET_FILE:${name}>.syms - COMMAND ${CMAKE_COMMAND} -E touch ${stamp} - DEPENDS ${name} ${SANITIZER_GEN_DYNAMIC_LIST} ${ARG_EXTRA} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMENT "Generating exported symbols for ${name}" - VERBATIM) - add_custom_target(${name}-symbols ALL - DEPENDS ${stamp} - SOURCES ${SANITIZER_GEN_DYNAMIC_LIST} ${ARG_EXTRA}) + foreach(arch ${ARG_ARCHS}) + set(target_name ${name}-${arch}) + set(stamp ${CMAKE_CURRENT_BINARY_DIR}/${target_name}.syms-stamp) + set(extra_args) + foreach(arg ${ARG_EXTRA}) + list(APPEND extra_args "--extra" ${arg}) + endforeach() + add_custom_command(OUTPUT ${stamp} + COMMAND ${PYTHON_EXECUTABLE} + ${SANITIZER_GEN_DYNAMIC_LIST} ${extra_args} $<TARGET_FILE:${target_name}> + > $<TARGET_FILE:${target_name}>.syms + COMMAND ${CMAKE_COMMAND} -E touch ${stamp} + DEPENDS ${target_name} ${SANITIZER_GEN_DYNAMIC_LIST} ${ARG_EXTRA} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "Generating exported symbols for ${target_name}" + VERBATIM) + add_custom_target(${target_name}-symbols ALL + DEPENDS ${stamp} + SOURCES ${SANITIZER_GEN_DYNAMIC_LIST} ${ARG_EXTRA}) - if(NOT CMAKE_VERSION VERSION_LESS 3.0) - install(FILES $<TARGET_FILE:${name}>.syms - DESTINATION ${COMPILER_RT_LIBRARY_INSTALL_DIR}) - else() - # Per-config install location. - if(CMAKE_CONFIGURATION_TYPES) - foreach(c ${CMAKE_CONFIGURATION_TYPES}) - get_target_property(libfile ${name} LOCATION_${c}) - install(FILES ${libfile}.syms CONFIGURATIONS ${c} - DESTINATION ${COMPILER_RT_LIBRARY_INSTALL_DIR}) - endforeach() + if(NOT CMAKE_VERSION VERSION_LESS 3.0) + install(FILES $<TARGET_FILE:${target_name}>.syms + DESTINATION ${COMPILER_RT_LIBRARY_INSTALL_DIR}) else() - get_target_property(libfile ${name} LOCATION_${CMAKE_BUILD_TYPE}) - install(FILES ${libfile}.syms DESTINATION ${COMPILER_RT_LIBRARY_INSTALL_DIR}) + # Per-config install location. + if(CMAKE_CONFIGURATION_TYPES) + foreach(c ${CMAKE_CONFIGURATION_TYPES}) + get_target_property(libfile ${target_name} LOCATION_${c}) + install(FILES ${libfile}.syms CONFIGURATIONS ${c} + DESTINATION ${COMPILER_RT_LIBRARY_INSTALL_DIR}) + endforeach() + else() + get_target_property(libfile ${target_name} LOCATION_${CMAKE_BUILD_TYPE}) + install(FILES ${libfile}.syms DESTINATION ${COMPILER_RT_LIBRARY_INSTALL_DIR}) + endif() endif() - endif() - if(ARG_PARENT_TARGET) - add_dependencies(${ARG_PARENT_TARGET} ${name}-symbols) - endif() + if(ARG_PARENT_TARGET) + add_dependencies(${ARG_PARENT_TARGET} ${target_name}-symbols) + endif() + endforeach() endmacro() macro(add_sanitizer_rt_version_list name) diff --git a/lib/asan/CMakeLists.txt b/lib/asan/CMakeLists.txt index 2bfde8c34..3f5f12973 100644 --- a/lib/asan/CMakeLists.txt +++ b/lib/asan/CMakeLists.txt @@ -189,9 +189,11 @@ else() PARENT_TARGET asan) if (UNIX AND NOT ${arch} MATCHES "i386|i686") - add_sanitizer_rt_symbols(clang_rt.asan_cxx-${arch}) + add_sanitizer_rt_symbols(clang_rt.asan_cxx + ARCHS ${arch}) add_dependencies(asan clang_rt.asan_cxx-${arch}-symbols) - add_sanitizer_rt_symbols(clang_rt.asan-${arch} + add_sanitizer_rt_symbols(clang_rt.asan + ARCHS ${arch} EXTRA asan.syms.extra) add_dependencies(asan clang_rt.asan-${arch}-symbols) endif() diff --git a/lib/dfsan/CMakeLists.txt b/lib/dfsan/CMakeLists.txt index 926b9b5e2..19a7909d0 100644 --- a/lib/dfsan/CMakeLists.txt +++ b/lib/dfsan/CMakeLists.txt @@ -24,7 +24,8 @@ foreach(arch ${DFSAN_SUPPORTED_ARCH}) $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}> CFLAGS ${DFSAN_CFLAGS} PARENT_TARGET dfsan) - add_sanitizer_rt_symbols(clang_rt.dfsan-${arch} + add_sanitizer_rt_symbols(clang_rt.dfsan + ARCHS ${arch} EXTRA dfsan.syms.extra) add_dependencies(dfsan clang_rt.dfsan-${arch}-symbols) diff --git a/lib/msan/CMakeLists.txt b/lib/msan/CMakeLists.txt index 075d80789..1b48def46 100644 --- a/lib/msan/CMakeLists.txt +++ b/lib/msan/CMakeLists.txt @@ -47,9 +47,11 @@ foreach(arch ${MSAN_SUPPORTED_ARCH}) list(APPEND MSAN_RUNTIME_LIBRARIES clang_rt.msan-${arch} clang_rt.msan_cxx-${arch}) if(UNIX) - add_sanitizer_rt_symbols(clang_rt.msan-${arch} + add_sanitizer_rt_symbols(clang_rt.msan + ARCHS ${arch} EXTRA msan.syms.extra) - add_sanitizer_rt_symbols(clang_rt.msan_cxx-${arch} + add_sanitizer_rt_symbols(clang_rt.msan_cxx + ARCHS ${arch} EXTRA msan.syms.extra) add_dependencies(msan clang_rt.msan-${arch}-symbols clang_rt.msan_cxx-${arch}-symbols) diff --git a/lib/tsan/CMakeLists.txt b/lib/tsan/CMakeLists.txt index 495c5641d..2f246d42b 100644 --- a/lib/tsan/CMakeLists.txt +++ b/lib/tsan/CMakeLists.txt @@ -118,9 +118,11 @@ foreach(arch ${TSAN_SUPPORTED_ARCH}) CFLAGS ${TSAN_RTL_CFLAGS}) list(APPEND TSAN_RUNTIME_LIBRARIES clang_rt.tsan-${arch} clang_rt.tsan_cxx-${arch}) - add_sanitizer_rt_symbols(clang_rt.tsan-${arch} + add_sanitizer_rt_symbols(clang_rt.tsan + ARCHS ${arch} EXTRA rtl/tsan.syms.extra) - add_sanitizer_rt_symbols(clang_rt.tsan_cxx-${arch} + add_sanitizer_rt_symbols(clang_rt.tsan_cxx + ARCHS ${arch} EXTRA rtl/tsan.syms.extra) add_dependencies(tsan clang_rt.tsan-${arch} clang_rt.tsan_cxx-${arch} diff --git a/lib/ubsan/CMakeLists.txt b/lib/ubsan/CMakeLists.txt index c5e52df97..e7b1c988d 100644 --- a/lib/ubsan/CMakeLists.txt +++ b/lib/ubsan/CMakeLists.txt @@ -94,16 +94,18 @@ else() CFLAGS ${UBSAN_CXXFLAGS} PARENT_TARGET ubsan) - foreach(arch ${UBSAN_SUPPORTED_ARCH}) - if (UNIX AND NOT ${arch} MATCHES "i386|i686") - add_sanitizer_rt_symbols(clang_rt.ubsan_standalone-${arch} - PARENT_TARGET ubsan - EXTRA ubsan.syms.extra) - add_sanitizer_rt_symbols(clang_rt.ubsan_standalone_cxx-${arch} - PARENT_TARGET ubsan - EXTRA ubsan.syms.extra) - endif() - endforeach() + if (UNIX) + set(ARCHS_FOR_SYMBOLS ${UBSAN_SUPPORTED_ARCH}) + list(REMOVE_ITEM ARCHS_FOR_SYMBOLS i386 i686) + add_sanitizer_rt_symbols(clang_rt.ubsan_standalone + ARCHS ${ARCHS_FOR_SYMBOLS} + PARENT_TARGET ubsan + EXTRA ubsan.syms.extra) + add_sanitizer_rt_symbols(clang_rt.ubsan_standalone_cxx + ARCHS ${ARCHS_FOR_SYMBOLS} + PARENT_TARGET ubsan + EXTRA ubsan.syms.extra) + endif() endif() endif() |