@@ -37,88 +37,18 @@ include $(srctree)/scripts/Makefile.compiler
37
37
include $(kbuild-file)
38
38
include $(srctree)/scripts/Makefile.lib
39
39
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
78
45
endif
79
46
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
122
52
endif
123
53
124
54
ifndef obj
137
67
# subdir-builtin and subdir-modorder may contain duplications. Use $(sort ...)
138
68
subdir-builtin := $(sort $(filter %/built-in.a, $(real-obj-y)))
139
69
subdir-modorder := $(sort $(filter %/modules.order, $(obj-m)))
70
+ subdir-dtbslist := $(sort $(filter %/dtbs-list, $(dtb-y)))
140
71
141
72
targets-for-builtin := $(extra-y)
142
73
@@ -167,7 +98,7 @@ else ifeq ($(KBUILD_CHECKSRC),2)
167
98
endif
168
99
169
100
ifneq ($(KBUILD_EXTRA_WARN),)
170
- cmd_checkdoc = PYTHONDONTWRITEBYTECODE=1 $(KERNELDOC) -none $(KDOCFLAGS) \
101
+ cmd_checkdoc = $(srctree)/scripts/kernel-doc -none $(KDOCFLAGS) \
171
102
$(if $(findstring 2, $(KBUILD_EXTRA_WARN)), -Wall) \
172
103
$<
173
104
endif
@@ -306,15 +237,6 @@ $(obj)/%.lst: $(obj)/%.c FORCE
306
237
# Compile Rust sources (.rs)
307
238
# ---------------------------------------------------------------------------
308
239
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.
318
240
rust_allowed_features := asm_const,asm_goto,arbitrary_self_types,lint_reasons,raw_ref_op
319
241
320
242
# `--out-dir` is required to avoid temporaries being created by `rustc` in the
@@ -341,15 +263,10 @@ rust_common_cmd = \
341
263
# would not match each other.
342
264
343
265
quiet_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=$@ $<
350
267
351
268
$(obj)/%.o: $(obj)/%.rs FORCE
352
- +$(call if_changed_rule ,rustc_o_rs)
269
+ +$(call if_changed_dep ,rustc_o_rs)
353
270
354
271
quiet_cmd_rustc_rsi_rs = $(RUSTC_OR_CLIPPY_QUIET) $(quiet_modtag) $@
355
272
cmd_rustc_rsi_rs = \
@@ -429,7 +346,7 @@ $(obj)/%.o: $(obj)/%.S FORCE
429
346
430
347
targets += $(filter-out $(subdir-builtin), $(real-obj-y))
431
348
targets += $(filter-out $(subdir-modorder), $(real-obj-m))
432
- targets += $(lib-y) $(always-y)
349
+ targets += $(real-dtb-y) $( lib-y) $(always-y)
433
350
434
351
# Linker scripts preprocessor (.lds.S -> .lds)
435
352
# ---------------------------------------------------------------------------
@@ -455,6 +372,7 @@ $(obj)/%.asn1.c $(obj)/%.asn1.h: $(src)/%.asn1 $(objtree)/scripts/asn1_compiler
455
372
# To build objects in subdirs, we need to descend into the directories
456
373
$(subdir-builtin): $(obj)/%/built-in.a: $(obj)/% ;
457
374
$(subdir-modorder): $(obj)/%/modules.order: $(obj)/% ;
375
+ $(subdir-dtbslist): $(obj)/%/dtbs-list: $(obj)/% ;
458
376
459
377
#
460
378
# Rule to compile a set of .o files into one .a file (without symbol table)
@@ -470,8 +388,12 @@ quiet_cmd_ar_builtin = AR $@
470
388
$(obj)/built-in.a: $(real-obj-y) FORCE
471
389
$(call if_changed,ar_builtin)
472
390
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.
475
397
476
398
cmd_gen_order = { $(foreach m, $(real-prereqs), \
477
399
$(if $(filter %/$(notdir $@), $m), cat $m, echo $m);) :; } \
@@ -480,6 +402,9 @@ cmd_gen_order = { $(foreach m, $(real-prereqs), \
480
402
$(obj)/modules.order: $(obj-m) FORCE
481
403
$(call if_changed,gen_order)
482
404
405
+ $(obj)/dtbs-list: $(dtb-y) $(dtbo-y) FORCE
406
+ $(call if_changed,gen_order)
407
+
483
408
#
484
409
# Rule to compile a set of .o files into one .a file (with symbol table)
485
410
#
@@ -508,26 +433,15 @@ intermediate_targets = $(foreach sfx, $(2), \
508
433
$(patsubst %$(strip $(1)),%$(sfx), \
509
434
$(filter %$(strip $(1)), $(targets))))
510
435
# %.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)
531
445
532
446
# Build
533
447
# ---------------------------------------------------------------------------
0 commit comments