File decaf-emu.spec of Package decaf-emu
#
# spec file for package decaf-emu
#
# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
Name: decaf-emu
Version: 20220508T212126
Release: 0
Summary: Wii U Emulator
License: GPL-3.0+
Group: System/Emulators/Other
Url: https://github.com/decaf-emu/decaf-emu
Source: %{name}-%{version}.tar.xz
Source1: FindFFmpeg.cmake
#Patch0: decaf-emu_avoid-own-deps.patch
#Patch1: decaf-remove_git_dep.patch
ExclusiveArch: x86_64
#Factory
#BuildRequires: memory-constraints
BuildRequires: gcc-c++
#BuildRequires: clang-devel
#BuildRequires: llvm-gold
BuildRequires: binutils-gold
#BuildRequires: lld
BuildRequires: cmake
BuildRequires: extra-cmake-modules
BuildRequires: fdupes
BuildRequires: cereal-devel
BuildRequires: glslang-devel
BuildRequires: spirv-tools-devel
BuildRequires: vulkan-headers
BuildRequires: vulkan-tools
BuildRequires: pkgconfig(catch2)
BuildRequires: pkgconfig(fmt)
BuildRequires: pkgconfig(sdl2)
BuildRequires: pkgconfig(zlib)
BuildRequires: pkgconfig(glfw3)
#BuildRequires: pkgconfig(gsl)
BuildRequires: pkgconfig(gl)
BuildRequires: pkgconfig(libglvnd)
BuildRequires: pkgconfig(libcares)
BuildRequires: pkgconfig(libcrypto)
BuildRequires: pkgconfig(libcurl)
BuildRequires: pkgconfig(libuv)
BuildRequires: pkgconfig(vulkan)
BuildRequires: pkgconfig(libopenssl)
BuildRequires: pkgconfig(libuv)
BuildRequires: pkgconfig(libcares)
BuildRequires: glslang-devel
#Qt deps:
BuildRequires: pkgconfig(Qt5Concurrent)
BuildRequires: pkgconfig(Qt5Core)
BuildRequires: pkgconfig(Qt5OpenGL)
BuildRequires: pkgconfig(Qt5Svg)
BuildRequires: pkgconfig(Qt5X11Extras)
BuildRequires: pkgconfig(Qt5Xml)
BuildRequires: pkgconfig(Qt5Widgets)
BuildRequires: libqt5-qtbase-private-headers-devel
#FFMPEG deps_
BuildRequires: pkgconfig(libavcodec)
BuildRequires: pkgconfig(libavdevice)
BuildRequires: pkgconfig(libavfilter)
BuildRequires: pkgconfig(libavformat)
BuildRequires: pkgconfig(libavutil)
BuildRequires: pkgconfig(libswresample)
BuildRequires: pkgconfig(libswscale)
#Wayland deps:
BuildRequires: pkgconfig(wayland-client)
#BuildRequires: pkgconfig(wayland-client++)
BuildRequires: pkgconfig(wayland-egl)
BuildRequires: pkgconfig(wayland-protocols)
BuildRequires: pkgconfig(wayland-server)
%description
Researching Wii U emulation. Licensed under the terms of the GNU General Public License, version 3 or later (GPLv3+).
%prep
%autosetup -p1
rm -rf libraries/catch
rm -rf libraries/cereal
#rm -rf libraries/fmt
#rm -rf libraries/glslang
#rm -rf libraries/gsl
#Adapt FindFFMPEG from ppsspp
#mv %{SOURCE1} CMakeModules/FindFFMPEG.cmake
#Fix wayland include dir
sed -i 's/if(DECAF_PLATFORM_WAYLAND)/if(DECAF_PLATFORM_WAYLAND)\ninclude_directories(${WAYLAND_INCLUDE_DIR})/' src/libgpu/CMakeLists.txt
%build
# this macro needs 'BuildRequires: memory-constraints'
#limit_build -m 2000
ulimit -Sn 4000
#export CC=clang
#export CXX=clang++
# gcc
export CFLAGS="-w -I%{_includedir}/wayland -O2 -ftree-parallelize-loops=4 -ftree-vectorize -fvect-cost-model=cheap -fsimd-cost-model=cheap -fpredictive-commoning"
# LTO
export CFLAGS="${CFLAGS} -flto=%jobs -ffat-lto-objects -flto-odr-type-merging -fuse-linker-plugin"
# clang
#export CFLAGS="-v -g -I/usr/include/wayland -O3 -flto=thin -pipe"
# both
export CXXFLAGS="${CFLAGS} -fpermissive"
# ld
#export LDFLAGS="${LDFLAGS} -Wl,--no-as-needed -Wl,--sort-common -Wl,--no-keep-memory -Wl,-O1 -flto=%jobs -fuse-linker-plugin"
# gold
export LD="gold"
alias ld=gold
export LDFLAGS="-fuse-ld=gold -Wl,--icf=safe -Wl,--sort-common -Wl,-O1"
# LTO
export LDFLAGS="${LDFLAGS} -flto=%jobs -Wl,--no-map-whole-files -Wl,--no-keep-files-mapped"
# lld
#export LD="lld"
#alias ld=ld.lld
#export LDFLAGS="-v -w -fuse-ld=lld"
#export LDFLAGS="-v -flto=thin -fuse-ld=lld -Wl,-O1 -Wl,--icf=safe -Wl,--lto-O3 -Wl,--thinlto-jobs=8"
mkdir build
cd build
cmake .. \
-Wno-dev \
-DADS_VERSION=3.8.1 \
-DBUILD_EXAMPLES=OFF \
-DDECAF_FFMPEG=ON \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="%{_prefix}" \
-DCMAKE_INSTALL_LIBEXEC="%{_libexecdir}" \
-DOpenGL_GL_PREFERENCE=GLVND
%cmake_build
%install
%cmake_install
# Install wrapper(s)
cat > %{buildroot}%{_libexecdir}/%{name}/decaf-common << 'EOF'
if [ -d ~/.config/decaf ] ; then
if ! [ -e ~/.config/decaf/resources ] ; then
ln -sf %{_libexecdir}/%{name}/resources ~/.config/decaf/
fi
else
mkdir -p ~/.config/decaf
ln -sf %{_libexecdir}/%{name}/resources ~/.config/decaf/
fi
EOF
mkdir -p %{buildroot}%{_bindir}
#/usr/bin/decaf-qt
cat > %{buildroot}%{_bindir}/decaf-qt << 'EOF'
#!/bin/sh
[-e ~/.cache/decaf ] || mkdir -p ~/.cache/decaf
TMPDIR=~/.cache/decaf
. %{_libexecdir}/%{name}/decaf-common
cd ~/.config/decaf
exec %{_libexecdir}/%{name}/decaf-qt "$@"
EOF
#/usr/bin/decaf-sdl
cat > %{buildroot}%{_bindir}/decaf-sdl << 'EOF'
#!/bin/sh
[-e ~/.cache/decaf ] || mkdir -p ~/.cache/decaf
TMPDIR=~/.cache/decaf
. %{_libexecdir}/%{name}/decaf-common
cd ~/.config/decaf
exec %{_libexecdir}/%{name}/decaf-sdl "$@"
EOF
#/usr/bin/decaf-cli
cat > %{buildroot}%{_bindir}/decaf-cli << 'EOF'
#!/bin/sh
[-e ~/.cache/decaf ] || mkdir -p ~/.cache/decaf
TMPDIR=~/.cache/decaf
. %{_libexecdir}/%{name}/decaf-common
cd ~/.config/decaf
exec %{_libexecdir}/%{name}/decaf-cli "$@"
EOF
%fdupes %{buildroot}
%check
%ctest
%files
%defattr(-,root,root)
%doc README.md
%license LICENSE.md
%attr(755, root, root) %{_bindir}/decaf-sdl
%attr(755, root, root) %{_bindir}/decaf-cli
%{_libexecdir}/%{name}
%changelog