forked from OSchip/llvm-project
Teach mingw toolchain the msys2 mingw-w64 distribution C++ dirs.
llvm-svn: 241432
This commit is contained in:
parent
839a25a8a7
commit
763a38a80c
|
@ -45,6 +45,7 @@ MinGW::MinGW(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
|
||||||
llvm::sys::fs::directory_iterator MingW64Entry(LibDir + Arch, EC);
|
llvm::sys::fs::directory_iterator MingW64Entry(LibDir + Arch, EC);
|
||||||
if (!EC) {
|
if (!EC) {
|
||||||
GccLibDir = MingW64Entry->path();
|
GccLibDir = MingW64Entry->path();
|
||||||
|
Ver = llvm::sys::path::filename(GccLibDir);
|
||||||
} else {
|
} else {
|
||||||
// If mingw-w64 not found, try looking for mingw.org.
|
// If mingw-w64 not found, try looking for mingw.org.
|
||||||
Arch = "mingw32";
|
Arch = "mingw32";
|
||||||
|
@ -128,16 +129,21 @@ void MinGW::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs,
|
||||||
DriverArgs.hasArg(options::OPT_nostdincxx))
|
DriverArgs.hasArg(options::OPT_nostdincxx))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
llvm::SmallString<1024> IncludeDir;
|
// C++ includes may be found in several locations depending on distribution.
|
||||||
for (bool MingW64 : {true, false}) {
|
// mingw-w64 mingw-builds: $sysroot/i686-w64-mingw32/include/c++.
|
||||||
if (MingW64)
|
// mingw-w64 msys2: $sysroot/include/c++/4.9.2
|
||||||
IncludeDir = Base + Arch;
|
// mingw.org: GccLibDir/include/c++
|
||||||
else
|
llvm::SmallVector<llvm::SmallString<1024>, 3> CppIncludeBases;
|
||||||
IncludeDir = GccLibDir;
|
CppIncludeBases.emplace_back(Base);
|
||||||
llvm::sys::path::append(IncludeDir, "include", "c++");
|
llvm::sys::path::append(CppIncludeBases[0], Arch, "include", "c++");
|
||||||
addSystemInclude(DriverArgs, CC1Args, IncludeDir.str());
|
CppIncludeBases.emplace_back(Base);
|
||||||
IncludeDir += llvm::sys::path::get_separator();
|
llvm::sys::path::append(CppIncludeBases[1], "include", "c++", Ver);
|
||||||
addSystemInclude(DriverArgs, CC1Args, IncludeDir.str() + Arch);
|
CppIncludeBases.emplace_back(GccLibDir);
|
||||||
addSystemInclude(DriverArgs, CC1Args, IncludeDir.str() + "backward");
|
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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -552,6 +552,7 @@ protected:
|
||||||
private:
|
private:
|
||||||
std::string Base;
|
std::string Base;
|
||||||
std::string GccLibDir;
|
std::string GccLibDir;
|
||||||
|
std::string Ver;
|
||||||
std::string Arch;
|
std::string Arch;
|
||||||
mutable std::unique_ptr<tools::gcc::Preprocessor> Preprocessor;
|
mutable std::unique_ptr<tools::gcc::Preprocessor> Preprocessor;
|
||||||
mutable std::unique_ptr<tools::gcc::Compiler> Compiler;
|
mutable std::unique_ptr<tools::gcc::Compiler> Compiler;
|
||||||
|
|
Loading…
Reference in New Issue