On Fri, Dec 21, 2018 at 5:43 PM Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx> 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@xxxxxxxxxxxxx> > --- > > 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