mirror of
https://github.com/torvalds/linux.git
synced 2025-11-01 09:09:47 +02:00
kbuild: move kbuild syntax processing to scripts/Makefile.build
scripts/Makefile.lib is included by the following Makefiles: scripts/Makefile.build scripts/Makefile.modfinal scripts/Makefile.package scripts/Makefile.vmlinux scripts/Makefile.vmlinux_o However, the last four do not need to process Kbuild syntax such as obj-*, lib-*, subdir-*, etc. Move the relevant code to scripts/Makefile.build. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> Reviewed-by: Nicolas Schier <nicolas.schier@linux.dev>
This commit is contained in:
parent
2adde2eb16
commit
8f81d8529e
2 changed files with 84 additions and 84 deletions
|
|
@ -37,6 +37,90 @@ include $(srctree)/scripts/Makefile.compiler
|
||||||
include $(kbuild-file)
|
include $(kbuild-file)
|
||||||
include $(srctree)/scripts/Makefile.lib
|
include $(srctree)/scripts/Makefile.lib
|
||||||
|
|
||||||
|
# flags that take effect in current and sub directories
|
||||||
|
KBUILD_AFLAGS += $(subdir-asflags-y)
|
||||||
|
KBUILD_CFLAGS += $(subdir-ccflags-y)
|
||||||
|
KBUILD_RUSTFLAGS += $(subdir-rustflags-y)
|
||||||
|
|
||||||
|
# Figure out what we need to build from the various variables
|
||||||
|
# ===========================================================================
|
||||||
|
|
||||||
|
# When an object is listed to be built compiled-in and modular,
|
||||||
|
# only build the compiled-in version
|
||||||
|
obj-m := $(filter-out $(obj-y),$(obj-m))
|
||||||
|
|
||||||
|
# Libraries are always collected in one lib file.
|
||||||
|
# Filter out objects already built-in
|
||||||
|
lib-y := $(filter-out $(obj-y), $(sort $(lib-y) $(lib-m)))
|
||||||
|
|
||||||
|
# Subdirectories we need to descend into
|
||||||
|
subdir-ym := $(sort $(subdir-y) $(subdir-m) \
|
||||||
|
$(patsubst %/,%, $(filter %/, $(obj-y) $(obj-m))))
|
||||||
|
|
||||||
|
# Handle objects in subdirs:
|
||||||
|
# - If we encounter foo/ in $(obj-y), replace it by foo/built-in.a and
|
||||||
|
# foo/modules.order
|
||||||
|
# - If we encounter foo/ in $(obj-m), replace it by foo/modules.order
|
||||||
|
#
|
||||||
|
# Generate modules.order to determine modorder. Unfortunately, we don't have
|
||||||
|
# information about ordering between -y and -m subdirs. Just put -y's first.
|
||||||
|
|
||||||
|
ifdef need-modorder
|
||||||
|
obj-m := $(patsubst %/,%/modules.order, $(filter %/, $(obj-y)) $(obj-m))
|
||||||
|
else
|
||||||
|
obj-m := $(filter-out %/, $(obj-m))
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef need-builtin
|
||||||
|
obj-y := $(patsubst %/, %/built-in.a, $(obj-y))
|
||||||
|
else
|
||||||
|
obj-y := $(filter-out %/, $(obj-y))
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Expand $(foo-objs) $(foo-y) etc. by replacing their individuals
|
||||||
|
suffix-search = $(strip $(foreach s, $3, $($(1:%$(strip $2)=%$s))))
|
||||||
|
# List composite targets that are constructed by combining other targets
|
||||||
|
multi-search = $(sort $(foreach m, $1, $(if $(call suffix-search, $m, $2, $3 -), $m)))
|
||||||
|
# List primitive targets that are compiled from source files
|
||||||
|
real-search = $(foreach m, $1, $(if $(call suffix-search, $m, $2, $3 -), $(call suffix-search, $m, $2, $3), $m))
|
||||||
|
|
||||||
|
# If $(foo-objs), $(foo-y), $(foo-m), or $(foo-) exists, foo.o is a composite object
|
||||||
|
multi-obj-y := $(call multi-search, $(obj-y), .o, -objs -y)
|
||||||
|
multi-obj-m := $(call multi-search, $(obj-m), .o, -objs -y -m)
|
||||||
|
multi-obj-ym := $(multi-obj-y) $(multi-obj-m)
|
||||||
|
|
||||||
|
# Replace multi-part objects by their individual parts,
|
||||||
|
# including built-in.a from subdirectories
|
||||||
|
real-obj-y := $(call real-search, $(obj-y), .o, -objs -y)
|
||||||
|
real-obj-m := $(call real-search, $(obj-m), .o, -objs -y -m)
|
||||||
|
|
||||||
|
always-y += $(always-m)
|
||||||
|
|
||||||
|
# hostprogs-always-y += foo
|
||||||
|
# ... is a shorthand for
|
||||||
|
# hostprogs += foo
|
||||||
|
# always-y += foo
|
||||||
|
hostprogs += $(hostprogs-always-y) $(hostprogs-always-m)
|
||||||
|
always-y += $(hostprogs-always-y) $(hostprogs-always-m)
|
||||||
|
|
||||||
|
# userprogs-always-y is likewise.
|
||||||
|
userprogs += $(userprogs-always-y) $(userprogs-always-m)
|
||||||
|
always-y += $(userprogs-always-y) $(userprogs-always-m)
|
||||||
|
|
||||||
|
# Add subdir path
|
||||||
|
|
||||||
|
ifneq ($(obj),.)
|
||||||
|
extra-y := $(addprefix $(obj)/, $(extra-y))
|
||||||
|
always-y := $(addprefix $(obj)/, $(always-y))
|
||||||
|
targets := $(addprefix $(obj)/, $(targets))
|
||||||
|
obj-m := $(addprefix $(obj)/, $(obj-m))
|
||||||
|
lib-y := $(addprefix $(obj)/, $(lib-y))
|
||||||
|
real-obj-y := $(addprefix $(obj)/, $(real-obj-y))
|
||||||
|
real-obj-m := $(addprefix $(obj)/, $(real-obj-m))
|
||||||
|
multi-obj-m := $(addprefix $(obj)/, $(multi-obj-m))
|
||||||
|
subdir-ym := $(addprefix $(obj)/, $(subdir-ym))
|
||||||
|
endif
|
||||||
|
|
||||||
ifndef obj
|
ifndef obj
|
||||||
$(warning kbuild: Makefile.build is included improperly)
|
$(warning kbuild: Makefile.build is included improperly)
|
||||||
endif
|
endif
|
||||||
|
|
|
||||||
|
|
@ -1,89 +1,5 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
# flags that take effect in current and sub directories
|
|
||||||
KBUILD_AFLAGS += $(subdir-asflags-y)
|
|
||||||
KBUILD_CFLAGS += $(subdir-ccflags-y)
|
|
||||||
KBUILD_RUSTFLAGS += $(subdir-rustflags-y)
|
|
||||||
|
|
||||||
# Figure out what we need to build from the various variables
|
|
||||||
# ===========================================================================
|
|
||||||
|
|
||||||
# When an object is listed to be built compiled-in and modular,
|
|
||||||
# only build the compiled-in version
|
|
||||||
obj-m := $(filter-out $(obj-y),$(obj-m))
|
|
||||||
|
|
||||||
# Libraries are always collected in one lib file.
|
|
||||||
# Filter out objects already built-in
|
|
||||||
lib-y := $(filter-out $(obj-y), $(sort $(lib-y) $(lib-m)))
|
|
||||||
|
|
||||||
# Subdirectories we need to descend into
|
|
||||||
subdir-ym := $(sort $(subdir-y) $(subdir-m) \
|
|
||||||
$(patsubst %/,%, $(filter %/, $(obj-y) $(obj-m))))
|
|
||||||
|
|
||||||
# Handle objects in subdirs:
|
|
||||||
# - If we encounter foo/ in $(obj-y), replace it by foo/built-in.a and
|
|
||||||
# foo/modules.order
|
|
||||||
# - If we encounter foo/ in $(obj-m), replace it by foo/modules.order
|
|
||||||
#
|
|
||||||
# Generate modules.order to determine modorder. Unfortunately, we don't have
|
|
||||||
# information about ordering between -y and -m subdirs. Just put -y's first.
|
|
||||||
|
|
||||||
ifdef need-modorder
|
|
||||||
obj-m := $(patsubst %/,%/modules.order, $(filter %/, $(obj-y)) $(obj-m))
|
|
||||||
else
|
|
||||||
obj-m := $(filter-out %/, $(obj-m))
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef need-builtin
|
|
||||||
obj-y := $(patsubst %/, %/built-in.a, $(obj-y))
|
|
||||||
else
|
|
||||||
obj-y := $(filter-out %/, $(obj-y))
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Expand $(foo-objs) $(foo-y) etc. by replacing their individuals
|
|
||||||
suffix-search = $(strip $(foreach s, $3, $($(1:%$(strip $2)=%$s))))
|
|
||||||
# List composite targets that are constructed by combining other targets
|
|
||||||
multi-search = $(sort $(foreach m, $1, $(if $(call suffix-search, $m, $2, $3 -), $m)))
|
|
||||||
# List primitive targets that are compiled from source files
|
|
||||||
real-search = $(foreach m, $1, $(if $(call suffix-search, $m, $2, $3 -), $(call suffix-search, $m, $2, $3), $m))
|
|
||||||
|
|
||||||
# If $(foo-objs), $(foo-y), $(foo-m), or $(foo-) exists, foo.o is a composite object
|
|
||||||
multi-obj-y := $(call multi-search, $(obj-y), .o, -objs -y)
|
|
||||||
multi-obj-m := $(call multi-search, $(obj-m), .o, -objs -y -m)
|
|
||||||
multi-obj-ym := $(multi-obj-y) $(multi-obj-m)
|
|
||||||
|
|
||||||
# Replace multi-part objects by their individual parts,
|
|
||||||
# including built-in.a from subdirectories
|
|
||||||
real-obj-y := $(call real-search, $(obj-y), .o, -objs -y)
|
|
||||||
real-obj-m := $(call real-search, $(obj-m), .o, -objs -y -m)
|
|
||||||
|
|
||||||
always-y += $(always-m)
|
|
||||||
|
|
||||||
# hostprogs-always-y += foo
|
|
||||||
# ... is a shorthand for
|
|
||||||
# hostprogs += foo
|
|
||||||
# always-y += foo
|
|
||||||
hostprogs += $(hostprogs-always-y) $(hostprogs-always-m)
|
|
||||||
always-y += $(hostprogs-always-y) $(hostprogs-always-m)
|
|
||||||
|
|
||||||
# userprogs-always-y is likewise.
|
|
||||||
userprogs += $(userprogs-always-y) $(userprogs-always-m)
|
|
||||||
always-y += $(userprogs-always-y) $(userprogs-always-m)
|
|
||||||
|
|
||||||
# Add subdir path
|
|
||||||
|
|
||||||
ifneq ($(obj),.)
|
|
||||||
extra-y := $(addprefix $(obj)/,$(extra-y))
|
|
||||||
always-y := $(addprefix $(obj)/,$(always-y))
|
|
||||||
targets := $(addprefix $(obj)/,$(targets))
|
|
||||||
obj-m := $(addprefix $(obj)/,$(obj-m))
|
|
||||||
lib-y := $(addprefix $(obj)/,$(lib-y))
|
|
||||||
real-obj-y := $(addprefix $(obj)/,$(real-obj-y))
|
|
||||||
real-obj-m := $(addprefix $(obj)/,$(real-obj-m))
|
|
||||||
multi-obj-m := $(addprefix $(obj)/, $(multi-obj-m))
|
|
||||||
subdir-ym := $(addprefix $(obj)/,$(subdir-ym))
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Finds the multi-part object the current object will be linked into.
|
# Finds the multi-part object the current object will be linked into.
|
||||||
# If the object belongs to two or more multi-part objects, list them all.
|
# If the object belongs to two or more multi-part objects, list them all.
|
||||||
modname-multi = $(sort $(foreach m,$(multi-obj-ym),\
|
modname-multi = $(sort $(foreach m,$(multi-obj-ym),\
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue