From 40b6fce4a15c12e548c0b4fbcff29d35dd2c9557 Mon Sep 17 00:00:00 2001 From: nbd Date: Sat, 30 Jun 2012 18:12:15 +0000 Subject: [PATCH 1/3] toolchain: keep the initial gcc around for later uclibc rebuilds testing uclibc changes is tricky because the final gcc tends to miscompile uclibc code or barf up internal compiler errors. install binutils into $(TOOLCHAIN_DIR)/initial (without changing the configure prefix) and copy it from there to $(TOOLCHAIN_DIR)/ so that the initial gcc can be put into $(PATH) for the uclibc build, even if the final gcc is already installed. git-svn-id: svn://svn.openwrt.org/openwrt/trunk@32553 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- toolchain/binutils/Makefile | 6 +++++- toolchain/gcc/initial/Makefile | 5 ++++- toolchain/uClibc/Makefile | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/toolchain/binutils/Makefile b/toolchain/binutils/Makefile index 0022202d4b..9d12721dec 100644 --- a/toolchain/binutils/Makefile +++ b/toolchain/binutils/Makefile @@ -79,7 +79,11 @@ define Host/Compile endef define Host/Install - $(MAKE) -C $(HOST_BUILD_DIR) install + mkdir -p $(TOOLCHAIN_DIR)/initial + $(MAKE) -C $(HOST_BUILD_DIR) \ + prefix=$(TOOLCHAIN_DIR)/initial \ + install + $(CP) $(TOOLCHAIN_DIR)/initial/. $(TOOLCHAIN_DIR)/ $(CP) $(TOOLCHAIN_DIR)/bin/$(REAL_GNU_TARGET_NAME)-readelf $(REAL_STAGING_DIR_HOST)/bin/readelf endef diff --git a/toolchain/gcc/initial/Makefile b/toolchain/gcc/initial/Makefile index f3f78b0b2f..3d8ab61cdf 100644 --- a/toolchain/gcc/initial/Makefile +++ b/toolchain/gcc/initial/Makefile @@ -19,14 +19,17 @@ endef define Host/Install $(GCC_MAKE) -C $(GCC_BUILD_DIR) \ + prefix="$(TOOLCHAIN_DIR)/initial" \ install-gcc \ $(if $(GCC_BUILD_TARGET_LIBGCC),install-target-libgcc) # XXX: glibc insists on linking against libgcc_eh - ( cd $(TOOLCHAIN_DIR)/lib/gcc/$(REAL_GNU_TARGET_NAME)/$(PKG_VERSION) ; \ + ( cd $(TOOLCHAIN_DIR)/initial/lib/gcc/$(REAL_GNU_TARGET_NAME)/$(PKG_VERSION) ; \ [ -e libgcc_eh.a ] || ln -sf libgcc.a libgcc_eh.a ; \ cp libgcc.a libgcc_initial.a; \ ) + + $(CP) $(TOOLCHAIN_DIR)/initial/. $(TOOLCHAIN_DIR)/ endef $(eval $(call HostBuild)) diff --git a/toolchain/uClibc/Makefile b/toolchain/uClibc/Makefile index 6e7e9ddd8b..315e0446ca 100644 --- a/toolchain/uClibc/Makefile +++ b/toolchain/uClibc/Makefile @@ -93,7 +93,7 @@ CPU_CFLAGS = \ --std=gnu99 -ffunction-sections -fdata-sections \ $(TARGET_CFLAGS) -UCLIBC_MAKE = PATH='$(TARGET_PATH)' $(MAKE) -C $(HOST_BUILD_DIR) \ +UCLIBC_MAKE = PATH='$(TOOLCHAIN_DIR)/initial/bin:$(TARGET_PATH)' $(MAKE) -C $(HOST_BUILD_DIR) \ $(TARGET_CONFIGURE_OPTS) \ DEVEL_PREFIX=/ \ RUNTIME_PREFIX=/ \ From b5d071eb9b38e3ea1f0eaf753e5c1fdcbd7a9f61 Mon Sep 17 00:00:00 2001 From: nbd Date: Sat, 30 Jun 2012 18:12:19 +0000 Subject: [PATCH 2/3] toolchain/gcc: fix installing the toolchain after removing the toolchain dir without a full rebuild git-svn-id: svn://svn.openwrt.org/openwrt/trunk@32554 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- toolchain/gcc/final/Makefile | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/toolchain/gcc/final/Makefile b/toolchain/gcc/final/Makefile index b0fe20023b..59a5b2497c 100644 --- a/toolchain/gcc/final/Makefile +++ b/toolchain/gcc/final/Makefile @@ -28,14 +28,19 @@ ifneq ($(CONFIG_SJLJ_EXCEPTIONS),) --enable-sjlj-exceptions endif -define Host/Configure - mkdir -p $(GCC_BUILD_DIR) $(TOOLCHAIN_DIR)/$(REAL_GNU_TARGET_NAME) +define CleanupToolchain + $(INSTALL_DIR) $(TOOLCHAIN_DIR)/$(REAL_GNU_TARGET_NAME) # Important! Required for limits.h to be fixed. rm -rf $(TOOLCHAIN_DIR)/$(REAL_GNU_TARGET_NAME)/sys-include ln -sf ../include $(TOOLCHAIN_DIR)/$(REAL_GNU_TARGET_NAME)/sys-include rm -rf $(TOOLCHAIN_DIR)/$(REAL_GNU_TARGET_NAME)/lib ln -sf ../lib $(TOOLCHAIN_DIR)/$(REAL_GNU_TARGET_NAME)/lib $(if $(CONFIG_mips64)$(CONFIG_mips64el)$(CONFIG_x86_64),ln -sf ../lib64 $(TOOLCHAIN_DIR)/$(REAL_GNU_TARGET_NAME)/lib64) +endef + +define Host/Configure + $(CleanupToolchain) + mkdir -p $(GCC_BUILD_DIR) (cd $(GCC_BUILD_DIR) && rm -f config.cache; \ $(GCC_CONFIGURE) \ ); @@ -59,6 +64,7 @@ define SetupExtraArch endef define Host/Install + $(CleanupToolchain) $(_SINGLE)$(GCC_MAKE) -C $(GCC_BUILD_DIR) install # Set up the symlinks to enable lying about target name. set -e; \ From 86e3bacd5a5e4274808090ae5c8750843a65b56a Mon Sep 17 00:00:00 2001 From: nbd Date: Sat, 30 Jun 2012 18:12:23 +0000 Subject: [PATCH 3/3] toolchain/uClibc: fix getting the nameserver from _res state after res_init. fixes displaying the nameserver in busybox nslookup git-svn-id: svn://svn.openwrt.org/openwrt/trunk@32555 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../patches-0.9.33.2/132-inet_fix_res_init.patch | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 toolchain/uClibc/patches-0.9.33.2/132-inet_fix_res_init.patch diff --git a/toolchain/uClibc/patches-0.9.33.2/132-inet_fix_res_init.patch b/toolchain/uClibc/patches-0.9.33.2/132-inet_fix_res_init.patch new file mode 100644 index 0000000000..c935821b22 --- /dev/null +++ b/toolchain/uClibc/patches-0.9.33.2/132-inet_fix_res_init.patch @@ -0,0 +1,15 @@ +--- a/libc/inet/resolv.c ++++ b/libc/inet/resolv.c +@@ -3654,11 +3654,11 @@ res_init(void) + */ + if (!_res.id) + _res.id = res_randomid(); +- __res_sync = res_sync_func; + + __UCLIBC_MUTEX_UNLOCK(__resolv_lock); + + __res_vinit(&_res, 1); ++ __res_sync = res_sync_func; + + return 0; + }