| 1 |
|
| 2 | obj-y += main.o
|
| 3 |
|
| 4 |
|
| 5 |
|
| 6 | fwdir := $(CONFIG_EXTRA_FIRMWARE_DIR)
|
| 7 | fwdir := $(addprefix $(srctree)/,$(filter-out /%,$(fwdir)))$(filter /%,$(fwdir))
|
| 8 |
|
| 9 | firmware := $(addsuffix .gen.o, $(CONFIG_EXTRA_FIRMWARE))
|
| 10 | obj-y += $(firmware)
|
| 11 |
|
| 12 | FWNAME = $(patsubst $(obj)/%.gen.S,%,$@)
|
| 13 | FWSTR = $(subst $(comma),_,$(subst /,_,$(subst .,_,$(subst -,_,$(FWNAME)))))
|
| 14 | ASM_WORD = $(if $(CONFIG_64BIT),.quad,.long)
|
| 15 | ASM_ALIGN = $(if $(CONFIG_64BIT),3,2)
|
| 16 | PROGBITS = $(if $(CONFIG_ARM),%,@)progbits
|
| 17 |
|
| 18 | filechk_fwbin = \
|
| 19 | if [ ! -s "$(fwdir)/$(FWNAME)" ]; then \
|
| 20 | echo "error: empty firmware: $(fwdir)/$(FWNAME)" >&2 ;\
|
| 21 | exit 1 ;\
|
| 22 | fi ;\
|
| 23 | echo "/* Generated by $(src)/Makefile */" ;\
|
| 24 | echo " .section .rodata" ;\
|
| 25 | echo " .p2align 4" ;\
|
| 26 | echo "_fw_$(FWSTR)_bin:" ;\
|
| 27 | echo " .incbin \"$(fwdir)/$(FWNAME)\"" ;\
|
| 28 | echo "_fw_end:" ;\
|
| 29 | echo " .section .rodata.str,\"aMS\",$(PROGBITS),1" ;\
|
| 30 | echo " .p2align $(ASM_ALIGN)" ;\
|
| 31 | echo "_fw_$(FWSTR)_name:" ;\
|
| 32 | echo " .string \"$(FWNAME)\"" ;\
|
| 33 | echo " .section .builtin_fw,\"a\",$(PROGBITS)" ;\
|
| 34 | echo " .p2align $(ASM_ALIGN)" ;\
|
| 35 | echo " $(ASM_WORD) _fw_$(FWSTR)_name" ;\
|
| 36 | echo " $(ASM_WORD) _fw_$(FWSTR)_bin" ;\
|
| 37 | echo " $(ASM_WORD) _fw_end - _fw_$(FWSTR)_bin"
|
| 38 |
|
| 39 | $(obj)/%.gen.S: FORCE
|
| 40 | $(call filechk,fwbin)
|
| 41 |
|
| 42 |
|
| 43 | $(addprefix $(obj)/, $(firmware)): $(obj)/%.gen.o: $(fwdir)/%
|
| 44 |
|
| 45 | targets := $(patsubst $(obj)/%,%, \
|
| 46 | $(shell find $(obj) -name \*.gen.S 2>/dev/null))
|