diff --git a/contrib/guix/manifest.scm b/contrib/guix/manifest.scm index 9cadd410537..927aa30f077 100644 --- a/contrib/guix/manifest.scm +++ b/contrib/guix/manifest.scm @@ -22,17 +22,14 @@ ((gnu packages python-xyz) #:select (python-pydantic-2)) ((gnu packages tls) #:select (openssl)) ((gnu packages version-control) #:select (git-minimal)) - (guix build-system cmake) - (guix build-system gnu) (guix build-system python) (guix build-system pyproject) (guix build-system trivial) - (guix download) (guix gexp) (guix git-download) ((guix licenses) #:prefix license:) (guix packages) - ((guix utils) #:select (cc-for-target substitute-keyword-arguments))) + ((guix utils) #:select (substitute-keyword-arguments))) (define-syntax-rule (search-our-patches file-name ...) "Return the list of absolute file names corresponding to each diff --git a/depends/packages/native_qt.mk b/depends/packages/native_qt.mk index 3e1e5626667..2bf088c10ac 100644 --- a/depends/packages/native_qt.mk +++ b/depends/packages/native_qt.mk @@ -9,6 +9,7 @@ $(package)_patches := dont_hardcode_pwd.patch $(package)_patches += qtbase_skip_tools.patch $(package)_patches += rcc_hardcode_timestamp.patch $(package)_patches += qttools_skip_dependencies.patch +$(package)_patches += fix-macos26-qyield.patch $(package)_qttranslations_file_name=$(qt_details_qttranslations_file_name) $(package)_qttranslations_sha256_hash=$(qt_details_qttranslations_sha256_hash) @@ -137,7 +138,8 @@ define $(package)_preprocess_cmds patch -p1 -i $($(package)_patch_dir)/dont_hardcode_pwd.patch && \ patch -p1 -i $($(package)_patch_dir)/qtbase_skip_tools.patch && \ patch -p1 -i $($(package)_patch_dir)/rcc_hardcode_timestamp.patch && \ - patch -p1 -i $($(package)_patch_dir)/qttools_skip_dependencies.patch + patch -p1 -i $($(package)_patch_dir)/qttools_skip_dependencies.patch && \ + patch -p1 -i $($(package)_patch_dir)/fix-macos26-qyield.patch endef define $(package)_config_cmds diff --git a/depends/packages/qt.mk b/depends/packages/qt.mk index 48f7e038bd9..d5ea16e9f77 100644 --- a/depends/packages/qt.mk +++ b/depends/packages/qt.mk @@ -24,6 +24,7 @@ $(package)_patches += fix-gcc16-sfinae-qregularexpression.patch $(package)_patches += fix-gcc16-sfinae-qchar.patch $(package)_patches += fix-gcc16-sfinae-qbitarray.patch $(package)_patches += fix-gcc16-sfinae-qanystringview.patch +$(package)_patches += fix-macos26-qyield.patch $(package)_patches += fix-qbytearray-include.patch $(package)_qttranslations_file_name=$(qt_details_qttranslations_file_name) @@ -281,6 +282,7 @@ define $(package)_preprocess_cmds patch -p1 -i $($(package)_patch_dir)/fix-gcc16-sfinae-qchar.patch && \ patch -p1 -i $($(package)_patch_dir)/fix-gcc16-sfinae-qbitarray.patch && \ patch -p1 -i $($(package)_patch_dir)/fix-gcc16-sfinae-qanystringview.patch && \ + patch -p1 -i $($(package)_patch_dir)/fix-macos26-qyield.patch && \ patch -p1 -i $($(package)_patch_dir)/fix-qbytearray-include.patch endef ifeq ($(host),$(build)) diff --git a/depends/patches/qt/fix-macos26-qyield.patch b/depends/patches/qt/fix-macos26-qyield.patch new file mode 100644 index 00000000000..65514a01cc8 --- /dev/null +++ b/depends/patches/qt/fix-macos26-qyield.patch @@ -0,0 +1,44 @@ +commit a76004f16fdc43e1b7af83bfdf3f1a613491b234 +Author: Paul Wicking +Date: Thu Mar 26 07:09:43 2026 +0100 + + qyieldcpu: Fix compilation with macOS 26.4 SDK + + After updating to the macOS 26.4 SDK, qtbase fails to compile on + Apple Silicon with an implicit function declaration error for + __yield() in qyieldcpu.h. It appears that the SDK's Clang now + reports __has_builtin(__yield) as true, but __yield() requires + for its declaration. + + The compiler's own __builtin_arm_yield intrinsic was already checked + further down in the cascade. Moving it above the __yield check resolves + the build failure, without unnecessarily pulling in the header. + + Fixes: QTBUG-145239 + Change-Id: I94b4d8f72385a4944c272ed7a66d249537a82e7d + Reviewed-by: Tor Arne Vestbø + Reviewed-by: Fabian Kosmale + +--- a/qtbase/src/corelib/thread/qyieldcpu.h ++++ b/qtbase/src/corelib/thread/qyieldcpu.h +@@ -31,7 +31,9 @@ void qYieldCpu(void) + noexcept + #endif + { +-#if __has_builtin(__yield) ++#if __has_builtin(__builtin_arm_yield) ++ __builtin_arm_yield(); ++#elif __has_builtin(__yield) + __yield(); // Generic + #elif defined(_YIELD_PROCESSOR) && defined(Q_CC_MSVC) + _YIELD_PROCESSOR(); // Generic; MSVC's +@@ -45,9 +47,6 @@ void qYieldCpu(void) + _mm_pause(); + #elif defined(Q_PROCESSOR_X86) + __asm__("pause"); // hopefully asm() works in this compiler +- +-#elif __has_builtin(__builtin_arm_yield) +- __builtin_arm_yield(); + #elif defined(Q_PROCESSOR_ARM) && Q_PROCESSOR_ARM >= 7 && defined(Q_CC_GNU) + __asm__("yield"); // this works everywhere + diff --git a/src/kernel/bitcoinkernel.h b/src/kernel/bitcoinkernel.h index 5427e776177..00bab4a0f9d 100644 --- a/src/kernel/bitcoinkernel.h +++ b/src/kernel/bitcoinkernel.h @@ -1333,7 +1333,7 @@ BITCOINKERNEL_API btck_BlockValidationState* BITCOINKERNEL_WARN_UNUSED_RESULT bt * Destroy the btck_BlockValidationState. */ BITCOINKERNEL_API void btck_block_validation_state_destroy( - btck_BlockValidationState* block_validation_state) BITCOINKERNEL_ARG_NONNULL(1); + btck_BlockValidationState* block_validation_state); ///@} diff --git a/src/test/fuzz/deserialize.cpp b/src/test/fuzz/deserialize.cpp index 70cad07d69d..1329f471c70 100644 --- a/src/test/fuzz/deserialize.cpp +++ b/src/test/fuzz/deserialize.cpp @@ -38,18 +38,13 @@ using kernel::CBlockFileInfo; using node::SnapshotMetadata; -namespace { -const BasicTestingSetup* g_setup; -} // namespace - void initialize_deserialize() { static const auto testing_setup = MakeNoLogFileContext<>(); - g_setup = testing_setup.get(); } #define FUZZ_TARGET_DESERIALIZE(name, code) \ - FUZZ_TARGET(name, .init = initialize_deserialize) \ + FUZZ_TARGET(name, .init = initialize_deserialize) \ { \ try { \ code \ diff --git a/src/test/fuzz/mini_miner.cpp b/src/test/fuzz/mini_miner.cpp index 6a5c164985a..3575a8656bd 100644 --- a/src/test/fuzz/mini_miner.cpp +++ b/src/test/fuzz/mini_miner.cpp @@ -26,12 +26,10 @@ namespace { -const TestingSetup* g_setup; std::deque g_available_coins; void initialize_miner() { static const auto testing_setup = MakeNoLogFileContext(); - g_setup = testing_setup.get(); for (uint32_t i = 0; i < uint32_t{100}; ++i) { g_available_coins.emplace_back(Txid::FromUint256(uint256::ZERO), i); } diff --git a/src/wallet/test/fuzz/coinselection.cpp b/src/wallet/test/fuzz/coinselection.cpp index 8b30423c6f2..42a53a83c34 100644 --- a/src/wallet/test/fuzz/coinselection.cpp +++ b/src/wallet/test/fuzz/coinselection.cpp @@ -275,7 +275,7 @@ FUZZ_TARGET(bnb_finds_min_waste) // Brute force optimal solution (lowest waste, but cannot be superset of another solution) std::vector solutions; - int best_waste{std::numeric_limits::max()}; + CAmount best_waste{std::numeric_limits::max()}; int best_weight{std::numeric_limits::max()}; for (uint32_t pattern = 1; (pattern >> num_groups) == 0; ++pattern) { // BnB does not permit adding more inputs to a solution, i.e. a superset of a solution cannot ever be a solution. diff --git a/src/wallet/test/fuzz/crypter.cpp b/src/wallet/test/fuzz/crypter.cpp index f8f5935416e..81f8240333e 100644 --- a/src/wallet/test/fuzz/crypter.cpp +++ b/src/wallet/test/fuzz/crypter.cpp @@ -11,11 +11,9 @@ namespace wallet { namespace { -const TestingSetup* g_setup; void initialize_crypter() { static const auto testing_setup = MakeNoLogFileContext(); - g_setup = testing_setup.get(); } FUZZ_TARGET(crypter, .init = initialize_crypter)