Makefile 1.5 KB

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