[LEDE-DEV] [PATCH 1/5] tools/zlib: move zlib build to tools
Lucian Cristian
luci at createc.ro
Tue Apr 17 10:16:21 PDT 2018
On 16.04.2018 01:53, Hauke Mehrtens wrote:
> This allows us to link the other tools against our libz and we do not
> need the system zlib any more.
>
> Only the static linked library is copied to the staging directory so we
> have a statically linked library on all systems and not only on Linux.
> This also adds the new dependencies of the packages which are depending
> on zlib.
>
> Signed-off-by: Hauke Mehrtens <hauke at hauke-m.de>
> ---
> include/prereq-build.mk | 5 ----
> package/libs/zlib/Makefile | 2 --
> tools/Makefile | 14 +++++----
> tools/lzma-old/Makefile | 2 ++
> tools/lzma-old/patches/120-add-cflags.patch | 11 +++++++
> tools/make-ext4fs/Makefile | 8 +----
> tools/make-ext4fs/patches/100-add-ldflags.patch | 11 +++++++
> tools/squashfs4/Makefile | 2 +-
> tools/zlib/Makefile | 40 +++++++++++++++++++++++++
> 9 files changed, 75 insertions(+), 20 deletions(-)
> create mode 100644 tools/lzma-old/patches/120-add-cflags.patch
> create mode 100644 tools/make-ext4fs/patches/100-add-ldflags.patch
> create mode 100644 tools/zlib/Makefile
>
> diff --git a/include/prereq-build.mk b/include/prereq-build.mk
> index 6917716342..5b9a7e049d 100644
> --- a/include/prereq-build.mk
> +++ b/include/prereq-build.mk
> @@ -76,11 +76,6 @@ else
> zlib_link_flags := -lz
> endif
>
> -$(eval $(call TestHostCommand,zlib, \
> - Please install a static zlib. (Missing libz.a or zlib.h), \
> - echo 'int main(int argc, char **argv) { gzdopen(0, "rb"); return 0; }' | \
> - gcc -include zlib.h -x c -o $(TMP_DIR)/a.out - $(zlib_link_flags)))
> -
> $(eval $(call TestHostCommand,perl-thread-queue, \
> Please install the Perl Thread::Queue module, \
> perl -MThread::Queue -e 1))
> diff --git a/package/libs/zlib/Makefile b/package/libs/zlib/Makefile
> index a7c61f7dd0..4a2a0e53b0 100644
> --- a/package/libs/zlib/Makefile
> +++ b/package/libs/zlib/Makefile
> @@ -21,7 +21,6 @@ PKG_CPE_ID:=cpe:/a:gnu:zlib
>
> PKG_CONFIG_DEPENDS:= CONFIG_ZLIB_OPTIMIZE_SPEED
>
> -include $(INCLUDE_DIR)/host-build.mk
> include $(INCLUDE_DIR)/package.mk
> include $(INCLUDE_DIR)/cmake.mk
>
> @@ -95,6 +94,5 @@ define Package/zlib-dev/install
> $(1)/usr/lib/pkgconfig/
> endef
>
> -$(eval $(call HostBuild))
> $(eval $(call BuildPackage,zlib))
> $(eval $(call BuildPackage,zlib-dev))
> diff --git a/tools/Makefile b/tools/Makefile
> index 50bd552d75..8dfab9892b 100644
> --- a/tools/Makefile
> +++ b/tools/Makefile
> @@ -22,7 +22,7 @@ ifneq ($(CONFIG_SDK)$(CONFIG_PACKAGE_kmod-b43)$(CONFIG_PACKAGE_b43legacy-firmwar
> endif
>
> tools-$(BUILD_TOOLCHAIN) += gmp mpfr mpc libelf expat
> -tools-y += m4 libtool autoconf automake flex bison pkg-config mklibs
> +tools-y += m4 libtool autoconf automake flex bison pkg-config mklibs zlib
> tools-y += sstrip make-ext4fs e2fsprogs mtd-utils mkimage
> tools-y += firmware-utils patch-image quilt padjffs2
> tools-y += mm-macros missing-macros cmake scons bc findutils gengetopt patchelf
> @@ -43,16 +43,16 @@ $(curdir)/bison/compile := $(curdir)/flex/compile
> $(curdir)/flex/compile := $(curdir)/libtool/compile
> $(curdir)/libtool/compile := $(curdir)/m4/compile $(curdir)/autoconf/compile $(curdir)/automake/compile $(curdir)/missing-macros/compile
> $(curdir)/squashfs/compile := $(curdir)/lzma-old/compile
> -$(curdir)/squashfs4/compile := $(curdir)/xz/compile
> +$(curdir)/squashfs4/compile := $(curdir)/xz/compile $(curdir)/zlib/compile
> $(curdir)/quilt/compile := $(curdir)/autoconf/compile $(curdir)/findutils/compile
> $(curdir)/autoconf/compile := $(curdir)/m4/compile
> $(curdir)/automake/compile := $(curdir)/m4/compile $(curdir)/autoconf/compile $(curdir)/pkg-config/compile $(curdir)/xz/compile
> $(curdir)/gmp/compile := $(curdir)/libtool/compile
> $(curdir)/mpc/compile := $(curdir)/mpfr/compile $(curdir)/gmp/compile
> $(curdir)/mpfr/compile := $(curdir)/gmp/compile
> -$(curdir)/mtd-utils/compile := $(curdir)/e2fsprogs/compile
> +$(curdir)/mtd-utils/compile := $(curdir)/e2fsprogs/compile $(curdir)/zlib/compile
> $(curdir)/mklibs/compile := $(curdir)/libtool/compile
> -$(curdir)/qemu/compile := $(curdir)/e2fsprogs/compile
> +$(curdir)/qemu/compile := $(curdir)/e2fsprogs/compile $(curdir)/zlib/compile
> $(curdir)/upslug2/compile := $(curdir)/libtool/compile
> $(curdir)/mm-macros/compile := $(curdir)/libtool/compile
> $(curdir)/missing-macros/compile := $(curdir)/autoconf/compile
> @@ -69,8 +69,12 @@ $(curdir)/patchelf/compile := $(curdir)/libtool/compile
> $(curdir)/dosfstools/compile := $(curdir)/autoconf/compile $(curdir)/automake/compile
> $(curdir)/libressl/compile := $(curdir)/pkg-config/compile
> $(curdir)/mkimage/compile += $(curdir)/libressl/compile
> -$(curdir)/firmware-utils/compile += $(curdir)/libressl/compile
> +$(curdir)/firmware-utils/compile += $(curdir)/libressl/compile $(curdir)/zlib/compile
> $(curdir)/cmake/compile += $(curdir)/libressl/compile
> +$(curdir)/zlib/compile := $(curdir)/cmake/compile
> +$(curdir)/wrt350nv2-builder/compile := $(curdir)/zlib/compile
> +$(curdir)/lzma-old/compile := $(curdir)/zlib/compile
> +$(curdir)/make-ext4fs/compile := $(curdir)/zlib/compile
>
> ifneq ($(HOST_OS),Linux)
> tools-y += coreutils
> diff --git a/tools/lzma-old/Makefile b/tools/lzma-old/Makefile
> index 5982eab5db..5204127a80 100644
> --- a/tools/lzma-old/Makefile
> +++ b/tools/lzma-old/Makefile
> @@ -21,7 +21,9 @@ LIB_DIR=$(HOST_BUILD_DIR)/C/7zip/Compress/LZMA_Lib
> ALONE_DIR=$(HOST_BUILD_DIR)/C/7zip/Compress/LZMA_Alone
>
> define Host/Compile
> + +$(HOST_MAKE_VARS) \
> $(MAKE) -C $(LIB_DIR)
> + +$(HOST_MAKE_VARS) \
> $(MAKE) -f makefile.gcc -C $(ALONE_DIR)
> endef
>
> diff --git a/tools/lzma-old/patches/120-add-cflags.patch b/tools/lzma-old/patches/120-add-cflags.patch
> new file mode 100644
> index 0000000000..9022e7cd27
> --- /dev/null
> +++ b/tools/lzma-old/patches/120-add-cflags.patch
> @@ -0,0 +1,11 @@
> +--- a/C/7zip/Compress/LZMA_Lib/makefile
> ++++ b/C/7zip/Compress/LZMA_Lib/makefile
> +@@ -2,7 +2,7 @@ PROG = liblzma.a
> + CXX = g++ -O3 -Wall
> + AR = ar
> + RM = rm -f
> +-CFLAGS = -c -I ../../../
> ++CFLAGS += -c -I ../../../
> +
> + OBJS = \
> + ZLib.o \
> diff --git a/tools/make-ext4fs/Makefile b/tools/make-ext4fs/Makefile
> index f140101c8e..97f9e6369c 100644
> --- a/tools/make-ext4fs/Makefile
> +++ b/tools/make-ext4fs/Makefile
> @@ -17,13 +17,7 @@ PKG_MIRROR_HASH:=d7ccd5e426b1d15331ff000a37dc15161f6eef594453e970fd584fcde5a2507
>
> include $(INCLUDE_DIR)/host-build.mk
>
> -ifeq ($(HOST_OS),Linux)
> - MAKE_STATIC := STATIC=1
> -endif
> -
> -define Host/Compile
> - $(MAKE) -C $(HOST_BUILD_DIR) make_ext4fs $(MAKE_STATIC)
> -endef
> +HOST_MAKE_FLAGS += STATIC=1
>
> define Host/Install
> $(INSTALL_BIN) $(HOST_BUILD_DIR)/make_ext4fs $(STAGING_DIR_HOST)/bin/
> diff --git a/tools/make-ext4fs/patches/100-add-ldflags.patch b/tools/make-ext4fs/patches/100-add-ldflags.patch
> new file mode 100644
> index 0000000000..d9ce47bb80
> --- /dev/null
> +++ b/tools/make-ext4fs/patches/100-add-ldflags.patch
> @@ -0,0 +1,11 @@
> +--- a/Makefile
> ++++ b/Makefile
> +@@ -27,7 +27,7 @@ OBJ := \
> + $(CC) $(CFLAGS) -c -o $@ $^
> +
> + make_ext4fs: $(OBJ) libsparse/libsparse.a
> +- $(CC) -o $@ $^ $(ZLIB)
> ++ $(CC) $(LDFLAGS)-o $@ $^ $(ZLIB)
> +
> + libsparse/libsparse.a:
> + $(MAKE) -C libsparse/ libsparse.a
> diff --git a/tools/squashfs4/Makefile b/tools/squashfs4/Makefile
> index e9e2b7ca9a..409b1b5a23 100644
> --- a/tools/squashfs4/Makefile
> +++ b/tools/squashfs4/Makefile
> @@ -20,8 +20,8 @@ HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/squashfs$(PKG_VERSION)
> include $(INCLUDE_DIR)/host-build.mk
>
> define Host/Compile
> + +$(HOST_MAKE_VARS) \
> $(MAKE) -C $(HOST_BUILD_DIR)/squashfs-tools \
> - CC="$(HOSTCC)" \
> XZ_SUPPORT=1 \
> LZMA_XZ_SUPPORT=1 \
> XATTR_SUPPORT= \
> diff --git a/tools/zlib/Makefile b/tools/zlib/Makefile
> new file mode 100644
> index 0000000000..2746d95b72
> --- /dev/null
> +++ b/tools/zlib/Makefile
> @@ -0,0 +1,40 @@
> +#
> +# Copyright (C) 2006-2013 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:=zlib
> +PKG_VERSION:=1.2.11
> +PKG_RELEASE:=1
> +
> +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
> +PKG_SOURCE_URL:=@SF/libpng http://www.zlib.net
> +PKG_HASH:=4ff941449631ace0d4d203e3483be9dbc9da454084111f97ea0a2114e19bf066
> +
> +PKG_LICENSE:=Zlib
> +PKG_LICENSE_FILES:=README
> +PKG_CPE_ID:=cpe:/a:gnu:zlib
> +
> +include $(INCLUDE_DIR)/host-build.mk
> +include $(INCLUDE_DIR)/cmake.mk
> +
> +
> +define Host/Install
> + $(CP) $(HOST_BUILD_DIR)/libz.a $(STAGING_DIR_HOST)/lib/
> + $(CP) $(HOST_BUILD_DIR)/zconf.h $(STAGING_DIR_HOST)/include/
> + $(CP) $(HOST_BUILD_DIR)/zlib.h $(STAGING_DIR_HOST)/include/
> + $(CP) $(HOST_BUILD_DIR)/zlib.pc $(STAGING_DIR_HOST)/lib/pkgconfig/
> +endef
> +
> +define Host/Clean
> + rm -f $(STAGING_DIR_HOST)/lib/libz.a
> + rm -f $(STAGING_DIR_HOST)/include/zconf.h
> + rm -f $(STAGING_DIR_HOST)/include/zlib.h
> + rm -f $(STAGING_DIR_HOST)/lib/pkgconfig//zlib.pc
> +endef
> +
> +$(eval $(call HostBuild))
I tested the patch series because I have a linking problem with zlib and
python an I wanted to see if this fixes it (it does not) but on i686 I
have this error
make[8]: Entering directory
'/home/build/proxy/build_dir/hostpkg/glib-2.56.1/gio'
CCLD libgio-2.0.la
/usr/bin/ld: /home/build/proxy/staging_dir/host/lib/libz.a(deflate.o):
relocation R_X86_64_PC32 against symbol `_length_code' can not be used
when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
Makefile:2183: recipe for target 'libgio-2.0.la' failed
More information about the Lede-dev
mailing list