2727
2828obj-$(CONFIG_RUST) += exports.o
2929
30- always-$(CONFIG_RUST) += libproc_macro2.rlib libquote.rlib
30+ always-$(CONFIG_RUST) += libproc_macro2.rlib libquote.rlib libsyn.rlib
3131
3232always-$(CONFIG_RUST_KERNEL_DOCTESTS) += doctests_kernel_generated.rs
3333always-$(CONFIG_RUST_KERNEL_DOCTESTS) += doctests_kernel_generated_kunit.c
@@ -101,6 +101,22 @@ quote-flags := \
101101 --extern proc_macro2 \
102102 $(call cfgs-to-flags,$(quote-cfgs ) )
103103
104+ # `extra-traits`, `fold` and `visit` may be enabled if needed.
105+ syn-cfgs := \
106+ feature="clone-impls" \
107+ feature="derive" \
108+ feature="full" \
109+ feature="parsing" \
110+ feature="printing" \
111+ feature="proc-macro" \
112+ feature="visit-mut"
113+
114+ syn-flags := \
115+ --cap-lints=allow \
116+ --extern proc_macro2 \
117+ --extern quote \
118+ $(call cfgs-to-flags,$(syn-cfgs ) )
119+
104120# `rustdoc` did not save the target modifiers, thus workaround for
105121# the time being (https://github.com/rust-lang/rust/issues/144521).
106122rustdoc_modifiers_workaround := $(if $(call rustc-min-version,108800) ,-Cunsafe-allow-abi-mismatch=fixed-x18)
@@ -161,11 +177,16 @@ rustdoc-quote: private skip_flags = $(quote-skip_flags)
161177rustdoc-quote : $(src ) /quote/lib.rs rustdoc-clean rustdoc-proc_macro2 FORCE
162178 +$(call if_changed,rustdoc)
163179
180+ rustdoc-syn : private rustdoc_host = yes
181+ rustdoc-syn : private rustc_target_flags = $(syn-flags )
182+ rustdoc-syn : $(src ) /syn/lib.rs rustdoc-clean rustdoc-quote FORCE
183+ +$(call if_changed,rustdoc)
184+
164185rustdoc-macros : private rustdoc_host = yes
165186rustdoc-macros : private rustc_target_flags = --crate-type proc-macro \
166187 --extern proc_macro
167188rustdoc-macros : $(src ) /macros/lib.rs rustdoc-clean rustdoc-proc_macro2 \
168- rustdoc-quote FORCE
189+ rustdoc-quote rustdoc-syn FORCE
169190 +$(call if_changed,rustdoc)
170191
171192# Starting with Rust 1.82.0, skipping `-Wrustdoc::unescaped_backticks` should
@@ -231,6 +252,10 @@ rusttestlib-quote: private rustc_target_flags = $(quote-flags)
231252rusttestlib-quote : $(src ) /quote/lib.rs rusttestlib-proc_macro2 FORCE
232253 +$(call if_changed,rustc_test_library)
233254
255+ rusttestlib-syn : private rustc_target_flags = $(syn-flags )
256+ rusttestlib-syn : $(src ) /syn/lib.rs rusttestlib-quote FORCE
257+ +$(call if_changed,rustc_test_library)
258+
234259rusttestlib-macros : private rustc_target_flags = --extern proc_macro
235260rusttestlib-macros : private rustc_test_library_proc = yes
236261rusttestlib-macros : $(src ) /macros/lib.rs FORCE
@@ -488,6 +513,11 @@ $(obj)/libquote.rlib: private rustc_target_flags = $(quote-flags)
488513$(obj ) /libquote.rlib : $(src ) /quote/lib.rs $(obj ) /libproc_macro2.rlib FORCE
489514 +$(call if_changed_dep,rustc_procmacrolibrary)
490515
516+ $(obj ) /libsyn.rlib : private skip_clippy = 1
517+ $(obj ) /libsyn.rlib : private rustc_target_flags = $(syn-flags )
518+ $(obj ) /libsyn.rlib : $(src ) /syn/lib.rs $(obj ) /libquote.rlib FORCE
519+ +$(call if_changed_dep,rustc_procmacrolibrary)
520+
491521quiet_cmd_rustc_procmacro = $(RUSTC_OR_CLIPPY_QUIET ) P $@
492522 cmd_rustc_procmacro = \
493523 $(RUSTC_OR_CLIPPY ) $(rust_common_flags ) $(rustc_target_flags ) \
@@ -500,7 +530,7 @@ quiet_cmd_rustc_procmacro = $(RUSTC_OR_CLIPPY_QUIET) P $@
500530
501531# Procedural macros can only be used with the `rustc` that compiled it.
502532$(obj ) /$(libmacros_name ) : $(src ) /macros/lib.rs $(obj ) /libproc_macro2.rlib \
503- $(obj)/libquote.rlib FORCE
533+ $(obj)/libquote.rlib $(obj)/libsyn.rlib FORCE
504534 +$(call if_changed_dep,rustc_procmacro)
505535
506536$(obj ) /$(libpin_init_internal_name ) : private rustc_target_flags = --cfg kernel
@@ -525,6 +555,7 @@ rust-analyzer:
525555 --cfgs=' core=$(core-cfgs)' $(core-edition ) \
526556 --cfgs=' proc_macro2=$(proc_macro2-cfgs)' \
527557 --cfgs=' quote=$(quote-cfgs)' \
558+ --cfgs=' syn=$(syn-cfgs)' \
528559 $(realpath $(srctree ) ) $(realpath $(objtree ) ) \
529560 $(rustc_sysroot ) $(RUST_LIB_SRC ) $(if $(KBUILD_EXTMOD ) ,$(srcroot ) ) \
530561 > rust-project.json
0 commit comments