OK, there are sys-root include and library directories. Try the attached patch which adds both of them.
2015-07-13 8:57 GMT+03:00 İsmail Dönmez <ism...@donmez.ws>: > Hi, > > Please see the attached log files: > > try2.log.txt: Looks like /usr/include is in include path messing everything > > try3.log.txt: /usr/x86_64-w64-mingw32/sys-root/mingw/include must be > added as C include path > > try4.log.txt: Even after adding > /usr/x86_64-w64-mingw32/sys-root/mingw/include as include path it > doesn't find most libraries. > > > > On Sun, Jul 12, 2015 at 9:20 PM, Yaron Keren <yaron.ke...@gmail.com> > wrote: > > It should just work... on non-Windows the patch makes the mingw > toolchain in > > clang use /usr/lib64/gcc/$ARCH/$VER and /usr as the base paths instead of > > searching. This makes more sense on Linux then the Windows logic of > looking > > for gcc.exe. > > > > You can still override this with --sysroot but should not be required. > > > > > > > > > > 2015-07-12 21:12 GMT+03:00 İsmail Dönmez <ism...@donmez.ws>: > >> > >> Building it now, how shall I test it? With gcc in $PATH or with > --sysroot > >> ? > >> > >> On Sun, Jul 12, 2015 at 9:05 PM, Yaron Keren <yaron.ke...@gmail.com> > >> wrote: > >> > 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 <ism...@donmez.ws>: > >> >> > >> >> Hi, > >> >> > >> >> See the attached log. > >> >> > >> >> On Sun, Jul 12, 2015 at 6:15 PM, Yaron Keren <yaron.ke...@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 <ism...@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! > >> >> > > >> >> > > >> > > >> > > > > > >
Index: tools/clang/lib/Driver/MinGWToolChain.cpp =================================================================== --- tools/clang/lib/Driver/MinGWToolChain.cpp (revision 242033) +++ tools/clang/lib/Driver/MinGWToolChain.cpp (working copy) @@ -24,8 +24,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( @@ -33,8 +35,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. @@ -58,6 +66,9 @@ getFilePaths().push_back(GccLibDir); getFilePaths().push_back(Base + "lib"); getFilePaths().push_back(Base + Arch + "lib"); +#ifdef LLVM_ON_UNIX + getFilePaths().push_back(Base + Arch + "sys-root/mingw/lib"); +#endif } bool MinGW::IsIntegratedAssemblerDefault() const { return true; } @@ -117,6 +128,11 @@ llvm::sys::path::append(IncludeDir, "include"); addSystemInclude(DriverArgs, CC1Args, IncludeDir.c_str()); IncludeDir += "-fixed"; +#ifdef LLVM_ON_UNIX + // For OpenSUSE. + addSystemInclude(DriverArgs, CC1Args, + " /usr/x86_64-w64-mingw32/sys-root/mingw/include"); +#endif addSystemInclude(DriverArgs, CC1Args, IncludeDir.c_str()); addSystemInclude(DriverArgs, CC1Args, Base + Arch + "include"); addSystemInclude(DriverArgs, CC1Args, Base + "include"); @@ -129,9 +145,15 @@ return; // C++ includes may be found in several locations depending on distribution. + // Windows + // ------- // mingw-w64 mingw-builds: $sysroot/i686-w64-mingw32/include/c++. // mingw-w64 msys2: $sysroot/include/c++/4.9.2 // mingw.org: GccLibDir/include/c++ + // + // Linux + // ----- + // OpenSUSE: GccLibDir/include/c++ llvm::SmallVector<llvm::SmallString<1024>, 3> CppIncludeBases; CppIncludeBases.emplace_back(Base); llvm::sys::path::append(CppIncludeBases[0], Arch, "include", "c++");
_______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits