Bug 1412952 - Loosen clang's MSVC detection to accept our automation's fake paths. r=froydnj

In a proper VS install, the path to cl.exe looks like:
...\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\cl.exe

In our automation, the path is just:
...\VC\bin\HostX64\x64\cl.exe

Clang tries to do some sanity-checking to make sure that the cl.exe it finds is the Microsoft compiler and not some other program. But the checks are a little too strict for us, so just look for "bin\Host*\*\cl.exe".
This commit is contained in:
David Major 2017-11-03 12:29:58 -04:00
parent a70dbf7123
commit b7a86dd2b5
3 changed files with 30 additions and 2 deletions

View File

@ -10,5 +10,8 @@
"libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/trunk",
"python_path": "c:/mozilla-build/python/python.exe",
"cc": "cl.exe",
"cxx": "cl.exe"
"cxx": "cl.exe",
"patches": [
"build/src/build/build-clang/loosen-msvc-detection.patch"
]
}

View File

@ -11,5 +11,8 @@
"python_path": "c:/mozilla-build/python/python.exe",
"cc": "cl.exe",
"cxx": "cl.exe",
"ml": "ml64.exe"
"ml": "ml64.exe",
"patches": [
"build/src/build/build-clang/loosen-msvc-detection.patch"
]
}

View File

@ -0,0 +1,22 @@
In a proper VS install, the path to cl.exe looks like:
...\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\cl.exe
In our automation, the path is just:
...\VC\bin\HostX64\x64\cl.exe
Clang tries to do some sanity-checking to make sure that the cl.exe it finds is the Microsoft compiler and not some other program. But the checks are a little too strict for us, so just look for "bin\Host*\*\cl.exe".
diff --git a/clang/lib/Driver/ToolChains/MSVC.cpp b/clang/lib/Driver/ToolChains/MSVC.cpp
index 7978a6941cb..0159e89fa27 100644
--- a/clang/lib/Driver/ToolChains/MSVC.cpp
+++ b/clang/lib/Driver/ToolChains/MSVC.cpp
@@ -152,8 +152,7 @@ static bool findVCToolChainViaEnvironment(std::string &Path,
// path components with these prefixes when walking backwards through
// the path.
// Note: empty strings match anything.
- llvm::StringRef ExpectedPrefixes[] = {"", "Host", "bin", "",
- "MSVC", "Tools", "VC"};
+ llvm::StringRef ExpectedPrefixes[] = {"", "Host", "bin"};
auto It = llvm::sys::path::rbegin(PathEntry);
auto End = llvm::sys::path::rend(PathEntry);