summaryrefslogtreecommitdiffstats
path: root/toolchain/glibc
diff options
context:
space:
mode:
authornico <nico@3c298f89-4303-0410-b956-a3cf2f4a3e73>2009-01-08 01:49:11 +0000
committernico <nico@3c298f89-4303-0410-b956-a3cf2f4a3e73>2009-01-08 01:49:11 +0000
commitc3c59f418996d48f4df202e480a34f32c90f8ee5 (patch)
treee9676ee4d01368996c17caf45fd31f861e3686af /toolchain/glibc
parent018a28f15805f8c1e3635314f0f96538a2912a5c (diff)
[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
Diffstat (limited to 'toolchain/glibc')
-rw-r--r--toolchain/glibc/Config.in17
-rw-r--r--toolchain/glibc/Config.version15
-rw-r--r--toolchain/glibc/Makefile179
-rw-r--r--toolchain/glibc/patches/2.3.6/001-make_install_lib_all.patch26
-rw-r--r--toolchain/glibc/patches/2.3.6/002-mips_bootstrap_gcc_header_install.patch37
-rw-r--r--toolchain/glibc/patches/2.3.6/601-powerpc_socket_week_alias.patch22
-rw-r--r--toolchain/glibc/patches/2.3.6/602-powerpc_cflags_initfini.patch12
7 files changed, 308 insertions, 0 deletions
diff --git a/toolchain/glibc/Config.in b/toolchain/glibc/Config.in
new file mode 100644
index 000000000..e1bffdab2
--- /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 000000000..d68eeea8a
--- /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 000000000..fd6acc46b
--- /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 000000000..1e69bb233
--- /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 000000000..2fd72f8b2
--- /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 000000000..7a7a4b19d
--- /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 000000000..2dcb793e8
--- /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.