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

openSUSE Build Service is sponsored by