@@ -8,11 +8,12 @@ always-$(CONFIG_RUST) += exports_core_generated.h
8
8
obj-$(CONFIG_RUST) += helpers.o
9
9
CFLAGS_REMOVE_helpers.o = -Wmissing-prototypes -Wmissing-declarations
10
10
11
- always-$(CONFIG_RUST) += libmacros.so
12
- no-clean-files += libmacros.so
11
+ always-$(CONFIG_RUST) += libproc_macro2.rlib libquote.rlib libsyn.rlib
12
+ always-$(CONFIG_RUST) += libserde_derive.so libmacros.so
13
+ no-clean-files += libserde_derive.so libmacros.so
13
14
14
15
always-$(CONFIG_RUST) += bindings/bindings_generated.rs bindings/bindings_helpers_generated.rs
15
- obj-$(CONFIG_RUST) += alloc.o bindings.o kernel.o
16
+ obj-$(CONFIG_RUST) += alloc.o bindings.o serde.o kernel.o
16
17
always-$(CONFIG_RUST) += exports_alloc_generated.h exports_bindings_generated.h \
17
18
exports_kernel_generated.h
18
19
@@ -60,11 +61,73 @@ alloc-cfgs = \
60
61
--cfg no_sync \
61
62
--cfg no_thin
62
63
64
+ proc_macro2-skip_flags := \
65
+ --edition=2021 \
66
+ -Drust_2018_idioms \
67
+ -Dunreachable_pub \
68
+ -Dunsafe_op_in_unsafe_fn
69
+
70
+ proc_macro2-flags := \
71
+ --edition=2018 \
72
+ -Amissing_docs \
73
+ --cfg 'feature="proc-macro"' \
74
+ --cfg use_proc_macro \
75
+ --cfg wrap_proc_macro
76
+
77
+ quote-skip_flags := \
78
+ --edition=2021 \
79
+ -Drust_2018_idioms
80
+
81
+ quote-flags := \
82
+ --edition=2018 \
83
+ -Amissing_docs \
84
+ --extern proc_macro2 \
85
+ --cfg 'feature="proc-macro"'
86
+
87
+ syn-skip_flags := \
88
+ --edition=2021 \
89
+ -Drust_2018_idioms \
90
+ -Dunreachable_pub \
91
+ -Dunsafe_op_in_unsafe_fn
92
+
93
+ syn-flags := \
94
+ --edition=2018 \
95
+ -Amissing_docs \
96
+ --cfg 'feature="clone-impls"' \
97
+ --cfg 'feature="derive"' \
98
+ --cfg 'feature="extra-traits"' \
99
+ --cfg 'feature="fold"' \
100
+ --cfg 'feature="full"' \
101
+ --cfg 'feature="parsing"' \
102
+ --cfg 'feature="printing"' \
103
+ --cfg 'feature="proc-macro"' \
104
+ --cfg 'feature="quote"' \
105
+ --cfg 'feature="visit"' \
106
+ --cfg 'feature="visit-mut"'
107
+
108
+ serde_derive-skip_flags := \
109
+ --edition=2021 \
110
+ -Drust_2018_idioms \
111
+ -Dunreachable_pub
112
+
113
+ serde_derive-flags := \
114
+ -Amissing_docs
115
+
116
+ serde-skip_flags := \
117
+ --edition=2021 \
118
+ -Drust_2018_idioms \
119
+ -Dunreachable_pub
120
+
121
+ serde-flags := \
122
+ -Amissing_docs \
123
+ --cfg no_fp_fmt_parse
124
+
63
125
quiet_cmd_rustdoc = RUSTDOC $(if $(rustdoc_host ) ,H, ) $<
64
126
cmd_rustdoc = \
65
127
OBJTREE=$(abspath $(objtree ) ) \
66
- $(RUSTDOC ) $(if $(rustdoc_host ) ,$(rust_common_flags ) ,$(rust_flags ) ) \
128
+ $(RUSTDOC ) $(filter-out $( skip_flags ) , $( if $(rustdoc_host ) ,$(rust_common_flags ) ,$(rust_flags ) ) ) \
67
129
$(rustc_target_flags ) -L$(objtree ) /$(obj ) \
130
+ --extern quote --extern syn \
68
131
--output $(objtree ) /$(obj ) /doc \
69
132
--crate-name $(subst rustdoc-,,$@ ) \
70
133
@$(objtree ) /include/generated/rustc_cfg $<
@@ -81,7 +144,7 @@ quiet_cmd_rustdoc = RUSTDOC $(if $(rustdoc_host),H, ) $<
81
144
# command-like flags to solve the issue. Meanwhile, we use the non-custom case
82
145
# and then retouch the generated files.
83
146
rustdoc : rustdoc-core rustdoc-macros rustdoc-compiler_builtins \
84
- rustdoc-alloc rustdoc-kernel
147
+ rustdoc-alloc rustdoc-kernel rustdoc-serde rustdoc-serde_derive
85
148
$(Q)cp $(srctree)/Documentation/images/logo.svg $(objtree)/$(obj)/doc
86
149
$(Q)cp $(srctree)/Documentation/images/COPYING-logo $(objtree)/$(obj)/doc
87
150
$(Q)find $(objtree)/$(obj)/doc -name '*.html' -type f -print0 | xargs -0 sed -Ei \
@@ -116,17 +179,31 @@ rustdoc-alloc: $(src)/alloc/lib.rs rustdoc-core rustdoc-compiler_builtins FORCE
116
179
117
180
rustdoc-kernel : private rustc_target_flags = --extern alloc \
118
181
--extern build_error --extern macros=$(objtree)/$(obj)/libmacros.so \
119
- --extern bindings --extern uapi
182
+ --extern bindings --extern uapi --extern serde --extern serde_derive
120
183
rustdoc-kernel : $(src ) /kernel/lib.rs rustdoc-core rustdoc-macros \
121
- rustdoc-compiler_builtins rustdoc-alloc $(obj)/libmacros.so \
122
- $(obj)/bindings.o FORCE
184
+ rustdoc-compiler_builtins rustdoc-alloc rustdoc-serde $(obj)/libmacros.so \
185
+ $(obj)/bindings.o $(obj)/libserde_derive.so FORCE
186
+ $(call if_changed,rustdoc)
187
+
188
+ rustdoc-serde_derive : private rustdoc_host = yes
189
+ rustdoc-serde_derive : private skip_flags = $(serde_derive-skip_flags )
190
+ rustdoc-serde_derive : private rustc_target_flags = --crate-type proc-macro \
191
+ --extern proc_macro -Amissing_docs
192
+ rustdoc-serde_derive : $(src ) /serde_derive/lib.rs FORCE
193
+ $(call if_changed,rustdoc)
194
+
195
+ rustdoc-serde : private skip_flags = $(serde-skip_flags )
196
+ rustdoc-serde : private rustc_target_flags = --extern alloc --extern serde \
197
+ -Arustdoc ::broken_intra_doc_links
198
+ rustdoc-serde : $(src ) /serde/lib.rs rustdoc-core FORCE
123
199
$(call if_changed,rustdoc)
124
200
125
201
quiet_cmd_rustc_test_library = RUSTC TL $<
126
202
cmd_rustc_test_library = \
127
203
OBJTREE=$(abspath $(objtree ) ) \
128
- $(RUSTC ) $(rust_common_flags ) \
129
- @$(objtree ) /include/generated/rustc_cfg $(rustc_target_flags ) \
204
+ $(RUSTC ) \
205
+ $(filter-out $(skip_flags ) ,$(rust_common_flags ) $(rustc_target_flags ) ) \
206
+ @$(objtree ) /include/generated/rustc_cfg \
130
207
--crate-type $(if $(rustc_test_library_proc ) ,proc-macro,rlib) \
131
208
--out-dir $(objtree ) /$(obj ) /test --cfg testlib \
132
209
--sysroot $(objtree ) /$(obj ) /test/sysroot \
@@ -136,9 +213,25 @@ quiet_cmd_rustc_test_library = RUSTC TL $<
136
213
rusttestlib-build_error : $(src ) /build_error.rs rusttest-prepare FORCE
137
214
$(call if_changed,rustc_test_library)
138
215
139
- rusttestlib-macros : private rustc_target_flags = --extern proc_macro
216
+ rusttestlib-proc_macro2 : private skip_flags = $(proc_macro2-skip_flags )
217
+ rusttestlib-proc_macro2 : private rustc_target_flags = $(proc_macro2-flags )
218
+ rusttestlib-proc_macro2 : $(src ) /proc-macro2/lib.rs rusttest-prepare FORCE
219
+ $(call if_changed,rustc_test_library)
220
+
221
+ rusttestlib-quote : private skip_flags = $(quote-skip_flags )
222
+ rusttestlib-quote : private rustc_target_flags = $(quote-flags )
223
+ rusttestlib-quote : $(src ) /quote/lib.rs rusttestlib-proc_macro2 FORCE
224
+ $(call if_changed,rustc_test_library)
225
+
226
+ rusttestlib-syn : private skip_flags = $(syn-skip_flags )
227
+ rusttestlib-syn : private rustc_target_flags = $(syn-flags )
228
+ rusttestlib-syn : $(src ) /syn/lib.rs rusttestlib-quote FORCE
229
+ $(call if_changed,rustc_test_library)
230
+
231
+ rusttestlib-macros : private rustc_target_flags = --extern proc_macro \
232
+ --extern quote --extern syn
140
233
rusttestlib-macros : private rustc_test_library_proc = yes
141
- rusttestlib-macros : $(src ) /macros/lib.rs rusttest-prepare FORCE
234
+ rusttestlib-macros : $(src ) /macros/lib.rs rusttestlib-syn FORCE
142
235
$(call if_changed,rustc_test_library)
143
236
144
237
rusttestlib-bindings : $(src ) /bindings/lib.rs rusttest-prepare FORCE
@@ -147,6 +240,18 @@ rusttestlib-bindings: $(src)/bindings/lib.rs rusttest-prepare FORCE
147
240
rusttestlib-uapi : $(src ) /uapi/lib.rs rusttest-prepare FORCE
148
241
$(call if_changed,rustc_test_library)
149
242
243
+ rusttestlib-serde_derive : private skip_flags = $(serde_derive-skip_flags )
244
+ rusttestlib-serde_derive : private rustc_target_flags = --extern proc_macro \
245
+ --extern quote --extern syn $(serde_derive-flags)
246
+ rusttestlib-serde_derive : private rustc_test_library_proc = yes
247
+ rusttestlib-serde_derive : $(src ) /serde_derive/lib.rs rusttestlib-syn FORCE
248
+ $(call if_changed,rustc_test_library)
249
+
250
+ rusttestlib-serde : private skip_flags = $(serde-skip_flags )
251
+ rusttestlib-serde : private rustc_target_flags = $(serde-flags )
252
+ rusttestlib-serde : $(src ) /serde/lib.rs rusttest-prepare FORCE
253
+ $(call if_changed,rustc_test_library)
254
+
150
255
quiet_cmd_rustdoc_test = RUSTDOC T $<
151
256
cmd_rustdoc_test = \
152
257
OBJTREE=$(abspath $(objtree ) ) \
@@ -222,17 +327,19 @@ quiet_cmd_rustsysroot = RUSTSYSROOT
222
327
rusttest-prepare : FORCE
223
328
$(call if_changed,rustsysroot)
224
329
225
- rusttest-macros : private rustc_target_flags = --extern proc_macro
330
+ rusttest-macros : private rustc_target_flags = --extern proc_macro \
331
+ --extern quote --extern syn
226
332
rusttest-macros : private rustdoc_test_target_flags = --crate-type proc-macro
227
- rusttest-macros : $(src ) /macros/lib.rs rusttest-prepare FORCE
333
+ rusttest-macros : $(src ) /macros/lib.rs rusttestlib-syn FORCE
228
334
$(call if_changed,rustc_test)
229
335
$(call if_changed,rustdoc_test)
230
336
231
337
rusttest-kernel : private rustc_target_flags = --extern alloc \
232
- --extern build_error --extern macros --extern bindings --extern uapi
338
+ --extern build_error --extern macros --extern bindings --extern uapi \
339
+ --extern serde --extern serde_derive
233
340
rusttest-kernel : $(src ) /kernel/lib.rs rusttest-prepare \
234
341
rusttestlib-build_error rusttestlib-macros rusttestlib-bindings \
235
- rusttestlib-uapi FORCE
342
+ rusttestlib-uapi rusttestlib-serde rusttestlib-serde_derive FORCE
236
343
$(call if_changed,rustc_test)
237
344
$(call if_changed,rustc_test_library)
238
345
@@ -348,17 +455,52 @@ $(obj)/exports_bindings_generated.h: $(obj)/bindings.o FORCE
348
455
$(obj ) /exports_kernel_generated.h : $(obj ) /kernel.o FORCE
349
456
$(call if_changed,exports)
350
457
458
+ quiet_cmd_rustc_hostlibrary = $(RUSTC_OR_CLIPPY_QUIET ) H $@
459
+ cmd_rustc_hostlibrary = \
460
+ $(if $(skip_clippy ) ,$(RUSTC ) ,$(RUSTC_OR_CLIPPY ) ) \
461
+ $(filter-out $(skip_flags ) ,$(rust_common_flags ) $(rustc_target_flags ) ) \
462
+ --emit=dep-info,link --crate-type rlib -O \
463
+ --out-dir $(objtree ) /$(obj ) -L$(objtree ) /$(obj ) \
464
+ --crate-name $(patsubst lib% .rlib,% ,$(notdir $@ ) ) $< ; \
465
+ mv $(objtree ) /$(obj ) /$(patsubst lib% .rlib,% ,$(notdir $@ ) ) .d $(depfile ) ; \
466
+ sed -i '/^\# /d' $(depfile)
467
+
468
+ $(obj ) /libproc_macro2.rlib : private skip_clippy = 1
469
+ $(obj ) /libproc_macro2.rlib : private skip_flags = $(proc_macro2-skip_flags )
470
+ $(obj ) /libproc_macro2.rlib : private rustc_target_flags = $(proc_macro2-flags )
471
+ $(obj ) /libproc_macro2.rlib : $(src ) /proc-macro2/lib.rs FORCE
472
+ $(call if_changed_dep,rustc_hostlibrary)
473
+
474
+ $(obj ) /libquote.rlib : private skip_clippy = 1
475
+ $(obj ) /libquote.rlib : private skip_flags = $(quote-skip_flags )
476
+ $(obj ) /libquote.rlib : private rustc_target_flags = $(quote-flags )
477
+ $(obj ) /libquote.rlib : $(src ) /quote/lib.rs $(obj ) /libproc_macro2.rlib FORCE
478
+ $(call if_changed_dep,rustc_hostlibrary)
479
+
480
+ $(obj ) /libsyn.rlib : private skip_clippy = 1
481
+ $(obj ) /libsyn.rlib : private skip_flags = $(syn-skip_flags )
482
+ $(obj ) /libsyn.rlib : private rustc_target_flags = $(syn-flags )
483
+ $(obj ) /libsyn.rlib : $(src ) /syn/lib.rs $(obj ) /libquote.rlib FORCE
484
+ $(call if_changed_dep,rustc_hostlibrary)
485
+
351
486
quiet_cmd_rustc_procmacro = $(RUSTC_OR_CLIPPY_QUIET ) P $@
352
487
cmd_rustc_procmacro = \
353
- $(RUSTC_OR_CLIPPY ) $(rust_common_flags ) \
488
+ $(if $(skip_clippy ) ,$(RUSTC ) ,$(RUSTC_OR_CLIPPY ) ) \
489
+ $(filter-out $(skip_flags ) ,$(rust_common_flags ) $(rustc_target_flags ) ) \
354
490
--emit=dep-info=$(depfile ) --emit=link=$@ --extern proc_macro \
355
- --crate-type proc-macro \
356
- --crate-name $(patsubst lib% .so,% ,$(notdir $@ ) ) $<
491
+ --extern quote --extern syn -- crate-type proc-macro \
492
+ -L $( objtree ) / $( obj ) - -crate-name $(patsubst lib% .so,% ,$(notdir $@ ) ) $<
357
493
358
494
# Procedural macros can only be used with the `rustc` that compiled it.
359
495
# Therefore, to get `libmacros.so` automatically recompiled when the compiler
360
496
# version changes, we add `core.o` as a dependency (even if it is not needed).
361
- $(obj ) /libmacros.so : $(src ) /macros/lib.rs $(obj ) /core.o FORCE
497
+ $(obj ) /libserde_derive.so : private skip_clippy = 1
498
+ $(obj ) /libserde_derive.so : private skip_flags = $(serde_derive-skip_flags )
499
+ $(obj ) /libserde_derive.so : private rustc_target_flags = $(serde_derive-flags )
500
+ $(obj ) /libserde_derive.so : $(src ) /serde_derive/lib.rs $(obj ) /libsyn.rlib $(obj ) /core.o FORCE
501
+ $(call if_changed_dep,rustc_procmacro)
502
+
503
+ $(obj ) /libmacros.so : $(src ) /macros/lib.rs $(obj ) /libsyn.rlib $(obj ) /core.o FORCE
362
504
$(call if_changed_dep,rustc_procmacro)
363
505
364
506
quiet_cmd_rustc_library = $(if $(skip_clippy ) ,RUSTC,$(RUSTC_OR_CLIPPY_QUIET ) ) L $@
@@ -420,10 +562,18 @@ $(obj)/uapi.o: $(src)/uapi/lib.rs \
420
562
$(obj)/uapi/uapi_generated.rs FORCE
421
563
$(call if_changed_dep,rustc_library)
422
564
565
+ $(obj ) /serde.o : private skip_clippy = 1
566
+ $(obj ) /serde.o : private skip_flags = $(serde-skip_flags )
567
+ $(obj ) /serde.o : private rustc_target_flags = $(serde-flags )
568
+ $(obj ) /serde.o : $(src ) /serde/lib.rs $(obj ) /compiler_builtins.o FORCE
569
+ $(call if_changed_dep,rustc_library)
570
+
423
571
$(obj ) /kernel.o : private rustc_target_flags = --extern alloc \
424
- --extern build_error --extern macros --extern bindings --extern uapi
572
+ --extern build_error --extern macros --extern bindings --extern uapi \
573
+ --extern serde --extern serde_derive
425
574
$(obj ) /kernel.o : $(src ) /kernel/lib.rs $(obj ) /alloc.o $(obj ) /build_error.o \
426
- $(obj)/libmacros.so $(obj)/bindings.o $(obj)/uapi.o FORCE
575
+ $(obj)/libmacros.so $(obj)/bindings.o $(obj)/uapi.o \
576
+ $(obj)/serde.o $(obj)/libserde_derive.so FORCE
427
577
$(call if_changed_dep,rustc_library)
428
578
429
579
endif # CONFIG_RUST
0 commit comments