]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
clang: split SPIRV-LLVM-Translator to its own recipe
authorDmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Tue, 6 May 2025 00:03:59 +0000 (03:03 +0300)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Thu, 8 May 2025 09:27:41 +0000 (10:27 +0100)
The translator is not a part of the same source tree. As such it has
tendency to break on clang upgrades. Split it to its own recipe in order
to ease handling of clang.

This also makes it use SPIR-V headers provided by the spirv-headers
recipe instead of vendoring them in.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/conf/distro/include/maintainers.inc
meta/recipes-devtools/clang/clang/spirv-internal-build.patch [deleted file]
meta/recipes-devtools/clang/clang/spirv-shared-library.patch [deleted file]
meta/recipes-devtools/clang/clang_git.bb
meta/recipes-devtools/clang/common.inc
meta/recipes-graphics/spir/spirv-llvm-translator_20.1.2.bb [new file with mode: 0644]

index b67433d4d2b643c12803da222affaf3d85dd069f..7d4a8e24174feacf1f67cc856e0538d3607851d3 100644 (file)
@@ -792,6 +792,7 @@ RECIPE_MAINTAINER:pn-socat = "Hongxu Jia <hongxu.jia@windriver.com>"
 RECIPE_MAINTAINER:pn-speex = "Michael Opdenacker <michael@opdenacker.org>"
 RECIPE_MAINTAINER:pn-speexdsp = "Michael Opdenacker <michael@opdenacker.org>"
 RECIPE_MAINTAINER:pn-spirv-headers = "Jose Quaresma <quaresma.jose@gmail.com>"
+RECIPE_MAINTAINER:pn-spirv-llvm-translator = "Khem Raj <raj.khem@gmail.com>"
 RECIPE_MAINTAINER:pn-spirv-tools = "Jose Quaresma <quaresma.jose@gmail.com>"
 RECIPE_MAINTAINER:pn-sqlite3 = "Anuj Mittal <anuj.mittal@intel.com>"
 RECIPE_MAINTAINER:pn-squashfs-tools = "Robert Yang <liezhi.yang@windriver.com>"
diff --git a/meta/recipes-devtools/clang/clang/spirv-internal-build.patch b/meta/recipes-devtools/clang/clang/spirv-internal-build.patch
deleted file mode 100644 (file)
index 555d40f..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-From e94e529aefb28b65165e978daa2bfd89867ee8d0 Mon Sep 17 00:00:00 2001
-From: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
-Date: Fri, 21 Mar 2025 17:17:52 +0200
-Subject: [PATCH] SPIRV-LLVM-Translator: fix handling of built-in SPIRV targer
-
-If the SPIRV-LLVM-Translator is being built together with the LLVM, set
-the defines declaring whether SPIRV target is also included into the
-LLVM library or not. Otherwise llvm-spirv execution fails because
-spirv-ext option is registered twice.
-
-Upstream-Status: Pending [will be submitted upstream after internal clearance]
-Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
-
-Index: llvm-project-20.1.0.src/llvm/projects/SPIRV-LLVM-Translator/CMakeLists.txt
-===================================================================
---- llvm-project-20.1.0.src.orig/llvm/projects/SPIRV-LLVM-Translator/CMakeLists.txt
-+++ llvm-project-20.1.0.src/llvm/projects/SPIRV-LLVM-Translator/CMakeLists.txt
-@@ -116,6 +116,12 @@ if(LLVM_SPIRV_BUILD_EXTERNAL)
-     set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
-     set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
-   endif()
-+else()
-+  is_llvm_target_library("SPIRV" spirv_present_result INCLUDED_TARGETS)
-+  if(spirv_present_result)
-+    set(SPIRV_BACKEND_FOUND TRUE)
-+    add_compile_definitions(LLVM_SPIRV_BACKEND_TARGET_PRESENT)
-+  endif()
- endif()
- set(LLVM_SPIRV_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include)
diff --git a/meta/recipes-devtools/clang/clang/spirv-shared-library.patch b/meta/recipes-devtools/clang/clang/spirv-shared-library.patch
deleted file mode 100644 (file)
index edc595d..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-From e94e529aefb28b65165e978daa2bfd89867ee8d0 Mon Sep 17 00:00:00 2001
-From: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
-Date: Thu, 9 Apr 2025 15:20:32 +0200
-Subject: [PATCH] SPIRV-LLVM-Translator: build shared library
-
-By default SPIRV-LLVM-Translator builds only a static version of the library.
-Unfortunately this might result in linking erros when uninative is in play, if
-libLLVMSPIRV uses symbols which are provided only by the uninative libc and are
-not provided by the host libc.
-
-Upstream-Status: Inappropriate [OE-Specific]
-Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
-
-Index: llvm-project-20.1.1.src/llvm/projects/SPIRV-LLVM-Translator/lib/SPIRV/CMakeLists.txt
-===================================================================
---- llvm-project-20.1.1.src.orig/llvm/projects/SPIRV-LLVM-Translator/lib/SPIRV/CMakeLists.txt
-+++ llvm-project-20.1.1.src/llvm/projects/SPIRV-LLVM-Translator/lib/SPIRV/CMakeLists.txt
-@@ -42,6 +42,7 @@ set(SRC_LIST
- )
- add_llvm_library(LLVMSPIRVLib
-   ${SRC_LIST}
-+  SHARED
-   LINK_COMPONENTS
-     Analysis
-     BitWriter
index 67cd5151df6f551a5316b0d853591b11a1cae878..ba037e59785725cd41dd83a751a1337ffbd204c3 100644 (file)
@@ -155,7 +155,6 @@ EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \
                   -DCMAKE_BUILD_TYPE=Release \
                   -DCMAKE_CXX_FLAGS_RELEASE='${CXXFLAGS} -DNDEBUG -g0' \
                   -DCMAKE_C_FLAGS_RELEASE='${CFLAGS} -DNDEBUG -g0' \
-                  -DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=${S}/llvm/projects/SPIRV-LLVM-Translator/SPIRV-Headers \
                   -DLLVM_ENABLE_PROJECTS='${LLVM_PROJECTS}' \
                   -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR} \
                   -DLLVM_VERSION_SUFFIX='${VER_SUFFIX}' \
@@ -171,7 +170,6 @@ EXTRA_OECMAKE:append:class-nativesdk = "\
                   -DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DLLDB_PYTHON_RELATIVE_PATH=${PYTHON_SITEPACKAGES_DIR} \
                                                   -DLLDB_PYTHON_EXE_RELATIVE_PATH=${PYTHON_PN} \
                                                   -DLLDB_PYTHON_EXT_SUFFIX=${SOLIBSDEV} \
-                                                  -DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=${S}/llvm/projects/SPIRV-LLVM-Translator/SPIRV-Headers \
                                                   -DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain-native.cmake' \
                   -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ranlib \
                   -DCMAKE_AR=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ar \
@@ -187,8 +185,6 @@ EXTRA_OECMAKE:append:class-nativesdk = "\
                   -DPYTHON_EXECUTABLE='${PYTHON}' \
 "
 EXTRA_OECMAKE:append:class-target = "\
-                  -DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=${S}/llvm/projects/SPIRV-LLVM-Translator/SPIRV-Headers \
-' \
                   -DLLVM_NATIVE_TOOL_DIR=${STAGING_BINDIR_NATIVE} \
                   -DLLVM_HEADERS_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-min-tblgen \
                   -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ranlib \
@@ -310,11 +306,11 @@ do_install:append:class-nativesdk () {
     fi
 }
 
-PROVIDES:append:class-native = " llvm-native libclc-native spirv-llvm-translator-native"
-PROVIDES:append:class-target = " llvm libclc spirv-llvm-translator"
-PROVIDES:append:class-nativesdk = " nativesdk-llvm nativesdk-libclc nativesdk-spirv-llvm-translator"
+PROVIDES:append:class-native = " llvm-native libclc-native"
+PROVIDES:append:class-target = " llvm libclc"
+PROVIDES:append:class-nativesdk = " nativesdk-llvm nativesdk-libclc"
 
-PACKAGES =+ "${PN}-libllvm ${PN}-lldb-python ${PN}-libclang-cpp ${PN}-tidy ${PN}-format ${PN}-tools ${PN}-clc ${PN}-spirv \
+PACKAGES =+ "${PN}-libllvm ${PN}-lldb-python ${PN}-libclang-cpp ${PN}-tidy ${PN}-format ${PN}-tools ${PN}-clc \
              libclang lldb lldb-server liblldb llvm-linker-tools"
 
 
@@ -334,7 +330,6 @@ RDEPENDS:${PN}-tools += "\
   perl-module-term-ansicolor \
 "
 
-RPROVIDES:${PN}-spirv = "${MLPREFIX}spirv-llvm-translator"
 RPROVIDES:${PN}-clc = "${MLPREFIX}libclc"
 
 RRECOMMENDS:${PN}-tidy += "${PN}-tools"
@@ -405,11 +400,6 @@ FILES:${PN} += "\
 
 FILES:${PN}-clc += "${datadir}/clc"
 
-FILES:${PN}-spirv = " \
-    ${bindir}/llvm-spirv \
-    ${libdir}/libLLVMSPIRV.so.* \
-"
-
 FILES:lldb = "\
   ${bindir}/lldb \
   ${bindir}/lldb-argdumper \
@@ -456,10 +446,6 @@ INSANE_SKIP:${PN}-lldb-python += "dev-so dev-deps"
 INSANE_SKIP:${MLPREFIX}liblldb = "dev-so"
 INSANE_SKIP:${PN}-libllvm = "dev-so"
 
-# SPIRV-LLVM-Translator provides only static libraries, they are included into
-# the clang-spirv package.
-INSANE_SKIP:${PN}-spirv += "dev-so"
-
 #Avoid SSTATE_SCAN_COMMAND running sed over llvm-config.
 SSTATE_SCAN_FILES:remove = "*-config"
 
index f733566bc88a6feb9bfdfa4b520579c12721f0d9..a7b508039f7dcfc3ecbb45e9ba90cc7221e197b5 100644 (file)
@@ -17,21 +17,8 @@ BASEURI ?= "${LLVM_HTTP}/llvm-project/releases/download/llvmorg-${PV}/llvm-proje
 SOURCEDIR ?= "llvm-project-${PV}.src"
 SRC_URI[sha256sum] = "b6183c41281ee3f23da7fda790c6d4f5877aed103d1e759763b1008bdd0e2c50"
 
-SRCREV_spirv = "6dd8f2a1681a27f16c53d932d2765920f312aeb2"
-SRCREV_spirvheaders = "09913f088a1197aba4aefd300a876b2ebbaa3391"
-SRCREV_FORMAT .= "spirv_spirvheaders"
-# pattern: llvm_branch_200, currently there are no minor releases, so, no llvm_branch_201
-SPIRV_BRANCH = "llvm_release_${@oe.utils.trim_version('${PV}', 1).replace('.', '')}0"
-SPIRVURI = " \
-    git://github.com/KhronosGroup/SPIRV-LLVM-Translator;protocol=https;name=spirv;branch=${SPIRV_BRANCH};destsuffix=llvm-project-${PV}.src/llvm/projects/SPIRV-LLVM-Translator \
-    git://github.com/KhronosGroup/SPIRV-Headers;protocol=https;destsuffix=llvm-project-${PV}.src/llvm/projects/SPIRV-LLVM-Translator/SPIRV-Headers;name=spirvheaders;branch=main \
-    file://spirv-internal-build.patch \
-    file://spirv-shared-library.patch \
-"
-
 SRC_URI = "\
     ${BASEURI} \
-    ${SPIRVURI} \
     file://0001-libcxxabi-Find-libunwind-headers-when-LIBCXXABI_LIBU.patch \
     file://0002-compiler-rt-support-a-new-embedded-linux-target.patch \
     file://0003-compiler-rt-Simplify-cross-compilation.-Don-t-use-na.patch \
diff --git a/meta/recipes-graphics/spir/spirv-llvm-translator_20.1.2.bb b/meta/recipes-graphics/spir/spirv-llvm-translator_20.1.2.bb
new file mode 100644 (file)
index 0000000..bc2bebc
--- /dev/null
@@ -0,0 +1,36 @@
+HOMEPAGE = "https://github.com/KhronosGroup/SPIRV-LLVM-Translator"
+SUMMARY = "LLVM/SPIR-V Bi-Directional Translator, a library and tool for translation between LLVM IR and SPIR-V."
+
+LICENSE = "NCSA"
+LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=47e311aa9caedd1b3abf098bd7814d1d"
+
+# pattern: llvm_branch_200, currently there are no minor releases, so, no llvm_branch_201
+SPIRV_BRANCH = "llvm_release_${@oe.utils.trim_version('${PV}', 1).replace('.', '')}0"
+SRC_URI = " \
+    git://github.com/KhronosGroup/SPIRV-LLVM-Translator;protocol=https;name=spirv;branch=${SPIRV_BRANCH} \
+"
+
+SRCREV_spirv = "6dd8f2a1681a27f16c53d932d2765920f312aeb2"
+
+UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
+
+S = "${WORKDIR}/git"
+
+DEPENDS = "clang spirv-tools spirv-headers"
+
+inherit cmake pkgconfig python3native
+
+# Specify any options you want to pass to cmake using EXTRA_OECMAKE:
+# for CMAKE_SHARED_LIBS=OFF see https://github.com/KhronosGroup/SPIRV-LLVM-Translator/issues/1868
+EXTRA_OECMAKE = "\
+    -DBUILD_SHARED_LIBS=ON \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
+    -DCMAKE_SKIP_RPATH=ON \
+    -DLLVM_EXTERNAL_LIT=lit \
+    -DLLVM_INCLUDE_TESTS=ON \
+    -Wno-dev \
+    -DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=${STAGING_INCDIR}/.. \
+"
+
+BBCLASSEXTEND = "native nativesdk"