summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/conf/distro/include/maintainers.inc1
-rw-r--r--meta/recipes-devtools/clang/clang/0001-libclc-allow-existing-prepare-builtins-in-standalone.patch57
-rw-r--r--meta/recipes-devtools/clang/clang_git.bb17
-rw-r--r--meta/recipes-devtools/clang/common.inc1
-rw-r--r--meta/recipes-devtools/clang/libclc_git.bb43
5 files changed, 108 insertions, 11 deletions
diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc
index 6bfc2efb16..927aac16d6 100644
--- a/meta/conf/distro/include/maintainers.inc
+++ b/meta/conf/distro/include/maintainers.inc
@@ -328,6 +328,7 @@ RECIPE_MAINTAINER:pn-libcap-ng = "Yi Zhao <yi.zhao@windriver.com>"
328RECIPE_MAINTAINER:pn-libcap-ng-python = "Yi Zhao <yi.zhao@windriver.com>" 328RECIPE_MAINTAINER:pn-libcap-ng-python = "Yi Zhao <yi.zhao@windriver.com>"
329RECIPE_MAINTAINER:pn-libcgroup = "Unassigned <unassigned@yoctoproject.org>" 329RECIPE_MAINTAINER:pn-libcgroup = "Unassigned <unassigned@yoctoproject.org>"
330RECIPE_MAINTAINER:pn-libcheck = "Yi Zhao <yi.zhao@windriver.com>" 330RECIPE_MAINTAINER:pn-libcheck = "Yi Zhao <yi.zhao@windriver.com>"
331RECIPE_MAINTAINER:pn-libclc = "Khem Raj <raj.khem@gmail.com>"
331RECIPE_MAINTAINER:pn-libcomps = "Unassigned <unassigned@yoctoproject.org>" 332RECIPE_MAINTAINER:pn-libcomps = "Unassigned <unassigned@yoctoproject.org>"
332RECIPE_MAINTAINER:pn-libconvert-asn1-perl = "Tim Orling <tim.orling@konsulko.com>" 333RECIPE_MAINTAINER:pn-libconvert-asn1-perl = "Tim Orling <tim.orling@konsulko.com>"
333RECIPE_MAINTAINER:pn-libcxx = "Khem Raj <raj.khem@gmail.com>" 334RECIPE_MAINTAINER:pn-libcxx = "Khem Raj <raj.khem@gmail.com>"
diff --git a/meta/recipes-devtools/clang/clang/0001-libclc-allow-existing-prepare-builtins-in-standalone.patch b/meta/recipes-devtools/clang/clang/0001-libclc-allow-existing-prepare-builtins-in-standalone.patch
new file mode 100644
index 0000000000..46929798ad
--- /dev/null
+++ b/meta/recipes-devtools/clang/clang/0001-libclc-allow-existing-prepare-builtins-in-standalone.patch
@@ -0,0 +1,57 @@
1From 348f846b206780646430d6477c04b7793b669f34 Mon Sep 17 00:00:00 2001
2From: Ross Burton <ross.burton@arm.com>
3Date: Wed, 16 Jul 2025 23:24:21 +0100
4Subject: [PATCH] allow external prepare_builtins
5
6In standalone cross builds, libclc can't build a native prepare_builtins.
7
8Hack the CMake to allow it to use an existing binary, which we build in the recipe.
9
10Upstream-Status: Inappropriate [discussion for a proper fix in https://github.com/llvm/llvm-project/issues/149814]
11Signed-off-by: Ross Burton <ross.burton@arm.com>
12---
13 libclc/CMakeLists.txt | 23 +++++++++++++++++------
14 1 file changed, 17 insertions(+), 6 deletions(-)
15
16diff --git a/libclc/CMakeLists.txt b/libclc/CMakeLists.txt
17index 43e213b385f5..d4a6d096169e 100644
18--- a/libclc/CMakeLists.txt
19+++ b/libclc/CMakeLists.txt
20@@ -181,17 +181,28 @@ set(LLVM_LINK_COMPONENTS
21 IRReader
22 Support
23 )
24+
25 if( LIBCLC_STANDALONE_BUILD )
26- add_llvm_executable( prepare_builtins utils/prepare-builtins.cpp )
27- set( prepare_builtins_exe prepare_builtins )
28- set( prepare_builtins_target prepare_builtins )
29+ message("cross ${CMAKE_CROSSCOMPILING}")
30+ if(CMAKE_CROSSCOMPILING)
31+ find_program(PREPARE_BUILTINS prepare_builtins REQUIRED)
32+ message("found ${PREPARE_BUILTINS}")
33+ set( prepare_builtins_exe ${PREPARE_BUILTINS} )
34+ else()
35+ add_llvm_executable( prepare_builtins utils/prepare-builtins.cpp )
36+ set( prepare_builtins_exe prepare_builtins )
37+ set( prepare_builtins_target prepare_builtins )
38+ target_compile_definitions( prepare_builtins PRIVATE ${LLVM_VERSION_DEFINE} )
39+ # These were not properly reported in early LLVM and we don't need them
40+ target_compile_options( prepare_builtins PRIVATE -fno-rtti -fno-exceptions )
41+ endif()
42 else()
43 add_llvm_utility( prepare_builtins utils/prepare-builtins.cpp )
44 setup_host_tool( prepare_builtins PREPARE_BUILTINS prepare_builtins_exe prepare_builtins_target )
45+ target_compile_definitions( prepare_builtins PRIVATE ${LLVM_VERSION_DEFINE} )
46+ # These were not properly reported in early LLVM and we don't need them
47+ target_compile_options( prepare_builtins PRIVATE -fno-rtti -fno-exceptions )
48 endif()
49-target_compile_definitions( prepare_builtins PRIVATE ${LLVM_VERSION_DEFINE} )
50-# These were not properly reported in early LLVM and we don't need them
51-target_compile_options( prepare_builtins PRIVATE -fno-rtti -fno-exceptions )
52
53 # Setup arch devices
54 set( r600--_devices cedar cypress barts cayman )
55--
562.43.0
57
diff --git a/meta/recipes-devtools/clang/clang_git.bb b/meta/recipes-devtools/clang/clang_git.bb
index 1210ca92de..a85626c45a 100644
--- a/meta/recipes-devtools/clang/clang_git.bb
+++ b/meta/recipes-devtools/clang/clang_git.bb
@@ -131,7 +131,7 @@ HF[vardepvalue] = "${HF}"
131 131
132# Ensure that LLVM_PROJECTS does not contain compiler runtime components e.g. libcxx etc 132# Ensure that LLVM_PROJECTS does not contain compiler runtime components e.g. libcxx etc
133# they are enabled via LLVM_ENABLE_RUNTIMES 133# they are enabled via LLVM_ENABLE_RUNTIMES
134LLVM_PROJECTS ?= "clang;clang-tools-extra;libclc;lld" 134LLVM_PROJECTS ?= "clang;clang-tools-extra;lld"
135 135
136# linux hosts (.so) on Windows .pyd 136# linux hosts (.so) on Windows .pyd
137SOLIBSDEV:mingw32 = ".pyd" 137SOLIBSDEV:mingw32 = ".pyd"
@@ -192,7 +192,7 @@ EXTRA_OECMAKE:append:class-target = "\
192 192
193DEPENDS = "binutils zlib zstd libffi libxml2 libxml2-native ninja-native swig-native spirv-tools-native llvm-tblgen-native" 193DEPENDS = "binutils zlib zstd libffi libxml2 libxml2-native ninja-native swig-native spirv-tools-native llvm-tblgen-native"
194DEPENDS:append:class-nativesdk = " clang-crosssdk-${SDK_SYS} virtual/nativesdk-cross-binutils nativesdk-python3" 194DEPENDS:append:class-nativesdk = " clang-crosssdk-${SDK_SYS} virtual/nativesdk-cross-binutils nativesdk-python3"
195DEPENDS:append:class-target = " clang-cross-${TARGET_ARCH} python3 ${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', 'compiler-rt libcxx', '', d)} spirv-llvm-translator-native" 195DEPENDS:append:class-target = " clang-cross-${TARGET_ARCH} python3 ${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', 'compiler-rt libcxx', '', d)}"
196 196
197RRECOMMENDS:${PN} = "binutils" 197RRECOMMENDS:${PN} = "binutils"
198RRECOMMENDS:${PN}:append:class-target = "${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', ' libcxx-dev', '', d)}" 198RRECOMMENDS:${PN}:append:class-target = "${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', ' libcxx-dev', '', d)}"
@@ -259,7 +259,6 @@ do_install:append:class-native () {
259 install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clangd-indexer ${D}${bindir}/clangd-indexer 259 install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clangd-indexer ${D}${bindir}/clangd-indexer
260 fi 260 fi
261 install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clang-tidy-confusable-chars-gen ${D}${bindir}/clang-tidy-confusable-chars-gen 261 install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clang-tidy-confusable-chars-gen ${D}${bindir}/clang-tidy-confusable-chars-gen
262 install -Dm 0755 ${B}${BINPATHPREFIX}/bin/prepare_builtins ${D}${bindir}/prepare_builtins
263 262
264 for f in `find ${D}${bindir} -executable -type f -not -type l`; do 263 for f in `find ${D}${bindir} -executable -type f -not -type l`; do
265 test -n "`file -b $f|grep -i ELF`" && ${STRIP} $f 264 test -n "`file -b $f|grep -i ELF`" && ${STRIP} $f
@@ -295,11 +294,11 @@ do_install:append:class-nativesdk () {
295 fi 294 fi
296} 295}
297 296
298PROVIDES:append:class-native = " llvm-native libclc-native" 297PROVIDES:append:class-native = " llvm-native"
299PROVIDES:append:class-target = " llvm libclc" 298PROVIDES:append:class-target = " llvm"
300PROVIDES:append:class-nativesdk = " nativesdk-llvm nativesdk-libclc" 299PROVIDES:append:class-nativesdk = " nativesdk-llvm"
301 300
302PACKAGES =+ "${PN}-libllvm ${PN}-libclang-python ${PN}-libclang-cpp ${PN}-tidy ${PN}-format ${PN}-tools ${PN}-clc \ 301PACKAGES =+ "${PN}-libllvm ${PN}-libclang-python ${PN}-libclang-cpp ${PN}-tidy ${PN}-format ${PN}-tools \
303 libclang llvm-linker-tools" 302 libclang llvm-linker-tools"
304 303
305BBCLASSEXTEND = "native nativesdk" 304BBCLASSEXTEND = "native nativesdk"
@@ -316,8 +315,6 @@ RDEPENDS:${PN}-tools += "\
316 perl-module-term-ansicolor \ 315 perl-module-term-ansicolor \
317" 316"
318 317
319RPROVIDES:${PN}-clc = "${MLPREFIX}libclc"
320
321RRECOMMENDS:${PN}-tidy += "${PN}-tools" 318RRECOMMENDS:${PN}-tidy += "${PN}-tools"
322 319
323FILES:llvm-linker-tools = "${libdir}/LLVMgold* ${libdir}/libLTO.so.* ${libdir}/LLVMPolly*" 320FILES:llvm-linker-tools = "${libdir}/LLVMgold* ${libdir}/libLTO.so.* ${libdir}/LLVMPolly*"
@@ -384,8 +381,6 @@ FILES:${PN} += "\
384 ${nonarch_libdir}/${BPN}/*/include/ \ 381 ${nonarch_libdir}/${BPN}/*/include/ \
385" 382"
386 383
387FILES:${PN}-clc += "${datadir}/clc"
388
389FILES:${PN}-libllvm =+ "\ 384FILES:${PN}-libllvm =+ "\
390 ${libdir}/libLLVM.so.${MAJOR_VER}.${MINOR_VER} \ 385 ${libdir}/libLLVM.so.${MAJOR_VER}.${MINOR_VER} \
391 ${libdir}/libLLVM-${MAJOR_VER}.so \ 386 ${libdir}/libLLVM-${MAJOR_VER}.so \
diff --git a/meta/recipes-devtools/clang/common.inc b/meta/recipes-devtools/clang/common.inc
index d66f9059b2..d6280c2fbe 100644
--- a/meta/recipes-devtools/clang/common.inc
+++ b/meta/recipes-devtools/clang/common.inc
@@ -59,6 +59,7 @@ SRC_URI = "\
59 file://0036-libunwind-Use-gcs-instead-of-gcs-target-attribute.patch \ 59 file://0036-libunwind-Use-gcs-instead-of-gcs-target-attribute.patch \
60 file://0037-compiler-rt-Exclude-sync_fetch_and_-for-any-pre-ARMv.patch \ 60 file://0037-compiler-rt-Exclude-sync_fetch_and_-for-any-pre-ARMv.patch \
61 file://0038-compiler-rt-Hardcode-uptr-sptr-typedefs-on-Mips-Linu.patch \ 61 file://0038-compiler-rt-Hardcode-uptr-sptr-typedefs-on-Mips-Linu.patch \
62 file://0001-libclc-allow-existing-prepare-builtins-in-standalone.patch \
62" 63"
63# Fallback to no-PIE if not set 64# Fallback to no-PIE if not set
64GCCPIE ??= "" 65GCCPIE ??= ""
diff --git a/meta/recipes-devtools/clang/libclc_git.bb b/meta/recipes-devtools/clang/libclc_git.bb
new file mode 100644
index 0000000000..ed31de503a
--- /dev/null
+++ b/meta/recipes-devtools/clang/libclc_git.bb
@@ -0,0 +1,43 @@
1SUMMARY = "Implementation of the library requirements of the OpenCL C programming language."
2HOMEPAGE = "https://libclc.llvm.org"
3SECTION = "devel"
4
5require common-clang.inc
6require common-source.inc
7
8LIC_FILES_CHKSUM = "file://libclc/LICENSE.TXT;md5=7cc795f6cbb2d801d84336b83c8017db"
9
10inherit cmake pkgconfig
11
12# Depend explicitly on clang-native instead of using TOOLCHAIN as the build
13# objects from this recipe are build explicitly using clang for GPU targets.
14# We could INHIBIT_DEFAULT_DEPS to avoid any other toolchain but then we need
15# to wrestle CMake to configure without a toolchain.
16DEPENDS += "clang-native spirv-llvm-translator-native"
17
18OECMAKE_SOURCEPATH = "${S}/libclc"
19B_NATIVE = "${B}-native"
20
21# Semicolon-separated list of targets to build
22LIBCLC_TARGETS ?= "all"
23
24EXTRA_OECMAKE = "-DLIBCLC_TARGETS_TO_BUILD=${LIBCLC_TARGETS} \
25 -DPREPARE_BUILTINS=${B_NATIVE}/prepare_builtins"
26
27# Need to build a native prepare_builtins binary in target builds. The easiest
28# way to do this is with a second native cmake build tree.
29do_build_prepare_builtins() {
30 cmake --fresh -G Ninja \
31 -S ${OECMAKE_SOURCEPATH} -B ${B_NATIVE} \
32 -DCMAKE_TOOLCHAIN_FILE:FILEPATH=${WORKDIR}/toolchain-native.cmake \
33 -DLIBCLC_TARGETS_TO_BUILD=
34 cmake --build ${B_NATIVE} --target prepare_builtins
35}
36do_build_prepare_builtins:class-native() {
37 :
38}
39do_configure[prefuncs] += "do_build_prepare_builtins"
40
41FILES:${PN} += "${datadir}/clc"
42
43BBCLASSEXTEND = "native nativesdk"