Index: lib/Driver/MinGWToolChain.cpp =================================================================== --- lib/Driver/MinGWToolChain.cpp +++ lib/Driver/MinGWToolChain.cpp @@ -62,19 +62,29 @@ } } +void MinGW::findGccDir() { + llvm::SmallVector, 2> Gccs; + Gccs.emplace_back(getTriple().getArchName()); + Gccs[0] += "-w64-mingw32-gcc"; + Gccs.emplace_back("mingw32-gcc"); + for (StringRef CandidateGcc : Gccs) + if (llvm::ErrorOr GPPName = + llvm::sys::findProgramByName(CandidateGcc)) { + Base = llvm::sys::path::parent_path( + llvm::sys::path::parent_path(GPPName.get())); + return; + } +} + 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 GPPName = - llvm::sys::findProgramByName("gcc")) - Base = llvm::sys::path::parent_path( - llvm::sys::path::parent_path(GPPName.get())); -#endif + Base = getDriver().SysRoot; + else + findGccDir(); + if (!Base.size()) Base = llvm::sys::path::parent_path(getDriver().getInstalledDir()); Index: lib/Driver/ToolChains.h =================================================================== --- lib/Driver/ToolChains.h +++ lib/Driver/ToolChains.h @@ -661,6 +661,7 @@ std::string Arch; mutable std::unique_ptr Preprocessor; mutable std::unique_ptr Compiler; + void findGccDir(); void findGccLibDir(); };