* [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).