Message ID | 20240905-mips-rust-v2-1-409d66819418@flygoat.com (mailing list archive) |
---|---|
State | Handled Elsewhere |
Headers | show |
Series | rust: Initial MIPS support | expand |
On Thu, 05 Sep 2024 14:33:05 +0100 Jiaxun Yang <jiaxun.yang@flygoat.com> wrote: > scripts/generate_rust_target.rs is used by several architectures > to generate target.json target spec file. > > However the enablement of this feature was controlled by target > specific Makefile pieces spreading everywhere. > > Introduce HAVE_GENERATE_RUST_TARGET config option as a centralized > switch to control the per-arch usage of generate_rust_target.rs. > > Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com> > --- > v2: > - Reword Kconfig help > - Remove x86 specific condition for UM > --- > Makefile | 3 +++ > arch/Kconfig | 8 ++++++++ > arch/um/Kconfig | 1 + > arch/x86/Makefile | 1 - > arch/x86/Makefile.um | 1 - > rust/Makefile | 2 +- > scripts/Makefile | 4 +--- > 7 files changed, 14 insertions(+), 6 deletions(-) > > diff --git a/Makefile b/Makefile > index 2c1db7a6f793..b183855c34ea 100644 > --- a/Makefile > +++ b/Makefile > @@ -807,6 +807,9 @@ KBUILD_CFLAGS += -Os > KBUILD_RUSTFLAGS += -Copt-level=s > endif > > +ifdef CONFIG_HAVE_GENERATE_RUST_TARGET > +KBUILD_RUSTFLAGS += --target=$(objtree)/scripts/target.json > +endif > # Always set `debug-assertions` and `overflow-checks` because their default > # depends on `opt-level` and `debug-assertions`, respectively. > KBUILD_RUSTFLAGS += -Cdebug-assertions=$(if $(CONFIG_RUST_DEBUG_ASSERTIONS),y,n) > diff --git a/arch/Kconfig b/arch/Kconfig > index 4e2eaba9e305..0865ff4796e7 100644 > --- a/arch/Kconfig > +++ b/arch/Kconfig > @@ -377,6 +377,14 @@ config HAVE_RUST > This symbol should be selected by an architecture if it > supports Rust. > > +config HAVE_GENERATE_RUST_TARGET > + bool > + depends on HAVE_RUST > + help > + This symbol should be selected by an architecture if it > + needs generating Rust target.json file with > + scripts/generate_rust_target.rs. > + > config HAVE_FUNCTION_ARG_ACCESS_API > bool > help > diff --git a/arch/um/Kconfig b/arch/um/Kconfig > index dca84fd6d00a..6b1c8ae2422d 100644 > --- a/arch/um/Kconfig > +++ b/arch/um/Kconfig > @@ -32,6 +32,7 @@ config UML > select TTY # Needed for line.c > select HAVE_ARCH_VMAP_STACK > select HAVE_RUST > + select HAVE_GENERATE_RUST_TARGET > select ARCH_HAS_UBSAN > > config MMU > diff --git a/arch/x86/Makefile b/arch/x86/Makefile > index a1883a30a5d8..cbd707f88a63 100644 > --- a/arch/x86/Makefile > +++ b/arch/x86/Makefile > @@ -75,7 +75,6 @@ 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 > > # > diff --git a/arch/x86/Makefile.um b/arch/x86/Makefile.um > index a46b1397ad01..2106a2bd152b 100644 > --- a/arch/x86/Makefile.um > +++ b/arch/x86/Makefile.um > @@ -9,7 +9,6 @@ core-y += arch/x86/crypto/ > # > ifeq ($(CONFIG_CC_IS_CLANG),y) > 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 > endif > > diff --git a/rust/Makefile b/rust/Makefile > index 99204e33f1dd..fe3640b98011 100644 > --- a/rust/Makefile > +++ b/rust/Makefile > @@ -378,7 +378,7 @@ $(obj)/core.o: private rustc_objcopy = $(foreach sym,$(redirect-intrinsics),--re > $(obj)/core.o: private rustc_target_flags = $(core-cfgs) > $(obj)/core.o: $(RUST_LIB_SRC)/core/src/lib.rs FORCE > +$(call if_changed_rule,rustc_library) > -ifneq ($(or $(CONFIG_X86_64),$(CONFIG_X86_32)),) > +ifdef CONFIG_HAVE_GENERATE_RUST_TARGET > $(obj)/core.o: scripts/target.json > endif > > diff --git a/scripts/Makefile b/scripts/Makefile > index dccef663ca82..33258a856a1a 100644 > --- a/scripts/Makefile > +++ b/scripts/Makefile > @@ -12,13 +12,11 @@ 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 > > -ifneq ($(or $(CONFIG_X86_64),$(CONFIG_X86_32)),) > -always-$(CONFIG_RUST) += target.json > +always-$(CONFIG_HAVE_GENERATE_RUST_TARGET) += 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 Wouldn't this change cause target.json to be built when CONFIG_HAVE_GENERATE_RUST_TARGET is selected by arch but CONFIG_RUST is disabled? Best, Gary > > hostprogs += generate_rust_target > generate_rust_target-rust := y >
diff --git a/Makefile b/Makefile index 2c1db7a6f793..b183855c34ea 100644 --- a/Makefile +++ b/Makefile @@ -807,6 +807,9 @@ KBUILD_CFLAGS += -Os KBUILD_RUSTFLAGS += -Copt-level=s endif +ifdef CONFIG_HAVE_GENERATE_RUST_TARGET +KBUILD_RUSTFLAGS += --target=$(objtree)/scripts/target.json +endif # Always set `debug-assertions` and `overflow-checks` because their default # depends on `opt-level` and `debug-assertions`, respectively. KBUILD_RUSTFLAGS += -Cdebug-assertions=$(if $(CONFIG_RUST_DEBUG_ASSERTIONS),y,n) diff --git a/arch/Kconfig b/arch/Kconfig index 4e2eaba9e305..0865ff4796e7 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -377,6 +377,14 @@ config HAVE_RUST This symbol should be selected by an architecture if it supports Rust. +config HAVE_GENERATE_RUST_TARGET + bool + depends on HAVE_RUST + help + This symbol should be selected by an architecture if it + needs generating Rust target.json file with + scripts/generate_rust_target.rs. + config HAVE_FUNCTION_ARG_ACCESS_API bool help diff --git a/arch/um/Kconfig b/arch/um/Kconfig index dca84fd6d00a..6b1c8ae2422d 100644 --- a/arch/um/Kconfig +++ b/arch/um/Kconfig @@ -32,6 +32,7 @@ config UML select TTY # Needed for line.c select HAVE_ARCH_VMAP_STACK select HAVE_RUST + select HAVE_GENERATE_RUST_TARGET select ARCH_HAS_UBSAN config MMU diff --git a/arch/x86/Makefile b/arch/x86/Makefile index a1883a30a5d8..cbd707f88a63 100644 --- a/arch/x86/Makefile +++ b/arch/x86/Makefile @@ -75,7 +75,6 @@ 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 # diff --git a/arch/x86/Makefile.um b/arch/x86/Makefile.um index a46b1397ad01..2106a2bd152b 100644 --- a/arch/x86/Makefile.um +++ b/arch/x86/Makefile.um @@ -9,7 +9,6 @@ core-y += arch/x86/crypto/ # ifeq ($(CONFIG_CC_IS_CLANG),y) 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 endif diff --git a/rust/Makefile b/rust/Makefile index 99204e33f1dd..fe3640b98011 100644 --- a/rust/Makefile +++ b/rust/Makefile @@ -378,7 +378,7 @@ $(obj)/core.o: private rustc_objcopy = $(foreach sym,$(redirect-intrinsics),--re $(obj)/core.o: private rustc_target_flags = $(core-cfgs) $(obj)/core.o: $(RUST_LIB_SRC)/core/src/lib.rs FORCE +$(call if_changed_rule,rustc_library) -ifneq ($(or $(CONFIG_X86_64),$(CONFIG_X86_32)),) +ifdef CONFIG_HAVE_GENERATE_RUST_TARGET $(obj)/core.o: scripts/target.json endif diff --git a/scripts/Makefile b/scripts/Makefile index dccef663ca82..33258a856a1a 100644 --- a/scripts/Makefile +++ b/scripts/Makefile @@ -12,13 +12,11 @@ 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 -ifneq ($(or $(CONFIG_X86_64),$(CONFIG_X86_32)),) -always-$(CONFIG_RUST) += target.json +always-$(CONFIG_HAVE_GENERATE_RUST_TARGET) += 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
scripts/generate_rust_target.rs is used by several architectures to generate target.json target spec file. However the enablement of this feature was controlled by target specific Makefile pieces spreading everywhere. Introduce HAVE_GENERATE_RUST_TARGET config option as a centralized switch to control the per-arch usage of generate_rust_target.rs. Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com> --- v2: - Reword Kconfig help - Remove x86 specific condition for UM --- Makefile | 3 +++ arch/Kconfig | 8 ++++++++ arch/um/Kconfig | 1 + arch/x86/Makefile | 1 - arch/x86/Makefile.um | 1 - rust/Makefile | 2 +- scripts/Makefile | 4 +--- 7 files changed, 14 insertions(+), 6 deletions(-)