@@ -19,39 +19,81 @@ obj-$(CONFIG_RUST) += exports.o
1919
2020RUSTDOC = rustdoc
2121
22- quiet_cmd_rustdoc_host = RUSTDOC $<
23- cmd_rustdoc_host = \
24- RUST_BINDINGS_FILE=$(abspath $(objtree ) /rust/bindings_generated.rs) \
25- $(RUSTDOC ) $(filter-out --emit=% , $(rustc_flags ) ) \
26- $(rustdoc_target_flags ) -L $(objtree ) /rust/ \
27- --output $(objtree ) /rust/doc --crate-name $(subst rustdoc-,,$@ ) \
28- -Fmissing-docs @$(objtree ) /include/generated/rustc_cfg $<
29-
30- quiet_cmd_rustdoc = RUSTDOC $<
22+ quiet_cmd_rustdoc = RUSTDOC $(if $(filter --test,$(rustdoc_target_flags ) ) ,T, ) $(if $(rustdoc_host ) ,H, ) $<
3123 cmd_rustdoc = \
3224 RUST_BINDINGS_FILE=$(abspath $(objtree ) /rust/bindings_generated.rs) \
33- $(RUSTDOC ) $(rustc_cross_flags ) $(filter-out --emit=% , $(rustc_flags ) ) \
34- $(rustdoc_target_flags ) -L $(objtree ) /rust/ \
35- --output $(objtree ) /rust/doc --crate-name $(subst rustdoc-,,$@ ) \
25+ $(RUSTDOC ) $(if $(rustdoc_host ) ,,$(rustc_cross_flags ) ) \
26+ $(filter-out --emit=% , $(rustc_flags ) ) $(rustc_target_flags ) $(rustdoc_target_flags ) \
27+ -L $(objtree ) /rust/$(if $(filter --test,$(rustdoc_target_flags ) ) ,test/) \
28+ --output $(objtree ) /rust/doc --crate-name $(subst rusttest-,,$(subst rustdoc-,,$@ ) ) \
3629 -Fmissing-docs @$(objtree ) /include/generated/rustc_cfg $<
3730
3831rustdoc : rustdoc-macros rustdoc-compiler_builtins rustdoc-kernel
3932
40- rustdoc-macros : private rustdoc_target_flags = --crate-type proc-macro \
33+ rustdoc-macros : private rustdoc_host = yes
34+ rustdoc-macros : private rustc_target_flags = --crate-type proc-macro \
4135 --extern proc_macro
4236rustdoc-macros : $(srctree ) /rust/macros/lib.rs FORCE
43- $(call if_changed,rustdoc_host )
37+ $(call if_changed,rustdoc )
4438
4539rustdoc-compiler_builtins : $(srctree ) /rust/compiler_builtins.rs FORCE
4640 $(call if_changed,rustdoc)
4741
48- rustdoc-kernel : private rustdoc_target_flags = --extern alloc \
42+ rustdoc-kernel : private rustc_target_flags = --extern alloc \
4943 --extern build_error \
5044 --extern macros=$(objtree)/rust/libmacros.so
5145rustdoc-kernel : $(srctree ) /rust/kernel/lib.rs rustdoc-macros \
5246 $(objtree)/rust/libmacros.so $(objtree)/rust/bindings_generated.rs FORCE
5347 $(call if_changed,rustdoc)
5448
49+ quiet_cmd_rustc_test_library = RUSTC TL $<
50+ cmd_rustc_test_library = \
51+ RUST_BINDINGS_FILE=$(abspath $(objtree ) /rust/bindings_generated.rs) \
52+ $(RUSTC ) $(filter-out -Cpanic=abort, $(filter-out --emit=% , $(rustc_flags ) ) ) \
53+ $(rustc_target_flags ) --crate-type $(if $(rustc_test_library_proc ) ,proc-macro,rlib) \
54+ --out-dir $(objtree ) /rust/test/ --cfg testlib \
55+ -L $(objtree ) /rust/test/ --crate-name $(subst rusttest-,,$(subst rusttestlib-,,$@ ) ) $<
56+
57+ rusttestlib-build_error : $(srctree ) /rust/build_error.rs FORCE
58+ $(call if_changed,rustc_test_library)
59+
60+ rusttestlib-macros : private rustc_target_flags = --extern proc_macro
61+ rusttestlib-macros : private rustc_test_library_proc = yes
62+ rusttestlib-macros : $(srctree ) /rust/macros/lib.rs FORCE
63+ $(call if_changed,rustc_test_library)
64+
65+ # We cannot use `-Zpanic-abort-tests` because some tests are dynamic,
66+ # so for the moment we skip `-Cpanic=abort`.
67+ quiet_cmd_rustc_test = RUSTC T $<
68+ cmd_rustc_test = \
69+ RUST_BINDINGS_FILE=$(abspath $(objtree ) /rust/bindings_generated.rs) \
70+ $(RUSTC ) --test $(filter-out -Cpanic=abort, $(filter-out --emit=% , $(rustc_flags ) ) ) \
71+ $(rustc_target_flags ) --out-dir $(objtree ) /rust/test \
72+ -L $(objtree ) /rust/test/ --crate-name $(subst rusttest-,,$@ ) $< ; \
73+ $(objtree ) /rust/test/$(subst rusttest-,,$@ ) $(rustc_test_run_flags )
74+
75+ rusttest : rusttest-macros rusttest-kernel
76+
77+ rusttest-macros : private rustc_target_flags = --extern proc_macro
78+ rusttest-macros : private rustdoc_host = yes
79+ rusttest-macros : private rustdoc_target_flags = --test --crate-type proc-macro
80+ rusttest-macros : $(srctree ) /rust/macros/lib.rs FORCE
81+ $(call if_changed,rustc_test)
82+ $(call if_changed,rustdoc)
83+
84+ rusttest-kernel : private rustc_target_flags = --extern alloc \
85+ --extern build_error \
86+ --extern macros=$(objtree)/rust/test/libmacros.so
87+ rusttest-kernel : private rustc_test_run_flags = \
88+ --skip bindgen_test_layout_
89+ rusttest-kernel : private rustdoc_host = yes
90+ rusttest-kernel : private rustdoc_target_flags = --test
91+ rusttest-kernel : $(srctree ) /rust/kernel/lib.rs rusttestlib-build_error \
92+ rusttestlib-macros FORCE
93+ $(call if_changed,rustc_test)
94+ $(call if_changed,rustc_test_library)
95+ $(call if_changed,rustdoc)
96+
5597ifdef CONFIG_CC_IS_CLANG
5698bindgen_c_flags = $(c_flags )
5799else
0 commit comments