rust-for-linux.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v5 0/4] EDITME: RISC-V: re-enable gcc + rust builds
@ 2025-12-04  7:54 Asuna Yang
  2025-12-04  7:54 ` [PATCH v5 1/4] rust: export BINDGEN_TARGET from a separate Makefile Asuna Yang
                   ` (4 more replies)
  0 siblings, 5 replies; 11+ messages in thread
From: Asuna Yang @ 2025-12-04  7:54 UTC (permalink / raw)
  To: Nathan Chancellor, Nicolas Schier, Miguel Ojeda, Boqun Feng,
	Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
	Alice Ryhl, Trevor Gross, Danilo Krummrich, Nick Desaulniers,
	Bill Wendling, Justin Stitt, Paul Walmsley, Palmer Dabbelt,
	Albert Ou, Alexandre Ghiti, Jonathan Corbet, Jason Montleon,
	Han Gao, Conor Dooley, Vivian Wang
  Cc: linux-kbuild, linux-kernel, rust-for-linux, llvm, linux-riscv,
	linux-doc, Asuna Yang, Asuna Yang

Previous v4 patch:
https://lore.kernel.org/rust-for-linux/20251124-gcc-rust-v4-v4-0-4e06e07421ae@gmail.com/T/#t

Compared to v4, this v5:
- Placed `include Makefile.rust` under `ifdef need-compiler` branch. From my local testing, this did not cause any issues.
- The Kconfig function now only tests backend flags and has been renamed to `bindgen-option`, without depending on environment variable. Added a comment explaining the meaning of "backend".
- Improved the wording of commit messages and provided further details.

Signed-off-by: Asuna Yang <SpriteOvO@gmail.com>
---
Asuna Yang (4):
      rust: export BINDGEN_TARGET from a separate Makefile
      rust: generate a fatal error if BINDGEN_TARGET is undefined
      rust: add a Kconfig function to test for support of bindgen options
      RISC-V: handle extension configs for bindgen, re-enable gcc + rust builds

 Documentation/rust/arch-support.rst |  2 +-
 Makefile                            |  3 ++-
 arch/riscv/Kconfig                  | 35 ++++++++++++++++++++++++++++++++++-
 rust/Makefile                       | 11 ++---------
 scripts/Kconfig.include             |  5 +++++
 scripts/Makefile.rust               | 14 ++++++++++++++
 6 files changed, 58 insertions(+), 12 deletions(-)
---
base-commit: 559e608c46553c107dbba19dae0854af7b219400
change-id: 20251204-gcc-rust-v5-aafcede31ea3

Best regards,
-- 
Asuna Yang <SpriteOvO@gmail.com>


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v5 1/4] rust: export BINDGEN_TARGET from a separate Makefile
  2025-12-04  7:54 [PATCH v5 0/4] EDITME: RISC-V: re-enable gcc + rust builds Asuna Yang
@ 2025-12-04  7:54 ` Asuna Yang
  2025-12-04  7:54 ` [PATCH v5 2/4] rust: generate a fatal error if BINDGEN_TARGET is undefined Asuna Yang
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 11+ messages in thread
From: Asuna Yang @ 2025-12-04  7:54 UTC (permalink / raw)
  To: Nathan Chancellor, Nicolas Schier, Miguel Ojeda, Boqun Feng,
	Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
	Alice Ryhl, Trevor Gross, Danilo Krummrich, Nick Desaulniers,
	Bill Wendling, Justin Stitt, Paul Walmsley, Palmer Dabbelt,
	Albert Ou, Alexandre Ghiti, Jonathan Corbet, Jason Montleon,
	Han Gao, Conor Dooley, Vivian Wang
  Cc: linux-kbuild, linux-kernel, rust-for-linux, llvm, linux-riscv,
	linux-doc, Asuna Yang, Asuna Yang

From: Asuna Yang <spriteovo@gmail.com>

A subsequent commit will add a new function `bindgen-option` to
`scripts/Kconfig.include`. The bindgen backend requires the `--target`
option for cross compiling, but variable `BINDGEN_TARGET` in
`rust/Makefile` cannot be exported to `scripts/Kconfig.include`.

Therefore, move this variable to a separate new `Makefile.rust` file and
include it from `scripts/Makefile` to make the exported variable
available for use in Kconfig. Place the include in the `need-compiler`
branch to avoid including it in irrelevant make targets.

Since the new file name is `Makefile.rust`, it matches an existing
MAINTAINERS rule `scripts/*rust*`, so no modification to the MAINTAINERS
file is needed.

Signed-off-by: Asuna Yang <SpriteOvO@gmail.com>
---
 Makefile              | 3 ++-
 rust/Makefile         | 8 --------
 scripts/Makefile.rust | 9 +++++++++
 3 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/Makefile b/Makefile
index e61f1300fea0..bdbf2025e68c 100644
--- a/Makefile
+++ b/Makefile
@@ -718,9 +718,10 @@ ifneq ($(findstring clang,$(CC_VERSION_TEXT)),)
 include $(srctree)/scripts/Makefile.clang
 endif
 
+ifdef need-compiler
+include $(srctree)/scripts/Makefile.rust
 # Include this also for config targets because some architectures need
 # cc-cross-prefix to determine CROSS_COMPILE.
-ifdef need-compiler
 include $(srctree)/scripts/Makefile.compiler
 endif
 
diff --git a/rust/Makefile b/rust/Makefile
index 5d357dce1704..2603b34f9833 100644
--- a/rust/Makefile
+++ b/rust/Makefile
@@ -385,14 +385,6 @@ bindgen_skip_c_flags := -mno-fp-ret-in-387 -mpreferred-stack-boundary=% \
 	-fzero-init-padding-bits=% -mno-fdpic \
 	--param=% --param asan-% -fno-isolate-erroneous-paths-dereference
 
-# Derived from `scripts/Makefile.clang`.
-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
-BINDGEN_TARGET_um	:= $(BINDGEN_TARGET_$(SUBARCH))
-BINDGEN_TARGET		:= $(BINDGEN_TARGET_$(SRCARCH))
-
 # All warnings are inhibited since GCC builds are very experimental,
 # many GCC warnings are not supported by Clang, they may only appear in
 # some configurations, with new GCC versions, etc.
diff --git a/scripts/Makefile.rust b/scripts/Makefile.rust
new file mode 100644
index 000000000000..5c12b4b8c8b6
--- /dev/null
+++ b/scripts/Makefile.rust
@@ -0,0 +1,9 @@
+# Derived from `scripts/Makefile.clang`.
+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
+BINDGEN_TARGET_um	:= $(BINDGEN_TARGET_$(SUBARCH))
+BINDGEN_TARGET		:= $(BINDGEN_TARGET_$(SRCARCH))
+
+export BINDGEN_TARGET

-- 
2.51.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v5 2/4] rust: generate a fatal error if BINDGEN_TARGET is undefined
  2025-12-04  7:54 [PATCH v5 0/4] EDITME: RISC-V: re-enable gcc + rust builds Asuna Yang
  2025-12-04  7:54 ` [PATCH v5 1/4] rust: export BINDGEN_TARGET from a separate Makefile Asuna Yang
@ 2025-12-04  7:54 ` Asuna Yang
  2025-12-04 12:41   ` Asuna Yang
  2025-12-04  7:54 ` [PATCH v5 3/4] rust: add a Kconfig function to test for support of bindgen options Asuna Yang
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 11+ messages in thread
From: Asuna Yang @ 2025-12-04  7:54 UTC (permalink / raw)
  To: Nathan Chancellor, Nicolas Schier, Miguel Ojeda, Boqun Feng,
	Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
	Alice Ryhl, Trevor Gross, Danilo Krummrich, Nick Desaulniers,
	Bill Wendling, Justin Stitt, Paul Walmsley, Palmer Dabbelt,
	Albert Ou, Alexandre Ghiti, Jonathan Corbet, Jason Montleon,
	Han Gao, Conor Dooley, Vivian Wang
  Cc: linux-kbuild, linux-kernel, rust-for-linux, llvm, linux-riscv,
	linux-doc, Asuna Yang, Asuna Yang

From: Asuna Yang <spriteovo@gmail.com>

Generate a friendly fatal error if the target triplet is undefined for
bindgen, rather than having the compiler generate obscure error messages
during the build stage.

This piece of code is copied from `scripts/Makefile.clang`.

Before this commit, error messages might look like:

error: unknown argument: '-mno-riscv-attribute'
error: unsupported argument 'medany' to option '-mcmodel=' for target
'unknown'
error: unsupported option '-march=' for target ''
error: unsupported option '-mno-save-restore' for target ''
error: unknown target triple 'unknown'
panicked at bindgen/ir/context.rs:562:15:
libclang error; possible causes include:
- Invalid flag syntax
- Unrecognized flags
- Invalid flag arguments
- File I/O errors
- Host vs. target architecture mismatch

Acked-by: Miguel Ojeda <ojeda@kernel.org>
Signed-off-by: Asuna Yang <SpriteOvO@gmail.com>
---
 scripts/Makefile.rust | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/scripts/Makefile.rust b/scripts/Makefile.rust
index 5c12b4b8c8b6..b219244cd051 100644
--- a/scripts/Makefile.rust
+++ b/scripts/Makefile.rust
@@ -6,4 +6,8 @@ BINDGEN_TARGET_loongarch	:= loongarch64-linux-gnusf
 BINDGEN_TARGET_um	:= $(BINDGEN_TARGET_$(SUBARCH))
 BINDGEN_TARGET		:= $(BINDGEN_TARGET_$(SRCARCH))
 
+ifeq ($(BINDGEN_TARGET),)
+$(error add '--target=' option to scripts/Makefile.rust)
+else
 export BINDGEN_TARGET
+endif

-- 
2.51.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v5 3/4] rust: add a Kconfig function to test for support of bindgen options
  2025-12-04  7:54 [PATCH v5 0/4] EDITME: RISC-V: re-enable gcc + rust builds Asuna Yang
  2025-12-04  7:54 ` [PATCH v5 1/4] rust: export BINDGEN_TARGET from a separate Makefile Asuna Yang
  2025-12-04  7:54 ` [PATCH v5 2/4] rust: generate a fatal error if BINDGEN_TARGET is undefined Asuna Yang
@ 2025-12-04  7:54 ` Asuna Yang
  2025-12-04  9:06   ` Vivian Wang
  2025-12-04  7:54 ` [PATCH v5 4/4] RISC-V: handle extension configs for bindgen, re-enable gcc + rust builds Asuna Yang
  2025-12-04  8:26 ` [PATCH v5 0/4] EDITME: RISC-V: " Asuna Yang
  4 siblings, 1 reply; 11+ messages in thread
From: Asuna Yang @ 2025-12-04  7:54 UTC (permalink / raw)
  To: Nathan Chancellor, Nicolas Schier, Miguel Ojeda, Boqun Feng,
	Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
	Alice Ryhl, Trevor Gross, Danilo Krummrich, Nick Desaulniers,
	Bill Wendling, Justin Stitt, Paul Walmsley, Palmer Dabbelt,
	Albert Ou, Alexandre Ghiti, Jonathan Corbet, Jason Montleon,
	Han Gao, Conor Dooley, Vivian Wang
  Cc: linux-kbuild, linux-kernel, rust-for-linux, llvm, linux-riscv,
	linux-doc, Asuna Yang, Asuna Yang

From: Asuna Yang <spriteovo@gmail.com>

Add a new `bindgen-backend-option` Kconfig function to test whether the
bindgen backend supports a given flag.

A subsequent commit will use this function to test for RISC-V extension
flags.

Signed-off-by: Asuna Yang <SpriteOvO@gmail.com>
---
 scripts/Kconfig.include | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/scripts/Kconfig.include b/scripts/Kconfig.include
index d42042b6c9e2..5d4d29eed0b3 100644
--- a/scripts/Kconfig.include
+++ b/scripts/Kconfig.include
@@ -78,3 +78,8 @@ rustc-llvm-version := $(shell,$(srctree)/scripts/rustc-llvm-version.sh $(RUSTC))
 # If you are testing for unstable features, consider testing RUSTC_VERSION
 # instead, as features may have different completeness while available.
 rustc-option = $(success,trap "rm -rf .tmp_$$" EXIT; mkdir .tmp_$$; $(RUSTC) $(1) --crate-type=rlib /dev/null --out-dir=.tmp_$$ -o .tmp_$$/tmp.rlib)
+
+# $(bindgen-backend-option,<flag>)
+# Return y if bindgen backend supports <flag>, n otherwise
+# For now, the backend refers only to libclang, so more specifically, this function tests whether the given flag is recognized by the libclang used by bindgen.
+bindgen-backend-option = $(success,trap "rm -f .tmp_$$.h" EXIT; touch .tmp_$$.h; $(BINDGEN) .tmp_$$.h -- --target=$(BINDGEN_TARGET) $(1))

-- 
2.51.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v5 4/4] RISC-V: handle extension configs for bindgen, re-enable gcc + rust builds
  2025-12-04  7:54 [PATCH v5 0/4] EDITME: RISC-V: re-enable gcc + rust builds Asuna Yang
                   ` (2 preceding siblings ...)
  2025-12-04  7:54 ` [PATCH v5 3/4] rust: add a Kconfig function to test for support of bindgen options Asuna Yang
@ 2025-12-04  7:54 ` Asuna Yang
  2025-12-04  8:26 ` [PATCH v5 0/4] EDITME: RISC-V: " Asuna Yang
  4 siblings, 0 replies; 11+ messages in thread
From: Asuna Yang @ 2025-12-04  7:54 UTC (permalink / raw)
  To: Nathan Chancellor, Nicolas Schier, Miguel Ojeda, Boqun Feng,
	Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
	Alice Ryhl, Trevor Gross, Danilo Krummrich, Nick Desaulniers,
	Bill Wendling, Justin Stitt, Paul Walmsley, Palmer Dabbelt,
	Albert Ou, Alexandre Ghiti, Jonathan Corbet, Jason Montleon,
	Han Gao, Conor Dooley, Vivian Wang
  Cc: linux-kbuild, linux-kernel, rust-for-linux, llvm, linux-riscv,
	linux-doc, Asuna Yang, Asuna Yang

From: Asuna Yang <spriteovo@gmail.com>

Commit 33549fcf37ec ("RISC-V: disallow gcc + rust builds") disabled GCC
+ Rust builds for RISC-V due to differences in extension handling
compared to LLVM. This commit enables GCC + Rust builds again.

Add `bindgen-option` conditions for the availability of libclang to the
RISC-V extension Kconfig symbols that depend on the `cc-option`
function.

For Zicsr/Zifencei special handling, since LLVM/Clang always enables
these two extensions, either don't pass them to `-march`, or pass them
explicitly and Rust bindgen libclang must recognize them.

Clang does not support `-mno-riscv-attribute` flag, filter it out to
resolve error: unknown argument: '-mno-riscv-attribute'.

Define `BINDGEN_TARGET_riscv` to pass the target triplet to Rust bindgen
libclang for RISC-V to resolve error: unsupported argument 'medany' to
option '-mcmodel=' for target 'unknown'.

Update the documentation, GCC + Rust builds for RISC-V are now
maintained.

Acked-by: Miguel Ojeda <ojeda@kernel.org>
Signed-off-by: Asuna Yang <SpriteOvO@gmail.com>
---
 Documentation/rust/arch-support.rst |  2 +-
 arch/riscv/Kconfig                  | 35 ++++++++++++++++++++++++++++++++++-
 rust/Makefile                       |  3 ++-
 scripts/Makefile.rust               |  1 +
 4 files changed, 38 insertions(+), 3 deletions(-)

diff --git a/Documentation/rust/arch-support.rst b/Documentation/rust/arch-support.rst
index 6e6a515d0899..5282e0e174e8 100644
--- a/Documentation/rust/arch-support.rst
+++ b/Documentation/rust/arch-support.rst
@@ -18,7 +18,7 @@ Architecture   Level of support  Constraints
 ``arm``        Maintained        ARMv7 Little Endian only.
 ``arm64``      Maintained        Little Endian only.
 ``loongarch``  Maintained        \-
-``riscv``      Maintained        ``riscv64`` and LLVM/Clang only.
+``riscv``      Maintained        ``riscv64`` only.
 ``um``         Maintained        \-
 ``x86``        Maintained        ``x86_64`` only.
 =============  ================  ==============================================
diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
index fadec20b87a8..9a5606396646 100644
--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
@@ -193,7 +193,7 @@ config RISCV
 	select HAVE_REGS_AND_STACK_ACCESS_API
 	select HAVE_RETHOOK if !XIP_KERNEL
 	select HAVE_RSEQ
-	select HAVE_RUST if RUSTC_SUPPORTS_RISCV && CC_IS_CLANG
+	select HAVE_RUST if RUSTC_SUPPORTS_RISCV && TOOLCHAIN_MATCHES_ZICSR_ZIFENCEI
 	select HAVE_SAMPLE_FTRACE_DIRECT
 	select HAVE_SAMPLE_FTRACE_DIRECT_MULTI
 	select HAVE_STACKPROTECTOR
@@ -617,6 +617,8 @@ config TOOLCHAIN_HAS_V
 	depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32imv)
 	depends on LD_IS_LLD || LD_VERSION >= 23800
 	depends on AS_HAS_OPTION_ARCH
+	depends on !RUST || !64BIT || $(bindgen-backend-option,-mabi=lp64 -march=rv64imv)
+	depends on !RUST || !32BIT || $(bindgen-backend-option,-mabi=ilp32 -march=rv32imv)
 
 config RISCV_ISA_V
 	bool "Vector extension support"
@@ -681,6 +683,8 @@ config TOOLCHAIN_HAS_ZABHA
 	depends on !64BIT || $(cc-option,-mabi=lp64 -march=rv64ima_zabha)
 	depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32ima_zabha)
 	depends on AS_HAS_OPTION_ARCH
+	depends on !RUST || !64BIT || $(bindgen-backend-option,-mabi=lp64 -march=rv64ima_zabha)
+	depends on !RUST || !32BIT || $(bindgen-backend-option,-mabi=ilp32 -march=rv32ima_zabha)
 
 config RISCV_ISA_ZABHA
 	bool "Zabha extension support for atomic byte/halfword operations"
@@ -699,6 +703,8 @@ config TOOLCHAIN_HAS_ZACAS
 	depends on !64BIT || $(cc-option,-mabi=lp64 -march=rv64ima_zacas)
 	depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32ima_zacas)
 	depends on AS_HAS_OPTION_ARCH
+	depends on !RUST || !64BIT || $(bindgen-backend-option,-mabi=lp64 -march=rv64ima_zacas)
+	depends on !RUST || !32BIT || $(bindgen-backend-option,-mabi=ilp32 -march=rv32ima_zacas)
 
 config RISCV_ISA_ZACAS
 	bool "Zacas extension support for atomic CAS"
@@ -717,6 +723,8 @@ config TOOLCHAIN_HAS_ZBB
 	depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32ima_zbb)
 	depends on LD_IS_LLD || LD_VERSION >= 23900
 	depends on AS_HAS_OPTION_ARCH
+	depends on !RUST || !64BIT || $(bindgen-backend-option,-mabi=lp64 -march=rv64ima_zbb)
+	depends on !RUST || !32BIT || $(bindgen-backend-option,-mabi=ilp32 -march=rv32ima_zbb)
 
 # This symbol indicates that the toolchain supports all v1.0 vector crypto
 # extensions, including Zvk*, Zvbb, and Zvbc.  LLVM added all of these at once.
@@ -732,6 +740,8 @@ config TOOLCHAIN_HAS_ZBA
 	depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32ima_zba)
 	depends on LD_IS_LLD || LD_VERSION >= 23900
 	depends on AS_HAS_OPTION_ARCH
+	depends on !RUST || !64BIT || $(bindgen-backend-option,-mabi=lp64 -march=rv64ima_zba)
+	depends on !RUST || !32BIT || $(bindgen-backend-option,-mabi=ilp32 -march=rv32ima_zba)
 
 config RISCV_ISA_ZBA
 	bool "Zba extension support for bit manipulation instructions"
@@ -767,6 +777,8 @@ config TOOLCHAIN_HAS_ZBC
 	depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32ima_zbc)
 	depends on LD_IS_LLD || LD_VERSION >= 23900
 	depends on AS_HAS_OPTION_ARCH
+	depends on !RUST || !64BIT || $(bindgen-backend-option,-mabi=lp64 -march=rv64ima_zbc)
+	depends on !RUST || !32BIT || $(bindgen-backend-option,-mabi=ilp32 -march=rv32ima_zbc)
 
 config RISCV_ISA_ZBC
 	bool "Zbc extension support for carry-less multiplication instructions"
@@ -790,6 +802,8 @@ config TOOLCHAIN_HAS_ZBKB
 	depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32ima_zbkb)
 	depends on LD_IS_LLD || LD_VERSION >= 23900
 	depends on AS_HAS_OPTION_ARCH
+	depends on !RUST || !64BIT || $(bindgen-backend-option,-mabi=lp64 -march=rv64ima_zbkb)
+	depends on !RUST || !32BIT || $(bindgen-backend-option,-mabi=ilp32 -march=rv32ima_zbkb)
 
 config RISCV_ISA_ZBKB
 	bool "Zbkb extension support for bit manipulation instructions"
@@ -877,6 +891,25 @@ config TOOLCHAIN_NEEDS_OLD_ISA_SPEC
 	  versions of clang and GCC to be passed to GAS, which has the same result
 	  as passing zicsr and zifencei to -march.
 
+config RUST_BINDGEN_HAS_ZICSR_ZIFENCEI
+	def_bool y
+	depends on !64BIT || $(bindgen-backend-option,-mabi=lp64 -march=rv64ima_zicsr_zifencei)
+	depends on !32BIT || $(bindgen-backend-option,-mabi=ilp32 -march=rv32ima_zicsr_zifencei)
+
+config TOOLCHAIN_MATCHES_ZICSR_ZIFENCEI
+	def_bool y
+	# https://github.com/llvm/llvm-project/commit/22e199e6afb1263c943c0c0d4498694e15bf8a16
+	depends on TOOLCHAIN_NEEDS_OLD_ISA_SPEC || !TOOLCHAIN_NEEDS_EXPLICIT_ZICSR_ZIFENCEI || RUST_BINDGEN_HAS_ZICSR_ZIFENCEI
+	help
+	  LLVM/Clang >= 17.0.0 starts recognizing Zicsr/Zifencei in -march, passing
+	  them to -march doesn't generate an error anymore, and passing them or not
+	  doesn't have any real difference, it still follows ISA before version
+	  20190608 - Zicsr/Zifencei are included in base ISA.
+
+	  The current latest version of LLVM/Clang still does not require explicit
+	  Zicsr/Zifencei to enable these two extensions, Clang just accepts them in
+	  -march and then silently ignores them.
+
 config FPU
 	bool "FPU support"
 	default y
diff --git a/rust/Makefile b/rust/Makefile
index 2603b34f9833..079af058ddde 100644
--- a/rust/Makefile
+++ b/rust/Makefile
@@ -383,7 +383,8 @@ bindgen_skip_c_flags := -mno-fp-ret-in-387 -mpreferred-stack-boundary=% \
 	-fno-inline-functions-called-once -fsanitize=bounds-strict \
 	-fstrict-flex-arrays=% -fmin-function-alignment=% \
 	-fzero-init-padding-bits=% -mno-fdpic \
-	--param=% --param asan-% -fno-isolate-erroneous-paths-dereference
+	--param=% --param asan-% -fno-isolate-erroneous-paths-dereference \
+	-mno-riscv-attribute
 
 # All warnings are inhibited since GCC builds are very experimental,
 # many GCC warnings are not supported by Clang, they may only appear in
diff --git a/scripts/Makefile.rust b/scripts/Makefile.rust
index b219244cd051..cee28a604830 100644
--- a/scripts/Makefile.rust
+++ b/scripts/Makefile.rust
@@ -3,6 +3,7 @@ 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
+BINDGEN_TARGET_riscv	:= riscv64-linux-gnu
 BINDGEN_TARGET_um	:= $(BINDGEN_TARGET_$(SUBARCH))
 BINDGEN_TARGET		:= $(BINDGEN_TARGET_$(SRCARCH))
 

-- 
2.51.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH v5 0/4] EDITME: RISC-V: re-enable gcc + rust builds
  2025-12-04  7:54 [PATCH v5 0/4] EDITME: RISC-V: re-enable gcc + rust builds Asuna Yang
                   ` (3 preceding siblings ...)
  2025-12-04  7:54 ` [PATCH v5 4/4] RISC-V: handle extension configs for bindgen, re-enable gcc + rust builds Asuna Yang
@ 2025-12-04  8:26 ` Asuna Yang
  4 siblings, 0 replies; 11+ messages in thread
From: Asuna Yang @ 2025-12-04  8:26 UTC (permalink / raw)
  To: Nathan Chancellor, Nicolas Schier, Miguel Ojeda, Boqun Feng,
	Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
	Alice Ryhl, Trevor Gross, Danilo Krummrich, Nick Desaulniers,
	Bill Wendling, Justin Stitt, Paul Walmsley, Palmer Dabbelt,
	Albert Ou, Alexandre Ghiti, Jonathan Corbet, Jason Montleon,
	Han Gao, Conor Dooley, Vivian Wang
  Cc: linux-kbuild, linux-kernel, rust-for-linux, llvm, linux-riscv,
	linux-doc

Please ignore the "EDITME" in the title, I forgot to remove it from `b4 
--edit-cover`.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v5 3/4] rust: add a Kconfig function to test for support of bindgen options
  2025-12-04  7:54 ` [PATCH v5 3/4] rust: add a Kconfig function to test for support of bindgen options Asuna Yang
@ 2025-12-04  9:06   ` Vivian Wang
  2025-12-04 12:33     ` Asuna Yang
  0 siblings, 1 reply; 11+ messages in thread
From: Vivian Wang @ 2025-12-04  9:06 UTC (permalink / raw)
  To: Asuna Yang, Nathan Chancellor, Nicolas Schier, Miguel Ojeda,
	Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin,
	Andreas Hindborg, Alice Ryhl, Trevor Gross, Danilo Krummrich,
	Nick Desaulniers, Bill Wendling, Justin Stitt, Paul Walmsley,
	Palmer Dabbelt, Albert Ou, Alexandre Ghiti, Jonathan Corbet,
	Jason Montleon, Han Gao, Conor Dooley
  Cc: linux-kbuild, linux-kernel, rust-for-linux, llvm, linux-riscv,
	linux-doc


On 12/4/25 15:54, Asuna Yang wrote:
> From: Asuna Yang <spriteovo@gmail.com>
>
> Add a new `bindgen-backend-option` Kconfig function to test whether the
> bindgen backend supports a given flag.
>
> A subsequent commit will use this function to test for RISC-V extension
> flags.
>
> Signed-off-by: Asuna Yang <SpriteOvO@gmail.com>
> ---
>  scripts/Kconfig.include | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/scripts/Kconfig.include b/scripts/Kconfig.include
> index d42042b6c9e2..5d4d29eed0b3 100644
> --- a/scripts/Kconfig.include
> +++ b/scripts/Kconfig.include
> @@ -78,3 +78,8 @@ rustc-llvm-version := $(shell,$(srctree)/scripts/rustc-llvm-version.sh $(RUSTC))
>  # If you are testing for unstable features, consider testing RUSTC_VERSION
>  # instead, as features may have different completeness while available.
>  rustc-option = $(success,trap "rm -rf .tmp_$$" EXIT; mkdir .tmp_$$; $(RUSTC) $(1) --crate-type=rlib /dev/null --out-dir=.tmp_$$ -o .tmp_$$/tmp.rlib)
> +
> +# $(bindgen-backend-option,<flag>)
> +# Return y if bindgen backend supports <flag>, n otherwise
> +# For now, the backend refers only to libclang, so more specifically, this function tests whether the given flag is recognized by the libclang used by bindgen.
> +bindgen-backend-option = $(success,trap "rm -f .tmp_$$.h" EXIT; touch .tmp_$$.h; $(BINDGEN) .tmp_$$.h -- --target=$(BINDGEN_TARGET) $(1))
>
Can probably be simplified down to:

$(BINDGEN) /dev/null -- -x c --target=$(BINDGEN_TARGET) $(1)


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v5 3/4] rust: add a Kconfig function to test for support of bindgen options
  2025-12-04  9:06   ` Vivian Wang
@ 2025-12-04 12:33     ` Asuna Yang
  2025-12-06 18:16       ` Vivian Wang
  0 siblings, 1 reply; 11+ messages in thread
From: Asuna Yang @ 2025-12-04 12:33 UTC (permalink / raw)
  To: Vivian Wang, Nathan Chancellor, Nicolas Schier, Miguel Ojeda,
	Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin,
	Andreas Hindborg, Alice Ryhl, Trevor Gross, Danilo Krummrich,
	Nick Desaulniers, Bill Wendling, Justin Stitt, Paul Walmsley,
	Palmer Dabbelt, Albert Ou, Alexandre Ghiti, Jonathan Corbet,
	Jason Montleon, Han Gao, Conor Dooley
  Cc: linux-kbuild, linux-kernel, rust-for-linux, llvm, linux-riscv,
	linux-doc

On 12/4/25 5:06 PM, Vivian Wang wrote:

>> +
>> +# $(bindgen-backend-option,<flag>)
>> +# Return y if bindgen backend supports <flag>, n otherwise
>> +# For now, the backend refers only to libclang, so more specifically, this function tests whether the given flag is recognized by the libclang used by bindgen.
>> +bindgen-backend-option = $(success,trap "rm -f .tmp_$$.h" EXIT; touch .tmp_$$.h; $(BINDGEN) .tmp_$$.h -- --target=$(BINDGEN_TARGET) $(1))
>>
> Can probably be simplified down to:
> 
> $(BINDGEN) /dev/null -- -x c --target=$(BINDGEN_TARGET) $(1)
> 

bindgen is sensitive to file extensions. If the file is not .h or .hpp, 
it complains:

panicked at bindgen/ir/context.rs:562:15:
libclang error; possible causes include:
- Invalid flag syntax
- Unrecognized flags
- Invalid flag arguments
- File I/O errors
- Host vs. target architecture mismatch

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v5 2/4] rust: generate a fatal error if BINDGEN_TARGET is undefined
  2025-12-04  7:54 ` [PATCH v5 2/4] rust: generate a fatal error if BINDGEN_TARGET is undefined Asuna Yang
@ 2025-12-04 12:41   ` Asuna Yang
  0 siblings, 0 replies; 11+ messages in thread
From: Asuna Yang @ 2025-12-04 12:41 UTC (permalink / raw)
  To: Nathan Chancellor, Nicolas Schier, Miguel Ojeda, Boqun Feng,
	Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
	Alice Ryhl, Trevor Gross, Danilo Krummrich, Nick Desaulniers,
	Bill Wendling, Justin Stitt, Paul Walmsley, Palmer Dabbelt,
	Albert Ou, Alexandre Ghiti, Jonathan Corbet, Jason Montleon,
	Han Gao, Conor Dooley, Vivian Wang
  Cc: linux-kbuild, linux-kernel, rust-for-linux, llvm, linux-riscv,
	linux-doc

I noticed that RISC-V CI bjorn/dtb-warn-rv64 [^1] is failing somehow due 
to the error here. I'll look into it tomorrow.

[^1]: 
https://patchwork.kernel.org/project/linux-riscv/patch/20251204-gcc-rust-v5-v5-4-2d4f20d86c24@gmail.com/

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v5 3/4] rust: add a Kconfig function to test for support of bindgen options
  2025-12-04 12:33     ` Asuna Yang
@ 2025-12-06 18:16       ` Vivian Wang
  2025-12-06 23:41         ` Asuna Yang
  0 siblings, 1 reply; 11+ messages in thread
From: Vivian Wang @ 2025-12-06 18:16 UTC (permalink / raw)
  To: Asuna Yang, Nathan Chancellor, Nicolas Schier, Miguel Ojeda,
	Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin,
	Andreas Hindborg, Alice Ryhl, Trevor Gross, Danilo Krummrich,
	Nick Desaulniers, Bill Wendling, Justin Stitt, Paul Walmsley,
	Palmer Dabbelt, Albert Ou, Alexandre Ghiti, Jonathan Corbet,
	Jason Montleon, Han Gao, Conor Dooley
  Cc: linux-kbuild, linux-kernel, rust-for-linux, llvm, linux-riscv,
	linux-doc


On 12/4/25 20:33, Asuna Yang wrote:
> On 12/4/25 5:06 PM, Vivian Wang wrote:
>
>>> +
>>> +# $(bindgen-backend-option,<flag>)
>>> +# Return y if bindgen backend supports <flag>, n otherwise
>>> +# For now, the backend refers only to libclang, so more
>>> specifically, this function tests whether the given flag is
>>> recognized by the libclang used by bindgen.
>>> +bindgen-backend-option = $(success,trap "rm -f .tmp_$$.h" EXIT;
>>> touch .tmp_$$.h; $(BINDGEN) .tmp_$$.h -- --target=$(BINDGEN_TARGET)
>>> $(1))
>>>
>> Can probably be simplified down to:
>>
>> $(BINDGEN) /dev/null -- -x c --target=$(BINDGEN_TARGET) $(1)
>>
>
> bindgen is sensitive to file extensions. If the file is not .h or
> .hpp, it complains:
>
> panicked at bindgen/ir/context.rs:562:15:
> libclang error; possible causes include:
> - Invalid flag syntax
> - Unrecognized flags
> - Invalid flag arguments
> - File I/O errors
> - Host vs. target architecture mismatch 

That's so weird... I can't reproduce this if i pass -x c to bindgen,
like this:

$ bindgen --version
bindgen 0.72.1
$ bindgen /dev/null
panicked at /build/rust-bindgen-unwrapped-0.72.1-vendor/bindgen-0.72.1/ir/context.rs:562:15:
libclang error; possible causes include:
- Invalid flag syntax
- Unrecognized flags
- Invalid flag arguments
- File I/O errors
- Host vs. target architecture mismatch
If you encounter an error missing from this list, please file an issue or a PR!
$ bindgen /dev/null -- -x c
Failed to run rustfmt: No such file or directory (os error 2) (non-fatal, continuing)
/* automatically generated by rust-bindgen 0.72.1 */

The -x argument should explicitly tell (lib)clang what language the file
is without needing an extension. I don't know why it's not working for
you...


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v5 3/4] rust: add a Kconfig function to test for support of bindgen options
  2025-12-06 18:16       ` Vivian Wang
@ 2025-12-06 23:41         ` Asuna Yang
  0 siblings, 0 replies; 11+ messages in thread
From: Asuna Yang @ 2025-12-06 23:41 UTC (permalink / raw)
  To: Vivian Wang, Nathan Chancellor, Nicolas Schier, Miguel Ojeda,
	Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin,
	Andreas Hindborg, Alice Ryhl, Trevor Gross, Danilo Krummrich,
	Nick Desaulniers, Bill Wendling, Justin Stitt, Paul Walmsley,
	Palmer Dabbelt, Albert Ou, Alexandre Ghiti, Jonathan Corbet,
	Jason Montleon, Han Gao, Conor Dooley
  Cc: linux-kbuild, linux-kernel, rust-for-linux, llvm, linux-riscv,
	linux-doc

> The -x argument should explicitly tell (lib)clang what language the file
> is without needing an extension. I don't know why it's not working for
> you...

Didn't realize that I should pass a `-x` to the backend. It works now, 
I'll include it in the next revision. Thanks.

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2025-12-06 23:41 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-04  7:54 [PATCH v5 0/4] EDITME: RISC-V: re-enable gcc + rust builds Asuna Yang
2025-12-04  7:54 ` [PATCH v5 1/4] rust: export BINDGEN_TARGET from a separate Makefile Asuna Yang
2025-12-04  7:54 ` [PATCH v5 2/4] rust: generate a fatal error if BINDGEN_TARGET is undefined Asuna Yang
2025-12-04 12:41   ` Asuna Yang
2025-12-04  7:54 ` [PATCH v5 3/4] rust: add a Kconfig function to test for support of bindgen options Asuna Yang
2025-12-04  9:06   ` Vivian Wang
2025-12-04 12:33     ` Asuna Yang
2025-12-06 18:16       ` Vivian Wang
2025-12-06 23:41         ` Asuna Yang
2025-12-04  7:54 ` [PATCH v5 4/4] RISC-V: handle extension configs for bindgen, re-enable gcc + rust builds Asuna Yang
2025-12-04  8:26 ` [PATCH v5 0/4] EDITME: RISC-V: " Asuna Yang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).