Re: [PATCH] D15006: Driver: Better detection of mingw-gcc
ismail added a comment. Reverted in r257468. http://reviews.llvm.org/D15006 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D15006: Driver: Better detection of mingw-gcc
yaron.keren accepted this revision. yaron.keren added a comment. This revision is now accepted and ready to land. LGTM with some tests cases. http://reviews.llvm.org/D15006 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D15006: Driver: Better detection of mingw-gcc
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 Preprocessor; mutable std::unique_ptr Compiler; void findGccLibDir(); + llvm::ErrorOr 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 MinGW::findGcc() { + 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)) + 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 GPPName = - llvm::sys::findProgramByName("gcc")) +Base = getDriver().SysRoot; + else if (llvm::ErrorOr 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(); Index: lib/Driver/ToolChains.h === --- lib/Driver/ToolChains.h +++ lib/Driver/ToolChains.h @@ -662,6 +662,7 @@ mutable std::unique_ptr Preprocessor; mutable std::unique_ptr Compiler; void findGccLibDir(); + llvm::ErrorOr 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 MinGW::findGcc() { + 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)) + 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 GPPName = - llvm::sys::findProgramByName("gcc")) +Base = getDriver().SysRoot; + else if (llvm::ErrorOr 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(); ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D15006: Driver: Better detection of mingw-gcc
martell added a comment. hi ismail, I will tidy up for review closer towards the weekend where i can work on out of work stuff http://reviews.llvm.org/D15006 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D15006: Driver: Better detection of mingw-gcc
ismail added a comment. Martell, any update on this? http://reviews.llvm.org/D15006 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D15006: Driver: Better detection of mingw-gcc
yaron.keren added a comment. findGccDir() can return llvm::ErrorOr and then all Base assignments happen at the same if-elseif-else: if (getDriver().SysRoot.size()) Base = getDriver().SysRoot; else if (llvm::ErrorOr GPPName = findGccDir()) Base = llvm::sys::path::parent_path( llvm::sys::path::parent_path(GPPName.get())); else Base = llvm::sys::path::parent_path(getDriver().getInstalledDir()); Then, findGccDir() is actually findGcc(). About tests, adding empty script "gcc" with x set in the directory structure, and adding the directory to the path at start of the LIT test may work. It will fail on Windows so try this with a new test file so we can XFAIL:windows only the new one if required. http://reviews.llvm.org/D15006 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D15006: Driver: Better detection of mingw-gcc
ismail added a comment. Tested on openSUSE and it works. Thanks! http://reviews.llvm.org/D15006 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D15006: Driver: Better detection of mingw-gcc
martell updated this revision to Diff 41209. martell added a comment. Updated to reflect feedback I'm not too sure what todo for testcases on this one because they already exist for the most part. I ran the test suite and they all pass. I would have to create a mingw32-gcc and {armv7|i686|x86_64}-w64-mingw32-gcc and chmod+x for the testcase. Is that safe ? 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 @@ -661,6 +661,7 @@ std::string Arch; mutable std::unique_ptr Preprocessor; mutable std::unique_ptr Compiler; + void findGccDir(); void findGccLibDir(); }; 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(); }; 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()); ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D15006: Driver: Better detection of mingw-gcc
yaron.keren added a comment. This always searches for something-gcc and then discards the result if sysroot was provided, which is a waste. Move the searching to a helper function and then it can be done only if sysroot was not provided, as it is now. The break is needed to avoid looking for mingw32-gcc after x86_64-w64-mingw32-gcc was already found. It's a wasted search. http://reviews.llvm.org/D15006 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D15006: Driver: Better detection of mingw-gcc
martell added a comment. @ismail can you test this for your setup please? :) http://reviews.llvm.org/D15006 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D15006: Driver: Better detection of mingw-gcc
martell updated the summary for this revision. martell updated this revision to Diff 41208. martell added a comment. Removed the break that I didn't think was needed Can be re-added ?? Will added testcases http://reviews.llvm.org/D15006 Files: lib/Driver/MinGWToolChain.cpp Index: lib/Driver/MinGWToolChain.cpp === --- lib/Driver/MinGWToolChain.cpp +++ lib/Driver/MinGWToolChain.cpp @@ -66,15 +66,20 @@ : ToolChain(D, Triple, Args) { getProgramPaths().push_back(getDriver().getInstalledDir()); - // On Windows if there is no sysroot we search for gcc on the PATH. + 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())); + 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; + if (!Base.size()) Base = llvm::sys::path::parent_path(getDriver().getInstalledDir()); Index: lib/Driver/MinGWToolChain.cpp === --- lib/Driver/MinGWToolChain.cpp +++ lib/Driver/MinGWToolChain.cpp @@ -66,15 +66,20 @@ : ToolChain(D, Triple, Args) { getProgramPaths().push_back(getDriver().getInstalledDir()); - // On Windows if there is no sysroot we search for gcc on the PATH. + 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())); + 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; + if (!Base.size()) Base = llvm::sys::path::parent_path(getDriver().getInstalledDir()); ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits