mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	kbuild: change *FLAGS_<basetarget>.o to take the path relative to $(obj)
Kbuild provides per-file compiler flag addition/removal:
  CFLAGS_<basetarget>.o
  CFLAGS_REMOVE_<basetarget>.o
  AFLAGS_<basetarget>.o
  AFLAGS_REMOVE_<basetarget>.o
  CPPFLAGS_<basetarget>.lds
  HOSTCFLAGS_<basetarget>.o
  HOSTCXXFLAGS_<basetarget>.o
The <basetarget> is the filename of the target with its directory and
suffix stripped.
This syntax comes into a trouble when two files with the same basename
appear in one Makefile, for example:
  obj-y += foo.o
  obj-y += dir/foo.o
  CFLAGS_foo.o := <some-flags>
Here, the <some-flags> applies to both foo.o and dir/foo.o
The real world problem is:
  scripts/kconfig/util.c
  scripts/kconfig/lxdialog/util.c
Both files are compiled into scripts/kconfig/mconf, but only the
latter should be given with the ncurses flags.
It is more sensible to use the relative path to the Makefile, like this:
  obj-y += foo.o
  CFLAGS_foo.o := <some-flags>
  obj-y += dir/foo.o
  CFLAGS_dir/foo.o := <other-flags>
At first, I attempted to replace $(basetarget) with $*. The $* variable
is replaced with the stem ('%') part in a pattern rule. This works with
most of cases, but does not for explicit rules.
For example, arch/ia64/lib/Makefile reuses rule_as_o_S in its own
explicit rules, so $* will be empty, resulting in ignoring the per-file
AFLAGS.
I introduced a new variable, target-stem, which can be used also from
explicit rules.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Acked-by: Marc Zyngier <maz@kernel.org>
			
			
This commit is contained in:
		
							parent
							
								
									6f02bdfc99
								
							
						
					
					
						commit
						54b8ae66ae
					
				
					 10 changed files with 43 additions and 42 deletions
				
			
		|  | @ -8,13 +8,14 @@ ifeq ($(plus_virt),+virt) | |||
| 	plus_virt_def := -DREQUIRES_VIRT=1 | ||||
| endif | ||||
| 
 | ||||
| KVM := ../../../virt/kvm | ||||
| 
 | ||||
| ccflags-y += -I $(srctree)/$(src) -I $(srctree)/virt/kvm/arm/vgic | ||||
| CFLAGS_arm.o := $(plus_virt_def) | ||||
| CFLAGS_$(KVM)/arm/arm.o := $(plus_virt_def) | ||||
| 
 | ||||
| AFLAGS_init.o := -Wa,-march=armv7-a$(plus_virt) | ||||
| AFLAGS_interrupts.o := -Wa,-march=armv7-a$(plus_virt) | ||||
| 
 | ||||
| KVM := ../../../virt/kvm | ||||
| kvm-arm-y = $(KVM)/kvm_main.o $(KVM)/coalesced_mmio.o $(KVM)/eventfd.o $(KVM)/vfio.o | ||||
| 
 | ||||
| obj-$(CONFIG_KVM_ARM_HOST) += hyp/ | ||||
|  |  | |||
|  | @ -89,6 +89,7 @@ $(vobjs): KBUILD_CFLAGS := $(filter-out $(GCC_PLUGINS_CFLAGS) $(RETPOLINE_CFLAGS | |||
| #
 | ||||
| CFLAGS_REMOVE_vdso-note.o = -pg | ||||
| CFLAGS_REMOVE_vclock_gettime.o = -pg | ||||
| CFLAGS_REMOVE_vdso32/vclock_gettime.o = -pg | ||||
| CFLAGS_REMOVE_vgetcpu.o = -pg | ||||
| CFLAGS_REMOVE_vvar.o = -pg | ||||
| 
 | ||||
|  | @ -128,7 +129,7 @@ $(obj)/%.so: $(obj)/%.so.dbg FORCE | |||
| $(obj)/vdsox32.so.dbg: $(obj)/vdsox32.lds $(vobjx32s) FORCE | ||||
| 	$(call if_changed,vdso_and_check) | ||||
| 
 | ||||
| CPPFLAGS_vdso32.lds = $(CPPFLAGS_vdso.lds) | ||||
| CPPFLAGS_vdso32/vdso32.lds = $(CPPFLAGS_vdso.lds) | ||||
| VDSO_LDFLAGS_vdso32.lds = -m elf_i386 -soname linux-gate.so.1 | ||||
| 
 | ||||
| targets += vdso32/vdso32.lds | ||||
|  |  | |||
|  | @ -32,9 +32,9 @@ endif | |||
| 
 | ||||
| calcs_ccflags := -mhard-float -msse $(cc_stack_align) | ||||
| 
 | ||||
| CFLAGS_dcn_calcs.o := $(calcs_ccflags) | ||||
| CFLAGS_dcn_calc_auto.o := $(calcs_ccflags) | ||||
| CFLAGS_dcn_calc_math.o := $(calcs_ccflags) -Wno-tautological-compare | ||||
| CFLAGS_$(AMDDALPATH)/dc/calcs/dcn_calcs.o := $(calcs_ccflags) | ||||
| CFLAGS_$(AMDDALPATH)/dc/calcs/dcn_calc_auto.o := $(calcs_ccflags) | ||||
| CFLAGS_$(AMDDALPATH)/dc/calcs/dcn_calc_math.o := $(calcs_ccflags) -Wno-tautological-compare | ||||
| 
 | ||||
| BW_CALCS = dce_calcs.o bw_fixed.o custom_float.o | ||||
| 
 | ||||
|  |  | |||
|  | @ -16,7 +16,7 @@ else ifneq ($(call cc-option, -mstack-alignment=16),) | |||
| 	cc_stack_align := -mstack-alignment=16 | ||||
| endif | ||||
| 
 | ||||
| CFLAGS_dcn20_resource.o := -mhard-float -msse $(cc_stack_align) | ||||
| CFLAGS_$(AMDDALPATH)/dc/dcn20/dcn20_resource.o := -mhard-float -msse $(cc_stack_align) | ||||
| 
 | ||||
| AMD_DAL_DCN20 = $(addprefix $(AMDDALPATH)/dc/dcn20/,$(DCN20)) | ||||
| 
 | ||||
|  |  | |||
|  | @ -32,19 +32,16 @@ endif | |||
| 
 | ||||
| dml_ccflags := -mhard-float -msse $(cc_stack_align) | ||||
| 
 | ||||
| CFLAGS_display_mode_lib.o := $(dml_ccflags) | ||||
| CFLAGS_$(AMDDALPATH)/dc/dml/display_mode_lib.o := $(dml_ccflags) | ||||
| 
 | ||||
| ifdef CONFIG_DRM_AMD_DC_DCN2_0 | ||||
| CFLAGS_display_mode_vba.o := $(dml_ccflags) | ||||
| CFLAGS_display_mode_vba_20.o := $(dml_ccflags) | ||||
| CFLAGS_display_rq_dlg_calc_20.o := $(dml_ccflags) | ||||
| CFLAGS_$(AMDDALPATH)/dc/dml/display_mode_vba.o := $(dml_ccflags) | ||||
| CFLAGS_$(AMDDALPATH)/dc/dml/dcn20/display_mode_vba_20.o := $(dml_ccflags) | ||||
| CFLAGS_$(AMDDALPATH)/dc/dml/dcn20/display_rq_dlg_calc_20.o := $(dml_ccflags) | ||||
| endif | ||||
| ifdef CONFIG_DRM_AMD_DCN3AG | ||||
| CFLAGS_display_mode_vba_3ag.o := $(dml_ccflags) | ||||
| endif | ||||
| CFLAGS_dml1_display_rq_dlg_calc.o := $(dml_ccflags) | ||||
| CFLAGS_display_rq_dlg_helpers.o := $(dml_ccflags) | ||||
| CFLAGS_dml_common_defs.o := $(dml_ccflags) | ||||
| CFLAGS_$(AMDDALPATH)/dc/dml/dml1_display_rq_dlg_calc.o := $(dml_ccflags) | ||||
| CFLAGS_$(AMDDALPATH)/dc/dml/display_rq_dlg_helpers.o := $(dml_ccflags) | ||||
| CFLAGS_$(AMDDALPATH)/dc/dml/dml_common_defs.o := $(dml_ccflags) | ||||
| 
 | ||||
| DML = display_mode_lib.o display_rq_dlg_helpers.o dml1_display_rq_dlg_calc.o \
 | ||||
| 	dml_common_defs.o | ||||
|  |  | |||
|  | @ -9,10 +9,9 @@ endif | |||
| 
 | ||||
| dsc_ccflags := -mhard-float -msse $(cc_stack_align) | ||||
| 
 | ||||
| CFLAGS_rc_calc.o := $(dsc_ccflags) | ||||
| CFLAGS_rc_calc_dpi.o := $(dsc_ccflags) | ||||
| CFLAGS_codec_main_amd.o := $(dsc_ccflags) | ||||
| CFLAGS_dc_dsc.o := $(dsc_ccflags) | ||||
| CFLAGS_$(AMDDALPATH)/dc/dsc/rc_calc.o := $(dsc_ccflags) | ||||
| CFLAGS_$(AMDDALPATH)/dc/dsc/rc_calc_dpi.o := $(dsc_ccflags) | ||||
| CFLAGS_$(AMDDALPATH)/dc/dsc/dc_dsc.o := $(dsc_ccflags) | ||||
| 
 | ||||
| DSC = dc_dsc.o rc_calc.o rc_calc_dpi.o | ||||
| 
 | ||||
|  |  | |||
|  | @ -26,7 +26,7 @@ subdir-ccflags-$(CONFIG_DRM_I915_WERROR) += -Werror | |||
| 
 | ||||
| # Fine grained warnings disable
 | ||||
| CFLAGS_i915_pci.o = $(call cc-disable-warning, override-init) | ||||
| CFLAGS_intel_fbdev.o = $(call cc-disable-warning, override-init) | ||||
| CFLAGS_display/intel_fbdev.o = $(call cc-disable-warning, override-init) | ||||
| 
 | ||||
| subdir-ccflags-y += \
 | ||||
| 	$(call as-instr,movntdqa (%eax)$(comma)%xmm0,-DCONFIG_AS_MOVNTDQA) | ||||
|  |  | |||
|  | @ -80,9 +80,9 @@ host-cxxshobjs	:= $(addprefix $(obj)/,$(host-cxxshobjs)) | |||
| # Handle options to gcc. Support building with separate output directory | ||||
| 
 | ||||
| _hostc_flags   = $(KBUILD_HOSTCFLAGS)   $(HOST_EXTRACFLAGS)   \ | ||||
|                  $(HOSTCFLAGS_$(basetarget).o) | ||||
|                  $(HOSTCFLAGS_$(target-stem).o) | ||||
| _hostcxx_flags = $(KBUILD_HOSTCXXFLAGS) $(HOST_EXTRACXXFLAGS) \ | ||||
|                  $(HOSTCXXFLAGS_$(basetarget).o) | ||||
|                  $(HOSTCXXFLAGS_$(target-stem).o) | ||||
| 
 | ||||
| # $(objtree)/$(obj) for including generated headers from checkin source files | ||||
| ifeq ($(KBUILD_EXTMOD),) | ||||
|  | @ -102,7 +102,7 @@ hostcxx_flags  = -Wp,-MD,$(depfile) $(_hostcxx_flags) | |||
| # host-csingle -> Executable | ||||
| quiet_cmd_host-csingle 	= HOSTCC  $@ | ||||
|       cmd_host-csingle	= $(HOSTCC) $(hostc_flags) $(KBUILD_HOSTLDFLAGS) -o $@ $< \ | ||||
| 		$(KBUILD_HOSTLDLIBS) $(HOSTLDLIBS_$(@F)) | ||||
| 		$(KBUILD_HOSTLDLIBS) $(HOSTLDLIBS_$(target-stem)) | ||||
| $(host-csingle): $(obj)/%: $(src)/%.c FORCE | ||||
| 	$(call if_changed_dep,host-csingle) | ||||
| 
 | ||||
|  | @ -110,8 +110,8 @@ $(host-csingle): $(obj)/%: $(src)/%.c FORCE | |||
| # host-cmulti -> executable | ||||
| quiet_cmd_host-cmulti	= HOSTLD  $@ | ||||
|       cmd_host-cmulti	= $(HOSTCC) $(KBUILD_HOSTLDFLAGS) -o $@ \ | ||||
| 			  $(addprefix $(obj)/,$($(@F)-objs)) \ | ||||
| 			  $(KBUILD_HOSTLDLIBS) $(HOSTLDLIBS_$(@F)) | ||||
| 			  $(addprefix $(obj)/, $($(target-stem)-objs)) \ | ||||
| 			  $(KBUILD_HOSTLDLIBS) $(HOSTLDLIBS_$(target-stem)) | ||||
| $(host-cmulti): FORCE | ||||
| 	$(call if_changed,host-cmulti) | ||||
| $(call multi_depend, $(host-cmulti), , -objs) | ||||
|  | @ -128,8 +128,8 @@ $(host-cobjs): $(obj)/%.o: $(src)/%.c FORCE | |||
| quiet_cmd_host-cxxmulti	= HOSTLD  $@ | ||||
|       cmd_host-cxxmulti	= $(HOSTCXX) $(KBUILD_HOSTLDFLAGS) -o $@ \ | ||||
| 			  $(foreach o,objs cxxobjs,\ | ||||
| 			  $(addprefix $(obj)/,$($(@F)-$(o)))) \ | ||||
| 			  $(KBUILD_HOSTLDLIBS) $(HOSTLDLIBS_$(@F)) | ||||
| 			  $(addprefix $(obj)/, $($(target-stem)-$(o)))) \ | ||||
| 			  $(KBUILD_HOSTLDLIBS) $(HOSTLDLIBS_$(target-stem)) | ||||
| $(host-cxxmulti): FORCE | ||||
| 	$(call if_changed,host-cxxmulti) | ||||
| $(call multi_depend, $(host-cxxmulti), , -objs -cxxobjs) | ||||
|  | @ -161,8 +161,8 @@ $(host-cxxshobjs): $(obj)/%.o: $(src)/%.c FORCE | |||
| # *.o -> .so shared library (host-cshlib) | ||||
| quiet_cmd_host-cshlib	= HOSTLLD -shared $@ | ||||
|       cmd_host-cshlib	= $(HOSTCC) $(KBUILD_HOSTLDFLAGS) -shared -o $@ \ | ||||
| 			  $(addprefix $(obj)/,$($(@F:.so=-objs))) \ | ||||
| 			  $(KBUILD_HOSTLDLIBS) $(HOSTLDLIBS_$(@F)) | ||||
| 			  $(addprefix $(obj)/, $($(target-stem)-objs)) \ | ||||
| 			  $(KBUILD_HOSTLDLIBS) $(HOSTLDLIBS_$(target-stem).so) | ||||
| $(host-cshlib): FORCE | ||||
| 	$(call if_changed,host-cshlib) | ||||
| $(call multi_depend, $(host-cshlib), .so, -objs) | ||||
|  | @ -171,8 +171,8 @@ $(call multi_depend, $(host-cshlib), .so, -objs) | |||
| # *.o -> .so shared library (host-cxxshlib) | ||||
| quiet_cmd_host-cxxshlib	= HOSTLLD -shared $@ | ||||
|       cmd_host-cxxshlib	= $(HOSTCXX) $(KBUILD_HOSTLDFLAGS) -shared -o $@ \ | ||||
| 			  $(addprefix $(obj)/,$($(@F:.so=-objs))) \ | ||||
| 			  $(KBUILD_HOSTLDLIBS) $(HOSTLDLIBS_$(@F)) | ||||
| 			  $(addprefix $(obj)/, $($(target-stem)-objs)) \ | ||||
| 			  $(KBUILD_HOSTLDLIBS) $(HOSTLDLIBS_$(target-stem).so) | ||||
| $(host-cxxshlib): FORCE | ||||
| 	$(call if_changed,host-cxxshlib) | ||||
| $(call multi_depend, $(host-cxxshlib), .so, -objs) | ||||
|  |  | |||
|  | @ -101,6 +101,9 @@ modname-multi = $(subst $(space),:,$(sort $(foreach m,$(multi-used),\ | |||
| 
 | ||||
| modname = $(if $(modname-multi),$(modname-multi),$(basetarget)) | ||||
| 
 | ||||
| # target with $(obj)/ and its suffix stripped | ||||
| target-stem = $(basename $(patsubst $(obj)/%,%,$@)) | ||||
| 
 | ||||
| # These flags are needed for modversions and compiling, so we define them here | ||||
| # $(modname_flags) defines KBUILD_MODNAME as the name of the module it will | ||||
| # end up in (or would, if it gets compiled in) | ||||
|  | @ -109,12 +112,12 @@ basename_flags = -DKBUILD_BASENAME=$(call name-fix,$(basetarget)) | |||
| modname_flags  = -DKBUILD_MODNAME=$(call name-fix,$(modname)) | ||||
| 
 | ||||
| orig_c_flags   = $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) \ | ||||
|                  $(ccflags-y) $(CFLAGS_$(basetarget).o) | ||||
| _c_flags       = $(filter-out $(CFLAGS_REMOVE_$(basetarget).o), $(orig_c_flags)) | ||||
|                  $(ccflags-y) $(CFLAGS_$(target-stem).o) | ||||
| _c_flags       = $(filter-out $(CFLAGS_REMOVE_$(target-stem).o), $(orig_c_flags)) | ||||
| orig_a_flags   = $(KBUILD_CPPFLAGS) $(KBUILD_AFLAGS) \ | ||||
|                  $(asflags-y) $(AFLAGS_$(basetarget).o) | ||||
| _a_flags       = $(filter-out $(AFLAGS_REMOVE_$(basetarget).o), $(orig_a_flags)) | ||||
| _cpp_flags     = $(KBUILD_CPPFLAGS) $(cppflags-y) $(CPPFLAGS_$(@F)) | ||||
|                  $(asflags-y) $(AFLAGS_$(target-stem).o) | ||||
| _a_flags       = $(filter-out $(AFLAGS_REMOVE_$(target-stem).o), $(orig_a_flags)) | ||||
| _cpp_flags     = $(KBUILD_CPPFLAGS) $(cppflags-y) $(CPPFLAGS_$(target-stem).lds) | ||||
| 
 | ||||
| # | ||||
| # Enable gcov profiling flags for a file, directory or for all files depending | ||||
|  |  | |||
|  | @ -166,15 +166,15 @@ $(obj)/nconf.o $(obj)/nconf.gui.o: $(obj)/nconf-cfg | |||
| 
 | ||||
| # mconf: Used for the menuconfig target based on lxdialog
 | ||||
| hostprogs-y	+= mconf | ||||
| lxdialog	:= checklist.o inputbox.o menubox.o textbox.o util.o yesno.o | ||||
| mconf-objs	:= mconf.o $(addprefix lxdialog/, $(lxdialog)) $(common-objs) | ||||
| lxdialog	:= $(addprefix lxdialog/, \
 | ||||
| 		     checklist.o inputbox.o menubox.o textbox.o util.o yesno.o) | ||||
| mconf-objs	:= mconf.o $(lxdialog) $(common-objs) | ||||
| 
 | ||||
| HOSTLDLIBS_mconf = $(shell . $(obj)/mconf-cfg && echo $$libs) | ||||
| $(foreach f, mconf.o $(lxdialog), \ | ||||
|   $(eval HOSTCFLAGS_$f = $$(shell . $(obj)/mconf-cfg && echo $$$$cflags))) | ||||
| 
 | ||||
| $(obj)/mconf.o: $(obj)/mconf-cfg | ||||
| $(addprefix $(obj)/lxdialog/, $(lxdialog)): $(obj)/mconf-cfg | ||||
| $(addprefix $(obj)/, mconf.o $(lxdialog)): $(obj)/mconf-cfg | ||||
| 
 | ||||
| # qconf: Used for the xconfig target based on Qt
 | ||||
| hostprogs-y	+= qconf | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Masahiro Yamada
						Masahiro Yamada