# SPDX-License-Identifier: GPL-2.0
#
# kbuild file for usr/ - including initramfs image
#

compress-y					:= shipped
compress-$(CONFIG_INITRAMFS_COMPRESSION_GZIP)	:= gzip
compress-$(CONFIG_INITRAMFS_COMPRESSION_BZIP2)	:= bzip2
compress-$(CONFIG_INITRAMFS_COMPRESSION_LZMA)	:= lzma
compress-$(CONFIG_INITRAMFS_COMPRESSION_XZ)	:= xzmisc
compress-$(CONFIG_INITRAMFS_COMPRESSION_LZO)	:= lzo
compress-$(CONFIG_INITRAMFS_COMPRESSION_LZ4)	:= lz4
compress-$(CONFIG_INITRAMFS_COMPRESSION_ZSTD)	:= zstd

obj-$(CONFIG_BLK_DEV_INITRD) := initramfs_data.o

$(obj)/initramfs_data.o: $(obj)/initramfs_inc_data

ramfs-input := $(strip $(shell echo $(CONFIG_INITRAMFS_SOURCE)))
cpio-data :=

# If CONFIG_INITRAMFS_SOURCE is empty, generate a small initramfs with the
# default contents.
ifeq ($(ramfs-input),)
ramfs-input := $(srctree)/$(src)/default_cpio_list
endif

ifeq ($(words $(ramfs-input)),1)

# If CONFIG_INITRAMFS_SOURCE specifies a single file, and it is suffixed with
# .cpio, use it directly as an initramfs.
ifneq ($(filter %.cpio,$(ramfs-input)),)
cpio-data := $(ramfs-input)
endif

# If CONFIG_INITRAMFS_SOURCE specifies a single file, and it is suffixed with
# .cpio.*, use it directly as an initramfs, and avoid double compression.
ifeq ($(words $(subst .cpio.,$(space),$(ramfs-input))),2)
cpio-data := $(ramfs-input)
compress-y := shipped
endif

endif

# For other cases, generate the initramfs cpio archive based on the contents
# specified by CONFIG_INITRAMFS_SOURCE.
ifeq ($(cpio-data),)

cpio-data := $(obj)/initramfs_data.cpio

hostprogs := gen_init_cpio

# .initramfs_data.cpio.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
-include $(obj)/.initramfs_data.cpio.d

# do not try to update files included in initramfs
$(deps_initramfs): ;

quiet_cmd_initfs = GEN     $@
      cmd_initfs = \
	$(CONFIG_SHELL) $< -o $@ -l $(obj)/.initramfs_data.cpio.d \
	$(if $(CONFIG_INITRAMFS_ROOT_UID), -u $(CONFIG_INITRAMFS_ROOT_UID)) \
	$(if $(CONFIG_INITRAMFS_ROOT_GID), -g $(CONFIG_INITRAMFS_ROOT_GID)) \
	$(ramfs-input)

# We rebuild initramfs_data.cpio if:
# 1) Any included file is newer than initramfs_data.cpio
# 2) There are changes in which files are included (added or deleted)
# 3) If gen_init_cpio are newer than initramfs_data.cpio
# 4) Arguments to gen_initramfs.sh changes
$(obj)/initramfs_data.cpio: $(src)/gen_initramfs.sh $(obj)/gen_init_cpio $(deps_initramfs) FORCE
	$(call if_changed,initfs)

endif

$(obj)/initramfs_inc_data: $(cpio-data) FORCE
	$(call if_changed,$(compress-y))

targets += initramfs_data.cpio initramfs_inc_data

subdir-$(CONFIG_UAPI_HEADER_TEST) += include
