aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Stockhausen <markus.stockhausen@gmx.de>2022-07-26 13:44:48 +0200
committerSander Vanheule <sander@svanheule.net>2023-01-02 10:15:37 +0100
commita51ca085bff2f8c6155f18bb767fe2d053bbc90d (patch)
tree1ecf0faa57f26f0fff8e7b97c0afcbc35bba5ba3
parentc9a7c00f809f6a0a49b600e0ea4f060dfcd0f11f (diff)
downloadupstream-a51ca085bff2f8c6155f18bb767fe2d053bbc90d.tar.gz
upstream-a51ca085bff2f8c6155f18bb767fe2d053bbc90d.tar.bz2
upstream-a51ca085bff2f8c6155f18bb767fe2d053bbc90d.zip
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 <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>
-rw-r--r--include/image-commands.mk5
-rw-r--r--tools/Makefile2
-rw-r--r--tools/libdeflate/Makefile31
3 files changed, 38 insertions, 0 deletions
diff --git a/include/image-commands.mk b/include/image-commands.mk
index 074e40e4e8..15084093d2 100644
--- a/include/image-commands.mk
+++ b/include/image-commands.mk
@@ -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 $@
diff --git a/tools/Makefile b/tools/Makefile
index 6300180d3f..c7c7d00756 100644
--- a/tools/Makefile
+++ b/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
diff --git a/tools/libdeflate/Makefile b/tools/libdeflate/Makefile
new file mode 100644
index 0000000000..d30a8ca674
--- /dev/null
+++ b/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))