mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-08-27 01:17:40 +00:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b79f2d0d1c | |||
| ef28a394db | |||
| 8ba132c927 |
@@ -1,66 +0,0 @@
|
|||||||
#!/usr/local/bin/bash -ex
|
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
[ -z ${OO_PS4_TOOLCHAIN+x} ] && exit
|
|
||||||
|
|
||||||
# cmake
|
|
||||||
[ -f "ps4-toolchain.cmake" ] || cat << EOF >"ps4-toolchain.cmake"
|
|
||||||
set(CMAKE_SYSROOT "$OO_PS4_TOOLCHAIN")
|
|
||||||
set(CMAKE_STAGING_PREFIX "$OO_PS4_TOOLCHAIN")
|
|
||||||
set(CMAKE_SYSTEM_NAME "OpenOrbis")
|
|
||||||
|
|
||||||
set(CMAKE_C_FLAGS "-D__OPENORBIS__ -D_LIBCPP_HAS_MUSL_LIBC=1 -D_GNU_SOURCE=1 --target=x86_64-pc-freebsd12-elf -mtune=btver2 -march=btver2 -fPIC -funwind-tables -femulated-tls")
|
|
||||||
set(CMAKE_CXX_FLAGS "-D__OPENORBIS__ -D_LIBCPP_HAS_MUSL_LIBC=1 -D_GNU_SOURCE=1 --target=x86_64-pc-freebsd12-elf -mtune=btver2 -march=btver2 -fPIC -funwind-tables -femulated-tls")
|
|
||||||
|
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "-m elf_x86_64 -pie -T $OO_PS4_TOOLCHAIN/link.x --eh-frame-hdr -L$OO_PS4_TOOLCHAIN/lib")
|
|
||||||
set(CMAKE_C_LINK_FLAGS "-m elf_x86_64 -pie -T $OO_PS4_TOOLCHAIN/link.x --eh-frame-hdr -L$OO_PS4_TOOLCHAIN/lib")
|
|
||||||
set(CMAKE_CXX_LINK_FLAGS "-m elf_x86_64 -pie -T $OO_PS4_TOOLCHAIN/link.x --eh-frame-hdr -L$OO_PS4_TOOLCHAIN/lib")
|
|
||||||
|
|
||||||
set(CMAKE_C_COMPILER clang)
|
|
||||||
set(CMAKE_CXX_COMPILER clang++)
|
|
||||||
set(CMAKE_LINKER ld.lld)
|
|
||||||
set(CMAKE_C_LINK_EXECUTABLE "<CMAKE_LINKER> <CMAKE_C_LINK_FLAGS> <OBJECTS> -o <TARGET> -lc -lkernel -lSceUserService -lSceSysmodule -lSceNet -lSceLibcInternal $OO_PS4_TOOLCHAIN/lib/crt1.o <LINK_LIBRARIES>")
|
|
||||||
set(CMAKE_CXX_LINK_EXECUTABLE "<CMAKE_LINKER> <CMAKE_CXX_LINK_FLAGS> <OBJECTS> -o <TARGET> -lc -lkernel -lc++ -lSceUserService -lSceSysmodule -lSceNet -lSceLibcInternal $OO_PS4_TOOLCHAIN/lib/crt1.o <LINK_LIBRARIES>")
|
|
||||||
|
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
|
|
||||||
|
|
||||||
# TODO: Why does cmake not set this?
|
|
||||||
set(CMAKE_SIZEOF_VOID_P 8)
|
|
||||||
EOF
|
|
||||||
|
|
||||||
[ -z ${NPROC+x} ] && NPROC=$(nproc || 1)
|
|
||||||
|
|
||||||
# Normally a platform has a package manager
|
|
||||||
# PS4 does not, atleast not in the normal sense
|
|
||||||
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" $@)
|
|
||||||
[ -f "build/Makefile" ] || cmake -S . -B build -G "Unix Makefiles" \
|
|
||||||
-DCMAKE_TOOLCHAIN_FILE="ps4-toolchain.cmake" \
|
|
||||||
-DENABLE_QT_TRANSLATION=OFF \
|
|
||||||
-DENABLE_CUBEB=OFF \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
|
||||||
-DCMAKE_CXX_FLAGS="$ARCH_FLAGS" \
|
|
||||||
-DCMAKE_C_FLAGS="$ARCH_FLAGS" \
|
|
||||||
-DENABLE_SDL2=ON \
|
|
||||||
-DENABLE_LIBUSB=OFF \
|
|
||||||
-DENABLE_UPDATE_CHECKER=OFF \
|
|
||||||
-DENABLE_QT=OFF \
|
|
||||||
-DENABLE_OPENGL=ON \
|
|
||||||
-DENABLE_WEB_SERVICE=OFF \
|
|
||||||
-DUSE_DISCORD_PRESENCE=OFF \
|
|
||||||
-DCPMUTIL_FORCE_BUNDLED=ON \
|
|
||||||
-DYUZU_USE_EXTERNAL_FFMPEG=ON \
|
|
||||||
-DYUZU_USE_CPM=ON \
|
|
||||||
-DDYNARMIC_ENABLE_NO_EXECUTE_SUPPORT=OFF \
|
|
||||||
-DDYNARMIC_TESTS=ON \
|
|
||||||
-DYUZU_TESTS=ON \
|
|
||||||
-DYUZU_USE_EXTERNAL_SDL2=ON \
|
|
||||||
"${EXTRA_CMAKE_FLAGS[@]}" || exit
|
|
||||||
|
|
||||||
cmake --build build -t yuzu-cmd_pkg -- -j$NPROC
|
|
||||||
#cmake --build build -t dynarmic_tests_pkg -- -j$NPROC
|
|
||||||
#cmake --build build -t testps4_pkg -- -j$NPROC
|
|
||||||
@@ -3,7 +3,7 @@ description: File a bug report
|
|||||||
body:
|
body:
|
||||||
- type: markdown
|
- type: markdown
|
||||||
attributes:
|
attributes:
|
||||||
value: Tech support does not belong here. You should only file an issue here if you think you have experienced an actual bug with Eden.
|
value: Tech support does not belong here. You should only file an issue here if you think you have experienced an actual bug with yuzu.
|
||||||
- type: checkboxes
|
- type: checkboxes
|
||||||
attributes:
|
attributes:
|
||||||
label: Is there an existing issue for this?
|
label: Is there an existing issue for this?
|
||||||
@@ -43,7 +43,7 @@ body:
|
|||||||
id: log
|
id: log
|
||||||
attributes:
|
attributes:
|
||||||
label: Log File
|
label: Log File
|
||||||
description: A log file will help our developers to better diagnose and fix the issue. Instructions can be found [here](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/user/HowToAccessLogs.md).
|
description: A log file will help our developers to better diagnose and fix the issue. Instructions can be found [here](https://yuzu-emu.org/help/reference/log-files).
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: textarea
|
- type: textarea
|
||||||
+2
-2
@@ -4,7 +4,7 @@ labels: "request"
|
|||||||
body:
|
body:
|
||||||
- type: markdown
|
- type: markdown
|
||||||
attributes:
|
attributes:
|
||||||
value: Tech support does not belong here. You should only file an issue here if you are requesting a feature you believe would make Eden better.
|
value: Tech support does not belong here. You should only file an issue here if you are requesting a feature you believe would make yuzu better.
|
||||||
- type: checkboxes
|
- type: checkboxes
|
||||||
attributes:
|
attributes:
|
||||||
label: Is there an existing issue for this?
|
label: Is there an existing issue for this?
|
||||||
@@ -23,6 +23,6 @@ body:
|
|||||||
id: why-feature
|
id: why-feature
|
||||||
attributes:
|
attributes:
|
||||||
label: Why would this feature be useful?
|
label: Why would this feature be useful?
|
||||||
description: A brief description of why this feature would make Eden better.
|
description: A brief description of why this feature would make yuzu better.
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
name: tx-pull
|
name: tx-pull
|
||||||
|
|
||||||
on:
|
on:
|
||||||
# monday at 4pm
|
# tuesday, saturday at 2pm
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '0 16 * * 1'
|
- cron: '0 14 * * 2,6'
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
- [ ] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions).
|
|
||||||
- [ ] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md)
|
|
||||||
- [ ] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability.
|
|
||||||
|
|
||||||
-------------------
|
|
||||||
@@ -63,6 +63,3 @@ artifacts
|
|||||||
/install*
|
/install*
|
||||||
vulkansdk*.exe
|
vulkansdk*.exe
|
||||||
*.tar.zst
|
*.tar.zst
|
||||||
|
|
||||||
# PS4 toolchain stuff
|
|
||||||
ps4-toolchain.cmake
|
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
diff --git a/libs/cobalt/include/boost/cobalt/concepts.hpp b/libs/cobalt/include/boost/cobalt/concepts.hpp
|
|
||||||
index d49f2ec..a9bdb80 100644
|
|
||||||
--- a/libs/cobalt/include/boost/cobalt/concepts.hpp
|
|
||||||
+++ b/libs/cobalt/include/boost/cobalt/concepts.hpp
|
|
||||||
@@ -62,7 +62,7 @@ struct enable_awaitables
|
|
||||||
template <typename T>
|
|
||||||
concept with_get_executor = requires (T& t)
|
|
||||||
{
|
|
||||||
- {t.get_executor()} -> asio::execution::executor;
|
|
||||||
+ t.get_executor();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
diff --git a/libs/asio/include/boost/asio/detail/impl/socket_ops.ipp b/libs/asio/include/boost/asio/detail/impl/socket_ops.ipp
|
|
||||||
index 0129511c..10fc9b04 100644
|
|
||||||
--- a/libs/asio/include/boost/asio/detail/impl/socket_ops.ipp
|
|
||||||
+++ b/libs/asio/include/boost/asio/detail/impl/socket_ops.ipp
|
|
||||||
@@ -15,6 +15,12 @@
|
|
||||||
# pragma once
|
|
||||||
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
|
|
||||||
|
|
||||||
+// hacky fix for ps4
|
|
||||||
+#if defined(__OPENORBIS__)
|
|
||||||
+# define FIONBIO 0
|
|
||||||
+# define FIONREAD 1
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
#include <boost/asio/detail/config.hpp>
|
|
||||||
|
|
||||||
#include <cctype>
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
diff --git a/unix.c b/unix.c
|
|
||||||
index 6669216..86a2faa 100644
|
|
||||||
--- a/unix.c
|
|
||||||
+++ b/unix.c
|
|
||||||
@@ -53,7 +53,7 @@
|
|
||||||
#include <poll.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
-#if !defined(HAS_SOCKLEN_T) && !defined(__socklen_t_defined)
|
|
||||||
+#if !defined(__OPENORBIS__) && !defined(HAS_SOCKLEN_T) && !defined(__socklen_t_defined)
|
|
||||||
typedef int socklen_t;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
diff --git a/libavutil/cpu.c b/libavutil/cpu.c
|
|
||||||
index 03e2720..874258f 100644
|
|
||||||
--- a/libavutil/cpu.c
|
|
||||||
+++ b/libavutil/cpu.c
|
|
||||||
@@ -43,8 +43,10 @@
|
|
||||||
#include <sys/param.h>
|
|
||||||
#endif
|
|
||||||
#include <sys/types.h>
|
|
||||||
+#ifndef __OPENORBIS__
|
|
||||||
#include <sys/sysctl.h>
|
|
||||||
#endif
|
|
||||||
+#endif
|
|
||||||
#if HAVE_UNISTD_H
|
|
||||||
#include <unistd.h>
|
|
||||||
#endif
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
diff --git a/cmake/ConfigureOpenSSL.cmake b/cmake/ConfigureOpenSSL.cmake
|
|
||||||
index 3012e05..2ae23ff 100644
|
|
||||||
--- a/cmake/ConfigureOpenSSL.cmake
|
|
||||||
+++ b/cmake/ConfigureOpenSSL.cmake
|
|
||||||
@@ -108,7 +108,8 @@ function(configure_openssl)
|
|
||||||
)
|
|
||||||
|
|
||||||
if(NOT "${CONFIGURE_OPTIONS_OLD}" STREQUAL "")
|
|
||||||
- if(CONFIGURE_OPTIONS STREQUAL CONFIGURE_OPTIONS_OLD)
|
|
||||||
+ # TODO(lizzie): Emscripten has issues with rebuilding due to the wrapper it uses
|
|
||||||
+ if(CMAKE_SYSTEM_NAME MATCHES "Emscripten" OR CONFIGURE_OPTIONS STREQUAL CONFIGURE_OPTIONS_OLD)
|
|
||||||
message(STATUS "Found previous configure results. Don't perform configuration")
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
@@ -134,10 +135,24 @@ function(configure_openssl)
|
|
||||||
set(VERBOSE_OPTION OUTPUT_QUIET)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
+ if (CMAKE_SYSTEM_NAME MATCHES "Emscripten")
|
|
||||||
+ set(EMSCRIPTEN_CMAKE_WRAPPER "emcmake")
|
|
||||||
+ find_program(EMCC emcc REQUIRED)
|
|
||||||
+ set(EMSCRIPTEN_LINKER ${EMCC})
|
|
||||||
+ list(APPEND CONFIGURE_COMMAND wasm64)
|
|
||||||
+ else()
|
|
||||||
+ set(EMSCRIPTEN_CMAKE_WRAPPER "")
|
|
||||||
+ set(EMSCRIPTEN_LINKER ${CMAKE_LINKER})
|
|
||||||
+ endif ()
|
|
||||||
+
|
|
||||||
execute_process(
|
|
||||||
- COMMAND ${CMAKE_COMMAND} -E env
|
|
||||||
+ COMMAND ${EMSCRIPTEN_CMAKE_WRAPPER} ${CMAKE_COMMAND} -E env
|
|
||||||
"CFLAGS=${CMAKE_C_FLAGS}"
|
|
||||||
"CXXFLAGS=${CMAKE_CXX_FLAGS}"
|
|
||||||
+ "LDFLAGS=${CMAKE_CXX_LINK_FLAGS}"
|
|
||||||
+ "CC=${CMAKE_C_COMPILER}"
|
|
||||||
+ "CXX=${CMAKE_CXX_COMPILER}"
|
|
||||||
+ "LD=${EMSCRIPTEN_LINKER}"
|
|
||||||
${CONFIGURE_COMMAND}
|
|
||||||
WORKING_DIRECTORY ${CONFIGURE_BUILD_DIR}
|
|
||||||
${VERBOSE_OPTION}
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
|
||||||
index 1ca57e1..593fd62 100644
|
|
||||||
--- a/CMakeLists.txt
|
|
||||||
+++ b/CMakeLists.txt
|
|
||||||
@@ -148,6 +148,16 @@ if(NOT BUILD_SHARED_LIBS)
|
|
||||||
list(APPEND OPENSSL_CONFIGURE_OPTIONS no-shared)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
+list(APPEND OPENSSL_CONFIGURE_OPTIONS
|
|
||||||
+ no-threads no-thread-pool no-shared no-afalgeng no-async no-capieng no-cmp no-cms no-comp no-ct
|
|
||||||
+ no-docs no-dgram no-dso no-dynamic-engine no-engine no-filenames no-gost
|
|
||||||
+ no-http no-legacy no-module no-nextprotoneg no-ocsp no-padlockeng no-quic
|
|
||||||
+ no-srp no-srtp no-ssl-trace no-static-engine no-tests no-thread-pool no-ts
|
|
||||||
+ no-ui-console no-uplink no-ssl3-method no-tls1-method no-tls1_1-method
|
|
||||||
+ no-dtls1-method no-dtls1_2-method no-argon2 no-bf no-blake2 no-cast
|
|
||||||
+ no-dsa no-idea no-md4 no-mdc2 no-ocb no-rc2 no-rc4 no-rmd160 no-scrypt
|
|
||||||
+ no-siphash no-siv no-sm2 no-sm3 no-sm4 no-whirlpool no-apps)
|
|
||||||
+
|
|
||||||
list(SORT OPENSSL_CONFIGURE_OPTIONS)
|
|
||||||
list(REMOVE_DUPLICATES OPENSSL_CONFIGURE_OPTIONS)
|
|
||||||
list(PREPEND OPENSSL_CONFIGURE_OPTIONS ${OPENSSL_TARGET_PLATFORM})
|
|
||||||
diff --git a/cmake/ConfigureOpenSSL.cmake b/cmake/ConfigureOpenSSL.cmake
|
|
||||||
index 2ae23ff..22a4a27 100644
|
|
||||||
--- a/cmake/ConfigureOpenSSL.cmake
|
|
||||||
+++ b/cmake/ConfigureOpenSSL.cmake
|
|
||||||
@@ -154,6 +154,7 @@ function(configure_openssl)
|
|
||||||
"CXX=${CMAKE_CXX_COMPILER}"
|
|
||||||
"LD=${EMSCRIPTEN_LINKER}"
|
|
||||||
${CONFIGURE_COMMAND}
|
|
||||||
+ "--prefix=${CMAKE_SYSROOT}"
|
|
||||||
WORKING_DIRECTORY ${CONFIGURE_BUILD_DIR}
|
|
||||||
${VERBOSE_OPTION}
|
|
||||||
COMMAND_ERROR_IS_FATAL ANY
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
diff --git a/crypto/o_str.c b/crypto/o_str.c
|
|
||||||
index 8aadff5..ba427c9 100644
|
|
||||||
--- a/crypto/o_str.c
|
|
||||||
+++ b/crypto/o_str.c
|
|
||||||
@@ -385,7 +385,7 @@ int openssl_strerror_r(int errnum, char *buf, size_t buflen)
|
|
||||||
* It can return a pointer to some (immutable) static string in which case
|
|
||||||
* buf is left unused.
|
|
||||||
*/
|
|
||||||
- err = strerror_r(errnum, buf, buflen);
|
|
||||||
+ err = (char *)strerror_r(errnum, buf, buflen);
|
|
||||||
if (err == NULL || buflen == 0)
|
|
||||||
return 0;
|
|
||||||
/*
|
|
||||||
@@ -1,196 +0,0 @@
|
|||||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
|
||||||
index 8872895..b0eeca8 100644
|
|
||||||
--- a/CMakeLists.txt
|
|
||||||
+++ b/CMakeLists.txt
|
|
||||||
@@ -1770,7 +1770,6 @@ elseif(EMSCRIPTEN)
|
|
||||||
|
|
||||||
CheckPTHREAD()
|
|
||||||
CheckLibUnwind()
|
|
||||||
-
|
|
||||||
elseif(UNIX AND NOT APPLE AND NOT RISCOS AND NOT HAIKU)
|
|
||||||
|
|
||||||
set(SDL_DISABLE_DLOPEN_NOTES TRUE)
|
|
||||||
@@ -3647,10 +3646,30 @@ if(NOT HAVE_CAMERA)
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
+# Always on?
|
|
||||||
+if (OPENORBIS)
|
|
||||||
+ sdl_sources(
|
|
||||||
+ "${SDL3_SOURCE_DIR}/src/thread/pthread/SDL_systhread.c"
|
|
||||||
+ "${SDL3_SOURCE_DIR}/src/thread/pthread/SDL_sysmutex.c" # Can be faked, if necessary
|
|
||||||
+ "${SDL3_SOURCE_DIR}/src/thread/pthread/SDL_syscond.c" # Can be faked, if necessary
|
|
||||||
+ "${SDL3_SOURCE_DIR}/src/thread/pthread/SDL_sysrwlock.c" # Can be faked, if necessary
|
|
||||||
+ "${SDL3_SOURCE_DIR}/src/thread/pthread/SDL_systls.c"
|
|
||||||
+ "${SDL3_SOURCE_DIR}/src/thread/generic/SDL_syssem.c"
|
|
||||||
+ )
|
|
||||||
+ sdl_glob_sources("${SDL3_SOURCE_DIR}/src/time/unix/*.c")
|
|
||||||
+ sdl_glob_sources("${SDL3_SOURCE_DIR}/src/timer/unix/*.c")
|
|
||||||
+ set(HAVE_SDL_THREADS TRUE)
|
|
||||||
+ set(HAVE_SDL_TIMERS TRUE)
|
|
||||||
+ set(HAVE_SDL_TIME TRUE)
|
|
||||||
+ set(SDL_TIME_UNIX 1)
|
|
||||||
+ set(SDL_TIMER_UNIX 1)
|
|
||||||
+ set(SDL_THREAD_PTHREAD 1)
|
|
||||||
+endif ()
|
|
||||||
+
|
|
||||||
# We always need to have threads and timers around
|
|
||||||
if(NOT HAVE_SDL_THREADS)
|
|
||||||
# The Emscripten and N-Gage platform has been carefully vetted to work without threads
|
|
||||||
- if(EMSCRIPTEN OR NGAGE)
|
|
||||||
+ if(EMSCRIPTEN OR NGAGE OR OPENORBIS)
|
|
||||||
set(SDL_THREADS_DISABLED 1)
|
|
||||||
sdl_glob_sources(
|
|
||||||
"${SDL3_SOURCE_DIR}/src/thread/generic/*.c"
|
|
||||||
diff --git a/build-scripts/rename_macros.py b/build-scripts/rename_macros.py
|
|
||||||
index 978120c..b6063dd 100755
|
|
||||||
--- a/build-scripts/rename_macros.py
|
|
||||||
+++ b/build-scripts/rename_macros.py
|
|
||||||
@@ -124,6 +124,7 @@ RENAMED_MACROS = {
|
|
||||||
"__RISCOS__": "SDL_PLATFORM_RISCOS",
|
|
||||||
"__SOLARIS__": "SDL_PLATFORM_SOLARIS",
|
|
||||||
"__PSP__": "SDL_PLATFORM_PSP",
|
|
||||||
+ "__PS4__": "SDL_PLATFORM_PS4",
|
|
||||||
"__PS2__": "SDL_PLATFORM_PS2",
|
|
||||||
"__VITA__": "SDL_PLATFORM_VITA",
|
|
||||||
"__3DS__": "SDL_PLATFORM_3DS",
|
|
||||||
diff --git a/include/SDL3/SDL_platform_defines.h b/include/SDL3/SDL_platform_defines.h
|
|
||||||
index 7963149..6c0dd5d 100644
|
|
||||||
--- a/include/SDL3/SDL_platform_defines.h
|
|
||||||
+++ b/include/SDL3/SDL_platform_defines.h
|
|
||||||
@@ -442,6 +442,16 @@
|
|
||||||
#define SDL_PLATFORM_PSP 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+#if defined(__PS4__) || defined(__OPENORBIS__)
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
+ * A preprocessor macro that is only defined if compiling for Sony PSP.
|
|
||||||
+ *
|
|
||||||
+ * \since This macro is available since SDL 3.2.0.
|
|
||||||
+ */
|
|
||||||
+#define SDL_PLATFORM_PS4 1
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
#if defined(__PS2__) || defined(PS2)
|
|
||||||
|
|
||||||
/**
|
|
||||||
diff --git a/src/SDL.c b/src/SDL.c
|
|
||||||
index b1a1a56..0a3fec6 100644
|
|
||||||
--- a/src/SDL.c
|
|
||||||
+++ b/src/SDL.c
|
|
||||||
@@ -714,7 +714,7 @@ void SDL_Quit(void)
|
|
||||||
SDL_DBus_Quit();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
-#if defined(SDL_PLATFORM_UNIX) && !defined(SDL_PLATFORM_ANDROID) && !defined(SDL_PLATFORM_EMSCRIPTEN) && !defined(SDL_PLATFORM_PRIVATE)
|
|
||||||
+#if defined(SDL_PLATFORM_UNIX) && !defined(SDL_PLATFORM_ANDROID) && !defined(SDL_PLATFORM_EMSCRIPTEN) && !defined(SDL_PLATFORM_PRIVATE) && !defined(SDL_PLATFORM_PS4)
|
|
||||||
SDL_Gtk_Quit();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
@@ -813,6 +813,8 @@ const char *SDL_GetPlatform(void)
|
|
||||||
return "tvOS";
|
|
||||||
#elif defined(SDL_PLATFORM_PS2)
|
|
||||||
return "PlayStation 2";
|
|
||||||
+#elif defined(SDL_PLATFORM_PS4)
|
|
||||||
+ return "PlayStation 4";
|
|
||||||
#elif defined(SDL_PLATFORM_PSP)
|
|
||||||
return "PlayStation Portable";
|
|
||||||
#elif defined(SDL_PLATFORM_VITA)
|
|
||||||
diff --git a/src/audio/SDL_audio.c b/src/audio/SDL_audio.c
|
|
||||||
index c1e4241..65b1e6d 100644
|
|
||||||
--- a/src/audio/SDL_audio.c
|
|
||||||
+++ b/src/audio/SDL_audio.c
|
|
||||||
@@ -80,6 +80,9 @@ static const AudioBootStrap *const bootstrap[] = {
|
|
||||||
#ifdef SDL_AUDIO_DRIVER_NGAGE
|
|
||||||
&NGAGEAUDIO_bootstrap,
|
|
||||||
#endif
|
|
||||||
+#ifdef SDL_AUDIO_DRIVER_PS4
|
|
||||||
+ &PS4AUDIO_bootstrap,
|
|
||||||
+#endif
|
|
||||||
#ifdef SDL_AUDIO_DRIVER_EMSCRIPTEN
|
|
||||||
&EMSCRIPTENAUDIO_bootstrap,
|
|
||||||
#endif
|
|
||||||
diff --git a/src/joystick/SDL_joystick.c b/src/joystick/SDL_joystick.c
|
|
||||||
index 60c9743..2d12c3a 100644
|
|
||||||
--- a/src/joystick/SDL_joystick.c
|
|
||||||
+++ b/src/joystick/SDL_joystick.c
|
|
||||||
@@ -106,6 +106,9 @@ static SDL_JoystickDriver *SDL_joystick_drivers[] = {
|
|
||||||
#ifdef SDL_JOYSTICK_N3DS
|
|
||||||
&SDL_N3DS_JoystickDriver,
|
|
||||||
#endif
|
|
||||||
+#ifdef SDL_JOYSTICK_PS4
|
|
||||||
+ &SDL_PS4_JoystickDriver,
|
|
||||||
+#endif
|
|
||||||
#if defined(SDL_JOYSTICK_DUMMY) || defined(SDL_JOYSTICK_DISABLED)
|
|
||||||
&SDL_DUMMY_JoystickDriver
|
|
||||||
#endif
|
|
||||||
diff --git a/src/joystick/SDL_sysjoystick.h b/src/joystick/SDL_sysjoystick.h
|
|
||||||
index 47ce42c..42ab9de 100644
|
|
||||||
--- a/src/joystick/SDL_sysjoystick.h
|
|
||||||
+++ b/src/joystick/SDL_sysjoystick.h
|
|
||||||
@@ -253,6 +253,7 @@ extern SDL_JoystickDriver SDL_HAIKU_JoystickDriver;
|
|
||||||
extern SDL_JoystickDriver SDL_HIDAPI_JoystickDriver;
|
|
||||||
extern SDL_JoystickDriver SDL_RAWINPUT_JoystickDriver;
|
|
||||||
extern SDL_JoystickDriver SDL_IOS_JoystickDriver;
|
|
||||||
+extern SDL_JoystickDriver SDL_PS4_JoystickDriver;
|
|
||||||
extern SDL_JoystickDriver SDL_LINUX_JoystickDriver;
|
|
||||||
extern SDL_JoystickDriver SDL_VIRTUAL_JoystickDriver;
|
|
||||||
extern SDL_JoystickDriver SDL_WGI_JoystickDriver;
|
|
||||||
diff --git a/src/render/SDL_sysrender.h b/src/render/SDL_sysrender.h
|
|
||||||
index a1bb44a..51843c4 100644
|
|
||||||
--- a/src/render/SDL_sysrender.h
|
|
||||||
+++ b/src/render/SDL_sysrender.h
|
|
||||||
@@ -381,6 +381,7 @@ extern SDL_RenderDriver NGAGE_RenderDriver;
|
|
||||||
extern SDL_RenderDriver VULKAN_RenderDriver;
|
|
||||||
extern SDL_RenderDriver PS2_RenderDriver;
|
|
||||||
extern SDL_RenderDriver PSP_RenderDriver;
|
|
||||||
+extern SDL_RenderDriver PS4_RenderDriver;
|
|
||||||
extern SDL_RenderDriver SW_RenderDriver;
|
|
||||||
extern SDL_RenderDriver VITA_GXM_RenderDriver;
|
|
||||||
extern SDL_RenderDriver GPU_RenderDriver;
|
|
||||||
diff --git a/src/stdlib/SDL_string.c b/src/stdlib/SDL_string.c
|
|
||||||
index 4a870f6..69ca1db 100644
|
|
||||||
--- a/src/stdlib/SDL_string.c
|
|
||||||
+++ b/src/stdlib/SDL_string.c
|
|
||||||
@@ -32,7 +32,9 @@
|
|
||||||
|
|
||||||
#include "SDL_casefolding.h"
|
|
||||||
|
|
||||||
-#if defined(__SIZEOF_WCHAR_T__)
|
|
||||||
+#if defined(SDL_PLATFORM_PS4)
|
|
||||||
+#define SDL_SIZEOF_WCHAR_T 2
|
|
||||||
+#elif defined(__SIZEOF_WCHAR_T__)
|
|
||||||
#define SDL_SIZEOF_WCHAR_T __SIZEOF_WCHAR_T__
|
|
||||||
#elif defined(SDL_PLATFORM_NGAGE)
|
|
||||||
#define SDL_SIZEOF_WCHAR_T 2
|
|
||||||
@@ -43,7 +45,6 @@
|
|
||||||
#endif
|
|
||||||
SDL_COMPILE_TIME_ASSERT(sizeof_wchar_t, sizeof(wchar_t) == SDL_SIZEOF_WCHAR_T);
|
|
||||||
|
|
||||||
-
|
|
||||||
char *SDL_UCS4ToUTF8(Uint32 codepoint, char *dst)
|
|
||||||
{
|
|
||||||
if (!dst) {
|
|
||||||
diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c
|
|
||||||
index f650f27..e23424f 100644
|
|
||||||
--- a/src/video/SDL_video.c
|
|
||||||
+++ b/src/video/SDL_video.c
|
|
||||||
@@ -131,6 +131,9 @@ static VideoBootStrap *bootstrap[] = {
|
|
||||||
#ifdef SDL_VIDEO_DRIVER_NGAGE
|
|
||||||
&NGAGE_bootstrap,
|
|
||||||
#endif
|
|
||||||
+#ifdef SDL_VIDEO_DRIVER_PS4
|
|
||||||
+ &PS4_bootstrap,
|
|
||||||
+#endif
|
|
||||||
#ifdef SDL_VIDEO_DRIVER_KMSDRM
|
|
||||||
&KMSDRM_bootstrap,
|
|
||||||
#endif
|
|
||||||
@@ -314,6 +317,7 @@ static bool SDL_CreateWindowTexture(SDL_VideoDevice *_this, SDL_Window *window,
|
|
||||||
SDL_GetWindowSizeInPixels(window, &w, &h);
|
|
||||||
|
|
||||||
if (!data) {
|
|
||||||
+
|
|
||||||
SDL_Renderer *renderer = NULL;
|
|
||||||
const char *render_driver = NULL;
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,25 +0,0 @@
|
|||||||
diff --git a/source/opt/loop_dependence.cpp b/source/opt/loop_dependence.cpp
|
|
||||||
index e41c044..a51b53b 100644
|
|
||||||
--- a/source/opt/loop_dependence.cpp
|
|
||||||
+++ b/source/opt/loop_dependence.cpp
|
|
||||||
@@ -12,6 +12,12 @@
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
+// PS4: issue?
|
|
||||||
+#ifdef __PS4__
|
|
||||||
+#pragma clang diagnostic ignored "-Wabsolute-value"
|
|
||||||
+#pragma clang diagnostic ignored "-Wshorten-64-to-32"
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
#include "source/opt/loop_dependence.h"
|
|
||||||
|
|
||||||
#include <functional>
|
|
||||||
@@ -19,6 +25,7 @@
|
|
||||||
#include <string>
|
|
||||||
#include <utility>
|
|
||||||
#include <vector>
|
|
||||||
+#include <cstdlib>
|
|
||||||
|
|
||||||
#include "source/opt/instruction.h"
|
|
||||||
#include "source/opt/scalar_analysis_nodes.h"
|
|
||||||
@@ -112,6 +112,11 @@ Files: src/yuzu/*.ui
|
|||||||
Copyright: 2018-2022 yuzu Emulator Project
|
Copyright: 2018-2022 yuzu Emulator Project
|
||||||
License: GPL-2.0-or-later
|
License: GPL-2.0-or-later
|
||||||
|
|
||||||
|
Files: src/yuzu/compatdb.ui
|
||||||
|
src/yuzu/main.ui
|
||||||
|
Copyright: 2014-2017 Citra Emulator Project
|
||||||
|
License: GPL-2.0-or-later
|
||||||
|
|
||||||
Files: src/yuzu/loading_screen.ui
|
Files: src/yuzu/loading_screen.ui
|
||||||
Copyright: 2019 James Rowe <jroweboy@gmail.com>
|
Copyright: 2019 James Rowe <jroweboy@gmail.com>
|
||||||
License: GPL-2.0-or-later
|
License: GPL-2.0-or-later
|
||||||
|
|||||||
+39
-41
@@ -22,30 +22,29 @@ include(UseCcache)
|
|||||||
include(CMakeDependentOption)
|
include(CMakeDependentOption)
|
||||||
include(CTest)
|
include(CTest)
|
||||||
include(CPMUtil)
|
include(CPMUtil)
|
||||||
include(OpenOrbis)
|
|
||||||
|
|
||||||
if (NOT DEFINED ARCHITECTURE)
|
if (NOT DEFINED ARCHITECTURE)
|
||||||
message(FATAL_ERROR "Architecture didn't make it out of scope, did you delete DetectArchitecture.cmake?")
|
message(FATAL_ERROR "Architecture didn't make it out of scope, did you delete DetectArchitecture.cmake?")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Needed for FFmpeg w/ VAAPI and DRM
|
# Needed for FFmpeg w/ VAAPI and DRM
|
||||||
if (OPENBSD)
|
if (PLATFORM_OPENBSD)
|
||||||
# OpenBSD 7.8 broke libcxx when upgrading, so we must define the PSTL backend manually
|
# OpenBSD 7.8 broke libcxx when upgrading, so we must define the PSTL backend manually
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I${CMAKE_SYSROOT}/usr/X11R6/include -D_LIBCPP_PSTL_BACKEND_SERIAL=1")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I${CMAKE_SYSROOT}/usr/X11R6/include -D_LIBCPP_PSTL_BACKEND_SERIAL=1")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${CMAKE_SYSROOT}/usr/X11R6/include -D_LIBCPP_PSTL_BACKEND_SERIAL=1")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${CMAKE_SYSROOT}/usr/X11R6/include -D_LIBCPP_PSTL_BACKEND_SERIAL=1")
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${CMAKE_SYSROOT}/usr/X11R6/lib")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${CMAKE_SYSROOT}/usr/X11R6/lib")
|
||||||
elseif (NETBSD)
|
elseif (PLATFORM_NETBSD)
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I${CMAKE_SYSROOT}/usr/X11R7/include -I${CMAKE_SYSROOT}/usr/pkg/include/c++/v1")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I${CMAKE_SYSROOT}/usr/X11R7/include -I${CMAKE_SYSROOT}/usr/pkg/include/c++/v1")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${CMAKE_SYSROOT}/usr/X11R7/include -I${CMAKE_SYSROOT}/usr/pkg/include/c++/v1")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${CMAKE_SYSROOT}/usr/X11R7/include -I${CMAKE_SYSROOT}/usr/pkg/include/c++/v1")
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${CMAKE_SYSROOT}/usr/X11R7/lib")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${CMAKE_SYSROOT}/usr/X11R7/lib")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# NetBSD: Fun for the whole family!
|
# NetBSD: Fun for the whole family!
|
||||||
if (NETBSD)
|
if (PLATFORM_NETBSD)
|
||||||
set(ENV{PKG_CONFIG_PATH} "${PKG_CONFIG_PATH}:${CMAKE_SYSROOT}/usr/pkg/lib/ffmpeg7/pkgconfig")
|
set(ENV{PKG_CONFIG_PATH} "${PKG_CONFIG_PATH}:${CMAKE_SYSROOT}/usr/pkg/lib/ffmpeg7/pkgconfig")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
cmake_dependent_option(YUZU_STATIC_ROOM "Build a static room executable only (CI only)" OFF "LINUX" OFF)
|
cmake_dependent_option(YUZU_STATIC_ROOM "Build a static room executable only (CI only)" OFF "PLATFORM_LINUX" OFF)
|
||||||
if (YUZU_STATIC_ROOM)
|
if (YUZU_STATIC_ROOM)
|
||||||
set(YUZU_ROOM ON)
|
set(YUZU_ROOM ON)
|
||||||
set(YUZU_ROOM_STANDALONE ON)
|
set(YUZU_ROOM_STANDALONE ON)
|
||||||
@@ -80,10 +79,6 @@ set(YUZU_QT_MIRROR "" CACHE STRING "What mirror to use for downloading the bundl
|
|||||||
cmake_dependent_option(YUZU_USE_BUNDLED_QT "Download bundled Qt binaries" "${MSVC}" "ENABLE_QT" OFF)
|
cmake_dependent_option(YUZU_USE_BUNDLED_QT "Download bundled Qt binaries" "${MSVC}" "ENABLE_QT" OFF)
|
||||||
|
|
||||||
option(ENABLE_DEBUG_TOOLS "Enable debugging tools (maxwell disassembler, SPIRV translator, etc)" OFF)
|
option(ENABLE_DEBUG_TOOLS "Enable debugging tools (maxwell disassembler, SPIRV translator, etc)" OFF)
|
||||||
option(ENABLE_WERROR "Enable -Werror diagnostics" ON)
|
|
||||||
|
|
||||||
# Lossless Scaling frame generation. Only Android.
|
|
||||||
cmake_dependent_option(ENABLE_LSFG "Enable Lossless Scaling frame generation" ON "ANDROID" OFF)
|
|
||||||
|
|
||||||
# non-linux bundled qt are static
|
# non-linux bundled qt are static
|
||||||
if (YUZU_USE_BUNDLED_QT AND (APPLE OR NOT UNIX))
|
if (YUZU_USE_BUNDLED_QT AND (APPLE OR NOT UNIX))
|
||||||
@@ -162,17 +157,6 @@ if (CXX_CLANG_CL)
|
|||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-reserved-identifier>
|
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-reserved-identifier>
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-deprecated-declarations>
|
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-deprecated-declarations>
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-cast-function-type-mismatch>
|
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-cast-function-type-mismatch>
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-c99-extensions>
|
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-c++17-compat>
|
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-c++11-compat-reserved-user-defined-literal>
|
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-c++11-compat-deprecated-writable-strings>
|
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-c++11-compat-pedantic>
|
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-c++11-compat>
|
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-c++0x-compat>
|
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-c++98-c++11-compat-binary-literal>
|
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-c++98-compat-pedantic>
|
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-c++98-compat>
|
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-c99-compat>
|
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:/EHsc>)
|
$<$<COMPILE_LANGUAGE:C,CXX>:/EHsc>)
|
||||||
# REQUIRED CPU features IN Windows-amd64
|
# REQUIRED CPU features IN Windows-amd64
|
||||||
if (ARCHITECTURE_x86_64)
|
if (ARCHITECTURE_x86_64)
|
||||||
@@ -226,7 +210,7 @@ endif()
|
|||||||
|
|
||||||
# ffmpeg
|
# ffmpeg
|
||||||
option(YUZU_USE_BUNDLED_FFMPEG "Download bundled FFmpeg" ${EXT_DEFAULT})
|
option(YUZU_USE_BUNDLED_FFMPEG "Download bundled FFmpeg" ${EXT_DEFAULT})
|
||||||
cmake_dependent_option(YUZU_USE_EXTERNAL_FFMPEG "Build FFmpeg from external source" "${SOLARIS}" "NOT WIN32 AND NOT ANDROID" OFF)
|
cmake_dependent_option(YUZU_USE_EXTERNAL_FFMPEG "Build FFmpeg from external source" "${PLATFORM_SUN}" "NOT WIN32 AND NOT ANDROID" OFF)
|
||||||
|
|
||||||
# sirit
|
# sirit
|
||||||
set(BUNDLED_SIRIT_DEFAULT OFF)
|
set(BUNDLED_SIRIT_DEFAULT OFF)
|
||||||
@@ -237,7 +221,7 @@ endif()
|
|||||||
option(YUZU_USE_BUNDLED_SIRIT "Download bundled sirit" ${BUNDLED_SIRIT_DEFAULT})
|
option(YUZU_USE_BUNDLED_SIRIT "Download bundled sirit" ${BUNDLED_SIRIT_DEFAULT})
|
||||||
|
|
||||||
# FreeBSD 15+ has libusb, versions below should disable it
|
# FreeBSD 15+ has libusb, versions below should disable it
|
||||||
cmake_dependent_option(ENABLE_LIBUSB "Enable the use of LibUSB" ON "WIN32 OR LINUX OR FREEBSD OR APPLE" OFF)
|
cmake_dependent_option(ENABLE_LIBUSB "Enable the use of LibUSB" ON "WIN32 OR PLATFORM_LINUX OR PLATFORM_FREEBSD OR APPLE" OFF)
|
||||||
|
|
||||||
cmake_dependent_option(ENABLE_OPENGL "Enable OpenGL" ON "NOT (WIN32 AND ARCHITECTURE_arm64) AND NOT APPLE" OFF)
|
cmake_dependent_option(ENABLE_OPENGL "Enable OpenGL" ON "NOT (WIN32 AND ARCHITECTURE_arm64) AND NOT APPLE" OFF)
|
||||||
mark_as_advanced(FORCE ENABLE_OPENGL)
|
mark_as_advanced(FORCE ENABLE_OPENGL)
|
||||||
@@ -251,7 +235,7 @@ option(YUZU_TESTS "Compile tests" "${BUILD_TESTING}")
|
|||||||
|
|
||||||
# Install udev rules on Linux (mainly for gyros)
|
# Install udev rules on Linux (mainly for gyros)
|
||||||
# Only acts on joysticks and nothing else.
|
# Only acts on joysticks and nothing else.
|
||||||
cmake_dependent_option(YUZU_INSTALL_UDEV_RULES "Install udev rules for gyro access" OFF "LINUX" OFF)
|
cmake_dependent_option(YUZU_INSTALL_UDEV_RULES "Install udev rules for gyro access" OFF "PLATFORM_LINUX" OFF)
|
||||||
|
|
||||||
option(YUZU_DOWNLOAD_ANDROID_VVL "Download validation layer binary for android" ON)
|
option(YUZU_DOWNLOAD_ANDROID_VVL "Download validation layer binary for android" ON)
|
||||||
|
|
||||||
@@ -264,7 +248,7 @@ cmake_dependent_option(YUZU_ROOM_STANDALONE "Enable standalone room executable"
|
|||||||
|
|
||||||
cmake_dependent_option(YUZU_CMD "Compile the eden-cli executable" ON "NOT ANDROID" OFF)
|
cmake_dependent_option(YUZU_CMD "Compile the eden-cli executable" ON "NOT ANDROID" OFF)
|
||||||
|
|
||||||
cmake_dependent_option(YUZU_CRASH_DUMPS "Compile crash dump (Minidump) support" OFF "WIN32 OR LINUX" OFF)
|
cmake_dependent_option(YUZU_CRASH_DUMPS "Compile crash dump (Minidump) support" OFF "WIN32 OR PLATFORM_LINUX" OFF)
|
||||||
|
|
||||||
option(YUZU_DOWNLOAD_TIME_ZONE_DATA "Always download time zone binaries" ON)
|
option(YUZU_DOWNLOAD_TIME_ZONE_DATA "Always download time zone binaries" ON)
|
||||||
set(YUZU_TZDB_PATH "" CACHE STRING "Path to a pre-downloaded timezone database")
|
set(YUZU_TZDB_PATH "" CACHE STRING "Path to a pre-downloaded timezone database")
|
||||||
@@ -274,7 +258,7 @@ cmake_dependent_option(YUZU_USE_BUNDLED_MOLTENVK "Download bundled MoltenVK lib"
|
|||||||
option(YUZU_DISABLE_LLVM "Disable LLVM (useful for CI)" OFF)
|
option(YUZU_DISABLE_LLVM "Disable LLVM (useful for CI)" OFF)
|
||||||
|
|
||||||
set(DEFAULT_YUZU_USE_BUNDLED_OPENSSL OFF)
|
set(DEFAULT_YUZU_USE_BUNDLED_OPENSSL OFF)
|
||||||
if (EXT_DEFAULT OR SOLARIS OR OPENBSD)
|
if (EXT_DEFAULT OR PLATFORM_SUN OR PLATFORM_OPENBSD)
|
||||||
set(DEFAULT_YUZU_USE_BUNDLED_OPENSSL ON)
|
set(DEFAULT_YUZU_USE_BUNDLED_OPENSSL ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -297,7 +281,26 @@ if(EXISTS ${PROJECT_SOURCE_DIR}/hooks/pre-commit AND NOT EXISTS ${PROJECT_SOURCE
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (ARCHITECTURE_arm64 AND (ANDROID OR LINUX))
|
set(compat_base dist/compatibility_list/compatibility_list)
|
||||||
|
set(compat_qrc ${compat_base}.qrc)
|
||||||
|
set(compat_json ${compat_base}.json)
|
||||||
|
|
||||||
|
configure_file(${PROJECT_SOURCE_DIR}/${compat_qrc}
|
||||||
|
${PROJECT_BINARY_DIR}/${compat_qrc}
|
||||||
|
COPYONLY)
|
||||||
|
|
||||||
|
if (EXISTS ${PROJECT_SOURCE_DIR}/${compat_json})
|
||||||
|
configure_file("${PROJECT_SOURCE_DIR}/${compat_json}"
|
||||||
|
"${PROJECT_BINARY_DIR}/${compat_json}"
|
||||||
|
COPYONLY)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# TODO: Compat list download
|
||||||
|
if (NOT EXISTS ${PROJECT_BINARY_DIR}/${compat_json})
|
||||||
|
file(WRITE ${PROJECT_BINARY_DIR}/${compat_json} "")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (ARCHITECTURE_arm64 AND (ANDROID OR PLATFORM_LINUX))
|
||||||
set(HAS_NCE 1)
|
set(HAS_NCE 1)
|
||||||
add_compile_definitions(HAS_NCE=1)
|
add_compile_definitions(HAS_NCE=1)
|
||||||
endif()
|
endif()
|
||||||
@@ -306,7 +309,7 @@ if (YUZU_ROOM)
|
|||||||
add_compile_definitions(YUZU_ROOM)
|
add_compile_definitions(YUZU_ROOM)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (UNIX AND NOT (LINUX OR WIN32))
|
if (UNIX AND NOT (PLATFORM_LINUX OR WIN32))
|
||||||
if(CXX_APPLE OR CXX_CLANG)
|
if(CXX_APPLE OR CXX_CLANG)
|
||||||
# libc++ has stop_token and jthread as experimental
|
# libc++ has stop_token and jthread as experimental
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexperimental-library")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexperimental-library")
|
||||||
@@ -341,12 +344,11 @@ if (CXX_GCC OR CXX_CLANG)
|
|||||||
endif()
|
endif()
|
||||||
elseif(ARCHITECTURE_arm64)
|
elseif(ARCHITECTURE_arm64)
|
||||||
# See https://gcc.gnu.org/onlinedocs/gcc/AArch64-Options.html
|
# See https://gcc.gnu.org/onlinedocs/gcc/AArch64-Options.html
|
||||||
set(YUZU_BUILD_PRESET "custom" CACHE STRING "Build preset to use. One of: custom, generic, optimized, armv9, native")
|
set(YUZU_BUILD_PRESET "custom" CACHE STRING "Build preset to use. One of: custom, generic, armv9, native")
|
||||||
set(mtune generic)
|
set(mtune generic)
|
||||||
|
|
||||||
if (${YUZU_BUILD_PRESET} STREQUAL "generic")
|
if (${YUZU_BUILD_PRESET} STREQUAL "generic")
|
||||||
set(march armv8-a)
|
set(march armv8-a)
|
||||||
elseif (${YUZU_BUILD_PRESET} STREQUAL "optimized")
|
|
||||||
set(march armv8.2-a+lse+rcpc)
|
|
||||||
elseif (${YUZU_BUILD_PRESET} STREQUAL "armv9")
|
elseif (${YUZU_BUILD_PRESET} STREQUAL "armv9")
|
||||||
set(march armv9-a)
|
set(march armv9-a)
|
||||||
endif()
|
endif()
|
||||||
@@ -415,13 +417,10 @@ AddJsonPackage(boost)
|
|||||||
set(BOOST_NO_HEADERS ${Boost_ADDED})
|
set(BOOST_NO_HEADERS ${Boost_ADDED})
|
||||||
|
|
||||||
if (Boost_ADDED)
|
if (Boost_ADDED)
|
||||||
if (MSVC OR ANDROID)
|
add_compile_definitions(YUZU_BOOST_v1)
|
||||||
add_compile_definitions(YUZU_BOOST_v1)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (NOT MSVC OR CXX_CLANG)
|
if (NOT MSVC OR CXX_CLANG)
|
||||||
# boost sucks
|
# solaris sucks
|
||||||
if (SOLARIS)
|
if (PLATFORM_SUN)
|
||||||
add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-pthreads>)
|
add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-pthreads>)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -429,8 +428,7 @@ if (Boost_ADDED)
|
|||||||
target_compile_options(boost_icl INTERFACE $<$<COMPILE_LANGUAGE:C,CXX>:-Wno-shadow>)
|
target_compile_options(boost_icl INTERFACE $<$<COMPILE_LANGUAGE:C,CXX>:-Wno-shadow>)
|
||||||
target_compile_options(boost_asio INTERFACE
|
target_compile_options(boost_asio INTERFACE
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-conversion>
|
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-conversion>
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-implicit-fallthrough>
|
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-implicit-fallthrough>)
|
||||||
)
|
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -525,9 +523,9 @@ elseif (WIN32)
|
|||||||
# PSAPI is the Process Status API
|
# PSAPI is the Process Status API
|
||||||
set(PLATFORM_LIBRARIES ${PLATFORM_LIBRARIES} psapi imm32 version crypt32 rpcrt4 gdi32 wldap32 mswsock)
|
set(PLATFORM_LIBRARIES ${PLATFORM_LIBRARIES} psapi imm32 version crypt32 rpcrt4 gdi32 wldap32 mswsock)
|
||||||
endif()
|
endif()
|
||||||
elseif (MANAGARM)
|
elseif (PLATFORM_MANAGARM)
|
||||||
set(PLATFORM_LIBRARIES iconv intl)
|
set(PLATFORM_LIBRARIES iconv intl)
|
||||||
elseif (HAIKUOS)
|
elseif (PLATFORM_HAIKU)
|
||||||
# Haiku is so special :)
|
# Haiku is so special :)
|
||||||
set(PLATFORM_LIBRARIES bsd /boot/system/lib/libnetwork.so)
|
set(PLATFORM_LIBRARIES bsd /boot/system/lib/libnetwork.so)
|
||||||
elseif (CMAKE_SYSTEM_NAME MATCHES "^(Linux|kFreeBSD|GNU|SunOS)$")
|
elseif (CMAKE_SYSTEM_NAME MATCHES "^(Linux|kFreeBSD|GNU|SunOS)$")
|
||||||
@@ -621,7 +619,7 @@ if (ENABLE_QT)
|
|||||||
|
|
||||||
# Best practice is to ask for all components at once, so they are from the same version
|
# Best practice is to ask for all components at once, so they are from the same version
|
||||||
set(YUZU_QT_COMPONENTS Core Widgets Charts Concurrent Gui)
|
set(YUZU_QT_COMPONENTS Core Widgets Charts Concurrent Gui)
|
||||||
if (LINUX OR FREEBSD)
|
if (PLATFORM_LINUX OR PLATFORM_FREEBSD)
|
||||||
list(APPEND YUZU_QT_COMPONENTS DBus)
|
list(APPEND YUZU_QT_COMPONENTS DBus)
|
||||||
# yes Qt, we get it
|
# yes Qt, we get it
|
||||||
set(QT_NO_PRIVATE_MODULE_WARNING ON)
|
set(QT_NO_PRIVATE_MODULE_WARNING ON)
|
||||||
|
|||||||
@@ -18,13 +18,10 @@ if (DEFINED GIT_RELEASE)
|
|||||||
set(BUILD_VERSION "${GIT_TAG}")
|
set(BUILD_VERSION "${GIT_TAG}")
|
||||||
set(GIT_REFSPEC "${GIT_RELEASE}")
|
set(GIT_REFSPEC "${GIT_RELEASE}")
|
||||||
set(IS_DEV_BUILD false)
|
set(IS_DEV_BUILD false)
|
||||||
elseif(DEFINED GIT_COMMIT)
|
else()
|
||||||
string(SUBSTRING ${GIT_COMMIT} 0 10 BUILD_VERSION)
|
string(SUBSTRING ${GIT_COMMIT} 0 10 BUILD_VERSION)
|
||||||
set(BUILD_VERSION "${BUILD_VERSION}-${GIT_REFSPEC}")
|
set(BUILD_VERSION "${BUILD_VERSION}-${GIT_REFSPEC}")
|
||||||
set(IS_DEV_BUILD true)
|
set(IS_DEV_BUILD true)
|
||||||
else()
|
|
||||||
set(BUILD_VERSION "NoGitInfo")
|
|
||||||
set(IS_DEV_BUILD true)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (NIGHTLY_BUILD)
|
if (NIGHTLY_BUILD)
|
||||||
|
|||||||
@@ -1,46 +0,0 @@
|
|||||||
# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
function(create_ps4_eboot project target content_id)
|
|
||||||
set(sce_sys_dir sce_sys)
|
|
||||||
set(sce_sys_param ${sce_sys_dir}/param.sfo)
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT "${target}.pkg"
|
|
||||||
COMMAND ${CMAKE_SYSROOT}/bin/create-fself -in=bin/${target} -out=${target}.oelf --eboot ${target}_eboot.bin
|
|
||||||
VERBATIM
|
|
||||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
||||||
DEPENDS ${project}
|
|
||||||
)
|
|
||||||
add_custom_target(${project}_pkg ALL DEPENDS "${target}.pkg")
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
function(create_ps4_pkg project target content_id)
|
|
||||||
set(sce_sys_dir sce_sys)
|
|
||||||
set(sce_sys_param ${sce_sys_dir}/param.sfo)
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT "${target}.pkg"
|
|
||||||
COMMAND ${CMAKE_SYSROOT}/bin/create-fself -in=bin/${target} -out=${target}.oelf --eboot ${target}_eboot.bin
|
|
||||||
COMMAND mkdir -p ${sce_sys_dir}
|
|
||||||
COMMAND ${CMAKE_SYSROOT}/bin/PkgTool.Core sfo_new ${sce_sys_param}
|
|
||||||
COMMAND ${CMAKE_SYSROOT}/bin/PkgTool.Core sfo_setentry ${sce_sys_param} APP_TYPE --type Integer --maxsize 4 --value 1
|
|
||||||
COMMAND ${CMAKE_SYSROOT}/bin/PkgTool.Core sfo_setentry ${sce_sys_param} APP_VER --type Utf8 --maxsize 8 --value 1.03
|
|
||||||
COMMAND ${CMAKE_SYSROOT}/bin/PkgTool.Core sfo_setentry ${sce_sys_param} ATTRIBUTE --type Integer --maxsize 4 --value 0
|
|
||||||
COMMAND ${CMAKE_SYSROOT}/bin/PkgTool.Core sfo_setentry ${sce_sys_param} CATEGORY --type Utf8 --maxsize 4 --value gd
|
|
||||||
COMMAND ${CMAKE_SYSROOT}/bin/PkgTool.Core sfo_setentry ${sce_sys_param} CONTENT_ID --type Utf8 --maxsize 48 --value ${content_id}
|
|
||||||
COMMAND ${CMAKE_SYSROOT}/bin/PkgTool.Core sfo_setentry ${sce_sys_param} DOWNLOAD_DATA_SIZE --type Integer --maxsize 4 --value 0
|
|
||||||
COMMAND ${CMAKE_SYSROOT}/bin/PkgTool.Core sfo_setentry ${sce_sys_param} SYSTEM_VER --type Integer --maxsize 4 --value 0
|
|
||||||
COMMAND ${CMAKE_SYSROOT}/bin/PkgTool.Core sfo_setentry ${sce_sys_param} TITLE --type Utf8 --maxsize 128 --value ${target}
|
|
||||||
COMMAND ${CMAKE_SYSROOT}/bin/PkgTool.Core sfo_setentry ${sce_sys_param} TITLE_ID --type Utf8 --maxsize 12 --value BREW00090
|
|
||||||
COMMAND ${CMAKE_SYSROOT}/bin/PkgTool.Core sfo_setentry ${sce_sys_param} VERSION --type Utf8 --maxsize 8 --value 1.03
|
|
||||||
COMMAND ${CMAKE_SYSROOT}/bin/create-gp4 -out ${target}.gp4 --content-id=${content_id} --files "${target}_eboot.bin ${sce_sys_param} sce_module/libc.prx sce_module/libSceFios2.prx"
|
|
||||||
COMMAND ${CMAKE_SYSROOT}/bin/PkgTool.Core pkg_build ${target}.gp4 .
|
|
||||||
VERBATIM
|
|
||||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
||||||
DEPENDS ${project}
|
|
||||||
)
|
|
||||||
add_custom_target(${project}_pkg ALL DEPENDS "${target}.pkg")
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
if (NOT DEFINED ENV{OO_PS4_TOOLCHAIN})
|
|
||||||
set(ENV{OO_PS4_TOOLCHAIN} ${CMAKE_SYSROOT})
|
|
||||||
endif ()
|
|
||||||
@@ -13,7 +13,7 @@ find_package_handle_standard_args(Opus
|
|||||||
VERSION_VAR OPUS_VERSION
|
VERSION_VAR OPUS_VERSION
|
||||||
)
|
)
|
||||||
|
|
||||||
if (MSYS2)
|
if (PLATFORM_MSYS)
|
||||||
FixMsysPath(PkgConfig::OPUS)
|
FixMsysPath(PkgConfig::OPUS)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ find_package_handle_standard_args(enet
|
|||||||
VERSION_VAR ENET_VERSION
|
VERSION_VAR ENET_VERSION
|
||||||
)
|
)
|
||||||
|
|
||||||
if (MSYS2)
|
if (PLATFORM_MSYS)
|
||||||
FixMsysPath(PkgConfig::ENET)
|
FixMsysPath(PkgConfig::ENET)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ find_package_handle_standard_args(libusb
|
|||||||
VERSION_VAR LIBUSB_VERSION
|
VERSION_VAR LIBUSB_VERSION
|
||||||
)
|
)
|
||||||
|
|
||||||
if (MSYS2)
|
if (PLATFORM_MSYS)
|
||||||
FixMsysPath(PkgConfig::LIBUSB)
|
FixMsysPath(PkgConfig::LIBUSB)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ else()
|
|||||||
find_package(PkgConfig QUIET)
|
find_package(PkgConfig QUIET)
|
||||||
pkg_search_module(LZ4 QUIET IMPORTED_TARGET liblz4)
|
pkg_search_module(LZ4 QUIET IMPORTED_TARGET liblz4)
|
||||||
|
|
||||||
if (MSYS2)
|
if (PLATFORM_MSYS)
|
||||||
FixMsysPath(PkgConfig::LZ4)
|
FixMsysPath(PkgConfig::LZ4)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|||||||
+2
-6
@@ -21,14 +21,10 @@ Eden is free, open-source, copyleft software, licensed under the terms of the [G
|
|||||||
### Policies
|
### Policies
|
||||||
|
|
||||||
- No LLM or AI usage, *period*, for patches, pull requests, issues, comments, debugging, brainstorming, etc.
|
- No LLM or AI usage, *period*, for patches, pull requests, issues, comments, debugging, brainstorming, etc.
|
||||||
- For details on why, see the [detailed AI policy](docs/policies/AI.md).
|
- For details on why, see the [detailed AI policy](docs/AI.md).
|
||||||
- Usage of any form of profanity or otherwise unsavory language is generally discouraged.
|
|
||||||
- This is primarily because it rarely helps to actually understand what's going on.
|
|
||||||
- Remember that your comments should be focused and actually address what's happening. With very few exceptions, expletives are actively detrimental at best.
|
|
||||||
- New code must follow the same general style as the surrounding codebase. Exceptions may be granted in certain cases.
|
- New code must follow the same general style as the surrounding codebase. Exceptions may be granted in certain cases.
|
||||||
- Maintainers reserve the right to change your patches and pull requests at will. We will try to avoid this.
|
- Maintainers reserve the right to change your patches and pull requests at will. We will try to avoid this.
|
||||||
- You should generally respect all decisions made by the [code owners](docs/CODEOWNERS) in your particular subsystem.
|
- You should respect all decisions made by the [code owners](docs/CODEOWNERS) in your particular subsystem. If you feel they are overstepping or are incorrect, don't be afraid to stand your ground!
|
||||||
- However, if you feel they are overstepping or are incorrect, don't be afraid to stand your ground! Maintainers are not always correct.
|
|
||||||
- While we do *not* adhere to the terms of a formal code of conduct, you will generally be expected to respect other developers, contributors, and community members.
|
- While we do *not* adhere to the terms of a formal code of conduct, you will generally be expected to respect other developers, contributors, and community members.
|
||||||
- You **must** have basic knowledge of [Git](https://git-scm.com/learn). Knowing how to manage your branches and follow proper fork policies is a necessity.
|
- You **must** have basic knowledge of [Git](https://git-scm.com/learn). Knowing how to manage your branches and follow proper fork policies is a necessity.
|
||||||
|
|
||||||
|
|||||||
@@ -15,9 +15,8 @@
|
|||||||
<br>
|
<br>
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<h4 align="center"><b>Eden</b> is a free and opensource (FOSS) Switch 1 emulator started by developer Camille LaVey.
|
<h4 align="center"><b>Eden</b> is a free and opensource (FOSS) Switch 1 emulator, derived from Yuzu and Sudachi - started by developer Camille LaVey.
|
||||||
<br>
|
It's written in C++ with portability in mind, with builds for Windows, Linux, macOS, Android, FreeBSD and more.
|
||||||
Written in C++, with builds for Windows, Linux, macOS, Android, FreeBSD and more.
|
|
||||||
</h4>
|
</h4>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
@@ -74,17 +73,3 @@ Save us some bandwidth! We have [mirrors available](./docs/user/ThirdParty.md#mi
|
|||||||
## License
|
## License
|
||||||
|
|
||||||
Eden is licensed under the GPLv3 (or any later version). Refer to the [LICENSE.txt](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/LICENSE.txt) file.
|
Eden is licensed under the GPLv3 (or any later version). Refer to the [LICENSE.txt](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/LICENSE.txt) file.
|
||||||
|
|
||||||
## Special thanks
|
|
||||||
|
|
||||||
Super special thanks to Cloudflare for preventing the git server from blowing up.
|
|
||||||
|
|
||||||
- Yuzu
|
|
||||||
- Ryujinx
|
|
||||||
- Sudachi
|
|
||||||
- Citron
|
|
||||||
- Torzu
|
|
||||||
- Suyu
|
|
||||||
- Ryubing
|
|
||||||
|
|
||||||
And everyone who continues or had contributed to the project! <3
|
|
||||||
|
|||||||
+11
-28
@@ -6,23 +6,19 @@
|
|||||||
"version": "v0.19.0"
|
"version": "v0.19.0"
|
||||||
},
|
},
|
||||||
"boost": {
|
"boost": {
|
||||||
"artifact": "%VERSION%-cmake.tar.xz",
|
"artifact": "boost-%VERSION%.tar.zst",
|
||||||
"find_args": "CONFIG OPTIONAL_COMPONENTS headers context system fiber filesystem",
|
"find_args": "CONFIG OPTIONAL_COMPONENTS headers context system fiber filesystem",
|
||||||
"hash": "6ae6e94664fe7f2fb01976b59b276ac5df8085c7503fa829d810fbfe495960cfec44fa2c36e2cb23480bc19c956ed199d4952b02639a00a6c07625d4e7130c2d",
|
"hash": "077ad58b3d336041c05ad5f2b1de7db9fe1d35af3da85cd99496c35ddeca080ecd0ae5c8058319077bda892361b38624d89f70bc9bfec6713aae2aabc17f2a43",
|
||||||
"min_version": "1.57",
|
"min_version": "1.57",
|
||||||
"package": "Boost",
|
"package": "Boost",
|
||||||
"patches": [
|
"repo": "eden-emulator/ext-boost",
|
||||||
"0001-clang-cl.patch",
|
"version": "1.91.0-1"
|
||||||
"0004-openorbis.patch"
|
|
||||||
],
|
|
||||||
"repo": "boostorg/boost",
|
|
||||||
"version": "boost-1.90.0"
|
|
||||||
},
|
},
|
||||||
"boost_headers": {
|
"boost_headers": {
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"hash": "4ef845775e2277a8104ded6ddf749aa262ce52cf8438042869a048f9a0156dd772fbbcfa74efa1378fecef339b7286f6fe4b4feb5c45d49966b35d08e3e83507",
|
"hash": "c5fa2cd72f6e6666b7963b97bc359c75284b8fb540c30f3629a028b85270c9bc66c8a051383964f2bd4c1e005a4691593d15696e7ef39ea87cf6cff9e5691fb2",
|
||||||
"repo": "boostorg/headers",
|
"repo": "boostorg/headers",
|
||||||
"version": "boost-1.90.0"
|
"version": "boost-1.91.0"
|
||||||
},
|
},
|
||||||
"catch2": {
|
"catch2": {
|
||||||
"hash": "7eea385d79d88a5690cde131fe7ccda97d5c54ea09d6f515000d7bf07c828809d61c1ac99912c1ee507cf933f61c1c47ecdcc45df7850ffa82714034b0fccf35",
|
"hash": "7eea385d79d88a5690cde131fe7ccda97d5c54ea09d6f515000d7bf07c828809d61c1ac99912c1ee507cf933f61c1c47ecdcc45df7850ffa82714034b0fccf35",
|
||||||
@@ -71,18 +67,12 @@
|
|||||||
"hash": "a0d2fa8c957704dd49e00a726284ac5ca034b50b00d2b20a94fa1bbfbb80841467834bfdc84aa0ed0d6aab894608fd6c86c3b94eee46343f0e6d9c22e391dbf9",
|
"hash": "a0d2fa8c957704dd49e00a726284ac5ca034b50b00d2b20a94fa1bbfbb80841467834bfdc84aa0ed0d6aab894608fd6c86c3b94eee46343f0e6d9c22e391dbf9",
|
||||||
"min_version": "1.3",
|
"min_version": "1.3",
|
||||||
"repo": "lsalzman/enet",
|
"repo": "lsalzman/enet",
|
||||||
"version": "v1.3.18",
|
"version": "v1.3.18"
|
||||||
"patches": [
|
|
||||||
"0001-openorbis.patch"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"ffmpeg": {
|
"ffmpeg": {
|
||||||
"hash": "ed177621176b3961bdcaa339187d3a7688c1c8b060b79c4bb0257cbc67ad7021ae5d5adca5303b45625abbbe3d9aafdd87ce777b8690ac295290d744c875489a",
|
"hash": "ed177621176b3961bdcaa339187d3a7688c1c8b060b79c4bb0257cbc67ad7021ae5d5adca5303b45625abbbe3d9aafdd87ce777b8690ac295290d744c875489a",
|
||||||
"repo": "FFmpeg/FFmpeg",
|
"repo": "FFmpeg/FFmpeg",
|
||||||
"version": "c7b5f1537d",
|
"version": "c7b5f1537d"
|
||||||
"patches": [
|
|
||||||
"0001-sysctl-openorbis.patch"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"ffmpeg-ci": {
|
"ffmpeg-ci": {
|
||||||
"ci": true,
|
"ci": true,
|
||||||
@@ -197,8 +187,7 @@
|
|||||||
"min_version": "3.0.0",
|
"min_version": "3.0.0",
|
||||||
"package": "OpenSSL",
|
"package": "OpenSSL",
|
||||||
"patches": [
|
"patches": [
|
||||||
"0001-add-bundled-cert.patch",
|
"0001-add-bundled-cert.patch"
|
||||||
"0002-fix-gnu-openorbis.patch"
|
|
||||||
],
|
],
|
||||||
"repo": "openssl/openssl",
|
"repo": "openssl/openssl",
|
||||||
"version": "openssl-3.6.2"
|
"version": "openssl-3.6.2"
|
||||||
@@ -221,9 +210,7 @@
|
|||||||
"0001-cpmutil-compat.patch",
|
"0001-cpmutil-compat.patch",
|
||||||
"0002-use-ccache.patch",
|
"0002-use-ccache.patch",
|
||||||
"0003-use-cmake-compiler-flags.patch",
|
"0003-use-cmake-compiler-flags.patch",
|
||||||
"0004-use-shell-wrapper.patch",
|
"0004-use-shell-wrapper.patch"
|
||||||
"0005-wasm-support.patch",
|
|
||||||
"0006-openorbis-prefix.patch"
|
|
||||||
],
|
],
|
||||||
"repo": "jimmy-park/openssl-cmake",
|
"repo": "jimmy-park/openssl-cmake",
|
||||||
"version": "3.6.2"
|
"version": "3.6.2"
|
||||||
@@ -261,11 +248,7 @@
|
|||||||
"min_version": "3.2.10",
|
"min_version": "3.2.10",
|
||||||
"package": "SDL3",
|
"package": "SDL3",
|
||||||
"repo": "libsdl-org/SDL",
|
"repo": "libsdl-org/SDL",
|
||||||
"version": "release-3.4.8",
|
"version": "release-3.4.8"
|
||||||
"patches": [
|
|
||||||
"0001-ps4.patch",
|
|
||||||
"0002-ps4-drivers.patch"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"sdl3-ci": {
|
"sdl3-ci": {
|
||||||
"ci": true,
|
"ci": true,
|
||||||
|
|||||||
+354
@@ -0,0 +1,354 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "the-legend-of-zelda-breath-of-the-wild",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01007EF00011E000"}
|
||||||
|
],
|
||||||
|
"title": "The Legend of Zelda: Breath of the Wild"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "super-mario-odyssey",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100000000010000"}
|
||||||
|
],
|
||||||
|
"title": "Super Mario Odyssey"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "animal-crossing-new-horizons",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01006F8002326000"}
|
||||||
|
],
|
||||||
|
"title": "Animal Crossing: New Horizons"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "pokemon-legends-z-a",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100F43008C44000"}
|
||||||
|
],
|
||||||
|
"title": "Pokémon Legends: Z-A"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "the-legend-of-zelda-tears-of-the-kingdom",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100F2C0115B6000"}
|
||||||
|
],
|
||||||
|
"title": "The Legend of Zelda: Tears of the Kingdom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "super-mario-galaxy",
|
||||||
|
"releases": [
|
||||||
|
{"id": "010099C022B96000"}
|
||||||
|
],
|
||||||
|
"title": "Super Mario Galaxy"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 3,
|
||||||
|
"directory": "star-wars-republic-commando",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100FA10115F8000"}
|
||||||
|
],
|
||||||
|
"title": "Star Wars: Republic Commando"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "doki-doki-literature-club-plus",
|
||||||
|
"releases": [
|
||||||
|
{"id": "010086901543E000"}
|
||||||
|
],
|
||||||
|
"title": "Doki Doki Literature Club Plus"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "pokemon-scarlet",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100A3D008C5C000"}
|
||||||
|
],
|
||||||
|
"title": "Pokémon Scarlet"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "pokemon-violet",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01008F6008C5E000"}
|
||||||
|
],
|
||||||
|
"title": "Pokémon Violet"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 2,
|
||||||
|
"directory": "pokemon-legends-arceus",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01001E300D162000"}
|
||||||
|
],
|
||||||
|
"title": "Pokémon Legends: Arceus"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "splatoon-2",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01003BC0000A0000"}
|
||||||
|
],
|
||||||
|
"title": "Splatoon 2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "super-smash-bros-ultimate",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01006A800016E000"}
|
||||||
|
],
|
||||||
|
"title": "Super Smash Bros. Ultimate"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "mario-kart-8-deluxe",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100152000022000"}
|
||||||
|
],
|
||||||
|
"title": "Mario Kart 8 Deluxe"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "splatoon-3",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100C2500FC20000"}
|
||||||
|
],
|
||||||
|
"title": "Splatoon 3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "new-super-mario-bros-u-deluxe",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100EA80032EA000"}
|
||||||
|
],
|
||||||
|
"title": "New Super Mario Bros. U Deluxe"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "hyrule-warriors-age-of-calamity",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01002B00111A2000"}
|
||||||
|
],
|
||||||
|
"title": "Hyrule Warriors: Age of Calamity"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 2,
|
||||||
|
"directory": "luigis-mansion-3",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100DCA0064A6000"}
|
||||||
|
],
|
||||||
|
"title": "Luigi's Mansion 3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 2,
|
||||||
|
"directory": "pokemon-brilliant-diamond",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100000011D90000"}
|
||||||
|
],
|
||||||
|
"title": "Pokémon Brilliant Diamond"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 2,
|
||||||
|
"directory": "pokemon-shining-pearl",
|
||||||
|
"releases": [
|
||||||
|
{"id": "010018E011D92000"}
|
||||||
|
],
|
||||||
|
"title": "Pokémon Shining Pearl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "super-mario-3d-world-bowsers-fury",
|
||||||
|
"releases": [
|
||||||
|
{"id": "010028600EBDA000"}
|
||||||
|
],
|
||||||
|
"title": "Super Mario 3D World + Bowser's Fury"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "the-legend-of-zelda-links-awakening",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01006BB00C6F0000"}
|
||||||
|
],
|
||||||
|
"title": "The Legend of Zelda: Link's Awakening"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "fire-emblem-three-houses",
|
||||||
|
"releases": [
|
||||||
|
{"id": "010055D009F78000"}
|
||||||
|
],
|
||||||
|
"title": "Fire Emblem: Three Houses"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 2,
|
||||||
|
"directory": "metroid-dread",
|
||||||
|
"releases": [
|
||||||
|
{"id": "010093801237C000"}
|
||||||
|
],
|
||||||
|
"title": "Metroid Dread"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "paper-mario-the-origami-king",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100A3900C3E2000"}
|
||||||
|
],
|
||||||
|
"title": "Paper Mario: The Origami King"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "xenoblade-chronicles-definitive-edition",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100FF500E34A000"}
|
||||||
|
],
|
||||||
|
"title": "Xenoblade Chronicles: Definitive Edition"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 2,
|
||||||
|
"directory": "xenoblade-chronicles-3",
|
||||||
|
"releases": [
|
||||||
|
{"id": "010074F013262000"}
|
||||||
|
],
|
||||||
|
"title": "Xenoblade Chronicles 3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "pikmin-3-deluxe",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100F8600D4B0000"}
|
||||||
|
],
|
||||||
|
"title": "Pikmin 3 Deluxe"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "donkey-kong-country-tropical-freeze",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100C1F0054B6000"}
|
||||||
|
],
|
||||||
|
"title": "Donkey Kong Country: Tropical Freeze"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "kirby-and-the-forgotten-land",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01004D300C5AE000"}
|
||||||
|
],
|
||||||
|
"title": "Kirby and the Forgotten Land"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 2,
|
||||||
|
"directory": "mario-party-superstars",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01006B400D8B2000"}
|
||||||
|
],
|
||||||
|
"title": "Mario Party Superstars"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "clubhouse-games-51-worldwide-classics",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100F8600D4B0000"}
|
||||||
|
],
|
||||||
|
"title": "Clubhouse Games: 51 Worldwide Classics"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "ring-fit-adventure",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01006B300BAF8000"}
|
||||||
|
],
|
||||||
|
"title": "Ring Fit Adventure"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 2,
|
||||||
|
"directory": "arms",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01009B500007C000"}
|
||||||
|
],
|
||||||
|
"title": "ARMS"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "super-mario-maker-2",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01009B90006DC000"}
|
||||||
|
],
|
||||||
|
"title": "Super Mario Maker 2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "pokemon-lets-go-pikachu",
|
||||||
|
"releases": [
|
||||||
|
{"id": "010003F003A34000"}
|
||||||
|
],
|
||||||
|
"title": "Pokémon: Let's Go, Pikachu!"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "pokemon-lets-go-eevee",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100187003A36000"}
|
||||||
|
],
|
||||||
|
"title": "Pokémon: Let's Go, Eevee!"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 2,
|
||||||
|
"directory": "pokemon-sword",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100ABF008968000"}
|
||||||
|
],
|
||||||
|
"title": "Pokémon Sword"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 2,
|
||||||
|
"directory": "pokemon-shield",
|
||||||
|
"releases": [
|
||||||
|
{"id": "01008DB008C2C000"}
|
||||||
|
],
|
||||||
|
"title": "Pokémon Shield"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "new-pokemon-snap",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100F4300C182000"}
|
||||||
|
],
|
||||||
|
"title": "New Pokémon Snap"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "mario-golf-super-rush",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100C9C00E25C000"}
|
||||||
|
],
|
||||||
|
"title": "Mario Golf: Super Rush"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 1,
|
||||||
|
"directory": "mario-tennis-aces",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100BDE00862A000"}
|
||||||
|
],
|
||||||
|
"title": "Mario Tennis Aces"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 2,
|
||||||
|
"directory": "wario-ware-get-it-together",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100563010F22000"}
|
||||||
|
],
|
||||||
|
"title": "WarioWare: Get It Together!"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compatibility": 0,
|
||||||
|
"directory": "big-brain-academy-brain-vs-brain",
|
||||||
|
"releases": [
|
||||||
|
{"id": "0100190010F24000"}
|
||||||
|
],
|
||||||
|
"title": "Big Brain Academy: Brain vs. Brain"
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<RCC>
|
||||||
|
<qresource prefix="compatibility_list">
|
||||||
|
<file>compatibility_list.json</file>
|
||||||
|
</qresource>
|
||||||
|
</RCC>
|
||||||
Vendored
-215
@@ -1,215 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg
|
|
||||||
width="512"
|
|
||||||
height="512"
|
|
||||||
fill="none"
|
|
||||||
viewBox="0 0 512 512"
|
|
||||||
version="1.1"
|
|
||||||
id="svg7"
|
|
||||||
sodipodi:docname="ps4.svg"
|
|
||||||
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
|
||||||
inkscape:export-filename="base.svg.2026_01_12_14_43_47.0.svg"
|
|
||||||
inkscape:export-xdpi="96"
|
|
||||||
inkscape:export-ydpi="96"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg">
|
|
||||||
<defs
|
|
||||||
id="defs7">
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient5"
|
|
||||||
inkscape:collect="always">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#003e74;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop4" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#2ea8ff;stop-opacity:1;"
|
|
||||||
offset="1"
|
|
||||||
id="stop5" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient1"
|
|
||||||
inkscape:collect="always">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#3579ff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop2" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#0b00ff;stop-opacity:1;"
|
|
||||||
offset="1"
|
|
||||||
id="stop3" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
id="swatch37"
|
|
||||||
inkscape:swatch="solid">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop37" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
id="swatch28"
|
|
||||||
inkscape:swatch="solid">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#252525;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop28" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
id="swatch27"
|
|
||||||
inkscape:swatch="solid">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#000000;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop27" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
id="swatch15"
|
|
||||||
inkscape:swatch="solid">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop16" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient14"
|
|
||||||
inkscape:swatch="gradient">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop14" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:0;"
|
|
||||||
offset="1"
|
|
||||||
id="stop15" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
id="swatch9"
|
|
||||||
inkscape:swatch="solid">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop10" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
id="swatch8"
|
|
||||||
inkscape:swatch="solid">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop9" />
|
|
||||||
</linearGradient>
|
|
||||||
<rect
|
|
||||||
x="22.627417"
|
|
||||||
y="402.76802"
|
|
||||||
width="521.34025"
|
|
||||||
height="248.94868"
|
|
||||||
id="rect24" />
|
|
||||||
<clipPath
|
|
||||||
clipPathUnits="userSpaceOnUse"
|
|
||||||
id="clipPath18">
|
|
||||||
<circle
|
|
||||||
style="opacity:1;mix-blend-mode:normal;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10.8382;stroke-opacity:0.566238;paint-order:stroke fill markers"
|
|
||||||
id="circle18"
|
|
||||||
cx="-246.8315"
|
|
||||||
cy="246.8338"
|
|
||||||
inkscape:label="Circle"
|
|
||||||
r="191.89999" />
|
|
||||||
</clipPath>
|
|
||||||
<clipPath
|
|
||||||
clipPathUnits="userSpaceOnUse"
|
|
||||||
id="clipPath22">
|
|
||||||
<circle
|
|
||||||
style="opacity:1;mix-blend-mode:normal;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10.8382;stroke-opacity:0.566238;paint-order:stroke fill markers"
|
|
||||||
id="circle22"
|
|
||||||
cx="256"
|
|
||||||
cy="256"
|
|
||||||
inkscape:label="Circle"
|
|
||||||
r="191.89999" />
|
|
||||||
</clipPath>
|
|
||||||
<clipPath
|
|
||||||
clipPathUnits="userSpaceOnUse"
|
|
||||||
id="clipPath128">
|
|
||||||
<circle
|
|
||||||
style="fill:none;fill-opacity:1;stroke:#03ffff;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
id="circle128"
|
|
||||||
cx="256"
|
|
||||||
cy="256"
|
|
||||||
r="192" />
|
|
||||||
</clipPath>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient1"
|
|
||||||
id="linearGradient3"
|
|
||||||
x1="256"
|
|
||||||
y1="64"
|
|
||||||
x2="256"
|
|
||||||
y2="448"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(1.1874952,0,0,-1.1874952,-47.370662,560.66391)" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient5"
|
|
||||||
id="linearGradient4"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(-1.1874952,0,0,1.1874952,560.61528,-47.345282)"
|
|
||||||
x1="256"
|
|
||||||
y1="64"
|
|
||||||
x2="256"
|
|
||||||
y2="448" />
|
|
||||||
</defs>
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="namedview7"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#000000"
|
|
||||||
borderopacity="0.25"
|
|
||||||
inkscape:showpageshadow="2"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pagecheckerboard="0"
|
|
||||||
inkscape:deskcolor="#d1d1d1"
|
|
||||||
inkscape:zoom="1"
|
|
||||||
inkscape:cx="286.49999"
|
|
||||||
inkscape:cy="236.99999"
|
|
||||||
inkscape:window-width="1600"
|
|
||||||
inkscape:window-height="849"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="27"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:current-layer="svg7" />
|
|
||||||
<path
|
|
||||||
id="path8-7"
|
|
||||||
style="display:inline;mix-blend-mode:color;fill:url(#linearGradient3);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.566238;paint-order:stroke fill markers"
|
|
||||||
inkscape:label="Circle"
|
|
||||||
d="m 256.62812,484.66422 a 227.99908,228.00372 0 0 1 -94.5288,-20.52182 c 17.54241,-0.96226 34.77843,-4.71825 46.2868,-10.46733 12.69502,-6.3416 25.70492,-17.24174 35.38366,-26.3736 h 36.45053 c 0.93211,0.61234 1.88758,1.23061 2.86668,1.85086 4.89722,14.18571 13.27668,38.80747 17.49933,51.23264 a 227.99908,228.00372 0 0 1 -43.9582,4.27925 z m 55.26491,-6.80041 -16.39068,-41.47736 c 6.99845,3.71973 14.6813,7.07649 22.62503,9.76921 20.75463,7.03513 39.46594,9.14022 49.31353,9.76688 a 227.99908,228.00372 0 0 1 -55.54788,21.94127 z m 58.6952,-23.72487 c -8.69086,-4.31956 -29.66977,-14.9556 -49.97917,-26.83747 h 87.23219 a 227.99908,228.00372 0 0 1 -37.25302,26.83747 z m -241.49988,-8.48659 a 227.99908,228.00372 0 0 1 -23.67337,-18.35088 h 95.80906 c -1.32304,0.72101 -2.11058,1.13186 -2.11058,1.13186 l 9.37935,10.63433 -34.47214,-6.30174 c 0,-2e-5 -10.96427,4.13624 -36.05858,11.02861 -3.09966,0.85131 -6.06162,1.45425 -8.87374,1.85782 z M 96.054184,418.52496 A 227.99908,228.00372 0 0 1 64.743277,379.80069 h 53.833883 c 16.2593,10.82121 36.03109,20.56336 55.93056,22.04797 47.50893,3.54468 62.979,-1.67459 62.979,-1.67459 0,0 -4.13964,4.3321 -13.0323,12.01204 -2.4447,2.11135 -5.46123,4.28998 -8.54904,6.33885 z m 156.603246,0 c 4.10483,-4.24043 6.54978,-7.04162 6.54978,-7.04162 0,0 3.17296,2.8621 8.63949,7.04162 z m 54.10293,0 c -19.35695,-13.88741 -22.86161,-25.14433 -22.86161,-25.14433 0,0 49.2172,17.2685 90.39112,0.28064 10.4477,-4.31055 19.37408,-9.1049 26.88099,-13.86058 h 47.3421 a 227.99908,228.00372 0 0 1 -31.31091,38.72427 z M 59.385631,371.02418 A 227.99908,228.00372 0 0 1 41.543041,332.29992 H 159.20017 c 1.30773,2.3199 2.75142,4.57103 4.34409,6.73083 12.77878,17.32895 25.06121,26.96783 33.0852,31.99343 h -27.15468 c -5.2719,-0.84 -10.81534,-1.78919 -16.40924,-2.84819 -27.04349,-5.11994 -72.845405,-20.48007 -72.845405,-20.48007 0,0 10.296355,11.13669 26.131855,23.32826 z m 238.424449,0 c 30.05703,-10.10404 47.05829,-24.07021 56.34572,-38.72426 h 117.55739 a 227.99908,228.00372 0 0 1 -17.84258,38.72426 h -40.22176 c 13.33114,-10.41219 19.38725,-18.85882 19.38725,-18.85882 0,0 -30.08919,11.11726 -59.29823,18.85882 z m -41.2585,-14.62133 c -0.90134,-0.01 -9.08983,-0.64727 -40.38179,-18.55498 -2.80164,-1.60327 -5.61377,-3.47048 -8.41452,-5.54795 h 37.53597 c 6.43727,15.58979 11.34615,24.10293 11.34615,24.10293 0,0 -0.0258,6.4e-4 -0.0858,0 z m 12.72847,-0.0418 c 0,0 -2.97304,-8.3824 -6.55675,-24.06118 h 46.48163 c -24.16151,23.08045 -39.92488,24.06123 -39.92488,24.06123 z M 38.653164,323.52341 a 227.99908,228.00372 0 0 1 -8.28,-38.72426 H 147.25331 c 0.50409,11.4347 2.40394,25.61361 7.73264,38.72426 z m 158.567726,0 c -12.80955,-11.77756 -24.77977,-26.58932 -33.71374,-38.72426 h 65.85729 c 4.01234,15.08912 8.39298,28.09557 12.44549,38.72426 z m 63.60057,0 c -2.16662,-10.57203 -4.40101,-23.55135 -6.23667,-38.72426 h 95.8253 c -7.46906,9.7857 -18.55287,23.51811 -32.62829,38.72426 z m 97.99155,0 c 5.95644,-13.69644 6.2152,-27.44278 5.00743,-38.72426 h 119.06262 a 227.99908,228.00372 0 0 1 -8.28,38.72426 z M 29.452392,276.02264 A 227.99908,228.00372 0 0 1 28.62903,256.6605 227.99908,228.00372 0 0 1 29.452392,237.29836 H 219.64878 c 2.02639,13.95226 4.61647,26.90106 7.48446,38.72428 H 157.2241 c -5.80191,-8.33616 -9.27267,-13.98815 -9.27267,-13.98815 0,0 -0.7416,5.5263 -0.8396,13.98815 z m 224.144368,0 c -1.22897,-11.76966 -2.19512,-24.70616 -2.7113,-38.72428 h 232.91837 a 227.99908,228.00372 0 0 1 0.82337,19.36214 227.99908,228.00372 0 0 1 -0.82337,19.36214 H 362.56568 c -0.39943,-2.2888 -0.8157,-4.40137 -1.19214,-6.30638 0,0 -1.52342,2.281 -4.43454,6.30638 z M 30.373164,228.52186 a 227.99908,228.00372 0 0 1 8.28,-38.72427 H 218.96921 c -1.16001,13.8461 -1.41371,26.99937 -0.37573,38.72427 z m 220.252536,0 c -0.27246,-12.17105 -0.19776,-25.09608 0.33166,-38.72427 h 223.6457 a 227.99908,228.00372 0 0 1 8.28,38.72427 z M 41.540725,181.02109 a 227.99908,228.00372 0 0 1 17.84259,-38.72427 H 225.63264 c -2.42151,12.98777 -4.45297,26.07281 -5.81919,38.72427 z m 209.892105,0 c 1.03997,-13.90922 3.42234,-26.81596 6.74692,-38.72427 h 195.69317 a 227.99908,228.00372 0 0 1 17.84258,38.72427 z M 64.740961,133.52032 A 227.99908,228.00372 0 0 1 96.051856,94.796041 H 236.06961 c -3.05987,12.287259 -6.07477,25.390049 -8.74155,38.724279 z m 196.112969,0 c 4.80192,-14.52175 10.96848,-27.42708 17.67095,-38.724279 h 138.6795 a 227.99908,228.00372 0 0 1 31.3109,38.724279 z M 105.41267,86.019537 A 227.99908,228.00372 0 0 1 254.61726,28.666053 c -3.30134,10.858112 -9.7429,31.901037 -16.31878,57.353484 z m 178.62756,0 C 299.82749,62.260898 317.24402,46.83239 326.52798,39.636692 a 227.99908,228.00372 0 0 1 81.31559,46.382845 z" />
|
|
||||||
<path
|
|
||||||
id="path8-7-2"
|
|
||||||
style="display:inline;mix-blend-mode:color;fill:url(#linearGradient4);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-dasharray:none;stroke-opacity:0.566238;paint-order:stroke fill markers"
|
|
||||||
inkscape:label="Circle"
|
|
||||||
d="m 256.61651,28.654412 a 227.99908,228.00372 0 0 1 94.5288,20.521817 C 333.6029,50.138492 316.36688,53.89448 304.85851,59.64356 292.1635,65.985164 279.15359,76.8853 269.47486,86.017162 h -36.45054 c -0.93211,-0.612343 -1.88758,-1.230613 -2.86668,-1.850865 -4.89722,-14.18571 -13.27667,-38.807461 -17.49932,-51.232639 a 227.99908,228.00372 0 0 1 43.95819,-4.279246 z m -55.26491,6.800405 16.39068,41.477366 c -6.99844,-3.719734 -14.6813,-7.076497 -22.62503,-9.769213 -20.75463,-7.035126 -39.46594,-9.140222 -49.31352,-9.766875 A 227.99908,228.00372 0 0 1 201.3516,35.454817 Z m -58.6952,23.724872 c 8.69086,4.319561 29.66977,14.955598 49.97917,26.837473 H 105.40338 A 227.99908,228.00372 0 0 1 142.6564,59.179689 Z m 241.49988,8.486589 a 227.99908,228.00372 0 0 1 23.67337,18.350884 h -95.80906 c 1.32305,-0.721011 2.11058,-1.131861 2.11058,-1.131861 l -9.37935,-10.634328 34.47215,6.30174 c 0,1.2e-5 10.96426,-4.136248 36.05857,-11.028611 3.09966,-0.851315 6.06162,-1.454254 8.87374,-1.857824 z m 33.03417,27.127388 a 227.99908,228.00372 0 0 1 31.31091,38.724274 h -53.83388 c -16.25931,-10.82121 -36.0311,-20.56336 -55.93057,-22.04797 -47.50892,-3.54468 -62.97899,1.67459 -62.97899,1.67459 0,0 4.13963,-4.3321 13.03229,-12.01204 2.4447,-2.111347 5.46123,-4.289985 8.54904,-6.338854 z m -156.60325,0 c -4.10482,4.240439 -6.54978,7.041624 -6.54978,7.041624 0,0 -3.17295,-2.862104 -8.63949,-7.041624 z m -54.10293,0 c 19.35695,13.887414 22.86161,25.144334 22.86161,25.144334 0,0 -49.2172,-17.2685 -90.39112,-0.28064 -10.4477,4.31055 -19.37408,9.1049 -26.88099,13.86058 H 64.73166 A 227.99908,228.00372 0 0 1 96.042582,94.793666 Z m 247.37474,47.500784 a 227.99908,228.00372 0 0 1 17.84257,38.72426 H 354.04446 c -1.30773,-2.3199 -2.75142,-4.57103 -4.34409,-6.73083 -12.77878,-17.32895 -25.06121,-26.96783 -33.0852,-31.99343 h 27.15468 c 5.2719,0.84 10.81534,1.78919 16.40924,2.84819 27.04349,5.11994 72.84541,20.48007 72.84541,20.48007 0,0 -10.29636,-11.13669 -26.13186,-23.32826 z m -238.42446,0 c -30.05702,10.10404 -47.05829,24.07021 -56.34572,38.72426 H 41.531435 a 227.99908,228.00372 0 0 1 17.842579,-38.72426 h 40.221767 c -13.331141,10.41219 -19.387248,18.85882 -19.387248,18.85882 0,0 30.089197,-11.11726 59.298227,-18.85882 z m 41.2585,14.62133 c 0.90134,0.009 9.08984,0.64727 40.38179,18.55498 2.80164,1.60327 5.61377,3.47048 8.41452,5.54795 h -37.53597 c -6.43727,-15.58979 -11.34615,-24.10293 -11.34615,-24.10293 0,0 0.0258,-6.4e-4 0.0859,0 z m -12.72847,0.0418 c 0,0 2.97304,8.3824 6.55675,24.06118 H 204.0397 c 24.16152,-23.08045 39.92488,-24.06123 39.92488,-24.06123 z m 230.62688,32.83764 a 227.99908,228.00372 0 0 1 8.28,38.72426 H 365.99132 c -0.50409,-11.4347 -2.40394,-25.61361 -7.73264,-38.72426 z m -158.56772,0 c 12.80955,11.77756 24.77977,26.58932 33.71374,38.72426 h -65.85729 c -4.01234,-15.08912 -8.39298,-28.09557 -12.44549,-38.72426 z m -63.60057,0 c 2.16662,10.57203 4.40101,23.55135 6.23667,38.72426 h -95.8253 c 7.46906,-9.7857 18.55287,-23.51811 32.62829,-38.72426 z m -97.99154,0 c -5.95644,13.69644 -6.21521,27.44278 -5.00743,38.72426 H 30.361558 a 227.99908,228.00372 0 0 1 8.280001,-38.72426 z m 329.3606,47.50077 a 227.99908,228.00372 0 0 1 0.82336,19.36214 227.99908,228.00372 0 0 1 -0.82336,19.36214 H 293.59585 c -2.02639,-13.95226 -4.61647,-26.90106 -7.48446,-38.72428 h 69.90914 c 5.80191,8.33616 9.27267,13.98815 9.27267,13.98815 0,0 0.74161,-5.5263 0.8396,-13.98815 z m -224.14436,0 c 1.22897,11.76966 2.19512,24.70616 2.7113,38.72428 H 29.440786 a 227.99908,228.00372 0 0 1 -0.823361,-19.36214 227.99908,228.00372 0 0 1 0.823361,-19.36214 H 150.67895 c 0.39943,2.2888 0.8157,4.40137 1.19214,6.30638 0,0 1.52343,-2.281 4.43455,-6.30638 z m 223.22359,47.50078 a 227.99908,228.00372 0 0 1 -8.28,38.72427 H 294.27542 c 1.16002,-13.8461 1.41371,-26.99937 0.37574,-38.72427 z m -220.25252,0 c 0.27245,12.17105 0.19775,25.09608 -0.33167,38.72427 H 38.641559 a 227.99908,228.00372 0 0 1 -8.280001,-38.72427 z m 209.08496,47.50077 a 227.99908,228.00372 0 0 1 -17.84258,38.72427 H 287.61199 c 2.42151,-12.98777 4.45297,-26.07281 5.81919,-38.72427 z m -209.89209,0 c -1.03998,13.90921 -3.42235,26.81596 -6.74692,38.72427 H 59.371698 A 227.99908,228.00372 0 0 1 41.52912,332.29754 Z m 186.69187,47.50077 a 227.99908,228.00372 0 0 1 -31.3109,38.72428 H 277.17503 c 3.05986,-12.28726 6.07476,-25.39005 8.74154,-38.72428 z m -196.11297,0 c -4.80193,14.52175 -10.96849,27.42708 -17.67095,38.72428 H 96.040255 A 227.99908,228.00372 0 0 1 64.729344,379.79831 Z m 155.44125,47.50078 a 227.99908,228.00372 0 0 1 -149.20459,57.35348 c 3.30135,-10.85811 9.7429,-31.90104 16.31879,-57.35348 z m -178.62756,0 c -15.78726,23.75863 -33.20379,39.18714 -42.48775,46.38284 a 227.99908,228.00372 0 0 1 -81.31558,-46.38284 z" />
|
|
||||||
<ellipse
|
|
||||||
style="fill:none;fill-opacity:0.679924;stroke:#97f0e5;stroke-width:17.5749;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
id="path192"
|
|
||||||
cx="88.20919"
|
|
||||||
cy="216.80666"
|
|
||||||
rx="43.306744"
|
|
||||||
ry="42.75507" />
|
|
||||||
<path
|
|
||||||
style="fill:none;fill-opacity:0.679924;stroke:#97f0e5;stroke-width:17.5749;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
d="M 211.35225,346.71976 151.38374,303.96994 137.1338,384.12586 Z"
|
|
||||||
id="path195" />
|
|
||||||
<path
|
|
||||||
id="path196-7"
|
|
||||||
style="fill:none;fill-opacity:0.679924;stroke:#97f0e5;stroke-width:17.5749;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
d="m 309.50171,362.30735 86.0678,57.93833 m -75.48269,11.93227 57.93833,-86.0678" />
|
|
||||||
<rect
|
|
||||||
style="fill:none;fill-opacity:0.679924;stroke:#97f0e5;stroke-width:13.9781;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
id="rect197"
|
|
||||||
width="66.112526"
|
|
||||||
height="59.501274"
|
|
||||||
x="93.831078"
|
|
||||||
y="-503.61469"
|
|
||||||
transform="rotate(108)" />
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 16 KiB |
Vendored
+924
-781
File diff suppressed because it is too large
Load Diff
Vendored
+938
-790
File diff suppressed because it is too large
Load Diff
Vendored
+912
-764
File diff suppressed because it is too large
Load Diff
Vendored
+920
-772
File diff suppressed because it is too large
Load Diff
Vendored
+911
-758
File diff suppressed because it is too large
Load Diff
Vendored
+912
-764
File diff suppressed because it is too large
Load Diff
Vendored
+913
-760
File diff suppressed because it is too large
Load Diff
Vendored
+912
-764
File diff suppressed because it is too large
Load Diff
Vendored
+919
-770
File diff suppressed because it is too large
Load Diff
Vendored
+912
-764
File diff suppressed because it is too large
Load Diff
Vendored
+914
-765
File diff suppressed because it is too large
Load Diff
Vendored
+923
-771
File diff suppressed because it is too large
Load Diff
Vendored
+914
-766
File diff suppressed because it is too large
Load Diff
Vendored
+1007
-863
File diff suppressed because it is too large
Load Diff
Vendored
+916
-768
File diff suppressed because it is too large
Load Diff
Vendored
+915
-765
File diff suppressed because it is too large
Load Diff
Vendored
+923
-771
File diff suppressed because it is too large
Load Diff
Vendored
+910
-757
File diff suppressed because it is too large
Load Diff
Vendored
+912
-764
File diff suppressed because it is too large
Load Diff
Vendored
+925
-781
File diff suppressed because it is too large
Load Diff
Vendored
+909
-757
File diff suppressed because it is too large
Load Diff
Vendored
+920
-771
File diff suppressed because it is too large
Load Diff
Vendored
+908
-757
File diff suppressed because it is too large
Load Diff
Vendored
+912
-764
File diff suppressed because it is too large
Load Diff
Vendored
+912
-764
File diff suppressed because it is too large
Load Diff
Vendored
+913
-768
File diff suppressed because it is too large
Load Diff
Vendored
+914
-765
File diff suppressed because it is too large
Load Diff
@@ -12,7 +12,6 @@
|
|||||||
- [NetBSD](#netbsd)
|
- [NetBSD](#netbsd)
|
||||||
- [MSYS2](#msys2)
|
- [MSYS2](#msys2)
|
||||||
- [RedoxOS](#redoxos)
|
- [RedoxOS](#redoxos)
|
||||||
- [PlayStation 4](#playstation-4)
|
|
||||||
- [Windows](#windows)
|
- [Windows](#windows)
|
||||||
- [Windows 7, Windows 8 and Windows 8.1](#windows-7-windows-8-and-windows-81)
|
- [Windows 7, Windows 8 and Windows 8.1](#windows-7-windows-8-and-windows-81)
|
||||||
- [Windows Vista and below](#windows-vista-and-below)
|
- [Windows Vista and below](#windows-vista-and-below)
|
||||||
@@ -246,17 +245,6 @@ The package install may randomly hang at times, in which case it has to be resta
|
|||||||
|
|
||||||
When CMake invokes certain file syscalls - it may sometimes cause crashes or corruptions on the (kernel?) address space - so reboot the system if there is a "hang" in CMake.
|
When CMake invokes certain file syscalls - it may sometimes cause crashes or corruptions on the (kernel?) address space - so reboot the system if there is a "hang" in CMake.
|
||||||
|
|
||||||
## PlayStation 4
|
|
||||||
|
|
||||||
```sh
|
|
||||||
export OO_PS4_TOOLCHAIN="$HOME/OpenOrbis/PS4Toolchain/prefix"
|
|
||||||
export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1
|
|
||||||
```
|
|
||||||
|
|
||||||
```sh
|
|
||||||
cp $OO_PS4_TOOLCHAIN/include/endian.h $OO_PS4_TOOLCHAIN/include/sys/endian.h
|
|
||||||
```
|
|
||||||
|
|
||||||
## Windows
|
## Windows
|
||||||
|
|
||||||
### Windows 7, Windows 8 and Windows 8.1
|
### Windows 7, Windows 8 and Windows 8.1
|
||||||
|
|||||||
@@ -1,47 +0,0 @@
|
|||||||
# Design Overview
|
|
||||||
|
|
||||||
Modern game consoles require heavy power to be emulated appropriatedly. This is why the emulator uses an approach known as HLE (High-Level-Emulation), in a nuthsell: Instead of accurately emulating every subsystem that forms part of a component, emulate the resulting visible I/O interface instead.
|
|
||||||
|
|
||||||
For example, take a disk write, instead of emulating a proper SD card we instead use the C++ standard library for I/O. Additionally we use the abstractions provided by the `fs` service to "lie" to programs about certain SD card properties. Notably this includes making up sizes for the fake SD card, giving "realistic" values or expected outputs for a given card, and so on. And instead of writing to an actual SD card, the emulator simply writes to a file.
|
|
||||||
|
|
||||||
This also means grand part of the emulator consists of just re-implementing firmware but using HLE primitives; for example audio doesn't go to an emulated audio device, but rather gets processed on the fly by a dedicated service and then passed to SDL3/cubeb/etc.
|
|
||||||
|
|
||||||
As such, many of the systems implemented are not 100% accurate to the original software, but they're "good enough" to pass as being so. While we do strive to maintain high compatibility (especially with homebrew), there are realistic limitations to these approaches.
|
|
||||||
|
|
||||||
No formal fuzzing or formal verification has been done on the emulator as a whole, this means there may be hundreds of bugs hiding in each subsystem. As such, output may also not correctly match due to those aforementioned issues.
|
|
||||||
|
|
||||||
## src/android/
|
|
||||||
|
|
||||||
Entire Android frontend, written mostly in Kotlin and generally having asinine hacks (thanks Android) due to the particularly horrific (and particular way) to do things.
|
|
||||||
|
|
||||||
## src/audio_core/
|
|
||||||
|
|
||||||
Handles everything related to audio, this is where most of the filtering and processing occurs (CPU intensive task!).
|
|
||||||
|
|
||||||
## src/common/
|
|
||||||
|
|
||||||
The [common](../src/common) folder contains just your basic pollyfills for whatever missing functionality. We heavily encourage new PRs to make use of one of the dependencies, or the standard C++ library. Minimizing the amount of things we reinvent the wheel for is always a good thing.
|
|
||||||
|
|
||||||
## src/core/
|
|
||||||
|
|
||||||
The [core folder](../src/core) is the main heart of the emulator, while we don't officially support having other frontends out of the box (RetroArch, for example); any prospective developer can reuse this library (compiled as one by CMake) to stitch up their own RetroArch core, for example.
|
|
||||||
|
|
||||||
## src/dynarmic/
|
|
||||||
|
|
||||||
See [Dynarmic](./dynarmic).
|
|
||||||
|
|
||||||
## src/hid_core/
|
|
||||||
|
|
||||||
Input, joysticks, controllers and everything related to input devices.
|
|
||||||
|
|
||||||
## src/shader_recompiler/
|
|
||||||
|
|
||||||
Dedicated shader recompiler to translate Maxwell assembly code to either SPIR-V, GLSL or GLASM.
|
|
||||||
|
|
||||||
## src/video_core/
|
|
||||||
|
|
||||||
Most of the things here have their own dedicated section. In short this is basically the entire Tegra NVIDIA Maxwell GPU emulation. Additionally it includes some [extra effects](../src/video_core/host_ahders) to emulate MSAA, D24 copies or as polyfill.
|
|
||||||
|
|
||||||
Available backends are: Null, Vulkan, and OpenGL.
|
|
||||||
|
|
||||||
See [NVIDIA GPU](./NvidiaGpu.md).
|
|
||||||
@@ -46,8 +46,6 @@ These options control dependencies.
|
|||||||
- `YUZU_INSTALL_UDEV_RULES` (OFF) Install udev rules to enable hidraw access
|
- `YUZU_INSTALL_UDEV_RULES` (OFF) Install udev rules to enable hidraw access
|
||||||
- Needed for gyroscopes
|
- Needed for gyroscopes
|
||||||
- Only available on Linux
|
- Only available on Linux
|
||||||
- `ENABLE_DEBUG_TOOLS` (OFF) Enables debugging and development tools, see [tools](../tools/README.md).
|
|
||||||
- `ENABLE_WERROR` (ON) Enables warnings as errors (-Werror).
|
|
||||||
|
|
||||||
### Flavors
|
### Flavors
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ This contains documentation created by developers. This contains build instructi
|
|||||||
- **[Driver Bugs](./DriverBugs.md)**
|
- **[Driver Bugs](./DriverBugs.md)**
|
||||||
- **[Building Older Commits](./build/OlderCommits.md)**
|
- **[Building Older Commits](./build/OlderCommits.md)**
|
||||||
- Subsystems:
|
- Subsystems:
|
||||||
- **[Design Overview](./DesignOverview.md)**
|
|
||||||
- **[Dynarmic](./dynarmic/README.md)**
|
- **[Dynarmic](./dynarmic/README.md)**
|
||||||
- **[HOS Kernel](./HosKernel.md)**
|
- **[HOS Kernel](./HosKernel.md)**
|
||||||
- **[Settings](./Settings.md)**
|
- **[Settings](./Settings.md)**
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ Everyone has their own way of viewing good/bad C++ practices, my general outline
|
|||||||
- The reason is because the project has `-fno-rtti` disabled by default, due to the costs of dynamic polymorphism.
|
- The reason is because the project has `-fno-rtti` disabled by default, due to the costs of dynamic polymorphism.
|
||||||
- Always copy-on-value for objects with `sizeof(void *) >= sizeof(T) * 2`, i.e objects sized as 2 pointers or less, for bigger objects you can use ref/pointer as usual.
|
- Always copy-on-value for objects with `sizeof(void *) >= sizeof(T) * 2`, i.e objects sized as 2 pointers or less, for bigger objects you can use ref/pointer as usual.
|
||||||
- Try using move semantics instead of references, whenever possible.
|
- Try using move semantics instead of references, whenever possible.
|
||||||
- Function parameters are cheap. Don't be afraid to use as many as needed (API usability permitting).
|
- Remember function parameters are extremelly cheap as fuck, don't be afraid to place upto 8 parameters on a given function.
|
||||||
- Don't save a reference in structures of a parent object, i.e:
|
- Don't save a reference in structures of a parent object, i.e:
|
||||||
|
|
||||||
```c++
|
```c++
|
||||||
|
|||||||
@@ -35,7 +35,6 @@ Eden will store configuration files in the following directories:
|
|||||||
- **Android**: Data is stored internally.
|
- **Android**: Data is stored internally.
|
||||||
- **Linux, macOS, FreeBSD, Solaris, OpenBSD**: `$XDG_DATA_HOME`, `$XDG_CACHE_HOME`, `$XDG_CONFIG_HOME`.
|
- **Linux, macOS, FreeBSD, Solaris, OpenBSD**: `$XDG_DATA_HOME`, `$XDG_CACHE_HOME`, `$XDG_CONFIG_HOME`.
|
||||||
- **HaikuOS**: `/boot/home/config/settings/eden`
|
- **HaikuOS**: `/boot/home/config/settings/eden`
|
||||||
- **PlayStation 4**: `/data/eden`
|
|
||||||
|
|
||||||
If a `user` directory is present in the current working directory, that will override all global configuration directories and the emulator will use that instead.
|
If a `user` directory is present in the current working directory, that will override all global configuration directories and the emulator will use that instead.
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,3 @@ There are two main applications, an SDL-based app (`eden-cli`) and a Qt based ap
|
|||||||
- `--user/-u`: Specify the user index.
|
- `--user/-u`: Specify the user index.
|
||||||
- `--version/-v`: Display version and quit.
|
- `--version/-v`: Display version and quit.
|
||||||
- `--input-profile/-i`: Specifies input profile name to use (for player #0 only).
|
- `--input-profile/-i`: Specifies input profile name to use (for player #0 only).
|
||||||
- `--null-render/-n`: Forces the usage of the "Null" render backend irrespective of settings.
|
|
||||||
- `--filter/-x`: Sets the debug log filter irrespective of settings.
|
|
||||||
- `--singlecore/-s`: Forces single-core regardless of settings.
|
|
||||||
|
|||||||
@@ -77,41 +77,3 @@ Use this guide to get starting using the Eden emulator.
|
|||||||
8. Double-Click the main window to add the folder containing your games.
|
8. Double-Click the main window to add the folder containing your games.
|
||||||
9. Go to *Emulation > Configure > Input* and set up your controller. Click **OK** to close the dialog window.
|
9. Go to *Emulation > Configure > Input* and set up your controller. Click **OK** to close the dialog window.
|
||||||
10. Double-Click a game to run it.
|
10. Double-Click a game to run it.
|
||||||
|
|
||||||
## macOS
|
|
||||||
|
|
||||||
Current macOS support is still experimental and very reliant on MoltenVK developments, plans have shifted to properly provide support for KosmicKrisp and similar new GPU endeavours, but macOS users still are bound to MoltenVK itself.
|
|
||||||
|
|
||||||
Users of macOS may wish to use [Asahi Linux](https://wiki.gentoo.org/wiki/Project:Asahi/Guide) for the rising KosmicKrisp support.
|
|
||||||
|
|
||||||
As of writing, neither macOS nor Asahi has support for NCE; additionally Asahi has extraneous paging bugs with fastmem.
|
|
||||||
|
|
||||||
### Allowing Eden to Run on MacOS
|
|
||||||
|
|
||||||
Use this guide when you need to allow Eden to run on a Mac system, but are being blocked by Apple Security policy.
|
|
||||||
|
|
||||||
**Click [Here](https://evilperson1337.notion.site/Allowing-Eden-to-Run-on-MacOS-2b057c2edaf681fea63dc81027efeffd) for a version of this guide with images & visual elements.**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
##### Pre-Requisites
|
|
||||||
|
|
||||||
- Permissions to modify settings in MacOS
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
#### Why am I Seeing This?
|
|
||||||
|
|
||||||
Recent versions of MacOS (Catalina & newer) introduced the **Gatekeeper** security functionality, requiring software to be signed by Apple or a trusted (aka - paying) developer. If the signature isn't on the list of trusted ones, it will stop the program from executing and display the message above.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
#### Steps
|
|
||||||
|
|
||||||
1. Open the *System Settings* panel.
|
|
||||||
2. Navigate to *Privacy & Security*.
|
|
||||||
3. Scroll down and observe the following message under the **Security** settings.
|
|
||||||
4. Select **Open Anyway** to tell your Mac that you trust the application.
|
|
||||||
5. You will now get another window appearing to verify you want to open Eden. Select **Open Anyway**.
|
|
||||||
6. You will be prompted for your password to authorize the request. Enter the credentials of an account that has permission to modify settings and press **OK**.
|
|
||||||
7. Eden will now open and any subsequent launches of the program will not prompt this.
|
|
||||||
|
|||||||
+1
-3
@@ -10,15 +10,13 @@ A copy of this handbook is [available online](https://git.eden-emu.dev/eden-emu/
|
|||||||
|
|
||||||
- **[The Basics](Basics.md)**
|
- **[The Basics](Basics.md)**
|
||||||
- **[Quickstart](./QuickStart.md)**
|
- **[Quickstart](./QuickStart.md)**
|
||||||
- **[Windows](./QuickStart.md#windows)**
|
|
||||||
- **[Steamdeck](./QuickStart.md#steamdeck)**
|
|
||||||
- **[macOS](./QuickStart.md#macos)**
|
|
||||||
- **[Settings](./Settings.md)**
|
- **[Settings](./Settings.md)**
|
||||||
- **[Controllers](./Controllers.md)**
|
- **[Controllers](./Controllers.md)**
|
||||||
- **[Controller profiles](./Controllers.md#configuring-controller-profiles)**
|
- **[Controller profiles](./Controllers.md#configuring-controller-profiles)**
|
||||||
- **[Audio](Audio.md)**
|
- **[Audio](Audio.md)**
|
||||||
- **[Graphics](Graphics.md)**
|
- **[Graphics](Graphics.md)**
|
||||||
- **[Installing Mods](./Mods.md)**
|
- **[Installing Mods](./Mods.md)**
|
||||||
|
- **[Run On macOS](./RunOnMacOS.md)**
|
||||||
- **[Data, Savefiles and Storage](Storage.md)**
|
- **[Data, Savefiles and Storage](Storage.md)**
|
||||||
- **[Orphaned Profiles](Orphaned.md)**
|
- **[Orphaned Profiles](Orphaned.md)**
|
||||||
- **[Troubleshooting](./Troubleshoot.md)**
|
- **[Troubleshooting](./Troubleshoot.md)**
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
# User Handbook - Run on macOS
|
||||||
|
|
||||||
|
Current macOS support is still experimental and very reliant on MoltenVK developments, plans have shifted to properly provide support for KosmicKrisp and similar new GPU endeavours, but macOS users still are bound to MoltenVK itself.
|
||||||
|
|
||||||
|
Users of macOS may wish to use [Asahi Linux](https://wiki.gentoo.org/wiki/Project:Asahi/Guide) for the rising KosmicKrisp support.
|
||||||
|
|
||||||
|
As of writing, neither macOS nor Asahi has support for NCE; additionally Asahi has extraneous paging bugs with fastmem.
|
||||||
|
|
||||||
|
## Allowing Eden to Run on MacOS
|
||||||
|
|
||||||
|
Use this guide when you need to allow Eden to run on a Mac system, but are being blocked by Apple Security policy.
|
||||||
|
|
||||||
|
**Click [Here](https://evilperson1337.notion.site/Allowing-Eden-to-Run-on-MacOS-2b057c2edaf681fea63dc81027efeffd) for a version of this guide with images & visual elements.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Pre-Requisites
|
||||||
|
|
||||||
|
- Permissions to modify settings in MacOS
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Why am I Seeing This?
|
||||||
|
|
||||||
|
Recent versions of MacOS (Catalina & newer) introduced the **Gatekeeper** security functionality, requiring software to be signed by Apple or a trusted (aka - paying) developer. If the signature isn't on the list of trusted ones, it will stop the program from executing and display the message above.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Steps
|
||||||
|
|
||||||
|
1. Open the *System Settings* panel.
|
||||||
|
2. Navigate to *Privacy & Security*.
|
||||||
|
3. Scroll down and observe the following message under the **Security** settings.
|
||||||
|
4. Select **Open Anyway** to tell your Mac that you trust the application.
|
||||||
|
5. You will now get another window appearing to verify you want to open Eden. Select **Open Anyway**.
|
||||||
|
6. You will be prompted for your password to authorize the request. Enter the credentials of an account that has permission to modify settings and press **OK**.
|
||||||
|
7. Eden will now open and any subsequent launches of the program will not prompt this.
|
||||||
Vendored
+1
-6
@@ -164,7 +164,7 @@ if (NOT ANDROID)
|
|||||||
AddJsonPackage(sdl3)
|
AddJsonPackage(sdl3)
|
||||||
else()
|
else()
|
||||||
message(STATUS "Using bundled SDL3")
|
message(STATUS "Using bundled SDL3")
|
||||||
if (FREEBSD)
|
if (PLATFORM_FREEBSD)
|
||||||
set(BUILD_SHARED_LIBS ON)
|
set(BUILD_SHARED_LIBS ON)
|
||||||
endif()
|
endif()
|
||||||
AddJsonPackage(sdl3-ci)
|
AddJsonPackage(sdl3-ci)
|
||||||
@@ -260,11 +260,6 @@ target_include_directories(tz PUBLIC ./tz)
|
|||||||
add_library(bc_decoder bc_decoder/bc_decoder.cpp)
|
add_library(bc_decoder bc_decoder/bc_decoder.cpp)
|
||||||
target_include_directories(bc_decoder PUBLIC ./bc_decoder)
|
target_include_directories(bc_decoder PUBLIC ./bc_decoder)
|
||||||
|
|
||||||
if (OPENORBIS)
|
|
||||||
add_library(ps4sup ps4sup/emutls.c ps4sup/stub.cpp)
|
|
||||||
target_include_directories(ps4sup PUBLIC ./ps4sup)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (NOT TARGET RenderDoc::API)
|
if (NOT TARGET RenderDoc::API)
|
||||||
add_library(renderdoc INTERFACE)
|
add_library(renderdoc INTERFACE)
|
||||||
target_include_directories(renderdoc SYSTEM INTERFACE ./renderdoc)
|
target_include_directories(renderdoc SYSTEM INTERFACE ./renderdoc)
|
||||||
|
|||||||
+80
-23
@@ -1,46 +1,45 @@
|
|||||||
# SPDX-FileCopyrightText: Copyright 2026 crueter
|
# SPDX-FileCopyrightText: Copyright 2025 crueter
|
||||||
# SPDX-License-Identifier: LGPL-3.0-or-later
|
# SPDX-License-Identifier: LGPL-3.0-or-later
|
||||||
|
|
||||||
## DetectPlatform ##
|
## DetectPlatform ##
|
||||||
|
|
||||||
# This is a small helper that sets platform variables for various
|
# This is a small helper that sets PLATFORM_<platform> variables for various
|
||||||
# operating systems and distributions. Note that Apple, Windows, Android, etc.
|
# operating systems and distributions. Note that Apple, Windows, Android, etc.
|
||||||
# are not covered, as CMake already does that for us.
|
# are not covered, as CMake already does that for us.
|
||||||
|
|
||||||
# It also sets CXX_<compiler> for the C++ compiler.
|
# It also sets CXX_<compiler> for the C++ compiler.
|
||||||
|
|
||||||
|
# Furthermore, some platforms have really silly requirements/quirks, so this
|
||||||
|
# also does a few of those.
|
||||||
|
|
||||||
# This module contains contributions from the Eden Emulator Project,
|
# This module contains contributions from the Eden Emulator Project,
|
||||||
# notably from crueter and Lizzie.
|
# notably from crueter and Lizzie.
|
||||||
|
|
||||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "SunOS")
|
if (${CMAKE_SYSTEM_NAME} STREQUAL "SunOS")
|
||||||
set(SOLARIS ON)
|
set(PLATFORM_SUN ON)
|
||||||
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "OpenOrbis")
|
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "OpenOrbis")
|
||||||
set(OPENORBIS ON)
|
set(PLATFORM_PS4 ON)
|
||||||
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "managarm")
|
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "managarm")
|
||||||
set(MANAGARM ON)
|
set(PLATFORM_MANAGARM ON)
|
||||||
|
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
|
||||||
|
set(PLATFORM_FREEBSD ON)
|
||||||
|
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD")
|
||||||
|
set(PLATFORM_OPENBSD ON)
|
||||||
|
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "NetBSD")
|
||||||
|
set(PLATFORM_NETBSD ON)
|
||||||
|
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "DragonFly")
|
||||||
|
set(PLATFORM_DRAGONFLYBSD ON)
|
||||||
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Haiku")
|
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Haiku")
|
||||||
set(HAIKUOS ON)
|
set(PLATFORM_HAIKU ON)
|
||||||
endif()
|
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||||
|
set(PLATFORM_LINUX ON)
|
||||||
# BSD
|
|
||||||
if (DEFINED BSD)
|
|
||||||
if ("${BSD}" STREQUAL "DragonFlyBSD")
|
|
||||||
set(DRAGONFLYBSD ON)
|
|
||||||
elseif ("${BSD}" STREQUAL "FreeBSD")
|
|
||||||
set(FREEBSD ON)
|
|
||||||
elseif ("${BSD}" STREQUAL "OpenBSD")
|
|
||||||
set(OPENBSD ON)
|
|
||||||
elseif ("${BSD}" STREQUAL "NetBSD")
|
|
||||||
set(NETBSD ON)
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# dumb heuristic to detect msys2
|
# dumb heuristic to detect msys2
|
||||||
if (CMAKE_COMMAND MATCHES "msys64")
|
if (CMAKE_COMMAND MATCHES "msys64")
|
||||||
set(MSYS2 ON)
|
set(PLATFORM_MSYS ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# compiler checks
|
|
||||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||||
set(CXX_CLANG ON)
|
set(CXX_CLANG ON)
|
||||||
if (MSVC)
|
if (MSVC)
|
||||||
@@ -48,6 +47,8 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
|||||||
endif()
|
endif()
|
||||||
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
set(CXX_GCC ON)
|
set(CXX_GCC ON)
|
||||||
|
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||||
|
set(CXX_CL ON)
|
||||||
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM")
|
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM")
|
||||||
set(CXX_ICC ON)
|
set(CXX_ICC ON)
|
||||||
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
|
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
|
||||||
@@ -60,13 +61,37 @@ if(MINGW AND CXX_CLANG)
|
|||||||
set(CMAKE_SYSTEM_VERSION 10.0.0)
|
set(CMAKE_SYSTEM_VERSION 10.0.0)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# NB: this does not account for SPARC
|
||||||
|
if (PLATFORM_SUN)
|
||||||
|
# Terrific OpenIndiana pkg shenanigans
|
||||||
|
list(APPEND CMAKE_PREFIX_PATH
|
||||||
|
"${CMAKE_SYSROOT}/usr/lib/qt/6.6/lib/amd64/cmake")
|
||||||
|
list(APPEND CMAKE_MODULE_PATH
|
||||||
|
"${CMAKE_SYSROOT}/usr/lib/qt/6.6/lib/amd64/cmake")
|
||||||
|
|
||||||
|
# Amazing - absolutely incredible
|
||||||
|
list(APPEND CMAKE_PREFIX_PATH "${CMAKE_SYSROOT}/usr/lib/amd64/cmake")
|
||||||
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SYSROOT}/usr/lib/amd64/cmake")
|
||||||
|
|
||||||
|
# For some mighty reason, doing a normal release build sometimes
|
||||||
|
# may not trigger the proper -O3 switch to materialize
|
||||||
|
if (CMAKE_BUILD_TYPE MATCHES "Release")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
|
||||||
|
endif()
|
||||||
|
if (CMAKE_BUILD_TYPE MATCHES "RelWithDebInfo")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
# MSYS2 utilities
|
# MSYS2 utilities
|
||||||
|
|
||||||
# Sometimes, PkgConfig modules will incorrectly reference / when CMake
|
# Sometimes, PkgConfig modules will incorrectly reference / when CMake
|
||||||
# wants you to reference it as C:/msys64/. This function corrects that.
|
# wants you to reference it as C:/msys64/. This function corrects that.
|
||||||
# Example in a Find module:
|
# Example in a Find module:
|
||||||
#[[
|
#[[
|
||||||
if (MSYS2)
|
if (PLATFORM_MSYS)
|
||||||
FixMsysPath(PkgConfig::OPUS)
|
FixMsysPath(PkgConfig::OPUS)
|
||||||
endif()
|
endif()
|
||||||
]]
|
]]
|
||||||
@@ -91,9 +116,41 @@ function(FixMsysPath target)
|
|||||||
INTERFACE_INCLUDE_DIRECTORIES ${include_dir})
|
INTERFACE_INCLUDE_DIRECTORIES ${include_dir})
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
# Saves linking time
|
# MSYSTEM handling + program_path
|
||||||
|
if (PLATFORM_MSYS)
|
||||||
|
# really, really dumb heuristic to detect what environment we are in
|
||||||
|
macro(system var)
|
||||||
|
if (CMAKE_COMMAND MATCHES ${var})
|
||||||
|
set(MSYSTEM ${var})
|
||||||
|
endif()
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
system(mingw64)
|
||||||
|
system(clang64)
|
||||||
|
system(clangarm64)
|
||||||
|
system(ucrt64)
|
||||||
|
|
||||||
|
if (NOT DEFINED MSYSTEM)
|
||||||
|
set(MSYSTEM msys2)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# We generally want to prioritize environment-specific binaries if possible
|
||||||
|
# some, like autoconf, are not present on environments besides msys2 though
|
||||||
|
set(CMAKE_PROGRAM_PATH C:/msys64/${MSYSTEM}/bin C:/msys64/usr/bin)
|
||||||
|
set(ENV{PKG_CONFIG_PATH} C:/msys64/${MSYSTEM}/lib/pkgconfig)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# This saves a truly ridiculous amount of time during linking
|
||||||
|
# In my tests, without this, Eden takes 2 mins, with this, it takes 3-5 seconds
|
||||||
|
# or on GitHub Actions, 10 minutes -> 3 seconds
|
||||||
if (MINGW)
|
if (MINGW)
|
||||||
set(MINGW_FLAGS "-Wl,--strip-all -Wl,--gc-sections")
|
set(MINGW_FLAGS "-Wl,--strip-all -Wl,--gc-sections")
|
||||||
set(CMAKE_EXE_LINKER_FLAGS_RELEASE
|
set(CMAKE_EXE_LINKER_FLAGS_RELEASE
|
||||||
"${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${MINGW_FLAGS}")
|
"${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${MINGW_FLAGS}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# awesome
|
||||||
|
if (PLATFORM_FREEBSD OR PLATFORM_DRAGONFLYBSD)
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS
|
||||||
|
"${CMAKE_EXE_LINKER_FLAGS} -L${CMAKE_SYSROOT}/usr/local/lib")
|
||||||
|
endif()
|
||||||
|
|||||||
Vendored
+5
-5
@@ -56,7 +56,7 @@ if (NOT YUZU_USE_BUNDLED_FFMPEG)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (OPENORBIS OR MANAGARM)
|
if (PLATFORM_PS4 OR PLATFORM_MANAGARM)
|
||||||
# Doesn't support VA-API, don't go thru the embarrassment of trying to enable it
|
# Doesn't support VA-API, don't go thru the embarrassment of trying to enable it
|
||||||
list(APPEND FFmpeg_HWACCEL_FLAGS --disable-vaapi)
|
list(APPEND FFmpeg_HWACCEL_FLAGS --disable-vaapi)
|
||||||
elseif (ANDROID)
|
elseif (ANDROID)
|
||||||
@@ -75,7 +75,7 @@ elseif (UNIX AND NOT DEFINED FFmpeg_IS_CROSS_COMPILING AND NOT ANDROID)
|
|||||||
if(X11_FOUND)
|
if(X11_FOUND)
|
||||||
if (NOT APPLE)
|
if (NOT APPLE)
|
||||||
# In Solaris needs explicit linking for ffmpeg which links to /lib/amd64/libX11.so
|
# In Solaris needs explicit linking for ffmpeg which links to /lib/amd64/libX11.so
|
||||||
if(SOLARIS)
|
if(PLATFORM_SUN)
|
||||||
list(APPEND FFmpeg_HWACCEL_LIBRARIES
|
list(APPEND FFmpeg_HWACCEL_LIBRARIES
|
||||||
X11
|
X11
|
||||||
"${CMAKE_SYSROOT}/usr/lib/xorg/amd64/libdrm.so")
|
"${CMAKE_SYSROOT}/usr/lib/xorg/amd64/libdrm.so")
|
||||||
@@ -158,7 +158,7 @@ elseif (UNIX AND NOT DEFINED FFmpeg_IS_CROSS_COMPILING AND NOT ANDROID)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (OPENORBIS)
|
if (PLATFORM_PS4)
|
||||||
list(APPEND FFmpeg_CROSS_COMPILE_LIBS
|
list(APPEND FFmpeg_CROSS_COMPILE_LIBS
|
||||||
-lkernel
|
-lkernel
|
||||||
-lSceUserService
|
-lSceUserService
|
||||||
@@ -172,7 +172,7 @@ if (OPENORBIS)
|
|||||||
--extra-cxxflags=${CMAKE_SYSROOT}/usr/include
|
--extra-cxxflags=${CMAKE_SYSROOT}/usr/include
|
||||||
--extra-libs="${FFmpeg_CROSS_COMPILE_LIBS}"
|
--extra-libs="${FFmpeg_CROSS_COMPILE_LIBS}"
|
||||||
)
|
)
|
||||||
elseif (MANAGARM)
|
elseif (PLATFORM_MANAGARM)
|
||||||
# Required for proper stuff
|
# Required for proper stuff
|
||||||
list(APPEND FFmpeg_CROSS_COMPILE_FLAGS
|
list(APPEND FFmpeg_CROSS_COMPILE_FLAGS
|
||||||
--disable-pthreads
|
--disable-pthreads
|
||||||
@@ -299,7 +299,7 @@ else()
|
|||||||
set(FFmpeg_BUILD_LIBRARIES ${FFmpeg_LIBRARIES})
|
set(FFmpeg_BUILD_LIBRARIES ${FFmpeg_LIBRARIES})
|
||||||
|
|
||||||
# BSD make or Solaris make don't support ffmpeg make-j8
|
# BSD make or Solaris make don't support ffmpeg make-j8
|
||||||
if (LINUX OR ANDROID OR APPLE OR WIN32 OR FREEBSD)
|
if (PLATFORM_LINUX OR ANDROID OR APPLE OR WIN32 OR PLATFORM_FREEBSD)
|
||||||
set(FFmpeg_MAKE_ARGS -j${SYSTEM_THREADS})
|
set(FFmpeg_MAKE_ARGS -j${SYSTEM_THREADS})
|
||||||
else()
|
else()
|
||||||
set(FFmpeg_MAKE_ARGS "")
|
set(FFmpeg_MAKE_ARGS "")
|
||||||
|
|||||||
Vendored
+1
-1
@@ -11,7 +11,7 @@ if (NOT libusb_ADDED)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
# TODO: *BSD fails to compile--may need different configs/symbols
|
# TODO: *BSD fails to compile--may need different configs/symbols
|
||||||
if (MINGW OR LINUX OR APPLE)
|
if (MINGW OR PLATFORM_LINUX OR APPLE)
|
||||||
set(LIBUSB_FOUND ON CACHE BOOL "libusb is present" FORCE)
|
set(LIBUSB_FOUND ON CACHE BOOL "libusb is present" FORCE)
|
||||||
set(LIBUSB_VERSION "1.0.24" CACHE STRING "libusb version string" FORCE)
|
set(LIBUSB_VERSION "1.0.24" CACHE STRING "libusb version string" FORCE)
|
||||||
|
|
||||||
|
|||||||
Vendored
-184
@@ -1,184 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
/* ===---------- emutls.c - Implements __emutls_get_address ---------------===
|
|
||||||
*
|
|
||||||
* The LLVM Compiler Infrastructure
|
|
||||||
*
|
|
||||||
* This file is dual licensed under the MIT and the University of Illinois Open
|
|
||||||
* Source Licenses. See LICENSE.TXT for details.
|
|
||||||
*
|
|
||||||
* ===----------------------------------------------------------------------===
|
|
||||||
*/
|
|
||||||
#include <pthread.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
//#include "int_util.h"
|
|
||||||
|
|
||||||
/* Default is not to use posix_memalign, so systems like Android
|
|
||||||
* can use thread local data without heavier POSIX memory allocators.
|
|
||||||
*/
|
|
||||||
#ifndef EMUTLS_USE_POSIX_MEMALIGN
|
|
||||||
#define EMUTLS_USE_POSIX_MEMALIGN 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* For every TLS variable xyz,
|
|
||||||
* there is one __emutls_control variable named __emutls_v.xyz.
|
|
||||||
* If xyz has non-zero initial value, __emutls_v.xyz's "value"
|
|
||||||
* will point to __emutls_t.xyz, which has the initial value.
|
|
||||||
*/
|
|
||||||
typedef struct __emutls_control {
|
|
||||||
size_t size; /* size of the object in bytes */
|
|
||||||
size_t align; /* alignment of the object in bytes */
|
|
||||||
union {
|
|
||||||
uintptr_t index; /* data[index-1] is the object address */
|
|
||||||
void* address; /* object address, when in single thread env */
|
|
||||||
} object;
|
|
||||||
void* value; /* null or non-zero initial value for the object */
|
|
||||||
} __emutls_control;
|
|
||||||
|
|
||||||
static inline void* emutls_memalign_alloc(size_t align, size_t size) {
|
|
||||||
void *base;
|
|
||||||
#if EMUTLS_USE_POSIX_MEMALIGN
|
|
||||||
if (posix_memalign(&base, align, size) != 0)
|
|
||||||
abort();
|
|
||||||
#else
|
|
||||||
#define EXTRA_ALIGN_PTR_BYTES (align - 1 + sizeof(void*))
|
|
||||||
char* object;
|
|
||||||
if ((object = malloc(EXTRA_ALIGN_PTR_BYTES + size)) == NULL)
|
|
||||||
abort();
|
|
||||||
base = (void*)(((uintptr_t)(object + EXTRA_ALIGN_PTR_BYTES))
|
|
||||||
& ~(uintptr_t)(align - 1));
|
|
||||||
|
|
||||||
((void**)base)[-1] = object;
|
|
||||||
#endif
|
|
||||||
return base;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void emutls_memalign_free(void* base) {
|
|
||||||
#if EMUTLS_USE_POSIX_MEMALIGN
|
|
||||||
free(base);
|
|
||||||
#else
|
|
||||||
/* The mallocated address is in ((void**)base)[-1] */
|
|
||||||
free(((void**)base)[-1]);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Emulated TLS objects are always allocated at run-time. */
|
|
||||||
static inline void* emutls_allocate_object(__emutls_control* control) {
|
|
||||||
/* Use standard C types, check with gcc's emutls.o. */
|
|
||||||
//typedef unsigned int gcc_word __attribute__((mode(word)));
|
|
||||||
//typedef unsigned int gcc_pointer __attribute__((mode(pointer)));
|
|
||||||
//COMPILE_TIME_ASSERT(sizeof(size_t) == sizeof(gcc_word));
|
|
||||||
//COMPILE_TIME_ASSERT(sizeof(uintptr_t) == sizeof(gcc_pointer));
|
|
||||||
//COMPILE_TIME_ASSERT(sizeof(uintptr_t) == sizeof(void*));
|
|
||||||
|
|
||||||
size_t size = control->size;
|
|
||||||
size_t align = control->align;
|
|
||||||
if (align < sizeof(void*))
|
|
||||||
align = sizeof(void*);
|
|
||||||
/* Make sure that align is power of 2. */
|
|
||||||
if ((align & (align - 1)) != 0)
|
|
||||||
abort();
|
|
||||||
|
|
||||||
void* base = emutls_memalign_alloc(align, size);
|
|
||||||
if (control->value)
|
|
||||||
memcpy(base, control->value, size);
|
|
||||||
else
|
|
||||||
memset(base, 0, size);
|
|
||||||
return base;
|
|
||||||
}
|
|
||||||
|
|
||||||
static pthread_mutex_t emutls_mutex = PTHREAD_MUTEX_INITIALIZER;
|
|
||||||
|
|
||||||
static size_t emutls_num_object = 0; /* number of allocated TLS objects */
|
|
||||||
|
|
||||||
typedef struct emutls_address_array {
|
|
||||||
uintptr_t size; /* number of elements in the 'data' array */
|
|
||||||
void* data[];
|
|
||||||
} emutls_address_array;
|
|
||||||
|
|
||||||
static pthread_key_t emutls_pthread_key;
|
|
||||||
|
|
||||||
static void emutls_key_destructor(void* ptr) {
|
|
||||||
emutls_address_array* array = (emutls_address_array*)ptr;
|
|
||||||
uintptr_t i;
|
|
||||||
for (i = 0; i < array->size; ++i) {
|
|
||||||
if (array->data[i])
|
|
||||||
emutls_memalign_free(array->data[i]);
|
|
||||||
}
|
|
||||||
free(ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void emutls_init(void) {
|
|
||||||
if (pthread_key_create(&emutls_pthread_key, emutls_key_destructor) != 0)
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Returns control->object.index; set index if not allocated yet. */
|
|
||||||
static inline uintptr_t emutls_get_index(__emutls_control* control) {
|
|
||||||
uintptr_t index = __atomic_load_n(&control->object.index, __ATOMIC_ACQUIRE);
|
|
||||||
if (!index) {
|
|
||||||
static pthread_once_t once = PTHREAD_ONCE_INIT;
|
|
||||||
pthread_once(&once, emutls_init);
|
|
||||||
pthread_mutex_lock(&emutls_mutex);
|
|
||||||
index = control->object.index;
|
|
||||||
if (!index) {
|
|
||||||
index = ++emutls_num_object;
|
|
||||||
__atomic_store_n(&control->object.index, index, __ATOMIC_RELEASE);
|
|
||||||
}
|
|
||||||
pthread_mutex_unlock(&emutls_mutex);
|
|
||||||
}
|
|
||||||
return index;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Updates newly allocated thread local emutls_address_array. */
|
|
||||||
static inline void emutls_check_array_set_size(emutls_address_array* array,
|
|
||||||
uintptr_t size) {
|
|
||||||
if (array == NULL)
|
|
||||||
abort();
|
|
||||||
array->size = size;
|
|
||||||
pthread_setspecific(emutls_pthread_key, (void*)array);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Returns the new 'data' array size, number of elements,
|
|
||||||
* which must be no smaller than the given index.
|
|
||||||
*/
|
|
||||||
static inline uintptr_t emutls_new_data_array_size(uintptr_t index) {
|
|
||||||
/* Need to allocate emutls_address_array with one extra slot
|
|
||||||
* to store the data array size.
|
|
||||||
* Round up the emutls_address_array size to multiple of 16.
|
|
||||||
*/
|
|
||||||
return ((index + 1 + 15) & ~((uintptr_t)15)) - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Returns the thread local emutls_address_array.
|
|
||||||
* Extends its size if necessary to hold address at index.
|
|
||||||
*/
|
|
||||||
static inline emutls_address_array* emutls_get_address_array(uintptr_t index) {
|
|
||||||
emutls_address_array* array = pthread_getspecific(emutls_pthread_key);
|
|
||||||
if (array == NULL) {
|
|
||||||
uintptr_t new_size = emutls_new_data_array_size(index);
|
|
||||||
array = calloc(new_size + 1, sizeof(void*));
|
|
||||||
emutls_check_array_set_size(array, new_size);
|
|
||||||
} else if (index > array->size) {
|
|
||||||
uintptr_t orig_size = array->size;
|
|
||||||
uintptr_t new_size = emutls_new_data_array_size(index);
|
|
||||||
array = realloc(array, (new_size + 1) * sizeof(void*));
|
|
||||||
if (array)
|
|
||||||
memset(array->data + orig_size, 0,
|
|
||||||
(new_size - orig_size) * sizeof(void*));
|
|
||||||
emutls_check_array_set_size(array, new_size);
|
|
||||||
}
|
|
||||||
return array;
|
|
||||||
}
|
|
||||||
|
|
||||||
void* __emutls_get_address(__emutls_control* control) {
|
|
||||||
uintptr_t index = emutls_get_index(control);
|
|
||||||
emutls_address_array* array = emutls_get_address_array(index);
|
|
||||||
if (array->data[index - 1] == NULL)
|
|
||||||
array->data[index - 1] = emutls_allocate_object(control);
|
|
||||||
return array->data[index - 1];
|
|
||||||
}
|
|
||||||
Vendored
-38
@@ -1,38 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define STUB_WEAK(name) \
|
|
||||||
extern "C" void name() { \
|
|
||||||
printf("called " #name); \
|
|
||||||
asm volatile("ud2"); \
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" int __pthread_cxa_finalize();
|
|
||||||
extern "C" void __cxa_thread_atexit_impl() {
|
|
||||||
//printf("__cxa_thread_atexit_impl called!\n");
|
|
||||||
//__pthread_cxa_finalize();
|
|
||||||
}
|
|
||||||
|
|
||||||
STUB_WEAK(__assert)
|
|
||||||
STUB_WEAK(ZSTD_trace_compress_begin)
|
|
||||||
STUB_WEAK(ZSTD_trace_compress_end)
|
|
||||||
STUB_WEAK(ZSTD_trace_decompress_begin)
|
|
||||||
STUB_WEAK(ZSTD_trace_decompress_end)
|
|
||||||
|
|
||||||
extern "C" thread_local struct {
|
|
||||||
char pad[512];
|
|
||||||
} _ThreadRuneLocale = {};
|
|
||||||
extern "C" struct {
|
|
||||||
char pad[512];
|
|
||||||
} __h_errno = {};
|
|
||||||
|
|
||||||
FILE* __stderrp = stdout;
|
|
||||||
FILE* __stdinp = stdin;
|
|
||||||
|
|
||||||
#undef STUB_WEAK
|
|
||||||
|
|
||||||
// THIS MAKES STD::COUT AND SUCH WORK :)
|
|
||||||
#include <iostream>
|
|
||||||
std::ios_base::Init init;
|
|
||||||
Vendored
+2
-2
@@ -1177,7 +1177,7 @@ static void *stbi__load_main(stbi__context *s, int *x, int *y, int *comp, int re
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef STBI_NO_TGA
|
#ifndef STBI_NO_TGA
|
||||||
// test tga last because it's a bad test!
|
// test tga last because it's a crappy test!
|
||||||
if (stbi__tga_test(s))
|
if (stbi__tga_test(s))
|
||||||
return stbi__tga_load(s,x,y,comp,req_comp, ri);
|
return stbi__tga_load(s,x,y,comp,req_comp, ri);
|
||||||
#endif
|
#endif
|
||||||
@@ -7662,7 +7662,7 @@ static int stbi__info_main(stbi__context *s, int *x, int *y, int *comp)
|
|||||||
if (stbi__hdr_info(s, x, y, comp)) return 1;
|
if (stbi__hdr_info(s, x, y, comp)) return 1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// test tga last because it's a bad test!
|
// test tga last because it's a crappy test!
|
||||||
#ifndef STBI_NO_TGA
|
#ifndef STBI_NO_TGA
|
||||||
if (stbi__tga_info(s, x, y, comp))
|
if (stbi__tga_info(s, x, y, comp))
|
||||||
return 1;
|
return 1;
|
||||||
|
|||||||
+9
-21
@@ -155,24 +155,12 @@ else()
|
|||||||
$<$<COMPILE_LANGUAGE:CXX>:-fno-rtti>)
|
$<$<COMPILE_LANGUAGE:CXX>:-fno-rtti>)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (ENABLE_WERROR)
|
|
||||||
add_compile_options(
|
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Werror=all>
|
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Werror=extra>
|
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Werror=missing-declarations>
|
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Werror=shadow>
|
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Werror=unused>)
|
|
||||||
else()
|
|
||||||
add_compile_options(
|
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wall>
|
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wextra>
|
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wmissing-declarations>
|
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wshadow>
|
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wunused>
|
|
||||||
# Some compilers could particularly misbehave :)
|
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-error-all>)
|
|
||||||
endif()
|
|
||||||
add_compile_options(
|
add_compile_options(
|
||||||
|
$<$<COMPILE_LANGUAGE:C,CXX>:-Werror=all>
|
||||||
|
$<$<COMPILE_LANGUAGE:C,CXX>:-Werror=extra>
|
||||||
|
$<$<COMPILE_LANGUAGE:C,CXX>:-Werror=missing-declarations>
|
||||||
|
$<$<COMPILE_LANGUAGE:C,CXX>:-Werror=shadow>
|
||||||
|
$<$<COMPILE_LANGUAGE:C,CXX>:-Werror=unused>
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-attributes>
|
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-attributes>
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-invalid-offsetof>
|
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-invalid-offsetof>
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-unused-parameter>
|
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-unused-parameter>
|
||||||
@@ -181,9 +169,9 @@ else()
|
|||||||
if (CXX_CLANG OR CXX_ICC OR CXX_APPLE) # Clang, AppleClang, or Intel C++
|
if (CXX_CLANG OR CXX_ICC OR CXX_APPLE) # Clang, AppleClang, or Intel C++
|
||||||
if (NOT MSVC)
|
if (NOT MSVC)
|
||||||
add_compile_options(
|
add_compile_options(
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wshadow-uncaptured-local>
|
$<$<COMPILE_LANGUAGE:C,CXX>:-Werror=shadow-uncaptured-local>
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wimplicit-fallthrough>
|
$<$<COMPILE_LANGUAGE:C,CXX>:-Werror=implicit-fallthrough>
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wtype-limits>)
|
$<$<COMPILE_LANGUAGE:C,CXX>:-Werror=type-limits>)
|
||||||
endif()
|
endif()
|
||||||
add_compile_options(
|
add_compile_options(
|
||||||
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-braced-scalar-init>
|
$<$<COMPILE_LANGUAGE:C,CXX>:-Wno-braced-scalar-init>
|
||||||
@@ -193,7 +181,7 @@ else()
|
|||||||
|
|
||||||
if (ARCHITECTURE_x86_64)
|
if (ARCHITECTURE_x86_64)
|
||||||
add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-mcx16>)
|
add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-mcx16>)
|
||||||
if (LINUX OR FREEBSD)
|
if (PLATFORM_LINUX OR PLATFORM_FREEBSD)
|
||||||
add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-mtls-dialect=gnu2>)
|
add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-mtls-dialect=gnu2>)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -188,7 +188,6 @@ android {
|
|||||||
create("mainline") {
|
create("mainline") {
|
||||||
dimension = "version"
|
dimension = "version"
|
||||||
isDefault = true
|
isDefault = true
|
||||||
minSdk = 33
|
|
||||||
|
|
||||||
manifestPlaceholders += mapOf("appNameBase" to "Eden")
|
manifestPlaceholders += mapOf("appNameBase" to "Eden")
|
||||||
resValue("string", "app_name_suffixed", "Eden")
|
resValue("string", "app_name_suffixed", "Eden")
|
||||||
@@ -200,7 +199,6 @@ android {
|
|||||||
|
|
||||||
create("genshinSpoof") {
|
create("genshinSpoof") {
|
||||||
dimension = "version"
|
dimension = "version"
|
||||||
minSdk = 35
|
|
||||||
manifestPlaceholders += mapOf("appNameBase" to "Eden Optimized")
|
manifestPlaceholders += mapOf("appNameBase" to "Eden Optimized")
|
||||||
resValue("string", "app_name_suffixed", "Eden Optimized")
|
resValue("string", "app_name_suffixed", "Eden Optimized")
|
||||||
applicationId = "com.miHoYo.Yuanshen"
|
applicationId = "com.miHoYo.Yuanshen"
|
||||||
@@ -218,7 +216,6 @@ android {
|
|||||||
|
|
||||||
create("legacy") {
|
create("legacy") {
|
||||||
dimension = "version"
|
dimension = "version"
|
||||||
minSdk = 29
|
|
||||||
manifestPlaceholders += mapOf("appNameBase" to "Eden Legacy")
|
manifestPlaceholders += mapOf("appNameBase" to "Eden Legacy")
|
||||||
resValue("string", "app_name_suffixed", "Eden Legacy")
|
resValue("string", "app_name_suffixed", "Eden Legacy")
|
||||||
applicationId = "dev.legacy.eden_emulator"
|
applicationId = "dev.legacy.eden_emulator"
|
||||||
|
|||||||
@@ -218,8 +218,6 @@ object NativeLibrary {
|
|||||||
|
|
||||||
external fun logSettings()
|
external fun logSettings()
|
||||||
|
|
||||||
external fun refreshThreadPolicies()
|
|
||||||
|
|
||||||
external fun getDebugKnobAt(index: Int): Boolean
|
external fun getDebugKnobAt(index: Int): Boolean
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -539,40 +537,6 @@ object NativeLibrary {
|
|||||||
*/
|
*/
|
||||||
external fun installKeys(path: String, ext: String): Int
|
external fun installKeys(path: String, ext: String): Int
|
||||||
|
|
||||||
/**
|
|
||||||
* @return Whether this GPU can run the Lossless Scaling frame generation shaders,
|
|
||||||
* which are built against the Vulkan memory model.
|
|
||||||
*/
|
|
||||||
external fun supportsFrameGeneration(): Boolean
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return Path the user-supplied Lossless Scaling library is expected at.
|
|
||||||
*/
|
|
||||||
external fun getLosslessDllPath(): String
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parses the installed Lossless Scaling library and checks that every shader the
|
|
||||||
* frame generation chain needs is present.
|
|
||||||
*
|
|
||||||
* @return The result code, matching the losslessDllResults array.
|
|
||||||
*/
|
|
||||||
external fun validateLosslessDll(): Int
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Translates the frame generation shaders out of the installed Lossless Scaling library
|
|
||||||
* and writes them to the SPIR-V cache. Slow, so call it off the main thread.
|
|
||||||
*
|
|
||||||
* @return The result code, matching the losslessDllResults array.
|
|
||||||
*/
|
|
||||||
external fun prepareLosslessDll(): Int
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Deletes the installed Lossless Scaling library.
|
|
||||||
*
|
|
||||||
* @return Whether the library is gone after the call.
|
|
||||||
*/
|
|
||||||
external fun removeLosslessDll(): Boolean
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks the PatchManager for any addons that are available
|
* Checks the PatchManager for any addons that are available
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -559,15 +559,6 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener, InputManager
|
|||||||
private fun enableFullscreenImmersive() {
|
private fun enableFullscreenImmersive() {
|
||||||
WindowCompat.setDecorFitsSystemWindows(window, false)
|
WindowCompat.setDecorFitsSystemWindows(window, false)
|
||||||
|
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
window.decorView.systemUiVisibility =
|
|
||||||
View.SYSTEM_UI_FLAG_FULLSCREEN or
|
|
||||||
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
|
|
||||||
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or
|
|
||||||
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
|
|
||||||
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
|
|
||||||
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|
|
||||||
|
|
||||||
WindowInsetsControllerCompat(window, window.decorView).let { controller ->
|
WindowInsetsControllerCompat(window, window.decorView).let { controller ->
|
||||||
controller.hide(WindowInsetsCompat.Type.systemBars())
|
controller.hide(WindowInsetsCompat.Type.systemBars())
|
||||||
controller.systemBarsBehavior =
|
controller.systemBarsBehavior =
|
||||||
|
|||||||
+1
-4
@@ -16,6 +16,7 @@ enum class BooleanSetting(override val key: String) : AbstractBooleanSetting {
|
|||||||
RENDERER_USE_SPEED_LIMIT("use_speed_limit"),
|
RENDERER_USE_SPEED_LIMIT("use_speed_limit"),
|
||||||
USE_CUSTOM_CPU_TICKS("use_custom_cpu_ticks"),
|
USE_CUSTOM_CPU_TICKS("use_custom_cpu_ticks"),
|
||||||
SKIP_CPU_INNER_INVALIDATION("skip_cpu_inner_invalidation"),
|
SKIP_CPU_INNER_INVALIDATION("skip_cpu_inner_invalidation"),
|
||||||
|
ANTIFLICKER("antiflicker"),
|
||||||
FIX_BLOOM_EFFECTS("fix_bloom_effects"),
|
FIX_BLOOM_EFFECTS("fix_bloom_effects"),
|
||||||
EMULATE_BGR565("emulate_bgr565"),
|
EMULATE_BGR565("emulate_bgr565"),
|
||||||
RESCALE_HACK("rescale_hack"),
|
RESCALE_HACK("rescale_hack"),
|
||||||
@@ -37,10 +38,6 @@ enum class BooleanSetting(override val key: String) : AbstractBooleanSetting {
|
|||||||
RENDERER_PATCH_OLD_QCOM_DRIVERS("patch_old_qcom_drivers"),
|
RENDERER_PATCH_OLD_QCOM_DRIVERS("patch_old_qcom_drivers"),
|
||||||
RENDERER_VERTEX_INPUT_DYNAMIC_STATE("vertex_input_dynamic_state"),
|
RENDERER_VERTEX_INPUT_DYNAMIC_STATE("vertex_input_dynamic_state"),
|
||||||
RENDERER_SAMPLE_SHADING("sample_shading"),
|
RENDERER_SAMPLE_SHADING("sample_shading"),
|
||||||
RENDERER_FRAME_GEN("frame_gen"),
|
|
||||||
RENDERER_FRAME_GEN_FP16("frame_gen_fp16"),
|
|
||||||
RENDERER_FRAME_GEN_FLOW_SCALE_AUTO("frame_gen_flow_scale_auto"),
|
|
||||||
RENDERER_FRAME_GEN_DUMP_FLOW("frame_gen_dump_flow"),
|
|
||||||
GPU_UNSWIZZLE_ENABLED("gpu_unswizzle_enabled"),
|
GPU_UNSWIZZLE_ENABLED("gpu_unswizzle_enabled"),
|
||||||
PICTURE_IN_PICTURE("picture_in_picture"),
|
PICTURE_IN_PICTURE("picture_in_picture"),
|
||||||
USE_CUSTOM_RTC("custom_rtc_enabled"),
|
USE_CUSTOM_RTC("custom_rtc_enabled"),
|
||||||
|
|||||||
@@ -19,10 +19,6 @@ enum class IntSetting(override val key: String) : AbstractIntSetting {
|
|||||||
RENDERER_ASTC_DECODE_METHOD("accelerate_astc"),
|
RENDERER_ASTC_DECODE_METHOD("accelerate_astc"),
|
||||||
RENDERER_ACCURACY("gpu_accuracy"),
|
RENDERER_ACCURACY("gpu_accuracy"),
|
||||||
RENDERER_RESOLUTION("resolution_setup"),
|
RENDERER_RESOLUTION("resolution_setup"),
|
||||||
RENDERER_FRAME_GEN_MULTIPLIER("frame_gen_multiplier"),
|
|
||||||
RENDERER_FRAME_GEN_TARGET_RATE("frame_gen_target_rate"),
|
|
||||||
RENDERER_FRAME_GEN_QUEUE_TARGET("frame_gen_queue_target"),
|
|
||||||
RENDERER_FRAME_GEN_FLOW_SCALE("frame_gen_flow_scale"),
|
|
||||||
RENDERER_VSYNC("use_vsync"),
|
RENDERER_VSYNC("use_vsync"),
|
||||||
RENDERER_SCALING_FILTER("scaling_filter"),
|
RENDERER_SCALING_FILTER("scaling_filter"),
|
||||||
RENDERER_ANTI_ALIASING("anti_aliasing"),
|
RENDERER_ANTI_ALIASING("anti_aliasing"),
|
||||||
@@ -31,7 +27,6 @@ enum class IntSetting(override val key: String) : AbstractIntSetting {
|
|||||||
|
|
||||||
RENDERER_DYNA_STATE("dyna_state"),
|
RENDERER_DYNA_STATE("dyna_state"),
|
||||||
DMA_ACCURACY("dma_accuracy"),
|
DMA_ACCURACY("dma_accuracy"),
|
||||||
GPU_FENCE_BEHAVIOR("gpu_fence_behavior"),
|
|
||||||
FRAME_PACING_MODE("frame_pacing_mode"),
|
FRAME_PACING_MODE("frame_pacing_mode"),
|
||||||
AUDIO_OUTPUT_ENGINE("output_engine"),
|
AUDIO_OUTPUT_ENGINE("output_engine"),
|
||||||
MAX_ANISOTROPY("max_anisotropy"),
|
MAX_ANISOTROPY("max_anisotropy"),
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ object Settings {
|
|||||||
SECTION_ROOT(R.string.advanced_settings),
|
SECTION_ROOT(R.string.advanced_settings),
|
||||||
SECTION_SYSTEM(R.string.preferences_system),
|
SECTION_SYSTEM(R.string.preferences_system),
|
||||||
SECTION_RENDERER(R.string.preferences_graphics),
|
SECTION_RENDERER(R.string.preferences_graphics),
|
||||||
SECTION_FRAME_GEN(R.string.frame_gen),
|
|
||||||
SECTION_PERFORMANCE_STATS(R.string.stats_overlay_options),
|
SECTION_PERFORMANCE_STATS(R.string.stats_overlay_options),
|
||||||
SECTION_INPUT_OVERLAY(R.string.input_overlay_options),
|
SECTION_INPUT_OVERLAY(R.string.input_overlay_options),
|
||||||
SECTION_SOC_OVERLAY(R.string.soc_overlay_options),
|
SECTION_SOC_OVERLAY(R.string.soc_overlay_options),
|
||||||
|
|||||||
+8
-113
@@ -21,7 +21,6 @@ import org.yuzu.yuzu_emu.features.settings.model.LongSetting
|
|||||||
import org.yuzu.yuzu_emu.features.settings.model.ShortSetting
|
import org.yuzu.yuzu_emu.features.settings.model.ShortSetting
|
||||||
import org.yuzu.yuzu_emu.features.settings.model.StringSetting
|
import org.yuzu.yuzu_emu.features.settings.model.StringSetting
|
||||||
import org.yuzu.yuzu_emu.network.NetDataValidators
|
import org.yuzu.yuzu_emu.network.NetDataValidators
|
||||||
import org.yuzu.yuzu_emu.utils.LosslessScalingHelper
|
|
||||||
import org.yuzu.yuzu_emu.utils.NativeConfig
|
import org.yuzu.yuzu_emu.utils.NativeConfig
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -66,19 +65,6 @@ abstract class SettingsItem(
|
|||||||
return NativeLibrary.isFirmwareAvailable()
|
return NativeLibrary.isFirmwareAvailable()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (setting.key in frameGenKeys &&
|
|
||||||
!(LosslessScalingHelper.isInstalled() && LosslessScalingHelper.isSupportedByGpu())
|
|
||||||
) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// A frame rate target moves the multiplier on its own
|
|
||||||
if (setting.key == IntSetting.RENDERER_FRAME_GEN_MULTIPLIER.key &&
|
|
||||||
frameGenTargetRate != 0
|
|
||||||
) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// Can't edit settings that aren't saveable in per-game config even if they are switchable
|
// Can't edit settings that aren't saveable in per-game config even if they are switchable
|
||||||
if (NativeConfig.isPerGameConfigLoaded() && !setting.isSaveable) {
|
if (NativeConfig.isPerGameConfigLoaded() && !setting.isSaveable) {
|
||||||
return false
|
return false
|
||||||
@@ -102,31 +88,7 @@ abstract class SettingsItem(
|
|||||||
val clearable: Boolean
|
val clearable: Boolean
|
||||||
get() = !setting.global && NativeConfig.isPerGameConfigLoaded()
|
get() = !setting.global && NativeConfig.isPerGameConfigLoaded()
|
||||||
|
|
||||||
private val frameGenTargetRate: Int
|
|
||||||
get() {
|
|
||||||
val key = IntSetting.RENDERER_FRAME_GEN_TARGET_RATE.key
|
|
||||||
val needsGlobal = if (NativeLibrary.isRunning() &&
|
|
||||||
!NativeConfig.isPerGameConfigLoaded()
|
|
||||||
) {
|
|
||||||
!NativeConfig.usingGlobal(key)
|
|
||||||
} else {
|
|
||||||
NativeConfig.usingGlobal(key)
|
|
||||||
}
|
|
||||||
return IntSetting.RENDERER_FRAME_GEN_TARGET_RATE.getInt(needsGlobal)
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val frameGenKeys = setOf(
|
|
||||||
BooleanSetting.RENDERER_FRAME_GEN.key,
|
|
||||||
IntSetting.RENDERER_FRAME_GEN_MULTIPLIER.key,
|
|
||||||
IntSetting.RENDERER_FRAME_GEN_TARGET_RATE.key,
|
|
||||||
IntSetting.RENDERER_FRAME_GEN_QUEUE_TARGET.key,
|
|
||||||
BooleanSetting.RENDERER_FRAME_GEN_FLOW_SCALE_AUTO.key,
|
|
||||||
IntSetting.RENDERER_FRAME_GEN_FLOW_SCALE.key,
|
|
||||||
BooleanSetting.RENDERER_FRAME_GEN_FP16.key,
|
|
||||||
BooleanSetting.RENDERER_FRAME_GEN_DUMP_FLOW.key
|
|
||||||
)
|
|
||||||
|
|
||||||
const val TYPE_HEADER = 0
|
const val TYPE_HEADER = 0
|
||||||
const val TYPE_SWITCH = 1
|
const val TYPE_SWITCH = 1
|
||||||
const val TYPE_SINGLE_CHOICE = 2
|
const val TYPE_SINGLE_CHOICE = 2
|
||||||
@@ -632,7 +594,7 @@ abstract class SettingsItem(
|
|||||||
IntSetting.ANDROID_PIPELINE_WORKERS,
|
IntSetting.ANDROID_PIPELINE_WORKERS,
|
||||||
titleId = R.string.pipeline_worker_cores,
|
titleId = R.string.pipeline_worker_cores,
|
||||||
descriptionId = R.string.pipeline_worker_cores_description,
|
descriptionId = R.string.pipeline_worker_cores_description,
|
||||||
min = 2,
|
min = 4,
|
||||||
max = 8,
|
max = 8,
|
||||||
units = "cores"
|
units = "cores"
|
||||||
)
|
)
|
||||||
@@ -645,71 +607,6 @@ abstract class SettingsItem(
|
|||||||
valuesId = R.array.rendererAntiAliasingValues
|
valuesId = R.array.rendererAntiAliasingValues
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
put(
|
|
||||||
SwitchSetting(
|
|
||||||
BooleanSetting.RENDERER_FRAME_GEN,
|
|
||||||
titleId = R.string.frame_gen,
|
|
||||||
descriptionId = R.string.frame_gen_description
|
|
||||||
)
|
|
||||||
)
|
|
||||||
put(
|
|
||||||
SingleChoiceSetting(
|
|
||||||
IntSetting.RENDERER_FRAME_GEN_MULTIPLIER,
|
|
||||||
titleId = R.string.frame_gen_multiplier,
|
|
||||||
descriptionId = R.string.frame_gen_multiplier_description,
|
|
||||||
choicesId = R.array.frameGenMultiplierNames,
|
|
||||||
valuesId = R.array.frameGenMultiplierValues
|
|
||||||
)
|
|
||||||
)
|
|
||||||
put(
|
|
||||||
SingleChoiceSetting(
|
|
||||||
IntSetting.RENDERER_FRAME_GEN_TARGET_RATE,
|
|
||||||
titleId = R.string.frame_gen_target_rate,
|
|
||||||
descriptionId = R.string.frame_gen_target_rate_description,
|
|
||||||
choicesId = R.array.frameGenTargetRateNames,
|
|
||||||
valuesId = R.array.frameGenTargetRateValues
|
|
||||||
)
|
|
||||||
)
|
|
||||||
put(
|
|
||||||
SingleChoiceSetting(
|
|
||||||
IntSetting.RENDERER_FRAME_GEN_QUEUE_TARGET,
|
|
||||||
titleId = R.string.frame_gen_queue_target,
|
|
||||||
descriptionId = R.string.frame_gen_queue_target_description,
|
|
||||||
choicesId = R.array.frameGenQueueTargetNames,
|
|
||||||
valuesId = R.array.frameGenQueueTargetValues
|
|
||||||
)
|
|
||||||
)
|
|
||||||
put(
|
|
||||||
SwitchSetting(
|
|
||||||
BooleanSetting.RENDERER_FRAME_GEN_FLOW_SCALE_AUTO,
|
|
||||||
titleId = R.string.frame_gen_flow_scale_auto,
|
|
||||||
descriptionId = R.string.frame_gen_flow_scale_auto_description
|
|
||||||
)
|
|
||||||
)
|
|
||||||
put(
|
|
||||||
SliderSetting(
|
|
||||||
IntSetting.RENDERER_FRAME_GEN_FLOW_SCALE,
|
|
||||||
titleId = R.string.frame_gen_flow_scale,
|
|
||||||
descriptionId = R.string.frame_gen_flow_scale_description,
|
|
||||||
min = 25,
|
|
||||||
max = 100,
|
|
||||||
units = "%"
|
|
||||||
)
|
|
||||||
)
|
|
||||||
put(
|
|
||||||
SwitchSetting(
|
|
||||||
BooleanSetting.RENDERER_FRAME_GEN_FP16,
|
|
||||||
titleId = R.string.frame_gen_fp16,
|
|
||||||
descriptionId = R.string.frame_gen_fp16_description
|
|
||||||
)
|
|
||||||
)
|
|
||||||
put(
|
|
||||||
SwitchSetting(
|
|
||||||
BooleanSetting.RENDERER_FRAME_GEN_DUMP_FLOW,
|
|
||||||
titleId = R.string.frame_gen_dump_flow,
|
|
||||||
descriptionId = R.string.frame_gen_dump_flow_description
|
|
||||||
)
|
|
||||||
)
|
|
||||||
put(
|
put(
|
||||||
SingleChoiceSetting(
|
SingleChoiceSetting(
|
||||||
IntSetting.RENDERER_SCREEN_LAYOUT,
|
IntSetting.RENDERER_SCREEN_LAYOUT,
|
||||||
@@ -772,15 +669,6 @@ abstract class SettingsItem(
|
|||||||
valuesId = R.array.dmaAccuracyValues
|
valuesId = R.array.dmaAccuracyValues
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
put(
|
|
||||||
SingleChoiceSetting(
|
|
||||||
IntSetting.GPU_FENCE_BEHAVIOR,
|
|
||||||
titleId = R.string.gpu_fence_behavior,
|
|
||||||
descriptionId = R.string.gpu_fence_behavior_description,
|
|
||||||
choicesId = R.array.gpuFenceBehaviorNames,
|
|
||||||
valuesId = R.array.gpuFenceBehaviorValues
|
|
||||||
)
|
|
||||||
)
|
|
||||||
put(
|
put(
|
||||||
SwitchSetting(
|
SwitchSetting(
|
||||||
BooleanSetting.RENDERER_ASYNCHRONOUS_SHADERS,
|
BooleanSetting.RENDERER_ASYNCHRONOUS_SHADERS,
|
||||||
@@ -869,6 +757,13 @@ abstract class SettingsItem(
|
|||||||
descriptionId = R.string.skip_cpu_inner_invalidation_description
|
descriptionId = R.string.skip_cpu_inner_invalidation_description
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
put(
|
||||||
|
SwitchSetting(
|
||||||
|
BooleanSetting.ANTIFLICKER,
|
||||||
|
titleId = R.string.antiflicker,
|
||||||
|
descriptionId = R.string.antiflicker_description
|
||||||
|
)
|
||||||
|
)
|
||||||
put(
|
put(
|
||||||
SwitchSetting(
|
SwitchSetting(
|
||||||
BooleanSetting.FIX_BLOOM_EFFECTS,
|
BooleanSetting.FIX_BLOOM_EFFECTS,
|
||||||
|
|||||||
+2
-2
@@ -1,4 +1,4 @@
|
|||||||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
// SPDX-FileCopyrightText: 2024 yuzu Emulator Project
|
// SPDX-FileCopyrightText: 2024 yuzu Emulator Project
|
||||||
@@ -169,7 +169,7 @@ class InputDialogFragment : DialogFragment() {
|
|||||||
NativeInput.onGamePadButtonEvent(
|
NativeInput.onGamePadButtonEvent(
|
||||||
controllerData.getGUID(),
|
controllerData.getGUID(),
|
||||||
controllerData.getPort(),
|
controllerData.getPort(),
|
||||||
InputHandler.getButtonIdFromEvent(event),
|
event.keyCode,
|
||||||
action
|
action
|
||||||
)
|
)
|
||||||
onInputReceived(event.device)
|
onInputReceived(event.device)
|
||||||
|
|||||||
+1
-3
@@ -382,9 +382,7 @@ class SettingsDialogFragment : DialogFragment(), DialogInterface.OnClickListener
|
|||||||
}
|
}
|
||||||
scSetting.setSelectedValue(value)
|
scSetting.setSelectedValue(value)
|
||||||
|
|
||||||
if (scSetting.setting.key == IntSetting.RENDERER_SCALING_FILTER.key ||
|
if (scSetting.setting.key == IntSetting.RENDERER_SCALING_FILTER.key) {
|
||||||
scSetting.setting.key == IntSetting.RENDERER_FRAME_GEN_TARGET_RATE.key
|
|
||||||
) {
|
|
||||||
settingsViewModel.setShouldReloadSettingsList(true)
|
settingsViewModel.setShouldReloadSettingsList(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-41
@@ -27,7 +27,6 @@ import org.yuzu.yuzu_emu.features.settings.model.ShortSetting
|
|||||||
import org.yuzu.yuzu_emu.features.settings.model.StringSetting
|
import org.yuzu.yuzu_emu.features.settings.model.StringSetting
|
||||||
import org.yuzu.yuzu_emu.features.settings.model.view.*
|
import org.yuzu.yuzu_emu.features.settings.model.view.*
|
||||||
import org.yuzu.yuzu_emu.utils.InputHandler
|
import org.yuzu.yuzu_emu.utils.InputHandler
|
||||||
import org.yuzu.yuzu_emu.utils.LosslessScalingHelper
|
|
||||||
import org.yuzu.yuzu_emu.utils.NativeConfig
|
import org.yuzu.yuzu_emu.utils.NativeConfig
|
||||||
import org.yuzu.yuzu_emu.utils.DirectoryInitialization
|
import org.yuzu.yuzu_emu.utils.DirectoryInitialization
|
||||||
import org.yuzu.yuzu_emu.utils.FullscreenHelper
|
import org.yuzu.yuzu_emu.utils.FullscreenHelper
|
||||||
@@ -77,41 +76,6 @@ class SettingsFragmentPresenter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addFrameGenSettings(sl: ArrayList<SettingsItem>) {
|
|
||||||
sl.apply {
|
|
||||||
if (!LosslessScalingHelper.isSupportedByGpu()) {
|
|
||||||
add(
|
|
||||||
RunnableSetting(
|
|
||||||
titleId = R.string.frame_gen_unsupported,
|
|
||||||
descriptionId = R.string.frame_gen_unsupported_description,
|
|
||||||
isRunnable = false
|
|
||||||
) {}
|
|
||||||
)
|
|
||||||
} else if (!LosslessScalingHelper.isInstalled()) {
|
|
||||||
add(
|
|
||||||
RunnableSetting(
|
|
||||||
titleId = R.string.lossless_scaling_missing,
|
|
||||||
descriptionId = R.string.lossless_scaling_missing_description,
|
|
||||||
isRunnable = false
|
|
||||||
) {}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
add(BooleanSetting.RENDERER_FRAME_GEN.key)
|
|
||||||
add(IntSetting.RENDERER_FRAME_GEN_TARGET_RATE.key)
|
|
||||||
add(IntSetting.RENDERER_FRAME_GEN_MULTIPLIER.key)
|
|
||||||
add(IntSetting.RENDERER_FRAME_GEN_QUEUE_TARGET.key)
|
|
||||||
add(BooleanSetting.RENDERER_FRAME_GEN_FLOW_SCALE_AUTO.key)
|
|
||||||
if (!BooleanSetting.RENDERER_FRAME_GEN_FLOW_SCALE_AUTO.getBoolean(
|
|
||||||
getNeedsGlobalForKey(BooleanSetting.RENDERER_FRAME_GEN_FLOW_SCALE_AUTO.key)
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
add(IntSetting.RENDERER_FRAME_GEN_FLOW_SCALE.key)
|
|
||||||
}
|
|
||||||
add(BooleanSetting.RENDERER_FRAME_GEN_FP16.key)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun isSharpnessScalingFilterSelected(): Boolean {
|
private fun isSharpnessScalingFilterSelected(): Boolean {
|
||||||
val needsGlobal = getNeedsGlobalForKey(IntSetting.RENDERER_SCALING_FILTER.key)
|
val needsGlobal = getNeedsGlobalForKey(IntSetting.RENDERER_SCALING_FILTER.key)
|
||||||
val selectedFilter = IntSetting.RENDERER_SCALING_FILTER.getInt(needsGlobal)
|
val selectedFilter = IntSetting.RENDERER_SCALING_FILTER.getInt(needsGlobal)
|
||||||
@@ -156,7 +120,6 @@ class SettingsFragmentPresenter(
|
|||||||
MenuTag.SECTION_ROOT -> addConfigSettings(sl)
|
MenuTag.SECTION_ROOT -> addConfigSettings(sl)
|
||||||
MenuTag.SECTION_SYSTEM -> addSystemSettings(sl)
|
MenuTag.SECTION_SYSTEM -> addSystemSettings(sl)
|
||||||
MenuTag.SECTION_RENDERER -> addGraphicsSettings(sl)
|
MenuTag.SECTION_RENDERER -> addGraphicsSettings(sl)
|
||||||
MenuTag.SECTION_FRAME_GEN -> addFrameGenSettings(sl)
|
|
||||||
MenuTag.SECTION_PERFORMANCE_STATS -> addPerformanceOverlaySettings(sl)
|
MenuTag.SECTION_PERFORMANCE_STATS -> addPerformanceOverlaySettings(sl)
|
||||||
MenuTag.SECTION_SOC_OVERLAY -> addSocOverlaySettings(sl)
|
MenuTag.SECTION_SOC_OVERLAY -> addSocOverlaySettings(sl)
|
||||||
MenuTag.SECTION_INPUT_OVERLAY -> addInputOverlaySettings(sl)
|
MenuTag.SECTION_INPUT_OVERLAY -> addInputOverlaySettings(sl)
|
||||||
@@ -287,9 +250,8 @@ class SettingsFragmentPresenter(
|
|||||||
add(BooleanSetting.USE_CUSTOM_RTC.key)
|
add(BooleanSetting.USE_CUSTOM_RTC.key)
|
||||||
add(LongSetting.CUSTOM_RTC.key)
|
add(LongSetting.CUSTOM_RTC.key)
|
||||||
|
|
||||||
add(HeaderSetting(R.string.clocks))
|
add(HeaderSetting(R.string.cpu))
|
||||||
add(IntSetting.FAST_CPU_TIME.key)
|
add(IntSetting.FAST_CPU_TIME.key)
|
||||||
add(IntSetting.FAST_GPU_TIME.key)
|
|
||||||
add(BooleanSetting.CORE_SYNC_CORE_SPEED.key)
|
add(BooleanSetting.CORE_SYNC_CORE_SPEED.key)
|
||||||
|
|
||||||
add(IntSetting.MEMORY_LAYOUT.key)
|
add(IntSetting.MEMORY_LAYOUT.key)
|
||||||
@@ -321,7 +283,6 @@ class SettingsFragmentPresenter(
|
|||||||
|
|
||||||
add(IntSetting.RENDERER_ACCURACY.key)
|
add(IntSetting.RENDERER_ACCURACY.key)
|
||||||
add(IntSetting.DMA_ACCURACY.key)
|
add(IntSetting.DMA_ACCURACY.key)
|
||||||
add(IntSetting.GPU_FENCE_BEHAVIOR.key)
|
|
||||||
add(IntSetting.MAX_ANISOTROPY.key)
|
add(IntSetting.MAX_ANISOTROPY.key)
|
||||||
add(IntSetting.RENDERER_VRAM_USAGE_MODE.key)
|
add(IntSetting.RENDERER_VRAM_USAGE_MODE.key)
|
||||||
add(IntSetting.RENDERER_ASTC_DECODE_METHOD.key)
|
add(IntSetting.RENDERER_ASTC_DECODE_METHOD.key)
|
||||||
@@ -336,9 +297,12 @@ class SettingsFragmentPresenter(
|
|||||||
|
|
||||||
add(HeaderSetting(R.string.hacks))
|
add(HeaderSetting(R.string.hacks))
|
||||||
|
|
||||||
|
add(IntSetting.FAST_GPU_TIME.key)
|
||||||
add(BooleanSetting.SKIP_CPU_INNER_INVALIDATION.key)
|
add(BooleanSetting.SKIP_CPU_INNER_INVALIDATION.key)
|
||||||
|
add(BooleanSetting.ANTIFLICKER.key)
|
||||||
add(BooleanSetting.FIX_BLOOM_EFFECTS.key)
|
add(BooleanSetting.FIX_BLOOM_EFFECTS.key)
|
||||||
add(BooleanSetting.EMULATE_BGR565.key)
|
add(BooleanSetting.EMULATE_BGR565.key)
|
||||||
|
add(BooleanSetting.RESCALE_HACK.key)
|
||||||
add(BooleanSetting.RENDERER_ASYNCHRONOUS_SHADERS.key)
|
add(BooleanSetting.RENDERER_ASYNCHRONOUS_SHADERS.key)
|
||||||
add(IntSetting.ANDROID_PIPELINE_WORKERS.key)
|
add(IntSetting.ANDROID_PIPELINE_WORKERS.key)
|
||||||
add(BooleanSetting.RENDERER_ASYNCHRONOUS_GPU_EMULATION.key)
|
add(BooleanSetting.RENDERER_ASYNCHRONOUS_GPU_EMULATION.key)
|
||||||
@@ -1332,7 +1296,6 @@ class SettingsFragmentPresenter(
|
|||||||
add(BooleanSetting.DUMP_GUEST_SHADERS.key)
|
add(BooleanSetting.DUMP_GUEST_SHADERS.key)
|
||||||
add(BooleanSetting.GPU_LOG_SHADER_DUMPS.key)
|
add(BooleanSetting.GPU_LOG_SHADER_DUMPS.key)
|
||||||
add(BooleanSetting.DUMP_MACROS.key)
|
add(BooleanSetting.DUMP_MACROS.key)
|
||||||
add(BooleanSetting.RENDERER_FRAME_GEN_DUMP_FLOW.key)
|
|
||||||
add(BooleanSetting.GPU_LOG_MEMORY_TRACKING.key)
|
add(BooleanSetting.GPU_LOG_MEMORY_TRACKING.key)
|
||||||
add(BooleanSetting.GPU_LOG_DRIVER_DEBUG.key)
|
add(BooleanSetting.GPU_LOG_DRIVER_DEBUG.key)
|
||||||
add(IntSetting.GPU_LOG_RING_BUFFER_SIZE.key)
|
add(IntSetting.GPU_LOG_RING_BUFFER_SIZE.key)
|
||||||
|
|||||||
-2
@@ -29,7 +29,6 @@ enum class SettingsSubscreen {
|
|||||||
DRIVER_MANAGER,
|
DRIVER_MANAGER,
|
||||||
DRIVER_FETCHER,
|
DRIVER_FETCHER,
|
||||||
FREEDRENO_SETTINGS,
|
FREEDRENO_SETTINGS,
|
||||||
LOSSLESS_MANAGER,
|
|
||||||
APPLET_LAUNCHER,
|
APPLET_LAUNCHER,
|
||||||
INSTALLABLE,
|
INSTALLABLE,
|
||||||
GAME_FOLDERS,
|
GAME_FOLDERS,
|
||||||
@@ -127,7 +126,6 @@ class SettingsSubscreenActivity : AppCompatActivity() {
|
|||||||
SettingsSubscreen.DRIVER_MANAGER -> R.id.driverManagerFragment
|
SettingsSubscreen.DRIVER_MANAGER -> R.id.driverManagerFragment
|
||||||
SettingsSubscreen.DRIVER_FETCHER -> R.id.driverFetcherFragment
|
SettingsSubscreen.DRIVER_FETCHER -> R.id.driverFetcherFragment
|
||||||
SettingsSubscreen.FREEDRENO_SETTINGS -> R.id.freedrenoSettingsFragment
|
SettingsSubscreen.FREEDRENO_SETTINGS -> R.id.freedrenoSettingsFragment
|
||||||
SettingsSubscreen.LOSSLESS_MANAGER -> R.id.losslessManagerFragment
|
|
||||||
SettingsSubscreen.APPLET_LAUNCHER -> R.id.appletLauncherFragment
|
SettingsSubscreen.APPLET_LAUNCHER -> R.id.appletLauncherFragment
|
||||||
SettingsSubscreen.INSTALLABLE -> R.id.installableFragment
|
SettingsSubscreen.INSTALLABLE -> R.id.installableFragment
|
||||||
SettingsSubscreen.GAME_FOLDERS -> R.id.gameFoldersFragment
|
SettingsSubscreen.GAME_FOLDERS -> R.id.gameFoldersFragment
|
||||||
|
|||||||
@@ -1451,7 +1451,6 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
|
|||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
NativeLibrary.refreshThreadPolicies()
|
|
||||||
val b = _binding ?: return
|
val b = _binding ?: return
|
||||||
updateStatsPosition(IntSetting.PERF_OVERLAY_POSITION.getInt())
|
updateStatsPosition(IntSetting.PERF_OVERLAY_POSITION.getInt())
|
||||||
updateSocPosition(IntSetting.SOC_OVERLAY_POSITION.getInt())
|
updateSocPosition(IntSetting.SOC_OVERLAY_POSITION.getInt())
|
||||||
|
|||||||
@@ -369,21 +369,6 @@ class GamePropertiesFragment : Fragment() {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
add(
|
|
||||||
SubmenuProperty(
|
|
||||||
R.string.frame_gen,
|
|
||||||
R.string.frame_gen_per_game_description,
|
|
||||||
R.drawable.ic_duck,
|
|
||||||
action = {
|
|
||||||
val action = HomeNavigationDirections.actionGlobalSettingsActivity(
|
|
||||||
args.game,
|
|
||||||
Settings.MenuTag.SECTION_FRAME_GEN
|
|
||||||
)
|
|
||||||
binding.root.findNavController().navigate(action)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
if (GpuDriverHelper.isAdrenoGpu()) {
|
if (GpuDriverHelper.isAdrenoGpu()) {
|
||||||
add(
|
add(
|
||||||
SubmenuProperty(
|
SubmenuProperty(
|
||||||
|
|||||||
@@ -44,7 +44,6 @@ import org.yuzu.yuzu_emu.ui.main.MainActivity
|
|||||||
import org.yuzu.yuzu_emu.utils.FileUtil
|
import org.yuzu.yuzu_emu.utils.FileUtil
|
||||||
import org.yuzu.yuzu_emu.utils.GpuDriverHelper
|
import org.yuzu.yuzu_emu.utils.GpuDriverHelper
|
||||||
import org.yuzu.yuzu_emu.utils.Log
|
import org.yuzu.yuzu_emu.utils.Log
|
||||||
import org.yuzu.yuzu_emu.utils.LosslessScalingHelper
|
|
||||||
import org.yuzu.yuzu_emu.utils.ViewUtils.updateMargins
|
import org.yuzu.yuzu_emu.utils.ViewUtils.updateMargins
|
||||||
|
|
||||||
class HomeSettingsFragment : Fragment() {
|
class HomeSettingsFragment : Fragment() {
|
||||||
@@ -171,24 +170,6 @@ class HomeSettingsFragment : Fragment() {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
add(
|
|
||||||
HomeSetting(
|
|
||||||
R.string.lossless_scaling,
|
|
||||||
R.string.lossless_scaling_description,
|
|
||||||
R.drawable.ic_duck,
|
|
||||||
{
|
|
||||||
val action = HomeNavigationDirections.actionGlobalSettingsSubscreenActivity(
|
|
||||||
SettingsSubscreen.LOSSLESS_MANAGER,
|
|
||||||
null
|
|
||||||
)
|
|
||||||
binding.root.findNavController().navigate(action)
|
|
||||||
},
|
|
||||||
{ true },
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
LosslessScalingHelper.statusText
|
|
||||||
)
|
|
||||||
)
|
|
||||||
add(
|
add(
|
||||||
HomeSetting(
|
HomeSetting(
|
||||||
R.string.multiplayer,
|
R.string.multiplayer,
|
||||||
@@ -356,7 +337,6 @@ class HomeSettingsFragment : Fragment() {
|
|||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
driverViewModel.updateDriverNameForGame(null)
|
driverViewModel.updateDriverNameForGame(null)
|
||||||
LosslessScalingHelper.refreshStatus()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroyView() {
|
override fun onDestroyView() {
|
||||||
|
|||||||
@@ -1,174 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
package org.yuzu.yuzu_emu.fragments
|
|
||||||
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import androidx.activity.result.contract.ActivityResultContracts
|
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
|
||||||
import androidx.core.view.ViewCompat
|
|
||||||
import androidx.core.view.WindowInsetsCompat
|
|
||||||
import androidx.core.view.updatePadding
|
|
||||||
import androidx.fragment.app.Fragment
|
|
||||||
import androidx.recyclerview.widget.GridLayoutManager
|
|
||||||
import com.google.android.material.transition.MaterialSharedAxis
|
|
||||||
import org.yuzu.yuzu_emu.NativeLibrary
|
|
||||||
import org.yuzu.yuzu_emu.R
|
|
||||||
import org.yuzu.yuzu_emu.adapters.HomeSettingAdapter
|
|
||||||
import org.yuzu.yuzu_emu.databinding.FragmentLosslessManagerBinding
|
|
||||||
import org.yuzu.yuzu_emu.features.fetcher.SpacingItemDecoration
|
|
||||||
import org.yuzu.yuzu_emu.model.HomeSetting
|
|
||||||
import org.yuzu.yuzu_emu.utils.LosslessScalingHelper
|
|
||||||
import org.yuzu.yuzu_emu.utils.ViewUtils.updateMargins
|
|
||||||
import org.yuzu.yuzu_emu.utils.collect
|
|
||||||
|
|
||||||
class LosslessManagerFragment : Fragment() {
|
|
||||||
private var _binding: FragmentLosslessManagerBinding? = null
|
|
||||||
private val binding get() = _binding!!
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true)
|
|
||||||
returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, false)
|
|
||||||
reenterTransition = MaterialSharedAxis(MaterialSharedAxis.X, false)
|
|
||||||
exitTransition = MaterialSharedAxis(MaterialSharedAxis.X, true)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater,
|
|
||||||
container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View {
|
|
||||||
_binding = FragmentLosslessManagerBinding.inflate(inflater, container, false)
|
|
||||||
return binding.root
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
||||||
super.onViewCreated(view, savedInstanceState)
|
|
||||||
|
|
||||||
binding.toolbarLossless.setNavigationOnClickListener {
|
|
||||||
requireActivity().onBackPressedDispatcher.onBackPressed()
|
|
||||||
}
|
|
||||||
|
|
||||||
binding.losslessOptionsList.apply {
|
|
||||||
layoutManager =
|
|
||||||
GridLayoutManager(requireContext(), resources.getInteger(R.integer.grid_columns))
|
|
||||||
addItemDecoration(
|
|
||||||
SpacingItemDecoration(resources.getDimensionPixelSize(R.dimen.spacing_small))
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
LosslessScalingHelper.statusText.collect(viewLifecycleOwner) { refreshOptions() }
|
|
||||||
|
|
||||||
setInsets()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun refreshOptions() {
|
|
||||||
binding.losslessOptionsList.adapter = HomeSettingAdapter(
|
|
||||||
requireActivity() as AppCompatActivity,
|
|
||||||
viewLifecycleOwner,
|
|
||||||
buildOptions()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun buildOptions(): List<HomeSetting> {
|
|
||||||
val installed = LosslessScalingHelper.isInstalled()
|
|
||||||
return listOf(
|
|
||||||
HomeSetting(
|
|
||||||
if (installed) R.string.lossless_scaling_replace else R.string.lossless_scaling_install,
|
|
||||||
if (installed) {
|
|
||||||
R.string.lossless_scaling_replace_description
|
|
||||||
} else {
|
|
||||||
R.string.lossless_scaling_install_description
|
|
||||||
},
|
|
||||||
R.drawable.ic_install,
|
|
||||||
{ dllPickerLauncher.launch(arrayOf("*/*")) },
|
|
||||||
{ !NativeLibrary.isRunning() },
|
|
||||||
R.string.lossless_scaling_locked,
|
|
||||||
R.string.lossless_scaling_locked_description,
|
|
||||||
LosslessScalingHelper.statusText
|
|
||||||
),
|
|
||||||
HomeSetting(
|
|
||||||
R.string.lossless_scaling_remove,
|
|
||||||
R.string.lossless_scaling_remove_description,
|
|
||||||
R.drawable.ic_delete,
|
|
||||||
{ confirmRemoval() },
|
|
||||||
{ installed && !NativeLibrary.isRunning() },
|
|
||||||
if (installed) {
|
|
||||||
R.string.lossless_scaling_locked
|
|
||||||
} else {
|
|
||||||
R.string.lossless_scaling_remove_unavailable
|
|
||||||
},
|
|
||||||
if (installed) {
|
|
||||||
R.string.lossless_scaling_locked_description
|
|
||||||
} else {
|
|
||||||
R.string.lossless_scaling_remove_unavailable_description
|
|
||||||
}
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun confirmRemoval() {
|
|
||||||
MessageDialogFragment.newInstance(
|
|
||||||
requireActivity(),
|
|
||||||
titleId = R.string.lossless_scaling_remove,
|
|
||||||
descriptionId = R.string.lossless_scaling_remove_confirmation,
|
|
||||||
positiveButtonTitleId = R.string.lossless_scaling_remove,
|
|
||||||
positiveAction = { LosslessScalingHelper.remove() },
|
|
||||||
showNegativeButton = true,
|
|
||||||
negativeAction = {}
|
|
||||||
).show(parentFragmentManager, MessageDialogFragment.TAG)
|
|
||||||
}
|
|
||||||
|
|
||||||
private val dllPickerLauncher =
|
|
||||||
registerForActivityResult(ActivityResultContracts.OpenDocument()) { result ->
|
|
||||||
if (result == null) {
|
|
||||||
return@registerForActivityResult
|
|
||||||
}
|
|
||||||
|
|
||||||
val resultStrings = resources.getStringArray(R.array.losslessDllResults)
|
|
||||||
ProgressDialogFragment.newInstance(
|
|
||||||
requireActivity(),
|
|
||||||
R.string.lossless_scaling_installing,
|
|
||||||
false
|
|
||||||
) { _, _ ->
|
|
||||||
val installResult = LosslessScalingHelper.install(result)
|
|
||||||
if (installResult == LosslessScalingHelper.RESULT_OK) {
|
|
||||||
getString(R.string.lossless_scaling_install_success)
|
|
||||||
} else {
|
|
||||||
MessageDialogFragment.newInstance(
|
|
||||||
titleId = R.string.lossless_scaling_install_failed,
|
|
||||||
descriptionString = resultStrings[installResult]
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}.show(parentFragmentManager, ProgressDialogFragment.TAG)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onDestroyView() {
|
|
||||||
super.onDestroyView()
|
|
||||||
_binding = null
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setInsets() =
|
|
||||||
ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _, windowInsets ->
|
|
||||||
val barInsets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
|
|
||||||
val cutoutInsets = windowInsets.getInsets(WindowInsetsCompat.Type.displayCutout())
|
|
||||||
|
|
||||||
binding.appbarLossless.updateMargins(
|
|
||||||
left = barInsets.left + cutoutInsets.left,
|
|
||||||
right = barInsets.right + cutoutInsets.right
|
|
||||||
)
|
|
||||||
|
|
||||||
binding.scrollViewLossless.updatePadding(bottom = barInsets.bottom)
|
|
||||||
|
|
||||||
binding.losslessOptionsList.updatePadding(
|
|
||||||
left = barInsets.left + cutoutInsets.left,
|
|
||||||
right = barInsets.right + cutoutInsets.right
|
|
||||||
)
|
|
||||||
|
|
||||||
windowInsets
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
package org.yuzu.yuzu_emu.fragments
|
package org.yuzu.yuzu_emu.fragments
|
||||||
@@ -42,7 +42,6 @@ import org.yuzu.yuzu_emu.model.SetupPage
|
|||||||
import org.yuzu.yuzu_emu.model.PageState
|
import org.yuzu.yuzu_emu.model.PageState
|
||||||
import org.yuzu.yuzu_emu.ui.main.MainActivity
|
import org.yuzu.yuzu_emu.ui.main.MainActivity
|
||||||
import org.yuzu.yuzu_emu.utils.DirectoryInitialization
|
import org.yuzu.yuzu_emu.utils.DirectoryInitialization
|
||||||
import org.yuzu.yuzu_emu.utils.LosslessScalingHelper
|
|
||||||
import org.yuzu.yuzu_emu.utils.NativeConfig
|
import org.yuzu.yuzu_emu.utils.NativeConfig
|
||||||
import org.yuzu.yuzu_emu.utils.ViewUtils
|
import org.yuzu.yuzu_emu.utils.ViewUtils
|
||||||
import org.yuzu.yuzu_emu.utils.ViewUtils.setVisible
|
import org.yuzu.yuzu_emu.utils.ViewUtils.setVisible
|
||||||
@@ -203,24 +202,6 @@ class SetupFragment : Fragment() {
|
|||||||
R.string.install_firmware_warning_help,
|
R.string.install_firmware_warning_help,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
add(
|
|
||||||
PageButton(
|
|
||||||
R.drawable.ic_duck,
|
|
||||||
R.string.lossless_scaling,
|
|
||||||
R.string.lossless_scaling_setup_description,
|
|
||||||
{
|
|
||||||
pageButtonCallback = it
|
|
||||||
getLosslessDll.launch(arrayOf("*/*"))
|
|
||||||
},
|
|
||||||
{
|
|
||||||
if (LosslessScalingHelper.isInstalled()) {
|
|
||||||
ButtonState.BUTTON_ACTION_COMPLETE
|
|
||||||
} else {
|
|
||||||
ButtonState.BUTTON_ACTION_INCOMPLETE
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
)
|
|
||||||
add(
|
add(
|
||||||
PageButton(
|
PageButton(
|
||||||
R.drawable.ic_controller,
|
R.drawable.ic_controller,
|
||||||
@@ -465,32 +446,6 @@ class SetupFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val getLosslessDll =
|
|
||||||
registerForActivityResult(ActivityResultContracts.OpenDocument()) { result ->
|
|
||||||
if (result == null) {
|
|
||||||
return@registerForActivityResult
|
|
||||||
}
|
|
||||||
|
|
||||||
val resultStrings = resources.getStringArray(R.array.losslessDllResults)
|
|
||||||
ProgressDialogFragment.newInstance(
|
|
||||||
requireActivity(),
|
|
||||||
R.string.lossless_scaling_installing,
|
|
||||||
false
|
|
||||||
) { _, _ ->
|
|
||||||
val installResult = LosslessScalingHelper.install(result)
|
|
||||||
if (installResult == LosslessScalingHelper.RESULT_OK) {
|
|
||||||
getString(R.string.lossless_scaling_install_success)
|
|
||||||
} else {
|
|
||||||
MessageDialogFragment.newInstance(
|
|
||||||
titleId = R.string.lossless_scaling_install_failed,
|
|
||||||
descriptionString = resultStrings[installResult]
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}.apply {
|
|
||||||
onDialogComplete = { checkForButtonState.invoke() }
|
|
||||||
}.show(parentFragmentManager, ProgressDialogFragment.TAG)
|
|
||||||
}
|
|
||||||
|
|
||||||
val getGamesDirectory =
|
val getGamesDirectory =
|
||||||
registerForActivityResult(ActivityResultContracts.OpenDocumentTree()) { result ->
|
registerForActivityResult(ActivityResultContracts.OpenDocumentTree()) { result ->
|
||||||
if (result != null) {
|
if (result != null) {
|
||||||
|
|||||||
+1
-13
@@ -1,4 +1,4 @@
|
|||||||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
package org.yuzu.yuzu_emu.fragments
|
package org.yuzu.yuzu_emu.fragments
|
||||||
@@ -72,18 +72,6 @@ class SystemInfoDialogFragment : DialogFragment() {
|
|||||||
|
|
||||||
val vulkanDriver = NativeLibrary.getVulkanDriverVersion()
|
val vulkanDriver = NativeLibrary.getVulkanDriverVersion()
|
||||||
appendLine("${getString(R.string.vulkan_driver_version)}: $vulkanDriver")
|
appendLine("${getString(R.string.vulkan_driver_version)}: $vulkanDriver")
|
||||||
|
|
||||||
val frameGen = NativeLibrary.supportsFrameGeneration()
|
|
||||||
appendLine(
|
|
||||||
"${getString(R.string.frame_generation_support)}: " +
|
|
||||||
getString(
|
|
||||||
if (frameGen) {
|
|
||||||
R.string.frame_generation_supported
|
|
||||||
} else {
|
|
||||||
R.string.frame_generation_unsupported
|
|
||||||
}
|
|
||||||
)
|
|
||||||
)
|
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
appendLine("${getString(R.string.error_getting_emulator_info)}: ${e.message}")
|
appendLine("${getString(R.string.error_getting_emulator_info)}: ${e.message}")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,12 +49,6 @@ object InputHandler {
|
|||||||
MotionEvent.AXIS_RTRIGGER
|
MotionEvent.AXIS_RTRIGGER
|
||||||
)
|
)
|
||||||
|
|
||||||
// Currently, Android doesn't support Joy-Con D-pad buttons. We fall back to the scan code
|
|
||||||
private const val LINUX_BUTTON_DPAD_UP = 0x220
|
|
||||||
private const val LINUX_BUTTON_DPAD_DOWN = 0x221
|
|
||||||
private const val LINUX_BUTTON_DPAD_LEFT = 0x222
|
|
||||||
private const val LINUX_BUTTON_DPAD_RIGHT = 0x223
|
|
||||||
|
|
||||||
fun isPhysicalGameController(device: InputDevice?): Boolean {
|
fun isPhysicalGameController(device: InputDevice?): Boolean {
|
||||||
device ?: return false
|
device ?: return false
|
||||||
|
|
||||||
@@ -93,25 +87,12 @@ object InputHandler {
|
|||||||
NativeInput.onGamePadButtonEvent(
|
NativeInput.onGamePadButtonEvent(
|
||||||
controllerData.getGUID(),
|
controllerData.getGUID(),
|
||||||
controllerData.getPort(),
|
controllerData.getPort(),
|
||||||
getButtonIdFromEvent(event),
|
event.keyCode,
|
||||||
action
|
action
|
||||||
)
|
)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getButtonIdFromEvent(event: KeyEvent): Int {
|
|
||||||
if (event.keyCode == 0) {
|
|
||||||
return when (event.scanCode) {
|
|
||||||
LINUX_BUTTON_DPAD_UP -> KeyEvent.KEYCODE_DPAD_UP
|
|
||||||
LINUX_BUTTON_DPAD_DOWN -> KeyEvent.KEYCODE_DPAD_DOWN
|
|
||||||
LINUX_BUTTON_DPAD_LEFT -> KeyEvent.KEYCODE_DPAD_LEFT
|
|
||||||
LINUX_BUTTON_DPAD_RIGHT -> KeyEvent.KEYCODE_DPAD_RIGHT
|
|
||||||
else -> return 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return event.keyCode
|
|
||||||
}
|
|
||||||
|
|
||||||
fun dispatchGenericMotionEvent(event: MotionEvent): Boolean {
|
fun dispatchGenericMotionEvent(event: MotionEvent): Boolean {
|
||||||
val controllerData =
|
val controllerData =
|
||||||
androidControllers[event.device.controllerNumber] ?: return false
|
androidControllers[event.device.controllerNumber] ?: return false
|
||||||
|
|||||||
@@ -1,77 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
package org.yuzu.yuzu_emu.utils
|
|
||||||
|
|
||||||
import android.net.Uri
|
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
|
||||||
import kotlinx.coroutines.flow.asStateFlow
|
|
||||||
import org.yuzu.yuzu_emu.NativeLibrary
|
|
||||||
import org.yuzu.yuzu_emu.R
|
|
||||||
import org.yuzu.yuzu_emu.YuzuApplication
|
|
||||||
import java.io.File
|
|
||||||
|
|
||||||
object LosslessScalingHelper {
|
|
||||||
const val RESULT_OK = 0
|
|
||||||
const val RESULT_NOT_INSTALLED = 1
|
|
||||||
|
|
||||||
private val _statusText = MutableStateFlow("")
|
|
||||||
val statusText: StateFlow<String> = _statusText.asStateFlow()
|
|
||||||
|
|
||||||
private var installed: Boolean? = null
|
|
||||||
private var gpuSupported: Boolean? = null
|
|
||||||
|
|
||||||
fun isInstalled(): Boolean = installed ?: refreshStatus()
|
|
||||||
|
|
||||||
fun isSupportedByGpu(): Boolean {
|
|
||||||
val cached = gpuSupported
|
|
||||||
if (cached != null) {
|
|
||||||
return cached
|
|
||||||
}
|
|
||||||
val result = NativeLibrary.supportsFrameGeneration()
|
|
||||||
gpuSupported = result
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
fun refreshStatus(): Boolean {
|
|
||||||
val result = NativeLibrary.validateLosslessDll() == RESULT_OK
|
|
||||||
installed = result
|
|
||||||
|
|
||||||
val context = YuzuApplication.appContext
|
|
||||||
_statusText.value = if (result) {
|
|
||||||
context.getString(R.string.lossless_scaling_installed)
|
|
||||||
} else {
|
|
||||||
context.getString(R.string.lossless_scaling_not_installed)
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
fun install(source: Uri): Int {
|
|
||||||
val destination = File(NativeLibrary.getLosslessDllPath())
|
|
||||||
destination.parentFile?.mkdirs()
|
|
||||||
|
|
||||||
val copied = FileUtil.copyUriToInternalStorage(
|
|
||||||
source,
|
|
||||||
destination.parent!!,
|
|
||||||
destination.name
|
|
||||||
)
|
|
||||||
if (copied == null) {
|
|
||||||
refreshStatus()
|
|
||||||
return RESULT_NOT_INSTALLED
|
|
||||||
}
|
|
||||||
|
|
||||||
val result = NativeLibrary.prepareLosslessDll()
|
|
||||||
if (result != RESULT_OK) {
|
|
||||||
NativeLibrary.removeLosslessDll()
|
|
||||||
}
|
|
||||||
refreshStatus()
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
fun remove(): Boolean {
|
|
||||||
val removed = NativeLibrary.removeLosslessDll()
|
|
||||||
refreshStatus()
|
|
||||||
return removed
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -33,8 +33,8 @@ void AndroidConfig::SaveAllValues() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AndroidConfig::ReadAndroidValues() {
|
void AndroidConfig::ReadAndroidValues() {
|
||||||
ReadAndroidUIValues();
|
|
||||||
if (global) {
|
if (global) {
|
||||||
|
ReadAndroidUIValues();
|
||||||
ReadUIValues();
|
ReadUIValues();
|
||||||
BeginGroup(Settings::TranslateCategory(Settings::Category::DataStorage));
|
BeginGroup(Settings::TranslateCategory(Settings::Category::DataStorage));
|
||||||
Settings::values.ext_content_from_game_dirs = ReadBooleanSetting(
|
Settings::values.ext_content_from_game_dirs = ReadBooleanSetting(
|
||||||
@@ -223,8 +223,8 @@ void AndroidConfig::ReadAndroidControlValues() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AndroidConfig::SaveAndroidValues() {
|
void AndroidConfig::SaveAndroidValues() {
|
||||||
SaveAndroidUIValues();
|
|
||||||
if (global) {
|
if (global) {
|
||||||
|
SaveAndroidUIValues();
|
||||||
SaveUIValues();
|
SaveUIValues();
|
||||||
SaveOverlayValues();
|
SaveOverlayValues();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ namespace AndroidSettings {
|
|||||||
&show_performance_overlay};
|
&show_performance_overlay};
|
||||||
|
|
||||||
|
|
||||||
Settings::SwitchableSetting<s32> pipeline_worker_count{linkage, 2, "pipeline_worker_count",
|
Settings::Setting<s32> pipeline_worker_count{linkage, 4, "pipeline_worker_count",
|
||||||
Settings::Category::Android,
|
Settings::Category::Android,
|
||||||
Settings::Specialization::Default,
|
Settings::Specialization::Default,
|
||||||
true,
|
true,
|
||||||
|
|||||||
@@ -124,18 +124,9 @@ float EmuWindow_Android::GetFrameTimeVerifiedHint() const {
|
|||||||
return QuantizeFrameRateHint(verified_rate);
|
return QuantizeFrameRateHint(verified_rate);
|
||||||
}
|
}
|
||||||
|
|
||||||
float EmuWindow_Android::GetPresentedFrameMultiplier() {
|
|
||||||
if (!Settings::values.frame_gen.GetValue()) {
|
|
||||||
return 1.0f;
|
|
||||||
}
|
|
||||||
return static_cast<float>(std::clamp<u32>(Settings::values.frame_gen_multiplier.GetValue(), 2, 4));
|
|
||||||
}
|
|
||||||
|
|
||||||
float EmuWindow_Android::GetFrameRateHint() const {
|
float EmuWindow_Android::GetFrameRateHint() const {
|
||||||
const float presented_multiplier = GetPresentedFrameMultiplier();
|
const float observed_rate = std::clamp(m_smoothed_present_rate, 0.0f, 240.0f);
|
||||||
const float observed_rate =
|
const float frame_time_verified_hint = GetFrameTimeVerifiedHint();
|
||||||
std::clamp(m_smoothed_present_rate * presented_multiplier, 0.0f, 240.0f);
|
|
||||||
const float frame_time_verified_hint = GetFrameTimeVerifiedHint() * presented_multiplier;
|
|
||||||
|
|
||||||
if (m_last_frame_rate_hint > 0.0f && observed_rate > 0.0f) {
|
if (m_last_frame_rate_hint > 0.0f && observed_rate > 0.0f) {
|
||||||
const float tolerance = std::max(m_last_frame_rate_hint * 0.12f, 4.0f);
|
const float tolerance = std::max(m_last_frame_rate_hint * 0.12f, 4.0f);
|
||||||
@@ -159,9 +150,9 @@ float EmuWindow_Android::GetFrameRateHint() const {
|
|||||||
return frame_time_verified_hint;
|
return frame_time_verified_hint;
|
||||||
}
|
}
|
||||||
|
|
||||||
const float nominal_rate = 60.0f * presented_multiplier;
|
constexpr float NominalFrameRate = 60.0f;
|
||||||
if (!Settings::values.use_speed_limit.GetValue()) {
|
if (!Settings::values.use_speed_limit.GetValue()) {
|
||||||
return QuantizeFrameRateHint(nominal_rate);
|
return NominalFrameRate;
|
||||||
}
|
}
|
||||||
|
|
||||||
const u16 speed_limit = Settings::SpeedLimit();
|
const u16 speed_limit = Settings::SpeedLimit();
|
||||||
@@ -170,7 +161,7 @@ float EmuWindow_Android::GetFrameRateHint() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const float speed_limited_rate =
|
const float speed_limited_rate =
|
||||||
nominal_rate * (static_cast<float>(std::min<u16>(speed_limit, 100)) / 100.0f);
|
NominalFrameRate * (static_cast<float>(std::min<u16>(speed_limit, 100)) / 100.0f);
|
||||||
return QuantizeFrameRateHint(speed_limited_rate);
|
return QuantizeFrameRateHint(speed_limited_rate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -61,7 +61,6 @@ private:
|
|||||||
void UpdateObservedFrameRate();
|
void UpdateObservedFrameRate();
|
||||||
[[nodiscard]] float GetFrameRateHint() const;
|
[[nodiscard]] float GetFrameRateHint() const;
|
||||||
[[nodiscard]] float GetFrameTimeVerifiedHint() const;
|
[[nodiscard]] float GetFrameTimeVerifiedHint() const;
|
||||||
[[nodiscard]] static float GetPresentedFrameMultiplier();
|
|
||||||
[[nodiscard]] static float QuantizeFrameRateHint(float frame_rate);
|
[[nodiscard]] static float QuantizeFrameRateHint(float frame_rate);
|
||||||
|
|
||||||
float m_window_width{};
|
float m_window_width{};
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user