%global asahi_mesa_ver 20241204
%global git_tag asahi-%{asahi_mesa_ver}
%global basever 25.0.0
%global ver %{basever}-asahipre%{asahi_mesa_ver}
%global sdk_ver 24.08
%global llvm_major 18

%global libclc_ver llvmorg-18.1.8
%global spirv_tools_ver v2024.2
%global spirv_headers_ver vulkan-sdk-1.3.283.0
%global spirv_llvm_translator_ver v18.1.2
%global pyyaml_ver 6.0.2
%global wl_procols_ver 1.38

Name:           mesa-asahi-%{sdk_ver}-flatpak
Summary:        Mesa graphics libraries Flatpak overlay
Version:        %{lua:ver = string.gsub(rpm.expand("%{ver}"), "-", "~"); print(ver)}
Release:        2
License:        MIT
URL:            http://www.mesa3d.org

Source0:        org.freedesktop.Platform.GL.host.yml
Source1:        bwrapwrapper

Source10:        https://gitlab.freedesktop.org/asahi/mesa/-/archive/%{git_tag}/mesa-%{git_tag}.tar.gz
Source11:        https://github.com/KhronosGroup/SPIRV-LLVM-Translator/archive/refs/tags/%{spirv_llvm_translator_ver}.tar.gz
Source12:        https://github.com/KhronosGroup/SPIRV-Headers/archive/refs/tags/%{spirv_headers_ver}.tar.gz
Source13:        https://github.com/KhronosGroup/SPIRV-Tools/archive/refs/tags/%{spirv_tools_ver}.tar.gz
Source14:        https://github.com/llvm/llvm-project/archive/refs/tags/%{libclc_ver}.tar.gz
Source15:        https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-%{pyyaml_ver}.tar.gz
Source17:        https://gitlab.freedesktop.org/wayland/wayland-protocols/-/releases/%{wl_procols_ver}/downloads/wayland-protocols-%{wl_procols_ver}.tar.xz

Requires:       flatpak

BuildRequires:  patchelf
BuildRequires:  flatpak-builder
BuildRequires:  fdo-runtime-%{sdk_ver}-flatpak
BuildRequires:  fdo-sdk-%{sdk_ver}-flatpak
BuildRequires:  fdo-sdk-extension-llvm%{llvm_major}-%{sdk_ver}-flatpak
BuildRequires:  fdo-sdk-extension-rust-stable-%{sdk_ver}-flatpak
# Missing from the Flatpak rust SDK extension, but the Fedora one works
BuildRequires:  bindgen-cli

# We don't want any automatic provides/requires since this is a Flatpak, not a system app
%global __provides_exclude_from ^.*$
%global __requires_exclude_from ^.*$

%description
%{summary}.

%prep
sed \
  -e "s,\%SRC_MESA,%SOURCE10,g" \
  -e "s,\%SRC_SPIRV_LLVM_TRANSLATOR,%SOURCE11,g" \
  -e "s,\%SRC_SPIRV_HEADERS,%SOURCE12,g" \
  -e "s,\%SRC_SPIRV_TOOLS,%SOURCE13,g" \
  -e "s,\%SRC_LIBCLC,%SOURCE14,g" \
  -e "s,\%SRC_PYYAML,%SOURCE15,g" \
  -e "s,\%SRC_WL_PROTOCOLS,%SOURCE17,g" \
  %SOURCE0 > org.freedesktop.Platform.GL.host.yml

cp %SOURCE1 .

cat << EOF > mesa-asahi-version.patch
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-%{basever}-devel
+%{basever}-asahi%{asahi_mesa_ver}
EOF

chmod +x bwrapwrapper

flatpak remote-add --user flathub https://0.0.0.0
flatpak remote-modify --user --collection-id=org.flathub.Stable flathub
flatpak install --assumeyes --user flathub --sideload-repo=/usr/share/flatpak-sideload/fdo-sdk-%{sdk_ver}/ org.freedesktop.Sdk//%{sdk_ver}
flatpak install --assumeyes --user flathub --sideload-repo=/usr/share/flatpak-sideload/fdo-runtime-%{sdk_ver}/ org.freedesktop.Platform//%{sdk_ver}
flatpak install --assumeyes --user flathub --sideload-repo=/usr/share/flatpak-sideload/fdo-sdk-extension-llvm%{llvm_major}-%{sdk_ver}/ org.freedesktop.Sdk.Extension.llvm%{llvm_major}//%{sdk_ver}
flatpak install --assumeyes --user flathub --sideload-repo=/usr/share/flatpak-sideload/fdo-sdk-extension-rust-stable-%{sdk_ver}/ org.freedesktop.Sdk.Extension.rust-stable//%{sdk_ver}

%build
FLATPAK_BWRAP=$PWD/bwrapwrapper flatpak-builder --disable-rofiles-fuse --extra-sources=%{_sourcedir} build org.freedesktop.Platform.GL.host.yml

# add DT_RUNPATH to ensure that libgallium-*.so is found even with a stale ld.so.cache
# https://github.com/flatpak/flatpak/issues/5948
patchelf --add-rpath /usr/lib/%{_arch}-linux-gnu/GL/host/lib/ build/files/lib/libEGL_mesa.so.0.0.0
patchelf --add-rpath /usr/lib/%{_arch}-linux-gnu/GL/host/lib/ build/files/lib/libGLX_mesa.so
patchelf --add-rpath /usr/lib/%{_arch}-linux-gnu/GL/host/lib/ build/files/lib/gbm/dri_gbm.so
patchelf --add-rpath /usr/lib/%{_arch}-linux-gnu/GL/host/lib/ build/files/lib/libRusticlOpenCL.so.1.0.0
patchelf --add-rpath /usr/lib/%{_arch}-linux-gnu/GL/host/lib/ build/files/lib/libclang-cpp.so.18.1

# Make icd lib path absolute so it can be found without the ld.so cache update
sed -i -e "s,^,/usr/lib/%{_arch}-linux-gnu/GL/host/lib/," build/files/etc/OpenCL/vendors/rusticl.icd

%install
mkdir -p %{buildroot}%{_sharedstatedir}/flatpak/extension/org.freedesktop.Platform.GL.host/$(flatpak --default-arch)/
mv build/files %{buildroot}%{_sharedstatedir}/flatpak/extension/org.freedesktop.Platform.GL.host/$(flatpak --default-arch)/%{sdk_ver}
ln -s share/glvnd share/vulkan etc/OpenCL %{buildroot}%{_sharedstatedir}/flatpak/extension/org.freedesktop.Platform.GL.host/$(flatpak --default-arch)/%{sdk_ver}/

%files
%{_sharedstatedir}/flatpak/extension/org.freedesktop.Platform.GL.host/

%changelog
* Fri Dec 06 2024 Asahi Lina <lina@asahilina.net> - 25.0.0~asahipre20241204-2
- Enable RustiCL
- Fix paths in the x86_64 build

* Wed Dec 04 2024 Asahi Lina <lina@asahilina.net> - 25.0.0~asahipre20241204-1
- Bump to mesa-asahi-20241204

* Mon Dec 02 2024 Janne Grunau <janne-fdr@jannau.net> - 25.0.0~asahipre20241202.2-1
- Bump to mesa-asahi-20241202.2

* Sun Dec 01 2024 Janne Grunau <janne-fdr@jannau.net> - 25.0.0~asahipre20241201-1
- Bump to mesa-asahi-20241201

* Mon Nov 11 2024 Asahi Lina <lina@asahilina.net> - 24.3.0~asahipre20241111-1
- Bump to mesa-asahi-20241111

* Mon Nov 11 2024 Asahi Lina <lina@asahilina.net> - 24.3.0~asahipre20241109-1
- Bump to mesa-asahi-20241109

* Mon Nov 04 2024 Asahi Lina <lina@asahilina.net> - 24.3.0~asahipre20241104-1
- Bump to mesa-asahi-20241104

* Wed Oct 09 2024 Janne Grunau <janne-fdr@jannau.net> - 24.3.0~asahipre20241006-1
- Bump to mesa-asahi-20241006

* Fri Oct 04 2024 Janne Grunau <janne-fdr@jannau.net> - 24.3.0~asahipre20241004-1
- Bump to mesa-asahi-20241004
- Use the asahi tag as mesa version

* Mon Sep 30 2024 Janne Grunau <janne-fdr@jannau.net> - 24.3.0~asahipre20240930-1
- Bump to mesa-asahi-20240930
- Remove 'bin/' from the packaged extension
- Fix stale ld.so.cache issue with DT_RUNPATH

* Thu Sep 26 2024 Janne Grunau <janne-fdr@jannau.net> - 24.3.0~asahipre20240925-1
- Bump mesa to asahi-20240925

* Wed Sep 25 2024 Janne Grunau <janne-fdr@jannau.net> - 24.2.0~asahipre20240727-2
- Build for 24.08 freedesktop SDK

* Sun Jul 28 2024 Janne Grunau <janne-fdr@jannau.net> - 24.2.0~asahipre20240727-1
- Bump to 24.2.0~asahipre20240727-1 (using asahi UAPI to 10011)

* Thu Jul 25 2024 Hector Martin <marcan@fedoraproject.org> - 24.2.0~asahipre20240725-1
- Bump to 24.2.0~asahipre20240725-1

* Tue Jul 16 2024 Hector Martin <marcan@fedoraproject.org> - 24.2.0~asahipre20240527-2
- Rename extension to `host`, drop env override, drop libdrm

* Mon Jul 15 2024 Hector Martin <marcan@fedoraproject.org> - 24.2.0~asahipre20240527-1
- Initial release