@@ -37,88 +37,18 @@ include $(srctree)/scripts/Makefile.compiler
3737include $(kbuild-file)
3838include $(srctree)/scripts/Makefile.lib
3939
40- # flags that take effect in current and sub directories
41- KBUILD_AFLAGS += $(subdir-asflags-y)
42- KBUILD_CFLAGS += $(subdir-ccflags-y)
43- KBUILD_RUSTFLAGS += $(subdir-rustflags-y)
44-
45- # Figure out what we need to build from the various variables
46- # ===========================================================================
47-
48- # When an object is listed to be built compiled-in and modular,
49- # only build the compiled-in version
50- obj-m := $(filter-out $(obj-y),$(obj-m))
51-
52- # Libraries are always collected in one lib file.
53- # Filter out objects already built-in
54- lib-y := $(filter-out $(obj-y), $(sort $(lib-y) $(lib-m)))
55-
56- # Subdirectories we need to descend into
57- subdir-ym := $(sort $(subdir-y) $(subdir-m) \
58- $(patsubst %/,%, $(filter %/, $(obj-y) $(obj-m))))
59-
60- # Handle objects in subdirs:
61- # - If we encounter foo/ in $(obj-y), replace it by foo/built-in.a and
62- # foo/modules.order
63- # - If we encounter foo/ in $(obj-m), replace it by foo/modules.order
64- #
65- # Generate modules.order to determine modorder. Unfortunately, we don't have
66- # information about ordering between -y and -m subdirs. Just put -y's first.
67-
68- ifdef need-modorder
69- obj-m := $(patsubst %/,%/modules.order, $(filter %/, $(obj-y)) $(obj-m))
70- else
71- obj-m := $(filter-out %/, $(obj-m))
72- endif
73-
74- ifdef need-builtin
75- obj-y := $(patsubst %/, %/built-in.a, $(obj-y))
76- else
77- obj-y := $(filter-out %/, $(obj-y))
40+ # Do not include hostprogs rules unless needed.
41+ # $(sort ...) is used here to remove duplicated words and excessive spaces.
42+ hostprogs := $(sort $(hostprogs))
43+ ifneq ($(hostprogs),)
44+ include $(srctree)/scripts/Makefile.host
7845endif
7946
80- # Expand $(foo-objs) $(foo-y) etc. by replacing their individuals
81- suffix-search = $(strip $(foreach s, $3, $($(1:%$(strip $2)=%$s))))
82- # List composite targets that are constructed by combining other targets
83- multi-search = $(sort $(foreach m, $1, $(if $(call suffix-search, $m, $2, $3 -), $m)))
84- # List primitive targets that are compiled from source files
85- real-search = $(foreach m, $1, $(if $(call suffix-search, $m, $2, $3 -), $(call suffix-search, $m, $2, $3), $m))
86-
87- # If $(foo-objs), $(foo-y), $(foo-m), or $(foo-) exists, foo.o is a composite object
88- multi-obj-y := $(call multi-search, $(obj-y), .o, -objs -y)
89- multi-obj-m := $(call multi-search, $(obj-m), .o, -objs -y -m)
90- multi-obj-ym := $(multi-obj-y) $(multi-obj-m)
91-
92- # Replace multi-part objects by their individual parts,
93- # including built-in.a from subdirectories
94- real-obj-y := $(call real-search, $(obj-y), .o, -objs -y)
95- real-obj-m := $(call real-search, $(obj-m), .o, -objs -y -m)
96-
97- always-y += $(always-m)
98-
99- # hostprogs-always-y += foo
100- # ... is a shorthand for
101- # hostprogs += foo
102- # always-y += foo
103- hostprogs += $(hostprogs-always-y) $(hostprogs-always-m)
104- always-y += $(hostprogs-always-y) $(hostprogs-always-m)
105-
106- # userprogs-always-y is likewise.
107- userprogs += $(userprogs-always-y) $(userprogs-always-m)
108- always-y += $(userprogs-always-y) $(userprogs-always-m)
109-
110- # Add subdir path
111-
112- ifneq ($(obj),.)
113- extra-y := $(addprefix $(obj)/, $(extra-y))
114- always-y := $(addprefix $(obj)/, $(always-y))
115- targets := $(addprefix $(obj)/, $(targets))
116- obj-m := $(addprefix $(obj)/, $(obj-m))
117- lib-y := $(addprefix $(obj)/, $(lib-y))
118- real-obj-y := $(addprefix $(obj)/, $(real-obj-y))
119- real-obj-m := $(addprefix $(obj)/, $(real-obj-m))
120- multi-obj-m := $(addprefix $(obj)/, $(multi-obj-m))
121- subdir-ym := $(addprefix $(obj)/, $(subdir-ym))
47+ # Do not include userprogs rules unless needed.
48+ # $(sort ...) is used here to remove duplicated words and excessive spaces.
49+ userprogs := $(sort $(userprogs))
50+ ifneq ($(userprogs),)
51+ include $(srctree)/scripts/Makefile.userprogs
12252endif
12353
12454ifndef obj
13767# subdir-builtin and subdir-modorder may contain duplications. Use $(sort ...)
13868subdir-builtin := $(sort $(filter %/built-in.a, $(real-obj-y)))
13969subdir-modorder := $(sort $(filter %/modules.order, $(obj-m)))
70+ subdir-dtbslist := $(sort $(filter %/dtbs-list, $(dtb-y)))
14071
14172targets-for-builtin := $(extra-y)
14273
@@ -167,7 +98,7 @@ else ifeq ($(KBUILD_CHECKSRC),2)
16798endif
16899
169100ifneq ($(KBUILD_EXTRA_WARN),)
170- cmd_checkdoc = PYTHONDONTWRITEBYTECODE=1 $(KERNELDOC) -none $(KDOCFLAGS) \
101+ cmd_checkdoc = $(srctree)/scripts/kernel-doc -none $(KDOCFLAGS) \
171102 $(if $(findstring 2, $(KBUILD_EXTRA_WARN)), -Wall) \
172103 $<
173104endif
@@ -306,15 +237,6 @@ $(obj)/%.lst: $(obj)/%.c FORCE
306237# Compile Rust sources (.rs)
307238# ---------------------------------------------------------------------------
308239
309- # The features in this list are the ones allowed for non-`rust/` code.
310- #
311- # - Stable since Rust 1.81.0: `feature(lint_reasons)`.
312- # - Stable since Rust 1.82.0: `feature(asm_const)`, `feature(raw_ref_op)`.
313- # - Stable since Rust 1.87.0: `feature(asm_goto)`.
314- # - Expected to become stable: `feature(arbitrary_self_types)`.
315- #
316- # Please see https://github.com/Rust-for-Linux/linux/issues/2 for details on
317- # the unstable features in use.
318240rust_allowed_features := asm_const,asm_goto,arbitrary_self_types,lint_reasons,raw_ref_op
319241
320242# `--out-dir` is required to avoid temporaries being created by `rustc` in the
@@ -341,15 +263,10 @@ rust_common_cmd = \
341263# would not match each other.
342264
343265quiet_cmd_rustc_o_rs = $(RUSTC_OR_CLIPPY_QUIET) $(quiet_modtag) $@
344- cmd_rustc_o_rs = $(rust_common_cmd) --emit=obj=$@ $< $(cmd_objtool)
345-
346- define rule_rustc_o_rs
347- $(call cmd_and_fixdep,rustc_o_rs)
348- $(call cmd,gen_objtooldep)
349- endef
266+ cmd_rustc_o_rs = $(rust_common_cmd) --emit=obj=$@ $<
350267
351268$(obj)/%.o: $(obj)/%.rs FORCE
352- +$(call if_changed_rule ,rustc_o_rs)
269+ +$(call if_changed_dep ,rustc_o_rs)
353270
354271quiet_cmd_rustc_rsi_rs = $(RUSTC_OR_CLIPPY_QUIET) $(quiet_modtag) $@
355272 cmd_rustc_rsi_rs = \
@@ -429,7 +346,7 @@ $(obj)/%.o: $(obj)/%.S FORCE
429346
430347targets += $(filter-out $(subdir-builtin), $(real-obj-y))
431348targets += $(filter-out $(subdir-modorder), $(real-obj-m))
432- targets += $(lib-y) $(always-y)
349+ targets += $(real-dtb-y) $( lib-y) $(always-y)
433350
434351# Linker scripts preprocessor (.lds.S -> .lds)
435352# ---------------------------------------------------------------------------
@@ -455,6 +372,7 @@ $(obj)/%.asn1.c $(obj)/%.asn1.h: $(src)/%.asn1 $(objtree)/scripts/asn1_compiler
455372# To build objects in subdirs, we need to descend into the directories
456373$(subdir-builtin): $(obj)/%/built-in.a: $(obj)/% ;
457374$(subdir-modorder): $(obj)/%/modules.order: $(obj)/% ;
375+ $(subdir-dtbslist): $(obj)/%/dtbs-list: $(obj)/% ;
458376
459377#
460378# Rule to compile a set of .o files into one .a file (without symbol table)
@@ -470,8 +388,12 @@ quiet_cmd_ar_builtin = AR $@
470388$(obj)/built-in.a: $(real-obj-y) FORCE
471389 $(call if_changed,ar_builtin)
472390
473- # This is a list of build artifacts from the current Makefile and its
474- # sub-directories. The timestamp should be updated when any of the member files.
391+ #
392+ # Rule to create modules.order and dtbs-list
393+ #
394+ # This is a list of build artifacts (module or dtb) from the current Makefile
395+ # and its sub-directories. The timestamp should be updated when any of the
396+ # member files.
475397
476398cmd_gen_order = { $(foreach m, $(real-prereqs), \
477399 $(if $(filter %/$(notdir $@), $m), cat $m, echo $m);) :; } \
@@ -480,6 +402,9 @@ cmd_gen_order = { $(foreach m, $(real-prereqs), \
480402$(obj)/modules.order: $(obj-m) FORCE
481403 $(call if_changed,gen_order)
482404
405+ $(obj)/dtbs-list: $(dtb-y) $(dtbo-y) FORCE
406+ $(call if_changed,gen_order)
407+
483408#
484409# Rule to compile a set of .o files into one .a file (with symbol table)
485410#
@@ -508,26 +433,15 @@ intermediate_targets = $(foreach sfx, $(2), \
508433 $(patsubst %$(strip $(1)),%$(sfx), \
509434 $(filter %$(strip $(1)), $(targets))))
510435# %.asn1.o <- %.asn1.[ch] <- %.asn1
511- targets += $(call intermediate_targets, .asn1.o, .asn1.c .asn1.h)
512-
513- # Include additional build rules when necessary
514- # ---------------------------------------------------------------------------
515-
516- # $(sort ...) is used here to remove duplicated words and excessive spaces.
517- hostprogs := $(sort $(hostprogs))
518- ifneq ($(hostprogs),)
519- include $(srctree)/scripts/Makefile.host
520- endif
521-
522- # $(sort ...) is used here to remove duplicated words and excessive spaces.
523- userprogs := $(sort $(userprogs))
524- ifneq ($(userprogs),)
525- include $(srctree)/scripts/Makefile.userprogs
526- endif
527-
528- ifneq ($(need-dtbslist)$(dtb-y)$(dtb-)$(filter %.dtb %.dtb.o %.dtbo.o,$(targets)),)
529- include $(srctree)/scripts/Makefile.dtbs
530- endif
436+ # %.dtb.o <- %.dtb.S <- %.dtb <- %.dts
437+ # %.dtbo.o <- %.dtbo.S <- %.dtbo <- %.dtso
438+ # %.lex.o <- %.lex.c <- %.l
439+ # %.tab.o <- %.tab.[ch] <- %.y
440+ targets += $(call intermediate_targets, .asn1.o, .asn1.c .asn1.h) \
441+ $(call intermediate_targets, .dtb.o, .dtb.S .dtb) \
442+ $(call intermediate_targets, .dtbo.o, .dtbo.S .dtbo) \
443+ $(call intermediate_targets, .lex.o, .lex.c) \
444+ $(call intermediate_targets, .tab.o, .tab.c .tab.h)
531445
532446# Build
533447# ---------------------------------------------------------------------------
0 commit comments