--- trunk/core/include/cross_tools.sminc 2008/10/10 19:12:19 10 +++ trunk/core/include/cross_tools.sminc 2008/10/10 19:12:41 11 @@ -1,54 +1,67 @@ -# $Header: /magellan-cvs/smage/include/cross_tools.sminc,v 1.1 2005/12/24 14:03:26 niro Exp $ +# $Header: /magellan-cvs/smage/include/cross_tools.sminc,v 1.3 2008/10/06 17:55:48 niro Exp $ # Cross-tools generic functions -# # needed vars -# TARGET_ARCH="i686" -# TARGET_CHOST="${TARGET_ARCH}-cross-linux-gnu" -# -# PNAME="cross-tools-${TARGET_ARCH}" -# -# # version of the compiler -# PVER="4.0.2" -# PBUILD="r2" -# -# PCATEGORIE="dev-misc" -# STATE="unstable" -# -# DESCRIPTION="A crosscompile toolchain to compile programms for the ${TARGET_ARCH} arch." -# HOMEPAGE="http://magellan-linux.de/" -# -# DEPEND="" -# -# # binutils -# BINUTILS_PVER="2.16.91.0.3" -# BINUTILS_SRCFILE="binutils-${BINUTILS_PVER}.tar.bz2" -# BINUTILS_SRCDIR="${BUILDDIR}/binutils-${BINUTILS_PVER}" -# -# # kernel-headers -# LINUX_HEADERS_PVER="2.6.12.0" -# LINUX_HEADERS_SRCFILE="linux-libc-headers-${LINUX_HEADERS_PVER}.tar.bz2" -# LINUX_HEADERS_SRCDIR="${BUILDDIR}/linux-libc-headers-${LINUX_HEADERS_PVER}" -# -# # glibc-headers and libc -# GLIBC_PVER="2.3.5_20051107" -# GLIBC_SRCFILE="glibc-${GLIBC_PVER/*_/}.tar.bz2" -# GLIBC_LINUXTHREADS="glibc-linuxthreads-${GLIBC_PVER/*_/}.tar.bz2" -# GLIBC_SRCDIR="${BUILDDIR}/glibc-${GLIBC_PVER/*_/}" -# -# # gcc -# GCC_PVER="${PVER}" -# GCC_SRCFILE="gcc-${GCC_PVER}.tar.bz2" -# GCC_SRCDIR="${BUILDDIR}/gcc-${GCC_PVER}" -# -# # TARGET_DEST dir -# TARGET_DEST=/opt/cross-tools -# +# needed vars: +# TARGET_DEST dir +: ${TARGET_DEST="/opt/cross-tools"} + +# needed vars +#TARGET_ARCH="i686" # must be set outside +: ${CROSS_CHOST="${ARCH}-cross-linux-gnu"} +: ${TARGET_CHOST="${TARGET_ARCH}-pc-linux-gnu"} + +: ${PNAME="cross-tools-${TARGET_ARCH}"} + +: ${PCATEGORIE="dev-cross"} + +: ${DESCRIPTION="A crosscompile toolchain to compile programms for the ${TARGET_ARCH} arch."} +: ${HOMEPAGE="http://magellan-linux.de/"} + +# binutils +#BINUTILS_PVER="2.16.91.0.3" +: ${BINUTILS_SRCFILE="binutils-${BINUTILS_PVER}.tar.bz2"} +: ${BINUTILS_SRCDIR="${BUILDDIR}/binutils-${BINUTILS_PVER}"} + +# kernel-headers +#LINUX_HEADERS_PVER="2.6.12.0" +: ${LINUX_HEADERS_SRCFILE="linux-${LINUX_HEADERS_PVER}.tar.bz2"} +: ${LINUX_HEADERS_SRCDIR="${BUILDDIR}/linux-${LINUX_HEADERS_PVER}"} + +# glibc-headers and libc +#GLIBC_PVER="2.3.5_20051107" +: ${GLIBC_SRCFILE="glibc-${GLIBC_PVER}.tar.bz2"} +#: ${GLIBC_LINUXTHREADS="glibc-linuxthreads-${GLIBC_PVER}.tar.bz2"} +: ${GLIBC_SRCDIR="${BUILDDIR}/glibc-${GLIBC_PVER}"} + +# gcc +#GCC_PVER="${PVER}" +: ${GCC_SRCFILE="gcc-${GCC_PVER}.tar.bz2"} +: ${GCC_SRCDIR="${BUILDDIR}/gcc-${GCC_PVER}"} # do not get the idea to strip the resulting binaries! # you must have build the strip program on the same arch, # but this is propably not the case. so we force stripping off. NOSTRIP=true +# fetch sources +SRC_URI=( + ${SRC_URI[*]} + http://www.kernel.org/pub/linux/devel/binutils/${BINUTILS_SRCFILE} + mirror://binutils/${BINUTILS_SRCFILE} + http://www.kernel.org/pub/linux/kernel/v${LINUX_HEADERS_PVER:0:3}/${LINUX_HEADERS_SRCFILE} + mirror://linux-libc-headers/${LINUX_HEADERS_SRCFILE} + gnu://glibc/${GLIBC_SRCFILE} + mirror://glibc/${GLIBC_SRCFILE} + gnu://gcc/gcc-${GCC_PVER}/${GCC_SRCFILE} + mirror://gcc/${GCC_SRCFILE} + mirror://glibc/glibc-2.3.5-localedef_segfault-1.patch + mirror://glibc/glibc-2.3.5-libgcc_eh-1.patch + mirror://gcc/gcc-${GCC_PVER}-no-fixincludes.patch + mirror://gcc/gcc-${GCC_PVER}-magellan-version.patch + mirror://gcc/gcc-${GCC_PVER}-cross-search-paths.patch + mirror://gcc/gcc-${GCC_PVER}-specs.patch +) + binutils_src_prepare() { munpack ${BINUTILS_SRCFILE} || die @@ -59,14 +72,15 @@ { cd ${BINUTILS_SRCDIR}/build + AR=ar AS=as \ ../configure \ - --host=${CHOST} \ + --host=${CROSS_CHOST} \ --target=${TARGET_CHOST} \ --prefix=${TARGET_DEST} \ --with-lib-path=${TARGET_DEST}/lib \ --disable-nls \ --enable-shared \ - --enable-64-bit-bfd \ + --disable-multilib \ || die make configure-host || die @@ -86,28 +100,19 @@ linux_headers_src_prepare() { munpack ${LINUX_HEADERS_SRCFILE} || die - cd ${LINUX_HEADERS_SRCDIR} +} - # set correct permissions - chown -R root:root * || die - chmod -R a+r-w+X,u+w * || die +linux_headers_src_compile() +{ + cd ${LINUX_HEADERS_SRCDIR} + make mrproper || die + make ARCH=${ARCH/i*86/x86} headers_check || die } linux_headers_src_install() { cd ${LINUX_HEADERS_SRCDIR} - - # using correct arch - local myarch=${TARGET_ARCH} - [[ ${myarch} = i?86 ]] && myarch=i386 - - # needed directories - install -d ${TARGET_DEST}/include/{asm,linux} || die - - cp -ax ${LINUX_HEADERS_SRCDIR}/include/linux/* \ - ${TARGET_DEST}/include/linux || die - cp -ax ${LINUX_HEADERS_SRCDIR}/include/asm-${myarch}/* \ - ${TARGET_DEST}/include/asm || die + make ARCH=${ARCH/i*86/x86} INSTALL_HDR_PATH=${BINDIR}/${TARGET_DEST} headers_install || die } # building the glibc-headers @@ -168,6 +173,9 @@ sed -i 's/^have-as-needed.*/have-as-needed = no/' \ ${GLIBC_SRCDIR}/config.make.in || die + # fix segfault of localdef on arches beside x86-32 + mpatch glibc-2.3.5-localedef_segfault-1.patch || die + # fix permissions on some of the scripts chmod u+x ${GLIBC_SRCDIR}/scripts/*.sh || die @@ -178,23 +186,34 @@ glibc_src_prepare() { glibc_generic_src_prepare + cd ${GLIBC_SRCDIR} + + # remove dependencies on libgcc_eh + mpatch glibc-2.3.5-libgcc_eh-1.patch || die } glibc_src_compile() { cd ${GLIBC_SRCDIR}/build + local my_glibc_CFLAGS + local my_glibc_CXXFLAGS + # glibc-2.6.1 and above needs march CFLAGS: -march=${ARCH} -mtune=generic + [[ ${TARGET_ARCH} = i*86 ]] && my_glibc_CFLAGS="${CFLAGS} -march=${TARGET_ARCH}" # only i*86 + my_glibc_CFLAGS="${my_glibc_CFLAGS} -mtune=generic" # all arches + # force nptl support (may not detected always) echo "libc_cv_forced_unwind=yes" > config.cache || die echo "libc_cv_c_cleanup=yes" >> config.cache || die BUILD_CC="gcc" \ - CC="${TARGET_CHOST}-gcc -m32" \ + CC="${TARGET_CHOST}-gcc" \ AR="${TARGET_CHOST}-ar" \ RANLIB="${TARGET_CHOST}-ranlib" \ + CFLAGS="${my_glibc_CFLAGS}" \ ../configure \ --host=${TARGET_CHOST} \ - --build=${CHOST} \ + --build=${CROSS_CHOST} \ --prefix=${TARGET_DEST} \ --disable-profile \ --enable-add-ons=nptl --with-tls \ @@ -202,7 +221,7 @@ --enable-kernel=2.6.0 \ --without-cvs \ --with-headers=${TARGET_DEST}/include \ - --with-binutils=${TARGET_DEST}/${TARGET_CHOST}/bin \ + --with-binutils=${TARGET_DEST}/bin \ --cache-file=config.cache \ || die @@ -226,7 +245,7 @@ cd ${GCC_SRCDIR}/build ../configure \ - --host=${CHOST} \ + --host=${CROSS_CHOST} \ --target=${TARGET_CHOST} \ --prefix=${TARGET_DEST} \ --with-local-prefix=${TARGET_DEST} \ @@ -297,6 +316,18 @@ munpack ${GCC_SRCFILE} || die cd ${GCC_SRCDIR} + mpatch gcc-${GCC_PVER}-no-fixincludes.patch || die + mpatch gcc-${GCC_PVER}-magellan-version.patch || die + + # fixes location of the dynamic linker and not append include + # search path to /usr/include + # but first set the location to ${TARGET_DEST} and than patch + sed "s:/tools/lib/:${TARGET_DEST}/lib/:g" \ + ${SOURCEDIR}/${PNAME}/gcc-${GCC_PVER}-specs.patch | patch -Np1 || die + + # do not search the /usr directory for libgcc_s.so when cross-compiling + mpatch gcc-${GCC_PVER}-cross-search-paths.patch || die + # suppress installation of libiberty, as we will be # using the one from binutils #sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in || die @@ -364,6 +395,7 @@ # now install the linux-headers # ################################# linux_headers_src_prepare + linux_headers_src_compile linux_headers_src_install @@ -424,6 +456,20 @@ # echo "ROOTPATH=${TARGET_DEST}/bin" >> ${BINDIR}/etc/env.d/99cross-${TARGET_ARCH} || die # echo "LDPATH=${TARGET_DEST}/lib" >> ${BINDIR}/etc/env.d/99cross-${TARGET_ARCH} || die +# # setup cross-tools script +# echo "#!/bin/sh" > ${TARGET_DEST}/bin/setup-cross-tools +# echo "export TARGET_CHOST=${TARGET_ARCH}-pc-linux-gnu" >> ${TARGET_DEST}/bin/setup-cross-tools +# echo "export CROSS_CHOST=${ARCH}-cross-linux-gnu" >> ${TARGET_DEST}/bin/setup-cross-tools +# echo "export CC=${TARGET_CHOST}-gcc" >> ${TARGET_DEST}/bin/setup-cross-tools +# echo "export CXX=${TARGET_CHOST}-g++" >> ${TARGET_DEST}/bin/setup-cross-tools +# echo "export AR=${TARGET_CHOST}-ar" >> ${TARGET_DEST}/bin/setup-cross-tools +# echo "export AS=${TARGET_CHOST}-as" >> ${TARGET_DEST}/bin/setup-cross-tools +# echo "export RANLIB=${TARGET_CHOST}-ranlib" >> ${TARGET_DEST}/bin/setup-cross-tools +# echo "export LD=${TARGET_CHOST}-ld" >> ${TARGET_DEST}/bin/setup-cross-tools +# echo "export STRIP=${TARGET_CHOST}-strip" >> ${TARGET_DEST}/bin/setup-cross-tools +# echo "export PATH=${TARGET_DEST}/bin:${PATH}" >> ${TARGET_DEST}/bin/setup-cross-tools +# chmod 0755 ${TARGET_DEST}/bin/setup-cross-tools || die + echo "Building of ${PNAME}-toolchain finished ..." }