Files
RedBear-OS/local/recipes/dev/spirv-tools/recipe.toml
T
vasilito e4c78b3d18 mesa: add CLC/SPIRV chain (SPIRV-Headers/Tools/LLVM-Translator) + clang21 dep
Shipping the Intel iris/ANV gallium+vulkan drivers turns on Mesa's with_clc
(with_driver_using_cl), which requires, in the native mesa_clc/intel_clc shader
precompile path: LLVMSPIRVLib (SPIRV-LLVM-Translator), SPIRV-Tools, and clang's
C++ libraries. None had recipes. Add three host-built dev recipes modelled on
libclc (built against llvm-native's host LLVM 21, staged into the cross sysroot
so Mesa's pkg-config resolves them):
  - spirv-headers          (SPIR-V grammar + headers; find_package package)
  - spirv-tools            (SPIRV-Tools.pc; SPIRV-Headers via find_package)
  - spirv-llvm-translator  (LLVMSPIRVLib.pc, v21.1.0.0; llvm_release_210 branch)
All three clear the cross-sysroot __libc_start_main leak with the llvm21-style
flag-clearing block in their native toolchain files.

Wire them + clang21 into mesa deps: Mesa resolves dep_clang via
cpp.find_library('clang-cpp', dirs: llvm-config --libdir), which the wrapper
rewrites to the target sysroot/lib, so clang21's target libclang-cpp.so must be
staged there (shared-llvm=enabled avoids needing the static clang libs).

Verified: mesa meson now passes amdgpu, LLVMSPIRVLib, SPIRV-Tools, and clang-cpp
(next gate is libelf for radeonsi).
2026-07-31 13:42:25 +03:00

99 lines
4.1 KiB
TOML

[package]
name = "spirv-tools"
# SPIR-V assembler/disassembler/validator/optimizer libraries. Required by
# Mesa's CLC shader precompile path (with_clc, forced by the Intel iris/ANV
# drivers) and by SPIRV-LLVM-Translator. Version follows the branch per AGENTS.
version = "0.3.1"
description = "SPIR-V Tools (KhronosGroup/SPIRV-Tools) — libSPIRV-Tools assembler/validator/optimizer. Host-built, consumed by Mesa's native mesa_clc/intel_clc."
[source]
git = "https://github.com/KhronosGroup/SPIRV-Tools.git"
branch = "main"
shallow_clone = true
[build]
template = "custom"
# SPIRV-Tools produces NATIVE-code libraries linked into Mesa's mesa_clc/intel_clc
# tools, which are built native:true when cross-compiling. So this is a HOST
# build (system gcc/g++, NO cross sysroot), installed into the (cross) build
# sysroot /usr so Mesa's target pkg-config resolves dependency('SPIRV-Tools')
# from ${COOKBOOK_SYSROOT}/usr while the host linker links the host library.
# SPIRV-Headers (its grammar JSON + cmake package) is resolved via find_package
# from the staged spirv-headers dependency (CMAKE_PREFIX_PATH below).
dependencies = [
"spirv-headers",
]
script = '''
DYNAMIC_INIT
_SAVED_LDFLAGS="${LDFLAGS:-}"; _SAVED_CFLAGS="${CFLAGS:-}"
_SAVED_CXXFLAGS="${CXXFLAGS:-}"; _SAVED_CPPFLAGS="${CPPFLAGS:-}"
unset LDFLAGS CFLAGS CXXFLAGS CPPFLAGS
# HOST toolchain file (system gcc/g++); do NOT target the cross sysroot.
generate_cookbook_cmake_file "${COOKBOOK_HOST_TARGET}" "" "/usr" native_spirvtools.cmake
# Clear cross-sysroot flags so host gcc/g++ link against the host libc, not the
# Redox sysroot (else "undefined reference to __libc_start_main"). Mirrors
# llvm21/native.cmake. Keep find-root LIBRARY/INCLUDE "BOTH" so find_package can
# still see the staged SPIRV-Headers under the build sysroot /usr.
cat >> native_spirvtools.cmake <<'NATIVE_EOF'
set(CMAKE_C_COMPILER "/usr/bin/gcc" CACHE FILEPATH "" FORCE)
set(CMAKE_CXX_COMPILER "/usr/bin/g++" CACHE FILEPATH "" FORCE)
set(CMAKE_C_FLAGS "" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS "" CACHE STRING "" FORCE)
set(CMAKE_C_FLAGS_RELEASE "-O2" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS_RELEASE "-O2" CACHE STRING "" FORCE)
set(CMAKE_EXE_LINKER_FLAGS "" CACHE STRING "" FORCE)
set(CMAKE_SHARED_LINKER_FLAGS "" CACHE STRING "" FORCE)
set(CMAKE_MODULE_LINKER_FLAGS "" CACHE STRING "" FORCE)
set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "" CACHE STRING "" FORCE)
set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "" CACHE STRING "" FORCE)
set(CMAKE_SYSROOT "" CACHE STRING "" FORCE)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM "NEVER" CACHE STRING "" FORCE)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY "BOTH" CACHE STRING "" FORCE)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE "BOTH" CACHE STRING "" FORCE)
set(ENV{LDFLAGS} "")
set(ENV{CFLAGS} "")
set(ENV{CXXFLAGS} "")
NATIVE_EOF
# The staged spirv-headers (its cmake package + grammar JSON) lives under the
# build sysroot /usr. Point find_package(SPIRV-Headers) at it.
HDR_PREFIX="${COOKBOOK_SYSROOT}/usr"
COOKBOOK_CMAKE_FLAGS=(
-DCMAKE_TOOLCHAIN_FILE="$(realpath native_spirvtools.cmake)"
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_PREFIX_PATH="${HDR_PREFIX}"
-DSPIRV-Headers_SOURCE_DIR="${HDR_PREFIX}"
-DSPIRV_SKIP_TESTS=ON
-DSPIRV_SKIP_EXECUTABLES=OFF
-DSPIRV_WERROR=OFF
-DSPIRV_TOOLS_BUILD_STATIC=ON
-DBUILD_SHARED_LIBS=ON
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
-DCMAKE_INSTALL_PREFIX=/usr
-DCMAKE_INSTALL_LIBDIR=lib
-DCMAKE_INSTALL_INCLUDEDIR=include
-G Ninja
-Wno-dev
)
"${COOKBOOK_CMAKE}" "${COOKBOOK_SOURCE}" "${COOKBOOK_CMAKE_FLAGS[@]}"
"${COOKBOOK_NINJA}" -j"${COOKBOOK_MAKE_JOBS}"
DESTDIR="${COOKBOOK_STAGE}" "${COOKBOOK_NINJA}" install
export LDFLAGS="$_SAVED_LDFLAGS"; export CFLAGS="$_SAVED_CFLAGS"
export CXXFLAGS="$_SAVED_CXXFLAGS"; export CPPFLAGS="$_SAVED_CPPFLAGS"
# Relocate any pkgconfig from share/pkgconfig to lib/pkgconfig (cookbook
# convention that mesa's pkg-config lookup uses).
if [ -d "${COOKBOOK_STAGE}/usr/share/pkgconfig" ]; then
mkdir -p "${COOKBOOK_STAGE}/usr/lib/pkgconfig"
for pc in "${COOKBOOK_STAGE}/usr/share/pkgconfig/"*.pc; do
[ -f "$pc" ] || continue
mv "$pc" "${COOKBOOK_STAGE}/usr/lib/pkgconfig/"
done
fi
'''