diff --git a/.patch/httplib/0002-fix-zstd.patch b/.patch/httplib/0002-fix-zstd.patch new file mode 100644 index 0000000000..f54485ea53 --- /dev/null +++ b/.patch/httplib/0002-fix-zstd.patch @@ -0,0 +1,89 @@ +From 509be32bbfa6eb95014860f7c9ea6d45c8ddaa56 Mon Sep 17 00:00:00 2001 +From: crueter +Date: Sun, 8 Mar 2026 15:11:12 -0400 +Subject: [PATCH] [cmake] Simplify zstd find logic, and support pre-existing + zstd target + +Some deduplication work on the zstd required/if-available logic. Also +adds support for pre-existing `zstd::libzstd` which is useful for +projects that bundle their own zstd in a way that doesn't get caught by +`CONFIG` + +Signed-off-by: crueter +--- + CMakeLists.txt | 46 ++++++++++++++++++++++++++-------------------- + 1 file changed, 26 insertions(+), 20 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 1874e36be0..8d31198006 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -241,28 +241,34 @@ endif() + # NOTE: + # zstd < 1.5.6 does not provide the CMake imported target `zstd::libzstd`. + # Older versions must be consumed via their pkg-config file. +-if(HTTPLIB_REQUIRE_ZSTD) +- find_package(zstd 1.5.6 CONFIG) +- if(NOT zstd_FOUND) +- find_package(PkgConfig REQUIRED) +- pkg_check_modules(zstd REQUIRED IMPORTED_TARGET libzstd) +- add_library(zstd::libzstd ALIAS PkgConfig::zstd) +- endif() +- set(HTTPLIB_IS_USING_ZSTD TRUE) +-elseif(HTTPLIB_USE_ZSTD_IF_AVAILABLE) +- find_package(zstd 1.5.6 CONFIG QUIET) +- if(NOT zstd_FOUND) +- find_package(PkgConfig QUIET) +- if(PKG_CONFIG_FOUND) +- pkg_check_modules(zstd QUIET IMPORTED_TARGET libzstd) +- +- if(TARGET PkgConfig::zstd) ++if (HTTPLIB_REQUIRE_ZSTD) ++ set(HTTPLIB_ZSTD_REQUESTED ON) ++ set(HTTPLIB_ZSTD_REQUIRED REQUIRED) ++elseif (HTTPLIB_USE_ZSTD_IF_AVAILABLE) ++ set(HTTPLIB_ZSTD_REQUESTED ON) ++ set(HTTPLIB_ZSTD_REQUIRED QUIET) ++endif() ++ ++if (HTTPLIB_ZSTD_REQUESTED) ++ if (TARGET zstd::libzstd) ++ set(HTTPLIB_IS_USING_ZSTD TRUE) ++ else() ++ find_package(zstd 1.5.6 CONFIG QUIET) ++ ++ if (NOT zstd_FOUND) ++ find_package(PkgConfig ${HTTPLIB_ZSTD_REQUIRED}) ++ pkg_check_modules(zstd ${HTTPLIB_ZSTD_REQUIRED} IMPORTED_TARGET libzstd) ++ ++ if (TARGET PkgConfig::zstd) + add_library(zstd::libzstd ALIAS PkgConfig::zstd) + endif() + endif() ++ ++ # This will always be true if zstd is required. ++ # If zstd *isn't* found when zstd is set to required, ++ # CMake will error out earlier in this block. ++ set(HTTPLIB_IS_USING_ZSTD ${zstd_FOUND}) + endif() +- # Both find_package and PkgConf set a XXX_FOUND var +- set(HTTPLIB_IS_USING_ZSTD ${zstd_FOUND}) + endif() + + # Used for default, common dirs that the end-user can change (if needed) +@@ -317,13 +323,13 @@ if(HTTPLIB_COMPILE) + $ + $ + ) +- ++ + # Add C++20 module support if requested + # Include from separate file to prevent parse errors on older CMake versions + if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.28") + include(cmake/modules.cmake) + endif() +- ++ + set_target_properties(${PROJECT_NAME} + PROPERTIES + VERSION ${${PROJECT_NAME}_VERSION} diff --git a/cpmfile.json b/cpmfile.json index 774f160360..c938e67e88 100644 --- a/cpmfile.json +++ b/cpmfile.json @@ -46,9 +46,9 @@ "package": "ZLIB", "repo": "madler/zlib", "tag": "v%VERSION%", - "hash": "06eaa3a1eaaeb31f461a2283b03a91ed8eb2406e62cd97ea1c69836324909edeecd93edd03ff0bf593d9dde223e3376149134c5b1fe2e8688c258cadf8cd60ff", + "hash": "16fea4df307a68cf0035858abe2fd550250618a97590e202037acd18a666f57afc10f8836cbbd472d54a0e76539d0e558cb26f059d53de52ff90634bbf4f47d4", "version": "1.2", - "git_version": "1.3.1.2", + "git_version": "1.3.2", "options": [ "ZLIB_BUILD_SHARED OFF", "ZLIB_INSTALL OFF" @@ -98,9 +98,9 @@ "package": "VVL", "repo": "KhronosGroup/Vulkan-ValidationLayers", "tag": "vulkan-sdk-%VERSION%", - "git_version": "1.4.335.0", + "git_version": "1.4.341.0", "artifact": "android-binaries-%VERSION%.zip", - "hash": "48167c4a17736301bd08f9290f41830443e1f18cce8ad867fc6f289b49e18b40e93c9850b377951af82f51b5b6d7313aa6a884fc5df79f5ce3df82696c1c1244" + "hash": "8812ae84cbe49e6a3418ade9c458d3be6d74a3dffd319d4502007b564d580998056e8190414368ec11b27bc83993c7a0dad713c31bcc3d9553b51243efee3753" }, "quazip": { "package": "QuaZip-Qt6", diff --git a/externals/cpmfile.json b/externals/cpmfile.json index 9644647638..de024fd40e 100644 --- a/externals/cpmfile.json +++ b/externals/cpmfile.json @@ -9,7 +9,7 @@ }, "sirit": { "repo": "eden-emulator/sirit", - "git_version": "1.0.3", + "git_version": "1.0.4", "tag": "v%VERSION%", "artifact": "sirit-source-%VERSION%.tar.zst", "hash_suffix": "sha512sum", @@ -28,11 +28,12 @@ "httplib": { "repo": "yhirose/cpp-httplib", "tag": "v%VERSION%", - "hash": "a229e24cca4afe78e5c0aa2e482f15108ac34101fd8dbd927365f15e8c37dec4de38c5277d635017d692a5b320e1b929f8bfcc076f52b8e4dcdab8fe53bfdf2e", - "git_version": "0.30.1", + "hash": "5efa8140aadffe105dcf39935b732476e95755f6c7473ada3d0b64df2bc02c557633ae3948a25b45e1cf67e89a3ff6329fb30362e4ac033b9a1d1e453aa2eded", + "git_version": "0.37.0", "find_args": "MODULE GLOBAL", "patches": [ - "0001-mingw.patch" + "0001-mingw.patch", + "0002-fix-zstd.patch" ], "options": [ "HTTPLIB_REQUIRE_OPENSSL ON" @@ -55,8 +56,8 @@ "package": "xbyak", "repo": "herumi/xbyak", "tag": "v%VERSION%", - "hash": "ac333d7bea1d61865bebebb116201a58db431946aa2f11aa042ef5795c390ff30af4d6c90ed3b3d24443a1d430703b08f14fc13b2fa405c155a241456ed78a47", - "git_version": "7.33.2" + "hash": "b6475276b2faaeb315734ea8f4f8bd87ededcee768961b39679bee547e7f3e98884d8b7851e176d861dab30a80a76e6ea302f8c111483607dde969b4797ea95a", + "git_version": "7.35.2" }, "oaknut": { "repo": "eden-emulator/oaknut", @@ -146,9 +147,9 @@ "package": "Catch2", "repo": "catchorg/Catch2", "tag": "v%VERSION%", - "hash": "acb3f463a7404d6a3bce52e474075cdadf9bb241d93feaf147c182d756e5a2f8bd412f4658ca186d15ab8fed36fc587d79ec311f55642d8e4ded16df9e213656", + "hash": "7eea385d79d88a5690cde131fe7ccda97d5c54ea09d6f515000d7bf07c828809d61c1ac99912c1ee507cf933f61c1c47ecdcc45df7850ffa82714034b0fccf35", "version": "3.0.1", - "git_version": "3.12.0", + "git_version": "3.13.0", "patches": [ "0001-solaris-isnan-fix.patch" ] @@ -256,15 +257,15 @@ "repo": "KhronosGroup/Vulkan-Headers", "package": "VulkanHeaders", "version": "1.4.317", - "hash": "26e0ad8fa34ab65a91ca62ddc54cc4410d209a94f64f2817dcdb8061dc621539a4262eab6387e9b9aa421db3dbf2cf8e2a4b041b696d0d03746bae1f25191272", - "git_version": "1.4.342", + "hash": "d2846ea228415772645eea4b52a9efd33e6a563043dd3de059e798be6391a8f0ca089f455ae420ff22574939ed0f48ed7c6ff3d5a9987d5231dbf3b3f89b484b", + "git_version": "1.4.345", "tag": "v%VERSION%" }, "vulkan-utility-libraries": { "repo": "KhronosGroup/Vulkan-Utility-Libraries", "package": "VulkanUtilityLibraries", - "hash": "8147370f964fd82c315d6bb89adeda30186098427bf3efaa641d36282d42a263f31e96e4586bfd7ae0410ff015379c19aa4512ba160630444d3d8553afd1ec14", - "git_version": "1.4.342", + "hash": "114f6b237a6dcba923ccc576befb5dea3f1c9b3a30de7dc741f234a831d1c2d52d8a224afb37dd57dffca67ac0df461eaaab6a5ab5e503b393f91c166680c3e1", + "git_version": "1.4.345", "tag": "v%VERSION%" }, "frozen": { diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 21affffb6b..dfb311b327 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,5 +1,6 @@ # SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project # SPDX-License-Identifier: GPL-3.0-or-later + # SPDX-FileCopyrightText: 2018 yuzu Emulator Project # SPDX-License-Identifier: GPL-2.0-or-later diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 08d6e73688..7566372b51 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -1220,7 +1220,7 @@ target_link_libraries(core PRIVATE RenderDoc::API ZLIB::ZLIB) -target_link_libraries(core PRIVATE httplib::httplib) +target_link_libraries(core PUBLIC httplib::httplib zstd::zstd) if (ENABLE_WEB_SERVICE) target_compile_definitions(core PUBLIC ENABLE_WEB_SERVICE) 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 38cec7c750..f037919eb0 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/a32_emit_x64.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/a32_emit_x64.cpp @@ -687,7 +687,7 @@ void A32EmitX64::EmitA32BXWritePC(A32EmitContext& ctx, IR::Inst* inst) { auto args = ctx.reg_alloc.GetArgumentInfo(inst); auto& arg = args[0]; - const u32 upper_without_t = (ctx.EndLocation().SetSingleStepping(false).UniqueHash() >> 32) & 0xFFFFFFFE; + const u64 upper_without_t = (ctx.EndLocation().SetSingleStepping(false).UniqueHash() >> 32) & 0xFFFFFFFE; // Pseudocode: // if (new_pc & 1) { diff --git a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_data_processing.cpp b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_data_processing.cpp index 108a341a71..f2af4e5b80 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_data_processing.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_data_processing.cpp @@ -947,7 +947,7 @@ static void EmitAdd(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst, size_t const Xbyak::Reg8 overflow = overflow_inst ? ctx.reg_alloc.ScratchGpr(code).cvt8() : Xbyak::Reg8{-1}; if (args[1].IsImmediate() && args[1].GetType() == IR::Type::U32) { - const u32 op_arg = args[1].GetImmediateU32(); + const u64 op_arg = args[1].GetImmediateU64(); if (carry_in.IsImmediate()) { if (carry_in.GetImmediateU1()) { // In range for a valid LEA materialisation diff --git a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_saturation.cpp b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_saturation.cpp index 2ba67f5a13..85ee3584eb 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_saturation.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_saturation.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later /* This file is part of the dynarmic project. @@ -135,7 +135,7 @@ void EmitX64::EmitSignedSaturation(EmitContext& ctx, IR::Inst* inst) { const u32 mask = (1u << N) - 1; const u32 positive_saturated_value = (1u << (N - 1)) - 1; - const u32 negative_saturated_value = 1u << (N - 1); + const u64 negative_saturated_value = 1u << (N - 1); const Xbyak::Reg32 result = ctx.reg_alloc.ScratchGpr(code).cvt32(); const Xbyak::Reg32 reg_a = ctx.reg_alloc.UseGpr(code, args[0]).cvt32(); diff --git a/tools/cpm/package/update.sh b/tools/cpm/package/update.sh index be6a0fbbef..92f4f423a9 100755 --- a/tools/cpm/package/update.sh +++ b/tools/cpm/package/update.sh @@ -19,7 +19,8 @@ Check a specific package or packages for updates. Options: -n, --dry-run Do not update the package if it has an update available - -a, --all Operate on all packages in this project. + -a, --all Operate on all packages in this project. + -c, --commit Automatically generate a commit message EOF @@ -38,6 +39,7 @@ while :; do case "$char" in a) ALL=1 ;; n) UPDATE=false ;; + c) COMMIT=true ;; h) usage ;; *) die "Invalid option -$char" ;; esac @@ -46,6 +48,7 @@ while :; do --dry-run) UPDATE=false ;; --all) ALL=1 ;; --help) usage ;; + --commit) COMMIT=true ;; "$0") break ;; "") break ;; *) packages="$packages $1" ;; @@ -56,6 +59,7 @@ done [ "$ALL" != 1 ] || packages="${LIBS:-$packages}" : "${UPDATE:=true}" +: "${COMMIT:=false}" [ -n "$packages" ] || usage for pkg in $packages; do @@ -93,6 +97,9 @@ for pkg in $packages; do filter_out yotta # mbedtls + # ???????????????????????????????? + filter_out vksc + # ignore betas/alphas (remove if needed) filter_out alpha filter_out beta @@ -119,19 +126,35 @@ for pkg in $packages; do else NEW_GIT_VERSION=$(echo "$LATEST" | sed "s/$VERSION_PREFIX//g") fi + else + NEW_GIT_VERSION="$LATEST" fi + _commit="$_commit +* $PACKAGE: $GIT_VERSION -> $NEW_GIT_VERSION" + echo "-- * Version $LATEST available, current is $TAG" if [ "$UPDATE" = "true" ]; then if [ "$HAS_REPLACE" = "true" ]; then NEW_JSON=$(echo "$JSON" | jq ".git_version = \"$NEW_GIT_VERSION\"") else - NEW_JSON=$(echo "$JSON" | jq ".tag = \"$LATEST\"") + NEW_JSON=$(echo "$JSON" | jq ".tag = \"$NEW_GIT_VERSION\"") fi "$SCRIPTS"/util/replace.sh "$PACKAGE" "$NEW_JSON" - QUIET=true "$SCRIPTS"/util/fix-hash.sh + echo "-- * -- Updating hash" + + export UPDATE + QUIET=true "$SCRIPTS"/util/fix-hash.sh "$PACKAGE" fi done + +if [ "$UPDATE" = "true" ] && [ "$COMMIT" = "true" ] && [ -n "$_commit" ]; then + for file in $CPMFILES; do + git add "$file" + done + git commit -m "Update dependencies +$_commit" +fi diff --git a/tools/cpm/package/util/fix-hash.sh b/tools/cpm/package/util/fix-hash.sh index 07b9d266dd..3a69f0aaa7 100755 --- a/tools/cpm/package/util/fix-hash.sh +++ b/tools/cpm/package/util/fix-hash.sh @@ -3,9 +3,15 @@ # SPDX-FileCopyrightText: Copyright 2026 crueter # SPDX-License-Identifier: LGPL-3.0-or-later +# shellcheck disable=SC1091 + : "${PACKAGE:=$1}" -# shellcheck disable=SC1091 +# re-read json files +# shellcheck disable=SC2016 +PACKAGES=$(echo "$CPMFILES" | xargs jq -s 'reduce .[] as $item ({}; . * $item)') +export PACKAGES + . "$SCRIPTS"/vars.sh [ "$CI" = null ] || exit 0