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
openSUSE Build Service is sponsored by