Browse Source

tools: Add gzip-libdeflate advanced compressor

Several devices provide U-Boot versions with only gzip compressed kernel
support (e.g. Realtek switches). This compression method produces larger
images than lzma. To save space on flash and avoid going the hard way with
lzma-loader we can make use of enhanced gzip tool based on libdeflate
compression library from https://github.com/ebiggers/libdeflate. It
keeps 100% deflate/gzip compatibility while improving compression ratio.
The image can be unpacked by the default inflate routines inside U-Boot.

Signed-off-by: Markus Stockhausen <[email protected]>
[Switched to v1.15 and made it work with cmake]
Signed-off-by: Olliver Schinagl <[email protected]>
Reviewed-by: Robert Marko <[email protected]>
Reviewed-by: Rosen Penev <[email protected]>
Reviewed-by: Sander Vanheule <[email protected]>
Markus Stockhausen 3 years ago
parent
commit
a51ca085bf
3 changed files with 38 additions and 0 deletions
  1. 5 0
      include/image-commands.mk
  2. 2 0
      tools/Makefile
  3. 31 0
      tools/libdeflate/Makefile

+ 5 - 0
include/image-commands.mk

@@ -306,6 +306,11 @@ define Build/fit
 	@mv [email protected] $@
 endef
 
+define Build/libdeflate-gzip
+	$(STAGING_DIR_HOST)/bin/libdeflate-gzip -f -12 -c $@ $(1) > [email protected]
+	@mv [email protected] $@
+endef
+
 define Build/gzip
 	$(STAGING_DIR_HOST)/bin/gzip -f -9n -c $@ $(1) > [email protected]
 	@mv [email protected] $@

+ 2 - 0
tools/Makefile

@@ -36,6 +36,7 @@ tools-y += findutils
 tools-y += firmware-utils
 tools-y += flex
 tools-y += gengetopt
+tools-y += libdeflate
 tools-y += libressl
 tools-y += libtool
 tools-y += lzma
@@ -88,6 +89,7 @@ $(curdir)/genext2fs/compile := $(curdir)/libtool/compile
 $(curdir)/gengetopt/compile := $(curdir)/libtool/compile
 $(curdir)/gmp/compile := $(curdir)/libtool/compile
 $(curdir)/isl/compile := $(curdir)/gmp/compile
+$(curdir)/libdeflate/compile := $(curdir)/cmake/compile
 $(curdir)/libressl/compile := $(curdir)/pkgconf/compile
 $(curdir)/libtool/compile := $(curdir)/automake/compile $(curdir)/missing-macros/compile
 $(curdir)/lzma-old/compile := $(curdir)/zlib/compile

+ 31 - 0
tools/libdeflate/Makefile

@@ -0,0 +1,31 @@
+#
+# Copyright (C) 2022 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=libdeflate
+PKG_VERSION:=1.15
+PKG_RELEASE:=1
+
+PKG_SOURCE_URL:=https://github.com/ebiggers/libdeflate.git
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_VERSION:=v$(PKG_VERSION)
+PKG_MIRROR_HASH:=122feff4543541b547dc89e832adf262c81911ae1acbccdc591f0353a85b600a
+
+include $(INCLUDE_DIR)/host-build.mk
+include $(INCLUDE_DIR)/cmake.mk
+
+define Host/Install
+	$(INSTALL_BIN) $(HOST_BUILD_DIR)/programs/libdeflate-gzip $(STAGING_DIR_HOST)/bin/
+	$(LN) libdeflate-gzip $(STAGING_DIR_HOST)/bin/libdeflate-gunzip
+endef
+
+define Host/Clean
+	rm -f $(STAGING_DIR_HOST)/bin/libdeflate-gzip
+	rm -f $(STAGING_DIR_HOST)/bin/libdeflate-gunzip
+endef
+
+$(eval $(call HostBuild))