浏览代码

add support for lz4 compressed kernel and initramfs

Waldemar Brodkorb 11 年之前
父节点
当前提交
8b2ea5fd6a

+ 9 - 0
mk/image.mk

@@ -149,6 +149,15 @@ ifeq ($(ADK_KERNEL_COMP_XZ),y)
 		echo "CONFIG_XZ_DEC_SPARC=n" >> ${LINUX_DIR}/.config
 		echo "CONFIG_XZ_DEC_TEST=n" >> ${LINUX_DIR}/.config
 endif
+ifeq ($(ADK_KERNEL_COMP_LZ4),y)
+		echo "CONFIG_RD_XZ=n" >> ${LINUX_DIR}/.config
+		echo "CONFIG_RD_BZIP2=n" >> ${LINUX_DIR}/.config
+		echo "CONFIG_RD_GZIP=n" >> ${LINUX_DIR}/.config
+		echo "CONFIG_RD_LZO=n" >> ${LINUX_DIR}/.config
+		echo "CONFIG_RD_LZ4=y" >> ${LINUX_DIR}/.config
+		echo "CONFIG_RD_LZMA=n" >> ${LINUX_DIR}/.config
+		echo "CONFIG_INITRAMFS_COMPRESSION_LZ4=y" >> ${LINUX_DIR}/.config
+endif
 ifeq ($(ADK_KERNEL_COMP_LZMA),y)
 		echo "CONFIG_RD_XZ=n" >> ${LINUX_DIR}/.config
 		echo "CONFIG_RD_BZIP2=n" >> ${LINUX_DIR}/.config

+ 9 - 0
package/lz4/Makefile

@@ -30,8 +30,17 @@ $(eval $(call HOST_template,LZ4,lz4,${PKG_VERSION}-${PKG_RELEASE}))
 $(eval $(call PKG_template,LZ4,lz4,${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
 $(eval $(call PKG_template,LIBLZ4,liblz4,${PKG_VERSION}-${PKG_RELEASE},${PKGSS_LIBLZ4},${PKGSD_LIBLZ4},${PKGSC_LIBLZ4},${PKG_OPTS}))
 
+HOST_STYLE:=		manual
 CONFIG_STYLE:=		manual
 
+host-build:
+	(cd ${WRKBUILD} && env ${HOST_MAKE_ENV} ${MAKE} -f ${MAKE_FILE} \
+		${HOST_MAKE_FLAGS} ${HOST_ALL_TARGET}) $(MAKE_TRACE)
+
+lz4-hostinstall:
+	cd ${WRKBUILD} && env ${HOST_MAKE_ENV} ${MAKE} -f ${MAKE_FILE} \
+		${HOST_FAKE_FLAGS} DESTDIR='${STAGING_HOST_DIR}' ${HOST_INSTALL_TARGET} $(MAKE_TRACE)
+
 lz4-install:
 	${INSTALL_DIR} ${IDIR_LZ4}/usr/bin
 	${CP} ${WRKINST}/usr/bin/* ${IDIR_LZ4}/usr/bin

+ 0 - 26
package/lz4/patches/patch-Makefile.orig

@@ -1,26 +0,0 @@
---- lz4-r118.orig/Makefile	2014-06-26 11:36:13.000000000 +0200
-+++ lz4-r118/Makefile	2014-06-30 07:41:17.000000000 +0200
-@@ -55,19 +55,10 @@ else
- EXT =
- endif
- 
--# OS X linker doesn't support -soname, and use different extension
--# see : https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/DynamicLibraryDesignGuidelines.html
--ifeq ($(shell uname), Darwin)
--	SONAME_FLAGS =
--	SHARED_EXT = dylib
--	SHARED_EXT_MAJOR = $(LIBVER_MAJOR).$(SHARED_EXT)
--	SHARED_EXT_VER = $(LIBVER).$(SHARED_EXT)
--else
--	SONAME_FLAGS = -Wl,-soname=liblz4.$(SHARED_EXT).$(LIBVER_MAJOR)
--	SHARED_EXT = so
--	SHARED_EXT_MAJOR = $(SHARED_EXT).$(LIBVER_MAJOR)
--	SHARED_EXT_VER = $(SHARED_EXT).$(LIBVER)
--endif
-+SONAME_FLAGS = -Wl,-soname=liblz4.$(SHARED_EXT).$(LIBVER_MAJOR)
-+SHARED_EXT = so
-+SHARED_EXT_MAJOR = $(SHARED_EXT).$(LIBVER_MAJOR)
-+SHARED_EXT_VER = $(SHARED_EXT).$(LIBVER)
- 
- TEXT = lz4.c lz4.h lz4hc.c lz4hc.h \
- 	lz4_format_description.txt Makefile NEWS LICENSE README.md \

+ 0 - 22
package/lz4/patches/patch-programs_Makefile.orig

@@ -1,22 +0,0 @@
---- lz4-r118.orig/programs/Makefile	2014-06-26 11:36:13.000000000 +0200
-+++ lz4-r118/programs/Makefile	2014-06-30 07:44:45.000000000 +0200
-@@ -33,8 +33,8 @@
- RELEASE=r118
- DESTDIR=
- PREFIX=/usr
--CC:=$(CC)
--CFLAGS+= -std=c99 -O3 -Wall -W -Wundef -DLZ4_VERSION=\"$(RELEASE)\"
-+CC?=$(CC)
-+CFLAGS+= -std=c99 -Wall -W -Wundef -DLZ4_VERSION=\"$(RELEASE)\"
- FLAGS= -I.. $(CFLAGS)
- 
- BINDIR=$(PREFIX)/bin
-@@ -67,7 +67,7 @@ endif
- 
- default: lz4 lz4c
- 
--all: lz4 lz4c lz4c32 fullbench fullbench32 fuzzer fuzzer32 datagen
-+all: lz4 lz4c
- 
- lz4: $(LZ4DIR)/lz4.c $(LZ4DIR)/lz4hc.c bench.c xxhash.c lz4io.c lz4cli.c
- 	$(CC)      $(FLAGS) -DDISABLE_LZ4C_LEGACY_OPTIONS $^ -o $@$(EXT)

+ 6 - 0
scripts/scan-tools.sh

@@ -285,6 +285,11 @@ if ! which lzma >/dev/null 2>&1; then
 	host_build_lzma=1
 fi
 
+host_build_lz4=0
+if ! which lz4c >/dev/null 2>&1; then
+	host_build_lz4=1
+fi
+
 host_build_lzop=0
 if ! which lzop >/dev/null 2>&1; then
 	host_build_lzop=1
@@ -317,6 +322,7 @@ if [ $host_build_ccache -eq 1 ];then printf "\t%s\n" "select ADK_HOST_BUILD_CCAC
 if [ $host_build_cdrtools -eq 1 ];then printf "\t%s\n" "select ADK_HOST_BUILD_CDRTOOLS if ADK_HOST_NEED_CDRTOOLS" >> $topdir/target/config/Config.in.prereq ;fi
 if [ $host_build_genext2fs -eq 1 ];then printf "\t%s\n" "select ADK_HOST_BUILD_GENEXT2FS if ADK_HOST_NEED_GENEXT2FS" >> $topdir/target/config/Config.in.prereq ;fi
 if [ $host_build_lzma -eq 1 ];then printf "\t%s\n" "select ADK_HOST_BUILD_LZMA if ADK_HOST_NEED_LZMA" >> $topdir/target/config/Config.in.prereq ;fi
+if [ $host_build_lz4 -eq 1 ];then printf "\t%s\n" "select ADK_HOST_BUILD_LZ4 if ADK_HOST_NEED_LZ4" >> $topdir/target/config/Config.in.prereq ;fi
 if [ $host_build_lzop -eq 1 ];then printf "\t%s\n" "select ADK_HOST_BUILD_LZOP if ADK_HOST_NEED_LZOP" >> $topdir/target/config/Config.in.prereq ;fi
 if [ $host_build_qemu -eq 1 ];then printf "\t%s\n" "select ADK_HOST_BUILD_QEMU if ADK_HOST_NEED_QEMU" >> $topdir/target/config/Config.in.prereq ;fi
 

+ 9 - 0
target/config/Config.in.tools

@@ -98,6 +98,14 @@ config ADK_HOST_BUILD_GENEXT2FS
 	boolean
 	default n
 
+config ADK_HOST_NEED_LZ4
+	boolean
+	default n
+
+config ADK_HOST_BUILD_LZ4
+	boolean
+	default n
+
 config ADK_HOST_NEED_LZMA
 	boolean
 	default n
@@ -179,6 +187,7 @@ config ADK_COMPRESSION_TOOL
 	default "gzip -n9" if ADK_KERNEL_INITRAMFS_COMPRESSION_GZIP
 	default "bzip2" if ADK_KERNEL_INITRAMFS_COMPRESSION_BZIP2
 	default "xz -v --check=crc32 --lzma2=dict=1MiB" if ADK_KERNEL_INITRAMFS_COMPRESSION_XZ
+	default "lz4c -l" if ADK_KERNEL_INITRAMFS_COMPRESSION_LZ4
 	default "lzma -9" if ADK_KERNEL_INITRAMFS_COMPRESSION_LZMA
 	default "lzop" if ADK_KERNEL_INITRAMFS_COMPRESSION_LZO
 	default "gzip -n9"

+ 18 - 0
target/linux/config/Config.in.kernel

@@ -17,6 +17,10 @@ config ADK_KERNEL_INITRAMFS_COMPRESSION_XZ
 	select ADK_HOST_NEED_XZ
 	boolean
 
+config ADK_KERNEL_INITRAMFS_COMPRESSION_LZ4
+	select ADK_HOST_NEED_LZ4
+	boolean
+
 config ADK_KERNEL_INITRAMFS_COMPRESSION_LZMA
 	select ADK_HOST_NEED_LZMA
 	boolean
@@ -44,6 +48,12 @@ config ADK_KERNEL_RD_BZIP2
 config ADK_KERNEL_KERNEL_BZIP2
 	boolean
 
+config ADK_KERNEL_RD_LZ4
+	boolean
+
+config ADK_KERNEL_KERNEL_LZ4
+	boolean
+
 config ADK_KERNEL_RD_LZMA
 	boolean
 
@@ -137,6 +147,14 @@ config ADK_KERNEL_COMP_XZ
 	select ADK_KERNEL_KERNEL_XZ
 	select ADK_KERNEL_INITRAMFS_COMPRESSION_XZ
 
+config ADK_KERNEL_COMP_LZ4
+	prompt "use LZ4 compression"
+	boolean
+	select ADK_KERNEL_RD_LZ4
+	select ADK_KERNEL_KERNEL_LZ4
+	select ADK_KERNEL_INITRAMFS_COMPRESSION_LZ4
+	depends on ADK_LINUX_X86 || ADK_LINUX_ARM
+
 config ADK_KERNEL_COMP_LZMA
 	prompt "use LZMA compression"
 	boolean

+ 16 - 0
target/linux/patches/3.15.2/lz4.patch

@@ -0,0 +1,16 @@
+diff -Nur linux-3.15.2.orig/usr/Kconfig linux-3.15.2/usr/Kconfig
+--- linux-3.15.2.orig/usr/Kconfig	2014-06-26 21:17:52.000000000 +0200
++++ linux-3.15.2/usr/Kconfig	2014-06-30 08:29:00.000000000 +0200
+@@ -174,4 +174,12 @@
+ 	  size is about 10% bigger than gzip; however its speed
+ 	  (both compression and decompression) is the fastest.
+ 
++config INITRAMFS_COMPRESSION_LZ4
++	bool "LZ4"
++	depends on RD_LZ4
++	help
++	  Its compression ratio is the poorest among the choices. The kernel
++	  size is about 10% bigger than gzip; however its speed
++	  (both compression and decompression) is the fastest.
++
+ endchoice