Commit fdfdd275 authored by Petr Hosek's avatar Petr Hosek
Browse files

[CMake] Use LLVM tools external project build where possible

This reduces the reliance on host tools and makes the build more
hermetic. Some of the runtimes already assume that certain tools are
always available, for example libc++ and libc++abi archive merging
relies on ar to extract files out of the archive, even on Darwin.

Differential Revision: https://reviews.llvm.org/D74107
parent 9c1c825b
Loading
Loading
Loading
Loading
+11 −9
Original line number Diff line number Diff line
@@ -45,10 +45,18 @@ function(llvm_ExternalProject_Add name source_dir)
    "CMAKE_ARGS;TOOLCHAIN_TOOLS;RUNTIME_LIBRARIES;DEPENDS;EXTRA_TARGETS;PASSTHROUGH_PREFIXES;STRIP_TOOL"
    ${ARGN})
  canonicalize_tool_name(${name} nameCanon)

  foreach(arg ${ARG_CMAKE_ARGS})
    if(arg MATCHES "^-DCMAKE_SYSTEM_NAME=")
      string(REGEX REPLACE "^-DCMAKE_SYSTEM_NAME=(.*)$" "\\1" _cmake_system_name "${arg}")
    endif()
  endforeach()

  if(NOT ARG_TOOLCHAIN_TOOLS)
    set(ARG_TOOLCHAIN_TOOLS clang lld)
    if(NOT APPLE AND NOT WIN32)
      list(APPEND ARG_TOOLCHAIN_TOOLS llvm-ar llvm-lipo llvm-ranlib llvm-nm llvm-objcopy llvm-objdump llvm-strip)
    set(ARG_TOOLCHAIN_TOOLS clang lld llvm-ar llvm-lipo llvm-ranlib llvm-nm llvm-objdump)
    if(NOT _cmake_system_name STREQUAL Darwin)
      # TODO: These tools don't fully support Mach-O format yet.
      list(APPEND ARG_TOOLCHAIN_TOOLS llvm-objcopy llvm-strip)
    endif()
  endif()
  foreach(tool ${ARG_TOOLCHAIN_TOOLS})
@@ -104,12 +112,6 @@ function(llvm_ExternalProject_Add name source_dir)
    endforeach()
  endforeach()

  foreach(arg ${ARG_CMAKE_ARGS})
    if(arg MATCHES "^-DCMAKE_SYSTEM_NAME=")
      string(REGEX REPLACE "^-DCMAKE_SYSTEM_NAME=(.*)$" "\\1" _cmake_system_name "${arg}")
    endif()
  endforeach()

  if(ARG_USE_TOOLCHAIN AND NOT CMAKE_CROSSCOMPILING)
    if(CLANG_IN_TOOLCHAIN)
      if(_cmake_system_name STREQUAL Windows)