@@ -5,7 +5,7 @@ extra-$(CONFIG_RUST) += exports_core_generated.h
5
5
6
6
extra-$(CONFIG_RUST) += libmacros.so
7
7
8
- extra-$(CONFIG_RUST) += bindings_generated.rs
8
+ extra-$(CONFIG_RUST) += bindings_generated.rs bindings_helpers_generated.rs
9
9
obj-$(CONFIG_RUST) += alloc.o kernel.o
10
10
extra-$(CONFIG_RUST) += exports_alloc_generated.h exports_kernel_generated.h
11
11
30
30
31
31
quiet_cmd_rustdoc = RUSTDOC $(if $(rustdoc_host ) ,H, ) $<
32
32
cmd_rustdoc = \
33
- RUST_BINDINGS_FILE =$(abspath $(objtree ) /rust/bindings_generated.rs ) \
33
+ OBJTREE =$(abspath $(objtree ) ) \
34
34
$(RUSTDOC ) $(if $(rustdoc_host ) ,,$(rustc_cross_flags ) ) \
35
35
$(filter-out -Cpanic=abort, $(filter-out --emit=% , $(rustc_flags ) ) ) \
36
36
$(rustc_target_flags ) -L $(objtree ) /rust \
@@ -61,12 +61,13 @@ rustdoc-kernel: private rustc_target_flags = --extern alloc \
61
61
--extern build_error \
62
62
--extern macros=$(objtree)/rust/libmacros.so
63
63
rustdoc-kernel : $(srctree ) /rust/kernel/lib.rs rustdoc-macros \
64
- $(objtree)/rust/libmacros.so $(objtree)/rust/bindings_generated.rs FORCE
64
+ $(objtree)/rust/libmacros.so $(objtree)/rust/bindings_generated.rs \
65
+ $(objtree)/rust/bindings_helpers_generated.rs FORCE
65
66
$(call if_changed,rustdoc)
66
67
67
68
quiet_cmd_rustc_test_library = RUSTC TL $<
68
69
cmd_rustc_test_library = \
69
- RUST_BINDINGS_FILE =$(abspath $(objtree ) /rust/bindings_generated.rs ) \
70
+ OBJTREE =$(abspath $(objtree ) ) \
70
71
$(RUSTC ) $(filter-out --sysroot=% , $(filter-out -Cpanic=abort, $(filter-out --emit=% , $(rustc_flags ) ) ) ) \
71
72
$(rustc_target_flags ) --crate-type $(if $(rustc_test_library_proc ) ,proc-macro,rlib) \
72
73
--out-dir $(objtree ) /rust/test/ --cfg testlib \
@@ -95,7 +96,7 @@ quiet_cmd_rustdoc_test = RUSTDOC T $<
95
96
# so for the moment we skip `-Cpanic=abort`.
96
97
quiet_cmd_rustc_test = RUSTC T $<
97
98
cmd_rustc_test = \
98
- RUST_BINDINGS_FILE =$(abspath $(objtree ) /rust/bindings_generated.rs ) \
99
+ OBJTREE =$(abspath $(objtree ) ) \
99
100
$(RUSTC ) --test $(filter-out --sysroot=% , $(filter-out -Cpanic=abort, $(filter-out --emit=% , $(rustc_flags ) ) ) ) \
100
101
$(rustc_target_flags ) --out-dir $(objtree ) /rust/test \
101
102
--sysroot $(objtree ) /rust/test/sysroot \
@@ -216,6 +217,21 @@ $(objtree)/rust/bindings_generated.rs: $(srctree)/rust/kernel/bindings_helper.h
216
217
$(srctree ) /rust/bindgen_parameters FORCE
217
218
$(call if_changed_dep,bindgen)
218
219
220
+ quiet_cmd_bindgen_helper = BINDGEN $@
221
+ cmd_bindgen_helper = \
222
+ $(BINDGEN ) $< --blacklist-type '.*' --whitelist-var '' \
223
+ --whitelist-function 'rust_helper_.*' \
224
+ --use-core --with-derive-default --ctypes-prefix c_types \
225
+ --no-debug '.*' \
226
+ --size_t-is-usize -o $@ -- $(bindgen_c_flags_final ) \
227
+ -I$(objtree ) /rust/ -DMODULE; \
228
+ sed -Ei 's/pub fn rust_helper_([a-zA-Z0-9_]*)/\# [link_name="rust_helper_\1"]\n pub fn \1/g' $@
229
+
230
+ CFLAGS_helpers.o = -I$(objtree ) /rust/
231
+
232
+ $(objtree ) /rust/bindings_helpers_generated.rs : $(srctree ) /rust/helpers.c FORCE
233
+ $(call if_changed_dep,bindgen_helper)
234
+
219
235
quiet_cmd_exports = EXPORTS $@
220
236
cmd_exports = \
221
237
$(NM ) -p --defined-only $< \
@@ -253,7 +269,7 @@ $(objtree)/rust/libmacros.so: $(srctree)/rust/macros/lib.rs \
253
269
254
270
quiet_cmd_rustc_library = $(if $(skip_clippy ) ,RUSTC,$(RUSTC_OR_CLIPPY_QUIET ) ) L $@
255
271
cmd_rustc_library = \
256
- RUST_BINDINGS_FILE =$(abspath $(objtree ) /rust/bindings_generated.rs ) \
272
+ OBJTREE =$(abspath $(objtree ) ) \
257
273
$(if $(skip_clippy ) ,$(RUSTC ) ,$(RUSTC_OR_CLIPPY ) ) \
258
274
$(rustc_flags ) $(rustc_cross_flags ) $(rustc_target_flags ) \
259
275
--crate-type rlib --out-dir $(objtree ) /rust/ -L $(objtree ) /rust/ \
@@ -291,7 +307,8 @@ $(objtree)/rust/kernel.o: private rustc_target_flags = --extern alloc \
291
307
--extern macros=$(objtree)/rust/libmacros.so
292
308
$(objtree ) /rust/kernel.o : $(srctree ) /rust/kernel/lib.rs $(objtree ) /rust/alloc.o \
293
309
$(objtree)/rust/build_error.o \
294
- $(objtree)/rust/libmacros.so $(objtree)/rust/bindings_generated.rs FORCE
310
+ $(objtree)/rust/libmacros.so $(objtree)/rust/bindings_generated.rs \
311
+ $(objtree)/rust/bindings_helpers_generated.rs FORCE
295
312
$(call if_changed_dep,rustc_library)
296
313
297
314
# Targets that need to expand twice
0 commit comments