diff options
| -rw-r--r-- | tools/Makefile | 3 | ||||
| -rw-r--r-- | tools/upx/Makefile | 34 | ||||
| -rw-r--r-- | tools/upx/patches/100-lzmaonly.patch | 156 | 
3 files changed, 192 insertions, 1 deletions
| diff --git a/tools/Makefile b/tools/Makefile index 413704d75..a21edd954 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -1,5 +1,5 @@  # -# Copyright (C) 2006-2010 OpenWrt.org +# Copyright (C) 2006-2011 OpenWrt.org  #  # This is free software, licensed under the GNU General Public License v2.  # See /LICENSE for more information. @@ -18,6 +18,7 @@ tools-y += sstrip ipkg-utils genext2fs e2fsprogs mtd-utils mkimage  tools-y += firmware-utils patch-cmdline quilt yaffs2 flock padjffs2  tools-y += mm-macros xorg-macros xfce-macros missing-macros xz cmake  tools-$(CONFIG_TARGET_orion_generic) += wrt350nv2-builder upslug2 +tools-$(CONFIG_powerpc) += upx  tools-$(CONFIG_TARGET_x86) += qemu  ifneq ($(CONFIG_TARGET_ar71xx),)  tools-y += lzma-old squashfs  diff --git a/tools/upx/Makefile b/tools/upx/Makefile new file mode 100644 index 000000000..0a805f0a4 --- /dev/null +++ b/tools/upx/Makefile @@ -0,0 +1,34 @@ +# +# Copyright (C) 2011 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:=upx +PKG_VERSION:=3.07 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-src.tar.bz2 +PKG_SOURCE_URL:=@SF/upx +PKG_MD5SUM:=8186ab103288242f7e8ecad1acd4af03 +PKG_CAT:=bzcat + +HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/$(PKG_NAME)-$(PKG_VERSION)-src + +include $(INCLUDE_DIR)/host-build.mk + +define Host/Compile +	rm -f $(HOST_BUILD_DIR)/src/.depend +	$(MAKE) UPX_LZMADIR="$(BUILD_DIR_HOST)/lzma-4.65" -C $(HOST_BUILD_DIR)/src +endef + +define Host/Install +	$(CP) $(HOST_BUILD_DIR)/src/upx.out $(STAGING_DIR_HOST)/bin/upx +endef + +define Host/Clean +	rm -f $(STAGING_DIR_HOST)/bin/upx +endef + +$(eval $(call HostBuild)) diff --git a/tools/upx/patches/100-lzmaonly.patch b/tools/upx/patches/100-lzmaonly.patch new file mode 100644 index 000000000..a3098b476 --- /dev/null +++ b/tools/upx/patches/100-lzmaonly.patch @@ -0,0 +1,156 @@ +--- a/src/compress.cpp ++++ b/src/compress.cpp +@@ -41,7 +41,7 @@ +     if (len == 0) +         return adler; +     assert(buf != NULL); +-#if 0 ++#if !(WITH_UCL) +     return adler32(adler, (const Bytef *) buf, len); // zlib + #elif (WITH_UCL) +     return ucl_adler32(adler, (const ucl_bytep) buf, len); +--- a/src/conf.h ++++ b/src/conf.h +@@ -179,7 +179,7 @@ + #  undef __unix + #endif +  +-#if !defined(WITH_UCL) ++#if defined(WITH_UCL) + #  define WITH_UCL 1 + #endif + #if 0 && !defined(WITH_LZMA) +@@ -645,7 +645,11 @@ + }; +  +  ++#if (WITH_UCL) + struct ucl_compress_config_t : public REAL_ucl_compress_config_t ++#else ++struct ucl_compress_config_t ++#endif + { +     void reset() { memset(this, 0xff, sizeof(*this)); } + }; +@@ -697,7 +701,9 @@ +  + struct ucl_compress_result_t + { ++#if (WITH_UCL) +     ucl_uint result[16]; ++#endif +  +     void reset() { memset(this, 0, sizeof(*this)); } + }; +--- a/src/main.cpp ++++ b/src/main.cpp +@@ -618,7 +618,9 @@ +         opt->method = -1; +         opt->all_filters = true; +         opt->filter = -1; ++#if (WITH_UCL) +         opt->crp.crp_ucl.m_size = 999999; ++#endif +         /* fallthrough */ +     case 900:                               // --best +         if (!set_method(-1, 10)) +@@ -709,6 +711,7 @@ +         opt->exact = true; +         break; +     // compression runtime parameters ++#if (WITH_UCL) +     case 801: +         getoptvar(&opt->crp.crp_ucl.c_flags, 0, 3, arg); +         break; +@@ -730,6 +733,7 @@ +     case 807: +         getoptvar(&opt->crp.crp_ucl.m_size, 10000u, 999999u, arg); +         break; ++#endif +     case 811: +         getoptvar(&opt->crp.crp_lzma.pos_bits, arg); +         break; +--- a/src/Makefile ++++ b/src/Makefile +@@ -57,7 +57,10 @@ + INCLUDES += -I$(UPX_UCLDIR)/include + LIBS += $(addprefix -L,$(dir $(wildcard $(UPX_UCLDIR)/libucl$(libext) $(UPX_UCLDIR)/src/.libs/libucl$(libext)))) + endif +-LIBS += -lucl -lz ++ifeq ($(WITH_UCL),1) ++LIBS += -lucl ++endif ++LIBS += -lz + # you should set envvar UPX_LZMADIR to point to your unpacked LZMA SDK + include $(top_srcdir)/src/stub/src/c/Makevars.lzma + ifneq ($(UPX_LZMA_VERSION),) +--- a/src/packer.cpp ++++ b/src/packer.cpp +@@ -199,6 +199,7 @@ +     if (cconf_parm) +         cconf = *cconf_parm; +     // cconf options ++#if (WITH_UCL) +     if (M_IS_NRV2B(ph.method) || M_IS_NRV2D(ph.method) || M_IS_NRV2E(ph.method)) +     { +         if (opt->crp.crp_ucl.c_flags != -1) +@@ -216,6 +217,7 @@ +             step = 0; + #endif +     } ++#endif +     if (M_IS_LZMA(ph.method)) +     { +         oassign(cconf.conf_lzma.pos_bits, opt->crp.crp_lzma.pos_bits); +@@ -250,6 +252,7 @@ +     if (r != UPX_E_OK) +         throwInternalError("compression failed"); +  ++#if (WITH_UCL) +     if (M_IS_NRV2B(ph.method) || M_IS_NRV2D(ph.method) || M_IS_NRV2E(ph.method)) +     { +         const ucl_uint *res = ph.compress_result.result_ucl.result; +@@ -267,6 +270,7 @@ +             assert(cconf.conf_ucl.max_match == 0 || cconf.conf_ucl.max_match >= ph.max_match_found); +         } +     } ++#endif +  +     //printf("\nPacker::compress: %d/%d: %7d -> %7d\n", ph.method, ph.level, ph.u_len, ph.c_len); +     if (!checkCompressionRatio(ph.u_len, ph.c_len)) +--- a/src/p_exe.cpp ++++ b/src/p_exe.cpp +@@ -506,7 +506,9 @@ +     Filter ft(ph.level); +     // compress (max_match = 8192) +     upx_compress_config_t cconf; cconf.reset(); ++#if (WITH_UCL) +     cconf.conf_ucl.max_match = MAXMATCH; ++#endif +     cconf.conf_lzma.max_num_probs = 1846 + (768 << 4); // ushort: ~28 KiB stack +     compressWithFilters(&ft, 32, &cconf); +  +--- a/src/p_ps1.cpp ++++ b/src/p_ps1.cpp +@@ -499,7 +499,9 @@ +  +     // compress (max_match = 65535) +     upx_compress_config_t cconf; cconf.reset(); ++#if (WITH_UCL) +     cconf.conf_ucl.max_match = 65535; ++#endif +     cconf.conf_lzma.max_num_probs = 1846 + (768 << 4); // ushort: ~28 KiB stack +     compressWithFilters(&ft, sa_cnt, &cconf); +  +--- a/src/p_tos.cpp ++++ b/src/p_tos.cpp +@@ -506,7 +506,9 @@ +     Filter ft(ph.level); +     // compress (max_match = 65535) +     upx_compress_config_t cconf; cconf.reset(); ++#if (WITH_UCL) +     cconf.conf_ucl.max_match = 65535; ++#endif +     cconf.conf_lzma.max_num_probs = 1846 + (768 << 4); // ushort: ~28 KiB stack +     compressWithFilters(&ft, 512, &cconf); +  | 
