Index: llvm/cmake/modules/LLVMExternalProjectUtils.cmake =================================================================== --- llvm/cmake/modules/LLVMExternalProjectUtils.cmake +++ llvm/cmake/modules/LLVMExternalProjectUtils.cmake @@ -46,9 +46,19 @@ ${ARGN}) canonicalize_tool_name(${name} nameCanon) + if (MINGW) + set(use_mingw_toolchain_tools ON) + endif() + foreach(arg ${ARG_CMAKE_ARGS}) if(arg MATCHES "^-DCMAKE_SYSTEM_NAME=") string(REGEX REPLACE "^-DCMAKE_SYSTEM_NAME=(.*)$" "\\1" _cmake_system_name "${arg}") + elseif (arg MATCHES "^-DCMAKE_(C|ASM|CXX)_COMPILER_TARGET=(.*)-windows-(gnu|msvc).*$") + if (${CMAKE_MATCH_3} STREQUAL "msvc") + set(use_mingw_toolchain_tools OFF) + else() + set(use_mingw_toolchain_tools ON) + endif () endif() endforeach() @@ -65,7 +75,7 @@ list(APPEND ARG_TOOLCHAIN_TOOLS 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) + elseif(_cmake_system_name STREQUAL Windows AND NOT use_mingw_toolchain_tools) list(APPEND ARG_TOOLCHAIN_TOOLS llvm-lib) else() # TODO: These tools don't fully support Mach-O format yet. @@ -138,7 +148,7 @@ if(ARG_USE_TOOLCHAIN AND NOT CMAKE_CROSSCOMPILING) if(CLANG_IN_TOOLCHAIN) - if(_cmake_system_name STREQUAL Windows) + if(_cmake_system_name STREQUAL Windows AND NOT use_mingw_toolchain_tools) set(compiler_args -DCMAKE_C_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang-cl${CMAKE_EXECUTABLE_SUFFIX} -DCMAKE_CXX_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang-cl${CMAKE_EXECUTABLE_SUFFIX} -DCMAKE_ASM_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang-cl${CMAKE_EXECUTABLE_SUFFIX}) @@ -149,14 +159,14 @@ endif() endif() if(lld IN_LIST TOOLCHAIN_TOOLS) - if(_cmake_system_name STREQUAL Windows) + if(_cmake_system_name STREQUAL Windows AND NOT use_mingw_toolchain_tools) list(APPEND compiler_args -DCMAKE_LINKER=${LLVM_RUNTIME_OUTPUT_INTDIR}/lld-link${CMAKE_EXECUTABLE_SUFFIX}) elseif(NOT _cmake_system_name STREQUAL Darwin) list(APPEND compiler_args -DCMAKE_LINKER=${LLVM_RUNTIME_OUTPUT_INTDIR}/ld.lld${CMAKE_EXECUTABLE_SUFFIX}) endif() endif() if(llvm-ar IN_LIST TOOLCHAIN_TOOLS) - if(_cmake_system_name STREQUAL Windows) + if(_cmake_system_name STREQUAL Windows AND NOT use_mingw_toolchain_tools) 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})