Skip to content

build: target aarch64 over armv7, update to macOS 15.0 SDK (Xcode 16.0), add verification step to setup-sdk#7184

Merged
PastaPastaPasta merged 5 commits intodashpay:developfrom
kwvg:xcode_bump
Feb 28, 2026
Merged

build: target aarch64 over armv7, update to macOS 15.0 SDK (Xcode 16.0), add verification step to setup-sdk#7184
PastaPastaPasta merged 5 commits intodashpay:developfrom
kwvg:xcode_bump

Conversation

@kwvg
Copy link
Collaborator

@kwvg kwvg commented Feb 28, 2026

Additional Information

  • Dependency for build: add rudimentary support for Rust components in build system, crate vendoring, patch loader paths to Guix store locations #7109

  • To ensure our list of targets validated are matched with targets used for releases (see guix-start), we switch out arm-linux-gnueabihf with aarch64-linux-gnu, this is now reflected by changes to our GitHub CI configuration, build scripts, Guix CI action.

    • Additionally, since dash#7047, we can't assume our host is x86_64 and must update packages to explicitly mention the desired arch instead of relying on that assumption.
  • As mentioned in dash#6927, we need to update the macOS SDK to ensure we have standards-conformant definitions to deal with dtolnay/cxx#1574.

    • This does result in us using a higher SDK version than used upstream, requiring us to update the source URLs to our own fallback servers as upstream is not expected to host this version of the consolidated SDK. This has no effect on the target version of macOS, which will continue to be macOS 14.
  • SDKs shipped after Xcode 15.3 (15E204a) seem to have problems with Clang not able to determine the include paths correctly (see below for error). To resolve this issue, we now explicitly fetch the resource directory and add it to the includes list.

    Build log:
    In file included from conftest.cc:3:
    In file included from /src/dash/depends/SDKs/Xcode-16.0-16A242d-extracted-SDK-with-libcxx-headers/usr/include/c++/v1/iostream:43:
    [...]
    In file included from /src/dash/depends/SDKs/Xcode-16.0-16A242d-extracted-SDK-with-libcxx-headers/usr/include/machine/_types.h:34:
    /src/dash/depends/SDKs/Xcode-16.0-16A242d-extracted-SDK-with-libcxx-headers/usr/include/arm/_types.h:75:9: error: unknown type name 'ptrdiff_t'
       75 | typedef ptrdiff_t               __darwin_ptrdiff_t;     /* ptr1 - ptr2 */
          |         ^
    /src/dash/depends/SDKs/Xcode-16.0-16A242d-extracted-SDK-with-libcxx-headers/usr/include/arm/_types.h:85:9: error: unknown type name 'size_t'
       85 | typedef size_t                  __darwin_size_t;        /* sizeof() */
          |         ^
    In file included from conftest.cc:3:
    [...]
    In file included from /src/dash/depends/SDKs/Xcode-16.0-16A242d-extracted-SDK-with-libcxx-headers/usr/include/c++/v1/__compare/three_way_comparable.h:12:
    /src/dash/depends/SDKs/Xcode-16.0-16A242d-extracted-SDK-with-libcxx-headers/usr/include/c++/v1/__compare/common_comparison_category.h:40:11: error: reference to unresolved using declaration
       40 | template <size_t _Size>
          |           ^
    /src/dash/depends/SDKs/Xcode-16.0-16A242d-extracted-SDK-with-libcxx-headers/usr/include/c++/v1/cstddef:61:1: note: using declaration annotated with 'using_if_exists' here
       61 | using ::size_t _LIBCPP_USING_IF_EXISTS;
          | ^
    [...]
    In file included from conftest.cc:3:
    [...]
    In file included from /src/dash/depends/SDKs/Xcode-16.0-16A242d-extracted-SDK-with-libcxx-headers/usr/include/malloc/_malloc.h:44:
    /src/dash/depends/SDKs/Xcode-16.0-16A242d-extracted-SDK-with-libcxx-headers/usr/include/malloc/_malloc_type.h:54:110: error: unknown type name 'size_t'; did you mean 'sig_t'?
       54 | _MALLOC_TYPE_AVAILABILITY void * __sized_by_or_null(size) malloc_type_realloc(void * __unsafe_indexable ptr, size_t size, malloc_type_id_t type_id) __result_use_check __alloc_size(2);
          |                                                                                                              ^
    /src/dash/depends/SDKs/Xcode-16.0-16A242d-extracted-SDK-with-libcxx-headers/usr/include/sys/signal.h:331:16: note: 'sig_t' declared here
    331 | typedef void (*sig_t)(int);     /* type of signal function */
          |                ^
    
  • Due to conflicting definitions between the native and cross toolchains, C{,PLUS}_INCLUDE_PATH needs to be unset to allow the cross toolchain's definitions to prevail (see build error below).

    Build log:
    In file included from conftest.cc:3:
    In file included from /src/dash/depends/SDKs/Xcode-16.0-16A242d-extracted-SDK-with-libcxx-headers/usr/include/c++/v1/iostream:43:
    [...]
    In file included from /gnu/store/8xqflpdzl6vzj3sas35q0g1ayiz0895k-gcc-toolchain-13.3.0/include/bits/types/mbstate_t.h:4:
    /gnu/store/8xqflpdzl6vzj3sas35q0g1ayiz0895k-gcc-toolchain-13.3.0/include/bits/types/__mbstate_t.h:21:3: error: typedef redefinition with different types ('struct __mbstate_t' vs 'union __mbstate_t')
       21 | } __mbstate_t;
          |   ^
    /src/dash/depends/SDKs/Xcode-16.0-16A242d-extracted-SDK-with-libcxx-headers/usr/include/i386/_types.h:94:3: note: previous definition is here
       94 | } __mbstate_t;
          |   ^
    1 error generated.
    configure:10623: $? = 1
    failed program was:
    /* This test rejects g++ 2.7.2 which doesn't have <iostream>, only a
       pre-standard iostream.h. */
    #include <iostream>
    

Breaking Changes

None expected.

Checklist

  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas (note: N/A)
  • I have added or updated relevant unit/integration/functional/e2e tests
  • I have made corresponding changes to the documentation
  • I have assigned this pull request to a milestone (for repository code-owners and collaborators only)

Since the container image could be run on different architectures we
can't implicitly assume that the x86_64 compiler is available, it needs
to be made explicit.

Additionally, we stopped releasing ARMv7 (32-bit) binaries a long time
ago, we should test against ARMv8 (64-bit) instead.
@kwvg kwvg added this to the 24 milestone Feb 28, 2026
@github-actions
Copy link

github-actions bot commented Feb 28, 2026

✅ No Merge Conflicts Detected

This PR currently has no conflicts with other open PRs.

@kwvg
Copy link
Collaborator Author

kwvg commented Feb 28, 2026

GitHub Actions build

https://github.com/kwvg/dash/actions/runs/22501928993

Checksums for ca6c6f5

df7dd9707ce3c22cf8e12b32ee927482e25374e792f5cffec17f4c6ce9025e29  dashcore-23.1.0-146-gca6c6f5f7b2f-aarch64-linux-gnu-debug.tar.gz
19643be477dfc0530a08638a0677bf0cde620fe44247f32eb6c6d98aebfea3d4  dashcore-23.1.0-146-gca6c6f5f7b2f-aarch64-linux-gnu.tar.gz
580ccb65175a30ae52b0fad335d7d7eb90d31c9230f965c501b4342ecf1f6af2  dashcore-23.1.0-146-gca6c6f5f7b2f-arm64-apple-darwin-unsigned.tar.gz
bdd411a7435008904995855f391f77bdf8f96a25e591c45e169eac119128a93b  dashcore-23.1.0-146-gca6c6f5f7b2f-arm64-apple-darwin-unsigned.zip
66ee676918439dc93980c2c3a085043bbf0ad7a0a4f0ed1f686bd0ca0bac3bce  dashcore-23.1.0-146-gca6c6f5f7b2f-arm64-apple-darwin.tar.gz
bfa4d042f868af455dc9e45fd59eb149ac8309d0e307e11debb332087bb694fd  dashcore-23.1.0-146-gca6c6f5f7b2f.tar.gz
63bdcafec143bf28575053c3bcc1bc6da8095c3c053b0a3f95f4005b2bce7b43  dashcore-23.1.0-146-gca6c6f5f7b2f-riscv64-linux-gnu-debug.tar.gz
8afcb0ee0c76305775add1cd8c3d4128d2731ede50a2a4f1bf972eaa2eaadd13  dashcore-23.1.0-146-gca6c6f5f7b2f-riscv64-linux-gnu.tar.gz
0c961ed2c42b2f229e5026c8fbfcb5e694b875f0b48cebb45299a8b16eaf2780  dashcore-23.1.0-146-gca6c6f5f7b2f-x86_64-apple-darwin-unsigned.tar.gz
f708dcc21e7af5a469c2625f3eabb1270c766425e0fe35c697b7563f58a441ce  dashcore-23.1.0-146-gca6c6f5f7b2f-x86_64-apple-darwin-unsigned.zip
db97f1b0372d21d1b4cdbd0695fe2ed2f0aa1abaab0c12a61ef2f3c757806b63  dashcore-23.1.0-146-gca6c6f5f7b2f-x86_64-apple-darwin.tar.gz
edec03ea23ff0674217f088cfec80376d2d6960b2d080016849e58c7ed2e0517  dashcore-23.1.0-146-gca6c6f5f7b2f-x86_64-linux-gnu-debug.tar.gz
3be4b9168916e974e14dbc6473593207271035302726b488d1198dcd6482f286  dashcore-23.1.0-146-gca6c6f5f7b2f-x86_64-linux-gnu.tar.gz
50626a4880d43a4e8eee1ee66ffc7b06dfd2326e73ff77fdf9ddc19bddfa3d8e  dashcore-23.1.0-146-gca6c6f5f7b2f-win64-debug.zip
33683e83b6aadc647b567c8c948a0f81c323e0b4d7bcb8d1fee591fb32b193f4  dashcore-23.1.0-146-gca6c6f5f7b2f-win64-setup-unsigned.exe
cdf4b3dda9fd071c634544ac5d0bf4e427ef0aeea0cf19b90d112a51933b0d7d  dashcore-23.1.0-146-gca6c6f5f7b2f-win64-unsigned.tar.gz
4b44330fbe8734b84653365959bd3ebdf18b4b219ddb280f2efeebf95fbbcc3f  dashcore-23.1.0-146-gca6c6f5f7b2f-win64.zip

@DashCoreAutoGuix
Copy link

Guix Automation has began to build this PR tagged as v23.1.0-devpr7184.ca6c6f5f. A new comment will be made when the image is pushed.

@kwvg kwvg marked this pull request as ready for review February 28, 2026 08:14
@coderabbitai
Copy link

coderabbitai bot commented Feb 28, 2026

Walkthrough

This pull request migrates CI and build targets from 32-bit ARM (arm-linux-gnueabihf / arm-linux) to 64-bit ARM (aarch64-linux-gnu / aarch64-linux) across GitHub Actions workflows, CI scripts, Dockerfiles, and container setup. It updates macOS/Xcode versions (15.0→16.0) and associated SDK identifiers and checksums, switches default SDK URLs to a Dash S3 bucket, and adds SHA-256 verification for the macOS SDK download. Darwin makefiles gain clang resource-dir awareness and adjusted include handling.

Sequence Diagram(s)

mermaid
sequenceDiagram
actor "GitHub Action" as GH
participant "setup-sdk script" as Script
participant "S3 (Xcode SDK)" as S3
participant "sha256sum" as SHA
participant "Extractor" as Extract

GH->>Script: invoke setup-sdk
Script->>S3: download Xcode archive
S3-->>Script: return archive
Script->>SHA: compute SHA-256 of archive
SHA-->>Script: provide checksum
Script->>Script: compare checksum with XCODE_AR_HASH
alt checksum matches
    Script->>Extract: extract archive
    Extract-->>Script: extraction success
    Script-->>GH: continue
else checksum mismatch
    Script-->>GH: print error & exit non-zero
end

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the three main changes: switching to aarch64 architecture, updating macOS SDK to version 15.0 (Xcode 16.0), and adding verification to setup-sdk.
Description check ✅ Passed The description comprehensively explains the rationale for all changes, including alignment with release targets, macOS SDK updates, toolchain issues, and includes detailed build logs and technical context.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
contrib/guix/README.md (1)

225-227: ⚠️ Potential issue | 🟡 Minor

Update default HOSTS documentation to remove ARMv7.

The documented default list still includes arm-linux-gnueabihf, which conflicts with this PR’s architecture migration to aarch64-only for ARM Linux targets.

Suggested doc fix
-  _(defaults to "x86\_64-linux-gnu arm-linux-gnueabihf aarch64-linux-gnu
+  _(defaults to "x86\_64-linux-gnu aarch64-linux-gnu
   powerpc64-linux-gnu powerpc64le-linux-gnu
   x86\_64-w64-mingw32 x86\_64-apple-darwin arm64-apple-darwin")_
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@contrib/guix/README.md` around lines 225 - 227, Update the README default
HOSTS list to remove the ARMv7 entry "arm-linux-gnueabihf": locate the
parentheses containing the defaults string (the line showing _(defaults to
"x86_64-linux-gnu arm-linux-gnueabihf aarch64-linux-gnu ...")_) and delete the
"arm-linux-gnueabihf" token so the documented defaults reflect the new
aarch64-only ARM targets.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Outside diff comments:
In `@contrib/guix/README.md`:
- Around line 225-227: Update the README default HOSTS list to remove the ARMv7
entry "arm-linux-gnueabihf": locate the parentheses containing the defaults
string (the line showing _(defaults to "x86_64-linux-gnu arm-linux-gnueabihf
aarch64-linux-gnu ...")_) and delete the "arm-linux-gnueabihf" token so the
documented defaults reflect the new aarch64-only ARM targets.

ℹ️ Review info

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4000876 and ca6c6f5.

📒 Files selected for processing (13)
  • .github/workflows/build.yml
  • .github/workflows/guix-build.yml
  • ci/dash/matrix.sh
  • ci/test/00_setup_env.sh
  • ci/test/00_setup_env_aarch64.sh
  • ci/test/00_setup_env_mac.sh
  • contrib/containers/ci/ci.Dockerfile
  • contrib/containers/deploy/Dockerfile.GitHubActions.Dispatch
  • contrib/containers/guix/scripts/setup-sdk
  • contrib/guix/README.md
  • contrib/guix/symbol-check.py
  • contrib/macdeploy/README.md
  • depends/hosts/darwin.mk

@DashCoreAutoGuix
Copy link

Guix Automation has failed with an unknown error for tag v23.1.0-devpr7184.ca6c6f5f

kwvg added 4 commits February 28, 2026 15:55
…olution

This is an issue with more recent SDKs (observed from Xcode 15.3 15E204a
shipped SDKs onwards) and explicit inclusion resolves it. We have to use
`:=` to force immediate resolution.
@DashCoreAutoGuix
Copy link

Guix Automation has began to build this PR tagged as v23.1.0-devpr7184.1f64bad3. A new comment will be made when the image is pushed.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
depends/hosts/darwin.mk (1)

36-36: Stale comment references -nostdlibinc but code now uses -nostdinc.

The comment on line 36 still mentions -nostdlibinc, but the actual flags on lines 57 and 62 now use -nostdinc (and -nostdinc++). Consider updating the comment to reflect the current implementation.

📝 Suggested comment update
-#     -isysroot$(OSX_SDK) -nostdlibinc
+#     -isysroot$(OSX_SDK) -nostdinc / -nostdinc++
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@depends/hosts/darwin.mk` at line 36, The commented-out example still mentions
the old flag "-nostdlibinc" while the actual makefile now uses "-nostdinc" and
"-nostdinc++"; update the comment text "#     -isysroot$(OSX_SDK) -nostdlibinc"
to reference the current flags (e.g., "-nostdinc" or "-nostdinc++") so the
comment matches the real flags used elsewhere in the file.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@depends/hosts/darwin.mk`:
- Line 36: The commented-out example still mentions the old flag "-nostdlibinc"
while the actual makefile now uses "-nostdinc" and "-nostdinc++"; update the
comment text "#     -isysroot$(OSX_SDK) -nostdlibinc" to reference the current
flags (e.g., "-nostdinc" or "-nostdinc++") so the comment matches the real flags
used elsewhere in the file.

ℹ️ Review info

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ca6c6f5 and 1f64bad.

📒 Files selected for processing (7)
  • ci/test/00_setup_env.sh
  • ci/test/00_setup_env_mac.sh
  • contrib/containers/guix/scripts/setup-sdk
  • contrib/guix/README.md
  • contrib/guix/symbol-check.py
  • contrib/macdeploy/README.md
  • depends/hosts/darwin.mk
🚧 Files skipped from review as they are similar to previous changes (5)
  • contrib/containers/guix/scripts/setup-sdk
  • contrib/guix/symbol-check.py
  • ci/test/00_setup_env.sh
  • contrib/macdeploy/README.md
  • ci/test/00_setup_env_mac.sh

@DashCoreAutoGuix
Copy link

Guix Automation has failed with an unknown error for tag v23.1.0-devpr7184.1f64bad3

Copy link

@UdjinM6 UdjinM6 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Compiles on macos, same hashes in Guix for ca6c6f5. Rebase to 1f64bad is clean.

light ACK 1f64bad

@PastaPastaPasta PastaPastaPasta merged commit 2e6a225 into dashpay:develop Feb 28, 2026
44 of 46 checks passed
export BASE_BUILD_DIR=${BASE_BUILD_DIR:-$BASE_SCRATCH_DIR/build-ci}
export PREVIOUS_RELEASES_DIR=${PREVIOUS_RELEASES_DIR:-$BASE_ROOT_DIR/releases/$HOST}
export SDK_URL=${SDK_URL:-https://bitcoincore.org/depends-sources/sdks}
export SDK_URL=${SDK_URL:-https://s3.us-west-2.amazonaws.com/dash-depends-sources}
Copy link
Collaborator

@knst knst Mar 1, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NACK. Who is owner of this file? What is a procedure to update version? where are docs for it? @ktechmidas are you aware of this file?

knst added a commit to knst/dash that referenced this pull request Mar 1, 2026
PastaPastaPasta added a commit that referenced this pull request Mar 12, 2026
…ode-26.1.1-17B100

2c779e3 docs: TODO to reapply reverted part of bitcoin#30451 (Konstantin Akimov)
63e9f7c Merge bitcoin#32584: depends: hard-code necessary c(xx)flags rather than setting them per-host (Ava Chow)
e4ad957 fix: minimum sdk & minumum xcode are not the same (Konstantin Akimov)
3dc4624 fix: hash of archive and extra debug output (Konstantin Akimov)
153959e Merge bitcoin#32009: contrib: turn off compression of macOS SDK to fix determinism (across distros) (merge-script)
b68d7a3 Merge bitcoin#34036: contrib: update macOS SDK to Xcode-26.1.1-17B100 (merge-script)
eda7eb8 Revert "fix(build): include resource directory in search path for include resolution" (Konstantin Akimov)
4fcc7b4 Revert "build: update to macOS 15.0 SDK from Xcode 16.0" (Konstantin Akimov)

Pull request description:

  ## Issue being fixed or feature implemented
  #7184 introduces a new product to maintain and take care, but without docs, without owner, without a processes to update it to new version.
  Particularly, this file: `export SDK_URL=${SDK_URL:-https://s3.us-west-2.amazonaws.com/dash-depends-sources}`

  ## What was done?
  Partially reverted #7184 and backported 34036 instead.

  ## How Has This Been Tested?
  See CI run

  ## Breaking Changes
  Xcode 26.1 is used instead Xcode 16.

  ## Checklist:
  - [x] I have performed a self-review of my own code
  - [ ] I have commented my code, particularly in hard-to-understand areas
  - [ ] I have added or updated relevant unit/integration/functional/e2e tests
  - [ ] I have made corresponding changes to the documentation
  - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_

ACKs for top commit:
  UdjinM6:
    utACK 2c779e3
  kwvg:
    utACK 2c779e3

Tree-SHA512: 155699f6a293d989c17d20ce1114a72e47adf06ea59db570ba03b89d81ca9fc3957aaba685f505db54fb8cab4dc706826adaa2328d838a598e8671233ea300b5
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants