Commit 3e781ca
committed
feat(toolchain): iOS is an ecosystem compiler and a located SDK
D1/D2. THE THREE iOS ROWS PIN `llvm@22.1.8`. The sentence that shrank this
item is that the compiler is ours and only the SDK is Apple's: any
sufficiently new clang emits arm64 Mach-O for an iOS deployment target, and
`aarch64-macos` is verified on exactly that split. Xcode's clang would also
work and is the wrong default, because it would make the compiler a host
dependency where the ecosystem already has one.
A CONVENTION PIN, NOT A CAPABILITY ONE. It answers "what does `--target
aarch64-ios` resolve when the project says nothing" and stays overridable --
consistent with `aarch64-macos`, where the same constraint (Darwin needs
clang) holds and which is not a capability row either. The rows carry no
`sysroot`, because that column names a PACKAGE and an Apple SDK is located.
The deployment target travels in the EFFECTIVE TRIPLE and nowhere else:
`arm64-apple-ios18.0` and `arm64-apple-ios18.0-simulator`, Apple's own
spellings, which fully determine platform and minimum. `-miphoneos-version-min`
is deliberately not emitted -- it would be a second place answering a question
the triple already answers. macOS keeps its flag, and the asymmetry now has a
criterion of its own in the triple tests rather than being folded into this.
FOUR SITES HAD TO LEARN THAT A macOS HOST IS NOT A macOS TARGET.
- hostflags emitted `-mmacosx-version-min` whenever the HOST was macOS. With
an iOS triple clang refuses the combination outright, so the flag would
stop the build rather than be ignored. Gated on the located SDK being
empty, which is the same value that says "this is a cross".
- the compile side gets `-isysroot <located SDK>`, which it never needed
before: a native build reads the payload's `clang++.cfg`, and post-install
filled that with the located macOS SDK. An Apple cross suppresses the cfg
precisely because it names the wrong platform.
- the LINK line in that branch carried no `--target` at all. The note two
hundred lines below it records that only the third branch ever consumed
`link_toolchain_flags`; an iOS row is the first target this branch serves
that the driver would get wrong, and a link told nothing produces a macOS
binary from objects compiled as iOS.
- the Mach-O distribution cell chose the self-contained contract, which
links the payload's `libc++.a` -- a Mach-O archive built for macOS, which
ld64 refuses in an iOS link. iOS takes libc++ from the SDK, which every
iOS release ships, and the floor stays real because the triple carries it.
`ios_deployment_target` in `[build]`, beside `macos_deployment_target`: one
fingerprint slot, two version spaces, because "14.0" is a macOS version and
means nothing to an iOS SDK.
THE SDK IS LOCATED ONCE AND ITS ABSENCE IS A REFUSAL THAT NAMES IT. Three
later sites need the answer and `xcrun` shells out, so probing three times
could return three answers. The refusal names the SDK, the `xcrun` command
that must answer, that Command Line Tools alone ship the macOS SDK only, and
that the compiler is not the problem.
AND THE PROBE TAUGHT THE MEASUREMENT ITS OWN LESSON. The first
ci-macos-ios.yml run answered the premise -- Xcode 16.4, iPhoneOS 18.5,
iPhoneSimulator 18.5, five iOS simulator runtimes, an iPhone 16 Pro that boots
-- and then failed with
ld64.lld: error: .../MacOSX.sdk/usr/lib/libc++.tbd(...) is incompatible with
arm64 (iOS Simulator18.0.0)
with the correct `-isysroot` on the command line: the payload's cfg won. That
is the fact behind three of the four sites above. The four steps after the
failing one were SKIPPED, so one unmet assumption cost the rest of the
measurement; every step is now `continue-on-error`, because a probe that stops
at the first `no` is a build and not a measurement.
A second job builds mcpp from this branch and asks the engine the same
questions: the device row's artefact and its `LC_BUILD_VERSION`, the simulator
row plus `simctl spawn` on the bare Mach-O -- which decides whether
`simctl-run` is a boot-and-spawn wrapper or has to synthesise a bundle -- and
that the refusal names the SDK while the host row still builds in the same
environment. The rows stay `planned` until those answers arrive; the fixture
uses the escape hatch the refusal itself advertises.1 parent 200d5fe commit 3e781ca
8 files changed
Lines changed: 457 additions & 22 deletions
File tree
- .github/workflows
- modules/toolchain-model/src
- src
- build
- toolchain
- tests/unit
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
39 | 39 | | |
40 | 40 | | |
41 | 41 | | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
42 | 48 | | |
| 49 | + | |
43 | 50 | | |
44 | 51 | | |
45 | 52 | | |
| |||
59 | 66 | | |
60 | 67 | | |
61 | 68 | | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
62 | 91 | | |
| 92 | + | |
63 | 93 | | |
64 | 94 | | |
65 | 95 | | |
| |||
71 | 101 | | |
72 | 102 | | |
73 | 103 | | |
74 | | - | |
| 104 | + | |
75 | 105 | | |
76 | 106 | | |
77 | 107 | | |
78 | 108 | | |
79 | 109 | | |
80 | | - | |
81 | | - | |
82 | | - | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
83 | 116 | | |
84 | 117 | | |
85 | 118 | | |
| |||
95 | 128 | | |
96 | 129 | | |
97 | 130 | | |
| 131 | + | |
98 | 132 | | |
99 | 133 | | |
100 | 134 | | |
101 | 135 | | |
102 | 136 | | |
103 | 137 | | |
104 | 138 | | |
105 | | - | |
| 139 | + | |
| 140 | + | |
106 | 141 | | |
107 | 142 | | |
108 | 143 | | |
| |||
115 | 150 | | |
116 | 151 | | |
117 | 152 | | |
| 153 | + | |
118 | 154 | | |
119 | 155 | | |
120 | 156 | | |
| |||
124 | 160 | | |
125 | 161 | | |
126 | 162 | | |
127 | | - | |
| 163 | + | |
| 164 | + | |
128 | 165 | | |
129 | 166 | | |
130 | 167 | | |
131 | 168 | | |
132 | 169 | | |
133 | 170 | | |
134 | 171 | | |
135 | | - | |
| 172 | + | |
| 173 | + | |
136 | 174 | | |
137 | 175 | | |
138 | 176 | | |
| |||
148 | 186 | | |
149 | 187 | | |
150 | 188 | | |
| 189 | + | |
151 | 190 | | |
152 | 191 | | |
153 | 192 | | |
154 | 193 | | |
155 | 194 | | |
156 | 195 | | |
157 | | - | |
| 196 | + | |
| 197 | + | |
158 | 198 | | |
159 | 199 | | |
160 | 200 | | |
| |||
166 | 206 | | |
167 | 207 | | |
168 | 208 | | |
169 | | - | |
| 209 | + | |
| 210 | + | |
170 | 211 | | |
171 | 212 | | |
172 | 213 | | |
| |||
175 | 216 | | |
176 | 217 | | |
177 | 218 | | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
181 | 181 | | |
182 | 182 | | |
183 | 183 | | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
184 | 208 | | |
185 | 209 | | |
186 | 210 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
712 | 712 | | |
713 | 713 | | |
714 | 714 | | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
| 728 | + | |
| 729 | + | |
| 730 | + | |
| 731 | + | |
| 732 | + | |
| 733 | + | |
| 734 | + | |
| 735 | + | |
715 | 736 | | |
716 | 737 | | |
717 | 738 | | |
| |||
725 | 746 | | |
726 | 747 | | |
727 | 748 | | |
728 | | - | |
| 749 | + | |
729 | 750 | | |
730 | 751 | | |
731 | 752 | | |
| |||
743 | 764 | | |
744 | 765 | | |
745 | 766 | | |
746 | | - | |
747 | | - | |
| 767 | + | |
| 768 | + | |
748 | 769 | | |
749 | 770 | | |
750 | 771 | | |
| |||
0 commit comments