Add initial Rust support for LoongArch.
Signed-off-by: WANG Rui <[email protected]>
---
Documentation/rust/arch-support.rst | 1 +
arch/loongarch/Kconfig | 1 +
arch/loongarch/Makefile | 3 +++
scripts/generate_rust_target.rs | 10 ++++++++++
4 files changed, 15 insertions(+)
diff --git a/Documentation/rust/arch-support.rst b/Documentation/rust/arch-support.rst
index b91e9ef4d0c2..e89c8b2efbff 100644
--- a/Documentation/rust/arch-support.rst
+++ b/Documentation/rust/arch-support.rst
@@ -15,6 +15,7 @@ support corresponds to ``S`` values in the ``MAINTAINERS`` file.
============ ================ ==============================================
Architecture Level of support Constraints
============ ================ ==============================================
+``loongarch`` Maintained
``um`` Maintained ``x86_64`` only.
``x86`` Maintained ``x86_64`` only.
============ ================ ==============================================
diff --git a/arch/loongarch/Kconfig b/arch/loongarch/Kconfig
index 15d05dd2b7f3..6d39ec3077da 100644
--- a/arch/loongarch/Kconfig
+++ b/arch/loongarch/Kconfig
@@ -142,6 +142,7 @@ config LOONGARCH
select HAVE_REGS_AND_STACK_ACCESS_API
select HAVE_RETHOOK
select HAVE_RSEQ
+ select HAVE_RUST
select HAVE_SAMPLE_FTRACE_DIRECT
select HAVE_SAMPLE_FTRACE_DIRECT_MULTI
select HAVE_SETUP_PER_CPU_AREA if NUMA
diff --git a/arch/loongarch/Makefile b/arch/loongarch/Makefile
index 4ba8d67ddb09..ba45cb7b621c 100644
--- a/arch/loongarch/Makefile
+++ b/arch/loongarch/Makefile
@@ -81,8 +81,11 @@ KBUILD_AFLAGS_MODULE += -Wa,-mla-global-with-abs
KBUILD_CFLAGS_MODULE += -fplt -Wa,-mla-global-with-abs,-mla-local-with-abs
endif
+KBUILD_RUSTFLAGS_MODULE += -Crelocation-model=pic
+
ifeq ($(CONFIG_RELOCATABLE),y)
KBUILD_CFLAGS_KERNEL += -fPIE
+KBUILD_RUSTFLAGS_KERNEL += -Crelocation-model=pie
LDFLAGS_vmlinux += -static -pie --no-dynamic-linker -z notext $(call ld-option, --apply-dynamic-relocs)
endif
diff --git a/scripts/generate_rust_target.rs b/scripts/generate_rust_target.rs
index 3c6cbe2b278d..3edda6a10dd0 100644
--- a/scripts/generate_rust_target.rs
+++ b/scripts/generate_rust_target.rs
@@ -161,6 +161,16 @@ fn main() {
ts.push("features", features);
ts.push("llvm-target", "x86_64-linux-gnu");
ts.push("target-pointer-width", "64");
+ } else if cfg.has("LOONGARCH") {
+ ts.push("arch", "loongarch64");
+ ts.push(
+ "data-layout",
+ "e-m:e-p:64:64-i64:64-i128:128-n64-S128",
+ );
+ ts.push("features", "-f,-d");
+ ts.push("llvm-target", "loongarch64-linux-gnusf");
+ ts.push("llvm-abiname", "lp64s");
+ ts.push("target-pointer-width", "64");
} else {
panic!("Unsupported architecture");
}
--
2.43.0
Hi WANG,
kernel test robot noticed the following build warnings:
[auto build test WARNING on rust/rust-next]
[also build test WARNING on linus/master v6.7-rc8 next-20240105]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/WANG-Rui/LoongArch-Enable-initial-Rust-support/20240106-150902
base: https://github.com/Rust-for-Linux/linux rust-next
patch link: https://lore.kernel.org/r/20240106065941.180796-1-wangrui%40loongson.cn
patch subject: [PATCH] LoongArch: Enable initial Rust support
reproduce: (https://download.01.org/0day-ci/archive/20240107/[email protected]/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
All warnings (new ones prefixed by >>):
>> Documentation/rust/arch-support.rst:18: WARNING: Malformed table.
vim +18 Documentation/rust/arch-support.rst
14
15 ============ ================ ==============================================
16 Architecture Level of support Constraints
17 ============ ================ ==============================================
> 18 ``loongarch`` Maintained
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
On Sun, Jan 7, 2024 at 9:06 AM kernel test robot <[email protected]> wrote:
>
> Hi WANG,
>
> kernel test robot noticed the following build warnings:
>
> [auto build test WARNING on rust/rust-next]
> [also build test WARNING on linus/master v6.7-rc8 next-20240105]
> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch#_base_tree_information]
>
> url: https://github.com/intel-lab-lkp/linux/commits/WANG-Rui/LoongArch-Enable-initial-Rust-support/20240106-150902
> base: https://github.com/Rust-for-Linux/linux rust-next
> patch link: https://lore.kernel.org/r/20240106065941.180796-1-wangrui%40loongson.cn
> patch subject: [PATCH] LoongArch: Enable initial Rust support
> reproduce: (https://download.01.org/0day-ci/archive/20240107/[email protected]/reproduce)
>
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <[email protected]>
> | Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
>
> All warnings (new ones prefixed by >>):
>
> >> Documentation/rust/arch-support.rst:18: WARNING: Malformed table.
>
> vim +18 Documentation/rust/arch-support.rst
>
> 14
> 15 ============ ================ ==============================================
> 16 Architecture Level of support Constraints
> 17 ============ ================ ==============================================
> > 18 ``loongarch`` Maintained
I think we can put a "none." or just a "-" below "Constraints" to fix
the warning.
Huacai
>
> --
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki
>
On Sat, Jan 6, 2024 at 8:04 AM WANG Rui <[email protected]> wrote:
>
> ============ ================ ==============================================
> Architecture Level of support Constraints
> ============ ================ ==============================================
> +``loongarch`` Maintained
On top of what Huacai said, it would be nice to add another character
and realign the table so that `loongarch` it doesn't overflow (perhaps
best done in an additional, previous patch).
> + } else if cfg.has("LOONGARCH") {
Would it be possible to do it without a custom target in
`scripts/generate_rust_target.rs`? If it is not possible (e.g. there
is something that you cannot tweak otherwise on top of a built-in
target via the CLI flags), it is fine to use a custom target for the
moment.
For instance, this is how ARM is doing it:
https://lore.kernel.org/rust-for-linux/[email protected]/
Thanks!
Cheers,
Miguel
Hello,
On Sun, Jan 7, 2024 at 10:29 PM Miguel Ojeda
<[email protected]> wrote:
>
> On Sat, Jan 6, 2024 at 8:04 AM WANG Rui <[email protected]> wrote:
> >
> > ============ ================ ==============================================
> > Architecture Level of support Constraints
> > ============ ================ ==============================================
> > +``loongarch`` Maintained
>
> On top of what Huacai said, it would be nice to add another character
> and realign the table so that `loongarch` it doesn't overflow (perhaps
> best done in an additional, previous patch).
Thanks Huacai, Miguel.
>
> > + } else if cfg.has("LOONGARCH") {
>
> Would it be possible to do it without a custom target in
> `scripts/generate_rust_target.rs`? If it is not possible (e.g. there
> is something that you cannot tweak otherwise on top of a built-in
> target via the CLI flags), it is fine to use a custom target for the
> moment.
>
> For instance, this is how ARM is doing it:
> https://lore.kernel.org/rust-for-linux/[email protected]/
>
Thanks for your comments. I noticed that the refactoring of the build
system to support the use of Rust built-in targets is still ongoing.
Could this take some time? In the meantime, let's proceed with the
generation method.
> Thanks!
>
> Cheers,
> Miguel
>
--
Rui
On Mon, Jan 8, 2024 at 4:22 AM WANG Rui <[email protected]> wrote:
>
> Thanks for your comments. I noticed that the refactoring of the build
> system to support the use of Rust built-in targets is still ongoing.
> Could this take some time? In the meantime, let's proceed with the
> generation method.
My pleasure! If you mean the first patch of the arm64 series I linked,
we have been waiting for a while for that to get merged (hopefully
6.9?). So, yeah, as you say, it is probably best to continue with this
and then you can change it later after the arm64 series lands. Thanks!
Cheers,
Miguel
On Wed, Jan 10, 2024 at 7:21 PM Miguel Ojeda
<[email protected]> wrote:
>
> On Mon, Jan 8, 2024 at 4:22 AM WANG Rui <[email protected]> wrote:
> >
> > Thanks for your comments. I noticed that the refactoring of the build
> > system to support the use of Rust built-in targets is still ongoing.
> > Could this take some time? In the meantime, let's proceed with the
> > generation method.
>
> My pleasure! If you mean the first patch of the arm64 series I linked,
> we have been waiting for a while for that to get merged (hopefully
> 6.9?). So, yeah, as you say, it is probably best to continue with this
> and then you can change it later after the arm64 series lands. Thanks!
Thanks. I'll do it.
Regards,
Rui
>
> Cheers,
> Miguel
>