@@ -19,39 +19,81 @@ obj-$(CONFIG_RUST) += exports.o
19
19
20
20
RUSTDOC = rustdoc
21
21
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, ) $<
31
23
cmd_rustdoc = \
32
24
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-,,$@ ) ) \
36
29
-Fmissing-docs @$(objtree ) /include/generated/rustc_cfg $<
37
30
38
31
rustdoc : rustdoc-macros rustdoc-compiler_builtins rustdoc-kernel
39
32
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 \
41
35
--extern proc_macro
42
36
rustdoc-macros : $(srctree ) /rust/macros/lib.rs FORCE
43
- $(call if_changed,rustdoc_host )
37
+ $(call if_changed,rustdoc )
44
38
45
39
rustdoc-compiler_builtins : $(srctree ) /rust/compiler_builtins.rs FORCE
46
40
$(call if_changed,rustdoc)
47
41
48
- rustdoc-kernel : private rustdoc_target_flags = --extern alloc \
42
+ rustdoc-kernel : private rustc_target_flags = --extern alloc \
49
43
--extern build_error \
50
44
--extern macros=$(objtree)/rust/libmacros.so
51
45
rustdoc-kernel : $(srctree ) /rust/kernel/lib.rs rustdoc-macros \
52
46
$(objtree)/rust/libmacros.so $(objtree)/rust/bindings_generated.rs FORCE
53
47
$(call if_changed,rustdoc)
54
48
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
+
55
97
ifdef CONFIG_CC_IS_CLANG
56
98
bindgen_c_flags = $(c_flags )
57
99
else
0 commit comments