Add macOS AArch64 support #1248
Copy link
Copy link
Closed
Labels
C-enhancementCategory: An issue proposing an enhancement or a PR with one.Category: An issue proposing an enhancement or a PR with one.O-armTarget: ARM processors (arm, thumb and AArch64 targets)Target: ARM processors (arm, thumb and AArch64 targets)O-macosOperating system: MacOSOperating system: MacOS
Description
CirrusCI now has support for running on M1 macs: https://cirrus-ci.org/guide/macOS/
- Implement Mach-O TLS model for AArch64 in Cranelift (cranelift: Implement TLS on aarch64 Mach-O (Apple Silicon) bytecodealliance/wasmtime#5434)
- arm64 macOS variadic arguments ABI needs Cranelift support #1451 (Fix varargs support on
aarch64-apple-darwin#1500) - Support Aarch64Call relocations for Mach-O gimli-rs/object#465
- multiple signatures for objc_msgSend (removed in Refactor uses of
objc_msgSendto no longer have clashing definitions rust#117910) - Cranelift: AArch64 backend uses absolute relocations instead of GOT-relative relocations when using is_pic bytecodealliance/wasmtime#5544
- https://github.com/bjorn3/rustc_codegen_cranelift/issues/1371
Branch to run on CirrusCI: https://github.com/bjorn3/rustc_codegen_cranelift/tree/macos_m1_ci
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
C-enhancementCategory: An issue proposing an enhancement or a PR with one.Category: An issue proposing an enhancement or a PR with one.O-armTarget: ARM processors (arm, thumb and AArch64 targets)Target: ARM processors (arm, thumb and AArch64 targets)O-macosOperating system: MacOSOperating system: MacOS
Activity
nathanwhit commentedon Sep 19, 2022
I've been looking into this recently. I currently have the full sysroot compiling and passing most of the tests. I've opened a PR for the first set of changes required (supporting the necessary relocations in the object crate). I'm still working on cleaning up the cranelift changes and debugging a few issues before opening PRs.
bjorn3 commentedon Sep 19, 2022
Thanks a lot for working on this!
bjorn3 commentedon Mar 25, 2023
bytecodealliance/wasmtime#5434 has been merged, so tls should work now. Variadic functions like printf will need proper Cranelift support as with the AArch64 macOS ABI variadic arguments are always passed on the stack. The current workaround for missing variadic function support in Cranelift depends on the ABI for variadic arguments being the same as non-variadic arguments, like is the case on most platforms. I will probably also need to hard code support for
objc_msgSendas it can have multiple signatures at the same time depending on the passed in message selector.bjorn3 commentedon Jan 25, 2024
I just updated the macos_m1_ci branch to test it on cirrus ci. After disabling all debuginfo generation and skipping the tests that use printf (as it is a variadic function), the rest of the tests pass.
bjorn3 commentedon Jan 26, 2024
Turns out there is at least one place in libstd where a variadic function is called: https://cirrus-ci.com/task/4835070486249472?logs=test#L116 This can't work until #1451 is fixed. I could make all these calls abort as workaround, but it doesn't sit right with me to announce that arm64 macOS works with that in place.
Edit: Yeah, just tried with an LLVM sysroot and even that will locally codegen the vararg
open()function.andrewgazelka commentedon Jun 14, 2024
Hey @bjorn3 . If I want to try rustc_codegen_cranelift on macOS AArch64 and cross my fingers nothing is using varargs, what is the best way for me to do this?
bjorn3 commentedon Jun 15, 2024
Unfortunately even for simple programs the standard library needs to use varargs internally. I tried already.
bjorn3 commentedon Jun 21, 2024
@beetrees implemented support for varargs without needing Cranelift changes in #1500.
Update platform support table for the new arm64 macOS support