build: ci/doc win64-cross build via nix #35877

pull maflcko wants to merge 2 commits into bitcoin:master from maflcko:2608-build-win64-cross changing 8 files +79 −8
  1. maflcko commented at 11:38 AM on August 4, 2026: member

    Release cross-builds to win64 are done in guix. There are also docs to use Debian/Ubuntu for those cross-builds and this approach is used in CI. However, there are many problems:

    So add a way to use nix to do the cross build. This allows to closer mimic the guix build.

    Also, clarify that cygwin/msys2 are not tested/supported.

  2. DrahtBot renamed this:
    build: ci/doc win64-cross build via nix
    build: ci/doc win64-cross build via nix
    on Aug 4, 2026
  3. DrahtBot added the label Build system on Aug 4, 2026
  4. DrahtBot commented at 11:38 AM on August 4, 2026: contributor

    <!--e57a25ab6845829454e8d69fc972939a-->

    The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

    <!--006a51241073e994b41acfe9ec718e94-->

    Code Coverage & Benchmarks

    For details see: https://corecheck.dev/bitcoin/bitcoin/pulls/35877.

    <!--021abf342d371248e50ceaed478a90ca-->

    Reviews

    See the guideline and AI policy for information on the review process.

    Type Reviewers
    ACK willcl-ark, hebasto

    If your review is incorrectly listed, please copy-paste <code>&lt;!--meta-tag:bot-skip--&gt;</code> into the comment that the bot should ignore.

    <!--174a7506f384e20aa4161008e828411d-->

    Conflicts

    Reviewers, this pull request conflicts with the following ones:

    • #33593 (guix: Use UCRT runtime for Windows release binaries by hebasto)

    If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first.

    <!--5faf32d7da4f0f540f40219e4f7537a3-->

  5. DrahtBot added the label CI failed on Aug 4, 2026
  6. maflcko marked this as a draft on Aug 4, 2026
  7. DrahtBot removed the label CI failed on Aug 4, 2026
  8. maflcko commented at 2:35 PM on August 4, 2026: member

    Extracted the unrelated bugfix to #35879, but CI is green here and Concept (N)ACKs or questions can be dropped.

  9. in contrib/devtools/shell-win64-cross.nix:2 in fa48e317f3
       0 | @@ -0,0 +1,40 @@
       1 | +{ pkgs ? import (builtins.fetchTarball {
       2 | +    url = "https://github.com/NixOS/nixpkgs/archive/refs/heads/nixos-26.05.tar.gz";
    


    willcl-ark commented at 12:11 PM on August 6, 2026:

    In fa48e317f3045697da72e0c888f550d5a4c5e024

    Are we happy to use the rolling HEAD release here? I guess its ~ analagous to apt install x bumping versions occasionally, but we can of course pin too :)

    edit: left other comments about caching which may contribute to us preferring to pin here.


    maflcko commented at 2:50 PM on August 6, 2026:

    Yeah, a pin makes sense here. Especially if this is ever switched to the unstable channel in the future, a pin would be even be required then.

  10. in contrib/devtools/shell-win64-cross.nix:12 in fa48e317f3
       7 | +  crossPkgs = if host == "x86_64-w64-mingw32ucrt"
       8 | +    then pkgs.pkgsCross.ucrt64
       9 | +    else if host == "x86_64-w64-mingw32"
      10 | +      then pkgs.pkgsCross.mingwW64
      11 | +      else throw "Unsupported HOST: ${host}";
      12 | +  toolchain = "x86_64-w64-mingw32";
    


    willcl-ark commented at 12:21 PM on August 6, 2026:

    In fa48e317f3045697da72e0c888f550d5a4c5e024

    I wonder if we can derive this more safely/dynamically using toolchain = crossPkgs.stdenv.cc.targetPrefix; (which comes with trailing dash -)? Currently it's fixed the same for both crossPkg sets so make no difference though.


    maflcko commented at 2:50 PM on August 6, 2026:

    thx, done

  11. in contrib/devtools/shell-win64-cross.nix:18 in fa48e317f3 outdated
      13 | +  pthreads = crossPkgs.windows.pthreads;
      14 | +in
      15 | +
      16 | +pkgs.mkShellNoCC {
      17 | +  packages = [
      18 | +    crossPkgs.gcc14
    


    willcl-ark commented at 2:02 PM on August 6, 2026:

    In fa48e317f3045697da72e0c888f550d5a4c5e024

    I am not sure/convinced that these cross packages are cached regularly (or at all?) on cache.nixos.org:

    instatiating (one of) the shell(s) first time shows:

    bitcoin/worktrees/pr-35877 on ξ‚  pr-35877 [$] via β–³ v4.1.2 via 🐍 v3.14.6 via ❄️  impure (nix-shell-env)
    ❯ HOST=x86_64-w64-mingw32ucrt \
            nix-instantiate contrib/devtools/shell-win64-cross.nix > shell.drv
    unpacking 'https://github.com/NixOS/nixpkgs/archive/refs/heads/nixos-26.05.tar.gz' into the Git cache...
    ^[rwarning: you did not specify '--add-root'; the result might be removed by the garbage collector
    
    bitcoin/worktrees/pr-35877 on ξ‚  pr-35877 [$!?] via β–³ v4.1.2 via 🐍 v3.14.6 via ❄️  impure (nix-shell-env) took 16s
    ❯ nix-store --realise --dry-run "$(cat shell.drv)"
    these 14 derivations will be built:
      /nix/store/0px7k59nich0bsnvjakhxjq9x93l3mkl-x86_64-w64-mingw32-nolibc-gcc-15.2.0.drv
      /nix/store/x9pbpqsnk1wc2x0fb7ld7q46g7rhanl1-win-dll-hook.sh.drv
      /nix/store/l3yi6dp8qcfq7yg352mfgb1m53hxkba3-x86_64-w64-mingw32-nolibc-gcc-wrapper-15.2.0.drv
      /nix/store/2pnpr58w1w4b9n3104al5dsglh1lgn2k-stdenv-linux.drv
      /nix/store/kviifb5frqrmfr4q17j473wvk2lz934w-mingw-w64-x86_64-w64-mingw32-13.0.0.drv
      /nix/store/533n2nw3bykqiq19r1y3j23hysh5fcrg-x86_64-w64-mingw32-binutils-wrapper-2.46.drv
      /nix/store/mvb6why48wvi4480sqnlqg63fdwm50lx-x86_64-w64-mingw32-nolibc-gcc-wrapper-15.2.0.drv
      /nix/store/xsysspl58chfqp0ccaabjxaykwg5g3jf-stdenv-linux.drv
      /nix/store/mrkwyp8z098n9xg26h2q7rsyjnai2mss-mcfgthread-x86_64-w64-mingw32-2.3.2.drv
      /nix/store/44qzqs3m23py3rlinh6y14qj61dqwdk5-x86_64-w64-mingw32-gcc-14.3.0.drv
      /nix/store/9pijjdxc2kmas8idahdlqzkdvqk0ckqv-win-dll-hook.sh.drv
      /nix/store/jz9z9gxkfmiwqbikxg2fv7rqxyql2aj6-x86_64-w64-mingw32-gcc-wrapper-14.3.0.drv
      /nix/store/kp9j507wb6vhgx8k72644q41i10l5p23-mingw_w64-pthreads-x86_64-w64-mingw32-13.0.0.drv
      /nix/store/2hrpww4d9j4q9bacwd9pbbdfs04hrpdy-nix-shell.drv
    

    These should be caught in the docker buildkit layer cache naively, but any miss there in base_install.sh or earlier will cause a rebuild of the above, I think.

    We may therefore want to consider a combination of pinning the nixpkgs commit, and using cachix (docs) or similar to cache built packages on pushes to master.

    Noting that this is another "account" for someone to manage and another repo secret needed, but probably worth it IMO. The cachix cache woudl also be readable for developers to use themselves, if they add the cachix cache alongside cache.nixos.org


    willcl-ark commented at 2:05 PM on August 6, 2026:

    The CI logs seem to confirm this:

    [#12](/bitcoin-bitcoin/12/) 26.73 + [[ x86_64-w64-mingw32ucrt == x86_64-w64-mingw32* ]]
    [#12](/bitcoin-bitcoin/12/) 26.73 + NIX_BUILD_SHELL=bash
    [#12](/bitcoin-bitcoin/12/) 26.73 + nix-shell /home/runner/work/_temp/contrib/devtools/shell-win64-cross.nix --run true
    [#12](/bitcoin-bitcoin/12/) 26.75 unpacking 'https://github.com/NixOS/nixpkgs/archive/refs/heads/nixos-26.05.tar.gz' into the Git cache...
    [#12](/bitcoin-bitcoin/12/) 45.86 these 16 derivations will be built:
    [#12](/bitcoin-bitcoin/12/) 45.86   /nix/store/w834ly4r33imkb5v2cy2m4qvs5gax3jw-mingw_w64-headers-13.0.0.drv
    [#12](/bitcoin-bitcoin/12/) 45.86   /nix/store/77pphppxzw9lr4yn332nkiqrmncjp1aj-x86_64-w64-mingw32-binutils-wrapper-2.46.drv
    [#12](/bitcoin-bitcoin/12/) 45.86   /nix/store/0px7k59nich0bsnvjakhxjq9x93l3mkl-x86_64-w64-mingw32-nolibc-gcc-15.2.0.drv
    [#12](/bitcoin-bitcoin/12/) 45.86   /nix/store/x9pbpqsnk1wc2x0fb7ld7q46g7rhanl1-win-dll-hook.sh.drv
    [#12](/bitcoin-bitcoin/12/) 45.86   /nix/store/l3yi6dp8qcfq7yg352mfgb1m53hxkba3-x86_64-w64-mingw32-nolibc-gcc-wrapper-15.2.0.drv
    [#12](/bitcoin-bitcoin/12/) 45.86   /nix/store/2pnpr58w1w4b9n3104al5dsglh1lgn2k-stdenv-linux.drv
    [#12](/bitcoin-bitcoin/12/) 45.86   /nix/store/kviifb5frqrmfr4q17j473wvk2lz934w-mingw-w64-x86_64-w64-mingw32-13.0.0.drv
    [#12](/bitcoin-bitcoin/12/) 45.86   /nix/store/533n2nw3bykqiq19r1y3j23hysh5fcrg-x86_64-w64-mingw32-binutils-wrapper-2.46.drv
    [#12](/bitcoin-bitcoin/12/) 45.86   /nix/store/mvb6why48wvi4480sqnlqg63fdwm50lx-x86_64-w64-mingw32-nolibc-gcc-wrapper-15.2.0.drv
    [#12](/bitcoin-bitcoin/12/) 45.86   /nix/store/xsysspl58chfqp0ccaabjxaykwg5g3jf-stdenv-linux.drv
    [#12](/bitcoin-bitcoin/12/) 45.86   /nix/store/zn0zj4g3bscs2cm458zajhypa3c5d07z-dlltool.drv
    [#12](/bitcoin-bitcoin/12/) 45.86   /nix/store/mrkwyp8z098n9xg26h2q7rsyjnai2mss-mcfgthread-x86_64-w64-mingw32-2.3.2.drv
    [#12](/bitcoin-bitcoin/12/) 45.86   /nix/store/44qzqs3m23py3rlinh6y14qj61dqwdk5-x86_64-w64-mingw32-gcc-14.3.0.drv
    [#12](/bitcoin-bitcoin/12/) 45.86   /nix/store/9pijjdxc2kmas8idahdlqzkdvqk0ckqv-win-dll-hook.sh.drv
    [#12](/bitcoin-bitcoin/12/) 45.86   /nix/store/jz9z9gxkfmiwqbikxg2fv7rqxyql2aj6-x86_64-w64-mingw32-gcc-wrapper-14.3.0.drv
    [#12](/bitcoin-bitcoin/12/) 45.86   /nix/store/kp9j507wb6vhgx8k72644q41i10l5p23-mingw_w64-pthreads-x86_64-w64-mingw32-13.0.0.drv
    [#12](/bitcoin-bitcoin/12/) 45.86 these 168 paths will be fetched (723.6 MiB download, 1.9 GiB unpacked):
    

    Also noting that this adds 1.9GB to the docker image as configured.


    willcl-ark commented at 2:12 PM on August 6, 2026:

    Finally, it is possible that these do get cached on cache.nixos.org (I just don't know how to check), but the hydra server which builds them lags behind. I suspect these aren't being built though, as building all cross-combinations would be too expensive.


    maflcko commented at 2:50 PM on August 6, 2026:

    Hmm, I think storage is cheap, so I think this is good enough for now. Also, I probably won't be able to run a cachix for this, but maybe foo.fish can, if other reviewers think it is overall worth it?

    But I think for now it seems fine to eat the 1.9 GB twice.


    willcl-ark commented at 12:09 PM on August 12, 2026:

    Ok so I've been invesitgating this more, and I don't think it's worth havnig any more cache than the docker buildkit layer caching here.

    We can add one, but the machinery detailing when to use it, when to be read vs write, how to mount into the container etc. is probably not worth it IMO.

    The downside is that a cache miss on that buildkit layer now takes 30 mins longer to rebuild all the nix packages...

    Perhaps I'll revisit the idea in the future if this turns up too frequently and is bothersome.


    maflcko commented at 7:45 AM on August 17, 2026:

    We can add one, but the machinery detailing when to use it, when to be read vs write, how to mount into the container etc. is probably not worth it IMO.

    Sure, happy to add it here in a separate commit. IIUC there shouldn't be an issue, because on read failure, it will fallback to the status quo (compile)?

    I think writing new stuff is probably a problem of the foo.fish maintainers, and can be documented/maintained there? :sweat_smile:


    maflcko commented at 2:45 PM on August 20, 2026:

    Sure, happy to add it here in a separate commit.

    Given that this was merged, a cache can be added in a new pull, if needed.


    willcl-ark commented at 9:20 PM on August 20, 2026:

    This is the simplest construction I can come up with which satisfies:

    • pull everywhere (CI and local dev)
    • push only on master pushes in CI
    • don't leak access-key/secrets in CI
    • doesn't clobber a developers' local /nix/store

    It does a "pre-build" of the nix closure before the docker build step, only in CI on pushes to master. It requires two new actions, one to install nix and one to configure the push cache credentials using github OIDC.

    Then configures all builds to pull from the cache optimistically.

    The other approach I considered was a nightly build (elsewhere?) populating the cache, and we just always optimistically pull in our buildkit step. This would fall behind occasionally, but would probably get 90% of the benefit without the .github/**/*.yml changes and new actions...

    in a new pull, if needed.

    Still going to wait out and see whether this is indeed needed.


    maflcko commented at 6:14 AM on August 21, 2026:

    Ok, I guess I don't understand this. Why is a trivial two line patch of:

    export NIX_CACHE_URL="https://cache.nix.fish.foo"
    export NIX_CACHE_PUBLIC_KEY="cache.nix.fish.foo:iz0hMVvEFBvhsOoIyRRvot7B5xBaP/2sWMvneWypoBI="
    

    not enough? It will satisfy all points

    • pull everywhere (remote CI, local CI, and local dev, if the local dev wants to use that cache and enables it)
    • push only to master pushes in CI (no changes, just status-quo)
    • no secrets (no changes, just status-quo)
    • "doesn't clobber a developers' local /nix/store" (not sure what this means?)

    edit: Oh I guess I am describing what you describe as

    The other approach I considered was a nightly build (elsewhere?) populating the cache, and we just always optimistically pull in our buildkit step. This would fall behind occasionally, but would probably get 90% of the benefit without the .github/**/*.yml changes and new actions...

    (I guess I should read the full comment before commenting)


    willcl-ark commented at 7:57 AM on August 21, 2026:

    haha it’s ok. pushing needs a secret key to request special upload urls https://github.com/Mic92/niks3#write-path


    maflcko commented at 8:25 AM on August 21, 2026:

    I guess the next steps are:

    • Monitor if anything needs to change
    • If yes, try "the other approach"
    • Monitor again ...
  12. willcl-ark commented at 2:18 PM on August 6, 2026: member

    Concept ACK

    Happy to see a little nix sneaking its way in, and seems like a sensible enough solution to me.

    Left a few comments inline for you consideration.

  13. DrahtBot added the label CI failed on Aug 6, 2026
  14. maflcko force-pushed on Aug 7, 2026
  15. DrahtBot removed the label CI failed on Aug 7, 2026
  16. maflcko marked this as ready for review on Aug 7, 2026
  17. maflcko force-pushed on Aug 7, 2026
  18. hebasto commented at 11:27 AM on August 7, 2026: member

    Concept ACK.

  19. hebasto commented at 11:49 AM on August 7, 2026: member

    It's not possible now to verify that UCRT is being used from the following configure summary line:

    C++ compiler .......................... GNU 14.3.0, /nix/store/j1v9zdbf0l4qfvwybb90qwzyh1lmxfw1-x86_64-w64-mingw32-gcc-wrapper-14.3.0/bin/x86_64-w64-mingw32-g++
    

    Could we run dumpbin.exe /imports ... in test jobs to ensure the correct runtime is being linked?

  20. maflcko commented at 12:27 PM on August 7, 2026: member

    I've confirmed that locally in the container, but I don't have Windows to check there. Mind creating a separate ci-only pull for this? It seems useful on current master, even without this pull?

  21. hebasto commented at 2:52 PM on August 7, 2026: member

    Mind creating a separate ci-only pull for this? It seems useful on current master, even without this pull?

    Sure. Done in #35931.

  22. hebasto referenced this in commit 1f5c46f7ce on Aug 12, 2026
  23. hebasto commented at 8:58 AM on August 12, 2026: member

    Mind creating a separate ci-only pull for this? It seems useful on current master, even without this pull?

    Sure. Done in #35931.

    Could you rebase this branch on top of the merged #35931?

  24. maflcko closed this on Aug 17, 2026

  25. maflcko commented at 6:43 AM on August 17, 2026: member

    Sure, rebased the CI.

  26. maflcko reopened this on Aug 17, 2026

  27. willcl-ark commented at 7:37 AM on August 17, 2026: member

    Weird that all those jobs failed on creating an ipv6 network...

    Doesn't look like Warpbuild have changed the image recently, but this looks like the runner is missing the ipv6 sysctl

  28. DrahtBot added the label CI failed on Aug 17, 2026
  29. DrahtBot removed the label CI failed on Aug 17, 2026
  30. maflcko commented at 11:44 AM on August 17, 2026: member
  31. willcl-ark approved
  32. willcl-ark commented at 12:58 PM on August 17, 2026: member

    ACK fa5021fe9be170a7df1251526582360062250446

    This seems like a neat usage of a nix toolchain to me.

    There are other caching opportunities possible with nix, but I don't think they need to land here in this PR, as we are caching inside the docker buildkit layer.

  33. DrahtBot requested review from hebasto on Aug 17, 2026
  34. willcl-ark commented at 12:59 PM on August 17, 2026: member

    If i figure out a "neat" cache construction, I'll post up a commit that could be added here, or in a separate PR.

  35. in contrib/devtools/shell-win64-cross.nix:2 in fa5021fe9b outdated
       0 | @@ -0,0 +1,40 @@
       1 | +{ pkgs ? import (builtins.fetchTarball {
       2 | +    url = "https://github.com/NixOS/nixpkgs/archive/531670d871c0e29724a02f3cbcac170adc65b58c.tar.gz";
    


    hebasto commented at 5:44 PM on August 17, 2026:

    What is the planned policy for updating this pinned archive?


    maflcko commented at 11:57 AM on August 18, 2026:

    The versions are intended to match guix, so this will usually only change with every time-machine bump.

    Thx, added a comment.


    hebasto commented at 1:00 PM on August 18, 2026:

    Maybe add a cross-reference comment in contrib/guix/libexec/prelude.bash as well?


    maflcko commented at 2:25 PM on August 18, 2026:

    There isn't even a version number in guix (https://github.com/bitcoin/bitcoin/pull/35855#discussion_r3733346139) and this has worked fine previously, so I think I'll leave as-is for now.

  36. in contrib/devtools/shell-win64-cross.nix:1 in fa5021fe9b outdated
       0 | @@ -0,0 +1,40 @@
       1 | +{ pkgs ? import (builtins.fetchTarball {
    


    hebasto commented at 5:46 PM on August 17, 2026:

    nit 1: Prepend with a copyright header?

    nit 2: Add this file to contrib/devtools/README.md?


    maflcko commented at 11:57 AM on August 18, 2026:

    nit 2: Add this file to contrib/devtools/README.md?

    Why? There are already docs that refer to it and explain it.

    nit 1: Prepend with a copyright header?

    thx, added a header

  37. DrahtBot requested review from hebasto on Aug 17, 2026
  38. hebasto commented at 6:04 PM on August 17, 2026: member

    I tested fa5021fe9be170a7df1251526582360062250446 on Fedora 44:

    $ NIX_BUILD_SHELL=bash HOST=x86_64-w64-mingw32ucrt nix-shell contrib/devtools/shell-win64-cross.nix
    $ gmake -j 16 -C depends NO_QT=1
    $ cmake -B build --toolchain=depends/x86_64-w64-mingw32ucrt/toolchain.cmake
    $ cmake --build build -t bitcoind -j 1
    <snip>
    [329/329] Linking CXX executable bin/bitcoind.exe
    FAILED: [code=1] bin/bitcoind.exe 
    : && /bin/x86_64-w64-mingw32-g++ -O2 -O2 -g -static -Wl,--major-subsystem-version,6 -Wl,--minor-subsystem-version,2 -fstack-reuse=none -fstack-protector-all -fcf-protection=full -Wl,--enable-reloc-section -Wl,--dynamicbase -Wl,--nxcompat -Wl,--high-entropy-va src/CMakeFiles/bitcoind.dir/bitcoind.cpp.obj src/CMakeFiles/bitcoind.dir/init/bitcoind.cpp.obj src/CMakeFiles/bitcoind.dir/bitcoind-res.rc.res src/CMakeFiles/bitcoind.dir/bitcoind-manifest.rc.res -o bin/bitcoind.exe -Wl,--out-implib,lib/libbitcoind.dll.a -Wl,--major-image-version,0,--minor-image-version,0  lib/libbitcoin_node.a  lib/libbitcoin_wallet.a  lib/libbitcoin_zmq.a  /home/hebasto/dev/bitcoin/depends/x86_64-w64-mingw32ucrt/lib/libzmq.a  -lpthread  -lrpcrt4  src/libleveldb.a  src/libcrc32c.a  src/libminisketch.a  lib/libbitcoin_common.a  lib/libbitcoin_util.a  lib/libbitcoin_clientversion.a  -liphlpapi  -lbcrypt  lib/libbitcoin_consensus.a  lib/libbitcoin_crypto.a  src/secp256k1/lib/libsecp256k1.a  -lws2_32  src/univalue/libunivalue.a  /home/hebasto/dev/bitcoin/depends/x86_64-w64-mingw32ucrt/lib/libsqlite3.a  -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && :
    /usr/x86_64-w64-mingw32/bin/ld: /home/hebasto/dev/bitcoin/depends/x86_64-w64-mingw32ucrt/lib/libzmq.a(mailbox_safe.cpp.obj):mailbox_safe.cpp:(.text+0x1cf): undefined reference to `_MCF_mutex_lock_slow'
    /usr/x86_64-w64-mingw32/bin/ld: /home/hebasto/dev/bitcoin/depends/x86_64-w64-mingw32ucrt/lib/libzmq.a(mailbox_safe.cpp.obj):mailbox_safe.cpp:(.text+0x1dc): undefined reference to `_MCF_mutex_unlock_slow'
    /usr/x86_64-w64-mingw32/bin/ld: /home/hebasto/dev/bitcoin/depends/x86_64-w64-mingw32ucrt/lib/libzmq.a(mailbox_safe.cpp.obj):mailbox_safe.cpp:(.text$_ZNSt3_V222condition_variable_any4waitIN3zmq7mutex_tEEEvRT_[_ZNSt3_V222condition_variable_any4waitIN3zmq7mutex_tEEEvRT_]+0xe8): undefined reference to `_MCF_mutex_unlock_slow'
    /usr/x86_64-w64-mingw32/bin/ld: /home/hebasto/dev/bitcoin/depends/x86_64-w64-mingw32ucrt/lib/libzmq.a(mailbox_safe.cpp.obj):mailbox_safe.cpp:(.text$_ZNSt3_V222condition_variable_any4waitIN3zmq7mutex_tEEEvRT_[_ZNSt3_V222condition_variable_any4waitIN3zmq7mutex_tEEEvRT_]+0x130): undefined reference to `_MCF_mutex_lock_slow'
    /usr/x86_64-w64-mingw32/bin/ld: /home/hebasto/dev/bitcoin/depends/x86_64-w64-mingw32ucrt/lib/libzmq.a(mailbox_safe.cpp.obj):mailbox_safe.cpp:(.text$_ZNSt3_V222condition_variable_any10wait_untilIN3zmq7mutex_tENSt6chrono3_V212system_clockENS4_8durationIxSt5ratioILx1ELx1000000000EEEEEESt9cv_statusRT_RKNS4_10time_pointIT0_T1_EE[_ZNSt3_V222condition_variable_any10wait_untilIN3zmq7mutex_tENSt6chrono3_V212system_clockENS4_8durationIxSt5ratioILx1ELx1000000000EEEEEESt9cv_statusRT_RKNS4_10time_pointIT0_T1_EE]+0x9d): undefined reference to `__MCF_gthr_timeout_from_timespec'
    /usr/x86_64-w64-mingw32/bin/ld: /home/hebasto/dev/bitcoin/depends/x86_64-w64-mingw32ucrt/lib/libzmq.a(mailbox_safe.cpp.obj):mailbox_safe.cpp:(.text$_ZNSt3_V222condition_variable_any10wait_untilIN3zmq7mutex_tENSt6chrono3_V212system_clockENS4_8durationIxSt5ratioILx1ELx1000000000EEEEEESt9cv_statusRT_RKNS4_10time_pointIT0_T1_EE[_ZNSt3_V222condition_variable_any10wait_untilIN3zmq7mutex_tENSt6chrono3_V212system_clockENS4_8durationIxSt5ratioILx1ELx1000000000EEEEEESt9cv_statusRT_RKNS4_10time_pointIT0_T1_EE]+0xb2): undefined reference to `__MCF_gthr_cond_mutex_wait'
    /usr/x86_64-w64-mingw32/bin/ld: /home/hebasto/dev/bitcoin/depends/x86_64-w64-mingw32ucrt/lib/libzmq.a(mailbox_safe.cpp.obj):mailbox_safe.cpp:(.text$_ZNSt3_V222condition_variable_any10wait_untilIN3zmq7mutex_tENSt6chrono3_V212system_clockENS4_8durationIxSt5ratioILx1ELx1000000000EEEEEESt9cv_statusRT_RKNS4_10time_pointIT0_T1_EE[_ZNSt3_V222condition_variable_any10wait_untilIN3zmq7mutex_tENSt6chrono3_V212system_clockENS4_8durationIxSt5ratioILx1ELx1000000000EEEEEESt9cv_statusRT_RKNS4_10time_pointIT0_T1_EE]+0x170): undefined reference to `_MCF_mutex_lock_slow'
    /usr/x86_64-w64-mingw32/bin/ld: /home/hebasto/dev/bitcoin/depends/x86_64-w64-mingw32ucrt/lib/libzmq.a(mailbox_safe.cpp.obj):mailbox_safe.cpp:(.text$_ZNSt3_V222condition_variable_any10wait_untilIN3zmq7mutex_tENSt6chrono3_V212system_clockENS4_8durationIxSt5ratioILx1ELx1000000000EEEEEESt9cv_statusRT_RKNS4_10time_pointIT0_T1_EE[_ZNSt3_V222condition_variable_any10wait_untilIN3zmq7mutex_tENSt6chrono3_V212system_clockENS4_8durationIxSt5ratioILx1ELx1000000000EEEEEESt9cv_statusRT_RKNS4_10time_pointIT0_T1_EE]+0x17d): undefined reference to `_MCF_mutex_unlock_slow'
    collect2: error: ld returned 1 exit status
    ninja: build stopped: subcommand failed.
    
    
  39. DrahtBot requested review from hebasto on Aug 17, 2026
  40. in contrib/devtools/shell-win64-cross.nix:38 in fa5021fe9b outdated
      33 | +    export OBJCOPY=${toolchain}objcopy
      34 | +    export OBJDUMP=${toolchain}objdump
      35 | +    export READELF=${toolchain}readelf
      36 | +    export SIZE=${toolchain}size
      37 | +    export WINDRES=${toolchain}windres
      38 | +    export RC=${toolchain}windres
    


    hebasto commented at 6:29 PM on August 17, 2026:

    All paths should be absolute to avoid conflicts with a system-installed toolchain.


    maflcko commented at 11:48 AM on August 18, 2026:

    Is this needed? nix-shell should inject a PATH, so that the bins from nix are preferred over system ones.


    hebasto commented at 12:58 PM on August 18, 2026:

    The suggestion fixes #35877#pullrequestreview-4953295775 for me.


    maflcko commented at 2:21 PM on August 18, 2026:

    I still can't reproduce this, evne with ucrt64-gcc-c++ installed. Can you share the configure output?

    I have:

    [nix-shell:/bitcoin]# type -a x86_64-w64-mingw32ucrt-c++
    x86_64-w64-mingw32ucrt-c++ is /usr/bin/x86_64-w64-mingw32ucrt-c++
    
    [nix-shell:/bitcoin]# type -a x86_64-w64-mingw32-g++
    x86_64-w64-mingw32-g++ is /nix/store/l5s72jwcznmffdmk89czxvwmhwm03mwh-x86_64-w64-mingw32-gcc-wrapper-14.3.0/bin/x86_64-w64-mingw32-g++
    x86_64-w64-mingw32-g++ is /nix/store/i67bfgf5xy32wzh6cck9jpxcjkvnq9k5-x86_64-w64-mingw32-gcc-14.3.0/bin/x86_64-w64-mingw32-g++
    
    

    And the configure output says:

    C++ compiler .......................... GNU 14.3.0, /nix/store/l5s72jwcznmffdmk89czxvwmhwm03mwh-x86_64-w64-mingw32-gcc-wrapper-14.3.0/bin/x86_64-w64-mingw32-g++
    

    hebasto commented at 10:00 AM on August 19, 2026:

    Can you share the configure output?

    Sure. Here it is:

    Configure summary
    =================
    Executables:
      bitcoin ............................. ON
      bitcoind ............................ ON
      bitcoin-node (multiprocess) ......... OFF
      bitcoin-qt (GUI) .................... OFF
      bitcoin-gui (GUI, multiprocess) ..... OFF
      bitcoin-cli ......................... ON
      bitcoin-tx .......................... ON
      bitcoin-util ........................ ON
      bitcoin-wallet ...................... ON
      bitcoin-chainstate (experimental) ... OFF
      libbitcoinkernel (experimental) ..... OFF
      kernel-test (experimental) .......... OFF
    Optional features:
      wallet support ...................... ON
      external signer ..................... ON
      ZeroMQ .............................. ON
      IPC ................................. OFF
      Embedded ASMap ...................... ON
      USDT tracing ........................ OFF
      QR code (GUI) ....................... OFF
      DBus (GUI) .......................... OFF
    Tests:
      test_bitcoin ........................ ON
      test_bitcoin-qt ..................... OFF
      bench_bitcoin ....................... OFF
      fuzz binary ......................... OFF
    
    Cross compiling ....................... TRUE, for Windows, x86_64
    C++ compiler .......................... GNU 16.1.1, /bin/x86_64-w64-mingw32-g++
    CMAKE_BUILD_TYPE ...................... RelWithDebInfo
    Preprocessor defined macros ........... _WIN32_WINNT=0x0A00 _WIN32_IE=0x0A00 WIN32_LEAN_AND_MEAN NOMINMAX WIN32 _WINDOWS _MT
    C++ compiler flags .................... -O2 -O2 -g -std=c++20 -Wa,-muse-unaligned-vector-move -fno-extended-identifiers -fmacro-prefix-map=/home/hebasto/dev/bitcoin/src=. -fstack-reuse=none -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 -Wstack-protector -fstack-protector-all -fcf-protection=full -Wall -Wextra -Wformat -Wformat-security -Wvla -Wredundant-decls -Wdate-time -Wduplicated-branches -Wduplicated-cond -Wlogical-op -Woverloaded-virtual -Wsuggest-override -Wimplicit-fallthrough -Wunreachable-code -Wbidi-chars=any -Wundef -Wleading-whitespace=spaces -Wtrailing-whitespace=any -Wno-unused-parameter
    Linker flags .......................... -O2 -O2 -g -static -Wl,--major-subsystem-version,6 -Wl,--minor-subsystem-version,2 -fstack-reuse=none -fstack-protector-all -fcf-protection=full -Wl,--enable-reloc-section -Wl,--dynamicbase -Wl,--nxcompat -Wl,--high-entropy-va
    
    NOTE: The summary above may not exactly match the final applied build flags
          if any additional CMAKE_* or environment variables have been modified.
          To see the exact flags applied, build with the --verbose option.
    
    Treat compiler warnings as errors ..... OFF
    Use ccache for compiling .............. ON
    
    
    -- Configuring done (6.6s)
    -- Generating done (0.0s)
    -- Build files have been written to: /home/hebasto/dev/bitcoin/build
    
    

    Additionally,

    $ which -a x86_64-w64-mingw32-g++
    /nix/store/l5s72jwcznmffdmk89czxvwmhwm03mwh-x86_64-w64-mingw32-gcc-wrapper-14.3.0/bin/x86_64-w64-mingw32-g++
    /nix/store/i67bfgf5xy32wzh6cck9jpxcjkvnq9k5-x86_64-w64-mingw32-gcc-14.3.0/bin/x86_64-w64-mingw32-g++
    /usr/lib64/ccache/x86_64-w64-mingw32-g++
    /usr/bin/x86_64-w64-mingw32-g++
    
    

    hebasto commented at 10:41 AM on August 19, 2026:

    I still can't reproduce this, evne with ucrt64-gcc-c++ installed.

    My bad. It interferes with the mingw64-gcc-c++ package.


    maflcko commented at 10:59 AM on August 19, 2026:

    Thx, fixed.

    Make sure to compile depends again in the new nix shell.

    Before:

    # which -a $CC
    /nix/store/l5s72jwcznmffdmk89czxvwmhwm03mwh-x86_64-w64-mingw32-gcc-wrapper-14.3.0/bin/x86_64-w64-mingw32-gcc
    /nix/store/i67bfgf5xy32wzh6cck9jpxcjkvnq9k5-x86_64-w64-mingw32-gcc-14.3.0/bin/x86_64-w64-mingw32-gcc
    /usr/bin/x86_64-w64-mingw32-gcc
    

    After:

    # which -a $CC
    /nix/store/l5s72jwcznmffdmk89czxvwmhwm03mwh-x86_64-w64-mingw32-gcc-wrapper-14.3.0/bin/x86_64-w64-mingw32-gcc
    
    
  41. DrahtBot requested review from hebasto on Aug 18, 2026
  42. maflcko commented at 11:49 AM on August 18, 2026: member

    I tested fa5021f on Fedora 44:

    What are the exact steps to reproduce, starting from a fresh install of the OS? It works fine locally:

    <details><summary>works for me</summary>

    [nix-shell:/bitcoin]# cat /etc/os-release 
    NAME="Fedora Linux"
    VERSION="46 (Container Image Prerelease)"
    RELEASE_TYPE=development
    ID=fedora
    VERSION_ID=46
    VERSION_CODENAME=""
    PRETTY_NAME="Fedora Linux 46 (Container Image Prerelease)"
    ANSI_COLOR="0;38;2;60;110;180"
    LOGO=fedora-logo-icon
    CPE_NAME="cpe:/o:fedoraproject:fedora:46"
    DEFAULT_HOSTNAME="fedora"
    HOME_URL="https://fedoraproject.org/"
    DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora/rawhide/"
    SUPPORT_URL="https://ask.fedoraproject.org/"
    BUG_REPORT_URL="https://bugzilla.redhat.com/"
    REDHAT_BUGZILLA_PRODUCT="Fedora"
    REDHAT_BUGZILLA_PRODUCT_VERSION=rawhide
    REDHAT_SUPPORT_PRODUCT="Fedora"
    REDHAT_SUPPORT_PRODUCT_VERSION=rawhide
    SUPPORT_END=2028-05-24
    VARIANT="Container Image"
    VARIANT_ID=container
    
    [nix-shell:/bitcoin]# cmake --build build -t bitcoind -j 1
    [  1%] Generating bitcoin-build-info.h
    [  1%] Built target generate_build_info
    [ 10%] Built target bitcoin_wallet
    [ 12%] Built target crc32c
    [ 23%] Built target leveldb
    [ 29%] Built target minisketch
    [ 29%] Built target bitcoin_clientversion
    [ 32%] Built target bitcoin_consensus
    [ 49%] Built target bitcoin_common
    [ 78%] Built target bitcoin_node
    [ 80%] Built target univalue
    [ 80%] Built target secp256k1_precomputed
    [ 81%] Built target secp256k1
    [ 87%] Built target bitcoin_crypto
    [ 96%] Built target bitcoin_util
    [ 98%] Built target bitcoin_zmq
    [100%] Built target bitcoind
    
    

    </details>

  43. maflcko force-pushed on Aug 18, 2026
  44. hebasto commented at 12:57 PM on August 18, 2026: member

    I tested fa5021f on Fedora 44:

    What are the exact steps to reproduce, starting from a fresh install of the OS?

    Please install ~ucrt64-gcc-c++~mingw64-gcc-c++ to reproduce the issue.

    UPDATE: mingw64-gcc-c++, not ucrt64-gcc-c++.

  45. maflcko force-pushed on Aug 19, 2026
  46. hebasto approved
  47. hebasto commented at 11:06 AM on August 19, 2026: member

    ACK fa33b0872cd60a918cd70e5682a45c0e0481fc28.

  48. DrahtBot requested review from willcl-ark on Aug 19, 2026
  49. willcl-ark approved
  50. willcl-ark commented at 12:18 PM on August 19, 2026: member

    reACK fa33b0872cd60a918cd70e5682a45c0e0481fc28

    Copyright, a single code comment and absolute tool paths used updated since last review

  51. DrahtBot requested review from willcl-ark on Aug 19, 2026
  52. DrahtBot added the label CI failed on Aug 19, 2026
  53. DrahtBot removed the label CI failed on Aug 19, 2026
  54. Kino1994 referenced this in commit b26787926b on Aug 19, 2026
  55. doc: Clarify that cygwin/msys2 are not tested/supported fafe7205cc
  56. build: ci/doc win64-cross build via nix fa8762da62
  57. DrahtBot added the label Needs rebase on Aug 19, 2026
  58. maflcko force-pushed on Aug 19, 2026
  59. maflcko commented at 1:51 PM on August 19, 2026: member

    rebase after trivial doc conflict in adjacent line

  60. willcl-ark approved
  61. willcl-ark commented at 2:01 PM on August 19, 2026: member

    reACK fa8762da626a592585f936b9398a100e3adfd923

  62. hebasto approved
  63. hebasto commented at 2:04 PM on August 19, 2026: member

    re-ACK fa8762da626a592585f936b9398a100e3adfd923.

  64. DrahtBot requested review from willcl-ark on Aug 19, 2026
  65. DrahtBot removed the label Needs rebase on Aug 19, 2026
  66. maflcko commented at 3:19 PM on August 19, 2026: member

    Also tested this on aarch64, so I think the three Debian/Ubuntu bugs listed in OP are fixed/worked-around by this.

  67. hebasto commented at 3:35 PM on August 19, 2026: member

    Also tested this on aarch64, so I think the three Debian/Ubuntu bugs listed in OP are fixed/worked-around by this.

    Additionally, this fixes https://qt-project.atlassian.net/browse/QTBUG-144294, which paves the way for updating Qt in depends.

  68. fanquake commented at 5:17 PM on August 19, 2026: member

    Additionally, this fixes https://qt-project.atlassian.net/browse/QTBUG-144294

    Can you explain how this is fixed (by Nix)? What is the difference between the Ubuntu / Debian builds? (Also not clear how this unblocks updating Qt, unless you're also planning to drop support for building on Debian/Ubuntu entirely, and making Nix the only supported way to cross compile for Windows?)

  69. hebasto commented at 5:39 PM on August 19, 2026: member

    Additionally, this fixes https://qt-project.atlassian.net/browse/QTBUG-144294

    Can you explain how this is fixed (by Nix)?

    No. I haven't bisected the toolchain changes.

    What is the difference between the Ubuntu / Debian builds?

    On the master branch, configure summary reads:

    C++ compiler .......................... GNU 14.0.0, /bin/x86_64-w64-mingw32-g++-posix
    

    With this branch:

    C++ compiler .......................... GNU 14.3.0, /nix/store/j1v9zdbf0l4qfvwybb90qwzyh1lmxfw1-x86_64-w64-mingw32-gcc-wrapper-14.3.0/bin/x86_64-w64-mingw32-g++
    

    (Also not clear how this unblocks updating Qt, unless you're also planning to drop support for building on Debian/Ubuntu entirely, and making Nix the only supported way to cross compile for Windows?)

    Debian / Ubuntu might update their packages in the future.

  70. fanquake commented at 6:00 PM on August 19, 2026: member

    Ah ok. So (probably?) a fix in a GCC point release, and the unblocking is unrelated to Nix.

  71. maflcko commented at 7:46 PM on August 19, 2026: member

    It could also be a fix in mingw? Ubuntu 24.04 ships with mingw-11.

    Of course Nix doesn't fix the bugs in Ubuntu/Debian, but allowing to side-step them with Nix should be a good enough "fix" for us.

    There was plenty of time for anyone to fix them in Ubuntu/Debian, but given that no one has done so, it seems time to give up on that. Of course, no one is holding anyone back from porting fixes to Ubuntu/Debian, and it would be trivial to switch back. Though, for now, I think it is a better use of time to just focus on shipping bug-free binaries with guix (and offering a working equivalent toolchain via nix on Ubuntu/Debian/etc)

  72. hebasto commented at 9:21 PM on August 19, 2026: member

    It could also be a fix in mingw? Ubuntu 24.04 ships with mingw-11.

    #36029 proposes logging the MinGW-w64 version in the configure summary to help track things like this.

  73. hebasto commented at 8:06 AM on August 20, 2026: member

    It could also be a fix in mingw?

    From #34578 (comment):

    My guess is that the issue was fixed in mingw-w64/mingw-w64@8e06daa.

  74. maflcko commented at 8:32 AM on August 20, 2026: member

    Thx. That bug is already mentioned in the OP here, and one of the reasons for this pull.

  75. fanquake commented at 9:29 AM on August 20, 2026: member

    Of course Nix doesn't fix the bugs in Ubuntu/Debian, but allowing to side-step them with Nix should be a good enough "fix" for us.

    Sure, Nix is fine and good, and I am not blocking this. However the suggestions that we can now bump packages (and actively break things that may build outside of Nix), because the CI will "pass" with Nix, is different to just offering an alternative way to compile, and makes it less clear what is supported (given some things will no-longer be tested).

    For example, depending on the OS (Debian Bookworm), the apt install nix-bin instructions also might not work (at least, not out of the box):

    /bitcoin# NIX_BUILD_SHELL=bash HOST=x86_64-w64-mingw32 nix-shell contrib/devtools/shell-win64-cross.nix
    error: evaluation aborted with the following error message: '
           This version of Nixpkgs requires an implementation of Nix with the following features:
           - `builtins.nixVersion` reports at least 2.18
    
           You are evaluating with Nix 2.8.0, please upgrade:
    
           - If you are running NixOS, `nixos-rebuild' can be used to upgrade your system.
    
           - Alternatively, with Nix > 2.0 `nix upgrade-nix' can be used to imperatively
             upgrade Nix. You may use `nix-env --version' to check which version you have.
    
    # tried to upgrade
    /bitcoin# nix upgrade-nix
    error: directory '/usr/bin' does not appear to be part of a Nix profile
    

    So we'll need to make sure that whatever Nix "features" we are using, are compatible with whatever OS's we are claiming this Nix usage supports, especially if we start to use Nix for more things.

    I also tested this in a vanilla Ubuntu 24.04 container (Podman), and the Nix shell works, but then building depends doesn't:

    /bitcoin# NIX_BUILD_SHELL=bash HOST=x86_64-w64-mingw32 nix-shell contrib/devtools/shell-win64-cross.nix
    make -C depends/ HOST=x86_64-w64-mingw32 V=1
    make: Entering directory '/bitcoin/depends'
    echo Configuring native_qt...
    Configuring native_qt...
    rm -rf /bitcoin/depends/x86_64-w64-mingw32; mkdir -p /bitcoin/depends/x86_64-w64-mingw32/lib; cd /bitcoin/depends/x86_64-w64-mingw32; 
    mkdir -p /bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-8734b2e815f/.
    { cd /bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-8734b2e815f/.; export CC="gcc" CXX="g++" PKG_CONFIG_LIBDIR=/bitcoin/depends/x86_64-w64-mingw32/native/lib/pkgconfig PKG_CONFIG_PATH=/bitcoin/depends/x86_64-w64-mingw32/native/share/pkgconfig PKG_CONFIG_SYSROOT_DIR=/ CMAKE_MODULE_PATH=/bitcoin/depends/x86_64-w64-mingw32/native/lib/cmake PATH="/bitcoin/depends/x86_64-w64-mingw32/native/bin:.:/nix/store/i7wg3na1qf3zmvjrf7yh4dy57bihx2sr-x86_64-w64-mingw32-gcc-wrapper-14.3.0/bin:/nix/store/ilf2y2lil0h3prka74j7d7xc4fyg60m1-x86_64-w64-mingw32-gcc-14.3.0/bin:/nix/store/fz6id67gqf07rkbpmab99wmxspx2f9j5-coreutils-9.11/bin:/nix/store/33zf2x7rbm58bzddvc95fhba5nimk29n-x86_64-w64-mingw32-binutils-wrapper-2.46/bin:/nix/store/nsskzqrwxncairiigq1abv46z60nkz7l-x86_64-w64-mingw32-binutils-2.46/bin:/nix/store/57vdfksrvcyvnds1f2j995f953hmi01l-nsis-3.11/bin:/nix/store/6iydhhph60908qwdsd71mi3ayvifm300-patchelf-0.15.2/bin:/nix/store/g2px9fbgixlsrmg66d47l4b3rm1vi2ik-mcfgthread-x86_64-w64-mingw32-2.3.2/bin:/nix/store/fz6id67gqf07rkbpmab99wmxspx2f9j5-coreutils-9.11/bin:/nix/store/vlch19jj2vwbfaxx20kzw363gv8jd8z6-findutils-4.10.0/bin:/nix/store/kmdzb26qnwj5z4c0y3iycvslaj5s7ysk-diffutils-3.12/bin:/nix/store/wb9zd1k9xk8rffrd8wjr00nzfqmajyhf-gnused-4.10/bin:/nix/store/nmx5l4b5rqm963ma6qrpac5mi9gx72ns-gnugrep-3.12/bin:/nix/store/kj5scmcga5zp8fz6wmpnd0ydc1scaw9m-gawk-5.4.1/bin:/nix/store/yj6dv7k1rzjg9vg7r5b5a2zia71ik9vy-gnutar-1.35/bin:/nix/store/8br3a21d0pv7cfv3j8by8ya22whg3nj4-gzip-1.14/bin:/nix/store/wzj71nclhmkkqbd6smgjh3s2kydy9mr2-bzip2-1.0.8-bin/bin:/nix/store/vv8yx6pb33yy1674z5lkvi6zxy4mj4b4-gnumake-4.4.1/bin:/nix/store/9vkrxfpdg6khwjyfszq0d84shv82988i-bash-5.3p9/bin:/nix/store/i3wznplq102dkzjxlamd385hvanrl4ww-patch-2.8/bin:/nix/store/dwlhh6apg6pzvxyh71f6qb0m49rx2yxl-xz-5.8.3-bin/bin:/nix/store/m6ic4cp65azp6r93711kslwkzc0yqrqj-file-5.47/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin";   cd qtbase && ./configure -top-level -release -make tools -no-pkg-config -no-reduce-relocations -no-use-gold-linker -prefix /bitcoin/depends/x86_64-w64-mingw32 -static -no-feature-concurrent -no-feature-network -no-feature-printsupport -no-feature-sql -no-feature-testlib -no-feature-xml -no-gui -no-widgets -no-glib -no-icu -no-libudev -no-openssl -no-zstd -qt-pcre -qt-zlib -no-feature-backtrace -no-feature-permissions -no-feature-process -no-feature-settings -no-feature-androiddeployqt -no-feature-macdeployqt -no-feature-windeployqt -no-feature-qmake -feature-linguist -no-feature-assistant -no-feature-clang -no-feature-clangcpp -no-feature-designer -no-feature-pixeltool -no-feature-qdoc -no-feature-qtattributionsscanner -no-feature-qtdiag -no-feature-qtplugininfo       -- -DCMAKE_EXE_LINKER_FLAGS="" -DCMAKE_AR="ar" --log-level=STATUS; } 
    ./configure: 149: cmake: Permission denied
    ./configure: 166: exec: cmake: Permission denied
    make: *** [funcs.mk:344: /bitcoin/depends/x86_64-w64-mingw32/.native_qt_stamp_configured] Error 126
    make: Leaving directory '/bitcoin/depends'
    

    Is this expected, or are we missing some steps in the docs?

    The CI is intended to mirror the guix build, So add a way to use nix to do the cross build. This allows to closer mimic the guix build.

    Somewhat related, but do we still need/want to "mimic" Guix, if we can just use it directly: #36006? I can understand that this would be done any-ways, for convenience.

  76. willcl-ark commented at 9:41 AM on August 20, 2026: member

    but then building depends doesn't

    This smells like some container issue to me, perhaps mounted git dir issue or something, as there's nothing in this nix shell which should change permissions on files...

    That said, I am re-testing in a container myself to make sure!

    edit seems to be building fine for me(TM):

    <details> <summary>Details</summary>

    [nix-shell:/bitcoin]# make -C depends/ HOST=x86_64-w64-mingw32 -j15
    make: Entering directory '/bitcoin/depends'
    Fetching qtbase-everywhere-opensource-src-6.8.4.tar.xz from https://download.qt.io/archive/qt/6.8/6.8.4/submodules
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100   292  100   292    0     0    898      0 --:--:-- --:--:-- --:--:--   901
    100 46.2M  100 46.2M    0     0  13.8M      0  0:00:03  0:00:03 --:--:-- 16.4M
    /bitcoin/depends/work/download/native_qt-6.8.4/qtbase-everywhere-opensource-src-6.8.4.tar.xz.temp: OK
    Fetching qttranslations-everywhere-opensource-src-6.8.4.tar.xz from https://download.qt.io/archive/qt/6.8/6.8.4/submodules
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100   300  100   300    0     0    842      0 --:--:-- --:--:-- --:--:--   842
    100 1582k  100 1582k    0     0  1210k      0  0:00:01  0:00:01 --:--:-- 3872k
    /bitcoin/depends/work/download/native_qt-6.8.4/qttranslations-everywhere-opensource-src-6.8.4.tar.xz.temp: OK
    Fetching qttools-everywhere-opensource-src-6.8.4.tar.xz from https://download.qt.io/archive/qt/6.8/6.8.4/submodules
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100   293  100   293    0     0    819      0 --:--:-- --:--:-- --:--:--   820
    100  9.8M  100  9.8M    0     0  4773k      0  0:00:02  0:00:02 --:--:-- 7141k
    /bitcoin/depends/work/download/native_qt-6.8.4/qttools-everywhere-opensource-src-6.8.4.tar.xz.temp: OK
    Fetching CMakeLists.txt from https://raw.githubusercontent.com/qt/qt5/refs/tags/v6.8.4-lts-lgpl
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100  4355  100  4355    0     0  14060      0 --:--:-- --:--:-- --:--:-- 14093
    /bitcoin/depends/work/download/native_qt-6.8.4/CMakeLists.txt-6.8.4.temp: OK
    Fetching ECMOptionalAddSubdirectory.cmake from https://raw.githubusercontent.com/qt/qt5/refs/tags/v6.8.4-lts-lgpl/cmake
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100  3029  100  3029    0     0   4742      0 --:--:-- --:--:-- --:--:--  4740
    /bitcoin/depends/work/download/native_qt-6.8.4/ECMOptionalAddSubdirectory.cmake-6.8.4.temp: OK
    Fetching QtTopLevelHelpers.cmake from https://raw.githubusercontent.com/qt/qt5/refs/tags/v6.8.4-lts-lgpl/cmake
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100 50675  100 50675    0     0   164k      0 --:--:-- --:--:-- --:--:--  164k
    /bitcoin/depends/work/download/native_qt-6.8.4/QtTopLevelHelpers.cmake-6.8.4.temp: OK
    Extracting native_qt...
    /bitcoin/depends/sources/qtbase-everywhere-opensource-src-6.8.4.tar.xz: OK
    /bitcoin/depends/sources/qttranslations-everywhere-opensource-src-6.8.4.tar.xz: OK
    /bitcoin/depends/sources/qttools-everywhere-opensource-src-6.8.4.tar.xz: OK
    /bitcoin/depends/sources/CMakeLists.txt-6.8.4: OK
    /bitcoin/depends/sources/ECMOptionalAddSubdirectory.cmake-6.8.4: OK
    /bitcoin/depends/sources/QtTopLevelHelpers.cmake-6.8.4: OK
    Preprocessing native_qt...
    patching file qtbase/configure
    patching file qtbase/bin/qt-cmake.in
    patching file qtbase/bin/qt-configure-module.in
    patching file qtbase/cmake/QtBaseGlobalTargets.cmake
    patching file qtbase/src/CMakeLists.txt
    patching file qtbase/src/tools/CMakeLists.txt
    patching file qtbase/src/tools/rcc/rcc.cpp
    patching file qttools/configure.cmake
    patching file qttools/src/linguist/CMakeLists.txt
    patching file qttools/src/qdbus/CMakeLists.txt
    patching file qtbase/src/corelib/thread/qyieldcpu.h
    patching file qtbase/src/plugins/platforms/xcb/qxcbatom.cpp
    patching file qtbase/src/tools/syncqt/main.cpp
    Configuring native_qt...
    '/usr/bin/cmake' '-DCMAKE_EXE_LINKER_FLAGS=' '-DCMAKE_AR=ar' '-DQT_INTERNAL_CALLED_FROM_CONFIGURE:BOOL=TRUE' '-DFEATURE_concurrent=OFF' '-DFEATURE_network=OFF' '-DFEATURE_printsupport=OFF' '-DFEATURE_sql=OFF' '-DFEATURE_testlib=OFF' '-DFEATURE_xml=OFF' '-DFEATURE_backtrace=OFF' '-DFEATURE_permissions=OFF' '-DFEATURE_process=OFF' '-DFEATURE_settings=OFF' '-DFEATURE_androiddeployqt=OFF' '-DFEATURE_macdeployqt=OFF' '-DFEATURE_windeployqt=OFF' '-DFEATURE_qmake=OFF' '-DFEATURE_linguist=ON' '-DFEATURE_assistant=OFF' '-DFEATURE_clang=OFF' '-DFEATURE_clangcpp=OFF' '-DFEATURE_designer=OFF' '-DFEATURE_pixeltool=OFF' '-DFEATURE_qdoc=OFF' '-DFEATURE_qtattributionsscanner=OFF' '-DFEATURE_qtdiag=OFF' '-DFEATURE_qtplugininfo=OFF' '-DBUILD_SHARED_LIBS=OFF' '-DCMAKE_INSTALL_PREFIX=/bitcoin/depends/x86_64-w64-mingw32' '-DCMAKE_BUILD_TYPE=Release' '-DFEATURE_pkg_config=OFF' '-DFEATURE_reduce_relocations=OFF' '-DFEATURE_use_gold_linker_alias=OFF' '-DFEATURE_gui=OFF' '-DFEATURE_widgets=OFF' '-DFEATURE_glib=OFF' '-DFEATURE_icu=OFF' '-DFEATURE_libudev=OFF' '-DINPUT_openssl=no' '-DFEATURE_zstd=OFF' '-DINPUT_pcre=qt' '-DFEATURE_system_zlib=OFF' '-G' 'Unix Makefiles' '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    -- The CXX compiler identification is GNU 13.3.0
    -- The C compiler identification is GNU 13.3.0
    -- The ASM compiler identification is GNU
    -- Found assembler: /usr/bin/gcc
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Check for working CXX compiler: /usr/bin/g++ - skipped
    -- Detecting CXX compile features
    -- Detecting CXX compile features - done
    -- Detecting C compiler ABI info
    -- Detecting C compiler ABI info - done
    -- Check for working C compiler: /usr/bin/gcc - skipped
    -- Detecting C compile features
    -- Detecting C compile features - done
    -- Checking dependencies of submodule 'qtbase'
    -- Checking dependencies of submodule 'qtactiveqt'
    -- Checking dependencies of submodule 'qtdeclarative'
    -- Checking dependencies of submodule 'qttools'
    -- Skipping optional dependency 'qtactiveqt' of 'qttools', because qtactiveqt's CMakeLists.txt couldn't be found.
    -- Skipping optional dependency 'qtdeclarative' of 'qttools', because qtdeclarative's CMakeLists.txt couldn't be found.
    -- Checking dependencies of submodule 'qttranslations'
    -- Configuring submodule 'qtbase'
    CMake Warning at qtbase/cmake/QtBuildHelpers.cmake:12 (message):
      The officially supported CMake generator for building Qt is Ninja / Ninja
      Multi-Config.  You are using: 'Unix Makefiles' instead.  Thus, you might
      encounter issues.  Use at your own risk.
    Call Stack (most recent call first):
      qtbase/cmake/QtBuildHelpers.cmake:409 (qt_internal_validate_cmake_generator)
      qtbase/cmake/QtBuild.cmake:4 (qt_internal_setup_build_and_global_variables)
      qtbase/cmake/QtSetup.cmake:6 (include)
      qtbase/cmake/QtBuildRepoHelpers.cmake:21 (include)
      qtbase/cmake/QtBuildRepoHelpers.cmake:232 (qt_build_internals_set_up_private_api)
      qtbase/cmake/QtBaseHelpers.cmake:161 (qt_build_repo_begin)
      qtbase/CMakeLists.txt:36 (qt_internal_qtbase_build_repo)
    
    
    -- [QtBase] CMAKE_BUILD_TYPE was already explicitly set to: 'Release'
    -- Configuring submodule 'qtactiveqt'
    -- Configuring submodule 'qtdeclarative'
    -- Configuring submodule 'qttools'
    -- Configuring submodule 'qttranslations'
    CMake Warning at qttranslations/translations/CMakeLists.txt:74 (message):
      Directory
      '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b/qttranslations/translations/../../qtactiveqt/src'
      for qtbase does not exist.  Skipping...
    Call Stack (most recent call first):
      qttranslations/translations/CMakeLists.txt:157 (add_ts_targets)
    
    
    CMake Warning at qttranslations/translations/CMakeLists.txt:74 (message):
      Directory
      '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b/qttranslations/translations/../../qtimageformats/src'
      for qtbase does not exist.  Skipping...
    Call Stack (most recent call first):
      qttranslations/translations/CMakeLists.txt:157 (add_ts_targets)
    
    
    CMake Warning at qttranslations/translations/CMakeLists.txt:74 (message):
      Directory
      '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b/qttranslations/translations/../../qtdeclarative/src'
      for qtdeclarative does not exist.  Skipping...
    Call Stack (most recent call first):
      qttranslations/translations/CMakeLists.txt:163 (add_ts_targets)
    
    
    CMake Warning at qttranslations/translations/CMakeLists.txt:104 (message):
      No source files located for qtdeclarative, skipping target creation
    Call Stack (most recent call first):
      qttranslations/translations/CMakeLists.txt:163 (add_ts_targets)
    
    
    CMake Warning at qttranslations/translations/CMakeLists.txt:74 (message):
      Directory
      '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b/qttranslations/translations/../../qtmultimedia/src'
      for qtmultimedia does not exist.  Skipping...
    Call Stack (most recent call first):
      qttranslations/translations/CMakeLists.txt:165 (add_ts_targets)
    
    
    CMake Warning at qttranslations/translations/CMakeLists.txt:104 (message):
      No source files located for qtmultimedia, skipping target creation
    Call Stack (most recent call first):
      qttranslations/translations/CMakeLists.txt:165 (add_ts_targets)
    
    
    CMake Warning at qttranslations/translations/CMakeLists.txt:74 (message):
      Directory
      '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b/qttranslations/translations/../../qtconnectivity/src'
      for qtconnectivity does not exist.  Skipping...
    Call Stack (most recent call first):
      qttranslations/translations/CMakeLists.txt:170 (add_ts_targets)
    
    
    CMake Warning at qttranslations/translations/CMakeLists.txt:104 (message):
      No source files located for qtconnectivity, skipping target creation
    Call Stack (most recent call first):
      qttranslations/translations/CMakeLists.txt:170 (add_ts_targets)
    
    
    CMake Warning at qttranslations/translations/CMakeLists.txt:74 (message):
      Directory
      '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b/qttranslations/translations/../../qtlocation/src'
      for qtlocation does not exist.  Skipping...
    Call Stack (most recent call first):
      qttranslations/translations/CMakeLists.txt:174 (add_ts_targets)
    
    
    CMake Warning at qttranslations/translations/CMakeLists.txt:104 (message):
      No source files located for qtlocation, skipping target creation
    Call Stack (most recent call first):
      qttranslations/translations/CMakeLists.txt:174 (add_ts_targets)
    
    
    CMake Warning at qttranslations/translations/CMakeLists.txt:74 (message):
      Directory
      '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b/qttranslations/translations/../../qtwebsockets/src'
      for qtwebsockets does not exist.  Skipping...
    Call Stack (most recent call first):
      qttranslations/translations/CMakeLists.txt:178 (add_ts_targets)
    
    
    CMake Warning at qttranslations/translations/CMakeLists.txt:104 (message):
      No source files located for qtwebsockets, skipping target creation
    Call Stack (most recent call first):
      qttranslations/translations/CMakeLists.txt:178 (add_ts_targets)
    
    
    CMake Warning at qttranslations/translations/CMakeLists.txt:74 (message):
      Directory
      '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b/qttranslations/translations/../../qtserialport/src'
      for qtserialport does not exist.  Skipping...
    Call Stack (most recent call first):
      qttranslations/translations/CMakeLists.txt:179 (add_ts_targets)
    
    
    CMake Warning at qttranslations/translations/CMakeLists.txt:104 (message):
      No source files located for qtserialport, skipping target creation
    Call Stack (most recent call first):
      qttranslations/translations/CMakeLists.txt:179 (add_ts_targets)
    
    
    CMake Warning at qttranslations/translations/CMakeLists.txt:74 (message):
      Directory
      '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b/qttranslations/translations/../../qtwebengine/src'
      for qtwebengine does not exist.  Skipping...
    Call Stack (most recent call first):
      qttranslations/translations/CMakeLists.txt:180 (add_ts_targets)
    
    
    CMake Warning at qttranslations/translations/CMakeLists.txt:104 (message):
      No source files located for qtwebengine, skipping target creation
    Call Stack (most recent call first):
      qttranslations/translations/CMakeLists.txt:180 (add_ts_targets)
    
    
    
    -- Configuration summary has been written to /bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b/config.summary
    
    Note: Using static linking will disable the use of dynamically loaded plugins. Make sure to import all needed static plugins, or compile needed modules into the library.
    
    WARNING:
    QDoc will not be compiled, probably because clang's C and C++ libraries could not be located.
    This means that you cannot build the Qt documentation. You may need to set the CMake variables
    CMAKE_PREFIX_PATH or LLVM_INSTALL_DIR to the location of your llvm installation.
    Other than clang's libraries, you may need to install another package, such as clang itself, to
    provide the ClangConfig.cmake file needed to detect your libraries. Once this file is in place,
    the configure script may be able to detect your system-installed libraries without further
    environment variables.
    
    NOTE: You WILL also need to set the FEATURE_clang CMake variable to ON to re-try finding the
    dependencies.
    
    On macOS, you can use Homebrew's llvm package.
    Run `brew install llvm` and then configure with
    
     `configure LLVM_INSTALL_DIR=/opt/homebrew/opt/llvm FEATURE_clang=ON` for macOS arm64
    or
     `configure LLVM_INSTALL_DIR=/usr/local/opt/llvm FEATURE_clang_ON` for macOS x86_64.
    
    On Linux, you can try installing the clang package from your distribution's package manager.
    On Debian / Ubuntu run `sudo apt install libclang-dev`.
    On Fedora / RHEL run `sudo dnf install clang-devel`.
    On ArchLinux run `sudo pacman -S clang llvm`.
    
    Alternatively, you can use the prebuilt binaries hosted by Qt.
    These let you link LLVM/Clang libraries statically, but only support Release builds on Windows.
    https://download.qt.io/development_releases/prebuilt/libclang/qt/
    
    After installing, reconfigure with
    
     `/qt_src/configure FEATURE_clang=ON` for a top-level build that includes the qttools repo
    or
     `/qt_build/qt-configure-module /path/to/qttools FEATURE_clang=ON` for a per-submodule build
    
    WARNING: QDoc will not be compiled because the QmlPrivate library wasn't found.
    WARNING: The Clang-based lupdate parser will not be available. Suitable LLVM and Clang C++ libraries have not been found. You will need to set the FEATURE_clangcpp CMake variable to ON to re-evaluate this check.
    WARNING: Qt Assistant will not be compiled because it requires Qt Network.
    WARNING: Qt Designer will not be compiled because it requires Qt Network.
    
    --
    
    Qt is now configured for building. Just run 'cmake --build . --parallel'
    
    Once everything is built, you must run 'cmake --install .'
    Qt will be installed into '/bitcoin/depends/x86_64-w64-mingw32'
    
    To configure and build other Qt modules, you can use the following convenience script:
            /bitcoin/depends/x86_64-w64-mingw32/bin/qt-configure-module
    
    If reconfiguration fails for some reason, try removing 'CMakeCache.txt' from the build directory
    Alternatively, you can add the --fresh flag to your CMake flags.
    
    -- Configuring done (9.4s)
    -- Generating done (0.2s)
    -- Build files have been written to: /bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b
    Building native_qt...
    gmake[1]: warning: -j15 forced in submake: resetting jobserver mode.
    gmake[1]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[2]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    [  0%] Generating ../../../mkspecs/modules/qt_ext_pcre2.pri
    [  1%] Generating ../../mkspecs/modules/qt_lib_dbus_private.pri
    [  0%] Generating mkspecs/qmodule.pri
    [  1%] Building CXX object qtbase/src/tools/syncqt/CMakeFiles/syncqt.dir/main.cpp.o
    [  1%] Generating ../../mkspecs/modules/qt_lib_core_private.pri
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    [  1%] Built target DBus_lib_pri
    [  1%] Built target BundledPcre2_ext_pri
    [  1%] Built target qmodule_pri
    [  1%] Built target Core_lib_pri
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    [  2%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_config.c.o
    [  2%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_compile_class.c.o
    [  2%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_auto_possess.c.o
    [  2%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_chkdint.c.o
    [  2%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_context.c.o
    [  2%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_chartables.c.o
    [  2%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_compile.c.o
    [  2%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_dfa_match.c.o
    [  2%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_error.c.o
    [  2%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_extuni.c.o
    [  3%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_find_bracket.c.o
    [  3%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_jit_compile.c.o
    [  3%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_maketables.c.o
    [  3%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_match.c.o
    [  3%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_match_data.c.o
    [  3%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_newline.c.o
    [  3%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_ord2utf.c.o
    [  3%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_pattern_info.c.o
    [  4%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_script_run.c.o
    [  4%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_serialize.c.o
    [  4%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_string_utils.c.o
    [  4%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_study.c.o
    [  4%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_substitute.c.o
    [  4%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_substring.c.o
    [  4%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_tables.c.o
    [  4%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_ucd.c.o
    [  5%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_valid_utf.c.o
    [  5%] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_xclass.c.o
    [  5%] Linking C static library ../../../lib/libQt6BundledPcre2.a
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    [  5%] Built target BundledPcre2
    [  5%] Linking CXX executable ../../../libexec/syncqt
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    [  5%] Built target syncqt
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    [  5%] Running syncqt.cpp for module: QtTools
    [  5%] Running syncqt.cpp for module: QtZlib
    [  5%] Running syncqt.cpp for module: QtQDocCatchConversions
    [  5%] Running syncqt.cpp for module: QtQDocCatchGenerators
    [  5%] Running syncqt.cpp for module: QtQDocCatch
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    [  5%] Built target ZlibPrivate_sync_headers
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    [  5%] Built target Tools_sync_headers
    [  5%] Built target QDocCatchPrivate_sync_headers
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    [  5%] Built target QDocCatchConversionsPrivate_sync_headers
    [  5%] Built target QDocCatchGeneratorsPrivate_sync_headers
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    [  5%] Built target ZlibPrivate
    [  5%] Running syncqt.cpp for module: QtCore
    [  5%] Running syncqt.cpp for module: QtCore
    [  5%] Built target Tools
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    [  5%] Built target Core_sync_headers
    [  5%] Generating version linker script for target Core
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    [  5%] Running syncqt.cpp for module: QtDBus
    [  5%] Built target Core_version_script
    [  5%] Building C object qtbase/src/3rdparty/zlib/CMakeFiles/BundledZLIB.dir/src/gzread.c.o
    [  5%] Running syncqt.cpp for module: QtDBus
    [  5%] Building C object qtbase/src/3rdparty/zlib/CMakeFiles/BundledZLIB.dir/src/compress.c.o
    [  5%] Building C object qtbase/src/3rdparty/zlib/CMakeFiles/BundledZLIB.dir/src/crc32.c.o
    [  5%] Building C object qtbase/src/3rdparty/zlib/CMakeFiles/BundledZLIB.dir/src/adler32.c.o
    [  5%] Building C object qtbase/src/3rdparty/zlib/CMakeFiles/BundledZLIB.dir/src/deflate.c.o
    [  5%] Building C object qtbase/src/3rdparty/zlib/CMakeFiles/BundledZLIB.dir/src/gzclose.c.o
    [  6%] Building C object qtbase/src/3rdparty/zlib/CMakeFiles/BundledZLIB.dir/src/gzlib.c.o
    [  6%] Building C object qtbase/src/3rdparty/zlib/CMakeFiles/BundledZLIB.dir/src/infback.c.o
    [  6%] Building C object qtbase/src/3rdparty/zlib/CMakeFiles/BundledZLIB.dir/src/inffast.c.o
    [  6%] Building C object qtbase/src/3rdparty/zlib/CMakeFiles/BundledZLIB.dir/src/gzwrite.c.o
    [  6%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/global/qassert.cpp.o
    [  6%] Building C object qtbase/src/3rdparty/zlib/CMakeFiles/BundledZLIB.dir/src/inflate.c.o
    [  6%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/global/qfloat16.cpp.o
    [  6%] Building C object qtbase/src/3rdparty/zlib/CMakeFiles/BundledZLIB.dir/src/inftrees.c.o
    [  6%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/global/qlogging.cpp.o
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    [  6%] Built target DBus_sync_headers
    [  7%] Generating version linker script for target DBus
    [  7%] Building C object qtbase/src/3rdparty/zlib/CMakeFiles/BundledZLIB.dir/src/trees.c.o
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    [  7%] Built target DBus_version_script
    [  7%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/global/qmalloc.cpp.o
    [  7%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/global/qtenvironmentvariables.cpp.o
    [  8%] Building C object qtbase/src/3rdparty/zlib/CMakeFiles/BundledZLIB.dir/src/uncompr.c.o
    [  8%] Building C object qtbase/src/3rdparty/zlib/CMakeFiles/BundledZLIB.dir/src/zutil.c.o
    [  8%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/io/qabstractfileengine.cpp.o
    [  8%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/io/qbuffer.cpp.o
    [  8%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/io/qdebug.cpp.o
    [  9%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/io/qdir.cpp.o
    [  9%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/io/qfile.cpp.o
    [  9%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/io/qfiledevice.cpp.o
    [  9%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/io/qfileinfo.cpp.o
    [  9%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/io/qfilesystemengine.cpp.o
    [  9%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/io/qfilesystementry.cpp.o
    [  9%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/io/qfsfileengine.cpp.o
    [  9%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/io/qfsfileengine_iterator.cpp.o
    [  9%] Linking C static library ../../../lib/libQt6BundledZLIB.a
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    [  9%] Built target BundledZLIB
    [ 10%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/io/qiodevice.cpp.o
    [ 10%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/io/qstandardpaths.cpp.o
    [ 10%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/kernel/qcoreapplication.cpp.o
    [ 10%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/kernel/qmetatype.cpp.o
    [ 10%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/kernel/qsystemerror.cpp.o
    [ 10%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/plugin/quuid.cpp.o
    [ 10%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/serialization/qcborcommon.cpp.o
    [ 10%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/serialization/qcborstreamwriter.cpp.o
    [ 10%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/serialization/qcborvalue.cpp.o
    [ 11%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/serialization/qjsonarray.cpp.o
    [ 11%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/serialization/qjsoncbor.cpp.o
    [ 11%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/serialization/qjsondocument.cpp.o
    [ 11%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/serialization/qjsonobject.cpp.o
    [ 11%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/serialization/qjsonparser.cpp.o
    [ 11%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/serialization/qjsonvalue.cpp.o
    [ 11%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/serialization/qjsonwriter.cpp.o
    [ 11%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/serialization/qtextstream.cpp.o
    [ 12%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/text/qbytearray.cpp.o
    [ 12%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/text/qbytearraylist.cpp.o
    [ 12%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/text/qbytearraymatcher.cpp.o
    [ 12%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/text/qlatin1stringmatcher.cpp.o
    [ 12%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/text/qlocale.cpp.o
    [ 12%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/text/qlocale_tools.cpp.o
    [ 12%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/text/qregularexpression.cpp.o
    [ 12%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/text/qstring.cpp.o
    [ 13%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/text/qstringbuilder.cpp.o
    [ 13%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/text/qstringconverter.cpp.o
    [ 13%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/text/qstringlist.cpp.o
    [ 13%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/time/qcalendar.cpp.o
    [ 13%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/time/qdatetime.cpp.o
    [ 13%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/time/qgregoriancalendar.cpp.o
    [ 13%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/time/qlocaltime.cpp.o
    [ 13%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/time/qromancalendar.cpp.o
    [ 13%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/time/qtimezone.cpp.o
    [ 14%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/tools/qarraydata.cpp.o
    [ 14%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/tools/qcommandlineoption.cpp.o
    [ 14%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/tools/qcommandlineparser.cpp.o
    [ 14%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/tools/qcryptographichash.cpp.o
    [ 14%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/tools/qhash.cpp.o
    [ 14%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/tools/qringbuffer.cpp.o
    [ 14%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/io/qfilesystemengine_unix.cpp.o
    [ 14%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/io/qfilesystemiterator_unix.cpp.o
    [ 15%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/io/qfsfileengine_unix.cpp.o
    [ 15%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/kernel/qcore_unix.cpp.o
    [ 15%] Building CXX object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/corelib/io/qstandardpaths_unix.cpp.o
    [ 15%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_auto_possess.c.o
    [ 15%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_chartables.c.o
    [ 15%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_chkdint.c.o
    [ 15%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_compile.c.o
    [ 15%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_compile_class.c.o
    [ 16%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_config.c.o
    [ 16%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_context.c.o
    [ 16%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_dfa_match.c.o
    [ 16%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_error.c.o
    [ 16%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_extuni.c.o
    [ 16%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_find_bracket.c.o
    [ 16%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_jit_compile.c.o
    [ 16%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_maketables.c.o
    [ 16%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_match.c.o
    [ 17%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_match_data.c.o
    [ 17%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_newline.c.o
    [ 17%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_ord2utf.c.o
    [ 17%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_pattern_info.c.o
    [ 17%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_script_run.c.o
    [ 17%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_serialize.c.o
    [ 17%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_string_utils.c.o
    [ 17%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_study.c.o
    [ 18%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_substitute.c.o
    [ 18%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_substring.c.o
    [ 18%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_tables.c.o
    [ 18%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_ucd.c.o
    [ 18%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_valid_utf.c.o
    [ 18%] Building C object qtbase/src/tools/bootstrap/CMakeFiles/Bootstrap.dir/__/__/3rdparty/pcre2/src/pcre2_xclass.c.o
    [ 18%] Linking CXX static library libBootstrap.a
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    [ 18%] Built target Bootstrap
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    [ 19%] Building CXX object qtbase/src/tools/moc/CMakeFiles/moc.dir/preprocessor.cpp.o
    [ 19%] Building CXX object qtbase/src/tools/moc/CMakeFiles/moc.dir/generator.cpp.o
    [ 19%] Building CXX object qtbase/src/tools/moc/CMakeFiles/moc.dir/moc.cpp.o
    [ 19%] Building CXX object qtbase/src/tools/moc/CMakeFiles/moc.dir/parser.cpp.o
    [ 19%] Building CXX object qtbase/src/tools/moc/CMakeFiles/moc.dir/token.cpp.o
    [ 19%] Building CXX object qtbase/src/tools/cmake_automoc_parser/CMakeFiles/cmake_automoc_parser.dir/main.cpp.o
    [ 19%] Building CXX object qtbase/src/tools/moc/CMakeFiles/moc.dir/collectjson.cpp.o
    [ 19%] Building CXX object qtbase/src/tools/moc/CMakeFiles/moc.dir/main.cpp.o
    [ 19%] Linking CXX executable ../../../libexec/cmake_automoc_parser
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    [ 19%] Built target cmake_automoc_parser
    [ 19%] Linking CXX executable ../../../libexec/moc
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    [ 19%] Built target moc
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    [ 19%] Generating .rcc/qmimeprovider_database.cpp
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    [ 19%] Built target Core_autogen_timestamp_deps
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    [ 19%] Automatic MOC for target Core
    AutoMoc: /bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b/qtbase/src/corelib/io/qprocess.h: note: No relevant classes found. No output generated.
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    [ 19%] Built target Core_autogen
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    [ 19%] Running AUTOMOC file extraction for target Core
    [ 19%] Generating prl file for target Core
    [ 19%] Generating kernel/moc_qobject.cpp, kernel/moc_qobject.cpp.json
    [ 19%] Running moc --collect-json for target Core
    gmake[3]: Leaving directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    gmake[3]: Entering directory '/bitcoin/depends/work/build/x86_64-w64-mingw32/native_qt/6.8.4-d383521320b'
    [ 19%] Building CXX object qtbase/src/corelib/CMakeFiles/Core.dir/cmake_pch.hxx.gch
    [ 19%] Building CXX object qtbase/src/corelib/CMakeFiles/Core.dir/compat/removed_api.cpp.o
    [ 19%] Building CXX object qtbase/src/corelib/CMakeFiles/Core.dir/global/qsimd.cpp.o
    [ 19%] Building CXX object qtbase/src/corel
    <snip>
    

    </details>

  77. maflcko commented at 9:46 AM on August 20, 2026: member

    Somewhat related, but do we still need/want to "mimic" Guix, if we can just use it directly: #36006? I can understand that this would be done any-ways, for convenience.

    On my aarch64 box, the nix approach here worked fine, but installing Guix was tedious: I had to pass --max-silent-time=0 to compilations to avoid timeouts and also disable some tests with internal timeout detection via EDITOR=vim guix edit $pkg.

    Happy to close this pull, if someone wants to work on guix, but given the above and given that guix was nuked from Ubuntu/Debian, I won't be working on this.

    Edit: Also guix will likely eat more cache space?

    For example, depending on the OS (Debian Bookworm), the apt install nix-bin instructions also might not work (at least, not out of the box):

    Debian Bookworm is EOL, so trying to spend time on it doesn't seem too useful. In any case, it ships with an ancient mingw-10, which isn't tested in CI, so the resulting binary is already unsupported on current master?

  78. hebasto commented at 10:10 AM on August 20, 2026: member

    Somewhat related, but do we still need/want to "mimic" Guix, if we can just use it directly: #36006? I can understand that this would be done any-ways, for convenience.

    #36006 mimics the release process without building the GUI tests or running any tests.

  79. fanquake commented at 10:23 AM on August 20, 2026: member

    Debian Bookworm is EOL,

    It's LTS until 2028? (The main point here was just that there is some bound on what versions of Nix will work)

    I also tested this in a vanilla Ubuntu 24.04 container (Podman), and the Nix shell works, but then building depends doesn't:

    I thought it might be a local issue, but I see the same when running a Ubuntu 24.04 container, on a remote aarch64 box.

    What does work locally, or remotely, for me, is using time env -i HOME="$HOME" PATH="$PATH" USER="$USER" MAKEJOBS="-j17" FILE_ENV="./ci/test/00_setup_env_win64.sh" ./ci/test_run_all.sh.

  80. maflcko commented at 12:23 PM on August 20, 2026: member

    Debian Bookworm is EOL,

    It's LTS until 2028? (The main point here was just that there is some bound on what versions of Nix will work)

    I am happy to add instructions on how to install a more recent nix with the "official installer", but I am not sure how much value there is, because adding some curl|sh to the docs requires additional maintenance from our side and risks copy-pasting nix docs.

    I can add something like this?

    diff --git a/depends/README.md b/depends/README.md
    index 9018fc12f1..fd4e25cdc5 100644
    --- a/depends/README.md
    +++ b/depends/README.md
    @@ -171,7 +171,7 @@ Using UCRT:
         apt install g++-mingw-w64-ucrt64
     
     Some Ubuntu or Debian versions may not offer a working package. In this case,
    -you may install `nix-bin` and use the Nix shell from the repository root:
    +you may install `nix-bin` (via apt or via the official installer) and use the Nix shell from the repository root:
     
         apt install nix-bin
         NIX_BUILD_SHELL=bash HOST=x86_64-w64-mingw32 nix-shell contrib/devtools/shell-win64-cross.nix  # MSVCRT
    

    But again, the value of trying to support win-cross compilation on Debian Bookworm (and adding docs for it) seems limited?

    If you want something to copy-paste, you can try:

        5  sh <(curl --proto '=https' --tlsv1.2 -L https://nixos.org/nix/install) --no-daemon 
        6  . "$HOME/.nix-profile/etc/profile.d/nix.sh"
        8  type -a nix-shell
        9  hash -r
       13  export PATH="/root/.nix-profile/bin:$PATH"
       15  type -a nix-shell
       16  NIX_BUILD_SHELL=bash HOST=x86_64-w64-mingw32 nix-shell contrib/devtools/shell-win64-cross.nix  
    

    One could even consider the following change:

    diff --git a/doc/build-windows.md b/doc/build-windows.md
    index 0af73681d8..92002ab904 100644
    --- a/doc/build-windows.md
    +++ b/doc/build-windows.md
    @@ -9,6 +9,10 @@ The options known to work for building Bitcoin Core on Windows are:
     * On Windows, using [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/about) and Mingw-w64.
     * On Windows, using [Microsoft Visual Studio](https://visualstudio.microsoft.com). See [`build-windows-msvc.md`](./build-windows-msvc.md).
     
    +When using Mingw, it is recommended to use the version of Mingw used in the
    +release builds from Guix, because that version is also used by CI. Other
    +versions of Mingw, especially older ones are not tested and may be broken.
    +
     Other options may work, but are not officially tested:
     
     * On Windows, using a POSIX compatibility layer application such as [cygwin](https://www.cygwin.com/) or [msys2](https://www.msys2.org/).
    

    But this seems increasingly unrelated to the changes here, whose goal is to add a new option to build win64-cross.

  81. fanquake commented at 2:26 PM on August 20, 2026: member

    I think we can leave this as-is for now, and revisit it if the scope of what Nix is being used for, begins to change.

  82. fanquake merged this on Aug 20, 2026
  83. fanquake closed this on Aug 20, 2026

  84. maflcko deleted the branch on Aug 20, 2026
  85. maflcko commented at 2:58 PM on August 20, 2026: member

    For reference, on my machine, the build passed for both Noble and Bookworm:

    [nix-shell:/b-c]# cmake --build build -t bitcoind -j $(nproc) && uname -m && (. /etc/os-release && echo "$PRETTY_NAME") && nix-shell --version
    [  0%] Generating bitcoin-build-info.h
    [  0%] Built target secp256k1_precomputed
    [  4%] Built target minisketch
    [  4%] Built target crc32c
    [  7%] Built target univalue
    [ 14%] Built target bitcoin_crypto
    [ 16%] Built target bitcoin_consensus
    [ 19%] Built target secp256k1
    [ 30%] Built target leveldb
    [ 33%] Built target bitcoin_zmq
    [ 33%] Built target generate_build_info
    [ 33%] Built target bitcoin_clientversion
    [ 42%] Built target bitcoin_util
    [ 50%] Built target bitcoin_wallet
    [ 66%] Built target bitcoin_common
    [ 97%] Built target bitcoin_node
    [ 97%] Building CXX object src/CMakeFiles/bitcoind.dir/bitcoind.cpp.obj
    [ 97%] Linking CXX executable ../bin/bitcoind.exe
    [100%] Built target bitcoind
    x86_64
    Debian GNU/Linux 12 (bookworm)
    nix-shell (Nix) 2.35.2
    
    
    [nix-shell:/b-c]# cmake --build build -t bitcoind -j $(nproc) && uname -m && (. /etc/os-release && echo "$PRETTY_NAME") && nix-shell --version
    [  0%] Generating bitcoin-build-info.h
    [  0%] Built target crc32c
    [  2%] Built target secp256k1_precomputed
    [  4%] Built target minisketch
    [  7%] Built target univalue
    [  9%] Built target bitcoin_consensus
    [ 16%] Built target bitcoin_crypto
    [ 28%] Built target leveldb
    [ 30%] Built target secp256k1
    [ 33%] Built target bitcoin_zmq
    [ 33%] Built target generate_build_info
    [ 33%] Built target bitcoin_clientversion
    [ 42%] Built target bitcoin_util
    [ 59%] Built target bitcoin_common
    [ 66%] Built target bitcoin_wallet
    [ 97%] Built target bitcoin_node
    [ 97%] Building CXX object src/CMakeFiles/bitcoind.dir/bitcoind.cpp.obj
    [ 97%] Linking CXX executable ../bin/bitcoind.exe
    [100%] Built target bitcoind
    x86_64
    Ubuntu 24.04.4 LTS
    nix-shell (Nix) 2.18.1
    
    

    I think we can leave this as-is for now, and revisit it if the scope of what Nix is being used for, begins to change.

    I was thinking maybe the clang-latest binaries in CI can use nix and replace apt.llvm? But I haven't tried this.

  86. maflcko added the label Windows on Aug 20, 2026

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-08-31 18:51 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me