From a3edea1b9136b05edfed95b58ba33a9ff46b6587 Mon Sep 17 00:00:00 2001 From: Nicolas Thill Date: Thu, 8 Jan 2009 01:49:11 +0000 Subject: 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) SVN-Revision: 13931 --- toolchain/glibc/Config.in | 17 ++ toolchain/glibc/Config.version | 15 ++ toolchain/glibc/Makefile | 179 +++++++++++++++++++++ .../patches/2.3.6/001-make_install_lib_all.patch | 26 +++ .../002-mips_bootstrap_gcc_header_install.patch | 37 +++++ .../2.3.6/601-powerpc_socket_week_alias.patch | 22 +++ .../2.3.6/602-powerpc_cflags_initfini.patch | 12 ++ 7 files changed, 308 insertions(+) create mode 100644 toolchain/glibc/Config.in create mode 100644 toolchain/glibc/Config.version create mode 100644 toolchain/glibc/Makefile create mode 100644 toolchain/glibc/patches/2.3.6/001-make_install_lib_all.patch create mode 100644 toolchain/glibc/patches/2.3.6/002-mips_bootstrap_gcc_header_install.patch create mode 100644 toolchain/glibc/patches/2.3.6/601-powerpc_socket_week_alias.patch create mode 100644 toolchain/glibc/patches/2.3.6/602-powerpc_cflags_initfini.patch (limited to 'toolchain/glibc') 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 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" +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 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. -- cgit v1.2.3