@@ -11,6 +11,7 @@ always-$(CONFIG_RUST) += exports_core_generated.h
11
11
obj-$(CONFIG_RUST) += helpers.o
12
12
CFLAGS_REMOVE_helpers.o = -Wmissing-prototypes -Wmissing-declarations
13
13
14
+ always-$(CONFIG_RUST) += libproc_macro2.rlib libquote.rlib libsyn.rlib
14
15
always-$(CONFIG_RUST) += libmacros.so
15
16
no-clean-files += libmacros.so
16
17
@@ -71,11 +72,60 @@ alloc-cfgs = \
71
72
--cfg no_sync \
72
73
--cfg no_thin
73
74
75
+ proc_macro2-cfgs := \
76
+ --cfg 'feature="proc-macro"' \
77
+ --cfg wrap_proc_macro
78
+
79
+ proc_macro2-skip_flags := \
80
+ -Drust_2018_idioms \
81
+ -Dunreachable_pub
82
+
83
+ proc_macro2-flags := \
84
+ -Amissing_docs \
85
+ $(proc_macro2-cfgs )
86
+
87
+ quote-cfgs := \
88
+ --cfg 'feature="proc-macro"'
89
+
90
+ quote-skip_flags := \
91
+ --edition=2021 \
92
+ -Drust_2018_idioms
93
+
94
+ quote-flags := \
95
+ --edition=2018 \
96
+ -Amissing_docs \
97
+ --extern proc_macro2 \
98
+ $(quote-cfgs )
99
+
100
+ syn-cfgs := \
101
+ --cfg 'feature="clone-impls"' \
102
+ --cfg 'feature="derive"' \
103
+ --cfg 'feature="extra-traits"' \
104
+ --cfg 'feature="fold"' \
105
+ --cfg 'feature="full"' \
106
+ --cfg 'feature="parsing"' \
107
+ --cfg 'feature="printing"' \
108
+ --cfg 'feature="proc-macro"' \
109
+ --cfg 'feature="quote"' \
110
+ --cfg 'feature="visit"' \
111
+ --cfg 'feature="visit-mut"'
112
+
113
+ syn-skip_flags := \
114
+ -Drust_2018_idioms \
115
+ -Dunreachable_pub
116
+
117
+ syn-flags := \
118
+ -Amissing_docs \
119
+ --extern proc_macro2 \
120
+ --extern quote \
121
+ $(syn-cfgs )
122
+
74
123
quiet_cmd_rustdoc = RUSTDOC $(if $(rustdoc_host ) ,H, ) $<
75
124
cmd_rustdoc = \
76
125
OBJTREE=$(abspath $(objtree ) ) \
77
126
$(RUSTDOC ) $(if $(rustdoc_host ) ,$(rust_common_flags ) ,$(rust_flags ) ) \
78
127
$(rustc_target_flags ) -L$(objtree ) /$(obj ) \
128
+ --extern proc_macro2 --extern quote --extern syn \
79
129
--output $(rustdoc_output ) \
80
130
--crate-name $(subst rustdoc-,,$@ ) \
81
131
$(if $(rustdoc_host ) ,,--sysroot=/dev/null) \
@@ -137,8 +187,9 @@ rustdoc-kernel: $(src)/kernel/lib.rs rustdoc-core rustdoc-macros \
137
187
quiet_cmd_rustc_test_library = RUSTC TL $<
138
188
cmd_rustc_test_library = \
139
189
OBJTREE=$(abspath $(objtree ) ) \
140
- $(RUSTC ) $(rust_common_flags ) \
141
- @$(objtree ) /include/generated/rustc_cfg $(rustc_target_flags ) \
190
+ $(RUSTC ) \
191
+ $(filter-out $(skip_flags ) ,$(rust_common_flags ) $(rustc_target_flags ) ) \
192
+ @$(objtree ) /include/generated/rustc_cfg \
142
193
--crate-type $(if $(rustc_test_library_proc ) ,proc-macro,rlib) \
143
194
--out-dir $(objtree ) /$(obj ) /test --cfg testlib \
144
195
--sysroot $(objtree ) /$(obj ) /test/sysroot \
@@ -148,9 +199,25 @@ quiet_cmd_rustc_test_library = RUSTC TL $<
148
199
rusttestlib-build_error : $(src ) /build_error.rs rusttest-prepare FORCE
149
200
+$(call if_changed,rustc_test_library)
150
201
151
- rusttestlib-macros : private rustc_target_flags = --extern proc_macro
202
+ rusttestlib-proc_macro2 : private skip_flags = $(proc_macro2-skip_flags )
203
+ rusttestlib-proc_macro2 : private rustc_target_flags = $(proc_macro2-flags )
204
+ rusttestlib-proc_macro2 : $(src ) /proc-macro2/lib.rs rusttest-prepare FORCE
205
+ +$(call if_changed,rustc_test_library)
206
+
207
+ rusttestlib-quote : private skip_flags = $(quote-skip_flags )
208
+ rusttestlib-quote : private rustc_target_flags = $(quote-flags )
209
+ rusttestlib-quote : $(src ) /quote/lib.rs rusttestlib-proc_macro2 FORCE
210
+ +$(call if_changed,rustc_test_library)
211
+
212
+ rusttestlib-syn : private skip_flags = $(syn-skip_flags )
213
+ rusttestlib-syn : private rustc_target_flags = $(syn-flags )
214
+ rusttestlib-syn : $(src ) /syn/lib.rs rusttestlib-quote FORCE
215
+ +$(call if_changed,rustc_test_library)
216
+
217
+ rusttestlib-macros : private rustc_target_flags = --extern proc_macro \
218
+ --extern proc_macro2 --extern quote --extern syn
152
219
rusttestlib-macros : private rustc_test_library_proc = yes
153
- rusttestlib-macros : $(src ) /macros/lib.rs rusttest-prepare FORCE
220
+ rusttestlib-macros : $(src ) /macros/lib.rs rusttestlib-syn FORCE
154
221
+$(call if_changed,rustc_test_library)
155
222
156
223
rusttestlib-bindings : $(src ) /bindings/lib.rs rusttest-prepare FORCE
@@ -256,9 +323,10 @@ quiet_cmd_rustsysroot = RUSTSYSROOT
256
323
rusttest-prepare : FORCE
257
324
+$(call if_changed,rustsysroot)
258
325
259
- rusttest-macros : private rustc_target_flags = --extern proc_macro
326
+ rusttest-macros : private rustc_target_flags = --extern proc_macro \
327
+ --extern proc_macro2 --extern quote --extern syn
260
328
rusttest-macros : private rustdoc_test_target_flags = --crate-type proc-macro
261
- rusttest-macros : $(src ) /macros/lib.rs rusttest-prepare FORCE
329
+ rusttest-macros : $(src ) /macros/lib.rs rusttestlib-syn FORCE
262
330
+$(call if_changed,rustc_test)
263
331
+$(call if_changed,rustdoc_test)
264
332
@@ -384,19 +452,48 @@ $(obj)/exports_bindings_generated.h: $(obj)/bindings.o FORCE
384
452
$(obj ) /exports_kernel_generated.h : $(obj ) /kernel.o FORCE
385
453
$(call if_changed,exports)
386
454
455
+ quiet_cmd_rustc_hostlibrary = $(RUSTC_OR_CLIPPY_QUIET ) H $@
456
+ cmd_rustc_hostlibrary = \
457
+ $(if $(skip_clippy ) ,$(RUSTC ) ,$(RUSTC_OR_CLIPPY ) ) \
458
+ $(filter-out $(skip_flags ) ,$(KBUILD_HOSTRUSTFLAGS ) $(rustc_target_flags ) ) \
459
+ -Clinker-flavor=gcc -Clinker=$(HOSTCC ) \
460
+ -Clink-args='$(call escsq,$(KBUILD_HOSTLDFLAGS ) ) ' \
461
+ --emit=dep-info=$(depfile ) --emit=link=$@ --crate-type rlib \
462
+ --out-dir $(objtree ) /$(obj ) -L$(objtree ) /$(obj ) \
463
+ --crate-name $(patsubst lib% .rlib,% ,$(notdir $@ ) ) $<
464
+
465
+ $(obj ) /libproc_macro2.rlib : private skip_clippy = 1
466
+ $(obj ) /libproc_macro2.rlib : private skip_flags = $(proc_macro2-skip_flags )
467
+ $(obj ) /libproc_macro2.rlib : private rustc_target_flags = $(proc_macro2-flags )
468
+ $(obj ) /libproc_macro2.rlib : $(src ) /proc-macro2/lib.rs FORCE
469
+ +$(call if_changed_dep,rustc_hostlibrary)
470
+
471
+ $(obj ) /libquote.rlib : private skip_clippy = 1
472
+ $(obj ) /libquote.rlib : private skip_flags = $(quote-skip_flags )
473
+ $(obj ) /libquote.rlib : private rustc_target_flags = $(quote-flags )
474
+ $(obj ) /libquote.rlib : $(src ) /quote/lib.rs $(obj ) /libproc_macro2.rlib FORCE
475
+ +$(call if_changed_dep,rustc_hostlibrary)
476
+
477
+ $(obj ) /libsyn.rlib : private skip_clippy = 1
478
+ $(obj ) /libsyn.rlib : private skip_flags = $(syn-skip_flags )
479
+ $(obj ) /libsyn.rlib : private rustc_target_flags = $(syn-flags )
480
+ $(obj ) /libsyn.rlib : $(src ) /syn/lib.rs $(obj ) /libquote.rlib FORCE
481
+ +$(call if_changed_dep,rustc_hostlibrary)
482
+
387
483
quiet_cmd_rustc_procmacro = $(RUSTC_OR_CLIPPY_QUIET ) P $@
388
484
cmd_rustc_procmacro = \
389
485
$(RUSTC_OR_CLIPPY ) $(KBUILD_HOSTRUSTFLAGS ) \
390
486
-Clinker-flavor=gcc -Clinker=$(HOSTCC ) \
391
487
-Clink-args='$(call escsq,$(KBUILD_HOSTLDFLAGS ) ) ' \
392
488
--emit=dep-info=$(depfile ) --emit=link=$@ --extern proc_macro \
489
+ --extern proc_macro2 --extern quote --extern syn \
393
490
--crate-type proc-macro \
394
- --crate-name $(patsubst lib% .so,% ,$(notdir $@ ) ) $<
491
+ -L $( objtree ) / $( obj ) - -crate-name $(patsubst lib% .so,% ,$(notdir $@ ) ) $<
395
492
396
493
# Procedural macros can only be used with the `rustc` that compiled it.
397
494
# Therefore, to get `libmacros.so` automatically recompiled when the compiler
398
495
# version changes, we add `core.o` as a dependency (even if it is not needed).
399
- $(obj ) /libmacros.so : $(src ) /macros/lib.rs $(obj ) /core.o FORCE
496
+ $(obj ) /libmacros.so : $(src ) /macros/lib.rs $(obj ) /libsyn.rlib $( obj ) / core.o FORCE
400
497
+$(call if_changed_dep,rustc_procmacro)
401
498
402
499
quiet_cmd_rustc_library = $(if $(skip_clippy ) ,RUSTC,$(RUSTC_OR_CLIPPY_QUIET ) ) L $@
@@ -415,6 +512,9 @@ rust-analyzer:
415
512
$(Q )$(srctree ) /scripts/generate_rust_analyzer.py \
416
513
--cfgs=' core=$(call escsq,$(core-cfgs))' \
417
514
--cfgs=' alloc=$(call escsq,$(alloc-cfgs))' \
515
+ --cfgs=' proc_macro2=$(call escsq,$(proc_macro2-cfgs))' \
516
+ --cfgs=' quote=$(call escsq,$(quote-cfgs))' \
517
+ --cfgs=' syn=$(call escsq,$(syn-cfgs))' \
418
518
$(realpath $(srctree ) ) $(realpath $(objtree ) ) \
419
519
$(RUST_LIB_SRC ) $(KBUILD_EXTMOD ) > \
420
520
$(if $(KBUILD_EXTMOD ) ,$(extmod_prefix ) ,$(objtree ) ) /rust-project.json
0 commit comments