@@ -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 \
@@ -73,12 +73,13 @@ rustdoc-kernel: private rustc_target_flags = --extern alloc \
73
73
--extern macros=$(objtree)/rust/libmacros.so
74
74
rustdoc-kernel : $(srctree ) /rust/kernel/lib.rs rustdoc-core \
75
75
rustdoc-macros rustdoc-compiler_builtins rustdoc-alloc \
76
- $(objtree)/rust/libmacros.so $(objtree)/rust/bindings_generated.rs FORCE
76
+ $(objtree)/rust/libmacros.so $(objtree)/rust/bindings_generated.rs \
77
+ $(objtree)/rust/bindings_helpers_generated.rs FORCE
77
78
$(call if_changed,rustdoc)
78
79
79
80
quiet_cmd_rustc_test_library = RUSTC TL $<
80
81
cmd_rustc_test_library = \
81
- RUST_BINDINGS_FILE =$(abspath $(objtree ) /rust/bindings_generated.rs ) \
82
+ OBJTREE =$(abspath $(objtree ) ) \
82
83
$(RUSTC ) $(filter-out --sysroot=% , $(filter-out -Cpanic=abort, $(filter-out --emit=% , $(rustc_flags ) ) ) ) \
83
84
$(rustc_target_flags ) --crate-type $(if $(rustc_test_library_proc ) ,proc-macro,rlib) \
84
85
--out-dir $(objtree ) /rust/test/ --cfg testlib \
@@ -107,7 +108,7 @@ quiet_cmd_rustdoc_test = RUSTDOC T $<
107
108
# so for the moment we skip `-Cpanic=abort`.
108
109
quiet_cmd_rustc_test = RUSTC T $<
109
110
cmd_rustc_test = \
110
- RUST_BINDINGS_FILE =$(abspath $(objtree ) /rust/bindings_generated.rs ) \
111
+ OBJTREE =$(abspath $(objtree ) ) \
111
112
$(RUSTC ) --test $(filter-out --sysroot=% , $(filter-out -Cpanic=abort, $(filter-out --emit=% , $(rustc_flags ) ) ) ) \
112
113
$(rustc_target_flags ) --out-dir $(objtree ) /rust/test \
113
114
--sysroot $(objtree ) /rust/test/sysroot \
@@ -228,6 +229,21 @@ $(objtree)/rust/bindings_generated.rs: $(srctree)/rust/kernel/bindings_helper.h
228
229
$(srctree ) /rust/bindgen_parameters FORCE
229
230
$(call if_changed_dep,bindgen)
230
231
232
+ quiet_cmd_bindgen_helper = BINDGEN $@
233
+ cmd_bindgen_helper = \
234
+ $(BINDGEN ) $< --blacklist-type '.*' --whitelist-var '' \
235
+ --whitelist-function 'rust_helper_.*' \
236
+ --use-core --with-derive-default --ctypes-prefix c_types \
237
+ --no-debug '.*' \
238
+ --size_t-is-usize -o $@ -- $(bindgen_c_flags_final ) \
239
+ -I$(objtree ) /rust/ -DMODULE; \
240
+ sed -Ei 's/pub fn rust_helper_([a-zA-Z0-9_]*)/\# [link_name="rust_helper_\1"]\n pub fn \1/g' $@
241
+
242
+ CFLAGS_helpers.o = -I$(objtree ) /rust/
243
+
244
+ $(objtree ) /rust/bindings_helpers_generated.rs : $(srctree ) /rust/helpers.c FORCE
245
+ $(call if_changed_dep,bindgen_helper)
246
+
231
247
quiet_cmd_exports = EXPORTS $@
232
248
cmd_exports = \
233
249
$(NM ) -p --defined-only $< \
@@ -265,7 +281,7 @@ $(objtree)/rust/libmacros.so: $(srctree)/rust/macros/lib.rs \
265
281
266
282
quiet_cmd_rustc_library = $(if $(skip_clippy ) ,RUSTC,$(RUSTC_OR_CLIPPY_QUIET ) ) L $@
267
283
cmd_rustc_library = \
268
- RUST_BINDINGS_FILE =$(abspath $(objtree ) /rust/bindings_generated.rs ) \
284
+ OBJTREE =$(abspath $(objtree ) ) \
269
285
$(if $(skip_clippy ) ,$(RUSTC ) ,$(RUSTC_OR_CLIPPY ) ) \
270
286
$(rustc_flags ) $(rustc_cross_flags ) $(rustc_target_flags ) \
271
287
--crate-type rlib --out-dir $(objtree ) /rust/ -L $(objtree ) /rust/ \
@@ -303,7 +319,8 @@ $(objtree)/rust/kernel.o: private rustc_target_flags = --extern alloc \
303
319
--extern macros=$(objtree)/rust/libmacros.so
304
320
$(objtree ) /rust/kernel.o : $(srctree ) /rust/kernel/lib.rs $(objtree ) /rust/alloc.o \
305
321
$(objtree)/rust/build_error.o \
306
- $(objtree)/rust/libmacros.so $(objtree)/rust/bindings_generated.rs FORCE
322
+ $(objtree)/rust/libmacros.so $(objtree)/rust/bindings_generated.rs \
323
+ $(objtree)/rust/bindings_helpers_generated.rs FORCE
307
324
$(call if_changed_dep,rustc_library)
308
325
309
326
# Targets that need to expand twice
0 commit comments