Merge the NPTL stuff.

That still leaves the linuxthreads stuff broken, but it was just before. I don't care anyway. Time to fix that later...
This commit is contained in:
Yann E. MORIN" 2007-05-27 20:22:06 +00:00
parent 266e38cc13
commit de5df0533c
20 changed files with 930 additions and 135 deletions

View File

@ -31,10 +31,15 @@ help::
@echo ' distclean - Remove generated files, configuration and build directories'
include $(CT_TOP_DIR)/tools/Makefile
include $(CT_TOP_DIR)/Makefile.steps
help::
@echo 'Distribution targets:'
@echo ' tarball - Build a tarball of the configured toolchain'
@echo ''
@echo 'Environement variables:'
@echo ' STOP - Stop the build just after this step'
@echo ' RESTART - Restart the build just before this step'
@echo
@echo 'Environement variables:'
@echo ' STOP - Stop the build just after this step'
@ -56,4 +61,5 @@ tarball:
.PHONY: distclean
distclean:: clean
@rm -f .config* ..config.tmp
@rm -f log.*
@rm -rf "$(CT_TOP_DIR)/targets"

50
Makefile.steps Normal file
View File

@ -0,0 +1,50 @@
# Makefile for each steps
# Copyright 2006 Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
libc_check_config \
kernel_check_config \
kernel_headers \
binutils \
cc_core_pass_1 \
libc_headers \
libc_start_files \
cc_core_pass_2 \
libfloat \
libc \
cc \
libc_finish \
debug \
:
@make -C "$(CT_TOP_DIR)" RESTART=$@ STOP=$@
-libc_check_config \
-kernel_check_config \
-kernel_headers \
-binutils \
-cc_core_pass_1 \
-libc_headers \
-libc_start_files \
-cc_core_pass_2 \
-libfloat \
-libc \
-cc \
-libc_finish \
-debug \
:
@make -C "$(CT_TOP_DIR)" STOP=$(patsubst -%,%,$@)
libc_check_config- \
kernel_check_config- \
kernel_headers- \
binutils- \
cc_core_pass_1- \
libc_headers- \
libc_start_files- \
cc_core_pass_2- \
libfloat- \
libc- \
cc- \
libc_finish- \
debug- \
:
@make -C "$(CT_TOP_DIR)" RESTART=$(patsubst %-,%,$@)

View File

@ -98,6 +98,16 @@ config KERNEL_INSTALL_V_2_6_21_1
prompt "2.6.21.1"
depends on KERNEL_VERSION_SEE_EXTRAVERSION
config KERNEL_INSTALL_V_2_6_21_2
bool
prompt "2.6.21.2"
depends on KERNEL_VERSION_SEE_EXTRAVERSION
config KERNEL_INSTALL_V_2_6_21_3
bool
prompt "2.6.21.3"
depends on KERNEL_VERSION_SEE_EXTRAVERSION
# CT_INSERT_VERSION_ABOVE
# Don't remove above line!
endchoice
@ -124,5 +134,7 @@ config KERNEL_VERSION
default "2.6.20.7" if KERNEL_INSTALL_V_2_6_20_7
default "2.6.21" if KERNEL_INSTALL_V_2_6_21
default "2.6.21.1" if KERNEL_INSTALL_V_2_6_21_1
default "2.6.21.2" if KERNEL_INSTALL_V_2_6_21_2
default "2.6.21.3" if KERNEL_INSTALL_V_2_6_21_3
# CT_INSERT_VERSION_STRING_ABOVE
# Don't remove above line!

View File

@ -36,31 +36,6 @@ config LIBC_SUPPORT_LINUXTHREADS
bool
default n
choice
bool
prompt "Threading implentation to use:"
default LIBC_THREADS_NPTL if LIBC_SUPPORT_NPTL
default LIBC_THREADS_LINUXTHREADS if LIBC_SUPPORT_LINUXTHREADS && ! LIBC_SUPPORT_NPTL
default LIBC_THREADS_NONE if ! LIBC_SUPPORT_LINUXTHREADS && ! LIBC_SUPPORT_NPTL
depends on EXPERIMENTAL
config LIBC_THREADS_NPTL
bool
prompt "nptl (EXPERIMENTAL)"
depends on LIBC_SUPPORT_NPTL
depends on EXPERIMENTAL
config LIBC_THREADS_LINUXTHREADS
bool
prompt "linuxthreads"
depends on LIBC_SUPPORT_LINUXTHREADS
config LIBC_THREADS_NONE
bool
prompt "none"
endchoice
if LIBC_GLIBC
source config/libc_glibc.in
endif

View File

@ -181,7 +181,7 @@ config LIBC_GLIBC_CONFIGPARMS
config LIBC_GLIBC_USE_PORTS
bool
prompt "Use the ports addon"
default y
default n
help
The ports addon contains some architecture ports that are not available
in the official glibc distribution.

View File

@ -19,53 +19,74 @@ choice
config ARCH_ARM
bool
prompt "arm"
select ARCH_SUPPORTS_BE
select ARCH_SUPPORTS_LE
select ARCH_SUPPORTS_BOTH_ENDIAN
select ARCH_SUPPORTS_LIBFLOAT
config ARCH_MIPS
bool
prompt "mips"
select ARCH_SUPPORTS_BE
select ARCH_SUPPORTS_LE
select ARCH_SUPPORTS_BOTH_ENDIAN
config ARCH_x86
bool
prompt "x86"
select ARCH_SUPPORTS_LE
select ARCH_SUPPORTS_LIBFLOAT
config ARCH_x86_64
bool
prompt "x86_64"
select ARCH_SUPPORTS_LE
endchoice
config ARCH_SUPPORTS_BE
bool
default n
config ARCH_SUPPORTS_LE
config ARCH_SUPPORTS_BOTH_ENDIAN
bool
default n
choice
bool
prompt "Endianness:"
depends on ARCH_SUPPORTS_BOTH_ENDIAN
config ARCH_BE
bool
prompt "Big endian"
depends on ARCH_SUPPORTS_BE
config ARCH_LE
bool
prompt "Little endian"
depends on ARCH_SUPPORTS_LE
endchoice
choice
bool
prompt "Threading implentation to use:"
default THREADS_NPTL if LIBC_SUPPORT_NPTL
default THREADS_LINUXTHREADS if LIBC_SUPPORT_LINUXTHREADS && ! LIBC_SUPPORT_NPTL
default THREADS_NONE if ! LIBC_SUPPORT_LINUXTHREADS && ! LIBC_SUPPORT_NPTL
config THREADS_NPTL
bool
prompt "nptl (EXPERIMENTAL)"
depends on LIBC_SUPPORT_NPTL
depends on EXPERIMENTAL
config THREADS_LINUXTHREADS
bool
prompt "linuxthreads"
depends on LIBC_SUPPORT_LINUXTHREADS
config THREADS_NONE
bool
prompt "none"
endchoice
config THREADS
string
default "nptl" if THREADS_NPTL
default "linuxthreads" if THREADS_LINUXTHREADS
default "none" if THREADS_NONE
comment "Target optimisations"
config ARCH_ARCH

View File

@ -127,14 +127,27 @@ The list of steps is, in order of appearence in the build process:
- kernel_check_config
- kernel_headers
- binutils
- cc_core_pass_1
- libc_headers
- cc_core
- libc_start_files
- cc_core_pass_2
- libfloat
- libc
- cc
- libc_finish
- debug
Alternatively, you can call make with the name of a step to just do that step:
make libc_headers
is equivalent to:
make RESTART=libs_headers STOP=libc_headers
The shortcuts -step_name and step_name- allow to respectively stop or restart
at that step. Thus:
make -libc_headers make libc_headers-
are equivalent to:
make STOP=libc_headers make RESTART=libc_headers
____________________________
/
Configuring crosstool-NG /

View File

@ -0,0 +1,58 @@
This patch (C) 2007 Yann E. MORIN
Licensed under GPL v2.
First hunk of this patch solves compiling uClibc-0.9.28{,.1} :
make[1]: Entering directory `/home/ymorin/x-tools/build/armeb-unknown-linux-uclibc/gcc-4.1.1-uClibc-0.9.28.1/build-libc'
LD libuClibc-0.9.29.so
libc/libc_so.a(difftime.os): In function `difftime':
difftime.c:(.text+0x8): undefined reference to `__floatsidf'
difftime.c:(.text+0x2c): undefined reference to `__subdf3'
libc/libc_so.a(_fpmaxtostr.os): In function `_fpmaxtostr':
_fpmaxtostr.c:(.text+0xd4): undefined reference to `__nedf2'
_fpmaxtostr.c:(.text+0xf8): undefined reference to `__eqdf2'
_fpmaxtostr.c:(.text+0x114): undefined reference to `__divdf3'
_fpmaxtostr.c:(.text+0x120): undefined reference to `__ltdf2'
_fpmaxtostr.c:(.text+0x1c4): undefined reference to `__muldf3'
_fpmaxtostr.c:(.text+0x388): undefined reference to `__gedf2'
_fpmaxtostr.c:(.text+0x430): undefined reference to `__adddf3'
libc/libc_so.a(__psfs_do_numeric.os): In function `__psfs_do_numeric':
__psfs_do_numeric.c:(.text+0x520): undefined reference to `__truncdfsf2'
libc/libc_so.a(strtof.os): In function `strtof':
strtof.c:(.text+0x1c): undefined reference to `__extendsfdf2'
/home/ymorin/x-tools/build/armeb-unknown-linux-uclibc/gcc-4.1.1-uClibc-0.9.28.1/cc_core_prefix/lib/gcc/arm-linux-uclibc/4.1.1/libgcc.a(_fixunsdfsi.o):
In function `__fixunsdfsi':
libgcc2.c:(.text+0x34): undefined reference to `__fixdfsi'
make[2]: *** [lib/libc.so] Error 1
make[1]: *** [lib/libc.so.0] Error 2
make[1]: Leaving directory `/home/ymorin/x-tools/build/armeb-unknown-linux-uclibc/gcc-4.1.1-uClibc-0.9.28.1/build-libc'
make: *** [/home/ymorin/x-tools/build/armeb-unknown-linux-uclibc/gcc-4.1.1-uClibc-0.9.28.1/build-libc/lib/libc.a]
Error 2
The second hunk fixes building final gcc because soft-float implies using -lfloat (which we don't have).
diff -dur gcc-4.1.1.no-softfloat-fix/gcc/config.gcc gcc-4.1.1/gcc/config.gcc
--- gcc-4.1.1.no-softfloat-fix/gcc/config.gcc 2007-02-01 21:57:17.000000000 +0100
+++ gcc-4.1.1/gcc/config.gcc 2007-02-01 22:11:06.000000000 +0100
@@ -690,7 +690,7 @@
default_use_cxa_atexit=yes
;;
*)
- tmake_file="$tmake_file arm/t-linux"
+ tmake_file="$tmake_file arm/t-linux arm/t-arm-elf"
;;
esac
tm_file="$tm_file arm/aout.h arm/arm.h"
diff -dur gcc-4.1.1.-lfloat/gcc/config/arm/linux-elf.h gcc-4.1.1/gcc/config/arm/linux-elf.h
--- gcc-4.1.1.-lfloat/gcc/config/arm/linux-elf.h 2007-02-01 21:57:17.000000000 +0100
+++ gcc-4.1.1/gcc/config/arm/linux-elf.h 2007-02-01 23:00:42.000000000 +0100
@@ -63,7 +63,7 @@
%{shared:-lc} \
%{!shared:%{profile:-lc_p}%{!profile:-lc}}"
-#define LIBGCC_SPEC "%{msoft-float:-lfloat} %{mfloat-abi=soft*:-lfloat} -lgcc"
+#define LIBGCC_SPEC "-lgcc"
#ifdef USE_UCLIBC
#define LINUX_TARGET_INTERPRETER "/lib/ld-uClibc.so.0"

View File

@ -0,0 +1,38 @@
2007-02-15 Khem Raj <kraj@xxxxxxxxxx>
* sysdeps/unix/sysv/linux/i386/sysdep.h: Re-define __i686.
* nptl/sysdeps/pthread/pt-initfini.c: Ditto.
Index: glibc-2.4/sysdeps/unix/sysv/linux/i386/sysdep.h
===================================================================
--- glibc-2.4/sysdeps/unix/sysv/linux/i386/sysdep.h (revision 1469)
+++ glibc-2.4/sysdeps/unix/sysv/linux/i386/sysdep.h (working copy)
@@ -29,6 +29,10 @@
#include <dl-sysdep.h>
#include <tls.h>
+#if defined __i686 && defined __ASSEMBLER__
+#undef __i686
+#define __i686 __i686
+#endif
/* For Linux we can use the system call table in the header file
/usr/include/asm/unistd.h
Index: glibc-2.4/nptl/sysdeps/pthread/pt-initfini.c
===================================================================
--- glibc-2.4/nptl/sysdeps/pthread/pt-initfini.c (revision 1469)
+++ glibc-2.4/nptl/sysdeps/pthread/pt-initfini.c (working copy)
@@ -45,6 +45,11 @@
/* Embed an #include to pull in the alignment and .end directives. */
asm ("\n#include \"defs.h\"");
+asm ("\n#if defined __i686 && defined __ASSEMBLER__");
+asm ("\n#undef __i686");
+asm ("\n#define __i686 __i686");
+asm ("\n#endif");
+
/* The initial common code ends here. */
asm ("\n/*@HEADER_ENDS*/");

View File

@ -0,0 +1,18 @@
(C) 2007 Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
License: LGPL v2.1
Shut off a stupid warning: preffered-stack-boundary must be between 4 ad 12,
and 2 is not.
diff -dur glibc-2.5.orig/sysdeps/i386/Makefile glibc-2.5/sysdeps/i386/Makefile
--- glibc-2.5.orig/sysdeps/i386/Makefile 2005-03-06 01:18:16.000000000 +0100
+++ glibc-2.5/sysdeps/i386/Makefile 2007-05-27 17:49:37.000000000 +0200
@@ -36,7 +36,7 @@
ifeq ($(subdir),csu)
sysdep-CFLAGS += -mpreferred-stack-boundary=4
else
-sysdep-CFLAGS += -mpreferred-stack-boundary=2
+sysdep-CFLAGS += -mpreferred-stack-boundary=4
# Likewise, any function which calls user callbacks
uses-callbacks += -mpreferred-stack-boundary=4
# Likewise, any stack alignment tests

View File

@ -0,0 +1,294 @@
#
# Automatically generated make config: don't edit
# crosstool-NG version: 0.0.4-svn
# Sun May 27 20:39:36 2007
#
# CT_FOOBAR is not set
#
# Paths and misc options
#
#
# Crosstool behavior
#
CT_EXPERIMENTAL=y
# CT_OBSOLETE is not set
CT_DEBUG_CT=y
# CT_DEBUG_CT_PAUSE_STEPS is not set
CT_DEBUG_CT_SAVE_STEPS=y
CT_DEBUG_CT_SAVE_STEPS_GZIP=y
#
# Build behavior
#
CT_PARALLEL_JOBS=1
CT_LOAD=0
CT_NICE=0
CT_USE_PIPES=y
#
# Paths
#
CT_LOCAL_TARBALLS_DIR="${HOME}/dev/src"
CT_PREFIX_DIR="/opt/x-tools/${CT_TARGET}"
CT_INSTALL_DIR="${CT_PREFIX_DIR}"
# CT_CUSTOM_PATCH is not set
CT_REMOVE_DOCS=y
#
# Downloading
#
# CT_FORCE_DOWNLOAD is not set
# CT_ONLY_DOWNLOAD is not set
#
# Extracting
#
# CT_FORCE_EXTRACT is not set
# CT_ONLY_EXTRACT is not set
#
# Logging
#
# CT_LOG_ERROR is not set
# CT_LOG_WARN is not set
# CT_LOG_INFO is not set
CT_LOG_EXTRA=y
# CT_LOG_DEBUG is not set
# CT_LOG_ALL is not set
CT_LOG_LEVEL_MAX="EXTRA"
# CT_LOG_SEE_TOOLS_WARN is not set
CT_LOG_PROGRESS_BAR=y
CT_LOG_TO_FILE=y
CT_LOG_FILE="${CT_PREFIX_DIR}/${CT_TARGET}.log"
#
# Target options
#
#
# General target options
#
CT_ARCH="x86"
# CT_ARCH_ARM is not set
# CT_ARCH_MIPS is not set
CT_ARCH_x86=y
# CT_ARCH_x86_64 is not set
# CT_ARCH_SUPPORTS_BOTH_ENDIAN is not set
CT_THREADS_NPTL=y
# CT_THREADS_LINUXTHREADS is not set
# CT_THREADS_NONE is not set
CT_THREADS="nptl"
#
# Target optimisations
#
CT_ARCH_ARCH="i686"
CT_ARCH_ABI=""
CT_ARCH_CPU=""
CT_ARCH_TUNE="i686"
CT_ARCH_FPU=""
CT_ARCH_FLOAT_HW=y
# CT_ARCH_FLOAT_SW is not set
CT_ARCH_SUPPORTS_LIBFLOAT=y
CT_TARGET_CFLAGS=""
#
# Toolchain options
#
#
# General toolchain options
#
CT_USE_SYSROOT=y
CT_SHARED_LIBS=y
# CT_TARGET_MULTILIB is not set
CT_TARGET_VENDOR="nptl"
CT_TARGET_ALIAS=""
#
# Toolchain type
#
# CT_NATIVE is not set
CT_CROSS=y
# CT_CROSS_NATIVE is not set
# CT_CANADIAN is not set
CT_TOOLCHAIN_TYPE="cross"
CT_BUILD=""
CT_CC_NATIVE="gcc"
#
# Kernel
#
CT_KERNEL_LINUX=y
CT_KERNEL_VERSION="2.6.21.3"
CT_KERNEL_LINUX_HEADERS_INSTALL=y
# CT_KERNEL_LINUX_HEADERS_SANITISED is not set
# CT_KERNEL_LINUX_HEADERS_COPY is not set
# CT_KERNEL_LINUX_HEADERS_USE_CUSTOM_DIR is not set
CT_KERNEL="linux"
CT_KERNEL_VERSION_SEE_EXTRAVERSION=y
# CT_KERNEL_INSTALL_V_2_6_18 is not set
# CT_KERNEL_INSTALL_V_2_6_18_1 is not set
# CT_KERNEL_INSTALL_V_2_6_18_2 is not set
# CT_KERNEL_INSTALL_V_2_6_18_3 is not set
# CT_KERNEL_INSTALL_V_2_6_18_4 is not set
# CT_KERNEL_INSTALL_V_2_6_18_5 is not set
# CT_KERNEL_INSTALL_V_2_6_18_6 is not set
# CT_KERNEL_INSTALL_V_2_6_19 is not set
# CT_KERNEL_INSTALL_V_2_6_19_1 is not set
# CT_KERNEL_INSTALL_V_2_6_19_2 is not set
# CT_KERNEL_INSTALL_V_2_6_20 is not set
# CT_KERNEL_INSTALL_V_2_6_20_1 is not set
# CT_KERNEL_INSTALL_V_2_6_20_2 is not set
# CT_KERNEL_INSTALL_V_2_6_20_3 is not set
# CT_KERNEL_INSTALL_V_2_6_20_4 is not set
# CT_KERNEL_INSTALL_V_2_6_20_5 is not set
# CT_KERNEL_INSTALL_V_2_6_20_6 is not set
# CT_KERNEL_INSTALL_V_2_6_20_7 is not set
# CT_KERNEL_INSTALL_V_2_6_21 is not set
# CT_KERNEL_INSTALL_V_2_6_21_1 is not set
# CT_KERNEL_INSTALL_V_2_6_21_2 is not set
CT_KERNEL_INSTALL_V_2_6_21_3=y
CT_KERNEL_LINUX_VERBOSITY_0=y
# CT_KERNEL_LINUX_VERBOSITY_1 is not set
# CT_KERNEL_LINUX_VERBOSITY_2 is not set
CT_KERNEL_LINUX_VERBOSE_LEVEL=0
# CT_KERNEL_LINUX_NEEDS_CONFIG is not set
#
# binutils
#
CT_BINUTILS_VERSION="2.17.50.0.16"
# CT_BINUTILS_V_2_11_2 is not set
# CT_BINUTILS_V_2_13_90 is not set
# CT_BINUTILS_V_2_14 is not set
# CT_BINUTILS_V_2_14_90 is not set
# CT_BINUTILS_V_2_14_92 is not set
# CT_BINUTILS_V_2_15 is not set
# CT_BINUTILS_V_2_15_90 is not set
# CT_BINUTILS_V_2_15_91 is not set
# CT_BINUTILS_V_2_16 is not set
# CT_BINUTILS_V_2_16_1 is not set
# CT_BINUTILS_V_2_17 is not set
# CT_BINUTILS_V_2_17_50_0_1 is not set
# CT_BINUTILS_V_2_17_50_0_2 is not set
# CT_BINUTILS_V_2_17_50_0_3 is not set
# CT_BINUTILS_V_2_17_50_0_4 is not set
# CT_BINUTILS_V_2_17_50_0_5 is not set
# CT_BINUTILS_V_2_17_50_0_6 is not set
# CT_BINUTILS_V_2_17_50_0_7 is not set
# CT_BINUTILS_V_2_17_50_0_8 is not set
# CT_BINUTILS_V_2_17_50_0_9 is not set
# CT_BINUTILS_V_2_17_50_0_10 is not set
# CT_BINUTILS_V_2_17_50_0_11 is not set
# CT_BINUTILS_V_2_17_50_0_12 is not set
# CT_BINUTILS_V_2_17_50_0_13 is not set
# CT_BINUTILS_V_2_17_50_0_14 is not set
# CT_BINUTILS_V_2_17_50_0_15 is not set
CT_BINUTILS_V_2_17_50_0_16=y
CT_BINUTILS_EXTRA_CONFIG=""
#
# C compiler
#
#
# Core C Compiler (used to build the C library)
#
# CT_CC_USE_CORE is not set
#
# Final C compiler
#
CT_CC_GCC=y
CT_CC_VERSION="4.1.2"
CT_CC="gcc"
# CT_CC_V_2_95_3 is not set
# CT_CC_V_3_2_3 is not set
# CT_CC_V_3_3 is not set
# CT_CC_V_3_3_1 is not set
# CT_CC_V_3_3_2 is not set
# CT_CC_V_3_3_3 is not set
# CT_CC_V_3_3_4 is not set
# CT_CC_V_3_3_5 is not set
# CT_CC_V_3_3_6 is not set
# CT_CC_V_3_4_0 is not set
# CT_CC_V_3_4_1 is not set
# CT_CC_V_3_4_2 is not set
# CT_CC_V_3_4_3 is not set
# CT_CC_V_3_4_4 is not set
# CT_CC_V_3_4_5 is not set
# CT_CC_V_3_4_6 is not set
# CT_CC_V_4_0_0 is not set
# CT_CC_V_4_0_1 is not set
# CT_CC_V_4_0_2 is not set
# CT_CC_V_4_0_3 is not set
# CT_CC_V_4_0_4 is not set
# CT_CC_V_4_1_0 is not set
# CT_CC_V_4_1_1 is not set
CT_CC_V_4_1_2=y
# CT_CC_V_4_2_0 is not set
CT_CC_CXA_ATEXIT=y
CT_CC_EXTRA_CONFIG=""
CT_CC_SUPPORT_CXX=y
CT_CC_SUPPORT_FORTRAN=y
CT_CC_SUPPORT_JAVA=y
CT_CC_SUPPORT_ADA=y
CT_CC_SUPPORT_OBJC=y
CT_CC_SUPPORT_OBJCXX=y
#
# Additionnal supported languages:
#
CT_CC_LANG_CXX=y
# CT_CC_LANG_FORTRAN is not set
# CT_CC_LANG_JAVA is not set
# CT_CC_LANG_ADA is not set
# CT_CC_LANG_OBJC is not set
# CT_CC_LANG_OBJCXX is not set
CT_CC_LANG_OTHERS=""
#
# C-library
#
CT_LIBC_GLIBC=y
# CT_LIBC_UCLIBC is not set
CT_LIBC_VERSION="2.5"
CT_LIBC="glibc"
CT_LIBC_SUPPORT_NPTL=y
CT_LIBC_SUPPORT_LINUXTHREADS=y
# CT_LIBC_V_1_09_1 is not set
# CT_LIBC_V_2_0_1 is not set
# CT_LIBC_V_2_0_6 is not set
# CT_LIBC_V_2_1_1 is not set
# CT_LIBC_V_2_1_2 is not set
# CT_LIBC_V_2_1_3 is not set
# CT_LIBC_V_2_2 is not set
# CT_LIBC_V_2_2_1 is not set
# CT_LIBC_V_2_2_2 is not set
# CT_LIBC_V_2_2_3 is not set
# CT_LIBC_V_2_2_4 is not set
# CT_LIBC_V_2_2_5 is not set
# CT_LIBC_V_2_3 is not set
# CT_LIBC_V_2_3_1 is not set
# CT_LIBC_V_2_3_2 is not set
# CT_LIBC_V_2_3_3 is not set
# CT_LIBC_V_2_3_4 is not set
# CT_LIBC_V_2_3_5 is not set
# CT_LIBC_V_2_3_6 is not set
# CT_LIBC_V_2_4 is not set
CT_LIBC_V_2_5=y
CT_LIBC_GLIBC_EXTRA_CONFIG=""
CT_LIBC_GLIBC_EXTRA_CFLAGS=""
CT_LIBC_EXTRA_CC_ARGS=""
CT_LIBC_GLIBC_CONFIGPARMS=""
# CT_LIBC_GLIBC_USE_PORTS is not set
# CT_LIBC_ADDONS is not set
#
# Debug facilities
#
# CT_DMALLOC is not set
# CT_GDB is not set

View File

@ -39,14 +39,18 @@ do_binutils() {
CT_DoLog EXTRA "Installing binutils"
make install 2>&1 |CT_DoLog ALL
# Make those new tools available to the core C compiler to come:
# Make those new tools available to the core C compilers to come:
# Note: some components want the ${TARGET}-{ar,as,ld,strip} commands as
# well. Create that (libfloat is one such sucker).
mkdir -p "${CT_CC_CORE_PREFIX_DIR}/${CT_TARGET}/bin"
mkdir -p "${CT_CC_CORE_PREFIX_DIR}/bin"
mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin"
mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin"
mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin"
mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/bin"
for t in ar as ld strip; do
ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_SHARED_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
done |CT_DoLog ALL
CT_EndStep

View File

@ -21,27 +21,47 @@ do_cc_core_extract() {
CT_ExtractAndPatch "${CT_CC_CORE_FILE}"
}
# Build core gcc
do_cc_core() {
mkdir -p "${CT_BUILD_DIR}/build-cc-core"
cd "${CT_BUILD_DIR}/build-cc-core"
# Core gcc pass 1
do_cc_core_pass_1() {
# In case we're NPTL, build the static core gcc;
# in any other case, do nothing.
case "${CT_THREADS}" in
nptl) do_cc_core_static;;
*) ;;
esac
}
CT_DoStep INFO "Installing core C compiler"
# Core gcc pass 2
do_cc_core_pass_2() {
# In case we're NPTL, build the shared core gcc,
# in any other case, build the static core gcc.
case "${CT_THREADS}" in
nptl) do_cc_core_shared;;
*) do_cc_core_static;;
esac
}
# Build static core gcc
do_cc_core_static() {
mkdir -p "${CT_BUILD_DIR}/build-cc-core-static"
cd "${CT_BUILD_DIR}/build-cc-core-static"
CT_DoStep INFO "Installing static core C compiler"
CT_DoLog EXTRA "Copying headers to install area of bootstrap gcc, so it can build libgcc2"
mkdir -p "${CT_CC_CORE_PREFIX_DIR}/${CT_TARGET}/include"
cp -r "${CT_HEADERS_DIR}"/* "${CT_CC_CORE_PREFIX_DIR}/${CT_TARGET}/include" 2>&1 |CT_DoLog DEBUG
mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/include"
cp -r "${CT_HEADERS_DIR}"/* "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/include" 2>&1 |CT_DoLog DEBUG
CT_DoLog EXTRA "Configuring core C compiler"
CT_DoLog EXTRA "Configuring static core C compiler"
extra_config=""
[ "${CT_ARCH_FLOAT_SW}" = "y" ] && extra_config="${extra_config} --with-float=soft"
[ -n "${CT_ARCH_ABI}" ] && extra_config="${extra_config} --with-abi=${CT_ARCH_ABI}"
[ -n "${CT_ARCH_ARCH}" ] && extra_config="${extra_config} --with-arch=${CT_ARCH_ARCH}"
[ -n "${CT_ARCH_CPU}" ] && extra_config="${extra_config} --with-cpu=${CT_ARCH_CPU}"
[ -n "${CT_ARCH_TUNE}" ] && extra_config="${extra_config} --with-tune=${CT_ARCH_TUNE}"
[ -n "${CT_ARCH_ARCH}" ] && extra_config="${extra_config} --with-arch=${CT_ARCH_ARCH}"
[ -n "${CT_ARCH_FPU}" ] && extra_config="${extra_config} --with-fpu=${CT_ARCH_FPU}"
[ "${CT_CC_CXA_ATEXIT}" == "y" ] && extra_config="${extra_config} --enable-__cxa_atexit"
[ "${CT_CC_CXA_ATEXIT}" = "y" ] && extra_config="${extra_config} --enable-__cxa_atexit"
CT_DoLog DEBUG "Extra config passed: \"${extra_config}\""
@ -49,9 +69,9 @@ do_cc_core() {
CFLAGS="${CT_CFLAGS_FOR_HOST}" \
"${CT_SRC_DIR}/${CT_CC_CORE_FILE}/configure" \
${CT_CANADIAN_OPT} \
--target=${CT_TARGET} \
--host=${CT_HOST} \
--prefix="${CT_CC_CORE_PREFIX_DIR}" \
--target=${CT_TARGET} \
--prefix="${CT_CC_CORE_STATIC_PREFIX_DIR}" \
--with-local-prefix="${CT_SYSROOT_DIR}" \
--disable-multilib \
--with-newlib \
@ -69,12 +89,102 @@ do_cc_core() {
make ${PARALLELMFLAGS} all-build-libiberty 2>&1 |CT_DoLog ALL
fi
CT_DoLog EXTRA "Building core C compiler"
CT_DoLog EXTRA "Building static core C compiler"
make ${PARALLELMFLAGS} all-gcc 2>&1 |CT_DoLog ALL
CT_DoLog EXTRA "Installing core C compiler"
CT_DoLog EXTRA "Installing static core C compiler"
make install-gcc 2>&1 |CT_DoLog ALL
CT_EndStep
}
# Build shared core gcc
do_cc_core_shared() {
mkdir -p "${CT_BUILD_DIR}/build-cc-core-shared"
cd "${CT_BUILD_DIR}/build-cc-core-shared"
CT_DoStep INFO "Installing shared core C compiler"
CT_DoLog EXTRA "Copying headers to install area of bootstrap gcc, so it can build libgcc2"
mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/include"
cp -r "${CT_HEADERS_DIR}"/* "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/include" 2>&1 |CT_DoLog DEBUG
CT_DoLog EXTRA "Configuring shared core C compiler"
extra_config=""
[ "${CT_ARCH_FLOAT_SW}" = "y" ] && extra_config="${extra_config} --with-float=soft"
[ -n "${CT_ARCH_ABI}" ] && extra_config="${extra_config} --with-abi=${CT_ARCH_ABI}"
[ -n "${CT_ARCH_ARCH}" ] && extra_config="${extra_config} --with-arch=${CT_ARCH_ARCH}"
[ -n "${CT_ARCH_CPU}" ] && extra_config="${extra_config} --with-cpu=${CT_ARCH_CPU}"
[ -n "${CT_ARCH_TUNE}" ] && extra_config="${extra_config} --with-tune=${CT_ARCH_TUNE}"
[ -n "${CT_ARCH_FPU}" ] && extra_config="${extra_config} --with-fpu=${CT_ARCH_FPU}"
[ "${CT_CC_CXA_ATEXIT}" = "y" ] && extra_config="${extra_config} --enable-__cxa_atexit"
CT_DoLog DEBUG "Extra config passed: \"${extra_config}\""
CFLAGS="${CT_CFLAGS_FOR_HOST}" \
"${CT_SRC_DIR}/${CT_CC_CORE_FILE}/configure" \
${CT_CANADIAN_OPT} \
--target=${CT_TARGET} \
--host=${CT_HOST} \
--prefix="${CT_CC_CORE_SHARED_PREFIX_DIR}" \
--with-local-prefix="${CT_SYSROOT_DIR}" \
--disable-multilib \
${CC_CORE_SYSROOT_ARG} \
${extra_config} \
--disable-nls \
--enable-symvers=gnu \
--enable-languages=c \
--enable-shared \
${CT_CC_CORE_EXTRA_CONFIG} 2>&1 |CT_DoLog ALL
# HACK: we need to override SHLIB_LC from gcc/config/t-slibgcc-elf-ver or
# gcc/config/t-libunwind so -lc is removed from the link for
# libgcc_s.so, as we do not have a target -lc yet.
# This is not as ugly as it appears to be ;-) All symbols get resolved
# during the glibc build, and we provide a proper libgcc_s.so for the
# cross toolchain during the final gcc build.
#
# As we cannot modify the source tree, nor override SHLIB_LC itself
# during configure or make, we have to edit the resultant
# gcc/libgcc.mk itself to remove -lc from the link.
# This causes us to have to jump through some hoops...
#
# To produce libgcc.mk to edit we firstly require libiberty.a,
# so we configure then build it.
# Next we have to configure gcc, create libgcc.mk then edit it...
# So much easier if we just edit the source tree, but hey...
if [ ! -f "${CT_SRC_DIR}/${CT_CC_CORE_FILE}/gcc/BASE-VER" ]; then
make configure-libiberty
make -C libiberty libiberty.a
make configure-gcc
make configure-libcpp
make all-libcpp
else
make configure-gcc
make configure-libcpp
make configure-build-libiberty
make all-libcpp
make all-build-libiberty
fi 2>&1 |CT_DoLog ALL
# HACK: gcc-4.2 uses libdecnumber to build libgcc.mk, so build it here.
if [ -d "${CT_SRC_DIR}/${CT_CC_CORE_FILE}/libdecnumber" ]; then
make configure-libdecnumber
make -C libdecnumber libdecnumber.a
fi 2>&1 |CT_DoLog ALL
make -C gcc libgcc.mk 2>&1 |CT_DoLog ALL
sed -r -i -e 's@-lc@@g' gcc/libgcc.mk
if [ "${CT_CANADIAN}" = "y" ]; then
CT_DoLog EXTRA "Building libiberty"
make ${PARALLELMFLAGS} all-build-libiberty 2>&1 |CT_DoLog ALL
fi
CT_DoLog EXTRA "Building shared core C compiler"
make ${PARALLELMFLAGS} all-gcc 2>&1 |CT_DoLog ALL
CT_DoLog EXTRA "Installing shared core C compiler"
make install-gcc 2>&1 |CT_DoLog ALL
CT_EndStep
}

View File

@ -22,7 +22,7 @@ do_debug_dmalloc_build() {
y) extra_config="${extra_config} --enable-cxx";;
*) extra_config="${extra_config} --disable-cxx";;
esac
case "${CT_LIBC_THREADS_NONE}" in
case "${CT_THREADS_NONE}" in
y) extra_config="${extra_config} --disable-threads";;
*) extra_config="${extra_config} --enable-threads";;
esac

View File

@ -11,10 +11,13 @@ do_libc_get() {
# C library addons
addons_list=`echo "${CT_LIBC_ADDONS_LIST}" |sed -r -e 's/,/ /g; s/ $//g;'`
case "${CT_THREADS}" in
linuxthreads) addons_list="${addons_list} linuxthreads";;
esac
[ "${CT_LIBC_GLIBC_USE_PORTS}" = "y" ] && addons_list="${addons_list} ports"
for addon in ${addons_list}; do
CT_GetFile "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}" ftp://ftp.gnu.org/gnu/glibc
done
[ "${CT_LIBC_GLIBC_USE_PORTS}" = "y" ] && CT_GetFile "${CT_LIBC}-ports-${CT_LIBC_VERSION}" ftp://ftp.gnu.org/gnu/glibc
return 0
}
@ -25,10 +28,13 @@ do_libc_extract() {
# C library addons
addons_list=`echo "${CT_LIBC_ADDONS_LIST}" |sed -r -e 's/,/ /g; s/ $//g;'`
case "${CT_THREADS}" in
linuxthreads) addons_list="${addons_list} linuxthreads";;
esac
[ "${CT_LIBC_GLIBC_USE_PORTS}" = "y" ] && addons_list="${addons_list} ports"
for addon in ${addons_list}; do
CT_ExtractAndPatch "${CT_LIBC}-${addon}-${CT_LIBC_VERSION}"
done
[ "${CT_LIBC_GLIBC_USE_PORTS}" = "y" ] && CT_ExtractAndPatch "${CT_LIBC}-ports-${CT_LIBC_VERSION}"
return 0
}
@ -68,21 +74,27 @@ do_libc_headers() {
# 'a version of binutils that supports .machine "altivec" is needed'.
# We also need to use the ports addon if specified
addons=
[ "${CT_LIBC_GLIBC_USE_PORTS}" = "y" ] && addons="${CT_LIBC}-ports-${CT_LIBC_VERSION}"
addons_list=
case "${CT_LIBC_ADDONS},${CT_LIBC_GLIBC_USE_PORTS}" in
y,y) addons_list="${CT_LIBC_ADDONS_LIST},ports";;
y,) addons_list="${CT_LIBC_ADDONS_LIST}";;
,y) addons_list="ports";;
*) addons_list="";;
esac
addons_config="--enable-add-ons=`echo ${addons_list} |sed -r -e 's/,+/,/g; s/^,+//; s/,+$//;'`"
libc_cv_ppc_machine=yes \
CC=${CT_CC_NATIVE} \
"${CT_SRC_DIR}/${CT_LIBC_FILE}/configure" \
--build="${CT_BUILD}" \
--build="${CT_UNIQ_BUILD}" \
--host="${CT_TARGET}" \
--prefix=/usr \
--with-headers="${CT_HEADERS_DIR}" \
--without-cvs \
--disable-sanity-checks \
--enable-hacker-mode \
--enable-add-ons="${addons}" \
--without-nptl 2>&1 |CT_DoLog ALL
--without-nptl \
${addons_config} 2>&1 |CT_DoLog ALL
CT_DoLog EXTRA "Installing C library headers"
@ -133,6 +145,131 @@ do_libc_headers() {
# but it breaks arm, see http://sourceware.org/ml/crossgcc/2006-01/msg00091.html
[ "${CT_ARCH}" != "arm" ] && cp misc/syscall-list.h "${CT_HEADERS_DIR}/bits/syscall.h" || true
# Those headers are to be manually copied so gcc can build properly
pthread_h=
pthreadtypes_h=
case "${CT_THREADS}" in
nptl)
# NOTE: for some archs, the pathes are different, but they are not
# supported by ct-ng right now. See original crosstool when they are.
pthread_h="${CT_SRC_DIR}/${CT_LIBC_FILE}/${CT_THREADS}/sysdeps/pthread/pthread.h"
pthreadtypes_h="${CT_SRC_DIR}/${CT_LIBC_FILE}/nptl/sysdeps/unix/sysv/linux/${CT_KERNEL_ARCH}/bits/pthreadtypes.h"
;;
linuxthreads)
pthread_h="${CT_SRC_DIR}/${CT_LIBC_FILE}/${CT_THREADS}/sysdeps/pthread/pthread.h"
pthreadtypes_h="${CT_SRC_DIR}/${CT_LIBC_FILE}/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h"
;;
esac
if [ -n "${pthread_h}" ]; then
cp -v "${pthread_h}" "${CT_HEADERS_DIR}/pthread.h" 2>&1 |CT_DoLog ALL
fi
if [ -n "${pthreadtypes_h}" ]; then
cp -v "${pthreadtypes_h}" "${CT_HEADERS_DIR}/bits/pthreadtypes.h" 2>&1 |CT_DoLog ALL
fi
CT_EndStep
}
# Build and install start files
do_libc_start_files() {
# Needed only in the NPTL case. Otherwise, return.
[ "${CT_THREADS}" = "nptl" ] || return 0
CT_DoStep INFO "Installing C library start files"
mkdir -p "${CT_BUILD_DIR}/build-libc-startfiles"
cd "${CT_BUILD_DIR}/build-libc-startfiles"
CT_DoLog EXTRA "Configuring C library"
# Add some default glibc config options if not given by user.
extra_config=""
case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
*enable-kernel*) ;;
*) extra_config="${extra_config} --enable-kernel=`echo ${CT_KERNEL_VERSION} |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;'`"
esac
case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
*-tls*) ;;
*) extra_config="${extra_config} --with-tls"
esac
case "${CT_SHARED_LIBS}" in
y) extra_config="${extra_config} --enable-shared";;
*) extra_config="${extra_config} --disable-shared";;
esac
case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
*--with-fp*) ;;
*--without-fp*) ;;
*) case "${CT_ARCH_FLOAT_HW},${CT_ARCH_FLOAT_SW}" in
y,) extra_config="${extra_config} --with-fp";;
,y) extra_config="${extra_config} --without-fp";;
esac;;
esac
# Obviously, we want threads, as we come here only for NPTL
extra_config="${extra_config} --with-__thread"
addons_list=
case "${CT_LIBC_ADDONS},${CT_LIBC_GLIBC_USE_PORTS}" in
y,y) addons_list="nptl,${CT_LIBC_ADDONS_LIST},ports";;
y,) addons_list="nptl,${CT_LIBC_ADDONS_LIST}";;
,y) addons_list="nptl,ports";;
*) addons_list="nptl";;
esac
addons_config="--enable-add-ons=`echo ${addons_list} |sed -r -e 's/,+/,/g; s/^,+//; s/,+$//;'`"
extra_config="${extra_config} ${addons_config}"
# Add some default CC args
extra_cc_args="${CT_CFLAGS_FOR_HOST}"
case "${CT_LIBC_EXTRA_CC_ARGS}" in
*-mbig-endian*) ;;
*-mlittle-endian*) ;;
*) case "${CT_ARCH_BE},${CT_ARCH_LE}" in
y,) extra_cc_args="${extra_cc_args} -mbig-endian";;
,y) extra_cc_args="${extra_cc_args} -mlittle-endian";;
esac;;
esac
CT_DoLog DEBUG "Configuring with addons : \"${addons_list}\""
CT_DoLog DEBUG "Extra config args passed: \"${extra_config}\""
CT_DoLog DEBUG "Extra CC args passed: \"${extra_cc_args}\""
# sh3 and sh4 really need to set configparms as of gcc-3.4/glibc-2.3.2
# note: this is awkward, doesn't work well if you need more than one line in configparms
echo ${CT_LIBC_GLIBC_CONFIGPARMS} > configparms
echo "libc_cv_forced_unwind=yes" > config.cache
echo "libc_cv_c_cleanup=yes" >> config.cache
# Please see the comment for the configure step in do_libc().
BUILD_CC=${CT_CC_NATIVE} \
CFLAGS="${CT_TARGET_CFLAGS} ${CT_LIBC_GLIBC_EXTRA_CFLAGS} -O" \
CC="${CT_TARGET}-gcc ${CT_LIBC_EXTRA_CC_ARGS} ${extra_cc_args}" \
AR=${CT_TARGET}-ar \
RANLIB=${CT_TARGET}-ranlib \
"${CT_SRC_DIR}/${CT_LIBC_FILE}/configure" \
--prefix=/usr \
--build="${CT_UNIQ_BUILD}" \
--host=${CT_TARGET} \
--without-cvs \
--disable-profile \
--disable-debug \
--without-gd \
--with-headers="${CT_HEADERS_DIR}" \
--cache-file=config.cache \
${extra_config} \
${CT_LIBC_GLIBC_EXTRA_CONFIG} 2>&1 |CT_DoLog ALL
#TODO: should check whether slibdir has been set in configparms to */lib64
# and copy the startfiles into the appropriate libdir.
make csu/subdir_lib 2>&1 |CT_DoLog ALL
if [ "${CT_USE_SYSROOT}" = "y" ]; then
cp -fp csu/crt[1in].o "${CT_SYSROOT_DIR}/usr/lib/"
else
cp -fp csu/crt[1in].o "${CT_SYSROOT_DIR}/lib/"
fi
CT_EndStep
}
@ -146,51 +283,59 @@ do_libc() {
CT_DoLog EXTRA "Configuring C library"
# Add some default glibc config options if not given by user.
extra_config=""
case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
*enable-kernel*) ;;
*) extra_config="${extra_config} --enable-kernel=`echo ${CT_KERNEL_VERSION} |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;'`"
esac
case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
*-tls*) ;;
*) extra_config="${extra_config} --without-tls"
esac
case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
*-__thread*) ;;
*) extra_config="${extra_config} --without-__thread"
# We don't need to be conditional on wether the user did set different
# values, as they CT_LIBC_GLIBC_EXTRA_CONFIG is passed after extra_config
extra_config="--enable-kernel=`echo ${CT_KERNEL_VERSION} |sed -r -e 's/^([^.]+\.[^.]+\.[^.]+)(|\.[^.]+)$/\1/;'`"
case "${CT_THREADS}" in
nptl) extra_config="${extra_config} --with-__thread --with-tls";;
linuxthreads) extra_config="${extra_config} --with-__thread --without-tls --without-nptl";;
none) extra_config="${extra_config} --without-__thread --without-nptl"
case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
*-tls*) ;;
*) extra_config="${extra_config} --without-tls";;
esac
;;
esac
case "${CT_SHARED_LIBS}" in
y) extra_config="${extra_config} --enable-shared";;
*) extra_config="${extra_config} --disable-shared";;
esac
case "${CT_LIBC_GLIBC_EXTRA_CONFIG}" in
*--with-fp*) ;;
*--without-fp*) ;;
*) case "${CT_ARCH_FLOAT_HW},${CT_ARCH_FLOAT_SW}" in
y,) extra_config="${extra_config} --with-fp";;
,y) extra_config="${extra_config} --without-fp";;
esac;;
case "${CT_ARCH_FLOAT_HW},${CT_ARCH_FLOAT_SW}" in
y,) extra_config="${extra_config} --with-fp";;
,y) extra_config="${extra_config} --without-fp";;
esac
addons_list=
case "${CT_LIBC_ADDONS},${CT_LIBC_GLIBC_USE_PORTS}" in
y,y) addons_config="--enable-add-ons=${CT_LIBC_ADDONS_LIST},${CT_LIBC}-ports-${CT_LIBC_VERSION}";;
y,) addons_config="--enable-add-ons=${CT_LIBC_ADDONS_LIST}";;
,y) addons_config="--enable-add-ons=${CT_LIBC}-ports-${CT_LIBC_VERSION}";;
*) addons_config="";;
y,y) addons_list="${CT_LIBC_ADDONS_LIST},ports";;
y,) addons_list="${CT_LIBC_ADDONS_LIST}";;
,y) addons_list="ports";;
*) addons_list="";;
esac
case "${CT_THREADS}" in
none) ;;
*) addons_list="${addons_list},${CT_THREADS}";;
esac
case "${addons_list}" in
"") ;;
*) addons_config="--enable-add-ons=`echo ${addons_list} |sed -r -e 's/,+/,/g; s/^,+//g; s/,+$//;'`";;
esac
extra_config="${extra_config} ${addons_config}"
# Add some default CC args
extra_cc_args="${CT_CFLAGS_FOR_HOST}"
case "${CT_LIBC_EXTRA_CC_ARGS}" in
*-mbig-endian*) ;;
*-mlittle-endian*) ;;
*) case "${CT_ARCH_BE},${CT_ARCH_LE}" in
y,) extra_cc_args="${extra_cc_args} -mbig-endian";;
,y) extra_cc_args="${extra_cc_args} -mlittle-endian";;
esac;;
if [ "${CT_USE_PIPES}" = "y" ]; then
extra_cc_args="-pipe"
fi
case "${CT_ARCH_BE},${CT_ARCH_LE}" in
y,) extra_cc_args="${extra_cc_args} -mbig-endian";;
,y) extra_cc_args="${extra_cc_args} -mlittle-endian";;
esac
CT_DoLog DEBUG "Configuring with addons : \"${addons_config}\""
CT_DoLog DEBUG "Configuring with addons : \"${addons_list}\""
CT_DoLog DEBUG "Extra config args passed: \"${extra_config}\""
CT_DoLog DEBUG "Extra CC args passed: \"${extra_cc_args}\""
@ -201,11 +346,10 @@ do_libc() {
# For glibc 2.3.4 and later we need to set some autoconf cache
# variables, because nptl/sysdeps/pthread/configure.in does not
# work when cross-compiling.
if test -d ${GLIBC_DIR}/nptl; then
libc_cv_forced_unwind=yes
libc_cv_c_cleanup=yes
export libc_cv_forced_unwind libc_cv_c_cleanup
fi
if [ "${CT_THREADS}" = "nptl" ]; then
echo libc_cv_forced_unwind=yes
echo libc_cv_c_cleanup=yes
fi >config.cache
# Configure with --prefix the way we want it on the target...
# There are a whole lot of settings here. You'll probably want
@ -216,19 +360,26 @@ do_libc() {
# Set BUILD_CC, or you won't be able to build datafiles
# Set --build, else glibc-2.3.2 will think you're not cross-compiling, and try to run the test programs
# OK. I'm fed up with those folks telling me what I should do.
# I don't configure nptl? Well, maybe that's purposedly because
# I don't want nptl! --disable-sanity-checks will shut up those
# silly messages. GNU folks again, he?
BUILD_CC=${CT_CC_NATIVE} \
CFLAGS="${CT_TARGET_CFLAGS} ${CT_LIBC_GLIBC_EXTRA_CFLAGS} -O" \
CC="${CT_TARGET}-gcc ${CT_LIBC_EXTRA_CC_ARGS} ${extra_cc_args}" \
CC="${CT_TARGET}-gcc ${extra_cc_args} ${CT_LIBC_EXTRA_CC_ARGS}" \
AR=${CT_TARGET}-ar \
RANLIB=${CT_TARGET}-ranlib \
"${CT_SRC_DIR}/${CT_LIBC_FILE}/configure" \
--prefix=/usr \
--build=${CT_BUILD} --host=${CT_TARGET} \
--build=${CT_UNIQ_BUILD} \
--host=${CT_TARGET} \
--without-cvs \
--without-nptl \
--disable-profile \
--disable-debug \
--without-gd \
--disable-sanity-checks \
--cache-file=config.cache \
--with-headers="${CT_HEADERS_DIR}" \
${addons_config} \
${extra_config} \

View File

@ -79,6 +79,11 @@ do_libc_headers() {
CT_EndStep
}
# Build and install start files
do_libc_start_files() {
:
}
# This function build and install the full uClibc
do_libc() {
CT_DoStep INFO "Installing C library"

View File

@ -40,11 +40,11 @@ do_libfloat() {
make clean 2>&1 |CT_DoLog ALL
CT_DoLog EXTRA "Building library"
make CROSS_COMPILE="${CT_CC_CORE_PREFIX_DIR}/bin/${CT_TARGET}-" 2>&1 |CT_DoLog ALL
make CROSS_COMPILE="${CT_CC_CORE_SHARED_PREFIX_DIR}/bin/${CT_TARGET}-" 2>&1 |CT_DoLog ALL
CT_DoLog EXTRA "Installing library"
make CROSS_COMPILE="${CT_CC_CORE_PREFIX_DIR}/bin/${CT_TARGET}-" \
DESTDIR="${CT_SYSROOT_DIR}" install 2>&1 |CT_DoLog ALL
make CROSS_COMPILE="${CT_CC_CORE_SHARED_PREFIX_DIR}/bin/${CT_TARGET}-" \
DESTDIR="${CT_SYSROOT_DIR}" install 2>&1 |CT_DoLog ALL
CT_Popd

View File

@ -31,7 +31,7 @@ CT_STAR_DATE_HUMAN=`CT_DoDate +%Y%m%d.%H%M%S`
# - first of all, save stdout so we can see the live logs: fd #6
exec 6>&1
# - then point stdout to the log file (temporary for now)
tmp_log_file="${CT_TOP_DIR}/$$.log"
tmp_log_file="${CT_TOP_DIR}/log.$$"
exec >>"${tmp_log_file}"
# Are we configured? We'll need that later...
@ -118,7 +118,8 @@ CT_DEBUG_INSTALL_DIR="${CT_INSTALL_DIR}/${CT_TARGET}/debug-root"
# Note: we'll always install the core compiler in its own directory, so as to
# not mix the two builds: core and final. Anyway, its generic, wether we use
# a different compiler as core, or not.
CT_CC_CORE_PREFIX_DIR="${CT_BUILD_DIR}/${CT_CC}-core"
CT_CC_CORE_STATIC_PREFIX_DIR="${CT_BUILD_DIR}/${CT_CC}-core-static"
CT_CC_CORE_SHARED_PREFIX_DIR="${CT_BUILD_DIR}/${CT_CC}-core-shared"
CT_STATE_DIR="${CT_TOP_DIR}/targets/${CT_TARGET}/state"
# Make all path absolute, it so much easier!
@ -201,11 +202,12 @@ mkdir -p "${CT_BUILD_DIR}"
mkdir -p "${CT_INSTALL_DIR}"
mkdir -p "${CT_PREFIX_DIR}"
mkdir -p "${CT_DEBUG_INSTALL_DIR}"
mkdir -p "${CT_CC_CORE_PREFIX_DIR}"
mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}"
mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}"
mkdir -p "${CT_STATE_DIR}"
# Kludge: CT_INSTALL_DIR and CT_PREFIX_DIR might have grown read-only if
# the previous build was successfull. To ba able to move the logfile there,
# the previous build was successfull. To be able to move the logfile there,
# switch them back to read/write
chmod -R u+w "${CT_INSTALL_DIR}" "${CT_PREFIX_DIR}"
@ -269,16 +271,22 @@ if [ -z "${CT_RESTART}" ]; then
mkdir -p "${CT_SYSROOT_DIR}/usr/lib"
# Canadian-cross are really picky on the way they are built. Tweak the values.
CT_UNIQ_BUILD=`echo "${CT_BUILD}" |sed -r -e 's/-/-build_/'`
if [ "${CT_CANADIAN}" = "y" ]; then
# Arrange so that gcc never, ever think that build system == host system
CT_CANADIAN_OPT="--build=`echo \"${CT_BUILD}\" |sed -r -e 's/-/-build_/'`"
CT_CANADIAN_OPT="--build=${CT_UNIQ_BUILD}"
# We shall have a compiler for this target!
# Do test here...
else
CT_HOST="${CT_BUILD}"
CT_CANADIAN_OPT="--build=${CT_BUILD}"
# Add the target toolchain in the path so that we can build the C library
export PATH="${CT_PREFIX_DIR}/bin:${CT_CC_CORE_PREFIX_DIR}/bin:${PATH}"
# Carefully add paths in the order we want them:
# - first try in ${CT_PREFIX_DIR}/bin
# - then try in ${CT_CC_CORE_SHARED_PREFIX_DIR}/bin
# - then try in ${CT_CC_CORE_STATIC_PREFIX_DIR}/bin
# - fall back to searching user's PATH
export PATH="${CT_PREFIX_DIR}/bin:${CT_CC_CORE_SHARED_PREFIX_DIR}/bin:${CT_CC_CORE_STATIC_PREFIX_DIR}/bin:${PATH}"
fi
# Modify GCC_HOST to never be equal to $BUILD or $TARGET
@ -294,7 +302,7 @@ if [ -z "${CT_RESTART}" ]; then
# (Copied almost as-is from original crosstool):
case "${CT_KERNEL},${CT_CANADIAN}" in
cygwin,y) ;;
*) CT_HOST="`echo \"${CT_HOST}\" |sed -r -e 's/-/-host_/;'`";;
*,y) CT_HOST="`echo \"${CT_HOST}\" |sed -r -e 's/-/-host_/;'`";;
esac
# Ah! Recent versions of binutils need some of the build and/or host system
@ -304,10 +312,9 @@ if [ -z "${CT_RESTART}" ]; then
mkdir -p "${CT_PREFIX_DIR}/bin"
for tool in ar as dlltool gcc g++ gnatbind gnatmake ld nm ranlib strip windres objcopy objdump; do
if [ -n "`which ${tool}`" ]; then
ln -sv "`which ${tool}`" "${CT_PREFIX_DIR}/bin/${CT_BUILD}-${tool}"
case "${CT_TOOLCHAIN_TYPE}" in
cross|native) ln -sv "`which ${tool}`" "${CT_PREFIX_DIR}/bin/${CT_HOST}-${tool}";;
esac
ln -sfv "`which ${tool}`" "${CT_PREFIX_DIR}/bin/${CT_BUILD}-${tool}"
ln -sfv "`which ${tool}`" "${CT_PREFIX_DIR}/bin/${CT_UNIQ_BUILD}-${tool}"
ln -sfv "`which ${tool}`" "${CT_PREFIX_DIR}/bin/${CT_HOST}-${tool}"
fi |CT_DoLog DEBUG
done
@ -392,8 +399,10 @@ if [ "${CT_ONLY_DOWNLOAD}" != "y" -a "${CT_ONLY_EXTRACT}" != "y" ]; then
kernel_check_config \
kernel_headers \
binutils \
cc_core_pass_1 \
libc_headers \
cc_core \
libc_start_files \
cc_core_pass_2 \
libfloat \
libc \
cc \

View File

@ -2,6 +2,7 @@
# Copyright 2007 Yann E. MORIN
# Licensed under the GPL v2. See COPYING in the root of this package
# Prepare the fault handler
CT_OnError() {
ret=$?
CT_DoLog ERROR "Build failed in step \"${CT_STEP_MESSAGE[${CT_STEP_COUNT}]}\""
@ -17,11 +18,23 @@ CT_OnError() {
CT_DoEnd ERROR
exit $ret
}
# Install the fault handler
trap CT_OnError ERR
# Inherit the fault handler in subshells and functions
set -E
# Make pipes fail on the _first_ failed command
# Not supported on bash < 3.x, but we need it, so drop the obsoleting bash-2.x
set -o pipefail
# Don't hash commands' locations, and search every time it is requested.
# This is slow, but needed because of the static/shared core gcc which shall
# always match to shared if it exists, and only fallback to static if the
# shared is not found
set +o hashall
# The different log levels:
CT_LOG_LEVEL_ERROR=0
CT_LOG_LEVEL_WARN=1
@ -392,8 +405,16 @@ CT_ExtractAndPatch() {
# a libc addon, or a plain package. Apply patches now.
CT_DoLog EXTRA "Patching \"${file}\""
# If libc addon, we're already in the correct place.
[ -z "${libc_addon}" ] && cd "${file}"
if [ "${libc_addon}" = "y" ]; then
# Some addons tarball directly contian the correct addon directory,
# while others have the addon directory named ofter the tarball.
# Fix that bu always using the short name (eg: linuxthreads, ports, etc...)
addon_short_name=`echo "${file}" |sed -r -e 's/^[^-]+-//; s/-[^-]+$//;'`
[ -d "${addon_short_name}" ] || ln -s "${file}" "${addon_short_name}"
# If libc addon, we're already in the correct place
else
cd "${file}"
fi
[ "${CUSTOM_PATCH_ONLY}" = "y" ] || official_patch_dir="${CT_TOP_DIR}/patches/${base_file}/${ver_file}"
[ "${CT_CUSTOM_PATCH}" = "y" ] && custom_patch_dir="${CT_CUSTOM_PATCH_DIR}/${base_file}/${ver_file}"
@ -493,14 +514,19 @@ CT_DoSaveState() {
$0 == "}" { _p = 1; }
' |egrep -v '^[^ ]+ \(\)' >"${state_dir}/env.sh"
CT_DoLog DEBUG " Saving CT_CC_CORE_PREFIX_DIR=\"${CT_CC_CORE_PREFIX_DIR}\""
CT_Pushd "${CT_CC_CORE_PREFIX_DIR}"
tar ${tar_opt} "${state_dir}/cc_core_prefix_dir${tar_ext}" .
CT_DoLog DEBUG " Saving CT_CC_CORE_STATIC_PREFIX_DIR=\"${CT_CC_CORE_STATIC_PREFIX_DIR}\""
CT_Pushd "${CT_CC_CORE_STATIC_PREFIX_DIR}"
tar ${tar_opt} "${state_dir}/cc_core_static_prefix_dir${tar_ext}" .
CT_Popd
CT_DoLog DEBUG " Saving CT_CC_CORE_SHARED_PREFIX_DIR=\"${CT_CC_CORE_SHARED_PREFIX_DIR}\""
CT_Pushd "${CT_CC_CORE_SHARED_PREFIX_DIR}"
tar ${tar_opt} "${state_dir}/cc_core_shared_prefix_dir${tar_ext}" .
CT_Popd
CT_DoLog DEBUG " Saving CT_PREFIX_DIR=\"${CT_PREFIX_DIR}\""
CT_Pushd "${CT_PREFIX_DIR}"
tar ${tar_opt} "${state_dir}/prefix_dir${tar_ext}" .
tar ${tar_opt} "${state_dir}/prefix_dir${tar_ext}" --exclude '*.log' .
CT_Popd
if [ "${CT_LOG_TO_FILE}" = "y" ]; then
@ -514,7 +540,7 @@ CT_DoSaveState() {
fi
}
# This functions restores a previously saved state
# This function restores a previously saved state
# Usage: CT_DoLoadState <state_name>
CT_DoLoadState(){
local state_name="$1"
@ -534,18 +560,23 @@ CT_DoLoadState(){
esac
CT_DoLog DEBUG " Removing previous build directories"
chmod -R u+rwX "${CT_PREFIX_DIR}" "${CT_CC_CORE_PREFIX_DIR}"
rm -rf "${CT_PREFIX_DIR}" "${CT_CC_CORE_PREFIX_DIR}"
mkdir -p "${CT_PREFIX_DIR}" "${CT_CC_CORE_PREFIX_DIR}"
chmod -R u+rwX "${CT_PREFIX_DIR}" "${CT_CC_CORE_SHARED_PREFIX_DIR}" "${CT_CC_CORE_STATIC_PREFIX_DIR}"
rm -rf "${CT_PREFIX_DIR}" "${CT_CC_CORE_SHARED_PREFIX_DIR}" "${CT_CC_CORE_STATIC_PREFIX_DIR}"
mkdir -p "${CT_PREFIX_DIR}" "${CT_CC_CORE_SHARED_PREFIX_DIR}" "${CT_CC_CORE_STATIC_PREFIX_DIR}"
CT_DoLog DEBUG " Restoring CT_PREFIX_DIR=\"${CT_PREFIX_DIR}\""
CT_Pushd "${CT_PREFIX_DIR}"
tar ${tar_opt} "${state_dir}/prefix_dir${tar_ext}"
CT_Popd
CT_DoLog DEBUG " Restoring CT_CC_CORE_PREFIX_DIR=\"${CT_CC_CORE_PREFIX_DIR}\""
CT_Pushd "${CT_CC_CORE_PREFIX_DIR}"
tar ${tar_opt} "${state_dir}/cc_core_prefix_dir${tar_ext}"
CT_DoLog DEBUG " Restoring CT_CC_CORE_SHARED_PREFIX_DIR=\"${CT_CC_CORE_SHARED_PREFIX_DIR}\""
CT_Pushd "${CT_CC_CORE_SHARED_PREFIX_DIR}"
tar ${tar_opt} "${state_dir}/cc_core_shared_prefix_dir${tar_ext}"
CT_Popd
CT_DoLog DEBUG " Restoring CT_CC_CORE_STATIC_PREFIX_DIR=\"${CT_CC_CORE_STATIC_PREFIX_DIR}\""
CT_Pushd "${CT_CC_CORE_STATIC_PREFIX_DIR}"
tar ${tar_opt} "${state_dir}/cc_core_static_prefix_dir${tar_ext}"
CT_Popd
# Restore the environment, discarding any error message