[llvm] fdfdd27 - [CMake] Use LLVM tools external project build where possible

Petr Hosek via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 7 13:43:58 PST 2020


Author: Petr Hosek
Date: 2020-02-07T13:43:30-08:00
New Revision: fdfdd275fd79504ee4ab5c78162713db986a72b1

URL: https://github.com/llvm/llvm-project/commit/fdfdd275fd79504ee4ab5c78162713db986a72b1
DIFF: https://github.com/llvm/llvm-project/commit/fdfdd275fd79504ee4ab5c78162713db986a72b1.diff

LOG: [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

Added: 
    

Modified: 
    llvm/cmake/modules/LLVMExternalProjectUtils.cmake

Removed: 
    


################################################################################
diff  --git a/llvm/cmake/modules/LLVMExternalProjectUtils.cmake b/llvm/cmake/modules/LLVMExternalProjectUtils.cmake
index e027c13f07e0..a69a4720b8b0 100644
--- a/llvm/cmake/modules/LLVMExternalProjectUtils.cmake
+++ b/llvm/cmake/modules/LLVMExternalProjectUtils.cmake
@@ -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)


        


More information about the llvm-commits mailing list