DaveBartolomeo updated this revision to Diff 65633. DaveBartolomeo added a comment. Herald added a subscriber: samparker.
Updated the selection algorithm based on review feedback. Now, if clang.exe itself is x64-hosted, we'll look for the x64-hosted MSVC toolset if it exists. If clang.exe is not x64-hosted, or if the x64-hosted MSVC toolset is not found, we fall back to x86-hosted MSVC toolset. https://reviews.llvm.org/D22426 Files: lib/Driver/MSVCToolChain.cpp Index: lib/Driver/MSVCToolChain.cpp =================================================================== --- lib/Driver/MSVCToolChain.cpp +++ lib/Driver/MSVCToolChain.cpp @@ -454,19 +454,33 @@ if (BinDir.empty()) return false; + SmallString<128> X64BinDir = BinDir; switch (getArch()) { case llvm::Triple::x86: + llvm::sys::path::append(X64BinDir, "amd64_x86"); break; case llvm::Triple::x86_64: - llvm::sys::path::append(BinDir, "amd64"); + llvm::sys::path::append(BinDir, "x86_amd64"); + llvm::sys::path::append(X64BinDir, "amd64"); break; case llvm::Triple::arm: - llvm::sys::path::append(BinDir, "arm"); + llvm::sys::path::append(BinDir, "x86_arm"); + llvm::sys::path::append(X64BinDir, "amd64_arm"); break; default: // Whatever this is, Visual Studio doesn't have a toolchain for it. return false; } + +#if defined(_M_X64) + // If running x64-hosted Clang, choose the x64-hosted version of the MSVC + // toolset, if it exists. + if (llvm::sys::fs::exists(X64BinDir)) { + path = X64BinDir.str(); + return true; + } +#endif + path = BinDir.str(); return true; }
Index: lib/Driver/MSVCToolChain.cpp =================================================================== --- lib/Driver/MSVCToolChain.cpp +++ lib/Driver/MSVCToolChain.cpp @@ -454,19 +454,33 @@ if (BinDir.empty()) return false; + SmallString<128> X64BinDir = BinDir; switch (getArch()) { case llvm::Triple::x86: + llvm::sys::path::append(X64BinDir, "amd64_x86"); break; case llvm::Triple::x86_64: - llvm::sys::path::append(BinDir, "amd64"); + llvm::sys::path::append(BinDir, "x86_amd64"); + llvm::sys::path::append(X64BinDir, "amd64"); break; case llvm::Triple::arm: - llvm::sys::path::append(BinDir, "arm"); + llvm::sys::path::append(BinDir, "x86_arm"); + llvm::sys::path::append(X64BinDir, "amd64_arm"); break; default: // Whatever this is, Visual Studio doesn't have a toolchain for it. return false; } + +#if defined(_M_X64) + // If running x64-hosted Clang, choose the x64-hosted version of the MSVC + // toolset, if it exists. + if (llvm::sys::fs::exists(X64BinDir)) { + path = X64BinDir.str(); + return true; + } +#endif + path = BinDir.str(); return true; }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits