From: Markus Stockhausen Date: Tue, 26 Jul 2022 11:44:48 +0000 (+0200) Subject: tools: Add gzip-libdeflate advanced compressor X-Git-Tag: v23.05.0-rc1~1414 X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=a51ca085bff2f8c6155f18bb767fe2d053bbc90d;p=openwrt%2Fopenwrt.git 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 [Switched to v1.15 and made it work with cmake] Signed-off-by: Olliver Schinagl Reviewed-by: Robert Marko Reviewed-by: Rosen Penev Reviewed-by: Sander Vanheule --- 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))