mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 12:59:02 +02:00
llvm: add SPIRV-LLVM-Translator support
Mesa builds require SPIRV-LLVM-Translator in order to build CLC support. While it is possible to build it separately (like meta-clang does), it also requires a separate clang compiler (which OE-Core doesn't provide). Use an alternative path and build SPIRV-LLVM-Translator as a part of the LLVM build process, lifting the requirement for the separate clang. Once Clang is properly integrated into the OE-Core layer, this can be split to a separate package and dropped. In order to ease migration from meta-clang and to ease future split, PROVIDE the spirv-llvm-translator and make the llvm-spirv package RPROVIDE spirv-llvm-translator. (From OE-Core rev: a617aaf3ac6b1ef2f4b0aaf6ca60122425ea6a7e) Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
c3a1f9b863
commit
377a1cd823
30
meta/recipes-devtools/llvm/llvm/spirv-internal-build.patch
Normal file
30
meta/recipes-devtools/llvm/llvm/spirv-internal-build.patch
Normal file
|
@ -0,0 +1,30 @@
|
|||
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)
|
25
meta/recipes-devtools/llvm/llvm/spirv-shared-library.patch
Normal file
25
meta/recipes-devtools/llvm/llvm/spirv-shared-library.patch
Normal file
|
@ -0,0 +1,25 @@
|
|||
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
|
|
@ -23,9 +23,23 @@ MAJ_MIN_VERSION = "${@oe.utils.trim_version("${PV}", 2)}"
|
|||
|
||||
LLVM_RELEASE = "${PV}"
|
||||
|
||||
SRCREV_spirv = "68edc9d3d10ff6ec6353803a1bc60a5c25e7b715"
|
||||
# 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_SPIRV = " \
|
||||
git://github.com/KhronosGroup/SPIRV-LLVM-Translator;protocol=https;name=spirv;branch=${SPIRV_BRANCH};destsuffix=llvm-project-${PV}.src/llvm/projects/SPIRV-LLVM-Translator \
|
||||
file://spirv-internal-build.patch \
|
||||
"
|
||||
|
||||
SRC_URI_SPIRV:append:class-native = " \
|
||||
file://spirv-shared-library.patch \
|
||||
"
|
||||
|
||||
SRC_URI = "https://github.com/llvm/llvm-project/releases/download/llvmorg-${PV}/llvm-project-${PV}.src.tar.xz \
|
||||
file://0007-llvm-allow-env-override-of-exe-path.patch \
|
||||
file://0001-AsmMatcherEmitter-sort-ClassInfo-lists-by-name-as-we.patch \
|
||||
${@bb.utils.contains('PACKAGECONFIG', 'spirv-llvm-translator', '${SRC_URI_SPIRV}', '', d)} \
|
||||
file://llvm-config \
|
||||
"
|
||||
SRC_URI[sha256sum] = "f0a4a240aabc9b056142d14d5478bb6d962aeac549cbd75b809f5499240a8b38"
|
||||
|
@ -58,11 +72,12 @@ def get_llvm_arch(bb, d, arch_var):
|
|||
def get_llvm_host_arch(bb, d):
|
||||
return get_llvm_arch(bb, d, 'HOST_ARCH')
|
||||
|
||||
PACKAGECONFIG ??= "libllvm libclc"
|
||||
PACKAGECONFIG ??= "libllvm libclc spirv-llvm-translator"
|
||||
# if optviewer OFF, force the modules to be not found or the ones on the host would be found
|
||||
PACKAGECONFIG[optviewer] = ",-DPY_PYGMENTS_FOUND=OFF -DPY_PYGMENTS_LEXERS_C_CPP_FOUND=OFF -DPY_YAML_FOUND=OFF,python3-pygments python3-pyyaml,python3-pygments python3-pyyaml"
|
||||
PACKAGECONFIG[libllvm] = ""
|
||||
PACKAGECONFIG[libclc] = ""
|
||||
PACKAGECONFIG[spirv-llvm-translator] = "-DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=${STAGING_INCDIR}/.. ,,spirv-tools-native spirv-headers"
|
||||
|
||||
#
|
||||
# Default to build all OE-Core supported target arches (user overridable).
|
||||
|
@ -72,7 +87,9 @@ LLVM_TARGETS ?= "AMDGPU;NVPTX;SPIRV;${@get_llvm_host_arch(bb, d)}"
|
|||
ARM_INSTRUCTION_SET:armv5 = "arm"
|
||||
ARM_INSTRUCTION_SET:armv4t = "arm"
|
||||
|
||||
LLVM_PROJECTS = "${@bb.utils.contains('PACKAGECONFIG', 'libclc', 'clang;libclc', '', d)}"
|
||||
LLVM_PROJECTS_CLANG = "${@bb.utils.contains_any('PACKAGECONFIG', 'libclc spirv-llvm-translator', 'clang', '', d)}"
|
||||
LLVM_PROJECTS_CLC = "${@bb.utils.contains('PACKAGECONFIG', 'libclc', ';libclc', '', d)}"
|
||||
LLVM_PROJECTS = "${LLVM_PROJECTS_CLANG}${LLVM_PROJECTS_CLC}"
|
||||
|
||||
EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \
|
||||
-DLLVM_ENABLE_EXPENSIVE_CHECKS=OFF \
|
||||
|
@ -138,7 +155,7 @@ do_install() {
|
|||
fi
|
||||
|
||||
# Remove clang bits from target packages, we are not providing it for the system
|
||||
if ${@bb.utils.contains('PACKAGECONFIG', 'libclc', 'true', 'false', d)} &&
|
||||
if ${@bb.utils.contains_any('PACKAGECONFIG', 'libclc spirv-llvm-translator', 'true', 'false', d)} &&
|
||||
[ "${CLASSOVERRIDE}" != "class-native" ] ; then
|
||||
rm -f ${D}${bindir}/clang*
|
||||
rm -fr ${D}${libdir}/clang
|
||||
|
@ -176,11 +193,12 @@ llvm_sysroot_preprocess() {
|
|||
ln -sf llvm-config ${SYSROOT_DESTDIR}${bindir_crossscripts}/llvm-config${PV}
|
||||
}
|
||||
|
||||
PACKAGES =+ "${PN}-bugpointpasses ${PN}-llvmhello ${PN}-libllvm ${PN}-liboptremarks ${PN}-liblto ${PN}-clc"
|
||||
PROVIDES = "${@bb.utils.filter('PACKAGECONFIG', 'libclc', d)}"
|
||||
PACKAGES =+ "${PN}-bugpointpasses ${PN}-llvmhello ${PN}-libllvm ${PN}-liboptremarks ${PN}-liblto ${PN}-clc ${PN}-spirv"
|
||||
PROVIDES = "${@bb.utils.filter('PACKAGECONFIG', 'libclc spirv-llvm-translator', d)}"
|
||||
|
||||
RRECOMMENDS:${PN}-dev += "${PN}-bugpointpasses ${PN}-llvmhello ${PN}-liboptremarks"
|
||||
RPROVIDES:${PN}-clc = "${@bb.utils.filter('PACKAGECONFIG', 'libclc', d)}"
|
||||
RPROVIDES:${PN}-spirv = "${@bb.utils.filter('PACKAGECONFIG', 'spirv-llvm-translator', d)}"
|
||||
|
||||
FILES:${PN}-bugpointpasses = "\
|
||||
${libdir}/BugpointPasses.so \
|
||||
|
@ -215,6 +233,17 @@ FILES:${PN}-staticdev += "\
|
|||
|
||||
FILES:${PN}-clc += "${datadir}/clc"
|
||||
|
||||
FILES:${PN}-spirv = " \
|
||||
${bindir}/llvm-spirv \
|
||||
${includedir}/LLVMSPIRVLib \
|
||||
${libdir}/pkgconfig/LLVMSPIRVLib.pc \
|
||||
${libdir}/libLLVMSPIRV* \
|
||||
"
|
||||
|
||||
INSANE_SKIP:${PN}-libllvm += "dev-so"
|
||||
|
||||
# SPIRV-LLVM-Translator provides only static libraries, they are included into
|
||||
# the llvm-spirv package.
|
||||
INSANE_SKIP:${PN}-spirv += "staticdev"
|
||||
|
||||
BBCLASSEXTEND = "native nativesdk"
|
||||
|
|
Loading…
Reference in New Issue
Block a user