Re: [PATCH V7 4/4] powerpc: Enable Rust for ppc64le

Mukesh Kumar Chaurasiya
2026-03-30T09:24:22Z

On Sun, Mar 29, 2026 at 07:33:43PM +0100, Gary Guo wrote:
> On Sun Mar 29, 2026 at 5:02 PM BST, Mukesh Kumar Chaurasiya (IBM) wrote:
> > Enabling rust support for ppc64le only.
>
> This line looks inaccurate now given previous commit just enabled it for PPC32
> too.
>
Oh yeah, will fix this.
> >
> > Tested on powernv9:
> >
> > $ uname -rm
> > 6.19.0-rc8+ ppc64le
> >
> > $ sudo modprobe rust_minimal
> > [ 632.890850] rust_minimal: Rust minimal sample (init)
> > [ 632.890881] rust_minimal: Am I built-in? false
> > [ 632.890898] rust_minimal: test_parameter: 1
> >
> > $ sudo rmmod rust_minimal
> > [ 648.272832] rust_minimal: My numbers are [72, 108, 200]
> > [ 648.272873] rust_minimal: Rust minimal sample (exit)
> >
> > $ sudo modprobe rust_print
> > [ 843.410391] rust_print: Rust printing macros sample (init)
> > [ 843.410424] rust_print: Emergency message (level 0) without args
> > [ 843.410451] rust_print: Alert message (level 1) without args
> > [ 843.410477] rust_print: Critical message (level 2) without args
> > [ 843.410503] rust_print: Error message (level 3) without args
> > [ 843.410530] rust_print: Warning message (level 4) without args
> > [ 843.410557] rust_print: Notice message (level 5) without args
> > [ 843.410594] rust_print: Info message (level 6) without args
> > [ 843.410617] rust_print: A line that is continued without args
> > [ 843.410646] rust_print: Emergency message (level 0) with args
> > [ 843.410675] rust_print: Alert message (level 1) with args
> > [ 843.410691] rust_print: Critical message (level 2) with args
> > [ 843.410727] rust_print: Error message (level 3) with args
> > [ 843.410761] rust_print: Warning message (level 4) with args
> > [ 843.410796] rust_print: Notice message (level 5) with args
> > [ 843.410821] rust_print: Info message (level 6) with args
> > [ 843.410854] rust_print: A line that is continued with args
> > [ 843.410892] rust_print: 1
> > [ 843.410895] rust_print: "hello, world"
> > [ 843.410924] rust_print: [samples/rust/rust_print_main.rs:35:5] c = "hello, world"
> > [ 843.410977] rust_print: Arc<dyn Display> says 42
> > [ 843.410979] rust_print: Arc<dyn Display> says hello, world
> >
> > $ sudo rmmod rust_print
> > [ 843.411003] rust_print: "hello, world"
> > [ 888.499935] rust_print: Rust printing macros sample (exit)
> >
> > Reviewed-by: Link Mauve <linkmauve@linkmauve.fr>
> > Tested-by: Link Mauve <linkmauve@linkmauve.fr>
> > Reviewed-by: Christophe Leroy (CS GROUP) <chleroy@kernel.org>
> > Tested-by: Venkat Rao Bagalkote <venkat88@linux.ibm.com>
> > Signed-off-by: Mukesh Kumar Chaurasiya (IBM) <mkchauras@gmail.com>
> > ---
> > arch/powerpc/Kconfig | 1 +
> > arch/powerpc/Makefile | 7 ++++++-
> > rust/Makefile | 6 ++++++
> > 3 files changed, 13 insertions(+), 1 deletion(-)
> >
> > diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
> > index 1246b3add8ff..a5f50434daf3 100644
> > --- a/arch/powerpc/Kconfig
> > +++ b/arch/powerpc/Kconfig
> > @@ -285,6 +285,7 @@ config PPC
> > select HAVE_RELIABLE_STACKTRACE
> > select HAVE_RSEQ
> > select HAVE_RUST if PPC32
> > + select HAVE_RUST if PPC64 && CPU_LITTLE_ENDIAN
> > select HAVE_SAMPLE_FTRACE_DIRECT if HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS
> > select HAVE_SAMPLE_FTRACE_DIRECT_MULTI if HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS
> > select HAVE_SETUP_PER_CPU_AREA if PPC64
> > diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
> > index 589613eaa5dc..9385db478c59 100644
> > --- a/arch/powerpc/Makefile
> > +++ b/arch/powerpc/Makefile
> > @@ -61,7 +61,12 @@ else
> > KBUILD_LDFLAGS_MODULE += $(objtree)/arch/powerpc/lib/crtsavres.o
> > endif
> >
> > -KBUILD_RUSTFLAGS += --target=powerpc-unknown-linux-gnu
> > +ifdef CONFIG_PPC64
> > +KBUILD_RUSTFLAGS += --target=powerpc64le-unknown-linux-gnu
>
> It looks like all it takes to enable PPC BE is to have
>
> #ifdef CONFIG_CPU_LITTLE_ENDIAN
> KBUILD_RUSTFLAGS += --target=powerpc64le-unknown-linux-gnu
> #else
> KBUILD_RUSTFLAGS += --target=powerpc64-unknown-linux-gnu
> #endif
>
> (and similarly add bindgen target)?
>
> I think it might worth having PPC32/PPC64/PPC64LE all enabled in a single
> commit, and then you can just claim Rust is enabled for PPC and have an
> unconditional
>
> select HAVE_RUST
>
> Thoughts?
>
BE still has some issues in the compiler. We are working with our LLVM
team to get those fixed. We can still add the support for BE, but that
won't be compilable as of now.

Regards,
Mukesh
> Best,
> Gary
>
> > +KBUILD_RUSTFLAGS += -Ctarget-feature=-mma,-vsx,-hard-float,-altivec
> > +else
> > +KBUILD_RUSTFLAGS += --target=powerpc-unknown-linux-gnu
> > +endif
> >
> > ifdef CONFIG_CPU_LITTLE_ENDIAN
> > KBUILD_CPPFLAGS += -mlittle-endian
> > diff --git a/rust/Makefile b/rust/Makefile
> > index 7ea7570e3f17..7fe4cbbd176e 100644
> > --- a/rust/Makefile
> > +++ b/rust/Makefile
> > @@ -410,7 +410,13 @@ BINDGEN_TARGET_x86 := x86_64-linux-gnu
> > BINDGEN_TARGET_arm64 := aarch64-linux-gnu
> > BINDGEN_TARGET_arm := arm-linux-gnueabi
> > BINDGEN_TARGET_loongarch := loongarch64-linux-gnusf
> > +
> > +ifdef CONFIG_PPC64
> > +BINDGEN_TARGET_powerpc := powerpc64le-linux-gnu
> > +else
> > BINDGEN_TARGET_powerpc := powerpc-linux-gnu
> > +endif
> > +
> > BINDGEN_TARGET_um := $(BINDGEN_TARGET_$(SUBARCH))
> > BINDGEN_TARGET := $(BINDGEN_TARGET_$(SRCARCH))
> >
>