File pclos-duckstation.spec of Package duckstation
%global __brp_check_rpaths %{nil}
%global toolchain clang
Name: duckstation
Summary: Sony PlayStation(TM) Emulator
Version: 6d3b177714eb0c58c6b8538f0175edb95be80536
Release: 27.3
License: GPL3
Group: Emulators
Url: https://github.com/stenzek/duckstation
Source0: %{name}-%{version}.tar.gz
Source1: shaderc-f60bb80e255144e71776e2ad570d89b78ea2ab4f.tar.gz
Source2: soundtouch-master.tar.gz
Source3: discord-rpc.tar.gz
Source4: lunasvg.tar.gz
Patch0: 01-ftbfs.diff
Patch1: 02-data-root.diff
BuildRoot: %{_tmppath}/%{name}-buildroot
#---------------------------------------------
BuildRequires: cmake
BuildRequires: git
BuildRequires: SDL2-devel
BuildRequires: qt6-qtbase-devel
BuildRequires: qt6-qttools-devel
BuildRequires: curl-devel
BuildRequires: pulseaudio-libs-devel
BuildRequires: xorg-x11-proto-devel
BuildRequires: libXrandr-devel
BuildRequires: libXrender-devel
BuildRequires: libxkbcommon-devel
BuildRequires: qt6-qtbase-private-devel
BuildRequires: clang-libs
BuildRequires: util-linux-core
BuildRequires: wayland-devel
BuildRequires: egl-wayland-devel
BuildRequires: extra-cmake-modules
BuildRequires: clang
BuildRequires: lld
BuildRequires: harfbuzz-devel
BuildRequires: cpuinfo-devel
BuildRequires: systemd-devel
BuildRequires: dbus-devel
BuildRequires: libwebp-devel
BuildRequires: libjpeg-devel
BuildRequires: spirv-cross-devel
#----------------------------------------------------------------------------
%description
DuckStation is an simulator/emulator of the Sony PlayStation(TM) console, focusing on playability, speed, and long-term maintainability.
The goal is to be as accurate as possible while maintaining performance suitable for low-end devices.
"Hack" options are discouraged, the default configuration should support all playable games with only
some of the enhancements having compatibility issues.
A "BIOS" ROM image is required to to start the emulator and to play games.
#----------------------------------------------------------------------------
%prep
%setup -qn %{name}-%{version} -a 1 -a 2 -a 3 -a 4
%patch 0 -p1
%patch 1 -p1
%build
# these are patched version by upstream, do not use distro-shipped version
cd %{_builddir}/%{name}-%{version}/shaderc-f60bb80e255144e71776e2ad570d89b78ea2ab4f
cmake . \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH="%{_builddir}/%{name}-%{version}" \
-DCMAKE_INSTALL_PREFIX="%{_builddir}/%{name}-%{version}" \
-DSHADERC_SKIP_TESTS=ON \
-DSHADERC_SKIP_EXAMPLES=ON \
-DSHADERC_SKIP_COPYRIGHT_CHECK=ON \
-DCMAKE_COMPILE_WARNING_AS_ERROR=OFF
make -j`nproc`
make install
cd ..
cd %{_builddir}/%{name}-%{version}/soundtouch
cmake . \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH="%{_builddir}/%{name}-%{version}" \
-DCMAKE_INSTALL_PREFIX="%{_builddir}/%{name}-%{version}" \
-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \
-DCMAKE_COMPILE_WARNING_AS_ERROR=OFF
make -j`nproc`
make install
cd ..
cd %{_builddir}/%{name}-%{version}/lunasvg
cmake . \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH="%{_builddir}/%{name}-%{version}" \
-DCMAKE_INSTALL_PREFIX="%{_builddir}/%{name}-%{version}" \
-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \
-DCMAKE_COMPILE_WARNING_AS_ERROR=OFF \
-DBUILD_SHARED_LIBS=ON -DLUNASVG_BUILD_EXAMPLES=OFF
make -j`nproc`
make install
cd ..
cd %{_builddir}/%{name}-%{version}/discord-rpc
cmake . \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH="%{_builddir}/%{name}-%{version}" \
-DCMAKE_INSTALL_PREFIX="%{_builddir}/%{name}-%{version}" \
-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \
-DCMAKE_COMPILE_WARNING_AS_ERROR=OFF
make -j`nproc`
make install
cd ..
mkdir -p %{_builddir}/%{name}-%{version}/%{_vpath_builddir}/bin/resources
cd %{_builddir}/%{name}-%{version}/%{_vpath_builddir}
cmake %{_builddir}/%{name}-%{version} \
-DCMAKE_PREFIX_PATH="%{_builddir}/%{name}-%{version}/lib64/cmake" \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_EXE_LINKER_FLAGS_INIT="-fuse-ld=lld" \
-DCMAKE_MODULE_LINKER_FLAGS_INIT="-fuse-ld=lld" \
-DCMAKE_SHARED_LINKER_FLAGS_INIT="-fuse-ld=lld" \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON
mkdir -p %{_vpath_builddir}/bin/resources
make -j`nproc`
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}%{_bindir}
cat > %buildroot%_bindir/%{name} << EOF
#!/bin/sh
cd %{_datadir}/%{name}/
export LD_LIBRARY_PATH=%{_libexecdir}/%{name}:\$LD_LIBRARY_PATH
%{_libexecdir}/%{name}/%{name}-qt \$@
EOF
chmod a+x %{buildroot}%{_bindir}/%{name}
mkdir -p %{buildroot}%{_datadir}/%{name}/
cp -arv %{_vpath_builddir}/bin/* %{buildroot}%{_datadir}/%{name}/
mkdir -p %{buildroot}%{_libexecdir}/%{name}/
mv %{buildroot}%{_datadir}/%{name}/%{name}-qt %{buildroot}%{_libexecdir}/%{name}/%{name}-qt
install -m644 %{_builddir}/%{name}-%{version}/lib64/libshaderc_shared.so %{buildroot}%{_libexecdir}/%{name}/libshaderc_shared.so
install -m644 %{_builddir}/%{name}-%{version}/lib64/liblunasvg.so %{buildroot}%{_libexecdir}/%{name}/liblunasvg.so
install -m644 %{_builddir}/%{name}-%{version}/lib64/libsoundtouch.so.2.3.3 %{buildroot}%{_libexecdir}/%{name}/libsoundtouch.so.2
install -d -m 0755 %buildroot%_datadir/pixmaps
cp %{_vpath_builddir}/bin/resources/images/duck.png %{buildroot}%{_datadir}/pixmaps/%{name}.png
install -d %{buildroot}%{_datadir}/applications
cat > %{buildroot}%{_datadir}/applications/%{name}.desktop << EOF
[Desktop Entry]
Name=Duckstation
Comment=%{summary}
Exec=%{_bindir}/%{name}
Icon=%{name}
Terminal=false
Type=Application
StartupNotify=true
Categories=Game;X-MandrivaLinux-MoreApplications-Emulators;
EOF
%files
%doc LICENSE README.md CONTRIBUTORS.md
%_bindir/%{name}
%{_libexecdir}/%{name}/*
%{_datadir}/%{name}/*
%{_datadir}/pixmaps/%{name}.png
%{_datadir}/applications/%{name}.desktop
%clean
rm -rf %{buildroot}
rm -rf $RPM_BUILD_DIR/%{name}-%{version}