[klibc] [PATCH] klibc: rebuild cpio image when content changes
Sam Ravnborg
sam at ravnborg.org
Mon Apr 17 07:10:46 PDT 2006
Generate dependencies almost like done by fixdep in the kernel.
This teaches make to rebuild cpio image when content has changed.
Also restructured usr/Kbuild a little so we better utilise parallel
makes (dash, gzip, utils and kinit are now build in parallel).
Signed-off-by: Sam Ravnborg <sam at ravnborg.org>
---
patch is on top of hpa's linux tree, so path differ if applied to the
klibc tree.
This one has passed all my trivial testing.
touch usr/kinit/kinit.o && make usr/
will regenerate cpio image.
But with all the troubles this simple issue has caused me I woul not be
suprised if there are some untested cornercase.
Sam
scripts/gen_initramfs_list.sh | 8 ++++++
usr/Kbuild | 52 ++++++++++++++++++++++++------------------
2 files changed, 38 insertions(+), 22 deletions(-)
diff --git a/scripts/gen_initramfs_list.sh b/scripts/gen_initramfs_list.sh
index 45c81b0..a609970 100644
--- a/scripts/gen_initramfs_list.sh
+++ b/scripts/gen_initramfs_list.sh
@@ -268,6 +268,14 @@ while [ $# -gt 0 ]; do
esac
done
+# trailer of dependency list
+if [ ! -z ${dep_list} ]; then
+ echo ""
+ echo "initramfs: \$(deps_initramfs)"
+ echo "\$(deps_initramfs): ;"
+ echo ""
+fi
+
# If output_file is set we will generate cpio archive and gzip it
# we are carefull to delete tmp files
if [ ! -z ${output_file} ]; then
diff --git a/usr/Kbuild b/usr/Kbuild
index c4f5be2..e338cf9 100644
--- a/usr/Kbuild
+++ b/usr/Kbuild
@@ -8,21 +8,38 @@ export KLIBCINC := $(srctree)/$(src)/inc
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
-.PHONY: klibcdirs
-$(obj)/initramfs_list: klibcdirs
+# 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)
-klibcdirs: FORCE
- $(Q)$(MAKE) $(klibc)=$(src)/klibc
- $(Q)$(MAKE) $(klibc)=$(src)/kinit
- $(Q)$(MAKE) $(klibc)=$(src)/utils
- $(Q)$(MAKE) $(klibc)=$(src)/dash
- $(Q)$(MAKE) $(klibc)=$(src)/gzip
+$(usr-subdirs): $(klibc-subdir)
+ $(Q)$(MAKE) $(klibc)=$(src)/$(patsubst _usr_%,%,$(@))
+
+$(klibc-subdir):
+ $(Q)$(MAKE) $(klibc)=$(src)/$(patsubst _usr_%,%,$(@))
endif
-subdir- := klibc kinit utils dash gzip
+
# Generate builtin.o based on initramfs_data.o
obj-y := initramfs_data.o
@@ -36,7 +53,7 @@ #####
# Generate the initramfs cpio archive
hostprogs-y := gen_init_cpio
-initramfs := $(CONFIG_SHELL) $(srctree)/scripts/gen_initramfs_list.sh
+ginitramfs := $(CONFIG_SHELL) $(srctree)/scripts/gen_initramfs_list.sh
ramfs-input := $(shell echo $(CONFIG_INITRAMFS_SOURCE))
ramfs-input := $(if $(ramfs-input), $(ramfs-input), -d)
@@ -44,26 +61,17 @@ ramfs-args := \
$(if $(CONFIG_INITRAMFS_ROOT_UID), -u $(CONFIG_INITRAMFS_ROOT_UID)) \
$(if $(CONFIG_INITRAMFS_ROOT_GID), -g $(CONFIG_INITRAMFS_ROOT_GID)) \
$(ramfs-input)
-
-# .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
quiet_cmd_initfs = GEN $@
- cmd_initfs = $(initramfs) -o $@ $(ramfs-args) $(ramfs-input)
+ cmd_initfs = $(ginitramfs) -o $@ $(ramfs-args) $(ramfs-input)
targets := initramfs_data.cpio.gz
-$(deps_initramfs): klibcdirs
# 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) klibcdirs
- $(Q)$(initramfs) -l $(ramfs-input) > $(obj)/.initramfs_data.cpio.gz.d
+$(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)
More information about the klibc
mailing list