From 8593e6f1e6ec7bcab52b62eb0437a2bcbd1205a8 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 23 Jun 2021 02:43:07 -0400 Subject: [PATCH 1/3] externals: Update fmt to 8.0.0 Keeps us up to date with the latest major release. Also allows compilers that support it to perform compile-time format string checking. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 97afaf1a91..60ec58edaa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -172,7 +172,7 @@ macro(yuzu_find_packages) set(REQUIRED_LIBS # Cmake Pkg Prefix Version Conan Pkg "Catch2 2.13 catch2/2.13.0" - "fmt 7.1 fmt/7.1.2" + "fmt 8.0 fmt/8.0.0" "lz4 1.8 lz4/1.9.2" "nlohmann_json 3.8 nlohmann_json/3.8.0" "ZLIB 1.2 zlib/1.2.11" From c3fe0717235eae5fffc62b16302d616d4459071d Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 23 Jun 2021 09:31:59 -0400 Subject: [PATCH 2/3] externals: Update dynarmic to allow fmt compilation to succeed --- externals/dynarmic | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/externals/dynarmic b/externals/dynarmic index c6125082ea..7946868af4 160000 --- a/externals/dynarmic +++ b/externals/dynarmic @@ -1 +1 @@ -Subproject commit c6125082ea992c245edab26b6f86e7b904b86eec +Subproject commit 7946868af49d403fe54c92d2d60ef986513d1fec From d0b1f2bd05a2fcadbb4c148be2105e337dd986e8 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 23 Jun 2021 09:59:56 -0400 Subject: [PATCH 3/3] General: Resolve fmt specifiers to adhere to 8.0.0 API where applicable Also removes some deprecated API usages. --- src/common/hex_util.h | 3 ++- src/core/crypto/key_manager.cpp | 2 +- src/core/file_sys/registered_cache.cpp | 13 ++++++++----- src/core/frontend/input.h | 1 + src/core/hle/service/service.cpp | 6 +++--- .../renderer_opengl/gl_arb_decompiler.cpp | 2 +- .../renderer_opengl/gl_shader_decompiler.cpp | 2 +- src/yuzu/about_dialog.cpp | 3 ++- src/yuzu/main.cpp | 6 ++++-- 9 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/common/hex_util.h b/src/common/hex_util.h index a8d414fb8e..f5f9e45077 100644 --- a/src/common/hex_util.h +++ b/src/common/hex_util.h @@ -53,8 +53,9 @@ template std::string out; out.reserve(std::size(data) * pad_width); + const auto format_str = fmt::runtime(upper ? "{:02X}" : "{:02x}"); for (const u8 c : data) { - out += fmt::format(upper ? "{:02X}" : "{:02x}", c); + out += fmt::format(format_str, c); } return out; diff --git a/src/core/crypto/key_manager.cpp b/src/core/crypto/key_manager.cpp index fb451a4230..a98daed898 100644 --- a/src/core/crypto/key_manager.cpp +++ b/src/core/crypto/key_manager.cpp @@ -835,7 +835,7 @@ void KeyManager::SetKey(S128KeyType id, Key128 key, u64 field1, u64 field2) { "key_area_key_ocean_{:02X}", "key_area_key_system_{:02X}", }; - WriteKeyToFile(category, fmt::format(kak_names.at(field2), field1), key); + WriteKeyToFile(category, fmt::format(fmt::runtime(kak_names.at(field2)), field1), key); } else if (id == S128KeyType::Master) { WriteKeyToFile(category, fmt::format("master_key_{:02X}", field1), key); } else if (id == S128KeyType::Package1) { diff --git a/src/core/file_sys/registered_cache.cpp b/src/core/file_sys/registered_cache.cpp index 066c6789aa..7a646b5f1c 100644 --- a/src/core/file_sys/registered_cache.cpp +++ b/src/core/file_sys/registered_cache.cpp @@ -58,14 +58,17 @@ static bool FollowsNcaIdFormat(std::string_view name) { static std::string GetRelativePathFromNcaID(const std::array& nca_id, bool second_hex_upper, bool within_two_digit, bool cnmt_suffix) { - if (!within_two_digit) - return fmt::format(cnmt_suffix ? "{}.cnmt.nca" : "/{}.nca", - Common::HexToString(nca_id, second_hex_upper)); + if (!within_two_digit) { + const auto format_str = fmt::runtime(cnmt_suffix ? "{}.cnmt.nca" : "/{}.nca"); + return fmt::format(format_str, Common::HexToString(nca_id, second_hex_upper)); + } Core::Crypto::SHA256Hash hash{}; mbedtls_sha256_ret(nca_id.data(), nca_id.size(), hash.data(), 0); - return fmt::format(cnmt_suffix ? "/000000{:02X}/{}.cnmt.nca" : "/000000{:02X}/{}.nca", hash[0], - Common::HexToString(nca_id, second_hex_upper)); + + const auto format_str = + fmt::runtime(cnmt_suffix ? "/000000{:02X}/{}.cnmt.nca" : "/000000{:02X}/{}.nca"); + return fmt::format(format_str, hash[0], Common::HexToString(nca_id, second_hex_upper)); } static std::string GetCNMTName(TitleType type, u64 title_id) { diff --git a/src/core/frontend/input.h b/src/core/frontend/input.h index 7a047803ee..f1747c5b23 100644 --- a/src/core/frontend/input.h +++ b/src/core/frontend/input.h @@ -4,6 +4,7 @@ #pragma once +#include #include #include #include diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp index 4e1541630b..663b83cd37 100644 --- a/src/core/hle/service/service.cpp +++ b/src/core/hle/service/service.cpp @@ -149,10 +149,10 @@ void ServiceFrameworkBase::ReportUnimplementedFunction(Kernel::HLERequestContext std::string function_name = info == nullptr ? fmt::format("{}", ctx.GetCommand()) : info->name; fmt::memory_buffer buf; - fmt::format_to(buf, "function '{}': port='{}' cmd_buf={{[0]=0x{:X}", function_name, - service_name, cmd_buf[0]); + fmt::format_to(std::back_inserter(buf), "function '{}': port='{}' cmd_buf={{[0]=0x{:X}", + function_name, service_name, cmd_buf[0]); for (int i = 1; i <= 8; ++i) { - fmt::format_to(buf, ", [{}]=0x{:X}", i, cmd_buf[i]); + fmt::format_to(std::back_inserter(buf), ", [{}]=0x{:X}", i, cmd_buf[i]); } buf.push_back('}'); diff --git a/src/video_core/renderer_opengl/gl_arb_decompiler.cpp b/src/video_core/renderer_opengl/gl_arb_decompiler.cpp index 3e4d88c302..e8d8d2aa55 100644 --- a/src/video_core/renderer_opengl/gl_arb_decompiler.cpp +++ b/src/video_core/renderer_opengl/gl_arb_decompiler.cpp @@ -454,7 +454,7 @@ private: template void AddExpression(std::string_view text, Args&&... args) { - shader_source += fmt::format(text, std::forward(args)...); + shader_source += fmt::format(fmt::runtime(text), std::forward(args)...); } template diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp index ac78d344ca..9c28498e85 100644 --- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp +++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp @@ -96,7 +96,7 @@ public: // etc). template void AddLine(std::string_view text, Args&&... args) { - AddExpression(fmt::format(text, std::forward(args)...)); + AddExpression(fmt::format(fmt::runtime(text), std::forward(args)...)); AddNewLine(); } diff --git a/src/yuzu/about_dialog.cpp b/src/yuzu/about_dialog.cpp index a2e0e6962f..6b0155a788 100644 --- a/src/yuzu/about_dialog.cpp +++ b/src/yuzu/about_dialog.cpp @@ -14,7 +14,8 @@ AboutDialog::AboutDialog(QWidget* parent) : QDialog(parent), ui(new Ui::AboutDia const auto build_id = std::string(Common::g_build_id); const auto yuzu_build = fmt::format("yuzu Development Build | {}-{}", branch_name, description); - const auto override_build = fmt::format(std::string(Common::g_title_bar_format_idle), build_id); + const auto override_build = + fmt::format(fmt::runtime(std::string(Common::g_title_bar_format_idle)), build_id); const auto yuzu_build_version = override_build.empty() ? yuzu_build : override_build; ui->setupUi(this); diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 75ab5ef442..6f5b2f6d6c 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -236,7 +236,8 @@ GMainWindow::GMainWindow() const auto build_id = std::string(Common::g_build_id); const auto yuzu_build = fmt::format("yuzu Development Build | {}-{}", branch_name, description); - const auto override_build = fmt::format(std::string(Common::g_title_bar_format_idle), build_id); + const auto override_build = + fmt::format(fmt::runtime(std::string(Common::g_title_bar_format_idle)), build_id); const auto yuzu_build_version = override_build.empty() ? yuzu_build : override_build; LOG_INFO(Frontend, "yuzu Version: {}", yuzu_build_version); @@ -2858,7 +2859,8 @@ void GMainWindow::UpdateWindowTitle(const std::string& title_name, const auto build_id = std::string(Common::g_build_id); const auto yuzu_title = fmt::format("yuzu | {}-{}", branch_name, description); - const auto override_title = fmt::format(std::string(Common::g_title_bar_format_idle), build_id); + const auto override_title = + fmt::format(fmt::runtime(std::string(Common::g_title_bar_format_idle)), build_id); const auto window_title = override_title.empty() ? yuzu_title : override_title; if (title_name.empty()) {