#
# kbuild file for usr/ - including initramfs image and klibc
#

# klibc definitions - to be moved to top-level Makefile later
export KLIBCSRC := $(srctree)/$(src)/klibc
export KLIBCINC := $(srctree)/$(src)/include
export KLIBCOBJ := $(objtree)/$(obj)/klibc
CONFIG_KLIBC := 1

klibc-subdir := klibc
usr-subdirs  := kinit utils dash gzip
subdir-      := $(klibc-subdir) $(usr-subdirs)

usr-subdirs  := $(addprefix _usr_,$(usr-subdirs))
klibc-subdir := $(addprefix _usr_,$(klibc-subdir))

# Klibc binaries
ifdef CONFIG_KLIBC
klibc := -f $(srctree)/scripts/Kbuild.klibc obj

# .initramfs_data.cpio.gz.d is used to identify all files included
# in initramfs and to detect if any files are added/removed.
# Removed files are identified by directory timestamp being updated
# The dependency list is generated by gen_initramfs.sh -l
ifneq ($(wildcard $(obj)/.initramfs_data.cpio.gz.d),)
	include $(obj)/.initramfs_data.cpio.gz.d
endif

# build klibc library before the klibc programs
# build klibc programs before cpio.gz
.PHONY: initramfs $(usr-subdirs) $(klibc-subdir)
initramfs:         $(usr-subdirs) $(klibc-subdir)
$(deps_initramfs): $(usr-subdirs) $(klibc-subdir)

$(usr-subdirs): $(klibc-subdir)
	$(Q)$(MAKE) $(klibc)=$(src)/$(patsubst _usr_%,%,$(@))

$(klibc-subdir):
	$(Q)$(MAKE) $(klibc)=$(src)/$(patsubst _usr_%,%,$(@))
endif


# Generate builtin.o based on initramfs_data.o
obj-y := initramfs_data.o

# initramfs_data.o contains the initramfs_data.cpio.gz image.
# The image is included using .incbin, a dependency which is not
# tracked automatically.
$(obj)/initramfs_data.o: $(obj)/initramfs_data.cpio.gz FORCE

#####
# Generate the initramfs cpio archive

hostprogs-y := gen_init_cpio
ginitramfs  := $(CONFIG_SHELL) $(srctree)/scripts/gen_initramfs_list.sh
ramfs-def   := $(srctree)/$(src)/initramfs.default
ramfs-input := $(shell echo $(CONFIG_INITRAMFS_SOURCE))
ramfs-input := $(if $(ramfs-input), $(ramfs-input), $(ramfs-def))

ramfs-args  := \
        $(if $(CONFIG_INITRAMFS_ROOT_UID), -u $(CONFIG_INITRAMFS_ROOT_UID)) \
        $(if $(CONFIG_INITRAMFS_ROOT_GID), -g $(CONFIG_INITRAMFS_ROOT_GID))

quiet_cmd_initfs = GEN     $@
      cmd_initfs = $(ginitramfs) -o $@ $(ramfs-args) $(ramfs-input)

targets := initramfs_data.cpio.gz
# We rebuild initramfs_data.cpio.gz if:
# 1) Any included file is newer then initramfs_data.cpio.gz
# 2) There are changes in which files are included (added or deleted)
# 3) If gen_init_cpio are newer than initramfs_data.cpio.gz
# 4) arguments to gen_initramfs.sh changes
$(obj)/initramfs_data.cpio.gz: $(obj)/gen_init_cpio $(deps_initramfs) initramfs
	$(Q)$(ginitramfs) -l $(ramfs-input) > $(obj)/.initramfs_data.cpio.gz.d
	$(call if_changed,initfs)

