Skip to content

ci: preserve Xcode compiler discovery with ccache launchers - #1610

Merged
mrousavy merged 1 commit into
mainfrom
perf/cleanup-xcode
Sep 7, 2026
Merged

ci: preserve Xcode compiler discovery with ccache launchers#1610
mrousavy merged 1 commit into
mainfrom
perf/cleanup-xcode

Conversation

@mrousavy

@mrousavy mrousavy commented Sep 5, 2026

Copy link
Copy Markdown
Member

Xcode could not discover libclang.dylib when the iOS builds replaced its compiler with bare clang names. Use Xcode's compiler defaults across the example, Release, Harness, and benchmark builds. The example and Harness workflows use C_COMPILER_LAUNCHER for ccache and enable its Clang explicit-module opt-in, following Apple's compiler launcher guidance.

Remove ccache compiler symlinks and React Native's compiler/linker wrapper injection together, preserving the real-compiler discovery required by ASan in #1417. Use a generic arm64 simulator destination for the build-only example job, remove the matching local example compiler overrides, and remove redundant benchmark libc++ and Swift toolchain search entries.

Validation for 7ed9557c5fd8a366ec9c9412bbf035c3396435bf, rebased onto main at 576a7bc8c70490d580ef458dcd05f5fda88c325b:

These checks verify compiler discovery and compatibility. They do not establish a controlled build-time or runtime speedup: the fresh launcher builds recorded 158 cacheable calls each with zero hits, and runtime measurements remain variable. The performance workflow also uses the head build script for both revisions, so its before/after table cannot isolate the compiler-script change.

CocoaPods may still generate an obsolete Swift toolchain search path; that warning is outside the checked-in project settings.

@vercel

vercel Bot commented Sep 5, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
nitro-docs Ready Ready Preview Sep 7, 2026 6:22pm UTC

Request Review

@mrousavy
mrousavy changed the base branch from perf/cleanup-release to main September 7, 2026 18:21
@nitro-modules-bot

Copy link
Copy Markdown

Performance Report

⚠️ Advisory: Results do not fail this PR.

iOS

Benchmark Before After Difference
JavaScript addNumbers() 21.1 ns 23.8 ns 🔴 +13.02% slower
C++ bounce native-owned buffer (1 MiB) 3.78 µs 3.46 µs 🟢 -8.44% faster
C++ copy(1 MiB) 65.96 µs 59.15 µs 🟢 -10.32% faster
C++ copy(4 KiB) 993.6 ns 896.5 ns 🟢 -9.77% faster
C++ optional trailing string 160.6 ns 152.4 ns 🟢 -5.1% faster
C++ addNumbers() 94.4 ns 83.1 ns 🟢 -12.02% faster
C++ simpleFunc() 68.2 ns 63.9 ns 🟢 -6.4% faster
C++ deferred worker Promise (includes trigger call) 29.14 µs 24.05 µs 🟢 -17.47% faster
C++ number property get/set 129.2 ns 138.0 ns 🔴 +6.81% slower
C++ nested Car struct 2.38 µs 2.62 µs 🔴 +10.21% slower
Swift copy(1 MiB) 67.62 µs 64.09 µs 🟢 -5.22% faster
Swift copy(4 KiB) 1.05 µs 1.19 µs 🔴 +12.52% slower
Swift synchronousCallback() 234.0 ns 216.7 ns 🟢 -7.42% faster
Swift create() 26.24 µs 27.69 µs 🔴 +5.51% slower
TurboModule addNumbers() 934.6 ns 1.03 µs 🔴 +10.2% slower
All Benchmarks
Benchmark Before After Difference
C++ bounce(1 MiB) 237.1 ns 241.1 ns 🔴 +1.71% slower
C++ bounce(4 KiB) 247.8 ns 237.2 ns 🟢 -4.3% faster
C++ bounce native-owned buffer (4 KiB) 372.0 ns 383.4 ns 🔴 +3.08% slower
C++ large array (1,024) 46.36 µs 46.14 µs 🟢 -0.47% faster
C++ small array (16) 895.0 ns 925.7 ns 🔴 +3.43% slower
C++ synchronousCallback() 188.2 ns 184.2 ns 🟢 -2.15% faster
C++ create() 440.7 ns 433.2 ns 🟢 -1.71% faster
C++ returnExisting() 208.6 ns 213.3 ns 🔴 +2.28% slower
C++ typed map (8 entries) 1.86 µs 1.89 µs 🔴 +1.66% slower
C++ immediatePromise() 918.7 ns 944.3 ns 🔴 +2.79% slower
C++ short ASCII string 141.9 ns 145.3 ns 🔴 +2.41% slower
C++ Unicode string 271.9 ns 272.7 ns 🔴 +0.27% slower
C++ number | string variant 132.9 ns 133.5 ns 🔴 +0.4% slower
Swift bounce(1 MiB) 228.1 ns 222.7 ns 🟢 -2.4% faster
Swift bounce(4 KiB) 236.8 ns 226.1 ns 🟢 -4.53% faster
Swift bounce native-owned buffer (1 MiB) 3.41 µs 3.32 µs 🟢 -2.7% faster
Swift bounce native-owned buffer (4 KiB) 359.1 ns 353.1 ns 🟢 -1.67% faster
Swift large array (1,024) 50.73 µs 50.53 µs 🟢 -0.39% faster
Swift small array (16) 997.9 ns 1.02 µs 🔴 +2.44% slower
Swift returnExisting() 256.9 ns 263.4 ns 🔴 +2.5% slower
Swift typed map (8 entries) 2.47 µs 2.40 µs 🟢 -2.79% faster
Swift optional trailing string 164.2 ns 167.9 ns 🔴 +2.26% slower
Swift addNumbers() 82.4 ns 83.0 ns 🔴 +0.63% slower
Swift simpleFunc() 66.5 ns 66.2 ns 🟢 -0.4% faster
Swift deferred worker Promise (includes trigger call) 25.57 µs 25.89 µs 🔴 +1.23% slower
Swift immediatePromise() 1.19 µs 1.21 µs 🔴 +2.28% slower
Swift number property get/set 144.7 ns 143.7 ns 🟢 -0.69% faster
Swift short ASCII string 169.2 ns 165.4 ns 🟢 -2.26% faster
Swift Unicode string 342.6 ns 345.9 ns 🔴 +0.96% slower
Swift nested Car struct 2.58 µs 2.50 µs 🟢 -3.45% faster
Swift number | string variant 216.9 ns 218.9 ns 🔴 +0.89% slower

Android

Benchmark Before After Difference
JavaScript addNumbers() 21.3 ns 19.6 ns 🟢 -7.82% faster
C++ large array (1,024) 62.96 µs 35.93 µs 🟢 -42.93% faster
C++ deferred worker Promise (includes trigger call) 20.35 µs 22.05 µs 🔴 +8.37% slower
C++ short ASCII string 148.8 ns 134.2 ns 🟢 -9.79% faster
C++ Unicode string 273.5 ns 233.7 ns 🟢 -14.54% faster
C++ number | string variant 130.9 ns 123.2 ns 🟢 -5.88% faster
Kotlin bounce(4 KiB) 995.9 ns 1.05 µs 🔴 +5.64% slower
Kotlin copy(1 MiB) 223.07 µs 243.00 µs 🔴 +8.93% slower
Kotlin typed map (8 entries) 5.81 µs 6.12 µs 🔴 +5.37% slower
Kotlin immediatePromise() 2.26 µs 2.39 µs 🔴 +5.72% slower
Kotlin number property get/set 208.9 ns 220.7 ns 🔴 +5.68% slower
All Benchmarks
Benchmark Before After Difference
C++ bounce(1 MiB) 393.9 ns 393.0 ns 🟢 -0.22% faster
C++ bounce(4 KiB) 397.4 ns 409.7 ns 🔴 +3.08% slower
C++ bounce native-owned buffer (1 MiB) 3.02 µs 3.06 µs 🔴 +1.16% slower
C++ bounce native-owned buffer (4 KiB) 417.2 ns 417.0 ns 🟢 -0.03% faster
C++ copy(1 MiB) 24.44 µs 25.31 µs 🔴 +3.55% slower
C++ copy(4 KiB) 757.2 ns 783.5 ns 🔴 +3.48% slower
C++ small array (16) 728.6 ns 754.1 ns 🔴 +3.5% slower
C++ synchronousCallback() 301.8 ns 295.2 ns 🟢 -2.21% faster
C++ create() 520.8 ns 515.3 ns 🟢 -1.06% faster
C++ returnExisting() 210.3 ns 209.0 ns 🟢 -0.61% faster
C++ typed map (8 entries) 1.68 µs 1.62 µs 🟢 -3.59% faster
C++ optional trailing string 142.0 ns 142.5 ns 🔴 +0.34% slower
C++ addNumbers() 83.2 ns 87.1 ns 🔴 +4.72% slower
C++ simpleFunc() 71.6 ns 70.6 ns 🟢 -1.43% faster
C++ immediatePromise() 757.1 ns 791.0 ns 🔴 +4.47% slower
C++ number property get/set 149.5 ns 153.3 ns 🔴 +2.53% slower
C++ nested Car struct 2.04 µs 2.04 µs 🟢 -0.19% faster
Kotlin bounce(1 MiB) 1.01 µs 974.7 ns 🟢 -3.28% faster
Kotlin bounce native-owned buffer (1 MiB) 3.80 µs 3.68 µs 🟢 -3.01% faster
Kotlin bounce native-owned buffer (4 KiB) 1.09 µs 1.09 µs 🟢 -0.17% faster
Kotlin copy(4 KiB) 4.25 µs 4.20 µs 🟢 -1.14% faster
Kotlin large array (1,024) 39.51 µs 40.12 µs 🔴 +1.56% slower
Kotlin small array (16) 958.4 ns 983.8 ns 🔴 +2.65% slower
Kotlin synchronousCallback() 1.01 µs 1.06 µs 🔴 +4.66% slower
Kotlin create() 1.48 µs 1.52 µs 🔴 +2.38% slower
Kotlin returnExisting() 556.9 ns 559.7 ns 🔴 +0.51% slower
Kotlin optional trailing string 317.8 ns 312.0 ns 🟢 -1.82% faster
Kotlin addNumbers() 114.9 ns 114.7 ns 🟢 -0.21% faster
Kotlin simpleFunc() 90.2 ns 93.7 ns 🔴 +3.93% slower
Kotlin deferred worker Promise (includes trigger call) 32.64 µs 33.25 µs 🔴 +1.87% slower
Kotlin short ASCII string 420.9 ns 400.0 ns 🟢 -4.96% faster
Kotlin Unicode string 675.4 ns 673.6 ns 🟢 -0.27% faster
Kotlin nested Car struct 4.31 µs 4.42 µs 🔴 +2.69% slower
Kotlin number | string variant 371.5 ns 386.9 ns 🔴 +4.14% slower
TurboModule addNumbers() 211.0 ns 213.4 ns 🔴 +1.1% slower

Benchmarking Code Diff 576a7bc8...7ed9557c (view raw output)

Raw measurements: performance-report-1 (JSON artifact). Run 34151299577, attempt 1. Download requires GitHub access.

Android: measurements, attempt 1, apps, attempt 1.
iOS: measurements, attempt 1, apps, attempt 1.

@mrousavy
mrousavy marked this pull request as ready for review September 7, 2026 19:18
@mrousavy
mrousavy merged commit 16d51a7 into main Sep 7, 2026
23 of 25 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant