Explicitly specify CMAKE_AR in WinMsvc.cmake
authorGwen Mittertreiner <gwenm@fb.com>
Wed, 23 Sep 2020 23:20:06 +0000 (16:20 -0700)
committerShoaib Meenai <smeenai@fb.com>
Thu, 24 Sep 2020 01:05:29 +0000 (18:05 -0700)
As of cmake 3.18, cmake changes how it searches for compilers for
Windows (see
https://gitlab.kitware.com/cmake/cmake/-/commit/55196a1440e26917d40e6a7a3eb8d9fb323fa657)
and now finds llvm-ar instead of llvm-lib as CMAKE_AR. This explicitly
specifies CMAKE_AR as llvm-lib so the correct program is found.

Reviewed By: smeenai

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

llvm/cmake/modules/LLVMExternalProjectUtils.cmake
llvm/cmake/platforms/WinMsvc.cmake

index db3a536..c01a6dd 100644 (file)
@@ -56,6 +56,8 @@ function(llvm_ExternalProject_Add name source_dir)
     set(ARG_TOOLCHAIN_TOOLS clang lld llvm-ar llvm-ranlib llvm-nm llvm-objdump)
     if(_cmake_system_name STREQUAL Darwin)
       list(APPEND ARG_TOOLCHAIN_TOOLS llvm-libtool-darwin llvm-lipo)
+    elseif(_cmake_system_name STREQUAL Windows)
+      list(APPEND ARG_TOOLCHAIN_TOOLS llvm-lib)
     else()
       # TODO: These tools don't fully support Mach-O format yet.
       list(APPEND ARG_TOOLCHAIN_TOOLS llvm-objcopy llvm-strip)
@@ -144,7 +146,11 @@ function(llvm_ExternalProject_Add name source_dir)
       endif()
     endif()
     if(llvm-ar IN_LIST TOOLCHAIN_TOOLS)
-      list(APPEND compiler_args -DCMAKE_AR=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-ar${CMAKE_EXECUTABLE_SUFFIX})
+      if(_cmake_system_name STREQUAL Windows)
+        list(APPEND compiler_args -DCMAKE_AR=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-lib${CMAKE_EXECUTABLE_SUFFIX})
+      else()
+        list(APPEND compiler_args -DCMAKE_AR=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-ar${CMAKE_EXECUTABLE_SUFFIX})
+      endif()
     endif()
     if(llvm-libtool-darwin IN_LIST TOOLCHAIN_TOOLS)
       list(APPEND compiler_args -DCMAKE_LIBTOOL=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-libtool-darwin${CMAKE_EXECUTABLE_SUFFIX})
index 6b78b06..4a6bef2 100644 (file)
@@ -232,6 +232,7 @@ endif()
 set(CMAKE_C_COMPILER "${LLVM_NATIVE_TOOLCHAIN}/bin/clang-cl" CACHE FILEPATH "")
 set(CMAKE_CXX_COMPILER "${LLVM_NATIVE_TOOLCHAIN}/bin/clang-cl" CACHE FILEPATH "")
 set(CMAKE_LINKER "${LLVM_NATIVE_TOOLCHAIN}/bin/lld-link" CACHE FILEPATH "")
+set(CMAKE_AR "${LLVM_NATIVE_TOOLCHAIN}/bin/llvm-lib" CACHE FILEPATH "")
 
 # Even though we're cross-compiling, we need some native tools (e.g. llvm-tblgen), and those
 # native tools have to be built before we can start doing the cross-build.  LLVM supports