123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- From 515de929ba778d5d3b47448647ce5d33f873ea6d Mon Sep 17 00:00:00 2001
- From: Jun Yuan Tan <junyuan.tan@starfivetech.com>
- Date: Tue, 9 Nov 2021 11:10:42 +0800
- Subject: [PATCH 34/34] clang: Fix how driver finds GCC installation path on
- OpenEmbedded
- Fix how Clang Driver finds GCC installation path on OpenEmbedded
- - For RISCV (riscv{32,64}) we define new two multi-lib options without any
- subdirectories (e.g., lib32/ilp32d or lib64/lp64d). OpenEmbedded GCC
- builds don't use them.
- - Modify how Clang Driver finds GCC installation path. This is important
- because GCC files on OpenEmbedded are in two different directories:
- (1) /usr/bin/../lib/gcc/riscv64-oe-linux/9.2.0
- (2) /usr/lib/riscv64-oe-linux/9.2.0
- Clang Driver will check (1) first. The directory exist, but will produce
- no valid multi-libs and there will be no multi-lib selected. (2) contains
- actual GCC run-time objects/libraries, but because the path has exact
- same GCC version (9.2.0) it will be skipped.
- We modify the approach by allowing to check other directories with the same
- GCC version. We also avoid picking GCC installation path if it results in
- an empty multi-lib list.
- Rebased to LLVM 14.0.0 by Jun Yuan Tan
- Signed-off-by: David Abdurachmanov <david.abdurachmanov@sifive.com>
- Signed-off-by: Khem Raj <raj.khem@gmail.com>
- Signed-off-by: Jun Yuan Tan <junyuan.tan@starfivetech.com>
- ---
- clang/lib/Driver/ToolChains/Gnu.cpp | 33 +++++++++++++++++++----------
- 1 file changed, 22 insertions(+), 11 deletions(-)
- diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
- index fc65d92e8ea0..fc99318e757d 100644
- --- a/clang/lib/Driver/ToolChains/Gnu.cpp
- +++ b/clang/lib/Driver/ToolChains/Gnu.cpp
- @@ -1652,18 +1652,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;
- @@ -2566,7 +2577,7 @@ 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(),
- --
- 2.33.1
|