[PATCH] D15006: Driver: Better detection of mingw-gcc
Martell Malone via cfe-commits
cfe-commits at lists.llvm.org
Tue Dec 15 15:55:08 PST 2015
martell updated this revision to Diff 42933.
martell added a comment.
Sorry I was a bit slow getting around to this.
Will do testcases if Yaron thinks this is okay
http://reviews.llvm.org/D15006
Files:
lib/Driver/MinGWToolChain.cpp
lib/Driver/ToolChains.h
Index: lib/Driver/ToolChains.h
===================================================================
--- lib/Driver/ToolChains.h
+++ lib/Driver/ToolChains.h
@@ -662,6 +662,7 @@
mutable std::unique_ptr<tools::gcc::Preprocessor> Preprocessor;
mutable std::unique_ptr<tools::gcc::Compiler> Compiler;
void findGccLibDir();
+ llvm::ErrorOr<std::string> findGcc();
};
class LLVM_LIBRARY_VISIBILITY OpenBSD : public Generic_ELF {
Index: lib/Driver/MinGWToolChain.cpp
===================================================================
--- lib/Driver/MinGWToolChain.cpp
+++ lib/Driver/MinGWToolChain.cpp
@@ -62,20 +62,27 @@
}
}
+llvm::ErrorOr<std::string> MinGW::findGcc() {
+ llvm::SmallVector<llvm::SmallString<32>, 2> Gccs;
+ Gccs.emplace_back(getTriple().getArchName());
+ Gccs[0] += "-w64-mingw32-gcc";
+ Gccs.emplace_back("mingw32-gcc");
+ for (StringRef CandidateGcc : Gccs)
+ if (llvm::ErrorOr<std::string> GPPName = llvm::sys::findProgramByName(CandidateGcc))
+ return GPPName;
+ return make_error_code(std::errc::no_such_file_or_directory);
+}
+
MinGW::MinGW(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
: ToolChain(D, Triple, Args) {
getProgramPaths().push_back(getDriver().getInstalledDir());
- // On Windows if there is no sysroot we search for gcc on the PATH.
if (getDriver().SysRoot.size())
- Base = getDriver().SysRoot;
-#ifdef LLVM_ON_WIN32
- else if (llvm::ErrorOr<std::string> GPPName =
- llvm::sys::findProgramByName("gcc"))
+ Base = getDriver().SysRoot;
+ else if (llvm::ErrorOr<std::string> GPPName = findGcc())
Base = llvm::sys::path::parent_path(
llvm::sys::path::parent_path(GPPName.get()));
-#endif
- if (!Base.size())
+ else
Base = llvm::sys::path::parent_path(getDriver().getInstalledDir());
Base += llvm::sys::path::get_separator();
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D15006.42933.patch
Type: text/x-patch
Size: 1869 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20151215/53404b5d/attachment.bin>
More information about the cfe-commits
mailing list