Message ID | 20230606145606.1153715-1-Jamie.Cunliffe@arm.com (mailing list archive) |
---|---|
Headers | show |
Series | Rust enablement for AArch64 | expand |
On Tue, Jun 6, 2023 at 4:56 PM Jamie Cunliffe <Jamie.Cunliffe@arm.com> wrote: > > The third patch disables Rust support when building for big > endian. Currently there is no `aarch64_be-unknown-none` target which > would allow this. Support for this can come at a later time either by > using the target.json approach, or upstreaming a new target definition > to rustc (preferred). We also might be able to use the > `aarch64_be-unknown-linux-gnu` target, however, this can be done at a > later time. It's worth noting that in Makefile.clang, it's > recommended for arch/{arch}/Makefile to set the endianness based on > arguments rather than the target triple. It's currently not possible > to do this with rustc, a different target triple has to be used. Thanks Jamie for this! It sounds like upstream `rustc` should support setting the endianness, but if they are OK with maintaining another target, so that we can start to get rid of `target.json`, that would be great. By the way, should the patches be merged into one? i.e. the first patch applied alone would be "wrong" in that BE is not supported anyway, right? So why not put the constraint directly in the first patch? Or am I missing something? Similarly, for the second patch, I think it would be better to squash it into the first, especially if the build is not correct if those flags are not set. But maybe I am missing something, or perhaps the arm64 maintainers prefer otherwise. Lina's `Tested-by` for Asahi would be great here. Cheers, Miguel
On Tue, Jun 06, 2023 at 03:56:03PM +0100, Jamie Cunliffe wrote: > Enable Rust support for the AArch64 architecture. > With the following diff on the whole series: diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile index 4a2c807d65db..4562a8173e90 100644 --- a/arch/arm64/Makefile +++ b/arch/arm64/Makefile @@ -41,7 +41,7 @@ KBUILD_CFLAGS += -mgeneral-regs-only \ KBUILD_CFLAGS += $(call cc-disable-warning, psabi) KBUILD_AFLAGS += $(compat_vdso) -KBUILD_RUSTFLAGS += --target aarch64-unknown-none -C target-feature="-neon,-fp-armv8" +KBUILD_RUSTFLAGS += --target aarch64-unknown-none -C target-feature="-neon" KBUILD_CFLAGS += $(call cc-option,-mabi=lp64) KBUILD_AFLAGS += $(call cc-option,-mabi=lp64) I've built with RUST=y and boot it in one ARM64 Hyper-V VM. Also I tried load/unload rust_minimal and rust_print modules, they all worked. Tested-by: Boqun Feng <boqun.feng@gmail.com> Regards, Boqun > The first patch enables the basic building of Rust for AArch64. Since > v1 this has been rewritten to avoid the use of a target.json file for > AArch64 and use the upstream rustc target definition. x86-64 still > uses the target.json approach though. > > The second patch enables the PAC ret and BTI options in the Rust build > flags to match the options that are used when building C. > > The third patch disables Rust support when building for big > endian. Currently there is no `aarch64_be-unknown-none` target which > would allow this. Support for this can come at a later time either by > using the target.json approach, or upstreaming a new target definition > to rustc (preferred). We also might be able to use the > `aarch64_be-unknown-linux-gnu` target, however, this can be done at a > later time. It's worth noting that in Makefile.clang, it's > recommended for arch/{arch}/Makefile to set the endianness based on > arguments rather than the target triple. It's currently not possible > to do this with rustc, a different target triple has to be used. > > > Jamie Cunliffe (3): > arm64: rust: Enable Rust support for AArch64 > arm64: rust: Enable PAC support for Rust. > arm64: Restrict Rust support to little endian only. > > Documentation/rust/arch-support.rst | 1 + > Makefile | 1 - > arch/arm64/Kconfig | 1 + > arch/arm64/Makefile | 4 ++++ > arch/x86/Makefile | 1 + > rust/Makefile | 6 +++++- > scripts/Makefile | 5 +++-- > scripts/generate_rust_target.rs | 4 +++- > 8 files changed, 18 insertions(+), 5 deletions(-) > > -- > 2.30.2 > >