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 " RECIPE_MAINTAINER:pn-libcap-ng-python = "Yi Zhao " RECIPE_MAINTAINER:pn-libcgroup = "Unassigned " RECIPE_MAINTAINER:pn-libcheck = "Yi Zhao " +RECIPE_MAINTAINER:pn-libclc = "Khem Raj " RECIPE_MAINTAINER:pn-libcomps = "Unassigned " RECIPE_MAINTAINER:pn-libconvert-asn1-perl = "Tim Orling " RECIPE_MAINTAINER:pn-libcxx = "Khem Raj " 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 @@ +From 348f846b206780646430d6477c04b7793b669f34 Mon Sep 17 00:00:00 2001 +From: Ross Burton +Date: Wed, 16 Jul 2025 23:24:21 +0100 +Subject: [PATCH] allow external prepare_builtins + +In standalone cross builds, libclc can't build a native prepare_builtins. + +Hack the CMake to allow it to use an existing binary, which we build in the recipe. + +Upstream-Status: Inappropriate [discussion for a proper fix in https://github.com/llvm/llvm-project/issues/149814] +Signed-off-by: Ross Burton +--- + libclc/CMakeLists.txt | 23 +++++++++++++++++------ + 1 file changed, 17 insertions(+), 6 deletions(-) + +diff --git a/libclc/CMakeLists.txt b/libclc/CMakeLists.txt +index 43e213b385f5..d4a6d096169e 100644 +--- a/libclc/CMakeLists.txt ++++ b/libclc/CMakeLists.txt +@@ -181,17 +181,28 @@ set(LLVM_LINK_COMPONENTS + IRReader + Support + ) ++ + if( LIBCLC_STANDALONE_BUILD ) +- add_llvm_executable( prepare_builtins utils/prepare-builtins.cpp ) +- set( prepare_builtins_exe prepare_builtins ) +- set( prepare_builtins_target prepare_builtins ) ++ message("cross ${CMAKE_CROSSCOMPILING}") ++ if(CMAKE_CROSSCOMPILING) ++ find_program(PREPARE_BUILTINS prepare_builtins REQUIRED) ++ message("found ${PREPARE_BUILTINS}") ++ set( prepare_builtins_exe ${PREPARE_BUILTINS} ) ++ else() ++ add_llvm_executable( prepare_builtins utils/prepare-builtins.cpp ) ++ set( prepare_builtins_exe prepare_builtins ) ++ set( prepare_builtins_target prepare_builtins ) ++ target_compile_definitions( prepare_builtins PRIVATE ${LLVM_VERSION_DEFINE} ) ++ # These were not properly reported in early LLVM and we don't need them ++ target_compile_options( prepare_builtins PRIVATE -fno-rtti -fno-exceptions ) ++ endif() + else() + add_llvm_utility( prepare_builtins utils/prepare-builtins.cpp ) + setup_host_tool( prepare_builtins PREPARE_BUILTINS prepare_builtins_exe prepare_builtins_target ) ++ target_compile_definitions( prepare_builtins PRIVATE ${LLVM_VERSION_DEFINE} ) ++ # These were not properly reported in early LLVM and we don't need them ++ target_compile_options( prepare_builtins PRIVATE -fno-rtti -fno-exceptions ) + endif() +-target_compile_definitions( prepare_builtins PRIVATE ${LLVM_VERSION_DEFINE} ) +-# These were not properly reported in early LLVM and we don't need them +-target_compile_options( prepare_builtins PRIVATE -fno-rtti -fno-exceptions ) + + # Setup arch devices + set( r600--_devices cedar cypress barts cayman ) +-- +2.43.0 + 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}" # Ensure that LLVM_PROJECTS does not contain compiler runtime components e.g. libcxx etc # they are enabled via LLVM_ENABLE_RUNTIMES -LLVM_PROJECTS ?= "clang;clang-tools-extra;libclc;lld" +LLVM_PROJECTS ?= "clang;clang-tools-extra;lld" # linux hosts (.so) on Windows .pyd SOLIBSDEV:mingw32 = ".pyd" @@ -192,7 +192,7 @@ EXTRA_OECMAKE:append:class-target = "\ DEPENDS = "binutils zlib zstd libffi libxml2 libxml2-native ninja-native swig-native spirv-tools-native llvm-tblgen-native" DEPENDS:append:class-nativesdk = " clang-crosssdk-${SDK_SYS} virtual/nativesdk-cross-binutils nativesdk-python3" -DEPENDS:append:class-target = " clang-cross-${TARGET_ARCH} python3 ${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', 'compiler-rt libcxx', '', d)} spirv-llvm-translator-native" +DEPENDS:append:class-target = " clang-cross-${TARGET_ARCH} python3 ${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', 'compiler-rt libcxx', '', d)}" RRECOMMENDS:${PN} = "binutils" RRECOMMENDS:${PN}:append:class-target = "${@bb.utils.contains('TC_CXX_RUNTIME', 'llvm', ' libcxx-dev', '', d)}" @@ -259,7 +259,6 @@ do_install:append:class-native () { install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clangd-indexer ${D}${bindir}/clangd-indexer fi install -Dm 0755 ${B}${BINPATHPREFIX}/bin/clang-tidy-confusable-chars-gen ${D}${bindir}/clang-tidy-confusable-chars-gen - install -Dm 0755 ${B}${BINPATHPREFIX}/bin/prepare_builtins ${D}${bindir}/prepare_builtins for f in `find ${D}${bindir} -executable -type f -not -type l`; do test -n "`file -b $f|grep -i ELF`" && ${STRIP} $f @@ -295,11 +294,11 @@ do_install:append:class-nativesdk () { fi } -PROVIDES:append:class-native = " llvm-native libclc-native" -PROVIDES:append:class-target = " llvm libclc" -PROVIDES:append:class-nativesdk = " nativesdk-llvm nativesdk-libclc" +PROVIDES:append:class-native = " llvm-native" +PROVIDES:append:class-target = " llvm" +PROVIDES:append:class-nativesdk = " nativesdk-llvm" -PACKAGES =+ "${PN}-libllvm ${PN}-libclang-python ${PN}-libclang-cpp ${PN}-tidy ${PN}-format ${PN}-tools ${PN}-clc \ +PACKAGES =+ "${PN}-libllvm ${PN}-libclang-python ${PN}-libclang-cpp ${PN}-tidy ${PN}-format ${PN}-tools \ libclang llvm-linker-tools" BBCLASSEXTEND = "native nativesdk" @@ -316,8 +315,6 @@ RDEPENDS:${PN}-tools += "\ perl-module-term-ansicolor \ " -RPROVIDES:${PN}-clc = "${MLPREFIX}libclc" - RRECOMMENDS:${PN}-tidy += "${PN}-tools" FILES:llvm-linker-tools = "${libdir}/LLVMgold* ${libdir}/libLTO.so.* ${libdir}/LLVMPolly*" @@ -384,8 +381,6 @@ FILES:${PN} += "\ ${nonarch_libdir}/${BPN}/*/include/ \ " -FILES:${PN}-clc += "${datadir}/clc" - FILES:${PN}-libllvm =+ "\ ${libdir}/libLLVM.so.${MAJOR_VER}.${MINOR_VER} \ ${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 = "\ file://0036-libunwind-Use-gcs-instead-of-gcs-target-attribute.patch \ file://0037-compiler-rt-Exclude-sync_fetch_and_-for-any-pre-ARMv.patch \ file://0038-compiler-rt-Hardcode-uptr-sptr-typedefs-on-Mips-Linu.patch \ + file://0001-libclc-allow-existing-prepare-builtins-in-standalone.patch \ " # Fallback to no-PIE if not set GCCPIE ??= "" 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 @@ +SUMMARY = "Implementation of the library requirements of the OpenCL C programming language." +HOMEPAGE = "https://libclc.llvm.org" +SECTION = "devel" + +require common-clang.inc +require common-source.inc + +LIC_FILES_CHKSUM = "file://libclc/LICENSE.TXT;md5=7cc795f6cbb2d801d84336b83c8017db" + +inherit cmake pkgconfig + +# Depend explicitly on clang-native instead of using TOOLCHAIN as the build +# objects from this recipe are build explicitly using clang for GPU targets. +# We could INHIBIT_DEFAULT_DEPS to avoid any other toolchain but then we need +# to wrestle CMake to configure without a toolchain. +DEPENDS += "clang-native spirv-llvm-translator-native" + +OECMAKE_SOURCEPATH = "${S}/libclc" +B_NATIVE = "${B}-native" + +# Semicolon-separated list of targets to build +LIBCLC_TARGETS ?= "all" + +EXTRA_OECMAKE = "-DLIBCLC_TARGETS_TO_BUILD=${LIBCLC_TARGETS} \ + -DPREPARE_BUILTINS=${B_NATIVE}/prepare_builtins" + +# Need to build a native prepare_builtins binary in target builds. The easiest +# way to do this is with a second native cmake build tree. +do_build_prepare_builtins() { + cmake --fresh -G Ninja \ + -S ${OECMAKE_SOURCEPATH} -B ${B_NATIVE} \ + -DCMAKE_TOOLCHAIN_FILE:FILEPATH=${WORKDIR}/toolchain-native.cmake \ + -DLIBCLC_TARGETS_TO_BUILD= + cmake --build ${B_NATIVE} --target prepare_builtins +} +do_build_prepare_builtins:class-native() { + : +} +do_configure[prefuncs] += "do_build_prepare_builtins" + +FILES:${PN} += "${datadir}/clc" + +BBCLASSEXTEND = "native nativesdk"