Merge patches sent by Robert P. J. Day <rpjday@mindspring.com>.
Warning: the buildroot folks purposedly removed the skip-comment patch but didn't really said why. Keeping it for the sake of having it in svn just in case (removing it will be easier thant not having it at all).
1 # This scripts calls each component's build script.
2 # Copyright 2007 Yann E. MORIN
3 # Licensed under the GPL v2. See COPYING in the root of this package
5 # Parse all build files to have the needed functions.
6 . "${CT_TOP_DIR}/scripts/build/kernel_${CT_KERNEL}.sh"
7 . "${CT_TOP_DIR}/scripts/build/binutils.sh"
8 . "${CT_TOP_DIR}/scripts/build/libc_libfloat.sh"
9 . "${CT_TOP_DIR}/scripts/build/libc_${CT_LIBC}.sh"
10 . "${CT_TOP_DIR}/scripts/build/cc_core_${CT_CC_CORE}.sh"
11 . "${CT_TOP_DIR}/scripts/build/cc_${CT_CC}.sh"
13 # Arrange paths depending on wether we use sys-root or not.
14 if [ "${CT_USE_SYSROOT}" = "y" ]; then
15 CT_SYSROOT_DIR="${CT_PREFIX_DIR}/${CT_TARGET}/sys-root"
16 CT_HEADERS_DIR="${CT_SYSROOT_DIR}/usr/include"
17 BINUTILS_SYSROOT_ARG="--with-sysroot=${CT_SYSROOT_DIR}"
18 CC_CORE_SYSROOT_ARG="--with-sysroot=${CT_SYSROOT_DIR}"
19 CC_SYSROOT_ARG="--with-sysroot=${CT_SYSROOT_DIR}"
21 # glibc's prefix must be exactly /usr, else --with-sysroot'd gcc will get
22 # confused when $sysroot/usr/include is not present.
23 # Note: --prefix=/usr is magic!
24 # See http://www.gnu.org/software/libc/FAQ.html#s-2.2
26 # plain old way. All libraries in prefix/target/lib
27 CT_SYSROOT_DIR="${CT_PREFIX_DIR}/${CT_TARGET}"
28 CT_HEADERS_DIR="${CT_SYSROOT_DIR}/include"
29 # hack! Always use --with-sysroot for binutils.
30 # binutils 2.14 and later obey it, older binutils ignore it.
31 # Lets you build a working 32->64 bit cross gcc
32 BINUTILS_SYSROOT_ARG="--with-sysroot=${CT_SYSROOT_DIR}"
33 # Use --with-headers, else final gcc will define disable_glibc while
34 # building libgcc, and you'll have no profiling
35 CC_CORE_SYSROOT_ARG="--without-headers"
36 CC_SYSROOT_ARG="--with-headers=${CT_HEADERS_DIR}"
37 LIBC_SYSROOT_ARG="prefix="
40 # Prepare the 'lib' directories in sysroot, else the ../lib64 hack used by
41 # 32 -> 64 bit crosscompilers won't work, and build of final gcc will fail with
42 # "ld: cannot open crti.o: No such file or directory"
43 mkdir -p "${CT_SYSROOT_DIR}/lib"
44 mkdir -p "${CT_SYSROOT_DIR}/usr/lib"
46 # Canadian-cross are really picky on the way they are built. Tweak the values.
47 if [ "${CT_CANADIAN}" = "y" ]; then
48 # Arrange so that gcc never, ever think that build system == host system
49 CT_CANADIAN_OPT="--build=`echo \"${CT_BUILD}\" |sed -r -e 's/-/-build_/'`"
50 # We shall have a compiler for this target!
55 # Add the target toolchain in the path so that we can build the C library
56 export PATH="${CT_PREFIX_DIR}/bin:${CT_CC_CORE_PREFIX_DIR}/bin:${PATH}"
59 # Modify GCC_HOST to never be equal to $BUILD or $TARGET
60 # This strange operation causes gcc to always generate a cross-compiler
61 # even if the build machine is the same kind as the host.
62 # This is why CC has to be set when doing a canadian cross; you can't find a
63 # host compiler by appending -gcc to our whacky $GCC_HOST
64 # Kludge: it is reported that the above causes canadian crosses with cygwin
65 # hosts to fail, so avoid it just in that one case. It would be cleaner to
66 # just move this into the non-canadian case above, but I'm afraid that might
67 # cause some configure script somewhere to decide that since build==host, they
68 # could run host binaries.
69 # (Copied almost as-is from original crosstool):
70 case "${CT_KERNEL},${CT_CANADIAN}" in
72 *) CT_HOST="`echo \"${CT_HOST}\" |sed -r -e 's/-/-host_/;'`";;
75 # Ah! Recent versions of binutils need some of the build and/or host system
76 # (read CT_BUILD and CT_HOST) tools to be accessible (ar is but an example).
78 CT_DoLog EXTRA "Making build system tools available"
79 mkdir -p "${CT_PREFIX_DIR}/bin"
81 ln -s "`which ${tool}`" "${CT_PREFIX_DIR}/bin/${CT_BUILD}-${tool}"
82 ln -s "`which ${tool}`" "${CT_PREFIX_DIR}/bin/${CT_HOST}-${tool}"
85 # Ha. cygwin host have an .exe suffix (extension) for executables.
86 [ "${CT_KERNEL}" = "cygwin" ] && EXEEXT=".exe" || EXEEXT=""
88 # Transform the ARCH into a kernel-understandable ARCH
90 x86) CT_KERNEL_ARCH=i386;;
91 ppc) CT_KERNEL_ARCH=powerpc;;
92 *) CT_KERNEL_ARCH="${CT_ARCH}";;
95 # Build up the TARGET_CFLAGS from user-provided options
97 [ -n "${CT_ARCH_CPU}" ] && tmp_target_CFLAGS="${tmp_target_CFLAGS} -mcpu=${CT_ARCH_CPU}"
98 [ -n "${CT_ARCH_TUNE}" ] && tmp_target_CFLAGS="${tmp_target_CFLAGS} -mtune=${CT_ARCH_TUNE}"
99 [ -n "${CT_ARCH_ARCH}" ] && tmp_target_CFLAGS="${tmp_target_CFLAGS} -march=${CT_ARCH_ARCH}"
100 [ -n "${CT_ARCH_FPU}" ] && tmp_target_CFLAGS="${tmp_target_CFLAGS} -mfpu=${CT_ARCH_FPU}"
101 # Override with user-specified CFLAGS
102 CT_TARGET_CFLAGS="${tmp_target_CFLAGS} ${CT_TARGET_CFLAGS}"
106 [ "${CT_USE_PIPES}" = "y" ] && CT_CFLAGS_FOR_HOST="${CT_CFLAGS_FOR_HOST} -pipe"
108 # And help make go faster
110 [ ${CT_PARALLEL_JOBS} -ne 0 ] && PARALLELMFLAGS="${PARALLELMFLAGS} -j${CT_PARALLEL_JOBS}"
111 [ ${CT_LOAD} -ne 0 ] && PARALLELMFLAGS="${PARALLELMFLAGS} -l${CT_LOAD}"
113 CT_DoStep EXTRA "Dumping internal crosstool-NG configuration"
114 CT_DoLog EXTRA "Building a toolchain for:"
115 CT_DoLog EXTRA " build = ${CT_BUILD}"
116 CT_DoLog EXTRA " host = ${CT_HOST}"
117 CT_DoLog EXTRA " target = ${CT_TARGET}"
118 set |egrep '^CT_.+=' |sort |CT_DoLog DEBUG
121 # Now for the job by itself.
122 # Check the C library config ASAP, before the user gets bored, and is
123 # gone having his/her coffee
125 do_kernel_check_config