File spirv-llvm-translator.spec of Package spirv-llvm-translator
Name: spirv-llvm-translator
Version: 21.1.3
Release: %mkrel 1
Summary: SPIR-V ↔ LLVM IR translator library
Group: Development/Libraries
License: Apache-2.0 WITH LLVM-exception
URL: https://github.com/KhronosGroup/SPIRV-LLVM-Translator
Source0: https://github.com/KhronosGroup/SPIRV-LLVM-Translator/archive/refs/tags/v%{version}.tar.gz
BuildRequires: cmake
BuildRequires: ninja
BuildRequires: gcc
BuildRequires: gcc-c++
BuildRequires: llvm21-devel
BuildRequires: spirv-headers
BuildRequires: spirv-headers-devel
BuildRequires: zlib-devel
%description
SPIR-V LLVM Translator provides bi-directional translation between SPIR-V and
LLVM IR. It builds libLLVMSPIRVLib.a and the llvm-spirv tool, required by Mesa
and other SPIR-V consuming tools.
%prep
%setup -q -n SPIRV-LLVM-Translator-%{version}
# Override FetchContent to use system spirv-headers
mkdir -p cmake
cat > cmake/FetchContent.cmake << 'EOF'
include_guard(GLOBAL)
include(${CMAKE_ROOT}/Modules/FetchContent.cmake OPTIONAL RESULT_VARIABLE _real_fc)
function(FetchContent_Declare name)
if (name STREQUAL "spirv-headers" OR name STREQUAL "SPIRV-Headers")
set(FETCHCONTENT_FULLY_DISCONNECTED ON CACHE BOOL "" FORCE)
set(spirv-headers_SOURCE_DIR "/usr/include/spirv" CACHE PATH "" FORCE)
set(SPIRV-Headers_SOURCE_DIR "/usr/include/spirv" CACHE PATH "" FORCE)
else()
include(${CMAKE_ROOT}/Modules/FetchContent.cmake NO_POLICY_SCOPE)
FetchContent_Declare(${name} ${ARGN})
endif()
endfunction()
function(FetchContent_MakeAvailable)
foreach(dep IN LISTS ARGN)
if (dep STREQUAL "spirv-headers" OR dep STREQUAL "SPIRV-Headers")
if (NOT TARGET spirv-headers)
add_library(spirv-headers INTERFACE)
target_include_directories(spirv-headers INTERFACE "/usr/include/spirv")
endif()
else()
include(${CMAKE_ROOT}/Modules/FetchContent.cmake NO_POLICY_SCOPE)
FetchContent_MakeAvailable(${dep})
endif()
endforeach()
endfunction()
EOF
%build
mkdir build
cd build
cmake .. \
-G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=%{_prefix} \
-DCMAKE_INSTALL_LIBDIR=%{_libdir} \
-DLLVM_DIR=%{_libdir}/cmake/llvm \
-DSPIRV-Headers_SOURCE_DIR=%{_includedir}/spirv \
-DCMAKE_MODULE_PATH=%{_builddir}/SPIRV-LLVM-Translator-%{version}/cmake
ninja -v
%install
cd build
DESTDIR=%{buildroot} ninja install
%files
%license LICENSE.TXT
%doc README.md
/usr/include/LLVMSPIRVLib/*
/usr/lib64/pkgconfig/LLVMSPIRVLib.pc
/usr/lib64/libLLVMSPIRVLib.a
/usr/bin/llvm-spirv
%changelog
* Sat Dec 13 2025 Henrik <henrik@example.com> - 21.1.3-1
- Build static libLLVMSPIRVLib.a only (upstream default)
- Use system spirv-headers via FetchContent override
- Aligned with LLVM21 monolithic libLLVM.so