# ==========================================================================
# Installing firmware
#
# We don't include the .config, so all firmware files are in $(fw-shipped-)
# rather than in $(fw-shipped-y) or $(fw-shipped-n).
# ==========================================================================

INSTALL := install
src := $(obj)

# For modules_install installing firmware, we want to see .config
# But for firmware_install, we don't care, but don't want to require it.
-include $(objtree)/.config

include scripts/Kbuild.include
include $(srctree)/$(obj)/Makefile

include scripts/Makefile.host

mod-fw := $(addprefix $(INSTALL_FW_PATH)/,$(fw-shipped-m))

# If CONFIG_FIRMWARE_IN_KERNEL isn't set, then install the 
# firmware for in-kernel drivers too.
ifndef CONFIG_FIRMWARE_IN_KERNEL
mod-fw += $(addprefix $(INSTALL_FW_PATH)/,$(fw-shipped-y))
endif

installed-fw := $(addprefix $(INSTALL_FW_PATH)/,$(fw-shipped-all))
installed-fw-dirs := $(sort $(dir $(installed-fw))) $(INSTALL_FW_PATH)/.

# Workaround for make < 3.81, where .SECONDEXPANSION doesn't work.
PHONY += $(INSTALL_FW_PATH)/$$(%) install-all-dirs
$(INSTALL_FW_PATH)/$$(%): install-all-dirs
	@true
install-all-dirs: $(installed-fw-dirs)
	@true

quiet_cmd_install = INSTALL $(subst $(srctree)/,,$@)
      cmd_install = $(INSTALL) -m0644 $< $@

$(installed-fw-dirs):
	$(call cmd,mkdir)

$(installed-fw): $(INSTALL_FW_PATH)/%: $(obj)/% | $(INSTALL_FW_PATH)/$$(dir %)
	$(call cmd,install)

PHONY +=  __fw_install __fw_modinst FORCE

.PHONY: $(PHONY)

__fw_install: $(installed-fw)
__fw_modinst: $(mod-fw)

FORCE:

# Read all saved command lines and dependencies for the $(targets) we
# may be building using $(if_changed{,_dep}). As an optimization, we
# don't need to read them if the target does not exist; we will rebuild
# anyway in that case.

targets := $(wildcard $(sort $(targets)))
cmd_files := $(wildcard $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))

ifneq ($(cmd_files),)
  include $(cmd_files)
endif
