From: Martell Malone Date: Tue, 18 Apr 2017 14:27:36 +0000 (+0000) Subject: Driver: Better detection of mingw-gcc X-Git-Tag: llvmorg-5.0.0-rc1~7454 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f9799c70a3dbb58b68b45640383ca2fe3d70caf6;p=platform%2Fupstream%2Fllvm.git Driver: Better detection of mingw-gcc Stop blindly searching for "gcc.exe" on windows. Stop assuming "/usr" on unix, fixes cross compiling. Reviewers: mati865, yaron.keren Subscribers: ismail, rnk Differential revision: https://reviews.llvm.org/D15005 llvm-svn: 300555 --- diff --git a/clang/lib/Driver/ToolChains/MinGW.cpp b/clang/lib/Driver/ToolChains/MinGW.cpp index ca5bf06..7550bab 100644 --- a/clang/lib/Driver/ToolChains/MinGW.cpp +++ b/clang/lib/Driver/ToolChains/MinGW.cpp @@ -285,28 +285,30 @@ void toolchains::MinGW::findGccLibDir() { } } +llvm::ErrorOr toolchains::MinGW::findGcc() { + llvm::SmallVector, 2> Gccs; + Gccs.emplace_back(getTriple().getArchName()); + Gccs[0] += "-w64-mingw32-gcc"; + Gccs.emplace_back("mingw32-gcc"); + // Please do not add "gcc" here + for (StringRef CandidateGcc : Gccs) + if (llvm::ErrorOr GPPName = llvm::sys::findProgramByName(CandidateGcc)) + return GPPName; + return make_error_code(std::errc::no_such_file_or_directory); +} + toolchains::MinGW::MinGW(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) : ToolChain(D, Triple, Args), CudaInstallation(D, Triple, Args) { getProgramPaths().push_back(getDriver().getInstalledDir()); -// In Windows there aren't any standard install locations, we search -// for gcc on the PATH. In Linux the base is always /usr. -#ifdef LLVM_ON_WIN32 if (getDriver().SysRoot.size()) Base = getDriver().SysRoot; - else if (llvm::ErrorOr GPPName = - llvm::sys::findProgramByName("gcc")) + else if (llvm::ErrorOr GPPName = findGcc()) Base = llvm::sys::path::parent_path( llvm::sys::path::parent_path(GPPName.get())); else Base = llvm::sys::path::parent_path(getDriver().getInstalledDir()); -#else - if (getDriver().SysRoot.size()) - Base = getDriver().SysRoot; - else - Base = "/usr"; -#endif Base += llvm::sys::path::get_separator(); findGccLibDir(); diff --git a/clang/lib/Driver/ToolChains/MinGW.h b/clang/lib/Driver/ToolChains/MinGW.h index 9d2468f..cf1628a 100644 --- a/clang/lib/Driver/ToolChains/MinGW.h +++ b/clang/lib/Driver/ToolChains/MinGW.h @@ -93,6 +93,7 @@ private: mutable std::unique_ptr Preprocessor; mutable std::unique_ptr Compiler; void findGccLibDir(); + llvm::ErrorOr findGcc(); }; } // end namespace toolchains