123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- From 0427b4e815f6cdcc0ba24691807c211305c8f3c5 Mon Sep 17 00:00:00 2001
- From: Jun Yuan Tan <junyuan.tan@starfivetech.com>
- Date: Tue, 9 Nov 2021 10:33:07 +0800
- Subject: [PATCH 17/34] clang: Fix resource dir location for cross toolchains
- When clang looks for the resources directory, it does so based on the binary
- location and assumes that the containing directory is a sibling to lib. The
- Yocto cross.bbclass defines the default bindir as
- ${exec_prefix}/bin/${CROSS_TARGET_SYS_DIR}. ex: /usr/bin/aarch64-poky-linux/.
- This causes clang to form a path that looks like /usr/bin/lib/clang/...
- As a fix for this, check the parent directory name. If that is "bin", then
- use that directory's parent.
- Rebased to LLVM 14.0.0 by Jun Yuan Tan
- Signed-off-by: Jim Broadus <jbroadus@xevo.com>
- Signed-off-by: Khem Raj <raj.khem@gmail.com>
- Signed-off-by: Jun Yuan Tan <junyuan.tan@starfivetech.com>
- ---
- clang/lib/Driver/Driver.cpp | 8 +++++++-
- 1 file changed, 7 insertions(+), 1 deletion(-)
- diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
- index b2fb21b7052a..7e8c64a62f7e 100644
- --- a/clang/lib/Driver/Driver.cpp
- +++ b/clang/lib/Driver/Driver.cpp
- @@ -122,7 +122,13 @@ std::string Driver::GetResourcesPath(StringRef BinaryPath,
- // With a static-library build of libclang, LibClangPath will contain the
- // path of the embedding binary, which for LLVM binaries will be in bin/.
- // ../lib gets us to lib/ in both cases.
- - P = llvm::sys::path::parent_path(Dir);
- + Dir = std::string(llvm::sys::path::parent_path(Dir));
- +
- + // OE cross toolchains are installed, by default, in a subdir of bin.
- + if (llvm::sys::path::filename(Dir) == "bin") {
- + Dir = std::string(llvm::sys::path::parent_path(Dir));
- + }
- + P = Dir;
- llvm::sys::path::append(P, Twine("lib") + CLANG_LIBDIR_SUFFIX, "clang",
- CLANG_VERSION_STRING);
- }
- --
- 2.33.1
|