Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 29 additions & 17 deletions .github/workflows/ci-macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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)
Expand All @@ -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 ==="
Expand All @@ -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

Expand All @@ -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

Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down
Loading