[breakpad] enable Solaris crash dumps
Some checks failed
eden-license / license-header (pull_request) Failing after 30s

Signed-off-by: lizzie <lizzie@eden-emu.dev>
This commit is contained in:
lizzie 2025-08-30 07:01:01 +00:00
parent 03b4f57364
commit 7e078f717d
Signed by: Lizzie
GPG key ID: 00287378CADCAB13
3 changed files with 10 additions and 8 deletions

View file

@ -107,7 +107,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 LINUX OR PLATFORM_SUN" OFF)
option(YUZU_CHECK_SUBMODULES "Check if submodules are present" ${EXT_DEFAULT}) option(YUZU_CHECK_SUBMODULES "Check if submodules are present" ${EXT_DEFAULT})
@ -324,7 +324,7 @@ if (YUZU_ROOM)
endif() endif()
# Build/optimization presets # Build/optimization presets
if (PLATFORM_LINUX) if (PLATFORM_LINUX OR PLATFORM_FREEBSD OR PLATFORM_SUN OR PLATFORM_FREEBSD)
if (ARCHITECTURE_x86_64) if (ARCHITECTURE_x86_64)
set(YUZU_BUILD_PRESET "custom" CACHE STRING "Build preset to use. One of: custom, generic, v3, zen2, zen4, native") set(YUZU_BUILD_PRESET "custom" CACHE STRING "Build preset to use. One of: custom, generic, v3, zen2, zen4, native")
if (${YUZU_BUILD_PRESET} STREQUAL "generic") if (${YUZU_BUILD_PRESET} STREQUAL "generic")
@ -406,7 +406,7 @@ if (YUZU_USE_CPM)
if (NOT MSVC) if (NOT MSVC)
# boost sucks # boost sucks
if (NOT PLATFORM_LINUX AND NOT ANDROID) if (PLATFORM_SUN OR PLATFORM_OPENBSD)
target_compile_definitions(boost_container INTERFACE BOOST_HAS_PTHREADS) target_compile_definitions(boost_container INTERFACE BOOST_HAS_PTHREADS)
endif() endif()
@ -707,7 +707,7 @@ if(ENABLE_QT)
set_target_properties(Qt6::Platform PROPERTIES INTERFACE_COMPILE_FEATURES "") set_target_properties(Qt6::Platform PROPERTIES INTERFACE_COMPILE_FEATURES "")
endif() endif()
if (WIN32 AND YUZU_CRASH_DUMPS) if (YUZU_CRASH_DUMPS)
set(BREAKPAD_VER "breakpad-c89f9dd") set(BREAKPAD_VER "breakpad-c89f9dd")
download_bundled_external("breakpad/" ${BREAKPAD_VER} "breakpad-win" BREAKPAD_PREFIX "c89f9dd") download_bundled_external("breakpad/" ${BREAKPAD_VER} "breakpad-win" BREAKPAD_PREFIX "c89f9dd")

View file

@ -251,9 +251,7 @@ if (YUZU_CRASH_DUMPS)
breakpad.cpp breakpad.cpp
breakpad.h breakpad.h
) )
target_link_libraries(yuzu PRIVATE libbreakpad_client) target_link_libraries(yuzu PRIVATE libbreakpad_client)
target_compile_definitions(yuzu PRIVATE YUZU_CRASH_DUMPS)
endif() endif()
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")

View file

@ -8,6 +8,8 @@
#include <client/windows/handler/exception_handler.h> #include <client/windows/handler/exception_handler.h>
#elif defined(__linux__) #elif defined(__linux__)
#include <client/linux/handler/exception_handler.h> #include <client/linux/handler/exception_handler.h>
#elif defined(__sun__)
#include <client/solaris/handler/exception_handler.h>
#else #else
#error Minidump creation not supported on this platform #error Minidump creation not supported on this platform
#endif #endif
@ -49,7 +51,7 @@ static void PruneDumpDirectory(const std::filesystem::path& dump_path) {
} }
} }
#if defined(__linux__) #ifdef __linux__
[[noreturn]] bool DumpCallback(const google_breakpad::MinidumpDescriptor& descriptor, void* context, [[noreturn]] bool DumpCallback(const google_breakpad::MinidumpDescriptor& descriptor, void* context,
bool succeeded) { bool succeeded) {
// Prevent time- and space-consuming core dumps from being generated, as we have // Prevent time- and space-consuming core dumps from being generated, as we have
@ -63,7 +65,7 @@ void InstallCrashHandler() {
const auto dump_path = GetEdenPath(Common::FS::EdenPath::CrashDumpsDir); const auto dump_path = GetEdenPath(Common::FS::EdenPath::CrashDumpsDir);
PruneDumpDirectory(dump_path); PruneDumpDirectory(dump_path);
#if defined(_WIN32) #ifdef _WIN32
// TODO: If we switch to MinGW builds for Windows, this needs to be wrapped in a C API. // TODO: If we switch to MinGW builds for Windows, this needs to be wrapped in a C API.
static google_breakpad::ExceptionHandler eh{dump_path, nullptr, nullptr, nullptr, static google_breakpad::ExceptionHandler eh{dump_path, nullptr, nullptr, nullptr,
google_breakpad::ExceptionHandler::HANDLER_ALL}; google_breakpad::ExceptionHandler::HANDLER_ALL};
@ -71,6 +73,8 @@ void InstallCrashHandler() {
static google_breakpad::MinidumpDescriptor descriptor{dump_path}; static google_breakpad::MinidumpDescriptor descriptor{dump_path};
static google_breakpad::ExceptionHandler eh{descriptor, nullptr, DumpCallback, static google_breakpad::ExceptionHandler eh{descriptor, nullptr, DumpCallback,
nullptr, true, -1}; nullptr, true, -1};
#elif defined(__sun__)
static google_breakpad::ExceptionHandler eh{dump_path, nullptr, DumpCallback, nullptr, true};
#endif #endif
} }