Skip to content

Commit

Permalink
[CMake] Provide direct support for building sanitized runtimes
Browse files Browse the repository at this point in the history
This avoids having to rely on magic separators and special parsing.

Differential Revision: https://reviews.llvm.org/D48061

llvm-svn: 335704
  • Loading branch information
petrhosek committed Jun 27, 2018
1 parent a1efebc commit 7e5e3ed
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 15 deletions.
9 changes: 3 additions & 6 deletions clang/cmake/caches/Fuchsia-stage2.cmake
Expand Up @@ -46,7 +46,9 @@ foreach(target x86_64;aarch64)
set(BUILTINS_${target}-fuchsia_CMAKE_SYSROOT ${FUCHSIA_${target}_SYSROOT} CACHE PATH "")
endforeach()

set(LLVM_RUNTIME_TARGETS "default;x86_64-fuchsia;aarch64-fuchsia;x86_64-fuchsia-asan:x86_64-fuchsia;aarch64-fuchsia-asan:aarch64-fuchsia" CACHE STRING "")
set(LLVM_RUNTIME_TARGETS "default;x86_64-fuchsia;aarch64-fuchsia" CACHE STRING "")
set(LLVM_RUNTIME_SANITIZERS "Address" CACHE STRING "")
set(LLVM_RUNTIME_SANITIZER_Address_TARGETS "x86_64-fuchsia;aarch64-fuchsia" CACHE STRING "")

# Set the default target runtimes options.
if(NOT APPLE)
Expand Down Expand Up @@ -81,11 +83,6 @@ foreach(target x86_64;aarch64)
set(RUNTIMES_${target}-fuchsia_LIBCXXABI_USE_LLVM_UNWINDER ON CACHE BOOL "")
set(RUNTIMES_${target}-fuchsia_LIBCXX_USE_COMPILER_RT ON CACHE BOOL "")
set(RUNTIMES_${target}-fuchsia_SANITIZER_USE_COMPILER_RT ON CACHE BOOL "")

set(RUNTIMES_${target}-fuchsia-asan_LLVM_USE_SANITIZER Address CACHE STRING "")
set(RUNTIMES_${target}-fuchsia-asan_LLVM_RUNTIMES_PREFIX "${target}-fuchsia/" CACHE STRING "")
set(RUNTIMES_${target}-fuchsia-asan_LLVM_RUNTIMES_LIBDIR_SUFFIX "/asan" CACHE STRING "")
set(RUNTIMES_${target}-fuchsia-asan_LIBCXX_INSTALL_HEADERS OFF CACHE BOOL "")
endforeach()

# Setup toolchain.
Expand Down
36 changes: 27 additions & 9 deletions llvm/runtimes/CMakeLists.txt
Expand Up @@ -507,15 +507,7 @@ else() # if this is included from LLVM's CMake
endif()

foreach(name ${LLVM_RUNTIME_TARGETS})
set(target ${name})
string(REPLACE ":" ";" target_list ${target})
list(GET target_list 0 name)
list(LENGTH target_list target_list_len)
if(${target_list_len} GREATER 1)
list(GET target_list 1 target)
endif()

runtime_register_target(${name} ${target}
runtime_register_target(${name} ${name}
DEPS ${deps}
)

Expand All @@ -528,6 +520,32 @@ else() # if this is included from LLVM's CMake
add_dependencies(runtimes-test-depends runtimes-test-depends-${name})
endif()
endforeach()

foreach(sanitizer ${LLVM_RUNTIME_SANITIZERS})
if (sanitizer STREQUAL "Address")
set(sanitizer_name "asan")
elseif (sanitizer STREQUAL "Memory")
set(sanitizer_name "msan")
elseif (sanitizer STREQUAL "Thread")
set(sanitizer_name "tsan")
elseif (sanitizer STREQUAL "Undefined")
set(sanitizer_name "ubsan")
else()
message(FATAL_ERROR "Unsupported value of LLVM_RUNTIME_TARGET_SANITIZERS: ${sanitizers}")
endif()
foreach(name ${LLVM_RUNTIME_SANITIZER_${sanitizer}_TARGETS})
runtime_register_target(${name}-${sanitizer_name} ${name}
DEPS runtimes-${name}
CMAKE_ARGS -DLLVM_USE_SANITIZER=${sanitizer}
-DLLVM_RUNTIMES_PREFIX=${name}/
-DLLVM_RUNTIMES_LIBDIR_SUFFIX=/${sanitizer_name}
)
add_dependencies(runtimes runtimes-${name}-${sanitizer_name})
add_dependencies(runtimes-configure runtimes-${name}-${sanitizer_name}-configure)
add_dependencies(install-runtimes install-runtimes-${name}-${sanitizer_name})
add_dependencies(install-runtimes-stripped install-runtimes-${name}-${sanitizer_name}-stripped)
endforeach()
endforeach()
endif()

# TODO: This is a hack needed because the libcxx headers are copied into the
Expand Down

0 comments on commit 7e5e3ed

Please sign in to comment.