xref: /linux/usr/Makefile (revision f3d9478b2ce468c3115b02ecae7e975990697f15)
1#
2# kbuild file for usr/ - including initramfs image
3#
4
5klibcdirs:;
6
7# Generate builtin.o based on initramfs_data.o
8obj-y := initramfs_data.o
9
10# initramfs_data.o contains the initramfs_data.cpio.gz image.
11# The image is included using .incbin, a dependency which is not
12# tracked automatically.
13$(obj)/initramfs_data.o: $(obj)/initramfs_data.cpio.gz FORCE
14
15#####
16# Generate the initramfs cpio archive
17
18hostprogs-y := gen_init_cpio
19initramfs   := $(CONFIG_SHELL) $(srctree)/scripts/gen_initramfs_list.sh
20ramfs-input := $(if $(filter-out "",$(CONFIG_INITRAMFS_SOURCE)), \
21                    $(CONFIG_INITRAMFS_SOURCE),-d)
22ramfs-args  := \
23        $(if $(CONFIG_INITRAMFS_ROOT_UID), -u $(CONFIG_INITRAMFS_ROOT_UID)) \
24        $(if $(CONFIG_INITRAMFS_ROOT_GID), -g $(CONFIG_INITRAMFS_ROOT_GID)) \
25        $(ramfs-input)
26
27# .initramfs_data.cpio.gz.d is used to identify all files included
28# in initramfs and to detect if any files are added/removed.
29# Removed files are identified by directory timestamp being updated
30# The dependency list is generated by gen_initramfs.sh -l
31ifneq ($(wildcard $(obj)/.initramfs_data.cpio.gz.d),)
32	include $(obj)/.initramfs_data.cpio.gz.d
33endif
34
35quiet_cmd_initfs = GEN     $@
36      cmd_initfs = $(initramfs) -o $@ $(ramfs-args) $(ramfs-input)
37
38targets := initramfs_data.cpio.gz
39$(deps_initramfs): klibcdirs
40# We rebuild initramfs_data.cpio.gz if:
41# 1) Any included file is newer then initramfs_data.cpio.gz
42# 2) There are changes in which files are included (added or deleted)
43# 3) If gen_init_cpio are newer than initramfs_data.cpio.gz
44# 4) arguments to gen_initramfs.sh changes
45$(obj)/initramfs_data.cpio.gz: $(obj)/gen_init_cpio $(deps_initramfs) klibcdirs
46	$(Q)$(initramfs) -l $(ramfs-input) > $(obj)/.initramfs_data.cpio.gz.d
47	$(call if_changed,initfs)
48
49