Files
RedBear-OS/local/recipes/dev/spirv-headers/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

69 lines
3.0 KiB
TOML

[package]
name = "spirv-headers"
# SPIR-V machine-readable headers/grammar. Build-only dependency of SPIRV-Tools
# and SPIRV-LLVM-Translator, which are in turn required by Mesa's CLC shader
# precompile path (with_clc, forced by the Intel iris/ANV drivers we ship).
# Version follows the Red Bear OS branch per local/AGENTS.md.
version = "0.3.1"
description = "SPIR-V machine-readable headers and grammar (KhronosGroup/SPIRV-Headers). Consumed at build time by SPIRV-Tools and SPIRV-LLVM-Translator for Mesa's clc tool."
[source]
git = "https://github.com/KhronosGroup/SPIRV-Headers.git"
branch = "main"
shallow_clone = true
[build]
template = "custom"
# Header-only + install-only: SPIRV-Headers ships headers, the SPIR-V grammar
# JSON, and its find_package(SPIRV-Headers) cmake package. Nothing is compiled,
# so the artifact is architecture-neutral; we install it into the (cross) build
# sysroot /usr so the host-native SPIRV-Tools / SPIRV-LLVM-Translator builds
# resolve find_package(SPIRV-Headers) from ${COOKBOOK_SYSROOT}/usr. We still run
# cmake with a HOST toolchain file (not the cross one) so the generated cmake
# package is not tainted with Redox sysroot paths.
dependencies = []
script = '''
DYNAMIC_INIT
# Use a HOST toolchain file: header-only, but keep cmake off the cross sysroot.
generate_cookbook_cmake_file "${COOKBOOK_HOST_TARGET}" "" "/usr" native_spirvhdr.cmake
# Clear the cross-sysroot flags generate_cookbook_cmake_file injects, else the
# host gcc links against the Redox sysroot libc (-L.../sysroot/lib) and fails
# "undefined reference to __libc_start_main". Mirrors llvm21/native.cmake.
cat >> native_spirvhdr.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 "" CACHE STRING "" FORCE)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM "NEVER" CACHE STRING "" FORCE)
set(ENV{LDFLAGS} "")
set(ENV{CFLAGS} "")
set(ENV{CXXFLAGS} "")
NATIVE_EOF
COOKBOOK_CMAKE_FLAGS=(
-DCMAKE_TOOLCHAIN_FILE="$(realpath native_spirvhdr.cmake)"
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=/usr
-DCMAKE_INSTALL_LIBDIR=lib
-DCMAKE_INSTALL_INCLUDEDIR=include
-DSPIRV_HEADERS_ENABLE_TESTS=OFF
-DSPIRV_HEADERS_ENABLE_INSTALL=ON
-G Ninja
-Wno-dev
)
"${COOKBOOK_CMAKE}" "${COOKBOOK_SOURCE}" "${COOKBOOK_CMAKE_FLAGS[@]}"
"${COOKBOOK_NINJA}" -j"${COOKBOOK_MAKE_JOBS}"
DESTDIR="${COOKBOOK_STAGE}" "${COOKBOOK_NINJA}" install
'''