diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2014-11-05 15:47:39 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2014-11-05 15:47:39 +0100 |
commit | 592d35a47ce4ef2ffffd9805a1a534771882f3a6 (patch) | |
tree | edd5c958170dcafe0d931308a0de290abd1e7da5 /scripts | |
parent | 7b4cc54579f12cc6c9586e8c21e729dd220e7f45 (diff) | |
parent | ccb281647704d6857d3491dc71746d2f7ce38fa7 (diff) | |
download | barebox-592d35a47ce4ef2ffffd9805a1a534771882f3a6.tar.gz barebox-592d35a47ce4ef2ffffd9805a1a534771882f3a6.tar.xz |
Merge branch 'for-next/xz'
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/Makefile.lib | 31 | ||||
-rwxr-xr-x | scripts/xz_wrap.sh | 23 |
2 files changed, 54 insertions, 0 deletions
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib index 05387b235b..934ee07809 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib @@ -205,6 +205,37 @@ cmd_gzip = (cat $(filter-out FORCE,$^) | gzip -n -f -9 > $@) || \ %.gz: % $(call if_changed,gzip) +# XZ +# --------------------------------------------------------------------------- +# Use xzkern to compress the kernel image and xzmisc to compress other things. +# +# xzkern uses a big LZMA2 dictionary since it doesn't increase memory usage +# of the kernel decompressor. A BCJ filter is used if it is available for +# the target architecture. xzkern also appends uncompressed size of the data +# using size_append. The .xz format has the size information available at +# the end of the file too, but it's in more complex format and it's good to +# avoid changing the part of the boot code that reads the uncompressed size. +# Note that the bytes added by size_append will make the xz tool think that +# the file is corrupt. This is expected. +# +# xzmisc doesn't use size_append, so it can be used to create normal .xz +# files. xzmisc uses smaller LZMA2 dictionary than xzkern, because a very +# big dictionary would increase the memory usage too much in the multi-call +# decompression mode. A BCJ filter isn't used either. +quiet_cmd_xzkern = XZKERN $@ +cmd_xzkern = (cat $(filter-out FORCE,$^) | \ + sh $(srctree)/scripts/xz_wrap.sh && \ + $(call size_append, $(filter-out FORCE,$^))) > $@ || \ + (rm -f $@ ; false) + +quiet_cmd_xzmisc = XZMISC $@ +cmd_xzmisc = (cat $(filter-out FORCE,$^) | \ + xz --check=crc32 --lzma2=dict=1MiB) > $@ || \ + (rm -f $@ ; false) + +%.xzkern: % + $(call if_changed,xzkern) + # DTC # --------------------------------------------------------------------------- diff --git a/scripts/xz_wrap.sh b/scripts/xz_wrap.sh new file mode 100755 index 0000000000..7a2d372f48 --- /dev/null +++ b/scripts/xz_wrap.sh @@ -0,0 +1,23 @@ +#!/bin/sh +# +# This is a wrapper for xz to compress the kernel image using appropriate +# compression options depending on the architecture. +# +# Author: Lasse Collin <lasse.collin@tukaani.org> +# +# This file has been put into the public domain. +# You can do whatever you want with this file. +# + +BCJ= +LZMA2OPTS= + +case $SRCARCH in + x86) BCJ=--x86 ;; + powerpc) BCJ=--powerpc ;; + ia64) BCJ=--ia64; LZMA2OPTS=pb=4 ;; + arm) BCJ=--arm ;; + sparc) BCJ=--sparc ;; +esac + +exec xz --check=crc32 $BCJ --lzma2=$LZMA2OPTS,dict=32MiB |