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: gcc-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
export CXX=g++
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
openSUSE Build Service is sponsored by