mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +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 $(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 | ||||
| $(warning kbuild: Makefile.build is included improperly) | ||||
| endif | ||||
|  |  | |||
|  | @ -1,89 +1,5 @@ | |||
| # 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. | ||||
| # If the object belongs to two or more multi-part objects, list them all. | ||||
| modname-multi = $(sort $(foreach m,$(multi-obj-ym),\ | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Masahiro Yamada
						Masahiro Yamada