@@ -12,7 +12,7 @@ obj-$(CONFIG_RUST) += helpers/helpers.o
1212CFLAGS_REMOVE_helpers/helpers.o = -Wmissing-prototypes -Wmissing-declarations
1313
1414always-$(CONFIG_RUST) += bindings/bindings_generated.rs bindings/bindings_helpers_generated.rs
15- obj-$(CONFIG_RUST) += bindings.o kernel.o
15+ obj-$(CONFIG_RUST) += bindings.o pin_init.o kernel.o
1616always-$(CONFIG_RUST) += exports_helpers_generated.h \
1717 exports_bindings_generated.h exports_kernel_generated.h
1818
@@ -41,7 +41,10 @@ ifdef CONFIG_RUST
4141libmacros_name := $(shell MAKEFLAGS= $(RUSTC ) --print file-names --crate-name macros --crate-type proc-macro - </dev/null)
4242libmacros_extension := $(patsubst libmacros.% ,% ,$(libmacros_name ) )
4343
44- always-$(CONFIG_RUST) += $(libmacros_name )
44+ libpin_init_internal_name := $(shell MAKEFLAGS= $(RUSTC ) --print file-names --crate-name pin_init_internal --crate-type proc-macro - </dev/null)
45+ libpin_init_internal_extension := $(patsubst libpin_init_internal.% ,% ,$(libpin_init_internal_name ) )
46+
47+ always-$(CONFIG_RUST) += $(libmacros_name ) $(libpin_init_internal_name )
4548
4649# `$(rust_flags)` is passed in case the user added `--sysroot`.
4750rustc_sysroot := $(shell MAKEFLAGS= $(RUSTC ) $(rust_flags ) --print sysroot)
@@ -80,7 +83,7 @@ quiet_cmd_rustdoc = RUSTDOC $(if $(rustdoc_host),H, ) $<
8083# command-like flags to solve the issue. Meanwhile, we use the non-custom case
8184# and then retouch the generated files.
8285rustdoc : rustdoc-core rustdoc-macros rustdoc-compiler_builtins \
83- rustdoc-kernel
86+ rustdoc-kernel rustdoc-pin_init
8487 $(Q)cp $(srctree)/Documentation/images/logo.svg $(rustdoc_output)/static.files/
8588 $(Q)cp $(srctree)/Documentation/images/COPYING-logo $(rustdoc_output)/static.files/
8689 $(Q)find $(rustdoc_output) -name '*.html' -type f -print0 | xargs -0 sed -Ei \
@@ -110,11 +113,24 @@ rustdoc-compiler_builtins: $(src)/compiler_builtins.rs rustdoc-core FORCE
110113rustdoc-ffi : $(src ) /ffi.rs rustdoc-core FORCE
111114 +$(call if_changed,rustdoc)
112115
113- rustdoc-kernel : private rustc_target_flags = --extern ffi \
116+ rustdoc-pin_init_internal : private rustdoc_host = yes
117+ rustdoc-pin_init_internal : private rustc_target_flags = --cfg kernel \
118+ --extern proc_macro --crate-type proc-macro
119+ rustdoc-pin_init_internal : $(src ) /pin-init/internal/src/_lib.rs FORCE
120+ +$(call if_changed,rustdoc)
121+
122+ rustdoc-pin_init : private rustdoc_host = yes
123+ rustdoc-pin_init : private rustc_target_flags = --extern pin_init_internal \
124+ --extern macros --extern alloc --cfg kernel --cfg feature=\"alloc\"
125+ rustdoc-pin_init : $(src ) /pin-init/src/_lib.rs rustdoc-pin_init_internal \
126+ rustdoc-macros FORCE
127+ +$(call if_changed,rustdoc)
128+
129+ rustdoc-kernel : private rustc_target_flags = --extern ffi --extern pin_init \
114130 --extern build_error --extern macros \
115131 --extern bindings --extern uapi
116132rustdoc-kernel : $(src ) /kernel/lib.rs rustdoc-core rustdoc-ffi rustdoc-macros \
117- rustdoc-compiler_builtins $(obj)/$(libmacros_name) \
133+ rustdoc-pin_init rustdoc- compiler_builtins $(obj)/$(libmacros_name) \
118134 $(obj)/bindings.o FORCE
119135 +$(call if_changed,rustdoc)
120136
@@ -139,12 +155,24 @@ rusttestlib-macros: private rustc_test_library_proc = yes
139155rusttestlib-macros : $(src ) /macros/lib.rs FORCE
140156 +$(call if_changed,rustc_test_library)
141157
158+ rusttestlib-pin_init_internal : private rustc_target_flags = --cfg kernel \
159+ --extern proc_macro
160+ rusttestlib-pin_init_internal : private rustc_test_library_proc = yes
161+ rusttestlib-pin_init_internal : $(src ) /pin-init/internal/src/_lib.rs FORCE
162+ +$(call if_changed,rustc_test_library)
163+
164+ rusttestlib-pin_init : private rustc_target_flags = --extern pin_init_internal \
165+ --extern macros --cfg kernel
166+ rusttestlib-pin_init : $(src ) /pin-init/src/_lib.rs rusttestlib-macros \
167+ rusttestlib-pin_init_internal $(obj)/$(libpin_init_internal_name) FORCE
168+ +$(call if_changed,rustc_test_library)
169+
142170rusttestlib-kernel : private rustc_target_flags = --extern ffi \
143- --extern build_error --extern macros \
171+ --extern build_error --extern macros --extern pin_init \
144172 --extern bindings --extern uapi
145- rusttestlib-kernel : $(src ) /kernel/lib.rs \
146- rusttestlib-bindings rusttestlib-uapi rusttestlib-build_error \
147- $(obj)/$(libmacros_name) $(obj)/ bindings.o FORCE
173+ rusttestlib-kernel : $(src ) /kernel/lib.rs rusttestlib-bindings rusttestlib-uapi \
174+ rusttestlib-build_error rusttestlib-pin_init $(obj)/$(libmacros_name) \
175+ $(obj)/bindings.o FORCE
148176 +$(call if_changed,rustc_test_library)
149177
150178rusttestlib-bindings : private rustc_target_flags = --extern ffi
@@ -172,8 +200,8 @@ quiet_cmd_rustdoc_test_kernel = RUSTDOC TK $<
172200 mkdir -p $(objtree ) /$(obj ) /test/doctests/kernel; \
173201 OBJTREE=$(abspath $(objtree ) ) \
174202 $(RUSTDOC ) --test $(rust_flags ) \
175- -L$(objtree ) /$(obj ) --extern ffi --extern kernel \
176- --extern build_error --extern macros \
203+ -L$(objtree ) /$(obj ) --extern ffi --extern pin_init \
204+ --extern kernel --extern build_error --extern macros \
177205 --extern bindings --extern uapi \
178206 --no-run --crate-name kernel -Zunstable-options \
179207 --sysroot=/dev/null \
@@ -203,18 +231,18 @@ quiet_cmd_rustc_test = $(RUSTC_OR_CLIPPY_QUIET) T $<
203231rusttest : rusttest-macros rusttest-kernel
204232
205233rusttest-macros : private rustc_target_flags = --extern proc_macro \
206- --extern macros --extern kernel
234+ --extern macros --extern kernel --extern pin_init
207235rusttest-macros : private rustdoc_test_target_flags = --crate-type proc-macro
208236rusttest-macros : $(src ) /macros/lib.rs \
209- rusttestlib-macros rusttestlib-kernel FORCE
237+ rusttestlib-macros rusttestlib-kernel rusttestlib-pin_init FORCE
210238 +$(call if_changed,rustc_test)
211239 +$(call if_changed,rustdoc_test)
212240
213- rusttest-kernel : private rustc_target_flags = --extern ffi \
241+ rusttest-kernel : private rustc_target_flags = --extern ffi --extern pin_init \
214242 --extern build_error --extern macros --extern bindings --extern uapi
215243rusttest-kernel : $(src ) /kernel/lib.rs rusttestlib-ffi rusttestlib-kernel \
216244 rusttestlib-build_error rusttestlib-macros rusttestlib-bindings \
217- rusttestlib-uapi FORCE
245+ rusttestlib-uapi rusttestlib-pin_init FORCE
218246 +$(call if_changed,rustc_test)
219247
220248ifdef CONFIG_CC_IS_CLANG
@@ -361,7 +389,7 @@ $(obj)/exports_kernel_generated.h: $(obj)/kernel.o FORCE
361389
362390quiet_cmd_rustc_procmacro = $(RUSTC_OR_CLIPPY_QUIET ) P $@
363391 cmd_rustc_procmacro = \
364- $(RUSTC_OR_CLIPPY ) $(rust_common_flags ) \
392+ $(RUSTC_OR_CLIPPY ) $(rust_common_flags ) $( rustc_target_flags ) \
365393 -Clinker-flavor=gcc -Clinker=$(HOSTCC ) \
366394 -Clink-args='$(call escsq,$(KBUILD_PROCMACROLDFLAGS ) ) ' \
367395 --emit=dep-info=$(depfile ) --emit=link=$@ --extern proc_macro \
@@ -372,6 +400,10 @@ quiet_cmd_rustc_procmacro = $(RUSTC_OR_CLIPPY_QUIET) P $@
372400$(obj ) /$(libmacros_name ) : $(src ) /macros/lib.rs FORCE
373401 +$(call if_changed_dep,rustc_procmacro)
374402
403+ $(obj ) /$(libpin_init_internal_name ) : private rustc_target_flags = --cfg kernel
404+ $(obj ) /$(libpin_init_internal_name ) : $(src ) /pin-init/internal/src/_lib.rs FORCE
405+ +$(call if_changed_dep,rustc_procmacro)
406+
375407quiet_cmd_rustc_library = $(if $(skip_clippy ) ,RUSTC,$(RUSTC_OR_CLIPPY_QUIET ) ) L $@
376408 cmd_rustc_library = \
377409 OBJTREE=$(abspath $(objtree ) ) \
@@ -451,6 +483,13 @@ $(obj)/compiler_builtins.o: private rustc_objcopy = -w -W '__*'
451483$(obj ) /compiler_builtins.o : $(src ) /compiler_builtins.rs $(obj ) /core.o FORCE
452484 +$(call if_changed_rule,rustc_library)
453485
486+ $(obj ) /pin_init.o : private skip_gendwarfksyms = 1
487+ $(obj ) /pin_init.o : private rustc_target_flags = --extern pin_init_internal \
488+ --extern macros --cfg kernel
489+ $(obj ) /pin_init.o : $(src ) /pin-init/src/_lib.rs $(obj ) /compiler_builtins.o \
490+ $(obj)/$(libpin_init_internal_name) $(obj)/$(libmacros_name) FORCE
491+ +$(call if_changed_rule,rustc_library)
492+
454493$(obj ) /build_error.o : private skip_gendwarfksyms = 1
455494$(obj ) /build_error.o : $(src ) /build_error.rs $(obj ) /compiler_builtins.o FORCE
456495 +$(call if_changed_rule,rustc_library)
@@ -473,9 +512,9 @@ $(obj)/uapi.o: $(src)/uapi/lib.rs \
473512 $(obj)/uapi/uapi_generated.rs FORCE
474513 +$(call if_changed_rule,rustc_library)
475514
476- $(obj ) /kernel.o : private rustc_target_flags = --extern ffi \
515+ $(obj ) /kernel.o : private rustc_target_flags = --extern ffi --extern pin_init \
477516 --extern build_error --extern macros --extern bindings --extern uapi
478- $(obj ) /kernel.o : $(src ) /kernel/lib.rs $(obj ) /build_error.o \
517+ $(obj ) /kernel.o : $(src ) /kernel/lib.rs $(obj ) /build_error.o $( obj ) /pin_init.o \
479518 $(obj)/$(libmacros_name) $(obj)/bindings.o $(obj)/uapi.o FORCE
480519 +$(call if_changed_rule,rustc_library)
481520
0 commit comments