xref: /OK3568_Linux_fs/buildroot/fs/iso9660/iso9660.mk (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1################################################################################
2#
3# Build the iso96600 root filesystem image
4#
5################################################################################
6
7#
8# We need to handle three cases:
9#
10#  1. The ISO9660 filesystem will really be the real root filesystem
11#     itself. This is when BR2_TARGET_ROOTFS_ISO9660_INITRD is
12#     disabled.
13#
14#  2. The ISO9660 filesystem will be a filesystem with just a kernel
15#     image, initrd and grub. This is when
16#     BR2_TARGET_ROOTFS_ISO9660_INITRD is enabled, but
17#     BR2_TARGET_ROOTFS_INITRAMFS is disabled.
18#
19#  3. The ISO9660 filesystem will be a filesystem with just a kernel
20#     image and grub. This is like (2), except that the initrd is
21#     built into the kernel image. This is when
22#     BR2_TARGET_ROOTFS_INITRAMFS is enabled (regardless of the value
23#     of BR2_TARGET_ROOTFS_ISO9660_INITRD).
24
25ROOTFS_ISO9660_BOOT_MENU = $(call qstrip,$(BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU))
26
27ROOTFS_ISO9660_DEPENDENCIES = host-xorriso linux
28
29ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS),y)
30ROOTFS_ISO9660_USE_INITRD = YES
31endif
32
33ifeq ($(BR2_TARGET_ROOTFS_ISO9660_INITRD),y)
34ROOTFS_ISO9660_USE_INITRD = YES
35endif
36
37ifeq ($(ROOTFS_ISO9660_USE_INITRD),YES)
38ROOTFS_ISO9660_TMP_TARGET_DIR = $(FS_DIR)/rootfs.iso9660.tmp
39define ROOTFS_ISO9660_CREATE_TEMPDIR
40	$(RM) -rf $(ROOTFS_ISO9660_TMP_TARGET_DIR)
41	mkdir -p $(ROOTFS_ISO9660_TMP_TARGET_DIR)
42endef
43ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_CREATE_TEMPDIR
44else ifeq ($(BR2_TARGET_ROOTFS_ISO9660_TRANSPARENT_COMPRESSION),y)
45ROOTFS_ISO9660_DEPENDENCIES += host-zisofs-tools
46ROOTFS_ISO9660_TMP_TARGET_DIR = $(FS_DIR)/rootfs.iso9660.tmp
47# This must be early, before we copy the bootloader files.
48define ROOTFS_ISO9660_MKZFTREE
49	$(RM) -rf $(ROOTFS_ISO9660_TMP_TARGET_DIR)
50	$(HOST_DIR)/bin/mkzftree -X -z 9 -p $(PARALLEL_JOBS) \
51		$(TARGET_DIR) \
52		$(ROOTFS_ISO9660_TMP_TARGET_DIR)
53endef
54ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_MKZFTREE
55ROOTFS_ISO9660_OPTS += -z
56else
57ROOTFS_ISO9660_TMP_TARGET_DIR = $(TARGET_DIR)
58endif
59
60ifeq ($(BR2_REPRODUCIBLE),y)
61ROOTFS_ISO9660_VFAT_OPTS = --invariant
62ROOTFS_ISO9660_FIX_TIME = touch -d @$(SOURCE_DATE_EPOCH)
63else
64ROOTFS_ISO9660_FIX_TIME = :
65endif
66
67ifeq ($(BR2_TARGET_ROOTFS_ISO9660_GRUB2)$(BR2_TARGET_ROOTFS_ISO9660_BIOS_BOOTLOADER),yy)
68ROOTFS_ISO9660_DEPENDENCIES += grub2
69ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH = \
70	$(ROOTFS_ISO9660_TMP_TARGET_DIR)/boot/grub/grub.cfg
71ROOTFS_ISO9660_BOOT_IMAGE = boot/grub/grub-eltorito.img
72define ROOTFS_ISO9660_INSTALL_BOOTLOADER_BIOS
73	$(INSTALL) -D -m 0644 $(BINARIES_DIR)/grub-eltorito.img \
74		$(ROOTFS_ISO9660_TMP_TARGET_DIR)/boot/grub/grub-eltorito.img
75endef
76endif
77
78ifeq ($(BR2_TARGET_ROOTFS_ISO9660_GRUB2)$(BR2_TARGET_ROOTFS_ISO9660_EFI_BOOTLOADER),yy)
79ROOTFS_ISO9660_DEPENDENCIES += grub2 host-dosfstools host-mtools
80ROOTFS_ISO9660_EFI_PARTITION = boot/fat.efi
81ROOTFS_ISO9660_EFI_PARTITION_PATH = $(ROOTFS_ISO9660_TMP_TARGET_DIR)/$(ROOTFS_ISO9660_EFI_PARTITION)
82ROOTFS_ISO9660_EFI_PARTITION_CONTENT = $(BINARIES_DIR)/efi-part
83ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH = \
84	$(ROOTFS_ISO9660_TMP_TARGET_DIR)/boot/grub/grub.cfg
85define ROOTFS_ISO9660_INSTALL_BOOTLOADER_EFI
86	rm -rf $(ROOTFS_ISO9660_EFI_PARTITION_PATH)
87	mkdir -p $(dir $(ROOTFS_ISO9660_EFI_PARTITION_PATH))
88	dd if=/dev/zero of=$(ROOTFS_ISO9660_EFI_PARTITION_PATH) bs=1M count=1
89	$(HOST_DIR)/sbin/mkfs.vfat $(ROOTFS_ISO9660_VFAT_OPTS) $(ROOTFS_ISO9660_EFI_PARTITION_PATH)
90	$(ROOTFS_ISO9660_FIX_TIME) $(ROOTFS_ISO9660_EFI_PARTITION_CONTENT)/*
91	$(HOST_DIR)/bin/mcopy -p -m -i $(ROOTFS_ISO9660_EFI_PARTITION_PATH) -s \
92		$(ROOTFS_ISO9660_EFI_PARTITION_CONTENT)/* ::/
93	$(ROOTFS_ISO9660_FIX_TIME) $(ROOTFS_ISO9660_EFI_PARTITION_PATH)
94endef
95endif
96
97ifeq ($(BR2_TARGET_ROOTFS_ISO9660_ISOLINUX),y)
98ROOTFS_ISO9660_DEPENDENCIES += syslinux
99ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH = \
100	$(ROOTFS_ISO9660_TMP_TARGET_DIR)/isolinux/isolinux.cfg
101ROOTFS_ISO9660_BOOT_IMAGE = isolinux/isolinux.bin
102define ROOTFS_ISO9660_INSTALL_BOOTLOADER_BIOS
103	$(INSTALL) -D -m 0644 $(BINARIES_DIR)/syslinux/* \
104		$(ROOTFS_ISO9660_TMP_TARGET_DIR)/isolinux/
105	$(INSTALL) -D -m 0644 $(HOST_DIR)/share/syslinux/ldlinux.c32 \
106		$(ROOTFS_ISO9660_TMP_TARGET_DIR)/isolinux/ldlinux.c32
107endef
108endif
109
110define ROOTFS_ISO9660_PREPARATION
111	$(INSTALL) -D -m 0644 $(ROOTFS_ISO9660_BOOT_MENU) \
112		$(ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH)
113	$(SED) "s%__KERNEL_PATH__%/boot/$(LINUX_IMAGE_NAME)%" \
114		$(ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH)
115	$(ROOTFS_ISO9660_INSTALL_BOOTLOADER_BIOS)
116	$(ROOTFS_ISO9660_INSTALL_BOOTLOADER_EFI)
117endef
118
119ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_PREPARATION
120
121define ROOTFS_ISO9660_DISABLE_EXTERNAL_INITRD
122	$(SED) '/__INITRD_PATH__/d'  $(ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH)
123endef
124
125# Copy the kernel to temporary filesystem
126define ROOTFS_ISO9660_COPY_KERNEL
127	$(INSTALL) -D -m 0644 $(LINUX_IMAGE_PATH) \
128		$(ROOTFS_ISO9660_TMP_TARGET_DIR)/boot/$(LINUX_IMAGE_NAME)
129endef
130
131ifeq ($(ROOTFS_ISO9660_USE_INITRD),YES)
132ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_COPY_KERNEL
133
134# If initramfs is used, disable loading the initrd as the rootfs is
135# already inside the kernel image. Otherwise, make sure a cpio is
136# generated and use it as the initrd.
137ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS),y)
138ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_DISABLE_EXTERNAL_INITRD
139else
140ROOTFS_ISO9660_DEPENDENCIES += rootfs-cpio
141define ROOTFS_ISO9660_COPY_INITRD
142	$(INSTALL) -D -m 0644 $(BINARIES_DIR)/rootfs.cpio$(ROOTFS_CPIO_COMPRESS_EXT) \
143		$(ROOTFS_ISO9660_TMP_TARGET_DIR)/boot/initrd
144	$(SED) "s%__INITRD_PATH__%/boot/initrd%" \
145		$(ROOTFS_ISO9660_BOOTLOADER_CONFIG_PATH)
146endef
147ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_COPY_INITRD
148endif
149
150else # ROOTFS_ISO9660_USE_INITRD
151ifeq ($(BR2_TARGET_ROOTFS_ISO9660_TRANSPARENT_COMPRESSION),y)
152# We must use the uncompressed kernel image
153ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_COPY_KERNEL
154endif
155
156ROOTFS_ISO9660_PRE_GEN_HOOKS += ROOTFS_ISO9660_DISABLE_EXTERNAL_INITRD
157
158endif # ROOTFS_ISO9660_USE_INITRD
159
160ROOTFS_ISO9660_OPTS += -J -R
161
162ROOTFS_ISO9660_OPTS_BIOS = \
163	-b $(ROOTFS_ISO9660_BOOT_IMAGE) \
164	-no-emul-boot \
165	-boot-load-size 4 \
166	-boot-info-table
167
168ROOTFS_ISO9660_OPTS_EFI = \
169	--efi-boot $(ROOTFS_ISO9660_EFI_PARTITION) \
170	-no-emul-boot
171
172ifeq ($(BR2_TARGET_ROOTFS_ISO9660_BIOS_BOOTLOADER)$(BR2_TARGET_ROOTFS_ISO9660_EFI_BOOTLOADER),yy)
173ROOTFS_ISO9660_OPTS += \
174	$(ROOTFS_ISO9660_OPTS_BIOS) \
175	-eltorito-alt-boot \
176	$(ROOTFS_ISO9660_OPTS_EFI)
177else ifeq ($(BR2_TARGET_ROOTFS_ISO9660_BIOS_BOOTLOADER),y)
178ROOTFS_ISO9660_OPTS += $(ROOTFS_ISO9660_OPTS_BIOS)
179else ifeq ($(BR2_TARGET_ROOTFS_ISO9660_EFI_BOOTLOADER),y)
180ROOTFS_ISO9660_OPTS += $(ROOTFS_ISO9660_OPTS_EFI)
181endif
182
183define ROOTFS_ISO9660_CMD
184	$(HOST_DIR)/bin/xorriso -as mkisofs \
185		$(ROOTFS_ISO9660_OPTS) \
186		-o $@ $(ROOTFS_ISO9660_TMP_TARGET_DIR)
187endef
188
189ifeq ($(BR2_TARGET_ROOTFS_ISO9660_HYBRID),y)
190define ROOTFS_ISO9660_GEN_HYBRID
191	$(HOST_DIR)/bin/isohybrid -t 0x96 $@
192endef
193
194ROOTFS_ISO9660_POST_GEN_HOOKS += ROOTFS_ISO9660_GEN_HYBRID
195endif
196
197$(eval $(rootfs))
198