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}

openSUSE Build Service is sponsored by