r241432 - Teach mingw toolchain the msys2 mingw-w64 distribution C++ dirs.

Yaron Keren yaron.keren at gmail.com
Sun Jul 12 11:05:50 PDT 2015


Wow, mingw-w64 distributions has endless variations of include and library
locations.
On base of the current SVN (without any previous patches I sent), try the
attached patch.


2015-07-12 18:33 GMT+03:00 İsmail Dönmez <ismail at donmez.ws>:

> Hi,
>
> See the attached log.
>
> On Sun, Jul 12, 2015 at 6:15 PM, Yaron Keren <yaron.keren at gmail.com>
> wrote:
> > On Ubuntu 14.04 it's not the same location, it's in /usr/lib/gcc and not
> > /usr/lib64/gcc
> >
> > #include <...> search starts here:
> >  /usr/include/c++/4.8
> >  /usr/include/c++/4.8/x86_64-w64-mingw32
> >  /usr/include/c++/4.8/backward
> >  /usr/lib/gcc/x86_64-w64-mingw32/4.8/include
> >  /usr/lib/gcc/x86_64-w64-mingw32/4.8/include-fixed
> >
> /usr/lib/gcc/x86_64-w64-mingw32/4.8/../../../../x86_64-w64-mingw32/include
> > End of search list.
> > GNU C++ (GCC) version 4.8.2 (x86_64-w64-mingw32)
> >
> > Can you send the full output of
> >
> > /usr/bin/x86_64-w64-mingw32-g++ -c -v a.cpp
> >
> > where a.cpp is some source file?
> >
> >
> >
> > 2015-07-12 16:47 GMT+03:00 İsmail Dönmez <ismail at donmez.ws>:
> >>
> >> [snip]
> >>
> >> > P.S: The problem on Cygwin side seems to be that my toolchain is
> >> > missing libgcc_s.a and this seems to be working fine since I build the
> >> > whole toolchain as static. Do you think its reasonable to
> >> > conditionally add -lgcc_s depending on it exists or not?
> >>
> >> Honestly though this is non-standard and not worth adding code for.
> >> The situation on Linux is still a regression though :/
> >>
> >> Thanks a lot!
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150712/275a5a2e/attachment.html>
-------------- next part --------------
Index: tools/clang/lib/Driver/MinGWToolChain.cpp
===================================================================
--- tools/clang/lib/Driver/MinGWToolChain.cpp	(revision 241540)
+++ tools/clang/lib/Driver/MinGWToolChain.cpp	(working copy)
@@ -25,8 +25,10 @@
     : ToolChain(D, Triple, Args) {
   getProgramPaths().push_back(getDriver().getInstalledDir());
 
+  llvm::SmallString<1024> LibDir;
   if (getDriver().SysRoot.size())
     Base = getDriver().SysRoot;
+#ifdef LLVM_ON_WIN32
   else if (llvm::ErrorOr<std::string> GPPName =
                llvm::sys::findProgramByName("gcc"))
     Base = llvm::sys::path::parent_path(
@@ -34,8 +36,14 @@
   else
     Base = llvm::sys::path::parent_path(getDriver().getInstalledDir());
   Base += llvm::sys::path::get_separator();
-  llvm::SmallString<1024> LibDir(Base);
+  LibDir = Base;
   llvm::sys::path::append(LibDir, "lib", "gcc");
+#else
+  else
+    Base = "/usr/";
+  LibDir = Base;
+  llvm::sys::path::append(LibDir, "lib64", "gcc");
+#endif
   LibDir += llvm::sys::path::get_separator();
 
   // First look for mingw-w64.
@@ -133,6 +141,7 @@
   // mingw-w64 mingw-builds: $sysroot/i686-w64-mingw32/include/c++.
   // mingw-w64 msys2:        $sysroot/include/c++/4.9.2
   // mingw.org:              GccLibDir/include/c++
+  // OpenSUSE:               GccLibDir/include/c++
   llvm::SmallVector<llvm::SmallString<1024>, 3> CppIncludeBases;
   CppIncludeBases.emplace_back(Base);
   llvm::sys::path::append(CppIncludeBases[0], Arch, "include", "c++");


More information about the cfe-commits mailing list