# ==========================================================================
# 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 := $(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 += $(fw-shipped-y)
endif

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

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: $(installed-mod-fw)
	@:

__fw_modbuild: $(addprefix $(obj)/,$(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
