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

Reply via email to