Message ID | 1545361961-31990-3-git-send-email-yamada.masahiro@socionext.com |
---|---|
State | New |
Headers | show |
Series | [1/3] scripts: remove unnecessary ihex2fw and check-lc_ctypes from .gitignore | expand |
On Fri, Dec 21, 2018 at 5:43 PM Masahiro Yamada <yamada.masahiro@socionext.com> wrote: > > Clean up the Makefile. Equivalent *.gen.S files are produced. > > - Use filechk to remove ugly wordsize_deps > > - Get FWNAME, FWSTR, ASM_WORD, ASM_ALIGN, and PROGBITS out of the > recipe for readability > > - Move mkdir into the recipe > > - Clean up generated directories by 'make clean' > > Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> > --- > > -targets := $(patsubst $(obj)/%,%, \ > - $(shell find $(obj) -name \*.gen.S 2>/dev/null)) > +targets := $(shell cd $(obj) && find * -name '*.gen.S') > +clean-dirs := $(shell cd $(obj) && find * -maxdepth 0 -type d) This 'find' emits a warning for out-of-tree build. So, I will get it back to the original code. -- Best Regards Masahiro Yamada
On Fri, Dec 21, 2018 at 5:43 PM Masahiro Yamada <yamada.masahiro@socionext.com> wrote: > > Clean up the Makefile. Equivalent *.gen.S files are produced. > > - Use filechk to remove ugly wordsize_deps > > - Get FWNAME, FWSTR, ASM_WORD, ASM_ALIGN, and PROGBITS out of the > recipe for readability > > - Move mkdir into the recipe > > - Clean up generated directories by 'make clean' > > Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> > --- > > For this patch to work correctly, > the following prerequisite is necessary: > > https://patchwork.kernel.org/patch/10707461/ > > So, I will queue this series to kbuild tree. > > BTW, my next plan is to move firmware/ to > more relevant place, for example, > drivers/base/firmware_loader/builtin. > > > firmware/Makefile | 89 ++++++++++++++++++++++--------------------------------- > 1 file changed, 35 insertions(+), 54 deletions(-) > > diff --git a/firmware/Makefile b/firmware/Makefile > index 2964138..18d1c84 100644 > --- a/firmware/Makefile > +++ b/firmware/Makefile > @@ -1,61 +1,42 @@ > # SPDX-License-Identifier: GPL-2.0 > -# > -# kbuild file for firmware/ > -# > > -# Create $(fwabs) from $(CONFIG_EXTRA_FIRMWARE_DIR) -- if it doesn't have a > +# Create $(fwdir) from $(CONFIG_EXTRA_FIRMWARE_DIR) -- if it doesn't have a > # leading /, it's relative to $(srctree). > fwdir := $(subst $(quote),,$(CONFIG_EXTRA_FIRMWARE_DIR)) > -fwabs := $(addprefix $(srctree)/,$(filter-out /%,$(fwdir)))$(filter /%,$(fwdir)) > - > -fw-external-y := $(subst $(quote),,$(CONFIG_EXTRA_FIRMWARE)) > - > -quiet_cmd_fwbin = MK_FW $@ > - cmd_fwbin = FWNAME="$(patsubst firmware/%.gen.S,%,$@)"; \ > - FWSTR="$(subst /,_,$(subst .,_,$(subst -,_,$(patsubst \ > - firmware/%.gen.S,%,$@))))"; \ > - ASM_WORD=$(if $(CONFIG_64BIT),.quad,.long); \ > - ASM_ALIGN=$(if $(CONFIG_64BIT),3,2); \ > - PROGBITS=$(if $(CONFIG_ARM),%,@)progbits; \ > - echo "/* Generated by firmware/Makefile */" > $@;\ > - echo " .section .rodata" >>$@;\ > - echo " .p2align $${ASM_ALIGN}" >>$@;\ > - echo "_fw_$${FWSTR}_bin:" >>$@;\ > - echo " .incbin \"$(2)\"" >>$@;\ > - echo "_fw_end:" >>$@;\ > - echo " .section .rodata.str,\"aMS\",$${PROGBITS},1" >>$@;\ > - echo " .p2align $${ASM_ALIGN}" >>$@;\ > - echo "_fw_$${FWSTR}_name:" >>$@;\ > - echo " .string \"$$FWNAME\"" >>$@;\ > - echo " .section .builtin_fw,\"a\",$${PROGBITS}" >>$@;\ > - echo " .p2align $${ASM_ALIGN}" >>$@;\ > - echo " $${ASM_WORD} _fw_$${FWSTR}_name" >>$@;\ > - echo " $${ASM_WORD} _fw_$${FWSTR}_bin" >>$@;\ > - echo " $${ASM_WORD} _fw_end - _fw_$${FWSTR}_bin" >>$@; > - > -# One of these files will change, or come into existence, whenever > -# the configuration changes between 32-bit and 64-bit. The .S files > -# need to change when that happens. > -wordsize_deps := $(wildcard include/config/64bit.h include/config/32bit.h \ > - include/config/ppc32.h include/config/ppc64.h \ > - include/config/superh32.h include/config/superh64.h \ > - include/config/x86_32.h include/config/x86_64.h \ > - firmware/Makefile) > - > -$(patsubst %,$(obj)/%.gen.S, $(fw-external-y)): %: $(wordsize_deps) \ > - include/config/extra/firmware/dir.h > - $(call cmd,fwbin,$(fwabs)/$(patsubst $(obj)/%.gen.S,%,$@)) > +fwdir := $(addprefix $(srctree)/,$(filter-out /%,$(fwdir)))$(filter /%,$(fwdir)) > + > +obj-y := $(addsuffix .gen.o, $(subst $(quote),,$(CONFIG_EXTRA_FIRMWARE))) > + > +FWNAME = $(patsubst $(obj)/%.gen.S,%,$@) > +FWSTR = $(subst /,_,$(subst .,_,$(subst -,_,$(FWNAME)))) > +ASM_WORD = $(if $(CONFIG_64BIT),.quad,.long) > +ASM_ALIGN = $(if $(CONFIG_64BIT),3,2) > +PROGBITS = $(if $(CONFIG_ARM),%,@)progbits > + > +filechk_fwbin = { \ > + echo "/* Generated by $(src)/Makefile */" ;\ > + echo " .section .rodata" ;\ > + echo " .p2align $(ASM_ALIGN)" ;\ > + echo "_fw_$(FWSTR)_bin:" ;\ > + echo " .incbin \"$(fwdir)/$(FWNAME)\"" ;\ > + echo "_fw_end:" ;\ > + echo " .section .rodata.str,\"aMS\",$(PROGBITS),1" ;\ > + echo " .p2align $(ASM_ALIGN)" ;\ > + echo "_fw_$(FWSTR)_name:" ;\ > + echo " .string \"$(FWNAME)\"" ;\ > + echo " .section .builtin_fw,\"a\",$(PROGBITS)" ;\ > + echo " .p2align $(ASM_ALIGN)" ;\ > + echo " $(ASM_WORD) _fw_$(FWSTR)_name" ;\ > + echo " $(ASM_WORD) _fw_$(FWSTR)_bin" ;\ > + echo " $(ASM_WORD) _fw_end - _fw_$(FWSTR)_bin" ;\ > +} > + > +$(obj)/%.gen.S: FORCE > + @mkdir -p $(dir $@) Removed this line because filechk creates the directory automatically. Then, applied to linux-kbuild. > + $(call filechk,fwbin) > > # The .o files depend on the binaries directly; the .S files don't. > -$(patsubst %,$(obj)/%.gen.o, $(fw-external-y)): $(obj)/%.gen.o: $(fwdir)/% > - > -obj-y += $(patsubst %,%.gen.o, $(fw-external-y)) > - > -ifeq ($(KBUILD_SRC),) > -# Makefile.build only creates subdirectories for O= builds, but external > -# firmware might live outside the kernel source tree > -_dummy := $(foreach d,$(addprefix $(obj)/,$(dir $(fw-external-y))), $(shell [ -d $(d) ] || mkdir -p $(d))) > -endif > +$(addprefix $(obj)/, $(obj-y)): $(obj)/%.gen.o: $(fwdir)/% > > -targets := $(patsubst $(obj)/%,%, \ > - $(shell find $(obj) -name \*.gen.S 2>/dev/null)) > +targets := $(shell cd $(obj) && find * -name '*.gen.S') > +clean-dirs := $(shell cd $(obj) && find * -maxdepth 0 -type d) > -- > 2.7.4 > -- Best Regards Masahiro Yamada
diff --git a/firmware/Makefile b/firmware/Makefile index 2964138..18d1c84 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -1,61 +1,42 @@ # SPDX-License-Identifier: GPL-2.0 -# -# kbuild file for firmware/ -# -# Create $(fwabs) from $(CONFIG_EXTRA_FIRMWARE_DIR) -- if it doesn't have a +# Create $(fwdir) from $(CONFIG_EXTRA_FIRMWARE_DIR) -- if it doesn't have a # leading /, it's relative to $(srctree). fwdir := $(subst $(quote),,$(CONFIG_EXTRA_FIRMWARE_DIR)) -fwabs := $(addprefix $(srctree)/,$(filter-out /%,$(fwdir)))$(filter /%,$(fwdir)) - -fw-external-y := $(subst $(quote),,$(CONFIG_EXTRA_FIRMWARE)) - -quiet_cmd_fwbin = MK_FW $@ - cmd_fwbin = FWNAME="$(patsubst firmware/%.gen.S,%,$@)"; \ - FWSTR="$(subst /,_,$(subst .,_,$(subst -,_,$(patsubst \ - firmware/%.gen.S,%,$@))))"; \ - ASM_WORD=$(if $(CONFIG_64BIT),.quad,.long); \ - ASM_ALIGN=$(if $(CONFIG_64BIT),3,2); \ - PROGBITS=$(if $(CONFIG_ARM),%,@)progbits; \ - echo "/* Generated by firmware/Makefile */" > $@;\ - echo " .section .rodata" >>$@;\ - echo " .p2align $${ASM_ALIGN}" >>$@;\ - echo "_fw_$${FWSTR}_bin:" >>$@;\ - echo " .incbin \"$(2)\"" >>$@;\ - echo "_fw_end:" >>$@;\ - echo " .section .rodata.str,\"aMS\",$${PROGBITS},1" >>$@;\ - echo " .p2align $${ASM_ALIGN}" >>$@;\ - echo "_fw_$${FWSTR}_name:" >>$@;\ - echo " .string \"$$FWNAME\"" >>$@;\ - echo " .section .builtin_fw,\"a\",$${PROGBITS}" >>$@;\ - echo " .p2align $${ASM_ALIGN}" >>$@;\ - echo " $${ASM_WORD} _fw_$${FWSTR}_name" >>$@;\ - echo " $${ASM_WORD} _fw_$${FWSTR}_bin" >>$@;\ - echo " $${ASM_WORD} _fw_end - _fw_$${FWSTR}_bin" >>$@; - -# One of these files will change, or come into existence, whenever -# the configuration changes between 32-bit and 64-bit. The .S files -# need to change when that happens. -wordsize_deps := $(wildcard include/config/64bit.h include/config/32bit.h \ - include/config/ppc32.h include/config/ppc64.h \ - include/config/superh32.h include/config/superh64.h \ - include/config/x86_32.h include/config/x86_64.h \ - firmware/Makefile) - -$(patsubst %,$(obj)/%.gen.S, $(fw-external-y)): %: $(wordsize_deps) \ - include/config/extra/firmware/dir.h - $(call cmd,fwbin,$(fwabs)/$(patsubst $(obj)/%.gen.S,%,$@)) +fwdir := $(addprefix $(srctree)/,$(filter-out /%,$(fwdir)))$(filter /%,$(fwdir)) + +obj-y := $(addsuffix .gen.o, $(subst $(quote),,$(CONFIG_EXTRA_FIRMWARE))) + +FWNAME = $(patsubst $(obj)/%.gen.S,%,$@) +FWSTR = $(subst /,_,$(subst .,_,$(subst -,_,$(FWNAME)))) +ASM_WORD = $(if $(CONFIG_64BIT),.quad,.long) +ASM_ALIGN = $(if $(CONFIG_64BIT),3,2) +PROGBITS = $(if $(CONFIG_ARM),%,@)progbits + +filechk_fwbin = { \ + echo "/* Generated by $(src)/Makefile */" ;\ + echo " .section .rodata" ;\ + echo " .p2align $(ASM_ALIGN)" ;\ + echo "_fw_$(FWSTR)_bin:" ;\ + echo " .incbin \"$(fwdir)/$(FWNAME)\"" ;\ + echo "_fw_end:" ;\ + echo " .section .rodata.str,\"aMS\",$(PROGBITS),1" ;\ + echo " .p2align $(ASM_ALIGN)" ;\ + echo "_fw_$(FWSTR)_name:" ;\ + echo " .string \"$(FWNAME)\"" ;\ + echo " .section .builtin_fw,\"a\",$(PROGBITS)" ;\ + echo " .p2align $(ASM_ALIGN)" ;\ + echo " $(ASM_WORD) _fw_$(FWSTR)_name" ;\ + echo " $(ASM_WORD) _fw_$(FWSTR)_bin" ;\ + echo " $(ASM_WORD) _fw_end - _fw_$(FWSTR)_bin" ;\ +} + +$(obj)/%.gen.S: FORCE + @mkdir -p $(dir $@) + $(call filechk,fwbin) # The .o files depend on the binaries directly; the .S files don't. -$(patsubst %,$(obj)/%.gen.o, $(fw-external-y)): $(obj)/%.gen.o: $(fwdir)/% - -obj-y += $(patsubst %,%.gen.o, $(fw-external-y)) - -ifeq ($(KBUILD_SRC),) -# Makefile.build only creates subdirectories for O= builds, but external -# firmware might live outside the kernel source tree -_dummy := $(foreach d,$(addprefix $(obj)/,$(dir $(fw-external-y))), $(shell [ -d $(d) ] || mkdir -p $(d))) -endif +$(addprefix $(obj)/, $(obj-y)): $(obj)/%.gen.o: $(fwdir)/% -targets := $(patsubst $(obj)/%,%, \ - $(shell find $(obj) -name \*.gen.S 2>/dev/null)) +targets := $(shell cd $(obj) && find * -name '*.gen.S') +clean-dirs := $(shell cd $(obj) && find * -maxdepth 0 -type d)
Clean up the Makefile. Equivalent *.gen.S files are produced. - Use filechk to remove ugly wordsize_deps - Get FWNAME, FWSTR, ASM_WORD, ASM_ALIGN, and PROGBITS out of the recipe for readability - Move mkdir into the recipe - Clean up generated directories by 'make clean' Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> --- For this patch to work correctly, the following prerequisite is necessary: https://patchwork.kernel.org/patch/10707461/ So, I will queue this series to kbuild tree. BTW, my next plan is to move firmware/ to more relevant place, for example, drivers/base/firmware_loader/builtin. firmware/Makefile | 89 ++++++++++++++++++++++--------------------------------- 1 file changed, 35 insertions(+), 54 deletions(-) -- 2.7.4