Author: yrnkrn Date: Mon Jul 6 02:40:10 2015 New Revision: 241432 URL: http://llvm.org/viewvc/llvm-project?rev=241432&view=rev Log: Teach mingw toolchain the msys2 mingw-w64 distribution C++ dirs.
Modified: cfe/trunk/lib/Driver/MinGWToolChain.cpp cfe/trunk/lib/Driver/ToolChains.h Modified: cfe/trunk/lib/Driver/MinGWToolChain.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/MinGWToolChain.cpp?rev=241432&r1=241431&r2=241432&view=diff ============================================================================== --- cfe/trunk/lib/Driver/MinGWToolChain.cpp (original) +++ cfe/trunk/lib/Driver/MinGWToolChain.cpp Mon Jul 6 02:40:10 2015 @@ -45,6 +45,7 @@ MinGW::MinGW(const Driver &D, const llvm llvm::sys::fs::directory_iterator MingW64Entry(LibDir + Arch, EC); if (!EC) { GccLibDir = MingW64Entry->path(); + Ver = llvm::sys::path::filename(GccLibDir); } else { // If mingw-w64 not found, try looking for mingw.org. Arch = "mingw32"; @@ -128,16 +129,21 @@ void MinGW::AddClangCXXStdlibIncludeArgs DriverArgs.hasArg(options::OPT_nostdincxx)) return; - llvm::SmallString<1024> IncludeDir; - for (bool MingW64 : {true, false}) { - if (MingW64) - IncludeDir = Base + Arch; - else - IncludeDir = GccLibDir; - llvm::sys::path::append(IncludeDir, "include", "c++"); - addSystemInclude(DriverArgs, CC1Args, IncludeDir.str()); - IncludeDir += llvm::sys::path::get_separator(); - addSystemInclude(DriverArgs, CC1Args, IncludeDir.str() + Arch); - addSystemInclude(DriverArgs, CC1Args, IncludeDir.str() + "backward"); + // C++ includes may be found in several locations depending on distribution. + // mingw-w64 mingw-builds: $sysroot/i686-w64-mingw32/include/c++. + // mingw-w64 msys2: $sysroot/include/c++/4.9.2 + // mingw.org: GccLibDir/include/c++ + llvm::SmallVector<llvm::SmallString<1024>, 3> CppIncludeBases; + CppIncludeBases.emplace_back(Base); + llvm::sys::path::append(CppIncludeBases[0], Arch, "include", "c++"); + CppIncludeBases.emplace_back(Base); + llvm::sys::path::append(CppIncludeBases[1], "include", "c++", Ver); + CppIncludeBases.emplace_back(GccLibDir); + llvm::sys::path::append(CppIncludeBases[2], "include", "c++"); + for (auto &CppIncludeBase : CppIncludeBases) { + CppIncludeBase += llvm::sys::path::get_separator(); + addSystemInclude(DriverArgs, CC1Args, CppIncludeBase); + addSystemInclude(DriverArgs, CC1Args, CppIncludeBase + Arch); + addSystemInclude(DriverArgs, CC1Args, CppIncludeBase + "backward"); } } Modified: cfe/trunk/lib/Driver/ToolChains.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.h?rev=241432&r1=241431&r2=241432&view=diff ============================================================================== --- cfe/trunk/lib/Driver/ToolChains.h (original) +++ cfe/trunk/lib/Driver/ToolChains.h Mon Jul 6 02:40:10 2015 @@ -552,6 +552,7 @@ protected: private: std::string Base; std::string GccLibDir; + std::string Ver; std::string Arch; mutable std::unique_ptr<tools::gcc::Preprocessor> Preprocessor; mutable std::unique_ptr<tools::gcc::Compiler> Compiler; _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits