Index: boot/arch/arm64/meson.build
===================================================================
--- boot/arch/arm64/meson.build	(revision 512579cdc3576abba5db37fb746b975a43f41b0b)
+++ boot/arch/arm64/meson.build	(revision 3706d93bc2f33da70a4c42cad5f98ed4784868f6)
@@ -33,4 +33,6 @@
 GRUB_LOADER = 'chainloader'
 
+# FIXME: The loader crashed without explanation when CONFIG_COMPRESSED_INIT is disabled.
+
 # Request binary output. The ARM64 port manually prepares the .text
 # section to look as a PE file than can be loaded on EFI systems.
Index: boot/grub/meson.build
===================================================================
--- boot/grub/meson.build	(revision 512579cdc3576abba5db37fb746b975a43f41b0b)
+++ boot/grub/meson.build	(revision 3706d93bc2f33da70a4c42cad5f98ed4784868f6)
@@ -1,3 +1,11 @@
-
+if GRUB_ARCH == 'pc'
+	MULTIBOOT_CMD = 'multiboot'
+	MODULE_CMD = 'module'
+	INSMODS = [ 'insmod vbe', 'insmod vga' ]
+elif GRUB_ARCH == 'efi'
+	MULTIBOOT_CMD = 'multiboot2'
+	MODULE_CMD = 'module2'
+	INSMODS = [ 'insmod efi_gop', 'insmod efi_uga' ]
+endif
 
 # TODO
@@ -46,14 +54,4 @@
 
 
-if GRUB_ARCH == 'pc'
-	MULTIBOOT_CMD = 'multiboot'
-	MODULE_CMD = 'module'
-	INSMODS = [ 'insmod vbe', 'insmod vga' ]
-elif GRUB_ARCH == 'efi'
-	MULTIBOOT_CMD = 'multiboot2'
-	MODULE_CMD = 'module2'
-	INSMODS = [ 'insmod efi_gop', 'insmod efi_uga' ]
-endif
-
 grub_cfg = configure_file(
 	input: 'grub.cfg.in',
Index: boot/meson.build
===================================================================
--- boot/meson.build	(revision 512579cdc3576abba5db37fb746b975a43f41b0b)
+++ boot/meson.build	(revision 3706d93bc2f33da70a4c42cad5f98ed4784868f6)
@@ -16,11 +16,22 @@
 		foreach bin : rd_init_binaries
 			if bin[1] == m
-				moddeps += bin[0]
+				_dep = bin[0]
+				_newname = run_command(basename, bin[1], check: true).stdout().strip()
+				_oldname = run_command(basename, bin[0].full_path(), check: true).stdout().strip()
+
+				if CONFIG_COMPRESSED_INIT
+					_dep = custom_target(_newname + '.gz',
+						output: _newname + '.gz',
+						input: _dep,
+						command: gzip,
+						capture: true,
+					)
+					_newname += '.gz'
+					_oldname = _newname
+				endif
+
+				moddeps += _dep
+				name_transform += 's:.*/@0@:@1@:;'.format(_oldname, _newname)
 				found = true
-
-				_oldname = run_command(basename, bin[0].full_path(), check: true).stdout().strip()
-				_newname = run_command(basename, bin[1], check: true).stdout().strip()
-
-				name_transform += 's:.*/@0@:@1@:;'.format(_oldname, _newname)
 				break
 			endif
Index: meson.build
===================================================================
--- meson.build	(revision 512579cdc3576abba5db37fb746b975a43f41b0b)
+++ meson.build	(revision 3706d93bc2f33da70a4c42cad5f98ed4784868f6)
@@ -52,9 +52,12 @@
 )
 
-gzip = generator(find_program('gzip',
-	arguments: [ '--no-name', '-9', '--stdout', '@INPUT@' ]
-	output: '@PLAINNAME@.gz',
-	capture: true,
-)
+# TODO: bug in Meson
+#gzip = generator(find_program('gzip'),
+#	arguments: [ '--no-name', '-9', '--stdout', '@INPUT@' ],
+#	output: '@PLAINNAME@.gz',
+#	capture: true,
+#)
+
+gzip = [ find_program('gzip'), '--no-name', '-9', '--stdout', '@INPUT@' ]
 
 # Tar's arguments make sure that the archive is reproducible.
@@ -165,4 +168,5 @@
 	'GRUB_ARCH',
 	'UIMAGE_OS',
+	'CONFIG_COMPRESSED_INIT',
 ]
 
