File pcsxr.spec of Package pcsxr
%define debug_package %{nil}
%define __strip /bin/true
%define __brp_mangle_shebangs %{nil}
%global use_clang 0
%global use_lld 0
%global use_lto 0
Name: pcsxr
Version: 1.9.99~git.ca3b98c
Release: 0
Summary: Free Sony PlayStation emulator with PGXP
License: GPL-3.0+
URL: https://github.com/iCatButler/pcsxr
Group: Games
Source0: %{name}-%{version}.tar.gz
Source1: %{name}-icon.png
Source2: card1.mcd
Source3: card2.mcd
Source4: scph1001.bin
Source5: scph7502.bin
%if 0%{?use_clang}
BuildRequires: clang-devel
BuildRequires: npth-devel
%if 0%{?use_lld}
BuildRequires: lld
%else
BuildRequires: llvm-gold
BuildRequires: binutils-gold
%endif
%else
BuildRequires: gcc13
BuildRequires: gcc13-c++
BuildRequires: binutils-gold
%endif
BuildRequires: pkgconfig
Patch2: pcsxr-fix-undefined-operations.patch
Patch3: pcsxr-remove-assertion-64bit.patch
Patch100: pcsxr-harfbuzz.patch
BuildRequires: pkgconfig(gtk+-3.0)
BuildRequires: pkgconfig(glib-2.0) >= 2.20
BuildRequires: pkgconfig(alsa)
BuildRequires: pkgconfig(libpulse)
BuildRequires: pkgconfig(gl)
BuildRequires: pkgconfig(harfbuzz)
BuildRequires: pkgconfig(sdl) >= 1.2.12
BuildRequires: pkgconfig(zlib)
BuildRequires: pkgconfig(x11)
BuildRequires: pkgconfig(xext)
BuildRequires: pkgconfig(xxf86vm)
BuildRequires: pkgconfig(xv)
BuildRequires: pkgconfig(xtst)
BuildRequires: libcdio-devel
#BuildRequires: autoconf
#BuildRequires: automake
#BuildRequires: intltool
#BuildRequires: libtool
BuildRequires: cmake
BuildRequires: gettext-tools
BuildRequires: openal-soft-devel
BuildRequires: ImageMagick
BuildRequires: ffmpeg-devel
BuildRequires: unzip
%if 0%{?fedora}
BuildRequires: SDL2-devel harfbuzz-devel ghostscript-core
BuildRequires: rpm-devel rpm-libs
%endif
%if 0%{?suse_version}
BuildRequires: libSDL2-devel >= 2.26.5
BuildRequires: fdupes
BuildRequires: update-desktop-files
%endif
%description
This application emulates all components of a Sony PlayStation on
regular PC hardware. It features a sophisticated plugin system allowing
for easy extension and is highly configurable.
To be able to play commercial games on this emulator you need an image
of a Sony PlayStation BIOS ROM. The BIOS is copyrighted by Sony
Computer Entertainment and can therefore not be included in this
package.
BIOS images can be placed in ~/.pcsx/bios or /usr/share/psemu/bios.
This znth-blade's fork of iCatButler's fork supports PGXP:
https://www.ngemu.com/threads/pcsxr-pgxp.186369/
%prep
%setup -q -n %{name}-%{version}
%autopatch -p1
#chmod 755 autogen.sh
%build
# this macro needs 'BuildRequires: memory-constraints'
#limit_build -m 2000
ulimit -Sn 4000
UCFLAGS="-D_GNU_SOURCE -march=x86-64 -mtune=generic -mssse3 -msse4 -msse4.1 -msse4.2 -mavx -maes -mpclmul -O3 -fPIC -fno-strict-aliasing"
export ULDFLAGS="-Wl,--gc-sections -Wl,-O1 -Wl,--icf=safe -Wl,--allow-multiple-definition"
%if 0%{?use_lld}
export ULDFLAGS="${ULDFLAGS} -fuse-ld=lld"
export LD="lld"
alias ld=ld.lld
%else
export ULDFLAGS="${ULDFLAGS} -fuse-ld=gold -Wl,--sort-common -Wl,-O1"
export LD=ld.gold
alias ld=gold
%endif
%if 0%{?use_clang}
export CC=clang
export CXX=clang++
export UCFLAGS="${UCFLAGS} -v"
export UCXXFLAGS="${UCFLAGS}"
export HOST="$(${CC} -print-target-triple)"
%if 0%{?use_lto}
%if 0%{?use_lld}
%global _lto_cflags -flto=thin -Wl,--lto-O3 -Wl,--thinlto-jobs=3
%global _lto_ldlags -flto=thin -Wl,--lto-O3 -Wl,--thinlto-jobs=3
%else
%global _lto_cflags -flto=thin
%global _lto_ldlags -flto=thin
%endif
%else
%global _lto_cflags %nil
%global _lto_ldlags %nil
%endif
%else
export CC=gcc-13
export CXX=g++-13
export UCFLAGS="${UCFLAGS} -ftree-parallelize-loops=4 -ftree-vectorize -fvect-cost-model=cheap -fsimd-cost-model=cheap -fpredictive-commoning"
export UCXXFLAGS="${UCFLAGS} -fpermissive"
export HOST="%{_target_platform}"
%if 0%{?use_lto}
%global _lto_cflags -fuse-linker-plugin %_lto_cflags -ffat-lto-objects -flto-odr-type-merging
%global _lto_ldlags -fuse-linker-plugin -flto=thin
%else
%global _lto_cflags %nil
%global _lto_ldlags %nil
%endif
%endif
export TARGET="${HOST}"
export UCFLAGS="${UCFLAGS} %_lto_cflags"
export UCXXFLAGS="${UCXXFLAGS} %_lto_cflags"
export ULDFLAGS="${ULDFLAGS} %_lto_cflags %_lto_ldlags"
# override OBS defaults ?
export CFLAGS="${UCFLAGS}"
export CXXFLAGS="${UCXXFLAGS}"
export LDFLAGS="${ULDFLAGS}"
mkdir build && cd build
cmake \
-DCMAKE_C_COMPILER="${CC}" \
-DCMAKE_CXX_COMPILER="${CXX}" \
-DCMAKE_LINKER="${LD}" \
-DCMAKE_C_FLAGS="${CFLAGS}" \
-DCMAKE_CXX_FLAGS="${CXXFLAGS}" \
-DCMAKE_EXE_LINKER_FLAGS="${LDFLAGS}" \
-DOpenGL_GL_PREFERENCE=GLVND \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=%{_prefix} \
-DCMAKE_INSTALL_LIBDIR=%{_libdir} \
..
make %{?_smp_mflags}
%install
perl -i -l -wpe 's/^(Categories=).*/${1}Game;Simulation;/' %{name}/data/%{name}.desktop
cd build
make install DESTDIR=$RPM_BUILD_ROOT INSTALL="install -p"
# Install icon
for res in 16x16 22x22 24x24 32x32 36x36 48x48 64x64 72x72 96x96; do \
%{__mkdir_p} %{buildroot}%{_datadir}/icons/hicolor/${res}/apps
convert -size 250x250 %{SOURCE1} -resize ${res} %{buildroot}/%{_datadir}/icons/hicolor/${res}/apps/%{name}-icon.png
done;
mkdir -p %{buildroot}%{_datadir}/psemu/bios
#mkdir -p %{buildroot}/etc/skel/.%{name}/memcards
#install -D -m 644 %{SOURCE2} %{buildroot}/etc/skel/.%{name}/memcards/card1.mcd
#install -D -m 644 %{SOURCE3} %{buildroot}/etc/skel/.%{name}/memcards/card2.mcd
install -D -m 644 %{SOURCE4} %{buildroot}%{_datadir}/psemu/bios/scph1001.bin
install -D -m 644 %{SOURCE5} %{buildroot}%{_datadir}/psemu/bios/scph7502.bin
%if 0%{?suse_version}
%suse_update_desktop_file -r %{name} System Emulator
mkdir -p %{buildroot}/%{_docdir}
mv %{buildroot}/%{_datadir}/doc/pcsxr %{buildroot}%{_docdir}/
mv %{buildroot}%{_datadir}/locale/ko_KR/ %{buildroot}%{_datadir}/locale/ko
%endif
%clean
rm -rf %{buildroot}
%post
%if 0%{?suse_version}
%desktop_database_post
%endif
%postun
%if 0%{?suse_version}
%desktop_database_postun
%endif
%files
%defattr(-,root,root,-)
%{_bindir}/%{name}
%dir %{_libdir}/games
%{_libdir}/games/psemu
%dir %{_datadir}/psemu
%{_datadir}/psemu/bios
%{_datadir}/applications/%{name}.desktop
%{_datadir}/locale/*/LC_MESSAGES/%{name}.mo
%{_datadir}/man/man?/%{name}.*
#%{_datadir}/%{name}
#%{_datadir}/pixmaps/%{name}-icon.png
#%{_datadir}/psemu
%{_datadir}/icons/hicolor/*/apps/%{name}*.*
#/etc/skel/.%{name}/memcards
%{_docdir}/pcsxr
%changelog