cookutils annotate cross @ rev 697

cookutils: catch control-c in aufs jail (again)
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sat Oct 25 11:27:23 2014 +0200 (2014-10-25)
parents 0bfd04c900d5
children da66e6be1add
rev   line source
pankso@361 1 #!/bin/sh
pankso@361 2 #
pankso@361 3 # Cross - Help build a cross toolchain on SliTaz.
pankso@361 4 #
pankso@651 5 # Copyright 2012-2014 (C) SliTaz GNU/Linux - BSD License
pankso@361 6 # Author: Christophe Lincoln <pankso@slitaz.org>
pankso@361 7 #
pankso@361 8 . /lib/libtaz.sh
pankso@370 9
pankso@370 10 [ -f "/etc/slitaz/cross.conf" ] && . /etc/slitaz/cross.conf
pankso@370 11 [ -f "cross.conf" ] && . ./cross.conf
pankso@361 12
pankso@374 13 # Handle --config=/path/to/cross.conf
pankso@374 14 [ "$config" ] && . $config
pankso@412 15 source=$WORK/source
pankso@441 16 tools=$WORK/tools
pankso@441 17 sysroot=$WORK/sysroot
pankso@412 18 logdir=$WORK/log
pankso@374 19
pankso@649 20 # Cross-tools tarballs
pankso@649 21 binutils_tarball="binutils-$BINUTILS_VERSION.tar.bz2"
pankso@649 22 linux_tarball="linux-$LINUX_VERSION.tar.xz"
pankso@649 23 glibc_tarball="glibc-$GLIBC_VERSION.tar.bz2"
pankso@649 24 eglibc_tarball="eglibc-$EGLIBC_VERSION.tar.bz2"
pankso@649 25 gcc_tarball="gcc-$GCC_VERSION.tar.bz2"
pankso@654 26 libtool_tarball="libtool-$LIBTOOL_VERSION.tar.gz"
pankso@649 27
pankso@649 28 # Cross-tools URLs
pankso@649 29 binutils_wget="http://ftp.gnu.org/gnu/binutils/$binutils_tarball"
pankso@649 30 linux_wget="http://www.kernel.org/pub/linux/kernel/v3.x/$linux_tarball"
pankso@649 31 glibc_wget="http://ftp.gnu.org/gnu/libc/$glibc_tarball"
pankso@681 32 eglibc_wget="http://mirror.slitaz.org/arm/src/$eglibc_tarball"
pankso@681 33 eglibc_svn="svn://svn.eglibc.org/branches/eglibc-2_14"
pankso@649 34 gcc_wget="http://ftp.gnu.org/gnu/gcc/gcc-$GCC_VERSION/$gcc_tarball"
pankso@654 35 libtool_wget="ftp://sunsite.cnlab-switch.ch/mirror/gnu/libtool/$libtool_tarball"
pankso@649 36
pankso@361 37 # Help and usage.
pankso@361 38 usage() {
pankso@361 39 cat << EOT
pankso@361 40
pankso@361 41 Usage: $(basename $0) command --option
pankso@361 42
pankso@361 43 Commands:
paul@495 44 howto Man[like] page and howto
paul@382 45 info Display cross-tools info
pankso@361 46 testsuite Execute a small testsuite
pankso@654 47 [arch]-setup Setup build host environment
pankso@361 48 download Download necessary sources
pankso@654 49 show-log Show a package compile log
pankso@361 50 binutils Compile Binutils
pankso@421 51 linux-headers Install Kernel headers
pankso@361 52 gcc-static Compile GCC static
pankso@654 53 glibc Compile GNU Glibc library
pankso@654 54 eglibc Compile EGlibc libc library
pankso@361 55 gcc-final Compile final GCC
pankso@361 56 compile Compile everything at once
pankso@654 57 libtool Cross GNU Libtool (test in receipt LIBTOOL=)
pankso@419 58 clean Clean-up build environment
pankso@441 59 clean-tools Clean: $tools
paul@455 60 gen-prebuilt Create a prebuilt toolchain archive
pankso@361 61
pankso@361 62 EOT
pankso@361 63 }
pankso@361 64
pankso@420 65 # Prebuilt README
pankso@420 66 prebuilt_readme() {
pankso@420 67 echo -n "Creating toolchain README..."
pankso@420 68 cat >> $package/README << EOT
pankso@420 69
pankso@420 70 SliTaz Prebuilt $ARCH cross toolchain
pankso@420 71 ================================================================================
pankso@420 72 Move this $ARCH cross compilation toolchain to /usr/cross then add tools
pankso@420 73 to your PATH environment and test the toolchain:
pankso@420 74
pankso@441 75 # mv $ARCH /cross
pankso@441 76 # export PATH=\$PATH:/cross/$ARCH/tools/bin
pankso@420 77
pankso@420 78 # echo 'int main() { return 0; }' > test.c
pankso@420 79 # $TARGET-gcc -v -o test.out test.c
pankso@420 80 # readelf -h test.out
pankso@420 81
pankso@420 82 ================================================================================
pankso@420 83
pankso@420 84 EOT
pankso@420 85 status
pankso@420 86 }
pankso@420 87
pankso@361 88 # Make sure we have all directories.
pankso@361 89 init_compile() {
pankso@441 90 unset CFLAGS CXXFLAGS
pankso@361 91 export LC_ALL=POSIX LANG=POSIX
pankso@441 92 export PATH=$PATH:$tools/bin
pankso@400 93 export CROSS_COMPILE=${TARGET}-
pankso@441 94 mkdir -p $source $logdir $sysroot $tools
pankso@441 95 echo "Tools prefix : --prefix=$tools "
pankso@441 96 echo "Target sysroot : --with-sysroot=$sysroot"
pankso@361 97 cd $source
pankso@361 98 }
pankso@361 99
pankso@651 100 # Some arch may need custom CFLAGS to build Glibc/Eglibc
pankso@651 101 init_cflags() {
pankso@651 102 case "$ARCH" in
pankso@653 103 arm|armv6) export CFLAGS="-O2 -march=armv6" ;;
pankso@661 104 armv6hf) export CFLAGS="-O2 -march=armv6j" ;;
pankso@661 105 armv7) export CFLAGS="-Os -march=armv7-a" ;;
pankso@651 106 esac
pankso@651 107 }
pankso@651 108
pankso@361 109 # Get source if not yet in $SRC.
pankso@361 110 download_src() {
pankso@361 111 mkdir -p $SRC && cd $SRC
pankso@649 112 [ -f "$binutils_tarball" ] || wget $binutils_wget
pankso@681 113 [ -f "$linux_tarball" ] || wget --no-check-certificate $linux_wget
pankso@649 114 [ -f "$glibc_tarball" ] || wget $glibc_wget
pankso@681 115 [ -f "$eglibc_tarball" ] || wget $eglibc_wget
pankso@649 116 [ -f "$gcc_tarball" ] || wget $gcc_wget
pankso@654 117 [ -f "$libtool_tarball" ] || wget $libtool_wget
pankso@403 118 }
pankso@403 119
pankso@361 120 # 1. Binutils
pankso@361 121 binutils() {
pankso@408 122 init_compile
pankso@411 123 rm -rf binutils-$BINUTILS_VERSION
pankso@649 124 echo "Extracting: $binutils_tarball"
pankso@649 125 tar xjf $SRC/$binutils_tarball
pankso@421 126 echo "Configure: $BINUTILS_ARGS"
pankso@361 127 cd binutils-$BINUTILS_VERSION
pankso@361 128 ./configure \
pankso@441 129 --prefix=$tools \
pankso@361 130 --target=$TARGET \
pankso@440 131 --enable-plugins \
pankso@440 132 --enable-threads \
pankso@361 133 --enable-targets=$BUILD_SYSTEM \
pankso@441 134 --with-sysroot=$sysroot \
pankso@442 135 $BINUTILS_ARGS &&
pankso@361 136 make || exit 1
pankso@361 137 make install
pankso@421 138 echo "cross: binutils compiled on: $(date)"
pankso@361 139 }
pankso@361 140
paul@455 141 # 2. Kernel headers could use CROSS_COMPILE but gcc is not yet built.
pankso@421 142 linux_headers() {
pankso@421 143 init_compile
pankso@451 144 if [ ! -d "linux-$LINUX_VERSION" ]; then
pankso@649 145 echo "Extracting: $linux_tarball"
pankso@649 146 tar xJf $SRC/$linux_tarball
pankso@451 147 fi
pankso@649 148 case "$ARCH" in
pankso@649 149 armv6hf) KARCH="arm" ;;
pankso@649 150 *) KARCH="$ARCH" ;;
pankso@649 151 esac
pankso@451 152 rm -rf linux-headers
pankso@421 153 cd linux-$LINUX_VERSION
pankso@649 154 make CROSS_COMPILE="" mrproper
pankso@649 155 make ARCH=$KARCH headers_check
pankso@649 156 make ARCH=$KARCH headers_install \
pankso@450 157 INSTALL_HDR_PATH=$source/linux-headers
pankso@453 158 rm $source/linux-headers/include/.*install*
pankso@450 159 echo "Copying headers to: $sysroot/usr"
pankso@681 160 mkdir -p $sysroot/usr
pankso@450 161 cp -a $source/linux-headers/* $sysroot/usr
pankso@421 162 }
pankso@421 163
pankso@447 164 # 2.1 Glibc headers needed to compile x86_64 gcc-static.
pankso@447 165 glibc_headers() {
pankso@447 166 init_compile
pankso@649 167 echo "Extracting: $glibc_tarball"
pankso@649 168 tar xjf $SRC/$glibc_tarball
pankso@447 169 rm -rf glibc-headers
pankso@447 170 mkdir glibc-headers && cd glibc-headers
pankso@450 171 libc_cv_forced_unwind=yes \
pankso@450 172 libc_cv_c_cleanup=yes \
pankso@447 173 ../glibc-$GLIBC_VERSION/configure \
pankso@447 174 --prefix=/usr \
pankso@447 175 --host=$TARGET \
pankso@447 176 --with-headers=$sysroot/usr/include \
pankso@447 177 --without-cvs \
pankso@447 178 --disable-sanity-checks \
pankso@447 179 --enable-kernel=2.6.32 &&
pankso@447 180 make -k install-headers install_root=$sysroot
pankso@448 181 # Fixes
pankso@448 182 mkdir -p $sysroot/usr/include/gnu
pankso@448 183 touch $sysroot/usr/include/gnu/stubs.h
erjo@680 184
erjo@680 185 # Fixe error: bits/stdio_lim.h not found
erjo@680 186 #cp bits/stdio_lim.h $sysroot/usr/include/bits
erjo@680 187 cp /usr/include/bits/stdio_lim.h $sysroot/usr/include/bits
pankso@447 188 }
pankso@447 189
pankso@421 190 # 3. GCC static (first pass)
pankso@361 191 gcc_static() {
pankso@408 192 init_compile
pankso@649 193 echo "Extracting: $gcc_tarball"
pankso@649 194 tar xjf $SRC/$gcc_tarball
pankso@421 195 echo "Configure: $GCC_STATIC_ARGS"
pankso@361 196 rm -rf gcc-static
pankso@361 197 mkdir gcc-static && cd gcc-static
pankso@361 198 ../gcc-$GCC_VERSION/configure \
pankso@441 199 --prefix=$tools \
pankso@441 200 --libexec=$tools/lib \
pankso@361 201 --target=$TARGET \
pankso@361 202 --disable-shared \
pankso@361 203 --disable-threads \
pankso@441 204 --disable-libgomp \
pankso@441 205 --disable-libmudflap \
pankso@441 206 --disable-libssp \
pankso@361 207 --without-headers \
pankso@361 208 --with-newlib \
pankso@441 209 --with-sysroot=$sysroot \
pankso@442 210 $GCC_STATIC_ARGS &&
pankso@361 211 make all-gcc all-target-libgcc || exit 1
pankso@361 212 make install-gcc install-target-libgcc
pankso@421 213 echo "cross: gcc-static compiled on: $(date)"
pankso@403 214 }
pankso@403 215
pankso@651 216 # 4. GNU Glibc: TODO Improve ARM support
pankso@361 217 glibc() {
pankso@408 218 init_compile
pankso@649 219 echo "Extracting: $glibc_tarball"
pankso@649 220 tar xjf $SRC/$glibc_tarball
pankso@421 221 echo "Configure: $GLIBC_ARGS"
pankso@400 222 # Some arch may need glibc-ports and custom CFLAGS
pankso@403 223 case "$ARCH" in
pankso@650 224 arm*)
pankso@433 225 export CFLAGS="-march=armv6 -O2"
pankso@362 226 [ -f "$SRC/glibc-ports-$GLIBC_VERSION.tar.bz2" ] || wget \
pankso@362 227 http://ftp.gnu.org/gnu/libc/glibc-ports-$GLIBC_VERSION.tar.bz2 \
pankso@362 228 -O $SRC/glibc-ports-$GLIBC_VERSION.tar.bz2 || exit 1
pankso@361 229 echo "Extracting: glibc-ports-$GLIBC_VERSION.tar.bz2"
pankso@361 230 rm -rf glibc-$GLIBC_VERSION/ports
pankso@361 231 tar xjf $SRC/glibc-ports-$GLIBC_VERSION.tar.bz2
pankso@449 232 mv glibc-ports-$GLIBC_VERSION glibc-$GLIBC_VERSION/ports
pankso@449 233 libexec=/usr/lib/glibc ;;
pankso@418 234 x86_64)
pankso@653 235 #export CFLAGS="-02 -march=generic -pipe"
pankso@449 236 ccflags="-m64"
pankso@449 237 libexec=/usr/lib64/glibc ;;
pankso@361 238 esac
pankso@441 239 # Disable linking to libgcc_eh
pankso@441 240 cd glibc-$GLIBC_VERSION
pankso@441 241 cp Makeconfig Makeconfig.orig
pankso@441 242 sed -e 's/-lgcc_eh//g' Makeconfig.orig > Makeconfig
pankso@441 243 cd ..
pankso@421 244 echo "CFLAGS: $CFLAGS"
pankso@441 245 rm -rf glibc-build
pankso@361 246 mkdir -p glibc-build && cd glibc-build
pankso@365 247 BUILD_CC="gcc" \
pankso@418 248 CC="${TARGET}-gcc $ccflags" \
pankso@441 249 AR="${TARGET}-ar" \
pankso@441 250 RANLIB="${TARGET}-ranlib" \
pankso@361 251 libc_cv_forced_unwind=yes \
pankso@361 252 libc_cv_c_cleanup=yes \
pankso@361 253 ../glibc-$GLIBC_VERSION/configure \
pankso@441 254 --prefix=/usr \
pankso@449 255 --libexec=$libexec \
pankso@361 256 --host=$TARGET \
pankso@441 257 --with-headers=$sysroot/usr/include \
pankso@441 258 --with-binutils=$tools/bin \
pankso@425 259 --enable-kernel=2.6.32 \
pankso@442 260 $GLIBC_ARGS &&
pankso@361 261 make || exit 1
pankso@441 262 make install_root=$sysroot install
pankso@454 263 # Symlink lib64 to lib
pankso@454 264 case "$ARCH" in
pankso@454 265 x86_64)
pankso@454 266 rm -f $sysroot/lib $sysroot/usr/lib
pankso@454 267 cd $sysroot && ln -s lib64 lib
pankso@454 268 cd usr && ln -s lib64 lib ;;
pankso@454 269 esac
pankso@421 270 echo "cross: glibc compiled on: $(date)"
pankso@361 271 }
pankso@361 272
pankso@649 273 # 4. eglibc: always use --prefix=/usr
pankso@441 274 eglibc() {
pankso@441 275 init_compile
pankso@651 276 init_cflags
pankso@441 277 rm -rf eglibc-build eglibc-$EGLIBC_VERSION
pankso@681 278 if [ ! -f "$SRC/$eglibc_tarball" ]; then
pankso@681 279 echo "Missing: $SRC/$eglibc_tarball"
pankso@681 280 exit 1
pankso@681 281 fi
pankso@649 282 echo "Extracting: $eglibc_tarball"
pankso@649 283 tar xjf $SRC/$eglibc_tarball || exit 1
pankso@650 284 case "$ARCH" in
pankso@650 285 arm*)
pankso@441 286 if [ ! -d "$source/eglibc-ports-$EGLIBC_VERSION" ]; then
pankso@681 287 echo "Cloning $eglibc_svn/ports"
pankso@681 288 svn co $eglibc_svn/ports eglibc-ports-$EGLIBC_VERSION >/dev/null
pankso@441 289 fi
pankso@449 290 cp -a eglibc-ports-$EGLIBC_VERSION eglibc-$EGLIBC_VERSION/ports
pankso@449 291 libexec=/usr/lib/eglibc ;;
pankso@441 292 x86_64)
pankso@449 293 #export CFLAGS="-march=nocona -O2 -pipe"
pankso@449 294 ccflags="-m64"
pankso@449 295 libexec=/usr/lib64/eglibc ;;
pankso@441 296 esac
pankso@441 297 # Disable linking to libgcc_eh
pankso@441 298 cd eglibc-$EGLIBC_VERSION
pankso@441 299 cp Makeconfig Makeconfig.orig
pankso@441 300 sed -e 's/-lgcc_eh//g' Makeconfig.orig > Makeconfig
pankso@441 301 cd ..
pankso@651 302 echo "CFLAGS: $CFLAGS"
pankso@441 303 mkdir -p eglibc-build && cd eglibc-build
pankso@441 304 # config.cache
pankso@441 305 cat > config.cache << EOT
pankso@441 306 libc_cv_forced_unwind=yes
pankso@441 307 libc_cv_c_cleanup=yes
pankso@441 308 libc_cv_gnu89_inline=yes
pankso@441 309 EOT
pankso@441 310 BUILD_CC="gcc" \
pankso@441 311 CC="${TARGET}-gcc $ccflags" \
pankso@441 312 AR="${TARGET}-ar" \
pankso@441 313 RANLIB="${TARGET}-ranlib" \
pankso@441 314 ../eglibc-$EGLIBC_VERSION/configure \
pankso@441 315 --prefix=/usr \
pankso@449 316 --libexec=$libexec \
pankso@441 317 --host=$TARGET \
pankso@441 318 --with-headers=$sysroot/usr/include \
pankso@441 319 --with-binutils=$tools/bin \
pankso@441 320 --enable-kernel=2.6.32 \
pankso@441 321 --with-__thread \
pankso@441 322 --without-gd \
pankso@441 323 --without-cvs \
pankso@441 324 --cache-file=config.cache \
pankso@442 325 $EGLIBC_ARGS &&
pankso@441 326 make || exit 1
pankso@681 327 make install_root=$sysroot install || exit 1
pankso@681 328 # Sep files for packaging
pankso@681 329 make install_root=$source/eglibc-install install || exit 1
pankso@641 330 echo "cross: eglibc compiled on: $(date)"
pankso@441 331 }
pankso@441 332
pankso@361 333 # 5. GCC final
pankso@361 334 gcc_final() {
pankso@408 335 init_compile
pankso@361 336 if [ ! -d "gcc-$GCC_VERSION" ]; then
pankso@649 337 echo "Extracting: $gcc_tarball"
pankso@649 338 tar xjf $SRC/$gcc_tarball
pankso@361 339 fi
pankso@421 340 echo "Configure: $GCC_FINAL_ARGS"
pankso@441 341 rm -rf gcc-build
pankso@421 342 mkdir -p gcc-build && cd gcc-build
pankso@441 343 AR=ar \
pankso@361 344 ../gcc-$GCC_VERSION/configure \
pankso@441 345 --prefix=$tools \
pankso@441 346 --libexec=$tools/lib \
pankso@361 347 --target=$TARGET \
pankso@361 348 --enable-shared \
pankso@361 349 --enable-c99 \
pankso@361 350 --enable-long-long \
pankso@361 351 --enable-__cxa_atexit \
pankso@440 352 --with-system-zlib \
pankso@440 353 --enable-plugin \
pankso@440 354 --disable-multilib \
pankso@440 355 --disable-libssp \
pankso@441 356 --disable-checking \
pankso@441 357 --disable-werror \
pankso@400 358 --with-pkgversion="SliTaz" \
pankso@648 359 --with-bugurl="http://bugs.slitaz.org/" \
pankso@442 360 --with-sysroot=$sysroot \
pankso@442 361 $GCC_FINAL_ARGS &&
pankso@441 362 make AS_FOR_TARGET="${TARGET}-as" \
pankso@441 363 LD_FOR_TARGET="${TARGET}-ld" || exit 1
pankso@441 364 make install
pankso@421 365 echo "cross: GCC final compiled on: $(date)"
pankso@361 366 }
pankso@361 367
pankso@654 368 # A cross libtool should avoid some shared libs path/format bugs
pankso@654 369 cross_libtool() {
pankso@654 370 init_compile
pankso@654 371 [ "$clean" ] && rm -rf libtool-${LIBTOOL_VERSION}
pankso@654 372 if [ ! -d "libtool-$LIBTOOL_VERSION" ]; then
pankso@654 373 echo "Extracting: $libtool_tarball"
pankso@654 374 tar xzf $SRC/$libtool_tarball
pankso@654 375 fi
pankso@654 376 cd libtool-${LIBTOOL_VERSION}
pankso@654 377 ./configure \
pankso@654 378 --prefix=$tools \
pankso@654 379 --host=${TARGET} \
pankso@654 380 --program-prefix=${TARGET}- &&
pankso@654 381 make || exit 1
pankso@654 382 make install
pankso@654 383 echo "cross: Cross libtool compiled on: $(date)"
pankso@654 384 }
pankso@654 385
pankso@361 386 #
pankso@361 387 # Commands
pankso@361 388 #
pankso@361 389
pankso@361 390 case "$1" in
pankso@361 391 howto|man)
pankso@361 392 doc=/usr/share/doc/cookutils/cross.txt
pankso@361 393 [ -f "$doc" ] && less -E $doc ;;
pankso@361 394 info)
pankso@361 395 init_compile
pankso@651 396 init_cflags
pankso@361 397 CC=${TARGET}-gcc
paul@382 398 echo -e "\nCross Toolchain information" && separator
pankso@374 399 [ "$config" ] && echo "Config file : $config"
pankso@361 400 cat << EOT
pankso@374 401 Target arch : $ARCH
pankso@374 402 C Compiler : $CC
pankso@651 403 CFLAGS : $CFLAGS
pankso@374 404 Build directory : $WORK
pankso@441 405 Tools prefix : $tools/bin
pankso@441 406 Arch sysroot : $sysroot
pankso@361 407 EOT
pankso@361 408 separator && echo ""
pankso@361 409 echo "GCC version" && separator
pankso@441 410 if [ -x "$tools/bin/$CC" ]; then
pankso@374 411 $CC -v
pankso@374 412 else
pankso@374 413 echo "No C compiler. To build a toolchain run: cross compile"
pankso@441 414 echo "Missing: $tools/bin/$CC"
pankso@374 415 fi
pankso@361 416 separator && echo "" ;;
pankso@361 417 testsuite)
pankso@361 418 init_compile
pankso@361 419 echo "[COMPILING] $TARGET-gcc -v -Wall -o test.out test.c" \
pankso@361 420 | tee $logdir/testsuite.log
pankso@361 421 echo 'int main() { return 0; }' > test.c
pankso@361 422 $TARGET-gcc -v -Wall -o test.out test.c 2>&1 | tee -a $logdir/testsuite.log
pankso@361 423 if [ -x /usr/bin/file ]; then
pankso@361 424 echo -e "\n[CHECKING] file test.out" | tee -a $logdir/testsuite.log
pankso@361 425 file test.out | tee -a $logdir/testsuite.log
pankso@361 426 fi
pankso@361 427 echo -e "\n[CHECKING] readelf -h test.out" | tee -a $logdir/testsuite.log
pankso@361 428 readelf -h test.out | tee -a $logdir/testsuite.log ;;
pankso@649 429 *setup)
pankso@649 430 data="/usr/share/cross"
pankso@649 431 arch=${1%-setup}
pankso@649 432 [ "$arch" == "setup" ] && arch="arm"
pankso@649 433 newline
pankso@421 434 echo "Checking: build system packages"
pankso@421 435 for pkg in slitaz-toolchain mpfr mpfr-dev gmp gmp-dev mpc-library \
pankso@421 436 gawk autoconf; do
pankso@361 437 if [ ! -d "/var/lib/tazpkg/installed/$pkg" ]; then
pankso@361 438 echo "Missing packages: $pkg"
pankso@421 439 if [ -x /usr/sbin/spk-add ]; then
pankso@421 440 spk-add $pkg
pankso@421 441 else
pankso@421 442 tazpkg -gi $pkg
pankso@421 443 fi
pankso@361 444 fi
pankso@421 445 done
pankso@649 446 echo "Getting $arch cross.conf"
pankso@649 447 cp -f ${data}/cross-${arch}.conf /etc/slitaz/cross.conf
pankso@649 448 cook ${arch}-setup
pankso@649 449 newline ;;
pankso@361 450 download)
pankso@361 451 download_src ;;
pankso@361 452 show-log)
pankso@361 453 pkg=$2
pankso@371 454 log=$logdir/$pkg.log
pankso@371 455 if [ ! -f "$log" ]; then
pankso@371 456 echo "No log file found for: $pkg" && exit 1
pankso@371 457 fi
pankso@371 458 less -E $log ;;
pankso@361 459 binutils)
pankso@412 460 rm -f $logdir/binutils.log
pankso@361 461 binutils 2>&1 | tee $logdir/binutils.log ;;
pankso@447 462 linux-headers)
pankso@447 463 linux_headers 2>&1 | tee $logdir/linux-headers.log ;;
pankso@447 464 glibc-headers)
pankso@447 465 glibc_headers 2>&1 | tee $logdir/glibc-headers.log ;;
pankso@403 466 gcc-static)
pankso@403 467 gcc_static 2>&1 | tee $logdir/gcc-static.log ;;
pankso@361 468 glibc)
pankso@361 469 glibc 2>&1 | tee $logdir/glibc.log ;;
pankso@441 470 eglibc)
pankso@441 471 eglibc 2>&1 | tee $logdir/eglibc.log ;;
pankso@361 472 gcc-final)
pankso@361 473 gcc_final 2>&1 | tee $logdir/gcc-final.log ;;
pankso@361 474 compile)
pankso@400 475 # Compile the full toolchain.
pankso@400 476 time=$(date +%s)
pankso@361 477 init_compile
pankso@361 478 echo "Compile start: $(date)" | tee $logdir/compile.log
pankso@361 479 download_src
pankso@361 480 binutils 2>&1 | tee $logdir/binutils.log
pankso@447 481 case "$ARCH" in
pankso@447 482 x86_64) glibc_headers 2>&1 | tee $logdir/glibc-headers.log ;;
pankso@447 483 esac
pankso@652 484 linux_headers 2>&1 | tee $logdir/linux-headers.log
pankso@403 485 gcc_static 2>&1 | tee $logdir/gcc-static.log
pankso@441 486 case "$ARCH" in
pankso@649 487 arm*) eglibc 2>&1 | tee $logdir/eglibc.log ;;
pankso@441 488 x86_64) glibc 2>&1 | tee $logdir/glibc.log ;;
pankso@441 489 esac
pankso@361 490 gcc_final 2>&1 | tee $logdir/gcc-final.log
pankso@361 491 echo ""
pankso@365 492 echo "Compile end : $(date)" | tee -a $logdir/compile.log
pankso@400 493 time=$(($(date +%s) - $time))
pankso@400 494 sec=$time
pankso@400 495 div=$(( ($time + 30) / 60))
pankso@400 496 [ "$div" != 0 ] && min="~ ${div}m"
pankso@401 497 echo "Build time : ${sec}s $min" | tee -a $logdir/compile.log
pankso@361 498 echo "" ;;
pankso@654 499 libtool)
pankso@654 500 cross_libtool 2>&1 | tee $logdir/libtool.log ;;
pankso@655 501 libhack)
pankso@655 502 # Some libxx.la files have libdir='/usr/lib' and make packages
paul@684 503 # cross compilation fail. Some receipts may have got hacked to force
paul@684 504 # use of libs in sysroot but 'cross libhack' should be preferred.
pankso@655 505 echo "Libdir: $sysroot/usr/lib"
pankso@675 506 for la in $(fgrep -l libdir= $sysroot/usr/lib/*.la 2>/dev/null)
pankso@655 507 do
pankso@655 508 if fgrep -q "libdir='/usr/lib'" ${la}; then
pankso@655 509 echo "Cross fixing: $(basename $la)"
pankso@655 510 sed -i s"#libdir=.*#libdir='/cross/$ARCH/sysroot/usr/lib'#" ${la}
pankso@655 511 fi
pankso@655 512 done ;;
pankso@416 513 clean)
pankso@416 514 echo -n "Removing all source files..."
pankso@441 515 rm -rf $WORK/source && status
pankso@441 516 [ "$log" ] && rm -f $WORK/log/*.log ;;
pankso@371 517 clean-tools)
pankso@371 518 # Remove crap :-)
pankso@371 519 init_compile
pankso@441 520 echo "Cleaning : $tools ($(du -sh $tools | awk '{print $1}'))"
pankso@443 521 for file in share/info share/man share/local
pankso@371 522 do
pankso@440 523 echo -n "Removing : $file"
pankso@441 524 rm -rf $tools/$file && status
pankso@371 525 done
pankso@419 526 echo -n "Stripping : shared libs and binaries"
pankso@443 527 find $tools/bin -type f -exec strip -s '{}' 2>/dev/null \;
pankso@443 528 find $tools/lib -name cc1* -exec strip -s '{}' 2>/dev/null \;
pankso@443 529 find $tools/lib -name lto* -exec strip -s '{}' 2>/dev/null \;
pankso@444 530 find $sysroot -name "*.so*" -exec ${TARGET}-strip -s '{}' 2>/dev/null \;
pankso@416 531 sleep 1 && status
pankso@441 532 echo -n "Tools size : " && du -sh $tools | awk '{print $1}' ;;
pankso@416 533 gen-prebuilt)
pankso@420 534 # Create a prebuilt cross toolchain tarball.
pankso@416 535 init_compile
pankso@420 536 date=$(date "+%Y%m%d")
pankso@443 537 package="slitaz-$ARCH-toolchain-$date"
pankso@419 538 tarball="$package.tar.bz2"
pankso@441 539 cd /cross
pankso@443 540 mkdir -p $package/$ARCH || exit 1
pankso@419 541 echo ""
pankso@419 542 echo -n "Copying $ARCH to: $package"
pankso@443 543 cp -a $ARCH/tools $package/$ARCH
pankso@443 544 cp -a $ARCH/sysroot $package/$ARCH
pankso@419 545 status
pankso@420 546 prebuilt_readme
pankso@416 547 echo -n "Creating prebuilt $ARCH toolchain tarball..."
pankso@419 548 tar cjf $tarball $package
pankso@416 549 status
pankso@419 550 rm -rf $package
pankso@441 551 size=$(du -sh $tarball | awk '{print $1}')
pankso@441 552 echo "Tarball path: $(pwd)/$tarball"
pankso@419 553 echo "Tarball size: $size"
pankso@419 554 echo "" ;;
pankso@361 555 *)
pankso@361 556 usage ;;
pankso@361 557 esac
pankso@361 558