diff --git a/.ci/ps4/build.sh b/.ci/ps4/build.sh index 0bffdca680..a4bfc97540 100755 --- a/.ci/ps4/build.sh +++ b/.ci/ps4/build.sh @@ -30,6 +30,8 @@ set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) set(CMAKE_SIZEOF_VOID_P 8) EOF +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[@]}" $@) @@ -51,4 +53,4 @@ cmake -S . -B build -G "Unix Makefiles" \ -DYUZU_USE_EXTERNAL_FFMPEG=ON \ -DYUZU_USE_CPM=ON \ "${EXTRA_CMAKE_FLAGS[@]}" || exit -cmake --build build -t yuzu-cmd_pkg -- -j8 +cmake --build build -t yuzu-cmd_pkg -- -j$NPROC diff --git a/src/core/hle/service/services.cpp b/src/core/hle/service/services.cpp index 636f54ad49..7d9372e694 100644 --- a/src/core/hle/service/services.cpp +++ b/src/core/hle/service/services.cpp @@ -73,6 +73,13 @@ Services::Services(std::shared_ptr& sm, Core::System& system system.GetFileSystemController().CreateFactories(*system.GetFilesystem(), false); +#ifdef __OPENORBIS__ + // PS4 requires us to run this on a single thread so we don't immediately die + bool const run_on_host = false; +#else + bool const run_on_host = true; +#endif + // Just a quick C++ lesson // Capturing lambdas will silently create new variables for the objects referenced via = // and create a `auto&` sorts of for `&`; with all your usual reference shenanigans. @@ -92,9 +99,12 @@ Services::Services(std::shared_ptr& sm, Core::System& system {"Loader", &LDR::LoopProcess}, {"nvservices", &Nvidia::LoopProcess}, {"bsdsocket", &Sockets::LoopProcess}, - }) - kernel.RunOnHostCoreProcess(std::string(e.first), [&system, f = e.second] { f(system); }).detach(); - kernel.RunOnHostCoreProcess("vi", [&, token] { VI::LoopProcess(system, token); }).detach(); + }) { + if (run_on_host) kernel.RunOnHostCoreProcess("vi", [&, token] { VI::LoopProcess(system, token); }).detach(); + else kernel.RunOnGuestCoreProcess(std::string(e.first), [&system, f = e.second] { f(system); }); + } + if (run_on_host) kernel.RunOnHostCoreProcess("vi", [&, token] { VI::LoopProcess(system, token); }).detach(); + else kernel.RunOnGuestCoreProcess("vi", [&, token] { VI::LoopProcess(system, token); }); // Avoid cold clones of lambdas -- succintly for (auto const& e : std::vector>{ {"sm", &SM::LoopProcess},