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