]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
rust: kbuild: skip `--remap-path-prefix` for `rustdoc`
authorMiguel Ojeda <ojeda@kernel.org>
Sat, 15 Mar 2025 19:40:45 +0000 (20:40 +0100)
committerMasahiro Yamada <masahiroy@kernel.org>
Sat, 22 Mar 2025 15:56:13 +0000 (00:56 +0900)
`rustdoc` only recognizes `--remap-path-prefix` starting with
Rust 1.81.0, which is later than on minimum, so we cannot pass it
unconditionally. Otherwise, we get:

    error: Unrecognized option: 'remap-path-prefix'

Note that `rustc` (the compiler) does recognize the flag since a long
time ago (1.26.0).

Moreover, `rustdoc` since Rust 1.82.0 ICEs in out-of-tree builds when
using `--remap-path-prefix`. The issue has been reduced and reported
upstream [1].

Thus workaround both issues by simply skipping the flag when generating
the docs -- it is not critical there anyway.

The ICE does not reproduce under `--test`, but we still need to skip
the flag as well for `RUSTDOC TK` since it is not recognized.

Fixes: dbdffaf50ff9 ("kbuild, rust: use -fremap-path-prefix to make paths relative")
Link: https://github.com/rust-lang/rust/issues/138520
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
Reviewed-by: Tamir Duberstein <tamird@gmail.com>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
rust/Makefile

index ea3849eb78f6585e19d3ae37f3b4535bf329a1d6..089473a89d4695429b8bd2d854285e0d16c9a2cd 100644 (file)
@@ -57,10 +57,14 @@ endif
 core-cfgs = \
     --cfg no_fp_fmt_parse
 
+# `rustc` recognizes `--remap-path-prefix` since 1.26.0, but `rustdoc` only
+# since Rust 1.81.0. Moreover, `rustdoc` ICEs on out-of-tree builds since Rust
+# 1.82.0 (https://github.com/rust-lang/rust/issues/138520). Thus workaround both
+# issues skipping the flag. The former also applies to `RUSTDOC TK`.
 quiet_cmd_rustdoc = RUSTDOC $(if $(rustdoc_host),H, ) $<
       cmd_rustdoc = \
        OBJTREE=$(abspath $(objtree)) \
-       $(RUSTDOC) $(filter-out $(skip_flags),$(if $(rustdoc_host),$(rust_common_flags),$(rust_flags))) \
+       $(RUSTDOC) $(filter-out $(skip_flags) --remap-path-prefix=%,$(if $(rustdoc_host),$(rust_common_flags),$(rust_flags))) \
                $(rustc_target_flags) -L$(objtree)/$(obj) \
                -Zunstable-options --generate-link-to-definition \
                --output $(rustdoc_output) \
@@ -171,7 +175,7 @@ quiet_cmd_rustdoc_test_kernel = RUSTDOC TK $<
        rm -rf $(objtree)/$(obj)/test/doctests/kernel; \
        mkdir -p $(objtree)/$(obj)/test/doctests/kernel; \
        OBJTREE=$(abspath $(objtree)) \
-       $(RUSTDOC) --test $(rust_flags) \
+       $(RUSTDOC) --test $(filter-out --remap-path-prefix=%,$(rust_flags)) \
                -L$(objtree)/$(obj) --extern ffi --extern kernel \
                --extern build_error --extern macros \
                --extern bindings --extern uapi \