Index: boot/arch/arm64/meson.build
===================================================================
--- boot/arch/arm64/meson.build	(revision a73a1453b2b32910e3e981c2942288e99e7df640)
+++ 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 a73a1453b2b32910e3e981c2942288e99e7df640)
+++ 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 a73a1453b2b32910e3e981c2942288e99e7df640)
+++ 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
