12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- From b8dd608a9ca83b9c321dce3ca0d18e8aeea987af 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 77f5c3f58a8b..0ec2dadafc05 100644
- --- a/clang/lib/Driver/ToolChains/Gnu.cpp
- +++ b/clang/lib/Driver/ToolChains/Gnu.cpp
- @@ -18,6 +18,7 @@
- #include "Linux.h"
- #include "clang/Config/config.h" // for GCC_INSTALL_PREFIX
- #include "clang/Driver/Compilation.h"
- +#include "clang/Driver/Distro.h"
- #include "clang/Driver/Driver.h"
- #include "clang/Driver/DriverDiagnostic.h"
- #include "clang/Driver/Options.h"
- @@ -2682,6 +2683,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 {
- @@ -2699,7 +2701,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},
|