From ee7ee71f40e904a8380d6439ac4741304b4a2dfd Mon Sep 17 00:00:00 2001 From: Gwen Mittertreiner Date: Wed, 23 Sep 2020 16:20:06 -0700 Subject: [PATCH] Explicitly specify CMAKE_AR in WinMsvc.cmake 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 | 8 +++++++- llvm/cmake/platforms/WinMsvc.cmake | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/llvm/cmake/modules/LLVMExternalProjectUtils.cmake b/llvm/cmake/modules/LLVMExternalProjectUtils.cmake index db3a536b0c249..c01a6dd71d9f3 100644 --- a/llvm/cmake/modules/LLVMExternalProjectUtils.cmake +++ b/llvm/cmake/modules/LLVMExternalProjectUtils.cmake @@ -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}) diff --git a/llvm/cmake/platforms/WinMsvc.cmake b/llvm/cmake/platforms/WinMsvc.cmake index 6b78b069dbf92..4a6bef2e01cc3 100644 --- a/llvm/cmake/platforms/WinMsvc.cmake +++ b/llvm/cmake/platforms/WinMsvc.cmake @@ -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