r330244 - [MinGW] Look for a cross sysroot relative to the clang binary

Martin Storsjö via cfe-commits cfe-commits at lists.llvm.org
Wed Apr 18 09:17:25 PDT 2018


Hi Douglas,

Yes, I saw it - trying to look into it right now.

// Martin

On Wed, 18 Apr 2018, douglas.yung at sony.com wrote:

> Hi Martin,
>
> Your commit is causing a few test failures on the PS4 Windows bot, can you take a look?
>
> http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/builds/16544
>
> Failing Tests (13):
>    Clang :: CodeGenCXX/mingw-w64-exceptions.c
>    Clang :: Driver/clang-translation.c
>    Clang :: Driver/cxa-atexit.cpp
>    Clang :: Driver/default-image-name.c
>    Clang :: Driver/fsjlj-exceptions.c
>    Clang :: Driver/incremental-linker-compatible.c
>    Clang :: Driver/mingw-libgcc.c
>    Clang :: Driver/mingw-msvcrt.c
>    Clang :: Driver/no-integrated-as-win.c
>    Clang :: Driver/pic.c
>    Clang :: Driver/windows-pic.cpp
>    Clang :: Index/index-attrs.c
>    Clang :: Index/index-attrs.cpp
>
> Douglas Yung
>
>> -----Original Message-----
>> From: cfe-commits [mailto:cfe-commits-bounces at lists.llvm.org] On Behalf Of
>> Martin Storsjo via cfe-commits
>> Sent: Wednesday, April 18, 2018 1:47
>> To: cfe-commits at lists.llvm.org
>> Subject: r330244 - [MinGW] Look for a cross sysroot relative to the clang
>> binary
>>
>> Author: mstorsjo
>> Date: Wed Apr 18 01:47:26 2018
>> New Revision: 330244
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=330244&view=rev
>> Log:
>> [MinGW] Look for a cross sysroot relative to the clang binary
>>
>> If found, prefer this over looking for a similar gcc later in the
>> system path.
>>
>> Differential Revision: https://reviews.llvm.org/D45504
>>
>> Modified:
>>     cfe/trunk/lib/Driver/ToolChains/MinGW.cpp
>>     cfe/trunk/lib/Driver/ToolChains/MinGW.h
>>
>> Modified: cfe/trunk/lib/Driver/ToolChains/MinGW.cpp
>> URL: http://llvm.org/viewvc/llvm-
>> project/cfe/trunk/lib/Driver/ToolChains/MinGW.cpp?rev=330244&r1=330243&r2=3302
>> 44&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Driver/ToolChains/MinGW.cpp (original)
>> +++ cfe/trunk/lib/Driver/ToolChains/MinGW.cpp Wed Apr 18 01:47:26 2018
>> @@ -275,7 +275,8 @@ void toolchains::MinGW::findGccLibDir()
>>    Archs.emplace_back(getTriple().getArchName());
>>    Archs[0] += "-w64-mingw32";
>>    Archs.emplace_back("mingw32");
>> -  Arch = Archs[0].str();
>> +  if (Arch.empty())
>> +    Arch = Archs[0].str();
>>    // lib: Arch Linux, Ubuntu, Windows
>>    // lib64: openSUSE Linux
>>    for (StringRef CandidateLib : {"lib", "lib64"}) {
>> @@ -302,6 +303,24 @@ llvm::ErrorOr<std::string> toolchains::M
>>    return make_error_code(std::errc::no_such_file_or_directory);
>>  }
>>
>> +llvm::ErrorOr<std::string> toolchains::MinGW::findClangRelativeSysroot() {
>> +  llvm::SmallVector<llvm::SmallString<32>, 2> Subdirs;
>> +  Subdirs.emplace_back(getTriple().str());
>> +  Subdirs.emplace_back(getTriple().getArchName());
>> +  Subdirs[1] += "-w64-mingw32";
>> +  Twine ClangRoot =
>> +      llvm::sys::path::parent_path(getDriver().getInstalledDir()) +
>> +      llvm::sys::path::get_separator();
>> +  for (StringRef CandidateSubdir : Subdirs) {
>> +    Twine Subdir = ClangRoot + CandidateSubdir;
>> +    if (llvm::sys::fs::is_directory(Subdir)) {
>> +      Arch = CandidateSubdir;
>> +      return Subdir.str();
>> +    }
>> +  }
>> +  return make_error_code(std::errc::no_such_file_or_directory);
>> +}
>> +
>>  toolchains::MinGW::MinGW(const Driver &D, const llvm::Triple &Triple,
>>                           const ArgList &Args)
>>      : ToolChain(D, Triple, Args), CudaInstallation(D, Triple, Args) {
>> @@ -309,6 +328,10 @@ toolchains::MinGW::MinGW(const Driver &D
>>
>>    if (getDriver().SysRoot.size())
>>      Base = getDriver().SysRoot;
>> +  // Look for <clang-bin>/../<triplet>; if found, use <clang-bin>/.. as the
>> +  // base as it could still be a base for a gcc setup with libgcc.
>> +  else if (llvm::ErrorOr<std::string> TargetSubdir =
>> findClangRelativeSysroot())
>> +    Base = llvm::sys::path::parent_path(TargetSubdir.get());
>>    else if (llvm::ErrorOr<std::string> GPPName = findGcc())
>>      Base = llvm::sys::path::parent_path(
>>          llvm::sys::path::parent_path(GPPName.get()));
>>
>> Modified: cfe/trunk/lib/Driver/ToolChains/MinGW.h
>> URL: http://llvm.org/viewvc/llvm-
>> project/cfe/trunk/lib/Driver/ToolChains/MinGW.h?rev=330244&r1=330243&r2=330244
>> &view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Driver/ToolChains/MinGW.h (original)
>> +++ cfe/trunk/lib/Driver/ToolChains/MinGW.h Wed Apr 18 01:47:26 2018
>> @@ -96,6 +96,7 @@ private:
>>    mutable std::unique_ptr<tools::gcc::Compiler> Compiler;
>>    void findGccLibDir();
>>    llvm::ErrorOr<std::string> findGcc();
>> +  llvm::ErrorOr<std::string> findClangRelativeSysroot();
>>  };
>>
>>  } // end namespace toolchains
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>


More information about the cfe-commits mailing list