12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- From 4dab11c8abdd1a48cd0df4475ef2f82732c7f7e3 Mon Sep 17 00:00:00 2001
- From: Changqing Li <changqing.li@windriver.com>
- Date: Tue, 7 Dec 2021 04:08:22 +0000
- Subject: [PATCH] Fix lib paths for OpenEmbedded Host
- Under OpenEmbedded Host, while building with clang-native, it cannot find
- the GCCInstallPath, which causing following error:
- [snip]
- compiler-rt-native/13.0.1-r0/recipe-sysroot-native/usr/bin/clang
- -target x86_64-linux
- -isystem/path/to/x86_64-linux/compiler-rt-native/13.0.1-r0/recipe-sysroot-native/usr/include
- -O2 -pipe
- /path/to/compiler-rt-native/13.0.1-r0/recipe-sysroot-native/usr/share/cmake-3.21/Modules/CMakeCCompilerABI.c`
- hosttools/ld: cannot find crtbeginS.o: No such file or directory
- [snip]
- Before this patch:
- compiler-rt-native/13.0.1-r0/recipe-sysroot-native/usr/bin/clang
- clang version 13.0.1 (https://github.com/llvm/llvm-project 08e3a5ccd952edee36b3c002e3a29c6b1b5153de)
- Target: x86_64-unknown-linux-gnu
- Thread model: posix
- InstalledDir: /build/tmp-glibc/work/x86_64-linux/compiler-rt-native/13.0.1-r0/recipe-sysroot-native/usr/bin
- Found candidate GCC installation: /usr/lib/gcc/x86_64-wrs-linux/10.2.0
- After this patch:
- compiler-rt-native/13.0.1-r0/recipe-sysroot-native/usr/bin/clang
- clang version 13.0.1 (https://github.com/llvm/llvm-project 08e3a5ccd952edee36b3c002e3a29c6b1b5153de)
- Thread model: posix
- InstalledDir: /build/tmp-glibc/work/x86_64-linux/compiler-rt-native/13.0.1-r0/recipe-sysroot-native/usr/bin
- Found candidate GCC installation: /usr/lib/gcc/x86_64-wrs-linux/10.2.0
- Found candidate GCC installation: /usr/lib/x86_64-wrs-linux/10.2.0
- Selected GCC installation: /usr/lib/x86_64-wrs-linux/10.2.0
- Candidate multilib: .;@m64
- Selected multilib: .;@m64
- Summary:
- For OpenEmbedded Host, sysroots are of the form<sysroot>/usr/lib/<triple>/x.y.z.
- Take x86-64 as example, the default triple is x86_64-unknown-linux-gnu.
- For clang-native, the target vendor is '-unknown', need to test current distro
- to follow above form.
- Upstream-Status: Inappropriate [oe specific]
- Signed-off-by: Changqing Li <changqing.li@windriver.com>
- Signed-off-by: Khem Raj <raj.khem@gmail.com>
- ---
- clang/lib/Driver/ToolChains/Gnu.cpp | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
- diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
- index 1e5a3cc2c1f1..d3574b86cb26 100644
- --- a/clang/lib/Driver/ToolChains/Gnu.cpp
- +++ b/clang/lib/Driver/ToolChains/Gnu.cpp
- @@ -22,6 +22,7 @@
- #include "clang/Driver/Options.h"
- #include "clang/Driver/Tool.h"
- #include "clang/Driver/ToolChain.h"
- +#include "clang/Driver/Distro.h"
- #include "llvm/Option/ArgList.h"
- #include "llvm/Support/CodeGen.h"
- #include "llvm/Support/Path.h"
- @@ -2518,6 +2519,7 @@ void Generic_GCC::GCCInstallationDetector::ScanLibDirForGCCTriple(
- const llvm::Triple &TargetTriple, const ArgList &Args,
- const std::string &LibDir, StringRef CandidateTriple,
- bool NeedsBiarchSuffix, bool GCCDirExists, bool GCCCrossDirExists) {
- + Distro Distro(D.getVFS(), TargetTriple);
- // Locations relative to the system lib directory where GCC's triple-specific
- // directories might reside.
- struct GCCLibSuffix {
- @@ -2535,7 +2537,8 @@ void Generic_GCC::GCCInstallationDetector::ScanLibDirForGCCTriple(
- // files in that location, not just GCC installation data.
- {CandidateTriple.str(), "..",
- TargetTriple.getVendor() == llvm::Triple::Freescale ||
- - TargetTriple.getVendor() == llvm::Triple::OpenEmbedded},
- + TargetTriple.getVendor() == llvm::Triple::OpenEmbedded ||
- + Distro.IsOpenEmbedded()},
-
- // This is the normal place.
- {"gcc/" + CandidateTriple.str(), "../..", GCCDirExists},
|