summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2025-05-02 09:55:18 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2025-05-05 18:02:48 +0100
commit601b05a298c0847e96b8f5f71e50d057e2833382 (patch)
tree36499726a5ef05e41a1b239fafcc61e86c750f6f
parent5c996938de1da941dfce5c9a1272c5658cb7caaa (diff)
downloadpoky-601b05a298c0847e96b8f5f71e50d057e2833382.tar.gz
mesa: Fix header search paths
mesa build currently emits CLANG_RESOURCE_DIR into compiled objects and meson calculates it from llvm cmake files from sysroot and it points to absolute paths in target sysroot. To fix this backport a patch that does not rely on CLANG_RESOURCE_DIR, however, this patch still leaves it in code as fallback via FALLBACK_CLANG_RESOURCE_DIR, we are on LLVM 20.x which will not use this variable, lets just remove detection so it does not encode hardcoded paths. Fixes ERROR: mesa-2_25.0.2-r0 do_package_qa: QA Issue: File /usr/lib/libMesaOpenCL.so.1.0.0 in package libopencl-mesa contains reference to TMPDIR [buildpaths] ERROR: mesa-2_25.0.2-r0 do_package_qa: Fatal QA errors were found, failing task. (From OE-Core rev: afcde8eb575684fb514e1012b31bc0da04f4cb28) Signed-off-by: Khem Raj <raj.khem@gmail.com> Cc: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/recipes-graphics/mesa/files/0001-clover-Don-t-include-libclc-headers.patch143
-rw-r--r--meta/recipes-graphics/mesa/files/0001-gallium-clover-Do-not-use-LLVM_LIBRARY_DIR-for-FALLB.patch34
-rw-r--r--meta/recipes-graphics/mesa/mesa.inc2
3 files changed, 179 insertions, 0 deletions
diff --git a/meta/recipes-graphics/mesa/files/0001-clover-Don-t-include-libclc-headers.patch b/meta/recipes-graphics/mesa/files/0001-clover-Don-t-include-libclc-headers.patch
new file mode 100644
index 0000000000..0f9a01d823
--- /dev/null
+++ b/meta/recipes-graphics/mesa/files/0001-clover-Don-t-include-libclc-headers.patch
@@ -0,0 +1,143 @@
1From e94da9ccbc099468df752227716880efef66411b Mon Sep 17 00:00:00 2001
2From: Nikita Popov <npopov@redhat.com>
3Date: Thu, 27 Feb 2025 15:44:27 +0100
4Subject: [PATCH] clover: Don't include libclc headers
5
6Per https://github.com/llvm/llvm-project/issues/119967 these
7headers are internal implementation details of libclc and were
8never supposed to be installed. They are not available anymore
9since LLVM 20. Instead opencl-c.h should be used.
10
11There already ise a code path for including opencl-c.h, so always
12use it.
13
14This didn't work for me out of the box, because the build system
15currently hardcodes the clang resource directory, which is incorrect
16for Fedora at least. Fix this by using GetResourcePath +
17CLANG_RESOURCE_DIR provided by clang instead. This is basically
18the same as what is done in clc_helper.c
19
20I've still retained the old behavior as a fallback just in case
21(e.g. if clang is linked statically?)
22
23Upstream-Status: Submitted [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33805/]
24Reviewed-by: Karol Herbst <kherbst@redhat.com>
25Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33805>
26Signed-off-by: Khem Raj <raj.khem@gmail.com>
27---
28 .../frontends/clover/llvm/invocation.cpp | 53 +++++++++++++------
29 src/gallium/frontends/clover/meson.build | 5 +-
30 2 files changed, 39 insertions(+), 19 deletions(-)
31
32diff --git a/src/gallium/frontends/clover/llvm/invocation.cpp b/src/gallium/frontends/clover/llvm/invocation.cpp
33index 3cbb05b..ca030b4 100644
34--- a/src/gallium/frontends/clover/llvm/invocation.cpp
35+++ b/src/gallium/frontends/clover/llvm/invocation.cpp
36@@ -24,6 +24,8 @@
37 // OTHER DEALINGS IN THE SOFTWARE.
38 //
39
40+#include <dlfcn.h>
41+
42 #include <llvm/IR/DiagnosticPrinter.h>
43 #include <llvm/IR/DiagnosticInfo.h>
44 #include <llvm/IR/LLVMContext.h>
45@@ -39,6 +41,8 @@
46 #include <clang/Frontend/TextDiagnosticBuffer.h>
47 #include <clang/Frontend/TextDiagnosticPrinter.h>
48 #include <clang/Basic/TargetInfo.h>
49+#include <clang/Config/config.h>
50+#include <clang/Driver/Driver.h>
51
52 #if LLVM_VERSION_MAJOR >= 20
53 #include <llvm/Support/VirtualFileSystem.h>
54@@ -323,6 +327,30 @@ namespace {
55 return c;
56 }
57
58+ std::string getResourceDirectory() {
59+ Dl_info info;
60+ if (dladdr((void *)clang::CompilerInvocation::CreateFromArgs, &info) == 0) {
61+ return FALLBACK_CLANG_RESOURCE_DIR;
62+ }
63+
64+ char *libclang_path = realpath(info.dli_fname, NULL);
65+ if (libclang_path == nullptr) {
66+ return FALLBACK_CLANG_RESOURCE_DIR;
67+ }
68+
69+ // GetResourcePath is a way to retrieve the actual libclang resource dir based on a given
70+ // binary or library.
71+ std::string clang_resource_dir =
72+#if LLVM_VERSION_MAJOR >= 20
73+ clang::driver::Driver::GetResourcesPath(std::string(libclang_path));
74+#else
75+ clang::driver::Driver::GetResourcesPath(std::string(libclang_path), CLANG_RESOURCE_DIR);
76+#endif
77+ free(libclang_path);
78+
79+ return clang_resource_dir;
80+ }
81+
82 std::unique_ptr<Module>
83 compile(LLVMContext &ctx, clang::CompilerInstance &c,
84 const std::string &name, const std::string &source,
85@@ -331,25 +359,18 @@ namespace {
86 c.getFrontendOpts().ProgramAction = clang::frontend::EmitLLVMOnly;
87 c.getHeaderSearchOpts().UseBuiltinIncludes = true;
88 c.getHeaderSearchOpts().UseStandardSystemIncludes = true;
89- c.getHeaderSearchOpts().ResourceDir = CLANG_RESOURCE_DIR;
90
91- if (use_libclc) {
92- // Add libclc generic search path
93- c.getHeaderSearchOpts().AddPath(LIBCLC_INCLUDEDIR,
94- clang::frontend::Angled,
95- false, false);
96+ std::string clang_resource_dir = getResourceDirectory();
97+ c.getHeaderSearchOpts().ResourceDir = clang_resource_dir;
98
99- // Add libclc include
100- c.getPreprocessorOpts().Includes.push_back("clc/clc.h");
101- } else {
102- // Add opencl-c generic search path
103- c.getHeaderSearchOpts().AddPath(CLANG_RESOURCE_DIR,
104- clang::frontend::Angled,
105- false, false);
106+ // Add opencl-c generic search path
107+ std::string clang_include_path = clang_resource_dir + "/include";
108+ c.getHeaderSearchOpts().AddPath(clang_include_path,
109+ clang::frontend::Angled,
110+ false, false);
111
112- // Add opencl include
113- c.getPreprocessorOpts().Includes.push_back("opencl-c.h");
114- }
115+ // Add opencl include
116+ c.getPreprocessorOpts().Includes.push_back("opencl-c.h");
117
118 // Add definition for the OpenCL version
119 const auto dev_version = dev.device_version();
120diff --git a/src/gallium/frontends/clover/meson.build b/src/gallium/frontends/clover/meson.build
121index e569b86..56a9894 100644
122--- a/src/gallium/frontends/clover/meson.build
123+++ b/src/gallium/frontends/clover/meson.build
124@@ -10,7 +10,6 @@ clover_opencl_cpp_args = [
125 '-DCL_USE_DEPRECATED_OPENCL_2_0_APIS',
126 '-DCL_USE_DEPRECATED_OPENCL_2_1_APIS',
127 '-DCL_USE_DEPRECATED_OPENCL_2_2_APIS',
128- '-DLIBCLC_INCLUDEDIR="@0@/"'.format(dep_clc.get_variable(pkgconfig : 'includedir')),
129 '-DLIBCLC_LIBEXECDIR="@0@/"'.format(dep_clc.get_variable(pkgconfig : 'libexecdir'))
130 ]
131 clover_incs = [inc_include, inc_src, inc_gallium, inc_gallium_aux]
132@@ -43,9 +42,9 @@ libclllvm = static_library(
133 cpp_args : [
134 clover_cpp_args,
135 clover_opencl_cpp_args,
136- '-DCLANG_RESOURCE_DIR="@0@"'.format(join_paths(
137+ '-DFALLBACK_CLANG_RESOURCE_DIR="@0@"'.format(join_paths(
138 dep_llvm.get_variable(cmake : 'LLVM_LIBRARY_DIR', configtool: 'libdir'), 'clang',
139- dep_llvm.version(), 'include',
140+ dep_llvm.version()
141 )),
142 ],
143 gnu_symbol_visibility : 'hidden',
diff --git a/meta/recipes-graphics/mesa/files/0001-gallium-clover-Do-not-use-LLVM_LIBRARY_DIR-for-FALLB.patch b/meta/recipes-graphics/mesa/files/0001-gallium-clover-Do-not-use-LLVM_LIBRARY_DIR-for-FALLB.patch
new file mode 100644
index 0000000000..8b2ce2f63b
--- /dev/null
+++ b/meta/recipes-graphics/mesa/files/0001-gallium-clover-Do-not-use-LLVM_LIBRARY_DIR-for-FALLB.patch
@@ -0,0 +1,34 @@
1From 5ea5c5d48e049d7b10b7ffb814e84e3ddef7fff9 Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com>
3Date: Fri, 25 Apr 2025 19:00:14 -0700
4Subject: [PATCH] gallium/clover: Do not use LLVM_LIBRARY_DIR for
5 FALLBACK_CLANG_RESOURCE_DIR
6
7This option -DFALLBACK_CLANG_RESOURCE_DIR is synthesized by meson from
8LLVM_LIBRARY_DIR which is resolved to absolute path under <recipe_sysroot>
9and its used in clover front-end as string in .c files, which encodes it
10into binary as string and shows up in yocto QA error.
11
12ERROR: mesa-2_25.0.2-r0 do_package_qa: QA Issue: File /usr/lib/libMesaOpenCL.so.1.0.0 in package libopencl-mesa contains reference to TMPDIR [buildpaths]
13ERROR: mesa-2_25.0.2-r0 do_package_qa: Fatal QA errors were found, failing task.
14ERROR: Logfile of failure stored in: /mnt/b/yoe/master/sources/poky/build/tmp/work/cortexa57-poky-linux/mesa/25.0.2/temp/log.do_package_qa.974870
15
16Upstream-Status: Inappropriate [OE-Specific]
17Signed-off-by: Khem Raj <raj.khem@gmail.com>
18---
19 src/gallium/frontends/clover/meson.build | 2 +-
20 1 file changed, 1 insertion(+), 1 deletion(-)
21
22diff --git a/src/gallium/frontends/clover/meson.build b/src/gallium/frontends/clover/meson.build
23index 56a9894..32c21d6 100644
24--- a/src/gallium/frontends/clover/meson.build
25+++ b/src/gallium/frontends/clover/meson.build
26@@ -43,7 +43,7 @@ libclllvm = static_library(
27 clover_cpp_args,
28 clover_opencl_cpp_args,
29 '-DFALLBACK_CLANG_RESOURCE_DIR="@0@"'.format(join_paths(
30- dep_llvm.get_variable(cmake : 'LLVM_LIBRARY_DIR', configtool: 'libdir'), 'clang',
31+ '/usr/lib/clang',
32 dep_llvm.version()
33 )),
34 ],
diff --git a/meta/recipes-graphics/mesa/mesa.inc b/meta/recipes-graphics/mesa/mesa.inc
index 0356a13ecf..66fb896676 100644
--- a/meta/recipes-graphics/mesa/mesa.inc
+++ b/meta/recipes-graphics/mesa/mesa.inc
@@ -18,6 +18,8 @@ SRC_URI = "https://archive.mesa3d.org/mesa-${PV}.tar.xz \
18 file://0001-meson-misdetects-64bit-atomics-on-mips-clang.patch \ 18 file://0001-meson-misdetects-64bit-atomics-on-mips-clang.patch \
19 file://0001-freedreno-don-t-encode-build-path-into-binaries.patch \ 19 file://0001-freedreno-don-t-encode-build-path-into-binaries.patch \
20 file://0001-mesa-clc-add-an-option-to-force-inclusion-of-OpenCL-.patch \ 20 file://0001-mesa-clc-add-an-option-to-force-inclusion-of-OpenCL-.patch \
21 file://0001-clover-Don-t-include-libclc-headers.patch \
22 file://0001-gallium-clover-Do-not-use-LLVM_LIBRARY_DIR-for-FALLB.patch \
21" 23"
22 24
23SRC_URI[sha256sum] = "c0d245dea0aa4b49f74b3d474b16542e4a8799791cd33d676c69f650ad4378d0" 25SRC_URI[sha256sum] = "c0d245dea0aa4b49f74b3d474b16542e4a8799791cd33d676c69f650ad4378d0"