From f9b6175e7c446a82c568ff1a214885d707c95f49 Mon Sep 17 00:00:00 2001
From: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Date: Wed, 16 Apr 2025 14:35:37 +0300
Subject: [PATCH] mesa-clc: add an option to force inclusion of OpenCL headers

Currently mesa-clc bundles OpenCL headers from Clang only if the static
LLVM is used (which means Clang / LLVM are not present on the target
system). In some cases (e.g. when building in OpenEmbedded environemnt)
it is desirable to have shared LLVM library, but skip installing the
whole Clang runtime just to compile shaders. Add an option that forces
OpenCL headers to be bundled with the mesa-clc binary.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Upstream-Status: Submitted [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/34551]
---
 meson_options.txt                | 10 ++++++++++
 src/compiler/clc/meson.build |  3 ++-
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/meson_options.txt b/meson_options.txt
index 18da31eff507..addd274ecef7 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -797,6 +797,16 @@ option(
   description : 'Install the mesa-clc compiler (if needed for cross builds).'
 )
 
+option(
+  'mesa-clc-bundle-headers',
+  type : 'combo',
+  value : 'auto',
+  choices : [
+    'enabled', 'auto'
+  ],
+  description : 'Bundle the OpenCL headers into the mesa-clc binary (default to bundle if static LLVM is used). Note, it might require rebuilding mesa-clc if opencl-c.h or opencl-c-base.h are changed (e.g. on Clang upgrades).'
+)
+
 option(
   'precomp-compiler',
   type : 'combo',
diff --git a/src/compiler/clc/meson.build b/src/compiler/clc/meson.build
index 263eba527191..9ff61440f0da 100644
--- a/src/compiler/clc/meson.build
+++ b/src/compiler/clc/meson.build
@@ -11,7 +11,8 @@ _libmesaclc_c_args = []
 _libmesaclc_cpp_args = ['-DLLVM_LIB_DIR="@0@"'.format(llvm_libdir)]
 _libmesaclc_sources = []
 
-if not _shared_llvm
+if not _shared_llvm or \
+    get_option('mesa-clc-bundle-headers') == 'enabled'
   # LLVM 16 moved clang header path from using full version to only major version
   if dep_llvm.version().version_compare('< 16')
     # Prior to LLVM 16, this path used a full version
-- 
2.47.2

