[PATCH v4 1/2] rust: Refactor the build target to allow the use of builtin targets
Masahiro Yamada
masahiroy at kernel.org
Wed Jan 24 01:12:19 PST 2024
On Sat, Oct 21, 2023 at 12:53 AM Jamie Cunliffe <Jamie.Cunliffe at arm.com> wrote:
>
> Eventually we want all architectures to be using the target as defined
> by rustc. However currently some architectures can't do that and are
> using the target.json specification. This puts in place the foundation
> to allow the use of the builtin target definition or a target.json
> specification.
>
> Signed-off-by: Jamie Cunliffe <Jamie.Cunliffe at arm.com>
> ---
> Makefile | 1 -
> arch/x86/Makefile | 1 +
> rust/Makefile | 5 ++++-
> scripts/Makefile | 4 +++-
> 4 files changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index 88ebf6547964..23100f193da3 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -566,7 +566,6 @@ KBUILD_CFLAGS += -fno-strict-aliasing
>
> KBUILD_CPPFLAGS := -D__KERNEL__
> KBUILD_RUSTFLAGS := $(rust_common_flags) \
> - --target=$(objtree)/scripts/target.json \
> -Cpanic=abort -Cembed-bitcode=n -Clto=n \
> -Cforce-unwind-tables=n -Ccodegen-units=1 \
> -Csymbol-mangling-version=v0 \
> diff --git a/arch/x86/Makefile b/arch/x86/Makefile
> index 5bfe5caaa444..0f339d4abd40 100644
> --- a/arch/x86/Makefile
> +++ b/arch/x86/Makefile
> @@ -68,6 +68,7 @@ export BITS
> # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53383
> #
> KBUILD_CFLAGS += -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx
> +KBUILD_RUSTFLAGS += --target=$(objtree)/scripts/target.json
> KBUILD_RUSTFLAGS += -Ctarget-feature=-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2
>
> ifeq ($(CONFIG_X86_KERNEL_IBT),y)
> diff --git a/rust/Makefile b/rust/Makefile
> index 87958e864be0..8d75a6ffe951 100644
> --- a/rust/Makefile
> +++ b/rust/Makefile
> @@ -428,8 +428,11 @@ $(obj)/core.o: private skip_clippy = 1
> $(obj)/core.o: private skip_flags = -Dunreachable_pub
> $(obj)/core.o: private rustc_objcopy = $(foreach sym,$(redirect-intrinsics),--redefine-sym $(sym)=__rust$(sym))
> $(obj)/core.o: private rustc_target_flags = $(core-cfgs)
> -$(obj)/core.o: $(RUST_LIB_SRC)/core/src/lib.rs scripts/target.json FORCE
> +$(obj)/core.o: $(RUST_LIB_SRC)/core/src/lib.rs FORCE
> $(call if_changed_dep,rustc_library)
> +ifdef CONFIG_X86_64
> +$(obj)/core.o: scripts/target.json
> +endif
>
> $(obj)/compiler_builtins.o: private rustc_objcopy = -w -W '__*'
> $(obj)/compiler_builtins.o: $(src)/compiler_builtins.rs $(obj)/core.o FORCE
> diff --git a/scripts/Makefile b/scripts/Makefile
> index 576cf64be667..c85d130a4125 100644
> --- a/scripts/Makefile
> +++ b/scripts/Makefile
> @@ -11,12 +11,14 @@ hostprogs-always-$(CONFIG_MODULE_SIG_FORMAT) += sign-file
> hostprogs-always-$(CONFIG_SYSTEM_EXTRA_CERTIFICATE) += insert-sys-cert
> hostprogs-always-$(CONFIG_RUST_KERNEL_DOCTESTS) += rustdoc_test_builder
> hostprogs-always-$(CONFIG_RUST_KERNEL_DOCTESTS) += rustdoc_test_gen
> -always-$(CONFIG_RUST) += target.json
>
> +ifdef CONFIG_X86_64
Sorry for the delay.
I did not notice that this was waiting for my Ack.
Now, Rust for loongarch is upstreamed, and it also
uses the custom target.
This block should be changed to:
ifneq ($(CONFIG_X86_64)$(CONFIG_LOONGARCH),)
...
endif
With that changed,
Acked-by: Masahiro Yamada <masahiroy at kernel.org>
Or, if you want to make it a little bit cleaner,
perhaps you can introduce a new CONFIG option.
Let's say CONFIG_RUST_USE_CUSTOM_TARGET
(please pick up any option name you like).
In scripts/Makefile,
-always-$(CONFIG_RUST) += target.json
+always-$(CONFIG_RUST_USE_CUSTOM_TARGET) += target.json
In the top Makefile,
ifdef CONFIG_RUST_USE_CUSTOM_TARGET
KBUILD_RUSTFLAGS += --target=$(objtree)/scripts/target.json
endif
> +always-$(CONFIG_RUST) += target.json
> filechk_rust_target = $< < include/config/auto.conf
>
> $(obj)/target.json: scripts/generate_rust_target include/config/auto.conf FORCE
> $(call filechk,rust_target)
> +endif
>
> hostprogs += generate_rust_target
> generate_rust_target-rust := y
> --
> 2.30.2
>
>
--
Best Regards
Masahiro Yamada
More information about the linux-arm-kernel
mailing list