Closed madsmtm closed 4 months ago
This issue is not meant to be used for technical discussion. There is a Zulip stream for that. Use this issue to leave procedural comments, such as volunteering to review, indicating that you second the proposal (or third, etc), or raising a concern that you would like to be addressed.
Concerns or objections to the proposal should be discussed on Zulip and formally registered here by adding a comment with the following syntax:
@rustbot concern reason-for-concern
<description of the concern>
Concerns can be lifted with:
@rustbot resolve reason-for-concern
See documentation at https://forge.rust-lang.org
cc @rust-lang/compiler @rust-lang/compiler-contributors
Tagging people that might possibly be interested in being co-maintainer of these targets with me (@madsmtm):
* @badboy, since you maintain the other iOS targets.
Sure! Time so far getting pinged on the other iOS targets is ... 0 I think. I can sign up for one more target.
I have added @BlackHoleFox and @badboy as target maintainers in https://github.com/rust-lang/rust/pull/126586, so that should now also be resolved (thanks both of you!).
@rustbot second
@madsmtm thanks for your efforts to get the test suite working on these targets! I think it would be great to have that testing in CI but I think that decision falls to T-infra. I would suggest starting a thread on their channel about the idea.
@rustbot label -final-comment-period +major-change-accepted
Proposal
This is a proposal to upgrade the Mac Catalyst targets
x86_64-apple-ios-macabi
andaarch64-apple-ios-macabi
(introduced here and here) to Tier 2.Mac Catalyst is a technology available on macOS that allows running iOS applications natively on the Mac. That makes these
rustc
targets immensely useful, as it also allows testing iOS-specific code in CI and locally;cargo test --target aarch64-apple-ios-macabi
mostly just works (in contrast to the usual iOS targets, which need to be bundled and run on the simulator using a tool likecargo-dinghy
).This is, of course, not a substitute for testing on the iOS simulator, or even better, on a real device, but it's a fairly good one; at every step of the stack, from the compiler, to the linker, the system libraries and finally the kernel, are all configured as-if targetting iOS (albeit with a few more APIs and capabilities available than would otherwise be there).
Apart from the testing benefits, these targets are useful by themselves for users that have an existing iOS / UIKit application that they want to ship on the Mac as well.
Sub-proposal: Running the compiler's test suite on Mac Catalyst
Somewhat separately, though closely related, is that we can use this target in Rust's test suite itself to test that everything work on Mac Catalyst, and by extension, gain more confidence that the code for the existing Tier 2 iOS targets work (as stated above, testing these directly is somewhat burdensome).
I have been slowly working for the past few months on fixing the test suite so that it passes on Mac Catalyst, see https://github.com/rust-lang/rust/pull/124491, https://github.com/rust-lang/rust/pull/124788, https://github.com/rust-lang/rust/pull/125225 and https://github.com/rust-lang/rust/pull/125226. More work is still needed here, but would like to also use this issue to gauge the interest in doing so.
Tier 3 Requirements
Since these targets are older than the Target Tier Policy, I'm going to go through the whole ordeal, and make sure that they meet the Tier 3 requirements first (parts omitted for brevity):
I (@madsmtm) am noted as the target maintainer.
The naming follows
aarch64-apple-ios-sim
, and puts thetarget_abi
as the last part of the target.Same as for the existing Tier 2 iOS targets; the LLVM parts are open source and having these targets in
rustc
does not impose any legal requirements.The standard library is implemented for these targets.
Documentation is provided in the platform support page for Mac Catalyst.
Understood.
Understood.
It can.
Tier 2 Requirements
And now we can take a look at the Tier 2 requirements:
It does, the benefits are outlined in the top of this issue.
TODO. This requirement is not yet met, since the target pages were only recently cleaned up, and maintainers weren't written down before then.
Tagging people that might possibly be interested in being co-maintainer of these targets with me (@madsmtm):
EDIT: Fixed in https://github.com/rust-lang/rust/pull/126586.
Understood.
The maintenance burden of promoting these targets to tier 2 should be fairly minor, as the very similar
aarch64-apple-ios
andx86_64-apple-ios
targets are already Tier 2.Documentation is provided in the platform support page for Mac Catalyst.
The target is already emulating another system (iOS), and can only (realistically) be run on Mac hardware.
OS requirements and build system requirements are documented on the aforementioned platform support page.
These targets target Mac Catalyst, which is a distinct mode the macOS operating system can operate in, and the targets cannot be combined with the existing Tier 2 iOS targets.
The full standard library is implemented for these targets (and is in fact better supported than on the existing Tier 2 iOS targets, as they run on the macOS kernel, which is less restrictive than iOS).
Signal handlers are not enabled on this target due to fear of being rejected from the App Store (same as the existing Tier 2 iOS targets), but stack probes are, which should prevent safe code from being able to overflow the stack.
These targets support C code and the C calling convention that Rust uses works with these targets.
The targets are not yet configured to build in CI, will do that in a follow-up PR. EDIT: Done.
They should be just as reliable as the existing Tier 2 iOS targets.
See the sub-proposal above.
The targets are likely to build in the same amount of time as the existing Tier 2 iOS targets.
The targets support cross-compiling (though you must have the Xcode SDK available).
I'm a bit unsure of the legality here, but it should be the same as for the existing Tier 2 iOS targets.
Understood.
Understood. See also the sub-proposal above for
They do, see above.
Mentors or Reviewers
@workingjubilee has been reviewing most of the PRs inching the test suite closer to passing, and @thomcc is (from my understanding) the current Apple expert on the library team.
Just to make sure we follow procedure, someone might also want to ping the Apple Notification Group (I don't have the rights to do it myself).
Process
The main points of the Major Change Process are as follows:
@rustbot second
.-C flag
, then full team check-off is required.@rfcbot fcp merge
on either the MCP or the PR.You can read more about Major Change Proposals on forge.
Comments
This issue is not meant to be used for technical discussion. There is a Zulip stream for that. Use this issue to leave procedural comments, such as volunteering to review, indicating that you second the proposal (or third, etc), or raising a concern that you would like to be addressed.