]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
kbuild: rust: remove now-unneeded `rusttest` custom sysroot handling
authorMiguel Ojeda <ojeda@kernel.org>
Tue, 28 May 2024 16:35:02 +0000 (18:35 +0200)
committerMiguel Ojeda <ojeda@kernel.org>
Mon, 8 Jul 2024 20:39:39 +0000 (22:39 +0200)
Since we dropped our custom `alloc` in commit 9d0441bab775 ("rust: alloc:
remove our fork of the `alloc` crate"), there is no need anymore to keep
the custom sysroot hack.

Thus delete it, which makes the target way simpler and faster too.

This also means we are not using Cargo for anything at the moment,
and that no download is required anymore, so update the main `Makefile`
and the documentation accordingly.

Link: https://lore.kernel.org/r/20240528163502.411600-1-ojeda@kernel.org
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
Documentation/rust/quick-start.rst
Documentation/rust/testing.rst
Makefile
rust/Makefile

index 6fe69a601134800a5b2378eb2f7ddaf2a8d113d7..ac2f162884587f14326faf065e338f71ef7c51b5 100644 (file)
@@ -171,20 +171,6 @@ can be installed manually::
 The standalone installers also come with ``clippy``.
 
 
-cargo
-*****
-
-``cargo`` is the Rust native build system. It is currently required to run
-the tests since it is used to build a custom standard library that contains
-the facilities provided by the custom ``alloc`` in the kernel. The tests can
-be run using the ``rusttest`` Make target.
-
-If ``rustup`` is being used, all the profiles already install the tool,
-thus nothing needs to be done.
-
-The standalone installers also come with ``cargo``.
-
-
 rustdoc
 *******
 
index acfd0c2be48d008441de6c58d9afd0b7691b5cf5..568b71b415a4525772cb77ce76c7f9da32fac1c4 100644 (file)
@@ -131,9 +131,8 @@ Additionally, there are the ``#[test]`` tests. These can be run using the
 
        make LLVM=1 rusttest
 
-This requires the kernel ``.config`` and downloads external repositories. It
-runs the ``#[test]`` tests on the host (currently) and thus is fairly limited in
-what these tests can test.
+This requires the kernel ``.config``. It runs the ``#[test]`` tests on the host
+(currently) and thus is fairly limited in what these tests can test.
 
 The Kselftests
 --------------
index b25b5b44af107afbba101ac5c6d6846129762855..d4134a9f32b6e0e50c5bd277b274c2a6f8a1b40e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -507,7 +507,6 @@ RUSTDOC             = rustdoc
 RUSTFMT                = rustfmt
 CLIPPY_DRIVER  = clippy-driver
 BINDGEN                = bindgen
-CARGO          = cargo
 PAHOLE         = pahole
 RESOLVE_BTFIDS = $(objtree)/tools/bpf/resolve_btfids/resolve_btfids
 LEX            = flex
@@ -601,7 +600,7 @@ endif
 export RUSTC_BOOTSTRAP := 1
 
 export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE LD CC HOSTPKG_CONFIG
-export RUSTC RUSTDOC RUSTFMT RUSTC_OR_CLIPPY_QUIET RUSTC_OR_CLIPPY BINDGEN CARGO
+export RUSTC RUSTDOC RUSTFMT RUSTC_OR_CLIPPY_QUIET RUSTC_OR_CLIPPY BINDGEN
 export HOSTRUSTC KBUILD_HOSTRUSTFLAGS
 export CPP AR NM STRIP OBJCOPY OBJDUMP READELF PAHOLE RESOLVE_BTFIDS LEX YACC AWK INSTALLKERNEL
 export PERL PYTHON3 CHECK CHECKFLAGS MAKE UTS_MACHINE HOSTCXX
index f70d5e244fee5ff401d1d0adcbc958538088d718..38537831132221415a22b16aebe942c899c1df0c 100644 (file)
@@ -44,17 +44,10 @@ rustc_sysroot := $(shell MAKEFLAGS= $(RUSTC) $(rust_flags) --print sysroot)
 rustc_host_target := $(shell $(RUSTC) --version --verbose | grep -F 'host: ' | cut -d' ' -f2)
 RUST_LIB_SRC ?= $(rustc_sysroot)/lib/rustlib/src/rust/library
 
-ifeq ($(quiet),silent_)
-cargo_quiet=-q
+ifneq ($(quiet),)
 rust_test_quiet=-q
 rustdoc_test_quiet=--test-args -q
 rustdoc_test_kernel_quiet=>/dev/null
-else ifeq ($(quiet),quiet_)
-rust_test_quiet=-q
-rustdoc_test_quiet=--test-args -q
-rustdoc_test_kernel_quiet=>/dev/null
-else
-cargo_quiet=--verbose
 endif
 
 core-cfgs = \
@@ -135,22 +128,21 @@ quiet_cmd_rustc_test_library = RUSTC TL $<
                @$(objtree)/include/generated/rustc_cfg $(rustc_target_flags) \
                --crate-type $(if $(rustc_test_library_proc),proc-macro,rlib) \
                --out-dir $(objtree)/$(obj)/test --cfg testlib \
-               --sysroot $(objtree)/$(obj)/test/sysroot \
                -L$(objtree)/$(obj)/test \
                --crate-name $(subst rusttest-,,$(subst rusttestlib-,,$@)) $<
 
-rusttestlib-build_error: $(src)/build_error.rs rusttest-prepare FORCE
+rusttestlib-build_error: $(src)/build_error.rs FORCE
        +$(call if_changed,rustc_test_library)
 
 rusttestlib-macros: private rustc_target_flags = --extern proc_macro
 rusttestlib-macros: private rustc_test_library_proc = yes
-rusttestlib-macros: $(src)/macros/lib.rs rusttest-prepare FORCE
+rusttestlib-macros: $(src)/macros/lib.rs FORCE
        +$(call if_changed,rustc_test_library)
 
-rusttestlib-bindings: $(src)/bindings/lib.rs rusttest-prepare FORCE
+rusttestlib-bindings: $(src)/bindings/lib.rs FORCE
        +$(call if_changed,rustc_test_library)
 
-rusttestlib-uapi: $(src)/uapi/lib.rs rusttest-prepare FORCE
+rusttestlib-uapi: $(src)/uapi/lib.rs FORCE
        +$(call if_changed,rustc_test_library)
 
 quiet_cmd_rustdoc_test = RUSTDOC T $<
@@ -159,7 +151,7 @@ quiet_cmd_rustdoc_test = RUSTDOC T $<
        $(RUSTDOC) --test $(rust_common_flags) \
                @$(objtree)/include/generated/rustc_cfg \
                $(rustc_target_flags) $(rustdoc_test_target_flags) \
-               --sysroot $(objtree)/$(obj)/test/sysroot $(rustdoc_test_quiet) \
+               $(rustdoc_test_quiet) \
                -L$(objtree)/$(obj)/test --output $(rustdoc_output) \
                --crate-name $(subst rusttest-,,$@) $<
 
@@ -192,7 +184,6 @@ quiet_cmd_rustc_test = RUSTC T  $<
        $(RUSTC) --test $(rust_common_flags) \
                @$(objtree)/include/generated/rustc_cfg \
                $(rustc_target_flags) --out-dir $(objtree)/$(obj)/test \
-               --sysroot $(objtree)/$(obj)/test/sysroot \
                -L$(objtree)/$(obj)/test \
                --crate-name $(subst rusttest-,,$@) $<; \
        $(objtree)/$(obj)/test/$(subst rusttest-,,$@) $(rust_test_quiet) \
@@ -200,60 +191,15 @@ quiet_cmd_rustc_test = RUSTC T  $<
 
 rusttest: rusttest-macros rusttest-kernel
 
-# This prepares a custom sysroot with our custom `alloc` instead of
-# the standard one.
-#
-# This requires several hacks:
-#   - Unlike `core` and `alloc`, `std` depends on more than a dozen crates,
-#     including third-party crates that need to be downloaded, plus custom
-#     `build.rs` steps. Thus hardcoding things here is not maintainable.
-#   - `cargo` knows how to build the standard library, but it is an unstable
-#     feature so far (`-Zbuild-std`).
-#   - `cargo` only considers the use case of building the standard library
-#     to use it in a given package. Thus we need to create a dummy package
-#     and pick the generated libraries from there.
-#   - The usual ways of modifying the dependency graph in `cargo` do not seem
-#     to apply for the `-Zbuild-std` steps, thus we have to mislead it
-#     by modifying the sources in the sysroot.
-#   - To avoid messing with the user's Rust installation, we create a clone
-#     of the sysroot. However, `cargo` ignores `RUSTFLAGS` in the `-Zbuild-std`
-#     steps, thus we use a wrapper binary passed via `RUSTC` to pass the flag.
-#
-# In the future, we hope to avoid the whole ordeal by either:
-#   - Making the `test` crate not depend on `std` (either improving upstream
-#     or having our own custom crate).
-#   - Making the tests run in kernel space (requires the previous point).
-#   - Making `std` and friends be more like a "normal" crate, so that
-#     `-Zbuild-std` and related hacks are not needed.
-quiet_cmd_rustsysroot = RUSTSYSROOT
-      cmd_rustsysroot = \
-       rm -rf $(objtree)/$(obj)/test; \
-       mkdir -p $(objtree)/$(obj)/test; \
-       cp -a $(rustc_sysroot) $(objtree)/$(obj)/test/sysroot; \
-       echo '\#!/bin/sh' > $(objtree)/$(obj)/test/rustc_sysroot; \
-       echo "$(RUSTC) --sysroot=$(abspath $(objtree)/$(obj)/test/sysroot) \"\$$@\"" \
-               >> $(objtree)/$(obj)/test/rustc_sysroot; \
-       chmod u+x $(objtree)/$(obj)/test/rustc_sysroot; \
-       $(CARGO) -q new $(objtree)/$(obj)/test/dummy; \
-       RUSTC=$(objtree)/$(obj)/test/rustc_sysroot $(CARGO) $(cargo_quiet) \
-               test -Zbuild-std --target $(rustc_host_target) \
-               --manifest-path $(objtree)/$(obj)/test/dummy/Cargo.toml; \
-       rm $(objtree)/$(obj)/test/sysroot/lib/rustlib/$(rustc_host_target)/lib/*; \
-       cp $(objtree)/$(obj)/test/dummy/target/$(rustc_host_target)/debug/deps/* \
-               $(objtree)/$(obj)/test/sysroot/lib/rustlib/$(rustc_host_target)/lib
-
-rusttest-prepare: FORCE
-       +$(call if_changed,rustsysroot)
-
 rusttest-macros: private rustc_target_flags = --extern proc_macro
 rusttest-macros: private rustdoc_test_target_flags = --crate-type proc-macro
-rusttest-macros: $(src)/macros/lib.rs rusttest-prepare FORCE
+rusttest-macros: $(src)/macros/lib.rs FORCE
        +$(call if_changed,rustc_test)
        +$(call if_changed,rustdoc_test)
 
 rusttest-kernel: private rustc_target_flags = --extern alloc \
     --extern build_error --extern macros --extern bindings --extern uapi
-rusttest-kernel: $(src)/kernel/lib.rs rusttest-prepare \
+rusttest-kernel: $(src)/kernel/lib.rs \
     rusttestlib-build_error rusttestlib-macros rusttestlib-bindings \
     rusttestlib-uapi FORCE
        +$(call if_changed,rustc_test)