1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
- index e56812145e6d..b02c228d40af 100644
- --- a/clang/lib/Driver/ToolChains/Gnu.cpp
- +++ b/clang/lib/Driver/ToolChains/Gnu.cpp
- @@ -1650,18 +1650,29 @@ static void findRISCVMultilibs(const Driver &D,
- return findRISCVBareMetalMultilibs(D, TargetTriple, Path, Args, Result);
-
- FilterNonExistent NonExistent(Path, "/crtbegin.o", D.getVFS());
- - Multilib Ilp32 = makeMultilib("lib32/ilp32").flag("+m32").flag("+mabi=ilp32");
- - Multilib Ilp32f =
- + MultilibSet RISCVMultilibs;
- +
- + if (TargetTriple.getVendor() == llvm::Triple::OpenEmbedded) {
- + Multilib OpenEmbeddedIlp32d = makeMultilib("").flag("+m32").flag("+mabi=ilp32d");
- + Multilib OpenEmbeddedLp64d = makeMultilib("").flag("+m64").flag("+mabi=lp64d");
- + RISCVMultilibs =
- + MultilibSet()
- + .Either({OpenEmbeddedIlp32d, OpenEmbeddedLp64d})
- + .FilterOut(NonExistent);
- + } else {
- + Multilib Ilp32 = makeMultilib("lib32/ilp32").flag("+m32").flag("+mabi=ilp32");
- + Multilib Ilp32f =
- makeMultilib("lib32/ilp32f").flag("+m32").flag("+mabi=ilp32f");
- - Multilib Ilp32d =
- + Multilib Ilp32d =
- makeMultilib("lib32/ilp32d").flag("+m32").flag("+mabi=ilp32d");
- - Multilib Lp64 = makeMultilib("lib64/lp64").flag("+m64").flag("+mabi=lp64");
- - Multilib Lp64f = makeMultilib("lib64/lp64f").flag("+m64").flag("+mabi=lp64f");
- - Multilib Lp64d = makeMultilib("lib64/lp64d").flag("+m64").flag("+mabi=lp64d");
- - MultilibSet RISCVMultilibs =
- - MultilibSet()
- - .Either({Ilp32, Ilp32f, Ilp32d, Lp64, Lp64f, Lp64d})
- - .FilterOut(NonExistent);
- + Multilib Lp64 = makeMultilib("lib64/lp64").flag("+m64").flag("+mabi=lp64");
- + Multilib Lp64f = makeMultilib("lib64/lp64f").flag("+m64").flag("+mabi=lp64f");
- + Multilib Lp64d = makeMultilib("lib64/lp64d").flag("+m64").flag("+mabi=lp64d");
- + RISCVMultilibs =
- + MultilibSet()
- + .Either({Ilp32, Ilp32f, Ilp32d, Lp64, Lp64f, Lp64d})
- + .FilterOut(NonExistent);
- + }
-
- Multilib::flags_list Flags;
- bool IsRV64 = TargetTriple.getArch() == llvm::Triple::riscv64;
- @@ -2563,13 +2574,19 @@ void Generic_GCC::GCCInstallationDetector::ScanLibDirForGCCTriple(
- continue; // Saw this path before; no need to look at it again.
- if (CandidateVersion.isOlderThan(4, 1, 1))
- continue;
- - if (CandidateVersion <= Version)
- + if (CandidateVersion < Version)
- continue;
-
- if (!ScanGCCForMultilibs(TargetTriple, Args, LI->path(),
- NeedsBiarchSuffix))
- continue;
-
- + // We might have found existing directory with GCCVersion, but it
- + // might not have GCC libraries we are looking for (i.e. return an
- + // empty Mulilibs)
- + if (Multilibs.size() == 0)
- + continue;
- +
- Version = CandidateVersion;
- GCCTriple.setTriple(CandidateTriple);
- // FIXME: We hack together the directory name here instead of
|