File opencl-icd-loader.spec of Package opencl-icd-loader
%define realname OpenCL-ICD-Loader
%define realver 2025.07.22
%define srcext tar.gz
%define so_ver 1
# Common info
Name: libOpenCL%{so_ver}
# See CMakeLists.txt
Version: 3.0+git.%(echo %realver | tr -d .)
Release: wiz%{?extraver:0.}1%{?dist}
License: Apache-2.0
Group: System/Libraries
URL: https://github.com/KhronosGroup/OpenCL-ICD-Loader
Summary: The OpenCL ICD Loader project
# Install-time parameters
Provides: %{name} = %{realver}
Provides: %{realname} = %{realver}
Provides: %{realname} = %{version}-%{release}
Provides: opencl-icd-loader = %{realver}
Provides: opencl-icd-loader = %{version}-%{release}
Conflicts: ocs-icd
# Build-time parameters
BuildRequires: gcc-c++
BuildRequires: cmake >= 3.16
BuildRequires: ninja
BuildRequires: opencl-headers
BuildRoot: %{_tmppath}/%{name}-root
Source0: https://github.com/KhronosGroup/OpenCL-ICD-Loader/archive/refs/tags/v%{realver}.%{srcext}#/%{realname}-%{realver}%{?extraver}.%{srcext}
Source1: https://gist.githubusercontent.com/tserj/ed03e874d288be2a485089feed5ac08f/raw/1958327d253cd75b6982235d1da85ba3ad5c0337/clDeviceQuery.cpp
%description
Khronos official OpenCL ICD Loader.
%package -n libOpenCL-devel
Group: Development/Languages/C and C++
Summary: Files required to build software using %{realname}
Requires: opencl-headers
Requires: %{name} = %{version}-%{release}
Provides: %{name}-devel = %{version}-%{release}
Provides: %{name}-devel = %{realver}
Provides: libOpenCL-devel = %{realver}
Provides: %{realname}-devel = %{realver}
Provides: %{realname}-devel = %{version}-%{release}
Provides: opencl-icd-loader-devel = %{realver}
Provides: opencl-icd-loader-devel = %{version}-%{release}
%description -n libOpenCL-devel
Files required to build software using %{realname}.
# Preparation step (unpackung and patching if necessary)
%prep
%setup -q -n %{realname}-%{realver}%{?extraver}
%build
_CFLAGS='%{optflags} %{?gcc_lto}'
_LDFLAGS='-Wl,--as-needed -Wl,--strip-all -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,now -Wl,-z,relro %{?gcc_lto}'
cmake -S . -B build \
-G Ninja \
-DCMAKE_INSTALL_PREFIX=%{_prefix} \
-DCMAKE_INSTALL_LIBDIR=%{_libdir} \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_FLAGS_RELEASE="$_CFLAGS" \
-DCMAKE_EXE_LINKER_FLAGS_RELEASE="$_LDFLAGS" \
-DCMAKE_MODULE_LINKER_FLAGS_RELEASE="$_LDFLAGS" \
-DCMAKE_SHARED_LINKER_FLAGS_RELEASE="$_LDFLAGS" \
-DCMAKE_VERBOSE_MAKEFILE=YES
ninja -v -C build %{?_smp_mflags}
g++ %{S:1} -o clDeviceQuery $_CFLAGS $_LDFLAGS -fno-builtin -Lbuild -lOpenCL
%install
DESTDIR=%{buildroot} ninja -v -C build install
%{__install} -D -m0755 clDeviceQuery %{buildroot}%{_bindir}/clDeviceQuery
%clean
[ "%{buildroot}" != "/" ] && %{__rm} -rf %{buildroot}
%files
%defattr(-,root,root)
%license LICENSE
%doc README.md
%{_bindir}/clDeviceQuery
%{_bindir}/cllayerinfo
%{_libdir}/libOpenCL.so.%{so_ver}*
%files -n libOpenCL-devel
%license LICENSE
%doc README.md
%{_libdir}/libOpenCL.so
%{_libdir}/pkgconfig/OpenCL.pc
%dir %{_datadir}/cmake/OpenCLICDLoader
%dir %{_datadir}/cmake
%{_datadir}/cmake/OpenCLICDLoader/*.cmake
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%changelog