emulators/yuzu: add new port

PR:		228487
Submitted by:	Greg V <greg@unrelenting.technology> (based on)
This commit is contained in:
Jan Beich 2019-06-30 00:26:16 +00:00
parent fdeae4f456
commit b51dc2d2fe
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=505393
8 changed files with 404 additions and 0 deletions

View file

@ -173,6 +173,8 @@
SUBDIR += xen-kernel47
SUBDIR += xhomer
SUBDIR += xsystem35
SUBDIR += yuzu
SUBDIR += yuzu-qt5
SUBDIR += xzx
SUBDIR += zsnes

View file

@ -0,0 +1,10 @@
# $FreeBSD$
PORTREVISION= 0
PKGNAMESUFFIX= -qt5
MASTERDIR= ${.CURDIR}/../yuzu
OPTIONS_SLAVE= QT5
.include "${MASTERDIR}/Makefile"

99
emulators/yuzu/Makefile Normal file
View file

@ -0,0 +1,99 @@
# $FreeBSD$
PORTNAME= yuzu
PORTVERSION= s20190629
PORTREVISION?= 0
CATEGORIES= emulators
MAINTAINER= jbeich@FreeBSD.org
COMMENT= Nintendo Switch emulator/debugger
LICENSE= APACHE20 BSD2CLAUSE BSD3CLAUSE BSL GPLv2+ ISCL LGPL21+ MIT OpenSSL UNLICENSE
LICENSE_COMB= multi
LICENSE_FILE_BSD2CLAUSE=${WRKSRC}/externals/fmt/LICENSE.rst
LICENSE_FILE_BSD3CLAUSE=${WRKSRC}/externals/inih/inih/LICENSE.txt
LICENSE_FILE_BSL= ${WRKSRC}/externals/catch/LICENSE.txt
LICENSE_FILE_GPLv2+ = ${WRKSRC}/license.txt
LICENSE_FILE_ISCL= ${WRKSRC}/externals/cubeb/LICENSE
LICENSE_FILE_LGPL21+ = ${_LICENSE_STORE}/LGPL21 # soundtouch
LICENSE_FILE_LGPL3+ = ${_LICENSE_STORE}/LGPL3 # sirit
LICENSE_FILE_MIT= ${WRKSRC}/externals/sirit/externals/SPIRV-Headers/LICENSE
LICENSE_FILE_OpenSSL= ${WRKSRC}/externals/libressl/COPYING
ONLY_FOR_ARCHS= aarch64 amd64 powerpc64
ONLY_FOR_ARCHS_REASON= requires int128
BUILD_DEPENDS= boost-libs>=1.66:devel/boost-libs \
gmake:devel/gmake
USE_GITHUB= yes
GH_ACCOUNT= yuzu-emu
GH_TAGNAME= 1ca2b504b
GH_TUPLE= yuzu-emu:unicorn:1.0.1-153-g73f45735:unicorn/externals/unicorn \
DarkLordZach:mbedtls:a280e60:mbedtls/externals/mbedtls \
KhronosGroup:SPIRV-Headers:2c51218:SPIRV_Headers/externals/sirit/externals/SPIRV-Headers \
KhronosGroup:Vulkan-Headers:v1.1.103:Vulkan_Headers/externals/Vulkan-Headers \
MerryMage:dynarmic:r1-1388-g2683a9a3:dynarmic/externals/dynarmic \
ReinUsesLisp:sirit:f7c4b07:sirit/externals/sirit \
arsenm:sanitizers-cmake:aab6948:sanitizers_cmake/externals/cubeb/cmake/sanitizers-cmake \
catchorg:Catch2:v2.3.0:catch/externals/catch \
citra-emu:ext-libressl-portable:7d01cb0:libressl/externals/libressl \
citra-emu:ext-soundtouch:060181e:soundtouch/externals/soundtouch \
facebook:zstd:v1.3.8:zstd/externals/zstd \
fmtlib:fmt:5.3.0:fmt/externals/fmt \
kinetiknz:cubeb:cubeb-0.2-1098-g6f2420d:cubeb/externals/cubeb \
lz4:lz4:v1.8.0-8-g4db65c1:lz4/externals/lz4 \
ogniK5377:opus:v1.3-rc-20-g562f8ba5:opus/externals/opus \
svn2github:inih:603729d:inih/externals/inih/inih \
weidai11:cryptopp:CRYPTOPP_7_0_0-23-gf320e7d9:cryptopp/externals/cryptopp/cryptopp
USES= cmake compiler:c++17-lang iconv localbase:ldflags python:2.7,build
USE_SDL= sdl2
LDFLAGS+= -Wl,--as-needed # Qt5Network
TEST_TARGET= test
OPTIONS_DEFINE= ALSA PULSEAUDIO JACK SNDIO
OPTIONS_DEFAULT=ALSA PULSEAUDIO JACK
OPTIONS_MULTI= GUI
OPTIONS_MULTI_GUI= QT5 SDL
OPTIONS_SLAVE?= SDL
OPTIONS_EXCLUDE:= ${OPTIONS_MULTI_GUI}
ALSA_LIB_DEPENDS= libasound.so:audio/alsa-lib
ALSA_RUN_DEPENDS= ${LOCALBASE}/lib/alsa-lib/libasound_module_pcm_oss.so:audio/alsa-plugins
ALSA_CMAKE_BOOL= USE_ALSA
JACK_BUILD_DEPENDS= jackit>0:audio/jack
JACK_CMAKE_BOOL= USE_JACK
PULSEAUDIO_BUILD_DEPENDS=pulseaudio>0.:audio/pulseaudio
PULSEAUDIO_CMAKE_BOOL= USE_PULSE
SNDIO_LIB_DEPENDS= libsndio.so:audio/sndio
SNDIO_CMAKE_BOOL= USE_SNDIO
SDL_CMAKE_BOOL= ENABLE_SDL2
SDL_PLIST_FILES=bin/${PORTNAME}-cmd \
bin/${PORTNAME}-tester
QT5_USES= desktop-file-utils qt:5 shared-mime-info
QT5_USE= QT=qmake_build,buildtools_build,concurrent_build,core,gui,opengl,webengine,widgets
QT5_CMAKE_BOOL= ENABLE_QT YUZU_USE_QT_WEB_ENGINE
QT5_PLIST_FILES=bin/${PORTNAME} \
share/applications/${PORTNAME}.desktop \
share/icons/hicolor/scalable/apps/${PORTNAME}.svg \
share/mime/packages/${PORTNAME}.xml
post-patch:
@${REINPLACE_CMD} -e 's,share/man,man,' \
-e '/check_submodules_present()/d' \
${WRKSRC}/CMakeLists.txt
@${REINPLACE_CMD} -e 's/@GIT_BRANCH@/master/' \
-e 's/@GIT_DESC@/${GH_TAGNAME}/' \
${WRKSRC}/src/common/scm_rev.cpp.in
.ifndef QEMU_EMULATING
pre-install: do-test
.endif
.include <bsd.port.mk>

37
emulators/yuzu/distinfo Normal file
View file

@ -0,0 +1,37 @@
TIMESTAMP = 1561845347
SHA256 (yuzu-emu-yuzu-s20190629-1ca2b504b_GH0.tar.gz) = 8e1dcc927db37427b30994f1d02bd2d28ac6c8bf4d4e67c91aa1f781a52b97bc
SIZE (yuzu-emu-yuzu-s20190629-1ca2b504b_GH0.tar.gz) = 2672141
SHA256 (yuzu-emu-unicorn-1.0.1-153-g73f45735_GH0.tar.gz) = 8f7b4d8eb998c2a4c146268d83b44fc22ca8d4d276f26d6af1071e51f4b5bd4f
SIZE (yuzu-emu-unicorn-1.0.1-153-g73f45735_GH0.tar.gz) = 3296254
SHA256 (DarkLordZach-mbedtls-a280e60_GH0.tar.gz) = 4fc6ddc256bc75b975fd5ad8bb7d31ff79c62d49daafb0108585c9ef80c6c5a7
SIZE (DarkLordZach-mbedtls-a280e60_GH0.tar.gz) = 2283313
SHA256 (KhronosGroup-SPIRV-Headers-2c51218_GH0.tar.gz) = 08f70947b69e17c7e322156adcd471cf02b4b3f63e7baf8ee0f02d32603ac5ff
SIZE (KhronosGroup-SPIRV-Headers-2c51218_GH0.tar.gz) = 280829
SHA256 (KhronosGroup-Vulkan-Headers-v1.1.103_GH0.tar.gz) = bea7adf4b460fec1b8676f88b262beb82fe9a69906e3a9e568ff5fa81ad0539f
SIZE (KhronosGroup-Vulkan-Headers-v1.1.103_GH0.tar.gz) = 559445
SHA256 (MerryMage-dynarmic-r1-1388-g2683a9a3_GH0.tar.gz) = bbf296c19d3215435582da804948387bfa6bedd16fd8db2b56af4a618400db38
SIZE (MerryMage-dynarmic-r1-1388-g2683a9a3_GH0.tar.gz) = 1444605
SHA256 (ReinUsesLisp-sirit-f7c4b07_GH0.tar.gz) = 49d2528404ef1ac89e76f48eb49ec708693ea939d0d07458f936f57f4a04b679
SIZE (ReinUsesLisp-sirit-f7c4b07_GH0.tar.gz) = 21172
SHA256 (arsenm-sanitizers-cmake-aab6948_GH0.tar.gz) = d9009e17948aff769a6f6e16b52d4d8752c5cc2cab1e9c381d3a31fd1a680b58
SIZE (arsenm-sanitizers-cmake-aab6948_GH0.tar.gz) = 7240
SHA256 (catchorg-Catch2-v2.3.0_GH0.tar.gz) = aaf6bbf81ce8522131bae2ea4d013a77b003bbb2017614f5872d5787687f8f5f
SIZE (catchorg-Catch2-v2.3.0_GH0.tar.gz) = 506374
SHA256 (citra-emu-ext-libressl-portable-7d01cb0_GH0.tar.gz) = f3fc8c9d4991b05ca1e1c8f5907ecd3ffd9724a8dccf328087b4784cda5c7db3
SIZE (citra-emu-ext-libressl-portable-7d01cb0_GH0.tar.gz) = 1762942
SHA256 (citra-emu-ext-soundtouch-060181e_GH0.tar.gz) = a593ab188e4feaeef8376c27b554cc413986efc777c195e44c6d3d223de9a63c
SIZE (citra-emu-ext-soundtouch-060181e_GH0.tar.gz) = 59514
SHA256 (facebook-zstd-v1.3.8_GH0.tar.gz) = 90d902a1282cc4e197a8023b6d6e8d331c1fd1dfe60f7f8e4ee9da40da886dc3
SIZE (facebook-zstd-v1.3.8_GH0.tar.gz) = 1875233
SHA256 (fmtlib-fmt-5.3.0_GH0.tar.gz) = defa24a9af4c622a7134076602070b45721a43c51598c8456ec6f2c4dbb51c89
SIZE (fmtlib-fmt-5.3.0_GH0.tar.gz) = 662493
SHA256 (kinetiknz-cubeb-cubeb-0.2-1098-g6f2420d_GH0.tar.gz) = f13de26eb3bdf4bf328ca199e78b242b10f750ce29c064ac650995e62e520e28
SIZE (kinetiknz-cubeb-cubeb-0.2-1098-g6f2420d_GH0.tar.gz) = 202308
SHA256 (lz4-lz4-v1.8.0-8-g4db65c1_GH0.tar.gz) = 31a61b29dcb0204c9ac283d24cd53ae4d7e15e6f4e7dd88919d965ff9cf8ced5
SIZE (lz4-lz4-v1.8.0-8-g4db65c1_GH0.tar.gz) = 222985
SHA256 (ogniK5377-opus-v1.3-rc-20-g562f8ba5_GH0.tar.gz) = ca2600f52cc4c65f5b99b80c94399d89a43e199ebcd9e4ea6e7159dfc6f25b49
SIZE (ogniK5377-opus-v1.3-rc-20-g562f8ba5_GH0.tar.gz) = 822137
SHA256 (svn2github-inih-603729d_GH0.tar.gz) = b4faa364c3e33261707d4b669e1c669ca3818d7b9515c15fe0befd9df3f1f00a
SIZE (svn2github-inih-603729d_GH0.tar.gz) = 8342
SHA256 (weidai11-cryptopp-CRYPTOPP_7_0_0-23-gf320e7d9_GH0.tar.gz) = 1d6f029b83a230561e75bab26b5aaf98055b8439363a25bf113ac9ff6f9d2ef4
SIZE (weidai11-cryptopp-CRYPTOPP_7_0_0-23-gf320e7d9_GH0.tar.gz) = 7209489

View file

@ -0,0 +1,28 @@
yuzu (Qt) currently needs SDL for input
--- CMakeLists.txt.orig 2019-06-28 18:03:38 UTC
+++ CMakeLists.txt
@@ -145,15 +145,15 @@ if (ENABLE_SDL2)
else()
find_package(SDL2 REQUIRED)
endif()
-
- if (SDL2_FOUND)
- # TODO(yuriks): Make FindSDL2.cmake export an IMPORTED library instead
- add_library(SDL2 INTERFACE)
- target_link_libraries(SDL2 INTERFACE "${SDL2_LIBRARY}")
- target_include_directories(SDL2 INTERFACE "${SDL2_INCLUDE_DIR}")
- endif()
else()
- set(SDL2_FOUND NO)
+ find_package(SDL2)
+endif()
+
+if (SDL2_FOUND)
+ # TODO(yuriks): Make FindSDL2.cmake export an IMPORTED library instead
+ add_library(SDL2 INTERFACE)
+ target_link_libraries(SDL2 INTERFACE "${SDL2_LIBRARY}")
+ target_include_directories(SDL2 INTERFACE "${SDL2_INCLUDE_DIR}")
endif()
# If unicorn isn't found, msvc -> download bundled unicorn; everyone else -> build external

View file

@ -0,0 +1,35 @@
- DragonFly also has BSD make as make(1)
- Build verbosely to help debugging *FLAGS
- Ignore -lpthread underlinking (on WITHOUT_LLD_IS_LD) in unused samples
--- externals/unicorn/make.sh.orig 2018-01-04 00:41:12 UTC
+++ externals/unicorn/make.sh
@@ -112,7 +112,7 @@ if [ "$UNAME" = SunOS ]; then
CC=gcc
fi
-if [ -n "`echo "$UNAME" | grep BSD`" ]; then
+if [ -n "`echo "$UNAME" | grep -e DragonFly -e BSD`" ]; then
MAKE=gmake
PREFIX="${PREFIX-/usr/local}"
fi
@@ -120,15 +120,15 @@ fi
export CC INSTALL_BIN PREFIX PKGCFGDIR LIBDIRARCH LIBARCHS CFLAGS LDFLAGS
case "$1" in
- "" ) ${MAKE};;
+ "" ) ${MAKE} V=1 unicorn;;
"asan" ) asan;;
"install" ) install;;
"uninstall" ) uninstall;;
- "macos-universal" ) MACOS_UNIVERSAL=yes ${MAKE};;
- "macos-universal-no" ) MACOS_UNIVERSAL=no ${MAKE};;
+ "macos-universal" ) MACOS_UNIVERSAL=yes ${MAKE} V=1 unicorn;;
+ "macos-universal-no" ) MACOS_UNIVERSAL=no ${MAKE} V=1 unicorn;;
"cross-win32" ) build_cross i686-w64-mingw32;;
"cross-win64" ) build_cross x86_64-w64-mingw32;;
- "cross-android" ) CROSS=arm-linux-androideabi ${MAKE};;
+ "cross-android" ) CROSS=arm-linux-androideabi ${MAKE} V=1 unicorn;;
"ios" ) build_iOS;;
"ios_armv7" ) build_iOS armv7;;
"ios_armv7s" ) build_iOS armv7s;;

View file

@ -0,0 +1,181 @@
Drop after FreeBSD 12.0 EOL. See https://reviews.llvm.org/rL332768
externals/dynarmic/src/frontend/A64/types.cpp:18:33: fatal error: no viable constructor or deduction guide for deduction of template arguments of 'array'
static constexpr std::array cond_strs = {
^
/usr/include/c++/v1/__tuple:223:64: note: candidate function template not viable: requires 0 arguments, but 16 were provided
template <class _Tp, size_t _Size> struct _LIBCPP_TEMPLATE_VIS array;
^
/usr/include/c++/v1/__tuple:223:64: note: candidate function template not viable: requires 1 argument, but 16 were provided
--- externals/dynarmic/src/frontend/A32/disassembler/disassembler_arm.cpp.orig 2019-05-07 07:17:43 UTC
+++ externals/dynarmic/src/frontend/A32/disassembler/disassembler_arm.cpp
@@ -18,6 +18,16 @@
#include "frontend/A32/disassembler/disassembler.h"
#include "frontend/A32/types.h"
+#if defined(_LIBCPP_VERSION) && _LIBCPP_VERSION < 7000
+_LIBCPP_BEGIN_NAMESPACE_STD
+template<class _Tp, class... _Args,
+ class = typename enable_if<(is_same_v<_Tp, _Args> && ...), void>::type
+ >
+array(_Tp, _Args...)
+ -> array<_Tp, 1 + sizeof...(_Args)>;
+_LIBCPP_END_NAMESPACE_STD
+#endif
+
namespace Dynarmic::A32 {
class DisassemblerVisitor {
--- externals/dynarmic/src/frontend/A32/types.cpp.orig 2019-05-07 07:17:43 UTC
+++ externals/dynarmic/src/frontend/A32/types.cpp
@@ -10,6 +10,16 @@
#include "common/bit_util.h"
#include "frontend/A32/types.h"
+#if defined(_LIBCPP_VERSION) && _LIBCPP_VERSION < 7000
+_LIBCPP_BEGIN_NAMESPACE_STD
+template<class _Tp, class... _Args,
+ class = typename enable_if<(is_same_v<_Tp, _Args> && ...), void>::type
+ >
+array(_Tp, _Args...)
+ -> array<_Tp, 1 + sizeof...(_Args)>;
+_LIBCPP_END_NAMESPACE_STD
+#endif
+
namespace Dynarmic::A32 {
const char* CondToString(Cond cond, bool explicit_al) {
--- externals/dynarmic/src/frontend/A64/types.cpp.orig 2019-05-07 07:17:43 UTC
+++ externals/dynarmic/src/frontend/A64/types.cpp
@@ -12,6 +12,16 @@
#include "common/bit_util.h"
#include "frontend/A64/types.h"
+#if defined(_LIBCPP_VERSION) && _LIBCPP_VERSION < 7000
+_LIBCPP_BEGIN_NAMESPACE_STD
+template<class _Tp, class... _Args,
+ class = typename enable_if<(is_same_v<_Tp, _Args> && ...), void>::type
+ >
+array(_Tp, _Args...)
+ -> array<_Tp, 1 + sizeof...(_Args)>;
+_LIBCPP_END_NAMESPACE_STD
+#endif
+
namespace Dynarmic::A64 {
const char* CondToString(Cond cond) {
--- externals/dynarmic/src/frontend/ir/type.cpp.orig 2019-05-07 07:17:43 UTC
+++ externals/dynarmic/src/frontend/ir/type.cpp
@@ -13,6 +13,16 @@
#include "frontend/ir/type.h"
+#if defined(_LIBCPP_VERSION) && _LIBCPP_VERSION < 7000
+_LIBCPP_BEGIN_NAMESPACE_STD
+template<class _Tp, class... _Args,
+ class = typename enable_if<(is_same_v<_Tp, _Args> && ...), void>::type
+ >
+array(_Tp, _Args...)
+ -> array<_Tp, 1 + sizeof...(_Args)>;
+_LIBCPP_END_NAMESPACE_STD
+#endif
+
namespace Dynarmic::IR {
std::string GetNameOf(Type type) {
--- src/core/file_sys/card_image.cpp.orig 2019-06-28 18:03:38 UTC
+++ src/core/file_sys/card_image.cpp
@@ -16,6 +16,16 @@
#include "core/file_sys/vfs_offset.h"
#include "core/loader/loader.h"
+#if defined(_LIBCPP_VERSION) && _LIBCPP_VERSION < 7000
+_LIBCPP_BEGIN_NAMESPACE_STD
+template<class _Tp, class... _Args,
+ class = typename enable_if<(is_same_v<_Tp, _Args> && ...), void>::type
+ >
+array(_Tp, _Args...)
+ -> array<_Tp, 1 + sizeof...(_Args)>;
+_LIBCPP_END_NAMESPACE_STD
+#endif
+
namespace FileSys {
constexpr std::array partition_names{
--- src/video_core/renderer_opengl/gl_shader_decompiler.cpp.orig 2019-06-28 18:03:38 UTC
+++ src/video_core/renderer_opengl/gl_shader_decompiler.cpp
@@ -20,6 +20,16 @@
#include "video_core/renderer_opengl/gl_shader_decompiler.h"
#include "video_core/shader/shader_ir.h"
+#if defined(_LIBCPP_VERSION) && _LIBCPP_VERSION < 7000
+_LIBCPP_BEGIN_NAMESPACE_STD
+template<class _Tp, class... _Args,
+ class = typename enable_if<(is_same_v<_Tp, _Args> && ...), void>::type
+ >
+array(_Tp, _Args...)
+ -> array<_Tp, 1 + sizeof...(_Args)>;
+_LIBCPP_END_NAMESPACE_STD
+#endif
+
namespace OpenGL::GLShader {
namespace {
--- src/video_core/renderer_vulkan/vk_device.cpp.orig 2019-06-28 18:03:38 UTC
+++ src/video_core/renderer_vulkan/vk_device.cpp
@@ -10,6 +10,16 @@
#include "video_core/renderer_vulkan/declarations.h"
#include "video_core/renderer_vulkan/vk_device.h"
+#if defined(_LIBCPP_VERSION) && _LIBCPP_VERSION < 7000
+_LIBCPP_BEGIN_NAMESPACE_STD
+template<class _Tp, class... _Args,
+ class = typename enable_if<(is_same_v<_Tp, _Args> && ...), void>::type
+ >
+array(_Tp, _Args...)
+ -> array<_Tp, 1 + sizeof...(_Args)>;
+_LIBCPP_END_NAMESPACE_STD
+#endif
+
namespace Vulkan {
namespace Alternatives {
--- src/yuzu/configuration/configure_gamelist.cpp.orig 2019-06-28 18:03:38 UTC
+++ src/yuzu/configuration/configure_gamelist.cpp
@@ -11,6 +11,16 @@
#include "yuzu/configuration/configure_gamelist.h"
#include "yuzu/ui_settings.h"
+#if defined(_LIBCPP_VERSION) && _LIBCPP_VERSION < 7000
+_LIBCPP_BEGIN_NAMESPACE_STD
+template<class _Tp, class... _Args,
+ class = typename enable_if<(is_same_v<_Tp, _Args> && ...), void>::type
+ >
+array(_Tp, _Args...)
+ -> array<_Tp, 1 + sizeof...(_Args)>;
+_LIBCPP_END_NAMESPACE_STD
+#endif
+
namespace {
constexpr std::array default_icon_sizes{
std::make_pair(0, QT_TR_NOOP("None")),
--- src/yuzu/util/util.cpp.orig 2019-06-28 18:03:38 UTC
+++ src/yuzu/util/util.cpp
@@ -7,6 +7,16 @@
#include <QPainter>
#include "yuzu/util/util.h"
+#if defined(_LIBCPP_VERSION) && _LIBCPP_VERSION < 7000
+_LIBCPP_BEGIN_NAMESPACE_STD
+template<class _Tp, class... _Args,
+ class = typename enable_if<(is_same_v<_Tp, _Args> && ...), void>::type
+ >
+array(_Tp, _Args...)
+ -> array<_Tp, 1 + sizeof...(_Args)>;
+_LIBCPP_END_NAMESPACE_STD
+#endif
+
QFont GetMonospaceFont() {
QFont font(QStringLiteral("monospace"));
// Automatic fallback to a monospace font on on platforms without a font called "monospace"

12
emulators/yuzu/pkg-descr Normal file
View file

@ -0,0 +1,12 @@
yuzu is an experimental open-source emulator for the Nintendo Switch
from the creators of Citra.
It is written in C++ with portability in mind, with builds actively
maintained for Windows, Linux and macOS. The emulator is currently
only useful for homebrew development and research purposes.
yuzu only emulates a subset of Switch hardware and therefore is
generally only useful for running/debugging homebrew
applications. yuzu can boot some games, to varying degrees of success.
WWW: https://yuzu-emu.org/