Commit 41f0688d authored by Thomas Petazzoni's avatar Thomas Petazzoni
Browse files

fs/iso9660: convert to the filesystem infrastructure



This commit converts the iso9660 logic to the common rootfs
infrastructure. What previously prevented it from being converted is
that the iso9660 logic needed to remove a temporary folder after the
image has been created.

However, since Buildroot typically keeps build artefacts around, this
commit changes the logic to keep this temporary folder around. Thanks
to this change, converting to the common rootfs infrastructure becomes
possible.

In addition, the temporary folder is renamed from $(BUILD_DIR)/iso9660
to the more descriptive $(BUILD_DIR)/rootfs-iso9660.tmp.

Signed-off-by: default avatarThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: default avatar"Yann E. MORIN" <yann.morin.1998@free.fr>
parent 48229662
Loading
Loading
Loading
Loading
+31 −37
Original line number Diff line number Diff line
@@ -2,59 +2,53 @@
#
# Build the iso96600 root filesystem image
#
# Cannot be converted to the ROOTFS_TARGET infrastructure, because of
# the temporary construction in ISO9660_TARGET_DIR.
#
################################################################################

ISO9660_TARGET_DIR = $(BUILD_DIR)/iso9660
ISO9660_TARGET_DIR = $(BUILD_DIR)/rootfs-iso9660.tmp
ISO9660_BOOT_MENU := $(call qstrip,$(BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU))

ROOTFS_ISO9660_DEPENDENCIES = grub host-cdrkit host-fakeroot linux rootfs-cpio

$(BINARIES_DIR)/rootfs.iso9660: $(ROOTFS_ISO9660_DEPENDENCIES)
	@$(call MESSAGE,"Generating root filesystem image rootfs.iso9660")
	$(INSTALL) -D -m 0644 $(GRUB_DIR)/stage2/stage2_eltorito \
		$(ISO9660_TARGET_DIR)/boot/grub/stage2_eltorito
	$(INSTALL) -D -m 0644 $(ISO9660_BOOT_MENU) \
		$(ISO9660_TARGET_DIR)/boot/grub/menu.lst
ifeq ($(BR2_TARGET_GRUB_SPLASH),)
	$(SED) '/^splashimage/d' $(ISO9660_TARGET_DIR)/boot/grub/menu.lst
else
ifeq ($(BR2_TARGET_GRUB_SPLASH),y)
define ROOTFS_ISO9660_SPLASHSCREEN
	$(INSTALL) -D -m 0644 boot/grub/splash.xpm.gz \
		$(ISO9660_TARGET_DIR)/splash.xpm.gz
endef
else
define ROOTFS_ISO9660_SPLASHSCREEN
	$(SED) '/^splashimage/d' $(ISO9660_TARGET_DIR)/boot/grub/menu.lst
endef
endif
	$(INSTALL) -D -m 0644 $(LINUX_IMAGE_PATH) $(ISO9660_TARGET_DIR)/kernel

ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS),y)
define ROOTFS_ISO9660_INITRD
	$(SED) '/initrd/d'  $(ISO9660_TARGET_DIR)/boot/grub/menu.lst
endef
else
define ROOTFS_ISO9660_INITRD
	$(INSTALL) -D -m 0644 $(BINARIES_DIR)/rootfs.cpio$(ROOTFS_CPIO_COMPRESS_EXT) \
		$(ISO9660_TARGET_DIR)/initrd
endef
endif
	# Use fakeroot to pretend all target binaries are owned by root
	rm -f $(FAKEROOT_SCRIPT)
	echo "chown -h -R 0:0 $(ISO9660_TARGET_DIR)" >> $(FAKEROOT_SCRIPT)
	# Use fakeroot so mkisofs believes the previous fakery
	echo "$(HOST_DIR)/usr/bin/genisoimage -R -b boot/grub/stage2_eltorito -no-emul-boot " \
		"-boot-load-size 4 -boot-info-table -o $@ $(ISO9660_TARGET_DIR)" \
		>> $(FAKEROOT_SCRIPT)
	chmod a+x $(FAKEROOT_SCRIPT)
	$(HOST_DIR)/usr/bin/fakeroot -- $(FAKEROOT_SCRIPT)
	-@rm -f $(FAKEROOT_SCRIPT)
	-@rm -rf $(ISO9660_TARGET_DIR)

rootfs-iso9660: $(BINARIES_DIR)/rootfs.iso9660
define ROOTFS_ISO9660_PREPARATION
	$(RM) -rf $(ISO9660_TARGET_DIR)
	mkdir -p $(ISO9660_TARGET_DIR)
	$(INSTALL) -D -m 0644 $(GRUB_DIR)/stage2/stage2_eltorito \
		$(ISO9660_TARGET_DIR)/boot/grub/stage2_eltorito
	$(INSTALL) -D -m 0644 $(ISO9660_BOOT_MENU) \
		$(ISO9660_TARGET_DIR)/boot/grub/menu.lst
	$(INSTALL) -D -m 0644 $(LINUX_IMAGE_PATH) $(ISO9660_TARGET_DIR)/kernel
	$(ROOTFS_ISO9660_SPLASHSCREEN)
	$(ROOTFS_ISO9660_INITRD)
endef

rootfs-iso9660-show-depends:
	@echo $(ROOTFS_ISO9660_DEPENDENCIES)
ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_PREPARATION

.PHONY: rootfs-iso9660 rootfs-iso9660-show-depends
define ROOTFS_ISO9660_CMD
	$(HOST_DIR)/usr/bin/genisoimage -R -b boot/grub/stage2_eltorito \
		-no-emul-boot -boot-load-size 4 -boot-info-table \
		-o $@ $(ISO9660_TARGET_DIR)
endef

################################################################################
#
# Toplevel Makefile options
#
################################################################################
ifeq ($(BR2_TARGET_ROOTFS_ISO9660),y)
TARGETS_ROOTFS += rootfs-iso9660
endif
$(eval $(call ROOTFS_TARGET,iso9660))