diff mbox series

clang: split SPIRV-LLVM-Translator to its own recipe

Message ID 20250506000359.1784075-1-dmitry.baryshkov@oss.qualcomm.com
State New
Headers show
Series clang: split SPIRV-LLVM-Translator to its own recipe | expand

Commit Message

Dmitry Baryshkov May 6, 2025, 12:03 a.m. UTC
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>
---
 meta/conf/distro/include/maintainers.inc      |  1 +
 .../clang/clang/spirv-internal-build.patch    | 30 ----------------
 .../clang/clang/spirv-shared-library.patch    | 25 -------------
 meta/recipes-devtools/clang/clang_git.bb      | 22 +++---------
 meta/recipes-devtools/clang/common.inc        | 13 -------
 .../spir/spirv-llvm-translator_20.1.2.bb      | 36 +++++++++++++++++++
 6 files changed, 41 insertions(+), 86 deletions(-)
 delete mode 100644 meta/recipes-devtools/clang/clang/spirv-internal-build.patch
 delete mode 100644 meta/recipes-devtools/clang/clang/spirv-shared-library.patch
 create mode 100644 meta/recipes-graphics/spir/spirv-llvm-translator_20.1.2.bb
diff mbox series

Patch

diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc
index b67433d4d2b6..7d4a8e24174f 100644
--- a/meta/conf/distro/include/maintainers.inc
+++ b/meta/conf/distro/include/maintainers.inc
@@ -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
index 555d40f4fb07..000000000000
--- a/meta/recipes-devtools/clang/clang/spirv-internal-build.patch
+++ /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
index edc595d57699..000000000000
--- a/meta/recipes-devtools/clang/clang/spirv-shared-library.patch
+++ /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
diff --git a/meta/recipes-devtools/clang/clang_git.bb b/meta/recipes-devtools/clang/clang_git.bb
index 67cd5151df6f..ba037e597857 100644
--- a/meta/recipes-devtools/clang/clang_git.bb
+++ b/meta/recipes-devtools/clang/clang_git.bb
@@ -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"
 
diff --git a/meta/recipes-devtools/clang/common.inc b/meta/recipes-devtools/clang/common.inc
index f733566bc88a..a7b508039f7d 100644
--- a/meta/recipes-devtools/clang/common.inc
+++ b/meta/recipes-devtools/clang/common.inc
@@ -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
index 000000000000..bc2bebcda882
--- /dev/null
+++ b/meta/recipes-graphics/spir/spirv-llvm-translator_20.1.2.bb
@@ -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"