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 $(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
	
	 Masahiro Yamada
						Masahiro Yamada