Sam Ravnborg
2006-Apr-09 14:07 UTC
[klibc] [PATCH] kbuild: fix usr/Kbuild to use new usr/gen_initramfs.sh
Fix usr/Kbuild so it utilise the new gen_initramfs.sh script which will rebuild initramfs when the content has changed. Signed-off-by: Sam Ravnborg <sam@ravnborg.org> --- usr/Kbuild | 74 +++++++++++++++++++---------------------------------------------- 1 file changed, 22 insertions(+), 52 deletions(-) This patch shall not be applied until my kbuild.git tree is merged upstream. Or it is merged into the klibc-kernel tree. Sam diff --git a/usr/Kbuild b/usr/Kbuild index daf5e3f..55218ef 100644 --- a/usr/Kbuild +++ b/usr/Kbuild @@ -26,67 +26,37 @@ subdir- := klibc kinit utils dash gzip # Generate builtin.o based on initramfs_data.o -obj-y := 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 -ifdef CONFIG_INITRAMFS_ROOT_UID -gen_initramfs_args += -u $(CONFIG_INITRAMFS_ROOT_UID) -endif - -ifdef CONFIG_INITRAMFS_ROOT_GID -gen_initramfs_args += -g $(CONFIG_INITRAMFS_ROOT_GID) -endif - -# The $(shell echo $(CONFIG_INITRAMFS_SOURCE)) is to remove the -# gratuitous begin and end quotes from the Kconfig string type. -# Internal, escaped quotes in the Kconfig string will loose the -# escape and become active quotes. -quotefixed_initramfs_source := $(shell echo $(CONFIG_INITRAMFS_SOURCE)) - -filechk_initramfs_list = $(CONFIG_SHELL) \ - $(srctree)/scripts/gen_initramfs_list.sh $(gen_initramfs_args) \ - $(quotefixed_initramfs_source) - -$(obj)/initramfs_list: $(src)/Kbuild FORCE - $(call filechk,initramfs_list) - -quiet_cmd_cpio = CPIO $@ - cmd_cpio = ./$< $(obj)/initramfs_list > $@ - +##### +# Generate the initramfs cpio archive +# Following steps are executed: +# Create list of files to be included in archive (ramfs-filelist) +# If any of the files are newer than target generate new cpio archive -# Check if the INITRAMFS_SOURCE is a cpio archive -ifneq (,$(findstring .cpio,$(quotefixed_initramfs_source))) - -# INITRAMFS_SOURCE has a cpio archive - verify that it's a single file -ifneq (1,$(words $(quotefixed_initramfs_source))) -$(error Only a single file may be specified in CONFIG_INITRAMFS_SOURCE (="$(quotefixed_initramfs_source)") when a cpio archive is directly specified.) -endif -# Now use the cpio archive directly -initramfs_data_cpio = $(quotefixed_initramfs_source) -targets += $(quotefixed_initramfs_source) - -else - -# INITRAMFS_SOURCE is not a cpio archive - create one +# Create cpio archive from filelist hostprogs-y := gen_init_cpio -$(obj)/initramfs_data.cpio: $(obj)/gen_init_cpio \ - $(obj)/initramfs_list FORCE - $(call if_changed,cpio) - -targets += initramfs_data.cpio -initramfs_data_cpio = $(obj)/initramfs_data.cpio - -endif +# Files included in cpio archive (cpio archive is updated if +# any included files are newer than the cpio archive) +initramfs := $(CONFIG_SHELL) $(srctree)/$(src)/gen_initramfs.sh +ramfs-input = $(if $(filter-out "",$(CONFIG_INITRAMFS_SOURCE)), \ + $(CONFIG_INITRAMFS_SOURCE),-d) +ramfs-filelist = $(shell $(initramfs) -l $(ramfs-input)) -$(obj)/initramfs_data.cpio.gz: $(initramfs_data_cpio) FORCE - $(call if_changed,gzip) +quiet_cmd_initfs = GEN $@ + cmd_initfs = \ + $(initramfs) -o $@ \ + $(if $(CONFIG_INITRAMFS_ROOT_UID), -u $(CONFIG_INITRAMFS_ROOT_UID)) \ + $(if $(CONFIG_INITRAMFS_ROOT_GID), -g $(CONFIG_INITRAMFS_ROOT_GID)) \ + $(ramfs-input) -targets += initramfs_data.cpio.gz +targets := initramfs_data.cpio.gz +$(obj)/initramfs_data.cpio.gz: $(ramfs-filelist) $(obj)/gen_init_cpio FORCE + $(call if_changed,initfs) -# Cleaning time -clean-files := initramfs_data.cpio.gz initramfs_list