fmt 11 split fmt/core.h and fmt/format.h more strictly. fmt::format,
fmt::print, and related output functions are no longer available through
fmt/core.h and require an explicit fmt/format.h include. Additionally,
the implicit conversion operator from fmt::format_string<Args...> to
fmt::string_view was deprecated, causing -Werror builds to fail.
- Replace #include <fmt/core.h> with <fmt/format.h> in:
- src/common/settings_setting.h
- src/common/settings.cpp
- src/common/time_zone.cpp
- src/citron/startup_checks.cpp
- src/citron/configuration/shared_widget.cpp
- Use format.get() in FmtLogMessage to avoid the deprecated implicit
string_view conversion (src/common/logging.h)
- Fix a layout/ODR violation in Xbyak::CodeGenerator/LabelManager:
In src/video_core/macro.cpp, replace the direct inclusion of
<xbyak/xbyak.h> with "common/x64/xbyak_abi.h". This ensures the custom
container macros (XBYAK_STD_UNORDERED_*) are defined before the Xbyak
headers are parsed, preventing different translation units from
instantiating mismatched template offsets (which led to vmovaps crashes).
- Update dynarmic submodule to c08207dd (latest master which updates
its own external dependencies).
- Update matching dependency pins in dependencies.cmake and their
corresponding submodules in externals/ to maintain ABI compatibility:
- fmt: update to e8244777ee1c32df8233c215ac9ff626b2dd2c38
- Catch2: update to 675f9eaeb191c51b9d2ffb2bb198009533895051
- oaknut: update to 94c726ce0338b054eb8cb5ea91de8fe6c19f4392
- xbyak: update to c506ecd5134122115a981fdd45c2a756f9ce20ac
Call HaltTransitions from OnLoadComplete before starting fade-out and block
fade-out signals during stop so finished does not touch widgets mid-teardown.
- Add download_with_retry() helper with exponential back-off (5s→10s→20s)
replacing bare wget calls throughout the script
- Convert three silent return-0 failure paths in rebuild_ffmpeg_pthread_free
(download failure, extraction failure, zero libs installed) to hard errors;
previously these allowed cmake to be invoked with a -DCITRON_FFMPEG_STATIC_DIR
pointing to a directory that was never created, producing a fatal but
misleading CMake error about a missing RELEASE file
- Gate -DCITRON_FFMPEG_STATIC_DIR in build_common_cmake_args on the
.llvm_static_built sentinel rather than FFMPEG_VERSION being set
- Add .ffmpeg_src_ready sentinel written after clean extraction; Priority 1
source cache reuse now requires this sentinel so partial extractions are
detected and wiped rather than silently reused
- Verify tarball integrity with tar -tjf before extraction
- Tighten MSYS2 path filter in CopyMinGWDeps.cmake from ([/\])msys64([/\])
to require a known system subdirectory (usr|clang64|ucrt64|mingw64|mingw32)
after msys64; previously the broad match silently excluded all Qt DLLs when
CPM_SOURCE_CACHE resided under the default MSYS2 home directory
- Replace sequential git ls-remote loop (up to 11 round-trips) for BOLT tag
discovery with a single call filtered by sort -V
- Replace grep -oP lookbehind patterns for stage sentinel reads with awk -F=
for portability across MSYS2 grep variants
Replace mbedtls entirely with OpenSSL as the single crypto dependency.
All AES-128/256 operations now dispatch through aes_ni.h at runtime:
VAES-512 → VAES-256 → SSE4 → OpenSSL EVP fallback, selected by CPUID
at first call with no global ISA flags required.
The OpenSSL fallback path in Ctr128 fires only on hardware without
AES-NI; on any x86-64 built after 2011 the intrinsic paths are taken
exclusively. All paths produce byte-identical output, verified against
NIST SP 800-38A (CTR) and SP 800-38B (CMAC) test vectors.
Changes:
- aes_ni.h: new four-tier CTR dispatch with CPUID detection via <cpuid.h>;
VAES-512/256 paths for Zen 4 / Sapphire Rapids (~19 GB/s) and
Zen 3+ / Tiger Lake+ (~15 GB/s)
- aes_util.cpp: CipherContext stores raw_key[16] for the OpenSSL fallback
- key_manager.cpp: CMAC → intrinsics, SHA-256 → EVP_Digest, bignum → BN_*
- amiibo_crypto.cpp/h: AES-CTR → intrinsics, HMAC → EVP_MAC
- xts_archive.cpp, registered_cache.cpp, nca.cpp, ro.cpp,
delivery_cache_directory_service.cpp: SHA-256/MD5 → EVP_Digest
- citron_room.cpp: base64 → EVP_EncodeBlock/EVP_DecodeBlock
- verify_user_jwt.cpp: RS256 verification → EVP_DigestVerify*
- web_service CMakeLists: drop cpp-jwt, link OpenSSL::Crypto
- dependencies.cmake: remove mbedtls and cpp-jwt CPM blocks
- externals CMakeLists: remove add_subdirectory(mbedtls)
- openssl_build.cmake: require NASM; remove no-asm