@@ -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
@@ -429,7 +360,7 @@ $(obj)/%.o: $(obj)/%.S FORCE
429360
430361targets += $(filter-out $(subdir-builtin), $(real-obj-y))
431362targets += $(filter-out $(subdir-modorder), $(real-obj-m))
432- targets += $(lib-y) $(always-y)
363+ targets += $(real-dtb-y) $( lib-y) $(always-y)
433364
434365# Linker scripts preprocessor (.lds.S -> .lds)
435366# ---------------------------------------------------------------------------
@@ -455,6 +386,7 @@ $(obj)/%.asn1.c $(obj)/%.asn1.h: $(src)/%.asn1 $(objtree)/scripts/asn1_compiler
455386# To build objects in subdirs, we need to descend into the directories
456387$(subdir-builtin): $(obj)/%/built-in.a: $(obj)/% ;
457388$(subdir-modorder): $(obj)/%/modules.order: $(obj)/% ;
389+ $(subdir-dtbslist): $(obj)/%/dtbs-list: $(obj)/% ;
458390
459391#
460392# Rule to compile a set of .o files into one .a file (without symbol table)
@@ -480,6 +412,9 @@ cmd_gen_order = { $(foreach m, $(real-prereqs), \
480412$(obj)/modules.order: $(obj-m) FORCE
481413 $(call if_changed,gen_order)
482414
415+ $(obj)/dtbs-list: $(dtb-y) $(dtbo-y) FORCE
416+ $(call if_changed,gen_order)
417+
483418#
484419# Rule to compile a set of .o files into one .a file (with symbol table)
485420#
@@ -508,26 +443,15 @@ intermediate_targets = $(foreach sfx, $(2), \
508443 $(patsubst %$(strip $(1)),%$(sfx), \
509444 $(filter %$(strip $(1)), $(targets))))
510445# %.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
446+ # %.dtb.o <- %.dtb.S <- %.dtb <- %.dts
447+ # %.dtbo.o <- %.dtbo.S <- %.dtbo <- %.dtso
448+ # %.lex.o <- %.lex.c <- %.l
449+ # %.tab.o <- %.tab.[ch] <- %.y
450+ targets += $(call intermediate_targets, .asn1.o, .asn1.c .asn1.h) \
451+ $(call intermediate_targets, .dtb.o, .dtb.S .dtb) \
452+ $(call intermediate_targets, .dtbo.o, .dtbo.S .dtbo) \
453+ $(call intermediate_targets, .lex.o, .lex.c) \
454+ $(call intermediate_targets, .tab.o, .tab.c .tab.h)
531455
532456# Build
533457# ---------------------------------------------------------------------------
0 commit comments