1*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun# Create $(fwdir) from $(CONFIG_EXTRA_FIRMWARE_DIR) -- if it doesn't have a 4*4882a593Smuzhiyun# leading /, it's relative to $(srctree). 5*4882a593Smuzhiyunfwdir := $(subst $(quote),,$(CONFIG_EXTRA_FIRMWARE_DIR)) 6*4882a593Smuzhiyunfwdir := $(addprefix $(srctree)/,$(filter-out /%,$(fwdir)))$(filter /%,$(fwdir)) 7*4882a593Smuzhiyun 8*4882a593Smuzhiyunobj-y := $(addsuffix .gen.o, $(subst $(quote),,$(CONFIG_EXTRA_FIRMWARE))) 9*4882a593Smuzhiyun 10*4882a593SmuzhiyunFWNAME = $(patsubst $(obj)/%.gen.S,%,$@) 11*4882a593Smuzhiyuncomma := , 12*4882a593SmuzhiyunFWSTR = $(subst $(comma),_,$(subst /,_,$(subst .,_,$(subst -,_,$(FWNAME))))) 13*4882a593SmuzhiyunASM_WORD = $(if $(CONFIG_64BIT),.quad,.long) 14*4882a593SmuzhiyunASM_ALIGN = $(if $(CONFIG_64BIT),3,2) 15*4882a593SmuzhiyunPROGBITS = $(if $(CONFIG_ARM),%,@)progbits 16*4882a593Smuzhiyun 17*4882a593Smuzhiyunfilechk_fwbin = \ 18*4882a593Smuzhiyun echo "/* Generated by $(src)/Makefile */" ;\ 19*4882a593Smuzhiyun echo " .section .rodata" ;\ 20*4882a593Smuzhiyun echo " .p2align 4" ;\ 21*4882a593Smuzhiyun echo "_fw_$(FWSTR)_bin:" ;\ 22*4882a593Smuzhiyun echo " .incbin \"$(fwdir)/$(FWNAME)\"" ;\ 23*4882a593Smuzhiyun echo "_fw_end:" ;\ 24*4882a593Smuzhiyun echo " .section .rodata.str,\"aMS\",$(PROGBITS),1" ;\ 25*4882a593Smuzhiyun echo " .p2align $(ASM_ALIGN)" ;\ 26*4882a593Smuzhiyun echo "_fw_$(FWSTR)_name:" ;\ 27*4882a593Smuzhiyun echo " .string \"$(FWNAME)\"" ;\ 28*4882a593Smuzhiyun echo " .section .builtin_fw,\"a\",$(PROGBITS)" ;\ 29*4882a593Smuzhiyun echo " .p2align $(ASM_ALIGN)" ;\ 30*4882a593Smuzhiyun echo " $(ASM_WORD) _fw_$(FWSTR)_name" ;\ 31*4882a593Smuzhiyun echo " $(ASM_WORD) _fw_$(FWSTR)_bin" ;\ 32*4882a593Smuzhiyun echo " $(ASM_WORD) _fw_end - _fw_$(FWSTR)_bin" 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun$(obj)/%.gen.S: FORCE 35*4882a593Smuzhiyun $(call filechk,fwbin) 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun# The .o files depend on the binaries directly; the .S files don't. 38*4882a593Smuzhiyun$(addprefix $(obj)/, $(obj-y)): $(obj)/%.gen.o: $(fwdir)/% 39*4882a593Smuzhiyun 40*4882a593Smuzhiyuntargets := $(patsubst $(obj)/%,%, \ 41*4882a593Smuzhiyun $(shell find $(obj) -name \*.gen.S 2>/dev/null)) 42