diff --git a/.patch/mcl/0001-assert-macro.patch b/.patch/mcl/0001-assert-macro.patch new file mode 100644 index 0000000000..2d7d0dd1b0 --- /dev/null +++ b/.patch/mcl/0001-assert-macro.patch @@ -0,0 +1,55 @@ +diff --git a/include/mcl/assert.hpp b/include/mcl/assert.hpp +index f77dbe7..9ec0b9c 100644 +--- a/include/mcl/assert.hpp ++++ b/include/mcl/assert.hpp +@@ -23,8 +23,11 @@ template + + } // namespace mcl::detail + ++#ifndef UNREACHABLE + #define UNREACHABLE() ASSERT_FALSE("Unreachable code!") ++#endif + ++#ifndef ASSERT + #define ASSERT(expr) \ + [&] { \ + if (std::is_constant_evaluated()) { \ +@@ -37,7 +40,9 @@ template + } \ + } \ + }() ++#endif + ++#ifndef ASSERT_MSG + #define ASSERT_MSG(expr, ...) \ + [&] { \ + if (std::is_constant_evaluated()) { \ +@@ -50,13 +55,24 @@ template + } \ + } \ + }() ++#endif + ++#ifndef ASSERT_FALSE + #define ASSERT_FALSE(...) ::mcl::detail::assert_terminate("false", __VA_ARGS__) ++#endif + + #if defined(NDEBUG) || defined(MCL_IGNORE_ASSERTS) +-# define DEBUG_ASSERT(expr) ASSUME(expr) +-# define DEBUG_ASSERT_MSG(expr, ...) ASSUME(expr) ++# ifndef DEBUG_ASSERT ++# define DEBUG_ASSERT(expr) ASSUME(expr) ++# endif ++# ifndef DEBUG_ASSERT_MSG ++# define DEBUG_ASSERT_MSG(expr, ...) ASSUME(expr) ++# endif + #else +-# define DEBUG_ASSERT(expr) ASSERT(expr) +-# define DEBUG_ASSERT_MSG(expr, ...) ASSERT_MSG(expr, __VA_ARGS__) ++# ifndef DEBUG_ASSERT ++# define DEBUG_ASSERT(expr) ASSERT(expr) ++# endif ++# ifndef DEBUG_ASSERT_MSG ++# define DEBUG_ASSERT_MSG(expr, ...) ASSERT_MSG(expr, __VA_ARGS__) ++# endif + #endif diff --git a/CMakeModules/FindDiscordRPC.cmake b/CMakeModules/FindDiscordRPC.cmake index 44ca9904f4..5ae9f4f999 100644 --- a/CMakeModules/FindDiscordRPC.cmake +++ b/CMakeModules/FindDiscordRPC.cmake @@ -1,27 +1,33 @@ +# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +# SPDX-License-Identifier: GPL-3.0-or-later + # SPDX-FileCopyrightText: 2022 Alexandre Bouvier # # SPDX-License-Identifier: GPL-3.0-or-later -find_path(DiscordRPC_INCLUDE_DIR discord_rpc.h) +find_package(DiscordRPC CONFIG QUIET) -find_library(DiscordRPC_LIBRARY discord-rpc) +if (NOT DiscordRPC_FOUND) + find_path(DiscordRPC_INCLUDE_DIR discord_rpc.h) + find_library(DiscordRPC_LIBRARY discord-rpc) -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(DiscordRPC - REQUIRED_VARS - DiscordRPC_LIBRARY + include(FindPackageHandleStandardArgs) + find_package_handle_standard_args(DiscordRPC + REQUIRED_VARS + DiscordRPC_LIBRARY + DiscordRPC_INCLUDE_DIR + ) + + if (DiscordRPC_FOUND AND NOT TARGET DiscordRPC::discord-rpc) + add_library(DiscordRPC::discord-rpc UNKNOWN IMPORTED) + set_target_properties(DiscordRPC::discord-rpc PROPERTIES + IMPORTED_LOCATION "${DiscordRPC_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${DiscordRPC_INCLUDE_DIR}" + ) + endif() + + mark_as_advanced( DiscordRPC_INCLUDE_DIR -) - -if (DiscordRPC_FOUND AND NOT TARGET DiscordRPC::discord-rpc) - add_library(DiscordRPC::discord-rpc UNKNOWN IMPORTED) - set_target_properties(DiscordRPC::discord-rpc PROPERTIES - IMPORTED_LOCATION "${DiscordRPC_LIBRARY}" - INTERFACE_INCLUDE_DIRECTORIES "${DiscordRPC_INCLUDE_DIR}" + DiscordRPC_LIBRARY ) endif() - -mark_as_advanced( - DiscordRPC_INCLUDE_DIR - DiscordRPC_LIBRARY -) diff --git a/src/common/logging/log.h b/src/common/logging/log.h index 7b23b59aab..757cf464d5 100644 --- a/src/common/logging/log.h +++ b/src/common/logging/log.h @@ -40,22 +40,22 @@ void FmtLogMessage(Class log_class, Level log_level, const char* filename, unsig #endif #define LOG_DEBUG(log_class, ...) \ - Common::Log::FmtLogMessage(Common::Log::Class::log_class, Common::Log::Level::Debug, \ + ::Common::Log::FmtLogMessage(::Common::Log::Class::log_class, ::Common::Log::Level::Debug, \ __FILE__, __LINE__, __func__, \ __VA_ARGS__) #define LOG_INFO(log_class, ...) \ - Common::Log::FmtLogMessage(Common::Log::Class::log_class, Common::Log::Level::Info, \ + ::Common::Log::FmtLogMessage(::Common::Log::Class::log_class, ::Common::Log::Level::Info, \ __FILE__, __LINE__, __func__, \ __VA_ARGS__) #define LOG_WARNING(log_class, ...) \ - Common::Log::FmtLogMessage(Common::Log::Class::log_class, Common::Log::Level::Warning, \ + ::Common::Log::FmtLogMessage(::Common::Log::Class::log_class, ::Common::Log::Level::Warning, \ __FILE__, __LINE__, __func__, \ __VA_ARGS__) #define LOG_ERROR(log_class, ...) \ - Common::Log::FmtLogMessage(Common::Log::Class::log_class, Common::Log::Level::Error, \ + ::Common::Log::FmtLogMessage(::Common::Log::Class::log_class, ::Common::Log::Level::Error, \ __FILE__, __LINE__, __func__, \ __VA_ARGS__) #define LOG_CRITICAL(log_class, ...) \ - Common::Log::FmtLogMessage(Common::Log::Class::log_class, Common::Log::Level::Critical, \ + ::Common::Log::FmtLogMessage(::Common::Log::Class::log_class, ::Common::Log::Level::Critical, \ __FILE__, __LINE__, __func__, \ __VA_ARGS__) diff --git a/src/dynarmic/externals/cpmfile.json b/src/dynarmic/externals/cpmfile.json index 099ded57a4..3479b7982b 100644 --- a/src/dynarmic/externals/cpmfile.json +++ b/src/dynarmic/externals/cpmfile.json @@ -13,6 +13,9 @@ "hash": "f943bac39c1879986decad7a442ff4288eaeca4a2907684c7914e115a55ecc43c2782ded85c0835763fe04e40d5c82220ce864423e489e648e408a84f54dc4f3", "options": [ "MCL_INSTALL OFF" + ], + "patches": [ + "0001-assert-macro.patch" ] }, "zycore": { diff --git a/src/dynarmic/src/dynarmic/backend/arm64/emit_arm64.cpp b/src/dynarmic/src/dynarmic/backend/arm64/emit_arm64.cpp index 1ecb5424da..e472164391 100644 --- a/src/dynarmic/src/dynarmic/backend/arm64/emit_arm64.cpp +++ b/src/dynarmic/src/dynarmic/backend/arm64/emit_arm64.cpp @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + /* This file is part of the dynarmic project. * Copyright (c) 2022 MerryMage * SPDX-License-Identifier: 0BSD @@ -238,7 +241,7 @@ EmittedBlockInfo EmitArm64(oaknut::CodeGenerator& code, IR::Block block, const E #undef A32OPC #undef A64OPC default: - ASSERT_FALSE("Invalid opcode: {}", inst->GetOpcode()); + ASSERT_FALSE("Invalid opcode: {:x}", std::size_t(inst->GetOpcode())); break; } diff --git a/src/dynarmic/src/dynarmic/backend/riscv64/emit_riscv64.cpp b/src/dynarmic/src/dynarmic/backend/riscv64/emit_riscv64.cpp index f9302821d2..c5cd7a6cff 100644 --- a/src/dynarmic/src/dynarmic/backend/riscv64/emit_riscv64.cpp +++ b/src/dynarmic/src/dynarmic/backend/riscv64/emit_riscv64.cpp @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + /* This file is part of the dynarmic project. * Copyright (c) 2024 MerryMage * SPDX-License-Identifier: 0BSD @@ -140,7 +143,7 @@ EmittedBlockInfo EmitRV64(biscuit::Assembler& as, IR::Block block, const EmitCon #undef A32OPC #undef A64OPC default: - ASSERT_FALSE("Invalid opcode: {}", inst->GetOpcode()); + ASSERT_FALSE("Invalid opcode: {:x}", std::size_t(inst->GetOpcode())); break; } } diff --git a/src/dynarmic/src/dynarmic/backend/x64/a32_emit_x64.cpp b/src/dynarmic/src/dynarmic/backend/x64/a32_emit_x64.cpp index fb306336cf..e1f4f55f86 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/a32_emit_x64.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/a32_emit_x64.cpp @@ -145,7 +145,7 @@ A32EmitX64::BlockDescriptor A32EmitX64::Emit(IR::Block& block) { #undef OPCODE #undef A32OPC #undef A64OPC - default: [[unlikely]] ASSERT_FALSE("Invalid opcode: {}", inst->GetOpcode()); + default: [[unlikely]] ASSERT_FALSE("Invalid opcode: {:x}", std::size_t(inst->GetOpcode())); } reg_alloc.EndOfAllocScope(); func(reg_alloc); diff --git a/src/dynarmic/src/dynarmic/backend/x64/a64_emit_x64.cpp b/src/dynarmic/src/dynarmic/backend/x64/a64_emit_x64.cpp index 1e673338a8..b5da18701c 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/a64_emit_x64.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/a64_emit_x64.cpp @@ -130,7 +130,7 @@ A64EmitX64::BlockDescriptor A64EmitX64::Emit(IR::Block& block) noexcept { #undef A32OPC #undef A64OPC default: [[unlikely]] { - ASSERT_MSG(false, "Invalid opcode: {}", opcode); + ASSERT_MSG(false, "Invalid opcode: {:x}", std::size_t(opcode)); goto finish_this_inst; } } diff --git a/src/dynarmic/src/dynarmic/backend/x64/emit_x64.cpp b/src/dynarmic/src/dynarmic/backend/x64/emit_x64.cpp index 3bc93e6fd5..47cf0a8b5c 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/emit_x64.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/emit_x64.cpp @@ -59,7 +59,7 @@ std::optional EmitX64::GetBasicBlock(IR::LocationDescr } void EmitX64::EmitInvalid(EmitContext&, IR::Inst* inst) { - ASSERT_MSG(false, "Invalid opcode: {}", inst->GetOpcode()); + ASSERT_MSG(false, "Invalid opcode: {:x}", std::size_t(inst->GetOpcode())); } void EmitX64::EmitVoid(EmitContext&, IR::Inst*) { diff --git a/src/dynarmic/src/dynarmic/ir/opcodes.h b/src/dynarmic/src/dynarmic/ir/opcodes.h index a231365fa7..7e41353213 100644 --- a/src/dynarmic/src/dynarmic/ir/opcodes.h +++ b/src/dynarmic/src/dynarmic/ir/opcodes.h @@ -654,11 +654,3 @@ constexpr bool MayGetNZCVFromOp(const Opcode op) noexcept { } } // namespace Dynarmic::IR - -template<> -struct fmt::formatter : fmt::formatter { - template - auto format(Dynarmic::IR::Opcode op, FormatContext& ctx) const { - return formatter::format(Dynarmic::IR::GetNameOf(op), ctx); - } -}; diff --git a/src/qt_common/config/shared_translation.h b/src/qt_common/config/shared_translation.h index a25887bb87..1ac68de3cc 100644 --- a/src/qt_common/config/shared_translation.h +++ b/src/qt_common/config/shared_translation.h @@ -14,6 +14,7 @@ #include #include #include +#include #include "common/common_types.h" #include "common/settings_enums.h" diff --git a/src/qt_common/qt_compat.h b/src/qt_common/qt_compat.h index 447cd2ffb4..8215b9441f 100644 --- a/src/qt_common/qt_compat.h +++ b/src/qt_common/qt_compat.h @@ -3,7 +3,7 @@ #pragma once -#include +#include #if QT_VERSION < QT_VERSION_CHECK(6, 9, 0) #define STATE_CHANGED stateChanged diff --git a/src/qt_common/util/compress.cpp b/src/qt_common/util/compress.cpp index 6f250fcf5b..94dca41151 100644 --- a/src/qt_common/util/compress.cpp +++ b/src/qt_common/util/compress.cpp @@ -82,16 +82,9 @@ bool compressSubDir(QuaZip *zip, if (dir != origDir) { QuaZipFile dirZipFile(zip); std::unique_ptr qzni; - if (options.getDateTime().isNull()) { - qzni = std::make_unique(origDirectory.relativeFilePath(dir) - + QLatin1String("/"), - dir); - } else { - qzni = std::make_unique(origDirectory.relativeFilePath(dir) - + QLatin1String("/"), - dir, - options.getDateTime()); - } + qzni = std::make_unique(origDirectory.relativeFilePath(dir) + + QLatin1String("/"), + dir); if (!dirZipFile.open(QIODevice::WriteOnly, *qzni, nullptr, 0, 0)) { return false; } @@ -156,7 +149,7 @@ bool compressFile(QuaZip *zip, return false; } else { if (!outFile.open(QIODevice::WriteOnly, - QuaZipNewInfo(fileDest, fileName, options.getDateTime()), + QuaZipNewInfo(fileDest, fileName), nullptr, 0, options.getCompressionMethod(), diff --git a/src/qt_common/util/content.cpp b/src/qt_common/util/content.cpp index 62864547ae..ee30d4b22d 100644 --- a/src/qt_common/util/content.cpp +++ b/src/qt_common/util/content.cpp @@ -415,10 +415,8 @@ void ExportDataDir(FrontendCommon::DataManager::DataDir data_dir, QGuiApplication::processEvents(); auto progress_callback = [=](size_t total_size, size_t processed_size) { - QMetaObject::invokeMethod(progress, - &QtProgressDialog::setValue, - static_cast((processed_size * 100) / total_size)); - + QMetaObject::invokeMethod(progress, "setValue", Qt::DirectConnection, + Q_ARG(int, static_cast((processed_size * 100) / total_size))); return !progress->wasCanceled(); }; @@ -501,9 +499,8 @@ void ImportDataDir(FrontendCommon::DataManager::DataDir data_dir, QObject::connect(delete_watcher, &QFutureWatcher::finished, rootObject, [=]() { auto progress_callback = [=](size_t total_size, size_t processed_size) { - QMetaObject::invokeMethod(progress, - &QtProgressDialog::setValue, - static_cast((processed_size * 100) / total_size)); + QMetaObject::invokeMethod(progress, "setValue", Qt::DirectConnection, + Q_ARG(int, static_cast((processed_size * 100) / total_size))); return !progress->wasCanceled(); };