Re: [PATCH v4 1/2] rust: Refactor the build target to allow the use of builtin targets
From: Masahiro Yamada <masahiroy@kernel.org>
Date: 2024-01-26 19:38:24
Also in:
linux-kbuild, loongarch, rust-for-linux
On Thu, Jan 25, 2024 at 12:20 PM WANG Rui [off-list ref] wrote:
Hello, On Mon, Jan 22, 2024 at 5:17 PM Trevor Gross [off-list ref] wrote:quoted
On Fri, Oct 20, 2023 at 10:59 AM Jamie Cunliffe [off-list ref] wrote:quoted
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 <redacted> --- Makefile | 1 - arch/x86/Makefile | 1 + rust/Makefile | 5 ++++- scripts/Makefile | 4 +++- 4 files changed, 8 insertions(+), 3 deletions(-)Adding LoongArch maintainers - this patch will need a small update to arch/loongarch/Makefile similar to the change in arch/x86/Makefile (included below), since that support is now in-tree and uses generate_rust_target [1]. Also a very minor conflict in docs at patch 2/2. I believe this patchset is still waiting on an ack from the kbuild team. Series at [2] for reference. Thanks, Trevor [1]: https://lore.kernel.org/rust-for-linux/20240108032117.215171-1-wangrui@loongson.cn/ (local) [2]: https://lore.kernel.org/rust-for-linux/20231020155056.3495121-1-Jamie.Cunliffe@arm.com/ (local)I can confirm that the fix patch [2], based on patch [1], is suitable for LoongArch. LoongArch encounters no issues when using the built-in `loongarch64-unknown-none-softfloat` target. Once patch [1] is merged into the mainline, I'll send a patch to switch to using the built-in target.
But, [1] and [2] must be squashed together. Otherwise, [1] is changing the behavior of loongach, while the commit description does not mention it.
Thanks, Rui [1]: https://lore.kernel.org/rust-for-linux/20231020155056.3495121-1-Jamie.Cunliffe@arm.com/ (local) [2]: https://github.com/heiher/linux/commit/c504d83a6edd963e2ba58ec538e3f06da78b187e.patchquoted
quoted
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 FORCEdiff --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 +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 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel