cookutils diff cross @ rev 421
cook, cross, *.conf: improve cross compilation and small clean
author | Christophe Lincoln <pankso@slitaz.org> |
---|---|
date | Sat May 19 04:47:53 2012 +0200 (2012-05-19) |
parents | 9c322a61167d |
children | b2edbfaef132 |
line diff
1.1 --- a/cross Wed May 16 11:55:25 2012 +0200 1.2 +++ b/cross Sat May 19 04:47:53 2012 +0200 1.3 @@ -26,12 +26,12 @@ 1.4 howto Man alike and howto 1.5 info Display cross-tools info 1.6 testsuite Execute a small testsuite 1.7 - check-env Check build host tools 1.8 + check Check build host environment 1.9 download Download necessary sources 1.10 show-log Show a compile log 1.11 binutils Compile Binutils 1.12 + linux-headers Install Kernel headers 1.13 gcc-static Compile GCC static 1.14 - linux-headers Install Kernel headers 1.15 glibc Compile GNU Glibc 1.16 gcc-final Compile final GCC 1.17 busybox Cross compile Busybox 1.18 @@ -78,11 +78,12 @@ 1.19 # Get source if not yet in $SRC. 1.20 download_src() { 1.21 mkdir -p $SRC && cd $SRC 1.22 - [ -f "binutils-$BINUTILS_VERSION.tar.bz2" ] || wget $BINUTILS_WGET 1.23 - [ -f "linux-$LINUX_VERSION.tar.bz2" ] || wget $LINUX_WGET 1.24 - [ -f "glibc-$GLIBC_VERSION.tar.bz2" ] || wget $GLIBC_WGET 1.25 - [ -f "gcc-$GCC_VERSION.tar.bz2" ] || wget $GCC_WGET 1.26 - [ -f "busybox-$BUSYBOX_VERSION.tar.bz2" ] || wget $BUSYBOX_WGET 1.27 + [ -f "$BINUTILS_TARBALL" ] || wget $BINUTILS_WGET 1.28 + [ -f "$LINUX_TARBALL" ] || wget $LINUX_WGET 1.29 + [ -f "$GLIBC_TARBALL" ] || wget $GLIBC_WGET 1.30 + [ -f "$GCC_TARBALL" ] || wget $GCC_WGET 1.31 + [ -f "$BUSYBOX_TARBALL" ] || wget $BUSYBOX_WGET 1.32 + [ -f "$PKGCONFIG_TARBALL" ] || wget $PKGCONFIG_WGET 1.33 } 1.34 1.35 # Use sysroot or not ? 1.36 @@ -91,9 +92,41 @@ 1.37 PREFIX=/usr 1.38 HDR_PATH=$SYSROOT/usr 1.39 sysroot="--with-sysroot=$SYSROOT" 1.40 - echo "Configure : $sysroot" 1.41 + echo "Configure: $sysroot" 1.42 else 1.43 - HDR_PATH=$PREFIX 1.44 + HDR_PATH=$PREFIX/usr 1.45 + fi 1.46 +} 1.47 + 1.48 +# Work around to fix GCC include search path 1.49 +# 1.50 +# GCC include search path is: $PREFIX/$TARGET/include, so make sure it 1.51 +# is a symlink to default: $PREFIX/usr/include 1.52 +# 1.53 +# Glibc install headers in: $PREFIX/include, move them to usr/include 1.54 +# if needed. After when we cross compile packages with cook we have 1.55 +# to install build dependencies using --root=$CROSS_PREFIX and so 1.56 +# default include dir is: $PREFIX/usr/include ($PREFIX is the root 1.57 +# of our cross environment. 1.58 +# 1.59 +check_include() { 1.60 + cd $PREFIX 1.61 + echo "Checking: $PREFIX" 1.62 + if ! readlink include >/dev/null; then 1.63 + echo "Creating symlink: usr/include include" 1.64 + cp -a include usr && rm -rf include 1.65 + ln -s usr/include include 1.66 + fi 1.67 + cd $PREFIX/$TARGET 1.68 + echo "Checking: $PREFIX/$TARGET" 1.69 + if ! readlink include >/dev/null; then 1.70 + echo "Creating symlink: ../usr/include include" 1.71 + cp -a include ../usr && rm -rf include 1.72 + ln -s ../usr/include include 1.73 + fi 1.74 + if ! readlink lib >/dev/null; then 1.75 + echo "Creating symlink: ../lib lib" 1.76 + rm -rf lib && ln -s ../lib lib 1.77 fi 1.78 } 1.79 1.80 @@ -101,10 +134,10 @@ 1.81 binutils() { 1.82 init_compile 1.83 rm -rf binutils-$BINUTILS_VERSION 1.84 - echo "Extracting: binutils-$BINUTILS_VERSION.tar.bz2" 1.85 - tar xjf $SRC/binutils-$BINUTILS_VERSION.tar.bz2 1.86 + echo "Extracting: $BINUTILS_TARBALL" 1.87 + tar xjf $SRC/$BINUTILS_TARBALL 1.88 : ${BINUTILS_ARGS=--enable-shared} 1.89 - echo "Configure : $BINUTILS_ARGS" 1.90 + echo "Configure: $BINUTILS_ARGS" 1.91 check_sysroot 1.92 cd binutils-$BINUTILS_VERSION 1.93 ./configure \ 1.94 @@ -114,15 +147,28 @@ 1.95 $BINUTILS_ARGS $sysroot 1.96 make || exit 1 1.97 make install 1.98 - #echo "cross: binutils compiled on: $(date)" 1.99 + echo "cross: binutils compiled on: $(date)" 1.100 } 1.101 1.102 -# 2. GCC static (first pass) 1.103 +# 2. Kernel headers could use CROSS_COMPILE but gcc is not yet build. 1.104 +# NOTE: Compile GCC static first then linux-headers ? 1.105 +linux_headers() { 1.106 + init_compile 1.107 + echo "Extracting: $LINUX_TARBALL" 1.108 + tar xjf $SRC/$LINUX_TARBALL 1.109 + check_sysroot 1.110 + cd linux-$LINUX_VERSION 1.111 + make mrproper 1.112 + make ARCH=$ARCH headers_check 1.113 + make ARCH=$ARCH headers_install INSTALL_HDR_PATH=$HDR_PATH 1.114 +} 1.115 + 1.116 +# 3. GCC static (first pass) 1.117 gcc_static() { 1.118 init_compile 1.119 - echo "Extracting: gcc-$GCC_VERSION.tar.bz2" 1.120 - tar xjf $SRC/gcc-$GCC_VERSION.tar.bz2 1.121 - echo "Configure : $GCC_STATIC_ARGS" 1.122 + echo "Extracting: $GCC_TARBALL" 1.123 + tar xjf $SRC/$GCC_TARBALL 1.124 + echo "Configure: $GCC_STATIC_ARGS" 1.125 check_sysroot 1.126 # Arch fixes and work around 1.127 case "$ARCH" in 1.128 @@ -147,28 +193,17 @@ 1.129 make install-gcc install-target-libgcc 1.130 cd $PREFIX/lib/gcc/$TARGET/$GCC_VERSION 1.131 echo "Creating symlink for static libgcc: libgcc_eh.a" 1.132 - rm -f libgcc_eh.a && ln -s libgcc.a libgcc_eh.a 1.133 -} 1.134 - 1.135 -# 3. Kernel headers use static GCC 1.136 -linux_headers() { 1.137 - init_compile 1.138 - echo "Extracting: linux-$LINUX_VERSION.tar.bz2" 1.139 - tar xjf $SRC/linux-$LINUX_VERSION.tar.bz2 1.140 - check_sysroot 1.141 - cd linux-$LINUX_VERSION 1.142 - make mrproper 1.143 - make ARCH=$ARCH headers_check 1.144 - make ARCH=$ARCH headers_install \ 1.145 - INSTALL_HDR_PATH=$HDR_PATH 1.146 + rm -f libgcc_eh.a 1.147 + ln -s libgcc.a libgcc_eh.a 1.148 + echo "cross: gcc-static compiled on: $(date)" 1.149 } 1.150 1.151 # 4. GNU Glibc 1.152 glibc() { 1.153 init_compile 1.154 - echo "Extracting: glibc-$GLIBC_VERSION.tar.bz2" 1.155 - tar xjf $SRC/glibc-$GLIBC_VERSION.tar.bz2 1.156 - echo "Configure : $GLIBC_ARGS" 1.157 + echo "Extracting: $GLIBC_TARBALL" 1.158 + tar xjf $SRC/$GLIBC_TARBALL 1.159 + echo "Configure: $GLIBC_ARGS" 1.160 [ "$continue" ] || rm -rf glibc-build 1.161 # Some arch may need glibc-ports and custom CFLAGS 1.162 case "$ARCH" in 1.163 @@ -184,7 +219,7 @@ 1.164 x86_64) 1.165 ccflags="-m64" ;; 1.166 esac 1.167 - #echo "CFLAGS: $CFLAGS" 1.168 + echo "CFLAGS: $CFLAGS" 1.169 mkdir -p glibc-build && cd glibc-build 1.170 BUILD_CC="gcc" \ 1.171 CC="${TARGET}-gcc $ccflags" \ 1.172 @@ -194,7 +229,7 @@ 1.173 --prefix=$PREFIX \ 1.174 --libexec=$PREFIX/lib/glibc \ 1.175 --host=$TARGET \ 1.176 - --with-headers=$PREFIX/include \ 1.177 + --with-headers=$PREFIX/usr/include \ 1.178 --with-binutils=$PREFIX/bin \ 1.179 $GLIBC_ARGS 1.180 make || exit 1 1.181 @@ -204,25 +239,23 @@ 1.182 cd $SYSROOT 1.183 ln -s usr/include sys-include 1.184 else 1.185 - cd $PREFIX/$TARGET 1.186 - rm -rf lib include 1.187 - ln -s ../lib lib 1.188 - ln -s ../include include 1.189 + check_include 1.190 fi 1.191 - #unset CFLAGS 1.192 + unset CFLAGS 1.193 + echo "cross: glibc compiled on: $(date)" 1.194 } 1.195 1.196 # 5. GCC final 1.197 gcc_final() { 1.198 init_compile 1.199 if [ ! -d "gcc-$GCC_VERSION" ]; then 1.200 - echo "Extracting: gcc-$GCC_VERSION.tar.bz2" 1.201 - tar xjf $SRC/gcc-$GCC_VERSION.tar.bz2 1.202 + echo "Extracting: $GCC_TARBALL" 1.203 + tar xjf $SRC/$GCC_TARBALL 1.204 fi 1.205 - echo "Configure : $GCC_FINAL_ARGS" 1.206 + echo "Configure: $GCC_FINAL_ARGS" 1.207 check_sysroot 1.208 - rm -rf gcc-build 1.209 - mkdir gcc-build && cd gcc-build 1.210 + [ "$continue" ] || rm -rf gcc-build 1.211 + mkdir -p gcc-build && cd gcc-build 1.212 ../gcc-$GCC_VERSION/configure \ 1.213 --prefix=$PREFIX \ 1.214 --libexec=$PREFIX/lib \ 1.215 @@ -234,15 +267,16 @@ 1.216 --with-pkgversion="SliTaz" \ 1.217 $GCC_FINAL_ARGS $sysroot 1.218 make || exit 1 1.219 - make install 1.220 + make install && 1.221 + echo "cross: GCC final compiled on: $(date)" 1.222 } 1.223 1.224 # Build Busybox to we can create prebuilt tiny rootfs image and boot 1.225 # from NFS ? 1.226 cross_busybox() { 1.227 init_compile 1.228 - echo "Extracting: busybox-$BUSYBOX_VERSION.tar.bz2" 1.229 - tar xjf $SRC/busybox-$BUSYBOX_VERSION.tar.bz2 1.230 + echo "Extracting: $BUSYBOX_TARBALL" 1.231 + tar xjf $SRC/$BUSYBOX_TARBALL 1.232 cd busybox-$BUSYBOX_VERSION 1.233 # CROSS_COMPILE is exported via init_compile. 1.234 make defconfig 1.235 @@ -250,7 +284,8 @@ 1.236 make install 1.237 chmod 4755 _install/bin/busybox 1.238 readelf -h _install/bin/busybox 1.239 - echo "Busybox install path: $(pwd)/_install" 1.240 + echo "cross: busybox install path: $(pwd)/_install" 1.241 + echo "cross: busybox compiled on: $(date)" 1.242 } 1.243 1.244 # 1.245 @@ -297,14 +332,26 @@ 1.246 fi 1.247 echo -e "\n[CHECKING] readelf -h test.out" | tee -a $logdir/testsuite.log 1.248 readelf -h test.out | tee -a $logdir/testsuite.log ;; 1.249 - check-env) 1.250 - for pkg in mpfr mpfr-dev gmp gmp-dev mpc-library gawk autoconf 1.251 - do 1.252 + check) 1.253 + echo "Checking: build system packages" 1.254 + for pkg in slitaz-toolchain mpfr mpfr-dev gmp gmp-dev mpc-library \ 1.255 + gawk autoconf; do 1.256 if [ ! -d "/var/lib/tazpkg/installed/$pkg" ]; then 1.257 echo "Missing packages: $pkg" 1.258 - [ "$install" ] && tazpkg -gi $pkg 1.259 + if [ -x /usr/sbin/spk-add ]; then 1.260 + spk-add $pkg 1.261 + else 1.262 + tazpkg -gi $pkg 1.263 + fi 1.264 fi 1.265 - done ;; 1.266 + done 1.267 + # See: check_include() 1.268 + if [ "$SYSROOT" ]; then 1.269 + echo "Using: --with-sysroot=$SYSROOT" 1.270 + echo "WARNING: not well tested and buggy" 1.271 + exit 0 1.272 + fi 1.273 + check_include ;; 1.274 download) 1.275 download_src ;; 1.276 show-log)