tools: Add gzip-libdeflate advanced compressor
authorMarkus Stockhausen <markus.stockhausen@gmx.de>
Tue, 26 Jul 2022 11:44:48 +0000 (13:44 +0200)
committerSander Vanheule <sander@svanheule.net>
Mon, 2 Jan 2023 09:15:37 +0000 (10:15 +0100)
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 <markus.stockhausen@gmx.de>
[Switched to v1.15 and made it work with cmake]
Signed-off-by: Olliver Schinagl <oliver@schinagl.nl>
Reviewed-by: Robert Marko <robimarko@gmail.com>
Reviewed-by: Rosen Penev <rosenp@gmail.com>
Reviewed-by: Sander Vanheule <sander@svanheule.net>
include/image-commands.mk
tools/Makefile
tools/libdeflate/Makefile [new file with mode: 0644]

index 074e40e4e834a317abde9cf033df01b478605c14..15084093d23943a3f1f317529a2212ed2fb715c3 100644 (file)
@@ -306,6 +306,11 @@ define Build/fit
        @mv $@.new $@
 endef
 
+define Build/libdeflate-gzip
+       $(STAGING_DIR_HOST)/bin/libdeflate-gzip -f -12 -c $@ $(1) > $@.new
+       @mv $@.new $@
+endef
+
 define Build/gzip
        $(STAGING_DIR_HOST)/bin/gzip -f -9n -c $@ $(1) > $@.new
        @mv $@.new $@
index 6300180d3f4a059ef6c14c672d0f4383ff3ab4c7..c7c7d007563045fb9e08ba1343310528b641b43c 100644 (file)
@@ -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
diff --git a/tools/libdeflate/Makefile b/tools/libdeflate/Makefile
new file mode 100644 (file)
index 0000000..d30a8ca
--- /dev/null
@@ -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))