From 219920fbd0db35973d2a07113e279af950a3cdab Mon Sep 17 00:00:00 2001 From: lizzie Date: Tue, 9 Jun 2026 00:36:19 +0000 Subject: [PATCH] disable JIT service --- externals/cmake-modules/DetectPlatform.cmake | 18 ++++++++++++++++-- src/core/debugger/debugger.cpp | 10 ++++++---- src/core/hle/service/services.cpp | 3 +++ src/yuzu_cmd/CMakeLists.txt | 4 ++++ 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/externals/cmake-modules/DetectPlatform.cmake b/externals/cmake-modules/DetectPlatform.cmake index 1867e3d15b..1847f330e4 100644 --- a/externals/cmake-modules/DetectPlatform.cmake +++ b/externals/cmake-modules/DetectPlatform.cmake @@ -154,6 +154,20 @@ endif() # awesome if (PLATFORM_FREEBSD OR PLATFORM_DRAGONFLYBSD) - set(CMAKE_EXE_LINKER_FLAGS - "${CMAKE_EXE_LINKER_FLAGS} -L${CMAKE_SYSROOT}/usr/local/lib") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${CMAKE_SYSROOT}/usr/local/lib") +elseif (PLATFORM_EMSCRIPTEN) + set(EMSCRIPTEN_C_FLAGS "-s MEMORY64 -m64 -pipe -sMEMORY64=1") + set(EMSCRIPTEN_LINK_FLAGS "-sMEMORY64=1 -m64 -Wl,-mwasm64 -sASYNCIFY=1") + + # This prevents FFmpeg and other libraries from assuming it's the host's CPU + # Additionally some Emscripten installs may not be very good... generally + set(EMSCRIPTEN_SYSTEM_PROCESSOR wasm) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EMSCRIPTEN_C_FLAGS}") + set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} ${EMSCRIPTEN_C_FLAGS}") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${EMSCRIPTEN_LINK_FLAGS}") + set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} ${EMSCRIPTEN_LINK_FLAGS}") + set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} ${EMSCRIPTEN_LINK_FLAGS}") + + unset(EMSCRIPTEN_C_FLAGS) + unset(EMSCRIPTEN_LINK_FLAGS) endif() diff --git a/src/core/debugger/debugger.cpp b/src/core/debugger/debugger.cpp index 962b60098d..998d98cfe5 100644 --- a/src/core/debugger/debugger.cpp +++ b/src/core/debugger/debugger.cpp @@ -7,7 +7,7 @@ #include #include -#ifdef __EMSCRIPTEN__ +#if defined(__EMSCRIPTEN__) || defined(__wasi__) // TODO: gdb stub compat with emscripten? #else #include @@ -27,7 +27,9 @@ #include "common/thread.h" #include "core/core.h" #include "core/debugger/debugger.h" -#ifndef __EMSCRIPTEN__ +#if defined(__EMSCRIPTEN__) || defined(__wasi__) +// TODO: gdbstub with emscripten? +#else #include "core/debugger/debugger_interface.h" #include "core/debugger/gdbstub.h" #endif @@ -35,10 +37,10 @@ #include "core/hle/kernel/k_process.h" #include "core/hle/kernel/k_scheduler.h" -#ifdef __EMSCRIPTEN__ +#if defined(__EMSCRIPTEN__) || defined(__wasi__) namespace Core { // Dummy -struct DebuggerImpl { +class DebuggerImpl { char pad; }; Debugger::Debugger(Core::System& system, u16 port) {} diff --git a/src/core/hle/service/services.cpp b/src/core/hle/service/services.cpp index 4dfdf9068f..368b5193f9 100644 --- a/src/core/hle/service/services.cpp +++ b/src/core/hle/service/services.cpp @@ -89,7 +89,10 @@ Services::Services(std::shared_ptr& sm, Core::System& system for (auto const& e : std::vector>{ {"audio", &Audio::LoopProcess}, {"FS", &FileSystem::LoopProcess}, +// Must match with src/core/CMakeLists.txt for target_source of jit.cpp +#if defined(ARCHITECTURE_x86_64) || defined(ARCHITECTURE_arm64) || defined(ARCHITECTURE_riscv64) || defined(ARCHITECTURE_loongarch64) {"jit", &JIT::LoopProcess}, +#endif {"ldn", &LDN::LoopProcess}, {"Loader", &LDR::LoopProcess}, {"nvservices", &Nvidia::LoopProcess}, diff --git a/src/yuzu_cmd/CMakeLists.txt b/src/yuzu_cmd/CMakeLists.txt index 09a9bd6da1..4b097418bb 100644 --- a/src/yuzu_cmd/CMakeLists.txt +++ b/src/yuzu_cmd/CMakeLists.txt @@ -75,3 +75,7 @@ if (NOT MSVC) $<$:-Wno-unused-parameter> $<$:-Wno-missing-field-initializers>) endif() + +if (PLATFORM_EMSCRIPTEN) + set_target_properties(yuzu-cmd PROPERTIES LINK_FLAGS_RELEASE "--global-base=16777216") +endif()