From e3d108984e17712977f6b1aa80b20c176078c6bb Mon Sep 17 00:00:00 2001 From: speak-agent <248744407+speak-agent@users.noreply.github.com> Date: Thu, 17 Sep 2026 19:36:38 +0800 Subject: [PATCH] ci-macos: the raw compiles use the SDK mcpp selects xcode-27-arm64 20260912 updated the Command Line Tools SDK, whose .tbd stubs list arm64e.x1. ld64.lld 22.1.8 does not parse that architecture (support landed upstream in llvm-project#222721, after 22.1.8), and the raw compiles in this job took the SDK from the xlings LLVM package's clang++.cfg, which names the Command Line Tools SDK. mcpp itself passes --no-default-config and uses xcrun --show-sdk-path, and the mcpp e2e suite on the same image is green. The raw compiles now state -isysroot from xcrun, so the job measures what mcpp builds. --- .github/workflows/ci-macos.yml | 46 +++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/.github/workflows/ci-macos.yml b/.github/workflows/ci-macos.yml index 643d32d5..cc8bde2a 100644 --- a/.github/workflows/ci-macos.yml +++ b/.github/workflows/ci-macos.yml @@ -81,6 +81,18 @@ jobs: - name: The floating macros mcpp states for an Apple target run: echo 'APPLE_FLOAT_MACROS=-DINFINITY=HUGE_VALF -DNAN=__builtin_nanf("0x7fc00000")' >> "$GITHUB_ENV" + # THE SDK mcpp SELECTS, NOT THE ONE THE PACKAGE'S clang++.cfg NAMES. The + # xlings LLVM package writes `--sysroot=/Library/Developer/CommandLineTools/ + # SDKs/MacOSX.sdk` into its configuration; mcpp passes --no-default-config + # and uses `xcrun --show-sdk-path` (modules/platform/src/macos/macos.cppm). + # On xcode-27-arm64 20260912 the Command Line Tools SDK lists `arm64e.x1` + # in its .tbd stubs, which ld64.lld 22.1.8 does not parse (support landed + # upstream in llvm-project#222721, after 22.1.8), while the SDK xcrun + # selects links. These raw compiles state the SDK the way mcpp does, so the + # job measures what mcpp builds rather than the package's default. + - name: The SDK mcpp selects for an Apple target + run: echo "APPLE_SYSROOT=-isysroot $(xcrun --show-sdk-path)" >> "$GITHUB_ENV" + - name: Test — non-module C++23 compilation run: | WORK=$(mktemp -d) @@ -93,7 +105,7 @@ jobs: return 0; } EOF - "$CXX" -std=c++23 $APPLE_FLOAT_MACROS -o hello main.cpp + "$CXX" $APPLE_SYSROOT -std=c++23 $APPLE_FLOAT_MACROS -o hello main.cpp ./hello - name: Test — import std (two-stage module compilation) @@ -112,11 +124,11 @@ jobs: echo "=== Step 1: Precompile std module ===" mkdir -p pcm.cache - "$CXX" -std=c++23 $APPLE_FLOAT_MACROS -Wno-reserved-module-identifier \ + "$CXX" $APPLE_SYSROOT -std=c++23 $APPLE_FLOAT_MACROS -Wno-reserved-module-identifier \ --precompile "$STD_CPPM" -o pcm.cache/std.pcm echo "=== Step 2: Compile std.pcm → std.o ===" - "$CXX" -std=c++23 $APPLE_FLOAT_MACROS -Wno-reserved-module-identifier \ + "$CXX" $APPLE_SYSROOT -std=c++23 $APPLE_FLOAT_MACROS -Wno-reserved-module-identifier \ pcm.cache/std.pcm -c -o std.o echo "=== Step 3: Compile main.cpp with import std ===" @@ -127,10 +139,10 @@ jobs: return 0; } EOF - "$CXX" -std=c++23 $APPLE_FLOAT_MACROS -fmodule-file=std=pcm.cache/std.pcm -c main.cpp -o main.o + "$CXX" $APPLE_SYSROOT -std=c++23 $APPLE_FLOAT_MACROS -fmodule-file=std=pcm.cache/std.pcm -c main.cpp -o main.o echo "=== Step 4: Link ===" - "$CXX" main.o std.o -o hello_modules + "$CXX" $APPLE_SYSROOT main.o std.o -o hello_modules echo "=== Step 5: Run ===" ./hello_modules @@ -150,16 +162,16 @@ jobs: mkdir -p pcm.cache # Build std first - "$CXX" -std=c++23 $APPLE_FLOAT_MACROS -Wno-reserved-module-identifier \ + "$CXX" $APPLE_SYSROOT -std=c++23 $APPLE_FLOAT_MACROS -Wno-reserved-module-identifier \ --precompile "$STD_CPPM" -o pcm.cache/std.pcm - "$CXX" -std=c++23 $APPLE_FLOAT_MACROS -Wno-reserved-module-identifier \ + "$CXX" $APPLE_SYSROOT -std=c++23 $APPLE_FLOAT_MACROS -Wno-reserved-module-identifier \ pcm.cache/std.pcm -c -o std.o # Build std.compat (depends on std) - "$CXX" -std=c++23 $APPLE_FLOAT_MACROS -Wno-reserved-module-identifier \ + "$CXX" $APPLE_SYSROOT -std=c++23 $APPLE_FLOAT_MACROS -Wno-reserved-module-identifier \ -fmodule-file=std=pcm.cache/std.pcm \ --precompile "$STD_COMPAT_CPPM" -o pcm.cache/std.compat.pcm - "$CXX" -std=c++23 $APPLE_FLOAT_MACROS -Wno-reserved-module-identifier \ + "$CXX" $APPLE_SYSROOT -std=c++23 $APPLE_FLOAT_MACROS -Wno-reserved-module-identifier \ -fmodule-file=std=pcm.cache/std.pcm \ pcm.cache/std.compat.pcm -c -o std.compat.o @@ -171,11 +183,11 @@ jobs: return 0; } EOF - "$CXX" -std=c++23 $APPLE_FLOAT_MACROS \ + "$CXX" $APPLE_SYSROOT -std=c++23 $APPLE_FLOAT_MACROS \ -fmodule-file=std=pcm.cache/std.pcm \ -fmodule-file=std.compat=pcm.cache/std.compat.pcm \ -c main.cpp -o main.o - "$CXX" main.o std.o std.compat.o -o compat_test + "$CXX" $APPLE_SYSROOT main.o std.o std.compat.o -o compat_test ./compat_test - name: Test — multi-module project @@ -187,9 +199,9 @@ jobs: mkdir -p pcm.cache # Build std - "$CXX" -std=c++23 $APPLE_FLOAT_MACROS -Wno-reserved-module-identifier \ + "$CXX" $APPLE_SYSROOT -std=c++23 $APPLE_FLOAT_MACROS -Wno-reserved-module-identifier \ --precompile "$STD_CPPM" -o pcm.cache/std.pcm - "$CXX" -std=c++23 $APPLE_FLOAT_MACROS -Wno-reserved-module-identifier \ + "$CXX" $APPLE_SYSROOT -std=c++23 $APPLE_FLOAT_MACROS -Wno-reserved-module-identifier \ pcm.cache/std.pcm -c -o std.o # User module: greeter @@ -202,9 +214,9 @@ jobs: } } EOF - "$CXX" -std=c++23 $APPLE_FLOAT_MACROS -fmodule-file=std=pcm.cache/std.pcm \ + "$CXX" $APPLE_SYSROOT -std=c++23 $APPLE_FLOAT_MACROS -fmodule-file=std=pcm.cache/std.pcm \ --precompile greeter.cppm -o pcm.cache/greeter.pcm - "$CXX" -std=c++23 $APPLE_FLOAT_MACROS -fmodule-file=std=pcm.cache/std.pcm \ + "$CXX" $APPLE_SYSROOT -std=c++23 $APPLE_FLOAT_MACROS -fmodule-file=std=pcm.cache/std.pcm \ pcm.cache/greeter.pcm -c -o greeter.o # Main @@ -216,11 +228,11 @@ jobs: return 0; } EOF - "$CXX" -std=c++23 $APPLE_FLOAT_MACROS \ + "$CXX" $APPLE_SYSROOT -std=c++23 $APPLE_FLOAT_MACROS \ -fmodule-file=std=pcm.cache/std.pcm \ -fmodule-file=greeter=pcm.cache/greeter.pcm \ -c main.cpp -o main.o - "$CXX" main.o greeter.o std.o -o multimod + "$CXX" $APPLE_SYSROOT main.o greeter.o std.o -o multimod ./multimod - name: Validate mcpp probe logic expectations