aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/Makefile3
-rw-r--r--tools/upx/Makefile34
-rw-r--r--tools/upx/patches/100-lzmaonly.patch156
3 files changed, 192 insertions, 1 deletions
diff --git a/tools/Makefile b/tools/Makefile
index 413704d759..a21edd954c 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 0000000000..0a805f0a4a
--- /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 0000000000..a3098b4761
--- /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);
+