diff options
author | Nicolas Thill <nico@openwrt.org> | 2009-01-08 01:49:11 +0000 |
---|---|---|
committer | Nicolas Thill <nico@openwrt.org> | 2009-01-08 01:49:11 +0000 |
commit | 3b75e47f8f0d1db7575f0824f7a2469e2e8af7cf (patch) | |
tree | e9676ee4d01368996c17caf45fd31f861e3686af | |
parent | ec57cd80ccfc739b1d9856e7f2191d12ef568aeb (diff) | |
download | upstream-3b75e47f8f0d1db7575f0824f7a2469e2e8af7cf.tar.gz upstream-3b75e47f8f0d1db7575f0824f7a2469e2e8af7cf.tar.bz2 upstream-3b75e47f8f0d1db7575f0824f7a2469e2e8af7cf.zip |
[massive] add support for alternative C libraries (currently only glibc/eglibc)
other (related) changes:
- kernel headers are now installed using "make headers_install" on 2.6
- target names now contain an openwrt "vendor" tag (e.g. mips-openwrt-linux-gnu)
- build directory names now contain gcc/libc name/version
- default cpu for x86 is now i486 (required to build glibc/eglibc)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@13931 3c298f89-4303-0410-b956-a3cf2f4a3e73
69 files changed, 2067 insertions, 188 deletions
diff --git a/include/package.mk b/include/package.mk index 0f3d21ee9e..4e31258305 100644 --- a/include/package.mk +++ b/include/package.mk @@ -31,7 +31,7 @@ include $(INCLUDE_DIR)/package-bin.mk include $(INCLUDE_DIR)/autotools.mk override MAKEFLAGS= -CONFIG_SITE:=$(INCLUDE_DIR)/site/$(patsubst %gnueabi,%,$(REAL_GNU_TARGET_NAME)) +CONFIG_SITE:=$(INCLUDE_DIR)/site/$(REAL_GNU_TARGET_NAME) ifneq ($(CONFIG_LINUX_2_4),) CONFIG_SITE:=$(subst linux-,linux2.4-,$(CONFIG_SITE)) endif diff --git a/include/site/arm-openwrt-linux-gnu b/include/site/arm-openwrt-linux-gnu new file mode 100644 index 0000000000..efb72453ae --- /dev/null +++ b/include/site/arm-openwrt-linux-gnu @@ -0,0 +1,5 @@ +#!/bin/sh + +. $TOPDIR/include/site/arm-linux +. $TOPDIR/include/site/linux-gnu + diff --git a/include/site/arm-openwrt-linux-gnueabi b/include/site/arm-openwrt-linux-gnueabi new file mode 100644 index 0000000000..efb72453ae --- /dev/null +++ b/include/site/arm-openwrt-linux-gnueabi @@ -0,0 +1,5 @@ +#!/bin/sh + +. $TOPDIR/include/site/arm-linux +. $TOPDIR/include/site/linux-gnu + diff --git a/include/site/arm-linux-uclibc b/include/site/arm-openwrt-linux-uclibc index f17d96abcd..f17d96abcd 100644 --- a/include/site/arm-linux-uclibc +++ b/include/site/arm-openwrt-linux-uclibc diff --git a/include/site/i386-linux-uclibc b/include/site/arm-openwrt-linux-uclibc-gnueabi index 5cccb2461a..f17d96abcd 100644 --- a/include/site/i386-linux-uclibc +++ b/include/site/arm-openwrt-linux-uclibc-gnueabi @@ -1,5 +1,5 @@ #!/bin/sh -. $TOPDIR/include/site/i386-linux +. $TOPDIR/include/site/arm-linux . $TOPDIR/include/site/linux-uclibc diff --git a/include/site/armeb-openwrt-linux-gnu b/include/site/armeb-openwrt-linux-gnu new file mode 100644 index 0000000000..41129b071f --- /dev/null +++ b/include/site/armeb-openwrt-linux-gnu @@ -0,0 +1,5 @@ +#!/bin/sh + +. $TOPDIR/include/site/armeb-linux +. $TOPDIR/include/site/linux-gnu + diff --git a/include/site/armeb-openwrt-linux-gnueabi b/include/site/armeb-openwrt-linux-gnueabi new file mode 100644 index 0000000000..41129b071f --- /dev/null +++ b/include/site/armeb-openwrt-linux-gnueabi @@ -0,0 +1,5 @@ +#!/bin/sh + +. $TOPDIR/include/site/armeb-linux +. $TOPDIR/include/site/linux-gnu + diff --git a/include/site/armeb-linux-uclibc b/include/site/armeb-openwrt-linux-uclibc index dd64a9c532..dd64a9c532 100644 --- a/include/site/armeb-linux-uclibc +++ b/include/site/armeb-openwrt-linux-uclibc diff --git a/include/site/armeb-openwrt-linux-uclibc-gnueabi b/include/site/armeb-openwrt-linux-uclibc-gnueabi new file mode 100644 index 0000000000..dd64a9c532 --- /dev/null +++ b/include/site/armeb-openwrt-linux-uclibc-gnueabi @@ -0,0 +1,5 @@ +#!/bin/sh + +. $TOPDIR/include/site/armeb-linux +. $TOPDIR/include/site/linux-uclibc + diff --git a/include/site/avr32-openwrt-linux-gnu b/include/site/avr32-openwrt-linux-gnu new file mode 100644 index 0000000000..87cfe7d9c0 --- /dev/null +++ b/include/site/avr32-openwrt-linux-gnu @@ -0,0 +1,5 @@ +#!/bin/sh + +. $TOPDIR/include/site/avr32-linux +. $TOPDIR/include/site/linux-gnu + diff --git a/include/site/avr32-linux-uclibc b/include/site/avr32-openwrt-linux-uclibc index 9fe045fa0c..9fe045fa0c 100644 --- a/include/site/avr32-linux-uclibc +++ b/include/site/avr32-openwrt-linux-uclibc diff --git a/include/site/cris-openwrt-linux-gnu b/include/site/cris-openwrt-linux-gnu new file mode 100644 index 0000000000..c35ddcda65 --- /dev/null +++ b/include/site/cris-openwrt-linux-gnu @@ -0,0 +1,5 @@ +#!/bin/sh + +. $TOPDIR/include/site/cris-linux +. $TOPDIR/include/site/linux-gnu + diff --git a/include/site/cris-linux-uclibc b/include/site/cris-openwrt-linux-uclibc index 87346ee6da..87346ee6da 100644 --- a/include/site/cris-linux-uclibc +++ b/include/site/cris-openwrt-linux-uclibc diff --git a/include/site/i386-linux b/include/site/i486-linux index 7c5773de5d..d22ec20858 100644 --- a/include/site/i386-linux +++ b/include/site/i486-linux @@ -23,6 +23,5 @@ ac_cv_sizeof_uint32_t=4 ac_cv_sizeof_uint64_t=8 ac_cv_sizeof_unsigned_int=4 ac_cv_sizeof_unsigned_long=4 -ac_cv_sizeof_unsigned_long_long=8 ac_cv_sizeof_unsigned_short=2 ac_cv_sizeof_void_p=4 diff --git a/include/site/i486-openwrt-linux-gnu b/include/site/i486-openwrt-linux-gnu new file mode 100644 index 0000000000..77bbe2412a --- /dev/null +++ b/include/site/i486-openwrt-linux-gnu @@ -0,0 +1,5 @@ +#!/bin/sh + +. $TOPDIR/include/site/i486-linux +. $TOPDIR/include/site/linux-gnu + diff --git a/include/site/i486-openwrt-linux-uclibc b/include/site/i486-openwrt-linux-uclibc new file mode 100644 index 0000000000..4d796d6834 --- /dev/null +++ b/include/site/i486-openwrt-linux-uclibc @@ -0,0 +1,5 @@ +#!/bin/sh + +. $TOPDIR/include/site/i486-linux +. $TOPDIR/include/site/linux-uclibc + diff --git a/include/site/i686-openwrt-linux-gnu b/include/site/i686-openwrt-linux-gnu new file mode 100644 index 0000000000..6c9c929ce8 --- /dev/null +++ b/include/site/i686-openwrt-linux-gnu @@ -0,0 +1,5 @@ +#!/bin/sh + +. $TOPDIR/include/site/i686-linux +. $TOPDIR/include/site/linux-gnu + diff --git a/include/site/i686-linux-uclibc b/include/site/i686-openwrt-linux-uclibc index ef073da320..ef073da320 100644 --- a/include/site/i686-linux-uclibc +++ b/include/site/i686-openwrt-linux-uclibc diff --git a/include/site/linux-gnu b/include/site/linux-gnu new file mode 100644 index 0000000000..5640e2a7f8 --- /dev/null +++ b/include/site/linux-gnu @@ -0,0 +1,71 @@ +ac_atomic_add=yes +ac_atomic_sub=yes +ac_cv_c_gettext_without_libintl=yes +ac_cv_c_long_double=no +ac_cv_conv_longlong_to_float=yes +ac_cv_file__dev_zero=yes +ac_cv_func___va_copy=no +ac_cv_func__exit=yes +ac_cv_func_bcopy=yes +ac_cv_func_bzero=yes +ac_cv_func_bcmp=yes +ac_cv_func_fchmod=yes +ac_cv_func_getaddrinfo=yes +ac_cv_func_getcwd=yes +ac_cv_func_getdomainname=yes +ac_cv_func_getpgrp_void=yes +ac_cv_func_getpwuid_r=yes +ac_cv_func_index=yes +ac_cv_func_lstat_dereferences_slashed_symlink=yes +ac_cv_func_lstat_empty_string_bug=no +ac_cv_func_lstat=yes +ac_cv_func_malloc_0_nonnull=yes +ac_cv_func_malloc_works=yes +ac_cv_func_memcmp_clean=yes +ac_cv_func_memcmp_working=yes +ac_cv_func_posix_getgrgid_r=yes +ac_cv_func_posix_getpwuid_r=yes +ac_cv_func_pthread_key_delete=yes +ac_cv_func_realloc_0_nonnull=yes +ac_cv_func_realloc_works=yes +ac_cv_func_rename=yes +ac_cv_func_rindex=yes +ac_cv_func_setlocale=yes +ac_cv_func_setpgrp_void=yes +ac_cv_func_setresuid=no +ac_cv_func_setvbuf_reversed=no +ac_cv_func_stat_empty_string_bug=no +ac_cv_func_stat_ignores_trailing_slash=no +ac_cv_func_strerror=yes +ac_cv_func_strftime=yes +ac_cv_func_utimes=yes +ac_cv_func___adjtimex=yes +ac_cv_func_va_copy=no +ac_cv_func_vsnprintf=yes +ac_cv_have_accrights_in_msghdr=no +ac_cv_have_broken_snprintf=no +ac_cv_have_control_in_msghdr=yes +ac_cv_have_decl_sys_siglist=no +ac_cv_have_openpty_ctty_bug=yes +ac_cv_have_space_d_name_in_struct_dirent=yes +ac_cv_header_netinet_sctp_h=no +ac_cv_header_netinet_sctp_uio_h=no +ac_cv_int64_t=yes +ac_cv_lbl_unaligned_fail=no +ac_cv_linux_kernel_pppoe=yes +ac_cv_linux_vers=2 +ac_cv_pack_bitfields_reversed=yes +ac_cv_path_LDCONFIG= +ac_cv_regexec_segfault_emptystr=no +ac_cv_sctp=no +ac_cv_sys_restartable_syscalls=yes +ac_cv_time_r_type=POSIX +ac_cv_type_suseconds_t=yes +ac_cv_uchar=no +ac_cv_uint=yes +ac_cv_uint64_t=yes +ac_cv_ulong=yes +ac_cv_ushort=yes +ac_cv_va_copy=C99 +ac_cv_va_val_copy=yes +as_cv_unaligned_access=yes diff --git a/include/site/mips-openwrt-linux-gnu b/include/site/mips-openwrt-linux-gnu new file mode 100644 index 0000000000..a70e9a71f7 --- /dev/null +++ b/include/site/mips-openwrt-linux-gnu @@ -0,0 +1,5 @@ +#!/bin/sh + +. $TOPDIR/include/site/mips-linux +. $TOPDIR/include/site/linux-gnu + diff --git a/include/site/mips-linux-uclibc b/include/site/mips-openwrt-linux-uclibc index 76a1b28317..76a1b28317 100644 --- a/include/site/mips-linux-uclibc +++ b/include/site/mips-openwrt-linux-uclibc diff --git a/include/site/mipsel-openwrt-linux-gnu b/include/site/mipsel-openwrt-linux-gnu new file mode 100644 index 0000000000..fa33e56fad --- /dev/null +++ b/include/site/mipsel-openwrt-linux-gnu @@ -0,0 +1,5 @@ +#!/bin/sh + +. $TOPDIR/include/site/mipsel-linux +. $TOPDIR/include/site/linux-gnu + diff --git a/include/site/mipsel-linux-uclibc b/include/site/mipsel-openwrt-linux-uclibc index b53d4d4844..b53d4d4844 100644 --- a/include/site/mipsel-linux-uclibc +++ b/include/site/mipsel-openwrt-linux-uclibc diff --git a/include/site/mipsel-linux2.4-uclibc b/include/site/mipsel-openwrt-linux2.4-uclibc index 3412411cb4..3412411cb4 100644 --- a/include/site/mipsel-linux2.4-uclibc +++ b/include/site/mipsel-openwrt-linux2.4-uclibc diff --git a/include/site/powerpc-openwrt-linux-gnu b/include/site/powerpc-openwrt-linux-gnu new file mode 100644 index 0000000000..bafb5df36d --- /dev/null +++ b/include/site/powerpc-openwrt-linux-gnu @@ -0,0 +1,5 @@ +#!/bin/sh + +. $TOPDIR/include/site/powerpc-linux +. $TOPDIR/include/site/linux-gnu + diff --git a/include/site/powerpc-linux-uclibc b/include/site/powerpc-openwrt-linux-uclibc index bb48ee234f..bb48ee234f 100644 --- a/include/site/powerpc-linux-uclibc +++ b/include/site/powerpc-openwrt-linux-uclibc diff --git a/include/site/x86_64-openwrt-linux-gnu b/include/site/x86_64-openwrt-linux-gnu new file mode 100644 index 0000000000..602258408c --- /dev/null +++ b/include/site/x86_64-openwrt-linux-gnu @@ -0,0 +1,5 @@ +#!/bin/sh + +. $TOPDIR/include/site/x86_64-linux +. $TOPDIR/include/site/linux-gnu + diff --git a/include/site/x86_64-linux-uclibc b/include/site/x86_64-openwrt-linux-uclibc index cc351dfef8..cc351dfef8 100644 --- a/include/site/x86_64-linux-uclibc +++ b/include/site/x86_64-openwrt-linux-uclibc diff --git a/include/target.mk b/include/target.mk index db022014e6..7351794dce 100644 --- a/include/target.mk +++ b/include/target.mk @@ -12,7 +12,7 @@ __target_inc=1 DEVICE_TYPE?=router # Default packages - the really basic set -DEFAULT_PACKAGES:=base-files libgcc uclibc busybox dropbear mtd uci opkg +DEFAULT_PACKAGES:=base-files libc libgcc busybox dropbear mtd uci opkg # For router targets DEFAULT_PACKAGES.router:=dnsmasq iptables ppp ppp-mod-pppoe kmod-ipt-nathelper firewall diff --git a/package/base-files/Makefile b/package/base-files/Makefile index 50387ab1f8..52e70e5ce6 100644 --- a/package/base-files/Makefile +++ b/package/base-files/Makefile @@ -26,7 +26,7 @@ ifneq ($(DUMP),1) LIB_SUFFIX:=64 endif else - UCLIBC_VERSION:=<UCLIBC_VERSION> + LIBC_VERSION:=<LIBC_VERSION> LIBGCC_VERSION:=<LIBGCC_VERSION> endif @@ -88,22 +88,28 @@ $(call Package/gcc/Default) DEPENDS+=@INSTALL_LIBSTDCPP endef -define Package/uclibc/Default +define Package/libc/Default SECTION:=libs CATEGORY:=Base system DEPENDS:=@!NATIVE_TOOLCHAIN - URL:=http://uclibc.org/ - VERSION:=$(UCLIBC_VERSION)$(UCLIBC_PATCHVER)-$(PKG_RELEASE) + VERSION:=$(LIBC_VERSION)-$(PKG_RELEASE) + URL:=$(LIBC_URL) +endef + +define Package/libc +$(call Package/libc/Default) + TITLE:=C library endef define Package/libpthread -$(call Package/uclibc/Default) +$(call Package/libc/Default) TITLE:=POSIX thread library + DEPENDS:= +librt endef -define Package/uclibc -$(call Package/uclibc/Default) - TITLE:=C library embedded systems +define Package/librt +$(call Package/libc/Default) + TITLE:=POSIX.1b RealTime extension library endef define Package/ldd @@ -112,10 +118,11 @@ $(call Package/uclibc/Default) endef define Package/ldconfig -$(call Package/uclibc/Default) +$(call Package/libc/Default) TITLE:=Shared library path configuration endef + define Build/Prepare mkdir -p $(PKG_BUILD_DIR) endef @@ -184,40 +191,62 @@ define Package/libgcc/install $(CP) $(TOOLCHAIN_DIR)/lib$(LIB_SUFFIX)/libgcc_s.so.* $(1)/lib/ endef -ifeq ($(word 1,$(subst ., ,$(LIBGCC_VERSION))),4) - define Package/libssp/install +define Package/libssp/install $(INSTALL_DIR) $(1)/lib $(CP) $(TOOLCHAIN_DIR)/lib$(LIB_SUFFIX)/libssp.so.* $(1)/lib/ - endef -endif +endef define Package/libstdcpp/install + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(TOOLCHAIN_DIR)/usr/lib$(LIB_SUFFIX)/libstdc++.so.* $(1)/usr/lib/ +endef + +define Package/glibc/install $(INSTALL_DIR) $(1)/lib - $(CP) $(TOOLCHAIN_DIR)/lib$(LIB_SUFFIX)/libstdc++.so.* $(1)/lib/ + $(CP) $(TOOLCHAIN_DIR)/lib/ld*.so.* $(1)/lib/ + $(CP) $(TOOLCHAIN_DIR)/lib/ld-$(LIBC_VERSION).so $(1)/lib/ + for file in libanl libc libcidn libcrypt libdl libm libnsl libnss_dns libnss_files libresolv libutil; do \ + $(CP) $(TOOLCHAIN_DIR)/lib/$$$$file.so.* $(1)/lib/; \ + $(CP) $(TOOLCHAIN_DIR)/lib/$$$$file-$(LIBC_VERSION).so $(1)/lib/; \ + done +endef + +define Package/eglibc/install +$(call Package/glibc/install,$1) +endef + +define Package/uClibc/install + $(INSTALL_DIR) $(1)/lib + for file in ld$(LIB_SUFFIX)-uClibc libc libcrypt libdl libm libnsl libresolv libuClibc libutil; do \ + $(CP) $(TOOLCHAIN_DIR)/lib/$$$$file.so.* $(1)/lib/; \ + $(CP) $(TOOLCHAIN_DIR)/lib/$$$$file-$(LIBC_VERSION).so $(1)/lib/; \ + done +endef + +define Package/libc/install +$(call Package/$(LIBC)/install,$1) endef define Package/libpthread/install $(INSTALL_DIR) $(1)/lib $(CP) $(TOOLCHAIN_DIR)/lib/libpthread.so.* $(1)/lib/ - $(CP) $(TOOLCHAIN_DIR)/lib/libpthread-$(UCLIBC_VERSION).so $(1)/lib/ + $(CP) $(TOOLCHAIN_DIR)/lib/libpthread-$(LIBC_VERSION).so $(1)/lib/ endef -define Package/uclibc/install +define Package/librt/install $(INSTALL_DIR) $(1)/lib - for file in ld$(LIB_SUFFIX)-uClibc libc libcrypt libdl libm libnsl libresolv librt libuClibc libutil; do \ - $(CP) $(TOOLCHAIN_DIR)/lib/$$$$file.so.* $(1)/lib/; \ - $(CP) $(TOOLCHAIN_DIR)/lib/$$$$file-$(UCLIBC_VERSION).so $(1)/lib/; \ - done + $(CP) $(TOOLCHAIN_DIR)/lib/librt.so.* $(1)/lib/ + $(CP) $(TOOLCHAIN_DIR)/lib/librt-$(LIBC_VERSION).so $(1)/lib/ endef define Package/ldd/install - $(INSTALL_DIR) $(1)/bin/ - $(CP) $(TOOLCHAIN_DIR)/target-utils/ldd $(1)/bin/ + $(INSTALL_DIR) $(1)/usr/bin/ + $(CP) $(TOOLCHAIN_DIR)/usr/bin/ldd $(1)/usr/bin/ endef define Package/ldconfig/install - $(INSTALL_DIR) $(1)/bin/ - $(CP) $(TOOLCHAIN_DIR)/target-utils/ldconfig $(1)/bin/ + $(INSTALL_DIR) $(1)/sbin/ + $(CP) $(TOOLCHAIN_DIR)/sbin/ldconfig $(1)/sbin/ endef ifneq ($(DUMP),1) @@ -225,10 +254,11 @@ ifneq ($(DUMP),1) endif $(eval $(call BuildPackage,base-files$(TARGET))) +$(eval $(call BuildPackage,libc)) $(eval $(call BuildPackage,libgcc)) $(eval $(call BuildPackage,libssp)) $(eval $(call BuildPackage,libstdcpp)) $(eval $(call BuildPackage,libpthread)) -$(eval $(call BuildPackage,uclibc)) +$(eval $(call BuildPackage,librt)) $(eval $(call BuildPackage,ldd)) $(eval $(call BuildPackage,ldconfig)) diff --git a/package/kexec-tools/Makefile b/package/kexec-tools/Makefile index cef46db4fe..e497542468 100644 --- a/package/kexec-tools/Makefile +++ b/package/kexec-tools/Makefile @@ -1,5 +1,5 @@ # -# Copyright (C) 2006 OpenWrt.org +# Copyright (C) 2006-2008 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -37,7 +37,7 @@ define Package/kexec-tools/config endef CONFIGURE_ARGS = \ - --target=$(CONFIG_KEXEC_TOOLS_TARGET_NAME)-linux-uclibc \ + --target=$(CONFIG_KEXEC_TOOLS_TARGET_NAME)-linux-$(TARGET_SUFFIX) \ --host=$(GNU_TARGET_NAME)-uclibc \ --build=$(GNU_HOST_NAME) \ --program-prefix="" \ @@ -49,7 +49,9 @@ CONFIGURE_ARGS = \ --libexecdir=/usr/lib \ --sysconfdir=/etc \ -CONFIGURE_VARS += BUILD_CC=$(HOSTCC) +CONFIGURE_VARS += \ + BUILD_CC=$(HOSTCC) \ + TARGET_CC=$(TARGET_CC) \ define Build/Compile $(MAKE) -C $(PKG_BUILD_DIR) all @@ -34,11 +34,14 @@ _SINGLE=export MAKEFLAGS=$(space); ARCH:=$(call qstrip,$(shell echo $(CONFIG_ARCH) | sed -e 's/i[3-9]86/i386/')) BOARD:=$(call qstrip,$(CONFIG_TARGET_BOARD)) TARGET_OPTIMIZATION:=$(call qstrip,$(CONFIG_TARGET_OPTIMIZATION)) +TARGET_SUFFIX=$(call qstrip,$(CONFIG_TARGET_SUFFIX)) BUILD_SUFFIX:=$(call qstrip,$(CONFIG_BUILD_SUFFIX)) GCCV:=$(call qstrip,$(CONFIG_GCC_VERSION)) +LIBC:=$(call qstrip,$(CONFIG_LIBC)) +LIBCV:=$(call qstrip,$(CONFIG_LIBC_VERSION)) SUBDIR:=$(patsubst $(TOPDIR)/%,%,${CURDIR}) -OPTIMIZE_FOR_CPU=$(ARCH) +OPTIMIZE_FOR_CPU=$(shell echo $(ARCH) | sed -e 's/i386/i486/') ifeq ($(ARCH),powerpc) FPIC:=-fPIC @@ -51,29 +54,29 @@ BIN_DIR:=$(TOPDIR)/bin INCLUDE_DIR:=$(TOPDIR)/include SCRIPT_DIR:=$(TOPDIR)/scripts BUILD_DIR_BASE:=$(TOPDIR)/build_dir -BUILD_DIR:=$(BUILD_DIR_BASE)/$(ARCH)$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX)) +BUILD_DIR:=$(BUILD_DIR_BASE)/target-$(ARCH)_$(LIBC)-$(LIBCV)$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX)) BUILD_DIR_HOST:=$(BUILD_DIR_BASE)/host -BUILD_DIR_TOOLCHAIN:=$(BUILD_DIR_BASE)/toolchain-$(ARCH)_gcc$(GCCV) -STAGING_DIR:=$(TOPDIR)/staging_dir/$(ARCH) +BUILD_DIR_TOOLCHAIN:=$(BUILD_DIR_BASE)/toolchain-$(ARCH)_gcc-$(GCCV)_$(LIBC)-$(LIBCV) +STAGING_DIR:=$(TOPDIR)/staging_dir/target-$(ARCH)_$(LIBC)-$(LIBCV) STAGING_DIR_HOST:=$(TOPDIR)/staging_dir/host -TOOLCHAIN_DIR:=$(TOPDIR)/staging_dir/toolchain-$(ARCH)_gcc$(GCCV) +TOOLCHAIN_DIR:=$(TOPDIR)/staging_dir/toolchain-$(ARCH)_gcc-$(GCCV)_$(LIBC)-$(LIBCV) PACKAGE_DIR:=$(BIN_DIR)/packages/$(ARCH) STAMP_DIR:=$(BUILD_DIR)/stamp STAMP_DIR_HOST=$(BUILD_DIR_HOST)/stamp TARGET_DIR:=$(BUILD_DIR)/root-$(BOARD) IPKG_STATE_DIR:=$(TARGET_DIR)/usr/lib/ipkg -TARGET_PATH:=$(TOOLCHAIN_DIR)/bin:$(STAGING_DIR_HOST)/bin:$(STAGING_DIR)/host/bin:$(PATH) +TARGET_PATH:=$(TOOLCHAIN_DIR)/usr/bin:$(STAGING_DIR_HOST)/bin:$(STAGING_DIR)/host/bin:$(PATH) TARGET_CFLAGS:=$(TARGET_OPTIMIZATION)$(if $(CONFIG_DEBUG), -g3) TARGET_CPPFLAGS:=-I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/include -TARGET_LDFLAGS:=-L$(TOOLCHAIN_DIR)/lib -L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib +TARGET_LDFLAGS:=-L$(TOOLCHAIN_DIR)/usr/lib -L$(TOOLCHAIN_DIR)/lib -L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib LIBGCC_S=$(if $(wildcard $(TOOLCHAIN_DIR)/lib/libgcc_s.so),-lgcc_s,$(wildcard $(TOOLCHAIN_DIR)/lib/gcc/*/*/libgcc.a)) ifeq ($(CONFIG_NATIVE_TOOLCHAIN),) -include $(TOOLCHAIN_DIR)/info.mk - REAL_GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-linux-uclibc$(if $(CONFIG_EABI_SUPPORT),gnueabi) - GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-linux - TARGET_CROSS:=$(if $(TARGET_CROSS),$(TARGET_CROSS),$(OPTIMIZE_FOR_CPU)-linux-uclibc$(if $(CONFIG_EABI_SUPPORT),gnueabi)-) + REAL_GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux$(if $(TARGET_SUFFIX),-$(TARGET_SUFFIX)) + GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux + TARGET_CROSS:=$(if $(TARGET_CROSS),$(TARGET_CROSS),$(OPTIMIZE_FOR_CPU)-openwrt-linux$(if $(TARGET_SUFFIX),-$(TARGET_SUFFIX))-) TARGET_CFLAGS+= -fhonour-copts endif diff --git a/toolchain/Config.in b/toolchain/Config.in index 3cd2ed2548..e2181c5559 100644 --- a/toolchain/Config.in +++ b/toolchain/Config.in @@ -41,6 +41,30 @@ menuconfig EXTRA_TARGET_ARCH source "toolchain/binutils/Config.in" source "toolchain/gcc/Config.in" + +choice + prompt "LIBC implementation" if TOOLCHAINOPTS + default USE_UCLIBC + help + Select the LIBC implementation. + + config USE_EGLIBC + bool "Use eglibc" + depends !avr32 + select NO_STRIP + + config USE_GLIBC + bool "Use glibc" + depends !avr32 + select NO_STRIP + + config USE_UCLIBC + bool "Use uClibc" + +endchoice + +source "toolchain/eglibc/Config.in" +source "toolchain/glibc/Config.in" source "toolchain/uClibc/Config.in" config GDB @@ -82,7 +106,7 @@ config TARGET_OPTIMIZATION prompt "Target Optimizations" if TOOLCHAINOPTS default "-O2 -pipe -march=i686 -funit-at-a-time" if TARGET_x86_mediacenter default "-O2 -pipe -march=i486 -funit-at-a-time" if TARGET_x86 - default "-Os -pipe -march=i486 -funit-at-a-time" if TARGET_rdc + default "-Os -pipe -march=i486 -funit-at-a-time" if TARGET_rdc || TARGET_uml default "-Os -pipe -mips32r2 -mtune=mips32r2 -funit-at-a-time" if TARGET_ar71xx default "-Os -pipe -mips32 -mtune=mips32 -funit-at-a-time" if mipsel || mips default "-Os -pipe -march=armv5te -mtune=xscale -funit-at-a-time" if TARGET_ixp4xx || TARGET_iop32x || TARGET_pxa || TARGET_orion @@ -91,5 +115,32 @@ config TARGET_OPTIMIZATION help Optimizations to use when building for the target host. +config USE_UCLIBC + bool + default y if !TOOLCHAINOPTS + source "toolchain/gcc/Config.version" + +source "toolchain/eglibc/Config.version" +source "toolchain/glibc/Config.version" source "toolchain/uClibc/Config.version" + +config LIBC + string + default "eglibc" if USE_EGLIBC + default "glibc" if USE_GLIBC + default "uClibc" if USE_UCLIBC + +config LIBC_VERSION + string + default EGLIBC_VERSION if USE_EGLIBC + default GLIBC_VERSION if USE_GLIBC + default UCLIBC_VERSION if USE_UCLIBC + +config TARGET_SUFFIX + string + default "gnueabi" if (USE_EGLIBC || USE_GLIBC) && EABI_SUPPORT + default "gnu" if (USE_EGLIBC || USE_GLIBC) && !EABI_SUPPORT + default "uclibc-gnueabi" if USE_UCLIBC && EABI_SUPPORT + default "uclibc" if USE_UCLIBC && !EABI_SUPPORT + diff --git a/toolchain/Makefile b/toolchain/Makefile index 4afcc439a3..7762593ef6 100644 --- a/toolchain/Makefile +++ b/toolchain/Makefile @@ -1,26 +1,49 @@ # -# Copyright (C) 2007 OpenWrt.org +# Copyright (C) 2007-2008 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. # # Main makefile for the toolchain # +# Steps: +# 1) toolchain/binutils/install +# build & install binutils +# 2) toolchain/gcc/prepare +# build & install a minimal gcc, needed for steps 3 & 4 +# 3) toolchain/kernel-headers/install +# install kernel headers, needed for step 4 +# 4) toolchain/libc/prepare +# build & install libc headers & support files, needed for step 5 +# 5) toolchain/gcc/compile +# build & install an initial gcc, needed for step 6 +# 6) toolchain/libc/compile +# build & install the final libc +# 7) toolchain/gcc/install +# build & install the final gcc +# 8) toolchain/libc/install +# build & install libc utilities +# + curdir:=toolchain # subdirectories to descend into -$(curdir)/builddirs := kernel-headers $(if $(CONFIG_GDB),gdb) $(if $(CONFIG_NATIVE_TOOLCHAIN),,binutils gcc uClibc) -$(curdir)/builddirs-compile:=. $(filter-out kernel-headers,$($(curdir)/builddirs)) +$(curdir)/builddirs := kernel-headers $(if $(CONFIG_GDB),gdb) $(if $(CONFIG_NATIVE_TOOLCHAIN),,binutils gcc $(LIBC) $(if $(CONFIG_GLIBC_PORTS),glibc-ports)) +$(curdir)/builddirs-compile:=$($(curdir)/builddirs-prepare) $(curdir)/builddirs-install:=$($(curdir)/builddirs-compile) # builddir dependencies -$(curdir)/uClibc/prepare:=$(curdir)/kernel-headers/prepare +$(curdir)/$(LIBC)/prepare:=$(curdir)/kernel-headers/install ifeq ($(CONFIG_NATIVE_TOOLCHAIN),) - $(curdir)/binutils/prepare:=$(curdir)/uClibc/prepare $(curdir)/gcc/prepare:=$(curdir)/binutils/install - $(curdir)/uClibc/compile:=$(curdir)/gcc/compile - $(curdir)/gcc/install:=$(curdir)/uClibc/compile - $(curdir)/uClibc/install:=$(curdir)/gcc/install + $(curdir)/kernel-headers/install:=$(curdir)/gcc/prepare + $(curdir)/gcc/compile:=$(curdir)/$(LIBC)/prepare + $(curdir)/$(LIBC)/compile:=$(curdir)/gcc/compile + $(curdir)/gcc/install:=$(curdir)/$(LIBC)/compile + $(curdir)/$(LIBC)/install:=$(curdir)/gcc/install + ifneq ($(CONFIG_GLIBC_PORTS),) + $(curdir)/glibc/prepare:=$(curdir)/glibc-ports/prepare + endif endif ifneq ($(ARCH),) @@ -29,7 +52,7 @@ ifneq ($(ARCH),) set -x; \ mkdir -p "$$dir"; \ cd "$$dir"; \ - mkdir -p bin lib include stamp; \ + mkdir -p stamp lib usr/include usr/lib ; \ ); done @grep GCC_VERSION $@ >/dev/null 2>&1 || $(INSTALL_DATA) $(TOPDIR)/toolchain/info.mk $@ @touch $@ diff --git a/toolchain/binutils/Makefile b/toolchain/binutils/Makefile index 3a4e7e8e4a..db3ea75d44 100644 --- a/toolchain/binutils/Makefile +++ b/toolchain/binutils/Makefile @@ -23,20 +23,28 @@ PATCH_DIR:=./patches/$(PKG_VERSION) STAGING_DIR_HOST:=$(TOOLCHAIN_DIR) BUILD_DIR_HOST:=$(BUILD_DIR_TOOLCHAIN) + override CONFIG_AUTOREBUILD= include $(INCLUDE_DIR)/host-build.mk -EXTRA_TARGET=$(if $(CONFIG_EXTRA_TARGET_ARCH),--enable-targets=$(call qstrip,$(CONFIG_EXTRA_TARGET_ARCH_NAME))-linux-uclibc) +EXTRA_TARGET=$(if $(CONFIG_EXTRA_TARGET_ARCH),--enable-targets=$(call qstrip,$(CONFIG_EXTRA_TARGET_ARCH_NAME))-linux-$(TARGET_SUFFIX)) -define Build/Configure +define Build/Prepare + $(call Build/Prepare/Default) + ln -snf $(PKG_NAME)-$(PKG_VERSION) $(BUILD_DIR_TOOLCHAIN)/$(PKG_NAME) $(CP) $(SCRIPT_DIR)/config.{guess,sub} $(PKG_BUILD_DIR)/ +endef + +define Build/Configure (cd $(PKG_BUILD_DIR); \ ./configure \ - --prefix=$(STAGING_DIR_HOST) \ + --prefix=$(TOOLCHAIN_DIR)/usr \ --build=$(GNU_HOST_NAME) \ --host=$(GNU_HOST_NAME) \ --target=$(REAL_GNU_TARGET_NAME) \ + --with-sysroot=$(TOOLCHAIN_DIR) \ + --disable-multilib \ --disable-werror \ --disable-nls \ $(EXTRA_TARGET) \ @@ -53,4 +61,10 @@ define Build/Install $(MAKE) -C $(PKG_BUILD_DIR) install endef +define Build/Clean + rm -rf \ + $(PKG_BUILD_DIR) \ + $(BUILD_DIR_TOOLCHAIN)/$(PKG_NAME) +endef + $(eval $(call HostBuild)) diff --git a/toolchain/eglibc/Config.in b/toolchain/eglibc/Config.in new file mode 100644 index 0000000000..3caea3919d --- /dev/null +++ b/toolchain/eglibc/Config.in @@ -0,0 +1,40 @@ +choice + prompt "eglibc version" + depends on TOOLCHAINOPTS && USE_EGLIBC + default EGLIBC_VERSION_2_8 + help + Select the version of eglibc you wish to use. + + config EGLIBC_VERSION_2_6_1 + bool "eglibc 2.6.1" + + config EGLIBC_VERSION_2_7 + bool "eglibc 2.7" + + config EGLIBC_VERSION_2_8 + bool "eglibc 2.8" + + config EGLIBC_VERSION_2_9 + bool "eglibc 2.9" + + config EGLIBC_VERSION_TRUNK + bool "eglibc trunk" + +endchoice + +config EGLIBC_REVISION + string + prompt "eglibc revision" + depends on TOOLCHAINOPTS && USE_EGLIBC + default "5887" if EGLIBC_VERSION_2_6_1 + default "5886" if EGLIBC_VERSION_2_7 + default "6913" if EGLIBC_VERSION_2_8 + default "7430" if EGLIBC_VERSION_2_9 + default "HEAD" if EGLIBC_VERSION_TRUNK + default "" + +menu "eglibc configuration" + depends on TOOLCHAINOPTS && USE_EGLIBC + source toolchain/eglibc/config/Config.in +endmenu + diff --git a/toolchain/eglibc/Config.version b/toolchain/eglibc/Config.version new file mode 100644 index 0000000000..edee7cc15e --- /dev/null +++ b/toolchain/eglibc/Config.version @@ -0,0 +1,9 @@ +config EGLIBC_VERSION + string + depends on USE_EGLIBC + default "2.6.1" if EGLIBC_VERSION_2_6_1 + default "2.7" if EGLIBC_VERSION_2_7 + default "2.8" if EGLIBC_VERSION_2_8 + default "2.9" if EGLIBC_VERSION_2_9 + default "trunk" + diff --git a/toolchain/eglibc/Makefile b/toolchain/eglibc/Makefile new file mode 100644 index 0000000000..e9e1d00da5 --- /dev/null +++ b/toolchain/eglibc/Makefile @@ -0,0 +1,168 @@ +# +# Copyright (C) 2006-2008 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:=eglibc +PKG_VERSION:=$(call qstrip,$(CONFIG_EGLIBC_VERSION)) +PKG_REVISION:=$(call qstrip,$(CONFIG_EGLIBC_REVISION)) + +PKG_SOURCE_PROTO:=svn +PKG_SOURCE_VERSION:=$(PKG_REVISION) +PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)-r$(PKG_REVISION) +PKG_SOURCE:=$(PKG_SOURCE_SUBDIR).tar.bz2 +ifeq ($(PKG_VERSION),2.6.1) + PKG_SOURCE_URL:=svn://svn.eglibc.org/branches/eglibc-2_6 +endif +ifeq ($(PKG_VERSION),2.7) + PKG_SOURCE_URL:=svn://svn.eglibc.org/branches/eglibc-2_7 +endif +ifeq ($(PKG_VERSION),2.8) + PKG_SOURCE_URL:=svn://svn.eglibc.org/branches/eglibc-2_8 +endif +ifeq ($(PKG_VERSION),2.9) + PKG_SOURCE_URL:=svn://svn.eglibc.org/branches/eglibc-2_9 +endif +ifeq ($(PKG_VERSION),trunk) + PKG_SOURCE_URL:=svn://svn.eglibc.org/trunk +endif + +PATCH_DIR:=./patches/$(PKG_VERSION) + +STAGING_DIR_HOST:=$(TOOLCHAIN_DIR) +BUILD_DIR_HOST:=$(BUILD_DIR_TOOLCHAIN) +PKG_BUILD_DIR:=$(BUILD_DIR_HOST)/$(PKG_SOURCE_SUBDIR) + +override CONFIG_AUTOREBUILD= + +include $(INCLUDE_DIR)/host-build.mk + +STAMP_BUILT:=$(TOOLCHAIN_DIR)/stamp/.eglibc_built +STAMP_INSTALLED:=$(TOOLCHAIN_DIR)/stamp/.eglibc_installed + +PKG_BUILD_DIR1:=$(PKG_BUILD_DIR)-initial +PKG_BUILD_DIR2:=$(PKG_BUILD_DIR)-final + +# XXX: {e,}glibc does not build w/ -Os +# http://sourceware.org/bugzilla/show_bug.cgi?id=5203 +EGLIBC_CFLAGS:=$(subst -Os,-O2,$(TARGET_CFLAGS)) + +EGLIBC_CONFIGURE:= \ + BUILD_CC="$(HOSTCC)" \ + $(TARGET_CONFIGURE_OPTS) \ + CFLAGS="$(EGLIBC_CFLAGS)" \ + $(PKG_BUILD_DIR)/libc/configure \ + --prefix=/usr \ + --build=$(GNU_HOST_NAME) \ + --host=$(REAL_GNU_TARGET_NAME) \ + --with-headers=$(TOOLCHAIN_DIR)/usr/include \ + --disable-profile \ + --without-gd \ + --without-cvs \ + --enable-add-ons \ + +ifeq ($(CONFIG_SOFT_FLOAT),) + EGLIBC_CONFIGURE+= --with-fp +else + EGLIBC_CONFIGURE+= --without-fp +endif + +EGLIBC_MAKE:= \ + $(MAKE) \ + + +define Build/SetToolchainInfo + $(SED) 's,^\(LIBC_TYPE\)=.*,\1=$(PKG_NAME),' $(TOOLCHAIN_DIR)/info.mk + $(SED) 's,^\(LIBC_URL\)=.*,\1=http://www.eglibc.org/,' $(TOOLCHAIN_DIR)/info.mk + $(SED) 's,^\(LIBC_VERSION\)=.*,\1=$(PKG_VERSION),' $(TOOLCHAIN_DIR)/info.mk + $(SED) 's,^\(LIBC_PATCHVER\)=.*,\1=$(PKG_EXTRAVERSION),' $(TOOLCHAIN_DIR)/info.mk +endef + +define Stage1/Configure + mkdir -p $(PKG_BUILD_DIR1) + $(CP) $(PKG_BUILD_DIR)/libc/option-groups.config $(PKG_BUILD_DIR1)/ + ( cd $(PKG_BUILD_DIR1); rm -f config.cache; \ + $(EGLIBC_CONFIGURE) \ + ); +endef + +define Stage1/Compile +endef + +define Stage1/Install + mkdir -p $(BUILD_DIR_TOOLCHAIN)/$(LIBC)-dev/usr/{include,lib} + $(EGLIBC_MAKE) -C $(PKG_BUILD_DIR1) \ + install_root="$(BUILD_DIR_TOOLCHAIN)/$(LIBC)-dev" \ + install-bootstrap-headers=yes \ + install-headers + $(EGLIBC_MAKE) -C $(PKG_BUILD_DIR1) \ + csu/subdir_lib + ( cd $(PKG_BUILD_DIR1); \ + $(CP) csu/crt1.o csu/crti.o csu/crtn.o $(BUILD_DIR_TOOLCHAIN)/$(LIBC)-dev/usr/lib/ \ + ) + $(TARGET_CC) -nostdlib -nostartfiles -shared -x c /dev/null \ + -o $(BUILD_DIR_TOOLCHAIN)/$(LIBC)-dev/usr/lib/libc.so +endef + +define Stage2/Configure + mkdir -p $(PKG_BUILD_DIR2) + $(CP) $(PKG_BUILD_DIR)/libc/option-groups.config $(PKG_BUILD_DIR2)/ + ( cd $(PKG_BUILD_DIR2); rm -f config.cache; \ + $(EGLIBC_CONFIGURE) \ + ); +endef + +define Stage2/Compile + $(EGLIBC_MAKE) -C $(PKG_BUILD_DIR2) all +endef + +define Stage2/Install + $(EGLIBC_MAKE) -C $(PKG_BUILD_DIR2) \ + install_root="$(TOOLCHAIN_DIR)" \ + install + ( cd $(TOOLCHAIN_DIR) ; \ + for d in lib usr/lib ; do \ + for f in libc.so libpthread.so libgcc_s.so ; do \ + if [ -f $$$$d/$$$$f -a ! -L $$$$d/$$$$f ] ; then \ + $(SED) 's,/usr/lib/,,g;s,/lib/,,g' $$$$d/$$$$f ; \ + fi \ + done \ + done \ + ) +endef + +define Build/Prepare + $(call Build/SetToolchainInfo) + $(call Build/Prepare/Default) + ln -snf $(PKG_SOURCE_SUBDIR) $(BUILD_DIR_TOOLCHAIN)/$(PKG_NAME) + $(SED) 's,y,n,' $(PKG_BUILD_DIR)/libc/option-groups.defaults + grep 'CONFIG_EGLIBC_OPTION_' $(TOPDIR)/.config | sed -e "s,\\(# \)\\?CONFIG_EGLIBC_\\(.*\\),\\1\\2,g" > $(PKG_BUILD_DIR)/libc/option-groups.config + ln -sf ../ports $(PKG_BUILD_DIR)/libc/ + ( cd $(PKG_BUILD_DIR)/libc; autoconf --force ) + $(call Stage1/Configure) + $(call Stage1/Compile) + $(call Stage1/Install) +endef + +define Build/Configure +endef + +define Build/Compile + $(call Stage2/Configure) + $(call Stage2/Compile) + $(call Stage2/Install) +endef + +define Build/Install +endef + +define Build/Clean + rm -rf $(PKG_BUILD_DIR) $(PKG_BUILD_DIR1) $(PKG_BUILD_DIR2) \ + $(BUILD_DIR_TOOLCHAIN)/$(LIBC)-dev \ + $(BUILD_DIR_TOOLCHAIN)/$(PKG_NAME) +endef + +$(eval $(call HostBuild)) diff --git a/toolchain/eglibc/config/Config.in b/toolchain/eglibc/config/Config.in new file mode 100644 index 0000000000..c4496bec1a --- /dev/null +++ b/toolchain/eglibc/config/Config.in @@ -0,0 +1,726 @@ +config EGLIBC_OPTION_EGLIBC_ADVANCED_INET6 + bool "IPv6 Advanced Sockets API support (RFC3542)" + default y + depends EGLIBC_OPTION_EGLIBC_INET + help + This option group includes the functions specified by RFC 3542, + "Advanced Sockets Application Program Interface (API) for + IPv6". + + This option group includes the following functions: + + inet6_opt_append + inet6_opt_find + inet6_opt_finish + inet6_opt_get_val + inet6_opt_init + inet6_alloc + inet6_append + inet6_find + inet6_init + inet6_next + inet6_space + inet6_opt_next + inet6_opt_set_val + inet6_rth_add + inet6_rth_getaddr + inet6_rth_init + inet6_rth_reverse + inet6_rth_segments + inet6_rth_space + +config EGLIBC_OPTION_EGLIBC_BACKTRACE + bool "Functions for producing backtraces" + default y + help + This option group includes functions for producing a list of + the function calls that are currently active in a thread, from + within the thread itself. These functions are often used + within signal handlers, to produce diagnostic output. + + This option group includes the following functions: + + backtrace + backtrace_symbols + backtrace_symbols_fd + +config EGLIBC_OPTION_EGLIBC_BSD + bool "BSD-specific functions, and their compatibility stubs" + default y + help + This option group includes functions specific to BSD kernels. + A number of these functions have stub versions that are also + included in libraries built for non-BSD systems for + compatibility. + + This option group includes the following functions: + + chflags + fchflags + lchmod + revoke + setlogin + +config EGLIBC_OPTION_EGLIBC_CXX_TESTS + bool "Tests that link against the standard C++ library." + default y + depends EGLIBC_OPTION_POSIX_WIDE_CHAR_DEVICE_IO + depends EGLIBC_OPTION_EGLIBC_LIBM + help + This option group does not include any C library functions; + instead, it controls which EGLIBC tests an ordinary 'make + tests' runs. With this group disabled, tests that would + normally link against the standard C++ library are not + run. + + The standard C++ library depends on the math library 'libm' and + the wide character I/O functions included in EGLIBC. If those + option groups are disabled, this test must also be disabled. + +config EGLIBC_OPTION_EGLIBC_CATGETS + bool "Functions for accessing message catalogs" + default y + depends EGLIBC_OPTION_EGLIBC_LOCALE_CODE + help + This option group includes functions for accessing message + catalogs: catopen, catclose, and catgets. + + This option group depends on the EGLIBC_LOCALE_CODE + option group; if you disable that, you must also disable this. + +config EGLIBC_OPTION_EGLIBC_CHARSETS + bool "iconv/gconv character set conversion libraries" + default y + help + + This option group includes support for character sets other + than ASCII (ANSI_X3.4-1968) and Unicode and ISO-10646 in their + various encodings. This affects both the character sets + supported by the wide and multibyte character functions, and + those supported by the 'iconv' functions. + + With this option group disabled, EGLIBC supports only the + following character sets: + + ANSI_X3.4 - ASCII + ANSI_X3.4-1968 + ANSI_X3.4-1986 + ASCII + CP367 + CSASCII + IBM367 + ISO-IR-6 + ISO646-US + ISO_646.IRV:1991 + OSF00010020 + US + US-ASCII + + 10646-1:1993 - ISO 10646, in big-endian UCS4 form + 10646-1:1993/UCS4 + CSUCS4 + ISO-10646 + ISO-10646/UCS4 + OSF00010104 + OSF00010105 + OSF00010106 + UCS-4 + UCS-4BE + UCS4 + + UCS-4LE - ISO 10646, in little-endian UCS4 form + + ISO-10646/UTF-8 - ISO 10646, in UTF-8 form + ISO-10646/UTF8 + ISO-IR-193 + OSF05010001 + UTF-8 + UTF8 + + ISO-10646/UCS2 - ISO 10646, in target-endian UCS2 form + OSF00010100 + OSF00010101 + OSF00010102 + UCS-2 + UCS2 + + UCS-2BE - ISO 10646, in big-endian UCS2 form + UNICODEBIG + + UCS-2LE - ISO 10646, in little-endian UCS2 form + UNICODELITTLE + + WCHAR_T - EGLIBC's internal form (target-endian, + 32-bit ISO 10646) + +config EGLIBC_OPTION_EGLIBC_DB_ALIASES + bool "Functions for accessing the mail aliases database" + default y + help + This option group includues functions for looking up mail + aliases in '/etc/aliases' or using nsswitch. It includes the + following functions: + + endaliasent + getaliasbyname + getaliasbyname_r + getaliasent + getaliasent_r + setaliasent + + When this option group is disabled, the NSS service libraries + also lack support for querying their mail alias tables. + +config EGLIBC_OPTION_EGLIBC_ENVZ + bool "Functions for handling envz-style environment vectors." + default y + help + This option group contains functions for creating and operating + on envz vectors. An "envz vector" is a vector of strings in a + contiguous block of memory, where each element is a name-value + pair, and elements are separated from their neighbors by null + characters. + + This option group includes the following functions: + + envz_add envz_merge + envz_entry envz_remove + envz_get envz_strip + +config EGLIBC_OPTION_EGLIBC_FSTAB + bool "Access functions for 'fstab'" + default y + help + This option group includes functions for reading the mount + point specification table, '/etc/fstab'. These functions are + not included in the POSIX standard, which provides the + 'getmntent' family of functions instead. + + This option group includues the following functions: + + endfsent getfsspec + getfsent setfsent + getfsfile + +config EGLIBC_OPTION_EGLIBC_GETLOGIN + bool "The getlogin function" + default y + depends EGLIBC_OPTION_EGLIBC_UTMP + help + This function group includes the 'getlogin' and 'getlogin_r' + functions, which return the user name associated by the login + activity with the current process's controlling terminal. + + With this option group disabled, the 'glob' function will not + fall back on 'getlogin' to find the user's login name for tilde + expansion when the 'HOME' environment variable is not set. + +config EGLIBC_OPTION_EGLIBC_INET + bool "Networking support" + default y + help + This option group includes networking-specific functions and + data. With EGLIBC_INET disabled, the EGLIBC + installation and API changes as follows: + + - The following libraries are not installed: + + libanl + libnsl + libnss_compat + libnss_dns + libnss_hesiod + libnss_nis + libnss_nisplus + libresolv + + - The following functions and variables are omitted from libc: + + authdes_create hstrerror svc_fdset + authdes_getucred htonl svc_getreq + authdes_pk_create htons svc_getreq_common + authnone_create if_freenameindex svc_getreq_poll + authunix_create if_indextoname svc_getreqset + authunix_create_default if_nameindex svc_max_pollfd + bindresvport if_nametoindex svc_pollfd + callrpc in6addr_any svcraw_create + cbc_crypt in6addr_loopback svc_register + clnt_broadcast inet6_opt_append svc_run + clnt_create inet6_opt_find svc_sendreply + clnt_pcreateerror inet6_opt_finish svctcp_create + clnt_perrno inet6_opt_get_val svcudp_bufcreate + clnt_perror inet6_opt_init svcudp_create + clntraw_create inet6_alloc svcudp_enablecache + clnt_spcreateerror inet6_append svcunix_create + clnt_sperrno inet6_find svcunixfd_create + clnt_sperror inet6_init svc_unregister + clnttcp_create inet6_next user2netname + clntudp_bufcreate inet6_space xdecrypt + clntudp_create inet6_opt_next xdr_accepted_reply + clntunix_create inet6_opt_set_val xdr_array + des_setparity inet6_rth_add xdr_authdes_cred + ecb_crypt inet6_rth_getaddr xdr_authdes_verf + endaliasent inet6_rth_init xdr_authunix_parms + endhostent inet6_rth_reverse xdr_bool + endnetent inet6_rth_segments xdr_bytes + endnetgrent inet6_rth_space xdr_callhdr + endprotoent inet_addr xdr_callmsg + endrpcent inet_aton xdr_char + endservent inet_lnaof xdr_cryptkeyarg + ether_aton inet_makeaddr xdr_cryptkeyarg2 + ether_aton_r inet_netof xdr_cryptkeyres + ether_hostton inet_network xdr_des_block + ether_line inet_nsap_addr xdr_double + ether_ntoa inet_nsap_ntoa xdr_enum + ether_ntoa_r inet_ntoa xdr_float + ether_ntohost inet_ntop xdr_free + freeaddrinfo inet_pton xdr_getcredres + freeifaddrs innetgr xdr_hyper + gai_strerror iruserok xdr_int + getaddrinfo iruserok_af xdr_int16_t + getaliasbyname key_decryptsession xdr_int32_t + getaliasbyname_r key_decryptsession_pk xdr_int64_t + getaliasent key_encryptsession xdr_int8_t + getaliasent_r key_encryptsession_pk xdr_keybuf + gethostbyaddr key_gendes xdr_key_netstarg + gethostbyaddr_r key_get_conv xdr_key_netstres + gethostbyname key_secretkey_is_set xdr_keystatus + gethostbyname2 key_setnet xdr_long + gethostbyname2_r key_setsecret xdr_longlong_t + gethostbyname_r netname2host xdrmem_create + gethostent netname2user xdr_netnamestr + gethostent_r ntohl xdr_netobj + getifaddrs ntohs xdr_opaque + getipv4sourcefilter passwd2des xdr_opaque_auth + get_myaddress pmap_getmaps xdr_pmap + getnameinfo pmap_getport xdr_pmaplist + getnetbyaddr pmap_rmtcall xdr_pointer + getnetbyaddr_r pmap_set xdr_quad_t + getnetbyname pmap_unset xdrrec_create + getnetbyname_r rcmd xdrrec_endofrecord + getnetent rcmd_af xdrrec_eof + getnetent_r registerrpc xdrrec_skiprecord + getnetgrent res_init xdr_reference + getnetgrent_r rexec xdr_rejected_reply + getnetname rexec_af xdr_replymsg + getprotobyname rexecoptions xdr_rmtcall_args + getprotobyname_r rpc_createerr xdr_rmtcallres + getprotobynumber rresvport xdr_short + getprotobynumber_r rresvport_af xdr_sizeof + getprotoent rtime xdrstdio_create + getprotoent_r ruserok xdr_string + getpublickey ruserok_af xdr_u_char + getrpcbyname ruserpass xdr_u_hyper + getrpcbyname_r setaliasent xdr_u_int + getrpcbynumber sethostent xdr_uint16_t + getrpcbynumber_r setipv4sourcefilter xdr_uint32_t + getrpcent setnetent xdr_uint64_t + getrpcent_r setnetgrent xdr_uint8_t + getrpcport setprotoent xdr_u_long + getsecretkey setrpcent xdr_u_longlong_t + getservbyname setservent xdr_union + getservbyname_r setsourcefilter xdr_unixcred + getservbyport svcauthdes_stats xdr_u_quad_t + getservbyport_r svcerr_auth xdr_u_short + getservent svcerr_decode xdr_vector + getservent_r svcerr_noproc xdr_void + getsourcefilter svcerr_noprog xdr_wrapstring + h_errlist svcerr_progvers xencrypt + h_errno svcerr_systemerr xprt_register + herror svcerr_weakauth xprt_unregister + h_nerr svc_exit + host2netname svcfd_create + + - The rpcgen, nscd, and rpcinfo commands are not installed. + + - The 'rpc' file (a text file listing RPC services) is not installed. + + Socket-related system calls do not fall in this option group, + because many are also used for other inter-process + communication mechanisms. For example, the 'syslog' routines + use Unix-domain sockets to communicate with the syslog daemon; + syslog is valuable in non-networked contexts. + +config EGLIBC_OPTION_EGLIBC_LIBM + bool "libm (math library)" + default y + help + This option group includes the 'libm' library, containing + mathematical functions. If this option group is omitted, then + an EGLIBC installation does not include shared or unshared versions + of the math library. + + Note that this does not remove all floating-point related + functionality from EGLIBC; for example, 'printf' and 'scanf' + can still print and read floating-point values with this option + group disabled. + + Note that the ISO Standard C++ library 'libstdc++' depends on + EGLIBC's math library 'libm'. If you disable this option + group, you will not be able to build 'libstdc++' against the + resulting EGLIBC installation. + +config EGLIBC_OPTION_EGLIBC_LOCALES + bool "Locale definitions" + default y + help + This option group includes all locale definitions other than + that for the "C" locale. If this option group is omitted, then + only the "C" locale is supported. + + +config EGLIBC_OPTION_EGLIBC_LOCALE_CODE + bool "Locale functions" + default y + depends EGLIBC_OPTION_POSIX_C_LANG_WIDE_CHAR + help + This option group includes locale support functions, programs, + and libraries. With EGLIBC_LOCALE_FUNCTIONS disabled, + EGLIBC supports only the 'C' locale (also known as 'POSIX'), + and ignores the settings of the 'LANG' and 'LC_*' environment + variables. + + With EGLIBC_LOCALE_CODE disabled, the following + functions are omitted from libc: + + duplocale localeconv nl_langinfo rpmatch strfmon_l + freelocale newlocale nl_langinfo_l strfmon uselocale + + Furthermore, only the LC_CTYPE and LC_TIME categories of the + standard "C" locale are available. + + The EGLIBC_CATGETS option group depends on this option + group; if you disable EGLIBC_LOCALE_CODE, you must also + disable EGLIBC_CATGETS. + +config EGLIBC_OPTION_EGLIBC_NIS + bool "Support for NIS, NIS+, and the special 'compat' services." + default y + depends EGLIBC_OPTION_EGLIBC_INET + depends EGLIBC_OPTION_EGLIBC_SUNRPC + help + This option group includes the NIS, NIS+, and 'compat' Name + Service Switch service libraries. When it is disabled, those + services libraries are not installed; you should remove any + references to them from your 'nsswitch.conf' file. + + This option group depends on the EGLIBC_INET option + group; you must enable that to enable this option group. + +config EGLIBC_OPTION_EGLIBC_NSSWITCH + bool "Name service switch (nsswitch) support" + default y + help + + This option group includes support for the 'nsswitch' facility. + With this option group enabled, all EGLIBC functions for + accessing various system databases (passwords and groups; + networking; aliases; public keys; and so on) consult the + '/etc/nsswitch.conf' configuration file to decide how to handle + queries. + + With this option group disabled, EGLIBC uses a fixed list of + services to satisfy queries on each database, as requested by + configuration files specified when EGLIBC is built. Your + 'option-groups.config' file must set the following two + variables: + + EGLIBC_NSSWITCH_FIXED_CONFIG + + Set this to the name of a file whose contents observe the + same syntax as an ordinary '/etc/nsswitch.conf' file. The + EGLIBC build process parses this file just as EGLIBC would + at run time if EGLIBC_NSSWITCH were enabled, and + produces a C library that uses the nsswitch service + libraries to search for database entries as this file + specifies, instead of consulting '/etc/nsswitch.conf' at run + time. + + This should be an absolute filename. The EGLIBC build + process may use it from several different working + directories. It may include references to Makefile + variables like 'common-objpfx' (the top of the build tree, + with a trailing slash), or '..' (the top of the source tree, + with a trailing slash). + + The EGLIBC source tree includes a sample configuration file + named 'nss/fixed-nsswitch.conf'; for simple configurations, + you will probably want to delete references to databases not + needed on your system. + + EGLIBC_NSSWITCH_FIXED_FUNCTIONS + + The EGLIBC build process uses this file to decide which + functions to make available from which service libraries. + The file 'nss/fixed-nsswitch.functions' serves as a sample + configuration file for this setting, and explains its syntax + and meaning in more detail. + + This should be an absolute file name. The EGLIBC build + process may use it from several different working + directories. It may include references to Makefile + variables like 'common-objpfx' (the top of the build tree, + with a trailing slash), or '..' (the top of the source tree, + with a trailing slash). + + Be sure to mention each function in each service you wish to + use. If you do not mention a service's function here, the + EGLIBC database access functions will not find it, even if + it is listed in the EGLIBC_NSSWITCH_FIXED_CONFIG + file. + + In this arrangement, EGLIBC will not use the 'dlopen' and + 'dlsym' functions to find database access functions. Instead, + libc hard-codes references to the service libraries' database + access functions. You must explicitly link your program + against the name service libraries (those whose names start + with 'libnss_', in the sysroot's '/lib' directory) whose + functions you intend to use. This arrangement helps + system-wide static analysis tools decide which functions a + system actually uses. + + Note that some nsswitch service libraries require other option + groups to be enabled; for example, the EGLIBC_INET + option group must be enabled to use the 'libnss_dns.so.2' + service library, which uses the Domain Name System network + protocol to answer queries. + +config EGLIBC_OPTION_EGLIBC_RCMD + bool "Support for 'rcmd' and related library functions" + default y + depends EGLIBC_OPTION_EGLIBC_INET + help + This option group includes functions for running commands on + remote machines via the 'rsh' protocol, and doing authentication + related to those functions. This also includes functions that + use the 'rexec' protocol. + + This option group includes the following functions: + + rcmd ruserok + rcmd_af ruserok_af + rexec iruserok + rexec_af iruserok_af + rresvport ruserpass + rresvport_af + +config EGLIBC_OPTION_EGLIBC_SPAWN + bool "Support for POSIX posix_spawn functions" + default y + help + This option group includes the POSIX functions for executing + programs in child processes without using 'fork' or 'vfork'. + + This option group includes the following functions: + + posix_spawn + posix_spawnattr_destroy + posix_spawnattr_getflags + posix_spawnattr_getpgroup + posix_spawnattr_getschedparam + posix_spawnattr_getschedpolicy + posix_spawnattr_getsigdefault + posix_spawnattr_getsigmask + posix_spawnattr_init + posix_spawnattr_setflags + posix_spawnattr_setpgroup + posix_spawnattr_setschedparam + posix_spawnattr_setschedpolicy + posix_spawnattr_setsigdefault + posix_spawnattr_setsigmask + posix_spawn_file_actions_addclose + posix_spawn_file_actions_adddup2 + posix_spawn_file_actions_addopen + posix_spawn_file_actions_destroy + posix_spawn_file_actions_init + posix_spawnp + + This option group also provides the ability for the iconv, + localedef, and locale programs to operate transparently on + compressed charset definitions. When this option group is + disabled, those programs will only operate on uncompressed + charmap files. + +config EGLIBC_OPTION_EGLIBC_STREAMS + bool "Support for accessing STREAMS." + default y + help + This option group includes functions for reading and writing + messages to and from STREAMS. The STREAMS interface provides a + uniform mechanism for implementing networking services and other + character-based I/O. (STREAMS are not to be confused with + <stdio.h> FILE objects, also called 'streams'.) + + This option group includes the following functions: + + getmsg putpmsg + getpmsg fattach + isastream fdetach + putmsg + +config EGLIBC_OPTION_EGLIBC_SUNRPC + bool "Support for the Sun 'RPC' protocol." + default y + depends EGLIBC_OPTION_EGLIBC_INET + help + This option group includes support for the Sun RPC protocols, + including the 'rpcgen' and 'rpcinfo' programs. + +config EGLIBC_OPTION_EGLIBC_UTMP + bool "Older access functions for 'utmp' login records" + default y + help + This option group includes the older 'utent' family of + functions for accessing user login records in the 'utmp' file. + POSIX omits these functions in favor of the 'utxent' family, + and they are obsolete on systems other than Linux. + + This option group includes the following functions: + + endutent + getutent + getutent_r + getutid + getutid_r + getutline + getutline_r + logwtmp + pututline + setutent + updwtmp + utmpname + + This option group includes the following libraries: + + libutil.so (and libutil.a) + +config EGLIBC_OPTION_EGLIBC_UTMPX + bool "POSIX access functions for 'utmp' login records" + default y + depends EGLIBC_OPTION_EGLIBC_UTMP + help + This option group includes the POSIX functions for reading and + writing user login records in the 'utmp' file (usually + '/var/run/utmp'). The POSIX functions operate on 'struct + utmpx' structures, as opposed to the family of older 'utent' + functions, which operate on 'struct utmp' structures. + + This option group includes the following functions: + + endutxent + getutmp + getutmpx + getutxent + getutxid + getutxline + pututxline + setutxent + updwtmpx + utmpxname + +config EGLIBC_OPTION_EGLIBC_WORDEXP + bool "Shell-style word expansion" + default y + help + This option group includes the 'wordexp' function for + performing word expansion in the manner of the shell, and the + accompanying 'wordfree' function. + +config EGLIBC_OPTION_POSIX_C_LANG_WIDE_CHAR + bool "ISO C library wide character functions, excluding I/O" + default y + help + This option group includes the functions defined by the ISO C + standard for working with wide and multibyte characters in + memory. Functions for reading and writing wide and multibyte + characters from and to files call in the + POSIX_WIDE_CHAR_DEVICE_IO option group. + + This option group includes the following functions: + + btowc mbsinit wcscspn wcstoll + iswalnum mbsrtowcs wcsftime wcstombs + iswalpha mbstowcs wcslen wcstoul + iswblank mbtowc wcsncat wcstoull + iswcntrl swprintf wcsncmp wcstoumax + iswctype swscanf wcsncpy wcsxfrm + iswdigit towctrans wcspbrk wctob + iswgraph towlower wcsrchr wctomb + iswlower towupper wcsrtombs wctrans + iswprint vswprintf wcsspn wctype + iswpunct vswscanf wcsstr wmemchr + iswspace wcrtomb wcstod wmemcmp + iswupper wcscat wcstof wmemcpy + iswxdigit wcschr wcstoimax wmemmove + mblen wcscmp wcstok wmemset + mbrlen wcscoll wcstol + mbrtowc wcscpy wcstold + +config EGLIBC_OPTION_POSIX_REGEXP + bool "Regular expressions" + default y + help + This option group includes the POSIX regular expression + functions, and the associated non-POSIX extensions and + compatibility functions. + + With POSIX_REGEXP disabled, the following functions are + omitted from libc: + + re_comp re_max_failures regcomp + re_compile_fastmap re_search regerror + re_compile_pattern re_search_2 regexec + re_exec re_set_registers regfree + re_match re_set_syntax rpmatch + re_match_2 re_syntax_options + + Furthermore, the compatibility regexp interface defined in the + <regexp.h> header file, 'compile', 'step', and 'advance', is + omitted. + +config EGLIBC_OPTION_POSIX_WIDE_CHAR_DEVICE_IO + bool "Input and output functions for wide characters" + default y + depends EGLIBC_OPTION_POSIX_C_LANG_WIDE_CHAR + help + This option group includes functions for reading and writing + wide characters to and from <stdio.h> streams. + + This option group includes the following functions: + + fgetwc fwprintf putwchar vwscanf + fgetws fwscanf ungetwc wprintf + fputwc getwc vfwprintf wscanf + fputws getwchar vfwscanf + fwide putwc vwprintf + + This option group further includes the following unlocked + variants of the above functions: + + fgetwc_unlocked getwc_unlocked + fgetws_unlocked getwchar_unlocked + fputwc_unlocked putwc_unlocked + fputws_unlocked putwchar_unlocked + + Note that the GNU standard C++ library, 'libstdc++.so', uses + some of these functions; you will not be able to link or run + C++ programs if you disable this option group. + + This option group also affects the behavior of the following + functions: + + fdopen + fopen + fopen64 + freopen + freopen64 + + These functions all take an OPENTYPE parameter which may + contain a string of the form ",ccs=CHARSET", indicating that + the underlying file uses the character set named CHARSET. + This produces a wide-oriented stream, which is only useful + when the functions included in this option group are present. + If the user attempts to open a file specifying a character set + in the OPENTYPE parameter, and EGLIBC was built with this + option group disabled, the function returns NULL, and sets + errno to EINVAL. diff --git a/toolchain/eglibc/patches/2.6.1/101-arm_asm_page_h.patch b/toolchain/eglibc/patches/2.6.1/101-arm_asm_page_h.patch new file mode 100644 index 0000000000..f7b07789fa --- /dev/null +++ b/toolchain/eglibc/patches/2.6.1/101-arm_asm_page_h.patch @@ -0,0 +1,11 @@ +diff -ruN eglibc-2.6-orig/ports/sysdeps/unix/sysv/linux/arm/ioperm.c eglibc-2.6/ports/sysdeps/unix/sysv/linux/arm/ioperm.c +--- eglibc-2.6-orig/ports/sysdeps/unix/sysv/linux/arm/ioperm.c 2006-08-17 03:23:58.000000000 +0200 ++++ eglibc-2.6/ports/sysdeps/unix/sysv/linux/arm/ioperm.c 2008-11-04 16:21:04.000000000 +0100 +@@ -45,7 +45,6 @@ + #include <sys/mman.h> + + #include <linux/version.h> +-#include <asm/page.h> + #include <sys/sysctl.h> + + #define PATH_ARM_SYSTYPE "/etc/arm_systype" diff --git a/toolchain/eglibc/patches/2.7/101-arm_asm_page_h.patch b/toolchain/eglibc/patches/2.7/101-arm_asm_page_h.patch new file mode 100644 index 0000000000..edec70714a --- /dev/null +++ b/toolchain/eglibc/patches/2.7/101-arm_asm_page_h.patch @@ -0,0 +1,11 @@ +diff -ruN eglibc-2.7-orig/ports/sysdeps/unix/sysv/linux/arm/ioperm.c eglibc-2.7/ports/sysdeps/unix/sysv/linux/arm/ioperm.c +--- eglibc-2.7-orig/ports/sysdeps/unix/sysv/linux/arm/ioperm.c 2006-08-17 03:23:58.000000000 +0200 ++++ eglibc-2.7/ports/sysdeps/unix/sysv/linux/arm/ioperm.c 2008-11-04 16:12:24.375864916 +0100 +@@ -45,7 +45,6 @@ + #include <sys/mman.h> + + #include <linux/version.h> +-#include <asm/page.h> + #include <sys/sysctl.h> + + #define PATH_ARM_SYSTYPE "/etc/arm_systype" diff --git a/toolchain/eglibc/patches/2.7/103-arm_nptl_cargs6.patch b/toolchain/eglibc/patches/2.7/103-arm_nptl_cargs6.patch new file mode 100644 index 0000000000..97bdc98280 --- /dev/null +++ b/toolchain/eglibc/patches/2.7/103-arm_nptl_cargs6.patch @@ -0,0 +1,13 @@ +diff -ruN eglibc-2.7-orig/ports/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h eglibc-2.7/ports/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h +--- eglibc-2.7-orig/ports/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h 2007-06-06 19:48:04.000000000 +0200 ++++ eglibc-2.7/ports/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h 2008-11-04 16:48:29.000000000 +0100 +@@ -73,6 +73,9 @@ + # define DOCARGS_5 DOCARGS_4 + # define UNDOCARGS_5 UNDOCARGS_4 + ++# define DOCARGS_6 DOCARGS_5 ++# define UNDOCARGS_6 UNDOCARGS_5 ++ + # ifdef IS_IN_libpthread + # define CENABLE bl PLTJMP(__pthread_enable_asynccancel) + # define CDISABLE bl PLTJMP(__pthread_disable_asynccancel) diff --git a/toolchain/eglibc/patches/2.7/104-arm_nptl_lowlevellock.patch b/toolchain/eglibc/patches/2.7/104-arm_nptl_lowlevellock.patch new file mode 100644 index 0000000000..67823070d7 --- /dev/null +++ b/toolchain/eglibc/patches/2.7/104-arm_nptl_lowlevellock.patch @@ -0,0 +1,11 @@ +diff -ruN eglibc-2.7-orig/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h eglibc-2.7/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h +--- eglibc-2.7-orig/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h 2007-09-12 18:26:54.000000000 +0200 ++++ eglibc-2.7/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h 2008-11-04 17:11:21.000000000 +0100 +@@ -25,6 +25,7 @@ + #include <atomic.h> + #include <sysdep.h> + #include <kernel-features.h> ++#include <tls.h> + + #define FUTEX_WAIT 0 + #define FUTEX_WAKE 1 diff --git a/toolchain/eglibc/patches/2.8/103-arm_nptl_cargs6.patch b/toolchain/eglibc/patches/2.8/103-arm_nptl_cargs6.patch new file mode 100644 index 0000000000..97bdc98280 --- /dev/null +++ b/toolchain/eglibc/patches/2.8/103-arm_nptl_cargs6.patch @@ -0,0 +1,13 @@ +diff -ruN eglibc-2.7-orig/ports/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h eglibc-2.7/ports/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h +--- eglibc-2.7-orig/ports/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h 2007-06-06 19:48:04.000000000 +0200 ++++ eglibc-2.7/ports/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h 2008-11-04 16:48:29.000000000 +0100 +@@ -73,6 +73,9 @@ + # define DOCARGS_5 DOCARGS_4 + # define UNDOCARGS_5 UNDOCARGS_4 + ++# define DOCARGS_6 DOCARGS_5 ++# define UNDOCARGS_6 UNDOCARGS_5 ++ + # ifdef IS_IN_libpthread + # define CENABLE bl PLTJMP(__pthread_enable_asynccancel) + # define CDISABLE bl PLTJMP(__pthread_disable_asynccancel) diff --git a/toolchain/eglibc/patches/2.8/104-arm_nptl_lowlevellock.patch b/toolchain/eglibc/patches/2.8/104-arm_nptl_lowlevellock.patch new file mode 100644 index 0000000000..67823070d7 --- /dev/null +++ b/toolchain/eglibc/patches/2.8/104-arm_nptl_lowlevellock.patch @@ -0,0 +1,11 @@ +diff -ruN eglibc-2.7-orig/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h eglibc-2.7/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h +--- eglibc-2.7-orig/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h 2007-09-12 18:26:54.000000000 +0200 ++++ eglibc-2.7/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h 2008-11-04 17:11:21.000000000 +0100 +@@ -25,6 +25,7 @@ + #include <atomic.h> + #include <sysdep.h> + #include <kernel-features.h> ++#include <tls.h> + + #define FUTEX_WAIT 0 + #define FUTEX_WAKE 1 diff --git a/toolchain/gcc/Config.in b/toolchain/gcc/Config.in index 172838f760..44d30298cf 100644 --- a/toolchain/gcc/Config.in +++ b/toolchain/gcc/Config.in @@ -40,6 +40,7 @@ config EXTRA_GCC_CONFIG_OPTIONS config SSP_SUPPORT bool + depends !GCC_VERSION_3_4_6 prompt "Enable Smash Stacking Protection support" if TOOLCHAINOPTS default n help diff --git a/toolchain/gcc/Makefile b/toolchain/gcc/Makefile index 9b3a34a0b5..5e8bb9abb3 100644 --- a/toolchain/gcc/Makefile +++ b/toolchain/gcc/Makefile @@ -1,8 +1,8 @@ -# Makefile for to build a gcc/uClibc toolchain # # Copyright (C) 2002-2003 Erik Andersen <andersen@uclibc.org> # Copyright (C) 2004 Manuel Novoa III <mjn3@uclibc.org> # Copyright (C) 2005-2006 Felix Fietkau <nbd@openwrt.org> +# Copyright (C) 2006-2008 OpenWrt.org # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -40,111 +40,163 @@ PATCH_DIR=./patches/$(PKG_VERSION) STAGING_DIR_HOST:=$(TOOLCHAIN_DIR) BUILD_DIR_HOST:=$(BUILD_DIR_TOOLCHAIN) + override CONFIG_AUTOREBUILD= include $(INCLUDE_DIR)/host-build.mk STAMP_BUILT:=$(TOOLCHAIN_DIR)/stamp/.gcc-initial_installed -BUILD_DIR1:=$(BUILD_DIR_HOST)/gcc-$(PKG_VERSION)-initial -BUILD_DIR2:=$(BUILD_DIR_HOST)/gcc-$(PKG_VERSION)-final + +PKG_BUILD_DIR0:=$(PKG_BUILD_DIR)-minimal +PKG_BUILD_DIR1:=$(PKG_BUILD_DIR)-initial +PKG_BUILD_DIR2:=$(PKG_BUILD_DIR)-final SEP:=, TARGET_LANGUAGES:="c$(if $(CONFIG_INSTALL_LIBSTDCPP),$(SEP)c++)$(if $(CONFIG_INSTALL_LIBGCJ),$(SEP)java)" -ifeq ($(CONFIG_SSP_SUPPORT),y) - SSP:=--enable-libssp -else - SSP:=--disable-libssp -endif - -EXTRA_TARGET=$(if $(CONFIG_EXTRA_TARGET_ARCH),--enable-biarch --enable-targets=$(call qstrip,$(CONFIG_EXTRA_TARGET_ARCH_NAME))-linux-uclibc) - -define Stage1/Configure - $(SED) 's,TARGET_CROSS=.*,TARGET_CROSS=$(REAL_GNU_TARGET_NAME)-,' $(TOOLCHAIN_DIR)/info.mk - $(SED) 's,GCC_VERSION=.*,GCC_VERSION=$(PKG_VERSION),' $(TOOLCHAIN_DIR)/info.mk - mkdir -p $(BUILD_DIR1) - (cd $(BUILD_DIR1); rm -f config.cache; \ - SHELL="$(BASH)" \ - $(PKG_BUILD_DIR)/configure \ - --prefix=$(TOOLCHAIN_DIR) \ +GCC_CONFIGURE_COMMON:= \ + SHELL="$(BASH)" \ + $(PKG_BUILD_DIR)/configure \ + --prefix=$(TOOLCHAIN_DIR)/usr \ --build=$(GNU_HOST_NAME) \ --host=$(GNU_HOST_NAME) \ --target=$(REAL_GNU_TARGET_NAME) \ - --enable-languages=c \ - --disable-shared \ - --with-sysroot=$(BUILD_DIR_HOST)/uClibc_dev/ \ - --disable-__cxa_atexit \ - --enable-target-optspace \ --with-gnu-ld \ - --disable-nls \ + --enable-target-optspace \ --disable-libmudflap \ --disable-multilib \ - $(SSP) \ - $(EXTRA_TARGET) \ + --disable-nls \ $(SOFT_FLOAT_CONFIG_OPTION) \ $(call qstrip,$(CONFIG_EXTRA_GCC_CONFIG_OPTIONS)) \ + +ifneq ($(CONFIG_SSP_SUPPORT),) + GCC_CONFIGURE_COMMON+= \ + --enable-libssp +else + GCC_CONFIGURE_COMMON+= \ + --disable-libssp +endif + +ifneq ($(CONFIG_EXTRA_TARGET_ARCH),) + GCC_CONFIGURE_COMMON+= \ + --enable-biarch \ + --enable-targets=$(call qstrip,$(CONFIG_EXTRA_TARGET_ARCH_NAME))-linux-$(TARGET_SUFFIX) +endif + +ifeq ($(LIBC),uClibc) + GCC_CONFIGURE_COMMON+= \ + --disable-__cxa_atexit +else + GCC_CONFIGURE_COMMON+= \ + --enable-__cxa_atexit +endif + +GCC_CONFIGURE_STAGE0:= \ + $(GCC_CONFIGURE_COMMON) \ + --with-newlib \ + --without-headers \ + --enable-languages=c \ + --disable-libgomp \ + --disable-libssp \ + --disable-shared \ + --disable-threads \ + +GCC_CONFIGURE_STAGE1:= \ + $(GCC_CONFIGURE_COMMON) \ + --with-newlib \ + --with-sysroot=$(BUILD_DIR_TOOLCHAIN)/$(LIBC)-dev \ + --enable-languages=c \ + --disable-shared \ + --disable-threads \ + +GCC_CONFIGURE_STAGE2:= \ + $(GCC_CONFIGURE_COMMON) \ + --enable-languages=$(TARGET_LANGUAGES) \ + --enable-shared \ + --enable-threads \ + --with-slibdir=$(TOOLCHAIN_DIR)/lib \ + +GCC_MAKE:= \ + export SHELL="$(BASH)"; \ + $(MAKE) \ + + +define Build/SetToolchainInfo + $(SED) 's,TARGET_CROSS=.*,TARGET_CROSS=$(REAL_GNU_TARGET_NAME)-,' $(TOOLCHAIN_DIR)/info.mk + $(SED) 's,GCC_VERSION=.*,GCC_VERSION=$(PKG_VERSION),' $(TOOLCHAIN_DIR)/info.mk +endef + + +define Stage0/Configure + mkdir -p $(PKG_BUILD_DIR0) + (cd $(PKG_BUILD_DIR0); rm -f config.cache; \ + $(GCC_CONFIGURE_STAGE0) \ ); endef + +define Stage0/Compile + $(GCC_MAKE) -C $(PKG_BUILD_DIR0) all-gcc +endef + +define Stage0/Install + $(GCC_MAKE) -C $(PKG_BUILD_DIR0) install-gcc +endef + + +define Stage1/Configure + mkdir -p $(PKG_BUILD_DIR1) + (cd $(PKG_BUILD_DIR1); rm -f config.cache; \ + $(GCC_CONFIGURE_STAGE1) \ + ); +endef + define Stage1/Compile - export SHELL="$(BASH)"; $(MAKE) -C $(BUILD_DIR1) all-gcc + $(GCC_MAKE) -C $(PKG_BUILD_DIR1) all-build-libiberty all-gcc endef + define Stage1/Install - export SHELL="$(BASH)"; $(MAKE) -C $(BUILD_DIR1) install-gcc + $(GCC_MAKE) -C $(PKG_BUILD_DIR1) install-gcc + # XXX: glibc insists on linking against libgcc_eh + ( cd $(TOOLCHAIN_DIR)/usr/lib/gcc/$(REAL_GNU_TARGET_NAME)/$(PKG_VERSION) ; \ + [ -e libgcc_eh.a ] || ln -sf libgcc.a libgcc_eh.a ; \ + ) endef + define Stage2/Configure - mkdir -p $(BUILD_DIR2) $(TOOLCHAIN_DIR)/$(REAL_GNU_TARGET_NAME) + mkdir -p $(PKG_BUILD_DIR2) $(TOOLCHAIN_DIR)/usr/$(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 - (cd $(BUILD_DIR2); rm -f config.cache; \ - SHELL="$(BASH)" \ - $(PKG_BUILD_DIR)/configure \ - --prefix=$(TOOLCHAIN_DIR) \ - --build=$(GNU_HOST_NAME) \ - --host=$(GNU_HOST_NAME) \ - --target=$(REAL_GNU_TARGET_NAME) \ - --enable-languages=$(TARGET_LANGUAGES) \ - --enable-shared \ - --disable-__cxa_atexit \ - --enable-target-optspace \ - --with-gnu-ld \ - --disable-nls \ - --disable-libmudflap \ - --disable-multilib \ - $(SSP) \ - $(EXTRA_TARGET) \ - $(SOFT_FLOAT_CONFIG_OPTION) \ - $(call qstrip,$(CONFIG_EXTRA_GCC_CONFIG_OPTIONS)) \ + rm -rf $(TOOLCHAIN_DIR)/usr/$(REAL_GNU_TARGET_NAME)/sys-include + ln -sf ../include $(TOOLCHAIN_DIR)/usr/$(REAL_GNU_TARGET_NAME)/sys-include + rm -rf $(TOOLCHAIN_DIR)/usr/$(REAL_GNU_TARGET_NAME)/lib + ln -sf ../lib $(TOOLCHAIN_DIR)/usr/$(REAL_GNU_TARGET_NAME)/lib + (cd $(PKG_BUILD_DIR2); rm -f config.cache; \ + $(GCC_CONFIGURE_STAGE2) \ ); endef define Stage2/Compile - export SHELL="\$(BASH)"; \$(MAKE) -C \$(BUILD_DIR2) all + $(GCC_MAKE) -C $(PKG_BUILD_DIR2) all endef define SetupExtraArch - for app in $(TOOLCHAIN_DIR)/bin/$(OPTIMIZE_FOR_CPU)*-{gcc,gcc-*,g++}; do \ + for app in $(TOOLCHAIN_DIR)/usr/bin/$(OPTIMIZE_FOR_CPU)*-{gcc,gcc-*,g++}; do \ [ -e $$$$app ] || continue; \ old_base=$$$$(basename $$$$app); \ new_base=$(call qstrip,$(CONFIG_EXTRA_TARGET_ARCH_NAME))-$$$${old_base##$(OPTIMIZE_FOR_CPU)-}; \ sed -e "s/@CC_BASE@/$$$$old_base/" \ -e 's/@EXTRA_ARCH_OPTS@/$(call qstrip,$(CONFIG_EXTRA_TARGET_ARCH_OPTS))/' \ ./files/alternate-arch-cc.in > \ - $(TOOLCHAIN_DIR)/bin/$$$$new_base; \ - chmod a+x $(TOOLCHAIN_DIR)/bin/$$$$new_base; \ + $(TOOLCHAIN_DIR)/usr/bin/$$$$new_base; \ + chmod a+x $(TOOLCHAIN_DIR)/usr/bin/$$$$new_base; \ done endef define Stage2/Install - $(MAKE) -C $(BUILD_DIR2) \ - SHELL="$(BASH)" \ - install + $(GCC_MAKE) -C $(PKG_BUILD_DIR2) install # Set up the symlinks to enable lying about target name. set -e; \ - (cd $(TOOLCHAIN_DIR); \ + (cd $(TOOLCHAIN_DIR)/usr; \ ln -sf $(REAL_GNU_TARGET_NAME) $(GNU_TARGET_NAME); \ cd bin; \ for app in $(REAL_GNU_TARGET_NAME)-* ; do \ @@ -155,21 +207,28 @@ define Stage2/Install $(if $(CONFIG_EXTRA_TARGET_ARCH),$(call SetupExtraArch)) endef + define Build/Prepare + $(call Build/SetToolchainInfo) $(call Build/Prepare/Default) + ln -snf $(PKG_NAME)-$(PKG_VERSION) $(BUILD_DIR_TOOLCHAIN)/$(PKG_NAME) + $(CP) $(SCRIPT_DIR)/config.{guess,sub} $(PKG_BUILD_DIR)/ $(SED) 's,\(version_string.. = "[0-9\.]*\).*\(";\),\1 (OpenWrt-2.0)\2,' $(PKG_BUILD_DIR)/gcc/version.c $(SED) 's,\(bug_report_url.. = "\).*\(";\),\1<URL:https://dev.openwrt.org/>\2,' $(PKG_BUILD_DIR)/gcc/version.c (cd $(PKG_BUILD_DIR)/libstdc++-v3; autoconf;); $(SED) 's,gcc_no_link=yes,gcc_no_link=no,' $(PKG_BUILD_DIR)/libstdc++-v3/configure + $(call Stage0/Configure) + $(call Stage0/Compile) + $(call Stage0/Install) endef define Build/Configure - $(call Stage1/Configure) endef define Build/Compile + $(call Stage1/Configure) $(call Stage1/Compile) - $(if $(wildcard $(TOOLCHAIN_DIR)/bin/$(GNU_TARGET_NAME)-gcc),,$(call Stage1/Install)) + $(call Stage1/Install) endef define Build/Install @@ -181,11 +240,13 @@ endef define Build/Clean rm -rf \ $(PKG_BUILD_DIR) \ - $(BUILD_DIR1) \ - $(BUILD_DIR2) \ - $(TOOLCHAIN_DIR)/$(REAL_GNU_TARGET_NAME) \ - $(TOOLCHAIN_DIR)/bin/$(REAL_GNU_TARGET_NAME)-gc* \ - $(TOOLCHAIN_DIR)/bin/$(REAL_GNU_TARGET_NAME)-c* + $(PKG_BUILD_DIR0) \ + $(PKG_BUILD_DIR1) \ + $(PKG_BUILD_DIR2) \ + $(BUILD_DIR_TOOLCHAIN)/$(PKG_NAME) \ + $(TOOLCHAIN_DIR)/usr/$(REAL_GNU_TARGET_NAME) \ + $(TOOLCHAIN_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-gc* \ + $(TOOLCHAIN_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-c* endef $(eval $(call HostBuild)) diff --git a/toolchain/glibc-ports/Makefile b/toolchain/glibc-ports/Makefile new file mode 100644 index 0000000000..2ddeb4e2be --- /dev/null +++ b/toolchain/glibc-ports/Makefile @@ -0,0 +1,58 @@ +# +# Copyright (C) 2006-2008 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:=glibc-ports +PKG_VERSION:=$(call qstrip,$(CONFIG_GLIBC_VERSION)) + +ifeq ($(PKG_VERSION),2.3.6) + PKG_MD5SUM:=40dce745d34ff80401da2fdfe58f6d53 +endif +ifeq ($(PKG_VERSION),2.6.1) + PKG_MD5SUM:=53d88ca624642dd267752ccce77b19d0 +endif +ifeq ($(PKG_VERSION),2.7) + PKG_MD5SUM:=eaeb8527b8fa286c2d887157214f9998 +endif + +PKG_SOURCE_URL:=@GNU/glibc/ +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 +PKG_CAT:=bzcat + +PATCH_DIR:=./patches/$(PKG_VERSION) + +STAGING_DIR_HOST:=$(TOOLCHAIN_DIR) +BUILD_DIR_HOST:=$(BUILD_DIR_TOOLCHAIN) + +override CONFIG_AUTOREBUILD= + +include $(INCLUDE_DIR)/host-build.mk + +STAMP_BUILT:=$(TOOLCHAIN_DIR)/stamp/.glibc-ports_built +STAMP_INSTALLED:=$(TOOLCHAIN_DIR)/stamp/.glibc-ports_installed + +define Build/Prepare +$(call Build/Prepare/Default) + ln -snf $(PKG_NAME)-$(PKG_VERSION) $(BUILD_DIR_TOOLCHAIN)/$(PKG_NAME) +endef + +define Build/Configure +endef + +define Build/Compile +endef + +define Build/Install +endef + +define Build/Clean + rm -rf \ + $(PKG_BUILD_DIR) \ + $(BUILD_DIR_TOOLCHAIN)/$(PKG_NAME) +endef + +$(eval $(call HostBuild)) diff --git a/toolchain/glibc-ports/patches/2.6.1/101-arm_asm_page_h.patch b/toolchain/glibc-ports/patches/2.6.1/101-arm_asm_page_h.patch new file mode 100644 index 0000000000..9279ccb64c --- /dev/null +++ b/toolchain/glibc-ports/patches/2.6.1/101-arm_asm_page_h.patch @@ -0,0 +1,13 @@ +http://sourceware.org/ml/crossgcc/2008-05/msg00014.html + +diff -durN glibc-ports-2.6.1.orig/sysdeps/unix/sysv/linux/arm/ioperm.c glibc-ports-2.6.1/sysdeps/unix/sysv/linux/arm/ioperm.c +--- glibc-ports-2.6.1.orig/sysdeps/unix/sysv/linux/arm/ioperm.c 2005-06-10 13:12:09.000000000 +0200 ++++ glibc-ports-2.6.1/sysdeps/unix/sysv/linux/arm/ioperm.c 2008-05-18 16:19:45.000000000 +0200 +@@ -45,7 +45,6 @@ + #include <sys/mman.h> + + #include <linux/version.h> +-#include <asm/page.h> + #include <sys/sysctl.h> + + #define PATH_ARM_SYSTYPE "/etc/arm_systype" diff --git a/toolchain/glibc-ports/patches/2.6.1/102-arm_nptl.patch b/toolchain/glibc-ports/patches/2.6.1/102-arm_nptl.patch new file mode 100644 index 0000000000..1207e7969b --- /dev/null +++ b/toolchain/glibc-ports/patches/2.6.1/102-arm_nptl.patch @@ -0,0 +1,13 @@ +diff -durN glibc-ports-2.6.1.orig/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h glibc-ports-2.6.1/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h +--- glibc-ports-2.6.1.orig/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h 2005-11-16 20:22:59.000000000 +0100 ++++ glibc-ports-2.6.1/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h 2007-09-06 13:53:16.000000000 +0200 +@@ -132,3 +132,9 @@ + # define NO_CANCELLATION 1 + + #endif ++ ++#ifndef __ASSEMBLER__ ++# define RTLD_SINGLE_THREAD_P \ ++ __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ ++ header.multiple_threads) == 0, 1) ++#endif diff --git a/toolchain/glibc-ports/patches/2.6.1/401-mips_bootstrap_gcc_header_install.patch b/toolchain/glibc-ports/patches/2.6.1/401-mips_bootstrap_gcc_header_install.patch new file mode 100644 index 0000000000..0908974a93 --- /dev/null +++ b/toolchain/glibc-ports/patches/2.6.1/401-mips_bootstrap_gcc_header_install.patch @@ -0,0 +1,11 @@ +diff -ruN glibc-ports-2.7-orig/sysdeps/mips/mips32/Makefile glibc-ports-2.7/sysdeps/mips/mips32/Makefile +--- glibc-ports-2.7-orig/ports/sysdeps/mips/mips32/Makefile 2003-03-29 09:15:28.000000000 +0100 ++++ glibc-ports-2.7/sysdeps/mips/mips32/Makefile 2008-10-01 17:04:40.475005748 +0200 +@@ -1,3 +1,7 @@ ++ifeq ($(filter -DBOOTSTRAP_GCC,$(CFLAGS)),) + ifeq ($(filter -mabi=32,$(CC)),) + CC += -mabi=32 + endif ++else ++CC += -D"_MIPS_SZPTR=32" ++endif diff --git a/toolchain/glibc-ports/patches/2.6.1/603-powerpc-softfloat.patch b/toolchain/glibc-ports/patches/2.6.1/603-powerpc-softfloat.patch new file mode 100644 index 0000000000..3213c9aed0 --- /dev/null +++ b/toolchain/glibc-ports/patches/2.6.1/603-powerpc-softfloat.patch @@ -0,0 +1,21 @@ +From: http://sourceware.org/ml/crossgcc/2008-10/msg00044.html +From: http://sources.redhat.com/ml/libc-ports/2007-06/msg00005.html + +2007-06-07 Steven Munroe <sjmunroe@us.ibm.com> + + * sysdeps/powerpc/nofpu/Makefile: Remove fe_nomask from libm-support. + +diff -urN glibc-ports-2.6.1.orig/sysdeps/powerpc/nofpu/Makefile glibc-ports-2.6.1/sysdeps/powerpc/nofpu/Makefile +--- glibc-ports-2.6.1.orig/sysdeps/powerpc/nofpu/Makefile 2006-11-22 09:13:11.000000000 -0600 ++++ glibc-ports-2.6.1/sysdeps/powerpc/nofpu/Makefile 2007-06-07 09:53:05.708240976 -0500 +@@ -6,7 +6,7 @@ + endif + + ifeq ($(subdir),math) +-libm-support += fenv_const fe_nomask ++libm-support += fenv_const + CPPFLAGS += -I../soft-fp/ + # The follow CFLAGS are a work around for GCC Bugzilla Bug 29253 + # "expand_abs wrong default code for floating point" + + diff --git a/toolchain/glibc-ports/patches/2.7/101-arm_asm_page_h.patch b/toolchain/glibc-ports/patches/2.7/101-arm_asm_page_h.patch new file mode 100644 index 0000000000..9279ccb64c --- /dev/null +++ b/toolchain/glibc-ports/patches/2.7/101-arm_asm_page_h.patch @@ -0,0 +1,13 @@ +http://sourceware.org/ml/crossgcc/2008-05/msg00014.html + +diff -durN glibc-ports-2.6.1.orig/sysdeps/unix/sysv/linux/arm/ioperm.c glibc-ports-2.6.1/sysdeps/unix/sysv/linux/arm/ioperm.c +--- glibc-ports-2.6.1.orig/sysdeps/unix/sysv/linux/arm/ioperm.c 2005-06-10 13:12:09.000000000 +0200 ++++ glibc-ports-2.6.1/sysdeps/unix/sysv/linux/arm/ioperm.c 2008-05-18 16:19:45.000000000 +0200 +@@ -45,7 +45,6 @@ + #include <sys/mman.h> + + #include <linux/version.h> +-#include <asm/page.h> + #include <sys/sysctl.h> + + #define PATH_ARM_SYSTYPE "/etc/arm_systype" diff --git a/toolchain/glibc-ports/patches/2.7/102-arm_nptl.patch b/toolchain/glibc-ports/patches/2.7/102-arm_nptl.patch new file mode 100644 index 0000000000..65836b6816 --- /dev/null +++ b/toolchain/glibc-ports/patches/2.7/102-arm_nptl.patch @@ -0,0 +1,13 @@ +diff -durN glibc-ports-2.6.1.orig/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h glibc-ports-2.6.1/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h +--- glibc-ports-2.6.1.orig/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h 2005-11-16 20:22:59.000000000 +0100 ++++ glibc-ports-2.6.1/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h 2007-09-06 13:53:16.000000000 +0200 +@@ -126,3 +126,9 @@ + # define NO_CANCELLATION 1 + + #endif ++ ++#ifndef __ASSEMBLER__ ++# define RTLD_SINGLE_THREAD_P \ ++ __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ ++ header.multiple_threads) == 0, 1) ++#endif diff --git a/toolchain/glibc-ports/patches/2.7/103-arm_nptl_cargs6.patch b/toolchain/glibc-ports/patches/2.7/103-arm_nptl_cargs6.patch new file mode 100644 index 0000000000..8f363137c8 --- /dev/null +++ b/toolchain/glibc-ports/patches/2.7/103-arm_nptl_cargs6.patch @@ -0,0 +1,15 @@ +http://sourceware.org/ml/libc-ports/2008-02/msg00005.html + +diff -durN glibc-ports-2.7.orig/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h glibc-ports-2.7/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h +--- glibc-ports-2.7.orig/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h 2007-06-06 19:27:04.000000000 +0200 ++++ glibc-ports-2.7/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h 2008-05-18 16:57:21.000000000 +0200 +@@ -73,6 +73,9 @@ + # define DOCARGS_5 DOCARGS_4 + # define UNDOCARGS_5 UNDOCARGS_4 + ++# define DOCARGS_6 DOCARGS_5 ++# define UNDOCARGS_6 UNDOCARGS_5 ++ + # ifdef IS_IN_libpthread + # define CENABLE bl PLTJMP(__pthread_enable_asynccancel) + # define CDISABLE bl PLTJMP(__pthread_disable_asynccancel) diff --git a/toolchain/glibc-ports/patches/2.7/104-arm_nptl_lowlevellock.patch b/toolchain/glibc-ports/patches/2.7/104-arm_nptl_lowlevellock.patch new file mode 100644 index 0000000000..047f786cf6 --- /dev/null +++ b/toolchain/glibc-ports/patches/2.7/104-arm_nptl_lowlevellock.patch @@ -0,0 +1,13 @@ +http://www.nabble.com/arm-linux-compilation-failure-and-possible-fix-td19229074.html + +diff -durN glibc-ports-2.7.orig/sysdeps/unix/sysv/linux/arm/ioperm.c glibc-ports-2.7/sysdeps/unix/sysv/linux/arm/ioperm.c +--- glibc-ports-2.7.orig/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h.orig 2008-10-04 20:46:13.000000000 +0200 ++++ glibc-ports-2.7/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h 2008-10-04 20:45:40.000000000 +0200 +@@ -25,6 +25,7 @@ + #include <atomic.h> + #include <sysdep.h> + #include <kernel-features.h> ++#include <tls.h> + + #define FUTEX_WAIT 0 + #define FUTEX_WAKE 1 diff --git a/toolchain/glibc-ports/patches/2.7/401-mips_bootstrap_gcc_header_install.patch b/toolchain/glibc-ports/patches/2.7/401-mips_bootstrap_gcc_header_install.patch new file mode 100644 index 0000000000..66f42e9284 --- /dev/null +++ b/toolchain/glibc-ports/patches/2.7/401-mips_bootstrap_gcc_header_install.patch @@ -0,0 +1,11 @@ +diff -ruN glibc-ports-2.7-orig/sysdeps/mips/mips32/Makefile glibc-ports-2.7/sysdeps/mips/mips32/Makefile +--- glibc-ports-2.7-orig/sysdeps/mips/mips32/Makefile 2003-03-29 09:15:28.000000000 +0100 ++++ glibc-ports-2.7/sysdeps/mips/mips32/Makefile 2008-10-01 17:04:40.475005748 +0200 +@@ -1,3 +1,7 @@ ++ifeq ($(filter -DBOOTSTRAP_GCC,$(CFLAGS)),) + ifeq ($(filter -mabi=32,$(CC)),) + CC += -mabi=32 + endif ++else ++CC += -D"_MIPS_SZPTR=32" ++endif diff --git a/toolchain/glibc/Config.in b/toolchain/glibc/Config.in new file mode 100644 index 0000000000..e1bffdab2b --- /dev/null +++ b/toolchain/glibc/Config.in @@ -0,0 +1,17 @@ +choice + prompt "glibc version" + depends on TOOLCHAINOPTS && USE_GLIBC + default GLIBC_VERSION_2_6_1 + help + Select the version of glibc you wish to use. + + config GLIBC_VERSION_2_3_6 + bool "glibc 2.3.6" + + config GLIBC_VERSION_2_6_1 + bool "glibc 2.6.1" + + config GLIBC_VERSION_2_7 + bool "glibc 2.7" + +endchoice diff --git a/toolchain/glibc/Config.version b/toolchain/glibc/Config.version new file mode 100644 index 0000000000..d68eeea8a9 --- /dev/null +++ b/toolchain/glibc/Config.version @@ -0,0 +1,15 @@ +config GLIBC_VERSION + string + depends on USE_GLIBC + default "2.3.6" if GLIBC_VERSION_2_3_6 + default "2.6.1" if GLIBC_VERSION_2_6_1 + default "2.7" if GLIBC_VERSION_2_7 + default "2.7" + +config GLIBC_PORTS + bool + depends on USE_GLIBC + default y if GLIBC_VERSION_2_3_6 && (arm || armeb || mips || mipsel) + default y if GLIBC_VERSION_2_6_1 && (arm || armeb || mips || mipsel || powerpc) + default y if GLIBC_VERSION_2_7 && (arm || armeb || mips || mipsel || powerpc) + default n diff --git a/toolchain/glibc/Makefile b/toolchain/glibc/Makefile new file mode 100644 index 0000000000..fd6acc46b8 --- /dev/null +++ b/toolchain/glibc/Makefile @@ -0,0 +1,179 @@ +# +# Copyright (C) 2006-2008 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:=glibc +PKG_VERSION:=$(call qstrip,$(CONFIG_GLIBC_VERSION)) + +ifeq ($(PKG_VERSION),2.3.6) + PKG_MD5SUM:=bfdce99f82d6dbcb64b7f11c05d6bc96 +endif +ifeq ($(PKG_VERSION),2.6.1) + PKG_MD5SUM:=11cf6d3fc86dbe0890b8d00372eb6286 +endif +ifeq ($(PKG_VERSION),2.7) + PKG_MD5SUM:=065c5952b439deba40083ccd67bcc8f7 +endif + +PKG_SOURCE_URL:=@GNU/glibc/ +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 +PKG_CAT:=bzcat + +PATCH_DIR:=./patches/$(PKG_VERSION) + +STAGING_DIR_HOST:=$(TOOLCHAIN_DIR) +BUILD_DIR_HOST:=$(BUILD_DIR_TOOLCHAIN) + +override CONFIG_AUTOREBUILD= + +include $(INCLUDE_DIR)/host-build.mk + +STAMP_BUILT:=$(TOOLCHAIN_DIR)/stamp/.glibc_built +STAMP_INSTALLED:=$(TOOLCHAIN_DIR)/stamp/.glibc_installed + +PKG_BUILD_DIR1:=$(PKG_BUILD_DIR)-initial +PKG_BUILD_DIR2:=$(PKG_BUILD_DIR)-final + +GLIBC_ADD_ONS+=nptl, + +ifneq ($(CONFIG_GLIBC_PORTS),) + GLIBC_ADD_ONS+=ports, + define Build/Prepare/ports + ln -snf ../glibc-ports $(PKG_BUILD_DIR)/ports + endef +endif + +# XXX: {e,}glibc does not build w/ -Os +# http://sourceware.org/bugzilla/show_bug.cgi?id=5203 +GLIBC_CFLAGS:=$(subst -Os,-O2,$(TARGET_CFLAGS)) + +GLIBC_CONFIGURE_COMMON:= \ + BUILD_CC="$(HOSTCC)" \ + $(TARGET_CONFIGURE_OPTS) \ + CFLAGS="$(GLIBC_CFLAGS)" \ + libc_cv_forced_unwind=yes \ + libc_cv_c_cleanup=yes \ + libc_cv_386_tls=yes \ + $(PKG_BUILD_DIR)/configure \ + --prefix=/usr \ + --build=$(GNU_HOST_NAME) \ + --host=$(REAL_GNU_TARGET_NAME) \ + --with-headers="$(TOOLCHAIN_DIR)/usr/include" \ + --disable-debug \ + --disable-profile \ + --enable-add-ons="$(GLIBC_ADD_ONS)" \ + --without-gd \ + --without-cvs \ + +ifeq ($(CONFIG_SOFT_FLOAT),) + GLIBC_CONFIGURE_COMMON+= \ + --with-fp +else + GLIBC_CONFIGURE_COMMON+= \ + --without-fp +endif + +GLIBC_CONFIGURE_STAGE1:= \ + $(GLIBC_CONFIGURE_COMMON) \ + --disable-sanity-checks \ + --enable-hacker-mode \ + +GLIBC_CONFIGURE_STAGE2:= \ + $(GLIBC_CONFIGURE_COMMON) \ + +GLIBC_MAKE:= \ + $(MAKE) \ + + +define Build/SetToolchainInfo + $(SED) 's,^\(LIBC_TYPE\)=.*,\1=$(PKG_NAME),' $(TOOLCHAIN_DIR)/info.mk + $(SED) 's,^\(LIBC_URL\)=.*,\1=http://www.gnu.org/software/libc/,' $(TOOLCHAIN_DIR)/info.mk + $(SED) 's,^\(LIBC_VERSION\)=.*,\1=$(PKG_VERSION),' $(TOOLCHAIN_DIR)/info.mk + $(SED) 's,^\(LIBC_PATCHVER\)=.*,\1=,' $(TOOLCHAIN_DIR)/info.mk +endef + +define Stage1/Configure + mkdir -p $(PKG_BUILD_DIR1) + ( cd $(PKG_BUILD_DIR1); rm -f config.cache; \ + $(GLIBC_CONFIGURE_STAGE1) \ + ); +endef + +define Stage1/Compile +endef + +define Stage1/Install + $(GLIBC_MAKE) -C $(PKG_BUILD_DIR1) \ + CFLAGS="-DBOOTSTRAP_GCC" \ + cross-compiling=yes \ + install_root="$(BUILD_DIR_TOOLCHAIN)/$(LIBC)-dev" \ + install-headers + [ -f $(BUILD_DIR_TOOLCHAIN)/$(LIBC)-dev/usr/include/bits/stdio_lim.h ] || \ + $(CP) $(PKG_BUILD_DIR1)/bits/stdio_lim.h \ + $(BUILD_DIR_TOOLCHAIN)/$(LIBC)-dev/usr/include/bits/stdio_lim.h + [ -f $(BUILD_DIR_TOOLCHAIN)/$(LIBC)-dev/usr/include/gnu/stubs.h ] || \ + touch $(BUILD_DIR_TOOLCHAIN)/$(LIBC)-dev/usr/include/gnu/stubs.h +endef + +define Stage2/Configure + mkdir -p $(PKG_BUILD_DIR2) + ( cd $(PKG_BUILD_DIR2); rm -f config.cache; \ + $(GLIBC_CONFIGURE_STAGE2) \ + ); +endef + +define Stage2/Compile + $(GLIBC_MAKE) -C $(PKG_BUILD_DIR2) all +endef + +define Stage2/Install + $(GLIBC_MAKE) -C $(PKG_BUILD_DIR2) \ + install_root="$(TOOLCHAIN_DIR)" \ + install + ( cd $(TOOLCHAIN_DIR) ; \ + for d in lib usr/lib ; do \ + for f in libc.so libpthread.so libgcc_s.so ; do \ + if [ -f $$$$d/$$$$f -a ! -L $$$$d/$$$$f ] ; then \ + $(SED) 's,/usr/lib/,,g;s,/lib/,,g' $$$$d/$$$$f ; \ + fi \ + done \ + done \ + ) +endef + +define Build/Prepare + $(call Build/SetToolchainInfo) + $(call Build/Prepare/Default) + ln -snf $(PKG_NAME)-$(PKG_VERSION) $(BUILD_DIR_TOOLCHAIN)/$(PKG_NAME) + $(call Build/Prepare/ports) + $(call Stage1/Configure) + $(call Stage1/Compile) + $(call Stage1/Install) +endef + +define Build/Configure +endef + +define Build/Compile + $(call Stage2/Configure) + $(call Stage2/Compile) + $(call Stage2/Install) +endef + +define Build/Install +endef + +define Build/Clean + rm -rf \ + $(PKG_BUILD_DIR) \ + $(PKG_BUILD_DIR1) \ + $(PKG_BUILD_DIR2) \ + $(BUILD_DIR_TOOLCHAIN)/$(LIBC)-dev \ + $(BUILD_DIR_TOOLCHAIN)/$(PKG_NAME) +endef + +$(eval $(call HostBuild)) diff --git a/toolchain/glibc/patches/2.3.6/001-make_install_lib_all.patch b/toolchain/glibc/patches/2.3.6/001-make_install_lib_all.patch new file mode 100644 index 0000000000..1e69bb2335 --- /dev/null +++ b/toolchain/glibc/patches/2.3.6/001-make_install_lib_all.patch @@ -0,0 +1,26 @@ +From http://svn.exactcode.de/t2/trunk/package/base/glibc32/make-install-lib-all.patch +Rule to install all needed libraries, not just the ones installed by install-lib, +yet not install programs. +Needed because we can't use the main install target, as we can't build programs before +we have the final gcc installed; linking fails because libeh.a is not present, +and glibc insists on linking programs with that library. + +diff -Naur glibc-2.3.4.orig/Makerules glibc-2.3.4/Makerules +--- glibc-2.3.4.orig/Makerules 2004-12-15 20:52:39.000000000 +0200 ++++ glibc-2.3.4/Makerules 2005-02-19 15:16:31.415125176 +0200 +@@ -844,6 +844,13 @@ + installed-libcs := $(foreach o,$(filter-out .os,$(object-suffixes-for-libc)),\ + $(inst_libdir)/$(patsubst %,$(libtype$o),\ + $(libprefix)$(libc-name))) ++ ++install-lib-all: $(inst_slibdir)/libc.so$(libc.so-version) \ ++ $(inst_slibdir)/libc-$(version).so \ ++ $(inst_libdir)/libc.so \ ++ $(inst_libdir)/libc.a \ ++ install-lib ++ + install: $(installed-libcs) + $(installed-libcs): $(inst_libdir)/lib$(libprefix)%: lib $(+force) + $(make-target-directory) + +Signed-off-by: Robert P. J. Day <rpjday@mindspring.com> diff --git a/toolchain/glibc/patches/2.3.6/002-mips_bootstrap_gcc_header_install.patch b/toolchain/glibc/patches/2.3.6/002-mips_bootstrap_gcc_header_install.patch new file mode 100644 index 0000000000..2fd72f8b27 --- /dev/null +++ b/toolchain/glibc/patches/2.3.6/002-mips_bootstrap_gcc_header_install.patch @@ -0,0 +1,37 @@ +http://sourceware.org/ml/crossgcc/2005-05/msg00165.html +Fixes a MIPS build problem (unrelated to NPTL) + +Message-ID: <428E8B24.1000201@realitydiluted.com> +Date: Fri, 20 May 2005 20:13:08 -0500 +From: "Steven J dot Hill" <sjhill at realitydiluted dot com> +To: crossgcc at sources dot redhat dot com, toolchain at gentoo dot org, + Shay_Gal-On at pmc-sierra dot com, TheNop at gmx dot net +Subject: New NPTL patches for crosstools and MIPS NPTL patches.... + +Greetings. + +I have uploaded the latest NPTL patch for crosstool-0.34. I have also +uploaded a tarball of the patches necessary to build a MIPS NPTL +cross toolchain. To build a MIPS NPTL toolchain you will need the +released version of binutils-2.16 and the absolute latest GCC and +glibc code from the HEAD of cvs. Use the 'demo-mips-nptl.sh' script +to build the toolchain. Please report bugs or issues to the crossgcc +mailing list. Here is the link off of my FTP site: + + ftp://ftp.realitydiluted.com/crosstools/crosstool-0.34/ + +[Note: BOOTSTRAP_GCC is set by crosstool.sh when invoking make install-headers] + +diff -ur glibc-2.4.0-20050406/sysdeps/mips/mips32/Makefile glibc-2.4.0-20050406-patched/sysdeps/mips/mips32/Makefile +--- glibc-2.4.0-20050406/sysdeps/mips/mips32/Makefile 2003-03-29 02:15:28.000000000 -0600 ++++ glibc-2.4.0-20050406-patched/sysdeps/mips/mips32/Makefile 2005-04-12 21:36:51.318837655 -0500 +@@ -1,3 +1,7 @@ ++ifeq ($(filter -DBOOTSTRAP_GCC,$(CFLAGS)),) + ifeq ($(filter -mabi=32,$(CC)),) + CC += -mabi=32 + endif ++else ++CC += -D"_MIPS_SZPTR=32" ++endif + +Signed-off-by: Robert P. J. Day <rpjday@mindspring.com> diff --git a/toolchain/glibc/patches/2.3.6/601-powerpc_socket_week_alias.patch b/toolchain/glibc/patches/2.3.6/601-powerpc_socket_week_alias.patch new file mode 100644 index 0000000000..7a7a4b19dd --- /dev/null +++ b/toolchain/glibc/patches/2.3.6/601-powerpc_socket_week_alias.patch @@ -0,0 +1,22 @@ +diff -ruN glibc-2.3.6-orig/sysdeps/unix/sysv/linux/powerpc/powerpc32/socket.S glibc-2.3.6/sysdeps/unix/sysv/linux/powerpc/powerpc32/socket.S +--- glibc-2.3.6-orig/sysdeps/unix/sysv/linux/powerpc/powerpc32/socket.S 2003-07-12 00:46:12.000000000 +0200 ++++ glibc-2.3.6/sysdeps/unix/sysv/linux/powerpc/powerpc32/socket.S 2008-11-10 16:02:12.760497684 +0100 +@@ -42,7 +42,11 @@ + #define stackblock 20 + + #ifndef __socket ++#ifndef NO_WEAK_ALIAS + #define __socket P(__,socket) ++#else ++#define __socket socket ++#endif + #endif + + .text +@@ -120,4 +124,6 @@ + + PSEUDO_END (__socket) + ++#ifndef NO_WEAK_ALIAS + weak_alias (__socket, socket) ++#endif diff --git a/toolchain/glibc/patches/2.3.6/602-powerpc_cflags_initfini.patch b/toolchain/glibc/patches/2.3.6/602-powerpc_cflags_initfini.patch new file mode 100644 index 0000000000..2dcb793e82 --- /dev/null +++ b/toolchain/glibc/patches/2.3.6/602-powerpc_cflags_initfini.patch @@ -0,0 +1,12 @@ +diff -ruN glibc-2.3.6-orig/sysdeps/powerpc/powerpc32/Makefile glibc-2.3.6/sysdeps/powerpc/powerpc32/Makefile +--- glibc-2.3.6-orig/sysdeps/powerpc/powerpc32/Makefile 2003-07-12 00:46:12.000000000 +0200 ++++ glibc-2.3.6/sysdeps/powerpc/powerpc32/Makefile 2008-11-10 16:02:12.760497684 +0100 +@@ -21,7 +21,7 @@ + ifneq ($(elf),no) + # The initfini generation code doesn't work in the presence of -fPIC, so + # we use -fpic instead which is much better. +-CFLAGS-initfini.s = -g0 -fpic -O1 ++CFLAGS-initfini.s = -fpic -O1 $(fno-unit-at-a-time) + + # There is no benefit to using sdata for these objects, and the user + # of the library should be able to control what goes into sdata. diff --git a/toolchain/info.mk b/toolchain/info.mk index 0675493f77..74b4ecca47 100644 --- a/toolchain/info.mk +++ b/toolchain/info.mk @@ -1,4 +1,6 @@ TARGET_CROSS= GCC_VERSION=unknown -UCLIBC_VERSION=unknown -UCLIBC_PATCHVER= +LIBC_TYPE=unknown +LIBC_URL=unknown +LIBC_VERSION=unknown +LIBC_PATCHVER= diff --git a/toolchain/kernel-headers/Makefile b/toolchain/kernel-headers/Makefile index 6e02fe9888..2274ee2447 100644 --- a/toolchain/kernel-headers/Makefile +++ b/toolchain/kernel-headers/Makefile @@ -1,5 +1,5 @@ # -# Copyright (C) 2006 OpenWrt.org +# Copyright (C) 2006-2008 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -11,6 +11,7 @@ BUILD_DIR := $(KERNEL_BUILD_DIR) STAGING_DIR_HOST:=$(TOOLCHAIN_DIR) BUILD_DIR_HOST:=$(BUILD_DIR_TOOLCHAIN) + override QUILT:= override CONFIG_AUTOREBUILD= @@ -20,19 +21,28 @@ PKG_NAME:=linux PKG_VERSION:=$(LINUX_VERSION) PKG_SOURCE:=$(LINUX_SOURCE) PKG_SOURCE_URL:=$(LINUX_SITE) -PKG_BUILD_DIR := $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION) +PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION) PKG_MD5SUM:=$(LINUX_KERNEL_MD5SUM) LINUX_DIR := $(PKG_BUILD_DIR) include $(INCLUDE_DIR)/host-build.mk include $(INCLUDE_DIR)/kernel-defaults.mk -define Build/Configure/cris +ifeq ($(strip $(BOARD)),uml) + LINUX_KARCH:=$(ARCH) +endif + +KMAKE := $(MAKE) -C $(PKG_BUILD_DIR) \ + ARCH=$(LINUX_KARCH) \ + KBUILD_HAVE_NLS=no \ + CONFIG_SHELL=$(BASH) + +define Build/Prepare/pre/cris ln -sf $(PKG_BUILD_DIR)/include/asm-cris/arch-v10 $(PKG_BUILD_DIR)/include/asm-cris/arch ln -sf $(PKG_BUILD_DIR)/include/asm-cris/arch-v10 $(PKG_BUILD_DIR)/arch/cris/arch endef -define Build/Configure/powerpc +define Build/Prepare/pre/powerpc if [ -d $(PKG_BUILD_DIR)/include/asm-ppc ]; then \ $(CP) $(PKG_BUILD_DIR)/include/asm-ppc/* $(PKG_BUILD_DIR)/include/asm-powerpc/; \ rm -rf $(PKG_BUILD_DIR)/include/asm-ppc; \ @@ -40,15 +50,26 @@ define Build/Configure/powerpc fi endef -ifneq (,$(findstring uml,$(BOARD))) - LINUX_KARCH:=$(ARCH) +ifeq ($(strip $(call CompareKernelPatchVer,$(KERNEL_PATCHVER),ge,2.6.18)),1) + define Build/Prepare/all + mkdir -p $(BUILD_DIR_TOOLCHAIN)/linux-dev/usr + $(KMAKE) \ + CROSS_COMPILE=$(TARGET_CROSS) \ + INSTALL_HDR_PATH="$(BUILD_DIR_TOOLCHAIN)/linux-dev/usr/" \ + headers_install + endef +else + define Build/Prepare/all + mkdir -p $(BUILD_DIR_TOOLCHAIN)/linux-dev/usr/include + cp -pLR \ + $(BUILD_DIR_TOOLCHAIN)/linux/include/asm \ + $(BUILD_DIR_TOOLCHAIN)/linux/include/asm-generic \ + $(BUILD_DIR_TOOLCHAIN)/linux/include/asm-$(LINUX_KARCH) \ + $(BUILD_DIR_TOOLCHAIN)/linux/include/linux \ + $(BUILD_DIR_TOOLCHAIN)/linux-dev/usr/include/ + endef endif -KMAKE := $(MAKE) -C $(PKG_BUILD_DIR) \ - ARCH=$(LINUX_KARCH) \ - KBUILD_HAVE_NLS=no \ - CONFIG_SHELL=$(BASH) - define Build/Prepare $(call Kernel/Prepare/Default) $(SED) 's/@expr length/@-expr length/' $(PKG_BUILD_DIR)/Makefile @@ -60,7 +81,8 @@ define Build/Prepare $(PKG_BUILD_DIR)/arch/$(LINUX_KARCH)/include/asm/. \ $(PKG_BUILD_DIR)/include/asm-$(LINUX_KARCH)/; \ fi - $(call Build/Configure/$(ARCH)) + $(call Build/Prepare/pre/$(ARCH)) + $(call Build/Prepare/all) endef define Build/Configure @@ -69,7 +91,39 @@ endef define Build/Compile endef +define Build/Install/all + mkdir -p $(TOOLCHAIN_DIR)/usr/include + $(CP) \ + $(BUILD_DIR_TOOLCHAIN)/linux-dev/usr/include/* \ + $(TOOLCHAIN_DIR)/usr/include/ +endef + +# XXX: the following is needed to build lzma-loader +define Build/Install/post/lzma + $(CP) \ + $(BUILD_DIR_TOOLCHAIN)/linux/include/asm-mips/asm.h \ + $(BUILD_DIR_TOOLCHAIN)/linux/include/asm-mips/regdef.h \ + $(TOOLCHAIN_DIR)/usr/include/asm/ +endef + +define Build/Install/post/mips + $(call Build/Install/post/lzma) +endef + +define Build/Install/post/mipsel + $(call Build/Install/post/lzma) +endef + define Build/Install + $(call Build/Install/all) + $(call Build/Install/post/$(ARCH)) +endef + +define Build/Clean + rm -rf \ + $(PKG_BUILD_DIR) \ + $(BUILD_DIR_TOOLCHAIN)/linux \ + $(BUILD_DIR_TOOLCHAIN)/linux-dev endef $(eval $(call HostBuild)) diff --git a/toolchain/uClibc/Config.in b/toolchain/uClibc/Config.in index 6c89fd25e5..8e6ab37202 100644 --- a/toolchain/uClibc/Config.in +++ b/toolchain/uClibc/Config.in @@ -1,7 +1,8 @@ # Choose uclibc version. choice - prompt "uClibc Version" if TOOLCHAINOPTS + prompt "uClibc Version" + depends on TOOLCHAINOPTS && USE_UCLIBC default UCLIBC_VERSION_0_9_29 help Select the version of uClibc you wish to use. @@ -20,7 +21,8 @@ endchoice config UCLIBC_EXTRA_VERSION string - prompt "Extra uClibc version" if TOOLCHAINOPTS + prompt "Extra uClibc version" + depends on TOOLCHAINOPTS && USE_UCLIBC default "snapshot" if UCLIBC_VERSION_SNAPSHOT default ".2" if UCLIBC_VERSION_0_9_28 default "" diff --git a/toolchain/uClibc/Config.version b/toolchain/uClibc/Config.version index 119405189f..bdab73773e 100644 --- a/toolchain/uClibc/Config.version +++ b/toolchain/uClibc/Config.version @@ -1,8 +1,8 @@ config UCLIBC_VERSION string + depends on USE_UCLIBC default "" if UCLIBC_VERSION_snapshot default "0.9.28" if UCLIBC_VERSION_0_9_28 default "0.9.29" if UCLIBC_VERSION_0_9_29 default "0.9.29" - diff --git a/toolchain/uClibc/Makefile b/toolchain/uClibc/Makefile index 7cf06d81ad..844be1bbef 100644 --- a/toolchain/uClibc/Makefile +++ b/toolchain/uClibc/Makefile @@ -54,6 +54,7 @@ ifeq ($(PKG_VERSION_SNAPSHOT),y) else PKG_BUILD_DIR:=$(BUILD_DIR_HOST)/uClibc-$(PKG_VERSION)$(PKG_EXTRAVERSION) endif + override CONFIG_AUTOREBUILD= include $(INCLUDE_DIR)/host-build.mk @@ -76,12 +77,13 @@ UCLIBC_TARGET_ARCH:=$(shell echo $(ARCH) | sed -e s'/-.*//' \ -e 's/cris.*/cris/' \ ) -# Remove me when there are no 2.6.23 targets -ifeq ($(findstring 86,$(ARCH)),86) - ifneq ($(LINUX_2_6_23),y) - UCLIBC_TARGET_ARCH:=x86 - endif -endif + +define Build/SetToolchainInfo + $(SED) 's,^\(LIBC_TYPE\)=.*,\1=$(PKG_NAME),' $(TOOLCHAIN_DIR)/info.mk + $(SED) 's,^\(LIBC_URL\)=.*,\1=http://www.uclibc.org/,' $(TOOLCHAIN_DIR)/info.mk + $(SED) 's,^\(LIBC_VERSION\)=.*,\1=$(PKG_VERSION),' $(TOOLCHAIN_DIR)/info.mk + $(SED) 's,^\(LIBC_PATCHVER\)=.*,\1=$(PKG_EXTRAVERSION),' $(TOOLCHAIN_DIR)/info.mk +endef define Build/Prepare/Snapshot $(PKG_UNPACK) @@ -94,25 +96,27 @@ endef define Build/Prepare/V_0_9_28 $(SED) 's,^KERNEL_SOURCE=.*,KERNEL_SOURCE=\"$(LINUX_HEADERS_DIR)\",g' \ $(PKG_BUILD_DIR)/.config -ifeq ($(CONFIG_SOFT_FLOAT),y) + ifeq ($(CONFIG_SOFT_FLOAT),y) $(SED) 's,.*HAS_FPU.*,HAS_FPU=n\nUCLIBC_HAS_FLOATS=y\nUCLIBC_HAS_SOFT_FLOAT=y,g' $(PKG_BUILD_DIR)/.config -endif -ifeq ($(CONFIG_C99_MATH),y) + endif + ifeq ($(CONFIG_C99_MATH),y) $(SED) 's,.*DO_C99_MATH.*,DO_C99_MATH=y,g' $(PKG_BUILD_DIR)/.config -endif + endif endef define Build/Prepare + $(call Build/SetToolchainInfo) @echo prepare uClibc version $(PKG_VERSION)$(PKG_EXTRAVERSION) -ifeq ($(PKG_VERSION_SNAPSHOT),y) + ifeq ($(PKG_VERSION_SNAPSHOT),y) $(call Build/Prepare/Snapshot) -else + else $(call Build/Prepare/Default) -endif + ln -snf $(PKG_NAME)-$(PKG_VERSION) $(BUILD_DIR_TOOLCHAIN)/$(PKG_NAME) + endif $(CP) ./$(CONFIG_DIR)/$(ARCH)$(if $(wildcard $(CONFIG_DIR)/$(ARCH).$(BOARD)),.$(BOARD)) $(PKG_BUILD_DIR)/.config -ifeq ($(PKG_VERSION),0.9.28) + ifeq ($(PKG_VERSION),0.9.28) $(call Build/Prepare/V_0_9_28) -endif + endif $(SED) 's,^KERNEL_HEADERS=.*,KERNEL_HEADERS=\"$(LINUX_HEADERS_DIR)/include\",g' \ -e 's,.*UCLIBC_HAS_FPU.*,UCLIBC_HAS_FPU=$(if $(CONFIG_SOFT_FLOAT),n\nUCLIBC_HAS_FLOATS=y\nUCLIBC_HAS_SOFT_FLOAT=y,y),g' \ -e 's,^.*UCLIBC_HAS_LFS.*,UCLIBC_HAS_LFS=$(if $(CONFIG_LARGEFILE),y,n),g' \ @@ -120,33 +124,11 @@ endif -e 's,^.*CONFIG_ARM_OABI.*,CONFIG_ARM_OABI=$(if $(CONFIG_EABI_SUPPORT),n,y),g' \ -e 's,^.*UCLIBC_HAS_SHADOW.*,UCLIBC_HAS_SHADOW=$(if $(CONFIG_SHADOW_PASSWORDS),y,n),g' \ $(PKG_BUILD_DIR)/.config - mkdir -p $(BUILD_DIR_HOST)/uClibc_dev/usr/include - mkdir -p $(BUILD_DIR_HOST)/uClibc_dev/usr/lib - mkdir -p $(BUILD_DIR_HOST)/uClibc_dev/lib -# if [ ! -f $(BUILD_DIR_HOST)/uClibc_dev/usr/include/linux/version.h ] ; then \ -# cp -pLR $(BUILD_DIR_TOOLCHAIN)/linux/include/* $(BUILD_DIR_HOST)/uClibc_dev/usr/include/; \ -# cp -pLR $(BUILD_DIR_TOOLCHAIN)/linux/include/* $(TOOLCHAIN_DIR)/include/ ; \ -# cp -pLR $(BUILD_DIR_TOOLCHAIN)/linux/include/* $(PKG_BUILD_DIR)/include/ ; \ -# fi; - if [ ! -f $(BUILD_DIR_HOST)/uClibc_dev/usr/include/linux/version.h ] ; then \ - cp -pLR $(BUILD_DIR_TOOLCHAIN)/linux/include/asm $(BUILD_DIR_HOST)/uClibc_dev/usr/include/; \ - cp -pLR $(BUILD_DIR_TOOLCHAIN)/linux/include/asm-$(UCLIBC_TARGET_ARCH) $(BUILD_DIR_HOST)/uClibc_dev/usr/include/; \ - cp -pLR $(BUILD_DIR_TOOLCHAIN)/linux/include/asm-generic $(BUILD_DIR_HOST)/uClibc_dev/usr/include/; \ - cp -pLR $(BUILD_DIR_TOOLCHAIN)/linux/include/linux $(BUILD_DIR_HOST)/uClibc_dev/usr/include/; \ - cp -pLR $(BUILD_DIR_TOOLCHAIN)/linux/include/asm $(TOOLCHAIN_DIR)/include/ ; \ - cp -pLR $(BUILD_DIR_TOOLCHAIN)/linux/include/asm-$(UCLIBC_TARGET_ARCH) $(TOOLCHAIN_DIR)/include/ ; \ - cp -pLR $(BUILD_DIR_TOOLCHAIN)/linux/include/asm-generic $(TOOLCHAIN_DIR)/include/ ; \ - cp -pLR $(BUILD_DIR_TOOLCHAIN)/linux/include/linux $(TOOLCHAIN_DIR)/include/ ; \ - cp -pLR $(BUILD_DIR_TOOLCHAIN)/linux/include/asm $(PKG_BUILD_DIR)/include/ ; \ - cp -pLR $(BUILD_DIR_TOOLCHAIN)/linux/include/asm-$(UCLIBC_TARGET_ARCH) $(PKG_BUILD_DIR)/include/ ; \ - cp -pLR $(BUILD_DIR_TOOLCHAIN)/linux/include/asm-generic $(PKG_BUILD_DIR)/include/ ; \ - cp -pLR $(BUILD_DIR_TOOLCHAIN)/linux/include/linux $(PKG_BUILD_DIR)/include/ ; \ - fi; $(MAKE) -C $(PKG_BUILD_DIR)/extra/config conf KBUILD_HAVE_NLS= HOSTCFLAGS="-DKBUILD_NO_NLS" PATH=$(TARGET_PATH) $(MAKE) -C $(PKG_BUILD_DIR) \ - PREFIX=$(BUILD_DIR_HOST)/uClibc_dev/ \ + PREFIX="$(BUILD_DIR_TOOLCHAIN)/$(LIBC)-dev/" \ DEVEL_PREFIX=/usr/ \ - RUNTIME_PREFIX=$(BUILD_DIR_HOST)/uClibc_dev/ \ + RUNTIME_PREFIX="$(BUILD_DIR_TOOLCHAIN)/$(LIBC)-dev/" \ HOSTCC="$(HOSTCC)" \ CPU_CFLAGS="$(TARGET_CFLAGS)" \ pregen install_dev; @@ -157,7 +139,7 @@ endef UCLIBC_MAKE := PATH=$(TARGET_PATH) $(MAKE) -C $(PKG_BUILD_DIR) \ $(TARGET_CONFIGURE_OPTS) \ - DEVEL_PREFIX=/ \ + DEVEL_PREFIX=/usr/ \ RUNTIME_PREFIX=/ \ HOSTCC="$(HOSTCC)" \ CPU_CFLAGS="$(TARGET_CFLAGS)" @@ -165,24 +147,36 @@ UCLIBC_MAKE := PATH=$(TARGET_PATH) $(MAKE) -C $(PKG_BUILD_DIR) \ define Build/Compile $(SED) 's,^CROSS=.*,CROSS=$(TARGET_CROSS),g' $(PKG_BUILD_DIR)/Rules.mak $(UCLIBC_MAKE) PREFIX= all - $(UCLIBC_MAKE) PREFIX=$(STAGING_DIR_HOST)/ install_runtime install_dev - $(SED) 's,UCLIBC_VERSION=.*,UCLIBC_VERSION=$(PKG_VERSION),' $(TOOLCHAIN_DIR)/info.mk - $(SED) 's,UCLIBC_PATCHVER=.*,UCLIBC_PATCHVER=$(PKG_EXTRAVERSION),' $(TOOLCHAIN_DIR)/info.mk - rm -rf $(TOOLCHAIN_DIR)/lib/libc.so - ln -s libc.so.0 $(TOOLCHAIN_DIR)/lib/libc.so + $(UCLIBC_MAKE) PREFIX="$(TOOLCHAIN_DIR)/" install_runtime install_dev + ln -sf ../../lib/libc.so.0 $(TOOLCHAIN_DIR)/usr/lib/libc.so +# ( cd $(TOOLCHAIN_DIR) ; \ +# for d in lib usr/lib ; do \ +# for f in libc.so libpthread.so libgcc_s.so ; do \ +# if [ -f $$$$d/$$$$f -a ! -L $$$$d/$$$$f ] ; then \ +# $(SED) 's,/usr/lib/,,g;s,/lib/,,g' $$$$d/$$$$f ; \ +# fi \ +# done \ +# done \ +# ) endef define Build/Install $(UCLIBC_MAKE) PREFIX= utils - $(INSTALL_DIR) $(TOOLCHAIN_DIR)/target-utils + $(INSTALL_DIR) $(TOOLCHAIN_DIR)/usr/bin $(INSTALL_BIN) \ $(PKG_BUILD_DIR)/utils/ldd \ + $(TOOLCHAIN_DIR)/usr/bin/ + $(INSTALL_DIR) $(TOOLCHAIN_DIR)/sbin + $(INSTALL_BIN) \ $(PKG_BUILD_DIR)/utils/ldconfig \ - $(TOOLCHAIN_DIR)/target-utils/ + $(TOOLCHAIN_DIR)/sbin/ endef define Build/Clean - rm -rf $(PKG_BUILD_DIR) $(BUILD_DIR_HOST)/uClibc_dev + rm -rf \ + $(PKG_BUILD_DIR) \ + $(BUILD_DIR_TOOLCHAIN)/$(PKG_NAME) \ + $(BUILD_DIR_TOOLCHAIN)/$(LIBC)-dev endef $(eval $(call HostBuild)) |