cookutils rev 403
Use sysroot in option, fix for x86_64 (gcc static is fine now)
author | Christophe Lincoln <pankso@slitaz.org> |
---|---|
date | Sun May 13 17:07:21 2012 +0200 (2012-05-13) |
parents | f74eb62977b5 |
children | ad6f30bc0095 |
files | cross cross.conf |
line diff
1.1 --- a/cross Sun May 13 15:56:33 2012 +0200 1.2 +++ b/cross Sun May 13 17:07:21 2012 +0200 1.3 @@ -42,10 +42,11 @@ 1.4 # Make sure we have all directories. 1.5 init_compile() { 1.6 export LC_ALL=POSIX LANG=POSIX 1.7 - export PATH=$PATH:$PREFIX/bin 1.8 + [ "$SYSROOT" ] || export PATH=$PATH:$PREFIX/bin 1.9 export CROSS_COMPILE=${TARGET}- 1.10 source=$WORK/source 1.11 logdir=$WORK/log 1.12 + #install=$WORK/install 1.13 mkdir -p $source $logdir $install 1.14 cd $source 1.15 } 1.16 @@ -60,36 +61,47 @@ 1.17 [ -f "busybox-$BUSYBOX_VERSION.tar.bz2" ] || wget $BUSYBOX_WGET 1.18 } 1.19 1.20 +# Use sysroot or not ? 1.21 +check_sysroot() { 1.22 + if [ "$SYSROOT" ]; then 1.23 + PREFIX=/usr 1.24 + HDR_PATH=$SYSROOT/usr 1.25 + sysroot="--with-sysroot=$SYSROOT" 1.26 + echo "Cross configure: $sysroot" 1.27 + else 1.28 + HDR_PATH=$PREFIX 1.29 + fi 1.30 +} 1.31 + 1.32 # 1. Binutils 1.33 binutils() { 1.34 echo "Extracting: binutils-$BINUTILS_VERSION.tar.bz2" 1.35 tar xjf $SRC/binutils-$BINUTILS_VERSION.tar.bz2 1.36 : ${BINUTILS_ARGS=--enable-shared} 1.37 + check_sysroot 1.38 cd binutils-$BINUTILS_VERSION 1.39 ./configure \ 1.40 --prefix=$PREFIX \ 1.41 --target=$TARGET \ 1.42 --enable-targets=$BUILD_SYSTEM \ 1.43 - $BINUTILS_ARGS 1.44 + $BINUTILS_ARGS $sysroot 1.45 make || exit 1 1.46 make install 1.47 } 1.48 1.49 -# 2. Kernel headers 1.50 -linux_headers() { 1.51 - echo "Extracting: linux-$LINUX_VERSION.tar.bz2" 1.52 - tar xjf $SRC/linux-$LINUX_VERSION.tar.bz2 1.53 - cd linux-$LINUX_VERSION 1.54 - make mrproper 1.55 - make ARCH=$ARCH headers_check 1.56 - make ARCH=$ARCH headers_install \ 1.57 - INSTALL_HDR_PATH=$PREFIX 1.58 -} 1.59 - 1.60 -# 3. GCC static (first pass) 1.61 +# 2. GCC static (first pass) 1.62 gcc_static() { 1.63 echo "Extracting: gcc-$GCC_VERSION.tar.bz2" 1.64 tar xjf $SRC/gcc-$GCC_VERSION.tar.bz2 1.65 + check_sysroot 1.66 + # Arch fixes and work around 1.67 + case "$ARCH" in 1.68 + x86_64) 1.69 + # GCC wants Glib headers in cross environment (not tested 1.70 + # with sysroot) Should we install glibc-headers before ? 1.71 + [ "$SYSROOT" ] || \ 1.72 + ls -s /usr/include $PREFIX/$TARGET/include ;; 1.73 + esac 1.74 rm -rf gcc-static 1.75 mkdir gcc-static && cd gcc-static 1.76 ../gcc-$GCC_VERSION/configure \ 1.77 @@ -100,7 +112,7 @@ 1.78 --disable-threads \ 1.79 --without-headers \ 1.80 --with-newlib \ 1.81 - $GCC_STATIC_ARGS 1.82 + $GCC_STATIC_ARGS $sysroot 1.83 make all-gcc all-target-libgcc || exit 1 1.84 make install-gcc install-target-libgcc 1.85 cd $PREFIX/lib/gcc/$TARGET/$GCC_VERSION 1.86 @@ -108,13 +120,25 @@ 1.87 rm -f libgcc_eh.a && ln -s libgcc.a libgcc_eh.a 1.88 } 1.89 1.90 +# 3. Kernel headers use static GCC 1.91 +linux_headers() { 1.92 + echo "Extracting: linux-$LINUX_VERSION.tar.bz2" 1.93 + tar xjf $SRC/linux-$LINUX_VERSION.tar.bz2 1.94 + check_sysroot 1.95 + cd linux-$LINUX_VERSION 1.96 + make mrproper 1.97 + make ARCH=$ARCH headers_check 1.98 + make ARCH=$ARCH headers_install \ 1.99 + INSTALL_HDR_PATH=$HDR_PATH 1.100 +} 1.101 + 1.102 # 4. GNU Glibc 1.103 glibc() { 1.104 echo "Extracting: glibc-$GLIBC_VERSION.tar.bz2" 1.105 tar xjf $SRC/glibc-$GLIBC_VERSION.tar.bz2 1.106 [ "$continue" ] || rm -rf glibc-build 1.107 # Some arch may need glibc-ports and custom CFLAGS 1.108 - case $ARCH in 1.109 + case "$ARCH" in 1.110 arm) 1.111 #export CFLAGS="-march=armv6 -mtune=generic -g -O2" 1.112 [ -f "$SRC/glibc-ports-$GLIBC_VERSION.tar.bz2" ] || wget \ 1.113 @@ -139,11 +163,14 @@ 1.114 --enable-add-ons $GLIBC_ARGS 1.115 make || exit 1 1.116 make install 1.117 - cd $PREFIX/$TARGET 1.118 - rm -rf lib include 1.119 - ln -s ../lib lib 1.120 - ln -s ../include include 1.121 - unset CFLAGS 1.122 + # Work around to let GCC find Glibc headers. 1.123 + if [ ! "$SYSROOT" ]; then 1.124 + cd $PREFIX/$TARGET 1.125 + rm -rf lib include 1.126 + ln -s ../lib lib 1.127 + ln -s ../include include 1.128 + fi 1.129 + #unset CFLAGS 1.130 } 1.131 1.132 # 5. GCC final 1.133 @@ -152,6 +179,7 @@ 1.134 echo "Extracting: gcc-$GCC_VERSION.tar.bz2" 1.135 tar xjf $SRC/gcc-$GCC_VERSION.tar.bz2 1.136 fi 1.137 + check_sysroot 1.138 rm -rf gcc-build 1.139 mkdir gcc-build && cd gcc-build 1.140 ../gcc-$GCC_VERSION/configure \ 1.141 @@ -163,7 +191,7 @@ 1.142 --enable-long-long \ 1.143 --enable-__cxa_atexit \ 1.144 --with-pkgversion="SliTaz" \ 1.145 - $GCC_FINAL_ARGS 1.146 + $GCC_FINAL_ARGS $sysroot 1.147 make || exit 1 1.148 make install 1.149 } 1.150 @@ -180,6 +208,7 @@ 1.151 make install 1.152 chmod 4755 _install/bin/busybox 1.153 readelf -h _install/bin/busybox 1.154 + echo "Busybox install path: $(pwd)/_install" 1.155 } 1.156 1.157 # 1.158 @@ -198,9 +227,13 @@ 1.159 cat << EOT 1.160 Target arch : $ARCH 1.161 C Compiler : $CC 1.162 -Additional path : $PREFIX/bin 1.163 Build directory : $WORK 1.164 EOT 1.165 + if [ "$SYSROOT" ]; then 1.166 + echo "Arch sysroot : $SYSROOT" 1.167 + else 1.168 + echo "Additional path : $PREFIX/bin" 1.169 + fi 1.170 separator && echo "" 1.171 echo "GCC version" && separator 1.172 if [ -x "$PREFIX/$CC" ]; then 1.173 @@ -247,12 +280,12 @@ 1.174 init_compile 1.175 rm -f $logdir/binutils.log 1.176 binutils 2>&1 | tee $logdir/binutils.log ;; 1.177 + gcc-static) 1.178 + init_compile 1.179 + gcc_static 2>&1 | tee $logdir/gcc-static.log ;; 1.180 linux-headers) 1.181 init_compile 1.182 linux_headers 2>&1 | tee $logdir/linux-headers.log ;; 1.183 - gcc-static) 1.184 - init_compile 1.185 - gcc_static 2>&1 | tee $logdir/gcc-static.log ;; 1.186 glibc) 1.187 init_compile 1.188 glibc 2>&1 | tee $logdir/glibc.log ;; 1.189 @@ -269,8 +302,8 @@ 1.190 echo "Compile start: $(date)" | tee $logdir/compile.log 1.191 download_src 1.192 binutils 2>&1 | tee $logdir/binutils.log 1.193 + gcc_static 2>&1 | tee $logdir/gcc-static.log 1.194 linux_headers 2>&1 | tee $logdir/linux-headers.log 1.195 - gcc_static 2>&1 | tee $logdir/gcc-static.log 1.196 glibc 2>&1 | tee $logdir/glibc.log 1.197 gcc_final 2>&1 | tee $logdir/gcc-final.log 1.198 echo ""
2.1 --- a/cross.conf Sun May 13 15:56:33 2012 +0200 2.2 +++ b/cross.conf Sun May 13 17:07:21 2012 +0200 2.3 @@ -9,6 +9,11 @@ 2.4 SRC=/home/slitaz/src 2.5 PREFIX=/usr/cross/$ARCH 2.6 2.7 +# Sysroot settings. If sysroot is used PREFIX will be set to /usr. 2.8 +# Set sysroot to point to the directory of the cross toolchain 2.9 +# Example: SYSROOT="/usr/$TARGET" 2.10 +SYSROOT="" 2.11 + 2.12 # Cross-tools versions 2.13 BINUTILS_VERSION="2.22" 2.14 LINUX_VERSION="2.6.35.13"