cookutils annotate cross @ rev 450
cross: install kernel headers in source then copy, add libc_cv_forced_unwind=yes to glibc-headers build
author | Christophe Lincoln <pankso@slitaz.org> |
---|---|
date | Thu May 31 15:28:32 2012 +0200 (2012-05-31) |
parents | 19ff6f323fe4 |
children | e8f5f3a99544 |
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@361 | 5 # Copyright 2012 (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@361 | 20 # Help and usage. |
pankso@361 | 21 usage() { |
pankso@361 | 22 cat << EOT |
pankso@361 | 23 |
pankso@361 | 24 Usage: $(basename $0) command --option |
pankso@361 | 25 |
pankso@361 | 26 Commands: |
pankso@361 | 27 howto Man alike and howto |
paul@382 | 28 info Display cross-tools info |
pankso@361 | 29 testsuite Execute a small testsuite |
pankso@421 | 30 check Check build host environment |
pankso@361 | 31 download Download necessary sources |
pankso@361 | 32 show-log Show a compile log |
pankso@361 | 33 binutils Compile Binutils |
pankso@421 | 34 linux-headers Install Kernel headers |
pankso@361 | 35 gcc-static Compile GCC static |
pankso@361 | 36 glibc Compile GNU Glibc |
pankso@361 | 37 gcc-final Compile final GCC |
pankso@361 | 38 compile Compile everything at once |
pankso@419 | 39 clean Clean-up build environment |
pankso@441 | 40 clean-tools Clean: $tools |
pankso@419 | 41 gen-prebuilt Create an prebuilt toolchain archive |
pankso@361 | 42 |
pankso@361 | 43 EOT |
pankso@361 | 44 } |
pankso@361 | 45 |
pankso@420 | 46 # Prebuilt README |
pankso@420 | 47 prebuilt_readme() { |
pankso@420 | 48 echo -n "Creating toolchain README..." |
pankso@420 | 49 cat >> $package/README << EOT |
pankso@420 | 50 |
pankso@420 | 51 SliTaz Prebuilt $ARCH cross toolchain |
pankso@420 | 52 ================================================================================ |
pankso@420 | 53 Move this $ARCH cross compilation toolchain to /usr/cross then add tools |
pankso@420 | 54 to your PATH environment and test the toolchain: |
pankso@420 | 55 |
pankso@441 | 56 # mv $ARCH /cross |
pankso@441 | 57 # export PATH=\$PATH:/cross/$ARCH/tools/bin |
pankso@420 | 58 |
pankso@420 | 59 # echo 'int main() { return 0; }' > test.c |
pankso@420 | 60 # $TARGET-gcc -v -o test.out test.c |
pankso@420 | 61 # readelf -h test.out |
pankso@420 | 62 |
pankso@420 | 63 ================================================================================ |
pankso@420 | 64 |
pankso@420 | 65 EOT |
pankso@420 | 66 status |
pankso@420 | 67 } |
pankso@420 | 68 |
pankso@361 | 69 # Make sure we have all directories. |
pankso@361 | 70 init_compile() { |
pankso@441 | 71 unset CFLAGS CXXFLAGS |
pankso@361 | 72 export LC_ALL=POSIX LANG=POSIX |
pankso@441 | 73 export PATH=$PATH:$tools/bin |
pankso@400 | 74 export CROSS_COMPILE=${TARGET}- |
pankso@441 | 75 mkdir -p $source $logdir $sysroot $tools |
pankso@441 | 76 echo "Tools prefix : --prefix=$tools " |
pankso@441 | 77 echo "Target sysroot : --with-sysroot=$sysroot" |
pankso@361 | 78 cd $source |
pankso@361 | 79 } |
pankso@361 | 80 |
pankso@361 | 81 # Get source if not yet in $SRC. |
pankso@361 | 82 download_src() { |
pankso@361 | 83 mkdir -p $SRC && cd $SRC |
pankso@421 | 84 [ -f "$BINUTILS_TARBALL" ] || wget $BINUTILS_WGET |
pankso@421 | 85 [ -f "$LINUX_TARBALL" ] || wget $LINUX_WGET |
pankso@421 | 86 [ -f "$GLIBC_TARBALL" ] || wget $GLIBC_WGET |
pankso@421 | 87 [ -f "$GCC_TARBALL" ] || wget $GCC_WGET |
pankso@403 | 88 } |
pankso@403 | 89 |
pankso@361 | 90 # 1. Binutils |
pankso@361 | 91 binutils() { |
pankso@408 | 92 init_compile |
pankso@411 | 93 rm -rf binutils-$BINUTILS_VERSION |
pankso@421 | 94 echo "Extracting: $BINUTILS_TARBALL" |
pankso@421 | 95 tar xjf $SRC/$BINUTILS_TARBALL |
pankso@421 | 96 echo "Configure: $BINUTILS_ARGS" |
pankso@361 | 97 cd binutils-$BINUTILS_VERSION |
pankso@361 | 98 ./configure \ |
pankso@441 | 99 --prefix=$tools \ |
pankso@361 | 100 --target=$TARGET \ |
pankso@440 | 101 --enable-plugins \ |
pankso@440 | 102 --enable-threads \ |
pankso@361 | 103 --enable-targets=$BUILD_SYSTEM \ |
pankso@441 | 104 --with-sysroot=$sysroot \ |
pankso@442 | 105 $BINUTILS_ARGS && |
pankso@361 | 106 make || exit 1 |
pankso@361 | 107 make install |
pankso@421 | 108 echo "cross: binutils compiled on: $(date)" |
pankso@361 | 109 } |
pankso@361 | 110 |
pankso@421 | 111 # 2. Kernel headers could use CROSS_COMPILE but gcc is not yet build. |
pankso@421 | 112 linux_headers() { |
pankso@421 | 113 init_compile |
pankso@421 | 114 echo "Extracting: $LINUX_TARBALL" |
pankso@421 | 115 tar xjf $SRC/$LINUX_TARBALL |
pankso@421 | 116 cd linux-$LINUX_VERSION |
pankso@421 | 117 make mrproper |
pankso@421 | 118 make ARCH=$ARCH headers_check |
pankso@450 | 119 make ARCH=$ARCH headers_install \ |
pankso@450 | 120 INSTALL_HDR_PATH=$source/linux-headers |
pankso@450 | 121 echo "Copying headers to: $sysroot/usr" |
pankso@450 | 122 cp -a $source/linux-headers/* $sysroot/usr |
pankso@421 | 123 } |
pankso@421 | 124 |
pankso@447 | 125 # 2.1 Glibc headers needed to compile x86_64 gcc-static. |
pankso@447 | 126 glibc_headers() { |
pankso@447 | 127 init_compile |
pankso@447 | 128 echo "Extracting: $GLIBC_TARBALL" |
pankso@447 | 129 tar xjf $SRC/$GLIBC_TARBALL |
pankso@447 | 130 rm -rf glibc-headers |
pankso@447 | 131 mkdir glibc-headers && cd glibc-headers |
pankso@450 | 132 libc_cv_forced_unwind=yes \ |
pankso@450 | 133 libc_cv_c_cleanup=yes \ |
pankso@447 | 134 ../glibc-$GLIBC_VERSION/configure \ |
pankso@447 | 135 --prefix=/usr \ |
pankso@447 | 136 --host=$TARGET \ |
pankso@447 | 137 --with-headers=$sysroot/usr/include \ |
pankso@447 | 138 --without-cvs \ |
pankso@447 | 139 --disable-sanity-checks \ |
pankso@447 | 140 --enable-kernel=2.6.32 && |
pankso@447 | 141 make -k install-headers install_root=$sysroot |
pankso@448 | 142 # Fixes |
pankso@448 | 143 mkdir -p $sysroot/usr/include/gnu |
pankso@448 | 144 touch $sysroot/usr/include/gnu/stubs.h |
pankso@448 | 145 cp bits/stdio_lim.h $sysroot/usr/include/bits |
pankso@447 | 146 } |
pankso@447 | 147 |
pankso@421 | 148 # 3. GCC static (first pass) |
pankso@361 | 149 gcc_static() { |
pankso@408 | 150 init_compile |
pankso@421 | 151 echo "Extracting: $GCC_TARBALL" |
pankso@421 | 152 tar xjf $SRC/$GCC_TARBALL |
pankso@421 | 153 echo "Configure: $GCC_STATIC_ARGS" |
pankso@403 | 154 # Arch fixes and work around |
pankso@403 | 155 case "$ARCH" in |
pankso@403 | 156 x86_64) |
pankso@403 | 157 # GCC wants Glib headers in cross environment (not tested |
pankso@403 | 158 # with sysroot) Should we install glibc-headers before ? |
pankso@441 | 159 echo "Try with eglibc or install glibc-headers first" |
pankso@441 | 160 #rm -f $tools/$TARGET/include |
pankso@441 | 161 #ln -s /usr/include $tools/$TARGET/include |
pankso@441 | 162 ;; |
pankso@403 | 163 esac |
pankso@361 | 164 rm -rf gcc-static |
pankso@361 | 165 mkdir gcc-static && cd gcc-static |
pankso@361 | 166 ../gcc-$GCC_VERSION/configure \ |
pankso@441 | 167 --prefix=$tools \ |
pankso@441 | 168 --libexec=$tools/lib \ |
pankso@361 | 169 --target=$TARGET \ |
pankso@361 | 170 --disable-shared \ |
pankso@361 | 171 --disable-threads \ |
pankso@441 | 172 --disable-libgomp \ |
pankso@441 | 173 --disable-libmudflap \ |
pankso@441 | 174 --disable-libssp \ |
pankso@361 | 175 --without-headers \ |
pankso@361 | 176 --with-newlib \ |
pankso@441 | 177 --with-sysroot=$sysroot \ |
pankso@442 | 178 $GCC_STATIC_ARGS && |
pankso@361 | 179 make all-gcc all-target-libgcc || exit 1 |
pankso@361 | 180 make install-gcc install-target-libgcc |
pankso@421 | 181 echo "cross: gcc-static compiled on: $(date)" |
pankso@403 | 182 } |
pankso@403 | 183 |
pankso@361 | 184 # 4. GNU Glibc |
pankso@361 | 185 glibc() { |
pankso@408 | 186 init_compile |
pankso@421 | 187 echo "Extracting: $GLIBC_TARBALL" |
pankso@421 | 188 tar xjf $SRC/$GLIBC_TARBALL |
pankso@421 | 189 echo "Configure: $GLIBC_ARGS" |
pankso@400 | 190 # Some arch may need glibc-ports and custom CFLAGS |
pankso@403 | 191 case "$ARCH" in |
pankso@361 | 192 arm) |
pankso@433 | 193 export CFLAGS="-march=armv6 -O2" |
pankso@362 | 194 [ -f "$SRC/glibc-ports-$GLIBC_VERSION.tar.bz2" ] || wget \ |
pankso@362 | 195 http://ftp.gnu.org/gnu/libc/glibc-ports-$GLIBC_VERSION.tar.bz2 \ |
pankso@362 | 196 -O $SRC/glibc-ports-$GLIBC_VERSION.tar.bz2 || exit 1 |
pankso@361 | 197 echo "Extracting: glibc-ports-$GLIBC_VERSION.tar.bz2" |
pankso@361 | 198 rm -rf glibc-$GLIBC_VERSION/ports |
pankso@361 | 199 tar xjf $SRC/glibc-ports-$GLIBC_VERSION.tar.bz2 |
pankso@449 | 200 mv glibc-ports-$GLIBC_VERSION glibc-$GLIBC_VERSION/ports |
pankso@449 | 201 libexec=/usr/lib/glibc ;; |
pankso@418 | 202 x86_64) |
pankso@449 | 203 #export CFLAGS="-march=nocona -O2 -pipe" |
pankso@449 | 204 ccflags="-m64" |
pankso@449 | 205 libexec=/usr/lib64/glibc ;; |
pankso@361 | 206 esac |
pankso@441 | 207 # Disable linking to libgcc_eh |
pankso@441 | 208 cd glibc-$GLIBC_VERSION |
pankso@441 | 209 cp Makeconfig Makeconfig.orig |
pankso@441 | 210 sed -e 's/-lgcc_eh//g' Makeconfig.orig > Makeconfig |
pankso@441 | 211 cd .. |
pankso@421 | 212 echo "CFLAGS: $CFLAGS" |
pankso@441 | 213 rm -rf glibc-build |
pankso@361 | 214 mkdir -p glibc-build && cd glibc-build |
pankso@365 | 215 BUILD_CC="gcc" \ |
pankso@418 | 216 CC="${TARGET}-gcc $ccflags" \ |
pankso@441 | 217 AR="${TARGET}-ar" \ |
pankso@441 | 218 RANLIB="${TARGET}-ranlib" \ |
pankso@361 | 219 libc_cv_forced_unwind=yes \ |
pankso@361 | 220 libc_cv_c_cleanup=yes \ |
pankso@361 | 221 ../glibc-$GLIBC_VERSION/configure \ |
pankso@441 | 222 --prefix=/usr \ |
pankso@449 | 223 --libexec=$libexec \ |
pankso@361 | 224 --host=$TARGET \ |
pankso@441 | 225 --with-headers=$sysroot/usr/include \ |
pankso@441 | 226 --with-binutils=$tools/bin \ |
pankso@425 | 227 --enable-kernel=2.6.32 \ |
pankso@442 | 228 $GLIBC_ARGS && |
pankso@361 | 229 make || exit 1 |
pankso@441 | 230 make install_root=$sysroot install |
pankso@403 | 231 # Work around to let GCC find Glibc headers. |
pankso@441 | 232 #cd $sysroot |
pankso@441 | 233 #ln -s usr/include sys-include |
pankso@421 | 234 echo "cross: glibc compiled on: $(date)" |
pankso@361 | 235 } |
pankso@361 | 236 |
pankso@441 | 237 # 4. Eglibc: always use --prefix=/usr |
pankso@441 | 238 eglibc() { |
pankso@441 | 239 init_compile |
pankso@441 | 240 rm -rf eglibc-build eglibc-$EGLIBC_VERSION |
pankso@441 | 241 echo "Extracting: $EGLIBC_TARBALL" |
pankso@441 | 242 tar xjf $SRC/$EGLIBC_TARBALL |
pankso@441 | 243 # Some arch may need glibc-ports and custom CFLAGS |
pankso@441 | 244 case "$ARCH" in |
pankso@441 | 245 arm) |
pankso@441 | 246 export CFLAGS="-march=armv6 -O2" |
pankso@441 | 247 if [ ! -d "$source/eglibc-ports-$EGLIBC_VERSION" ]; then |
pankso@441 | 248 echo "Cloning $EGLIBC_WGET/ports" |
pankso@441 | 249 svn co $EGLIBC_WGET/ports eglibc-ports-$EGLIBC_VERSION >/dev/null |
pankso@441 | 250 fi |
pankso@449 | 251 cp -a eglibc-ports-$EGLIBC_VERSION eglibc-$EGLIBC_VERSION/ports |
pankso@449 | 252 libexec=/usr/lib/eglibc ;; |
pankso@441 | 253 x86_64) |
pankso@449 | 254 #export CFLAGS="-march=nocona -O2 -pipe" |
pankso@449 | 255 ccflags="-m64" |
pankso@449 | 256 libexec=/usr/lib64/eglibc ;; |
pankso@441 | 257 esac |
pankso@441 | 258 # Disable linking to libgcc_eh |
pankso@441 | 259 cd eglibc-$EGLIBC_VERSION |
pankso@441 | 260 cp Makeconfig Makeconfig.orig |
pankso@441 | 261 sed -e 's/-lgcc_eh//g' Makeconfig.orig > Makeconfig |
pankso@441 | 262 cd .. |
pankso@441 | 263 mkdir -p eglibc-build && cd eglibc-build |
pankso@441 | 264 # config.cache |
pankso@441 | 265 cat > config.cache << EOT |
pankso@441 | 266 libc_cv_forced_unwind=yes |
pankso@441 | 267 libc_cv_c_cleanup=yes |
pankso@441 | 268 libc_cv_gnu89_inline=yes |
pankso@441 | 269 EOT |
pankso@441 | 270 BUILD_CC="gcc" \ |
pankso@441 | 271 CC="${TARGET}-gcc $ccflags" \ |
pankso@441 | 272 AR="${TARGET}-ar" \ |
pankso@441 | 273 RANLIB="${TARGET}-ranlib" \ |
pankso@441 | 274 ../eglibc-$EGLIBC_VERSION/configure \ |
pankso@441 | 275 --prefix=/usr \ |
pankso@449 | 276 --libexec=$libexec \ |
pankso@441 | 277 --host=$TARGET \ |
pankso@441 | 278 --with-headers=$sysroot/usr/include \ |
pankso@441 | 279 --with-binutils=$tools/bin \ |
pankso@441 | 280 --enable-kernel=2.6.32 \ |
pankso@441 | 281 --with-__thread \ |
pankso@441 | 282 --without-gd \ |
pankso@441 | 283 --without-cvs \ |
pankso@441 | 284 --cache-file=config.cache \ |
pankso@442 | 285 $EGLIBC_ARGS && |
pankso@441 | 286 make || exit 1 |
pankso@441 | 287 make install_root=$sysroot install |
pankso@449 | 288 # The rpc headers (RPC is no longer in eglibc <2.13) |
pankso@445 | 289 # |
pankso@445 | 290 #if [ "$EGLIBC_VERSION" -gt "2.13" ]; then |
pankso@445 | 291 #rpcsvc = "bootparam_prot.x nlm_prot.x rstat.x \ |
pankso@445 | 292 #yppasswd.x klm_prot.x rex.x sm_inter.x mount.x \ |
pankso@445 | 293 #rusers.x spray.x nfs_prot.x rquota.x key_prot.x" |
pankso@445 | 294 #cd sunrpc/rpcsvc |
pankso@445 | 295 #for r in ${rpcsvc}; do |
pankso@449 | 296 #h=$(echo $r|sed -e's,\.x$,.h,') |
pankso@449 | 297 #rpcgen -h $r -o $h || echo "unable to generate header for $r" |
pankso@445 | 298 #done |
pankso@445 | 299 #fi |
pankso@441 | 300 } |
pankso@441 | 301 |
pankso@361 | 302 # 5. GCC final |
pankso@361 | 303 gcc_final() { |
pankso@408 | 304 init_compile |
pankso@361 | 305 if [ ! -d "gcc-$GCC_VERSION" ]; then |
pankso@421 | 306 echo "Extracting: $GCC_TARBALL" |
pankso@421 | 307 tar xjf $SRC/$GCC_TARBALL |
pankso@361 | 308 fi |
pankso@421 | 309 echo "Configure: $GCC_FINAL_ARGS" |
pankso@441 | 310 rm -rf gcc-build |
pankso@421 | 311 mkdir -p gcc-build && cd gcc-build |
pankso@441 | 312 AR=ar \ |
pankso@361 | 313 ../gcc-$GCC_VERSION/configure \ |
pankso@441 | 314 --prefix=$tools \ |
pankso@441 | 315 --libexec=$tools/lib \ |
pankso@361 | 316 --target=$TARGET \ |
pankso@361 | 317 --enable-shared \ |
pankso@361 | 318 --enable-c99 \ |
pankso@361 | 319 --enable-long-long \ |
pankso@361 | 320 --enable-__cxa_atexit \ |
pankso@440 | 321 --with-system-zlib \ |
pankso@440 | 322 --enable-plugin \ |
pankso@440 | 323 --disable-multilib \ |
pankso@440 | 324 --disable-libssp \ |
pankso@441 | 325 --disable-checking \ |
pankso@441 | 326 --disable-werror \ |
pankso@400 | 327 --with-pkgversion="SliTaz" \ |
pankso@440 | 328 --with-bugurl="https://bugs.slitaz.org/" \ |
pankso@442 | 329 --with-sysroot=$sysroot \ |
pankso@442 | 330 $GCC_FINAL_ARGS && |
pankso@441 | 331 make AS_FOR_TARGET="${TARGET}-as" \ |
pankso@441 | 332 LD_FOR_TARGET="${TARGET}-ld" || exit 1 |
pankso@441 | 333 make install |
pankso@421 | 334 echo "cross: GCC final compiled on: $(date)" |
pankso@361 | 335 } |
pankso@361 | 336 |
pankso@361 | 337 # |
pankso@361 | 338 # Commands |
pankso@361 | 339 # |
pankso@361 | 340 |
pankso@361 | 341 case "$1" in |
pankso@361 | 342 howto|man) |
pankso@361 | 343 doc=/usr/share/doc/cookutils/cross.txt |
pankso@361 | 344 [ -f "$doc" ] && less -E $doc ;; |
pankso@361 | 345 info) |
pankso@361 | 346 init_compile |
pankso@361 | 347 CC=${TARGET}-gcc |
paul@382 | 348 echo -e "\nCross Toolchain information" && separator |
pankso@374 | 349 [ "$config" ] && echo "Config file : $config" |
pankso@361 | 350 cat << EOT |
pankso@374 | 351 Target arch : $ARCH |
pankso@374 | 352 C Compiler : $CC |
pankso@374 | 353 Build directory : $WORK |
pankso@441 | 354 Tools prefix : $tools/bin |
pankso@441 | 355 Arch sysroot : $sysroot |
pankso@361 | 356 EOT |
pankso@361 | 357 separator && echo "" |
pankso@361 | 358 echo "GCC version" && separator |
pankso@441 | 359 if [ -x "$tools/bin/$CC" ]; then |
pankso@374 | 360 $CC -v |
pankso@374 | 361 else |
pankso@374 | 362 echo "No C compiler. To build a toolchain run: cross compile" |
pankso@441 | 363 echo "Missing: $tools/bin/$CC" |
pankso@374 | 364 fi |
pankso@361 | 365 separator && echo "" ;; |
pankso@361 | 366 testsuite) |
pankso@361 | 367 init_compile |
pankso@361 | 368 echo "[COMPILING] $TARGET-gcc -v -Wall -o test.out test.c" \ |
pankso@361 | 369 | tee $logdir/testsuite.log |
pankso@361 | 370 echo 'int main() { return 0; }' > test.c |
pankso@361 | 371 $TARGET-gcc -v -Wall -o test.out test.c 2>&1 | tee -a $logdir/testsuite.log |
pankso@361 | 372 if [ -x /usr/bin/file ]; then |
pankso@361 | 373 echo -e "\n[CHECKING] file test.out" | tee -a $logdir/testsuite.log |
pankso@361 | 374 file test.out | tee -a $logdir/testsuite.log |
pankso@361 | 375 fi |
pankso@361 | 376 echo -e "\n[CHECKING] readelf -h test.out" | tee -a $logdir/testsuite.log |
pankso@361 | 377 readelf -h test.out | tee -a $logdir/testsuite.log ;; |
pankso@421 | 378 check) |
pankso@421 | 379 echo "Checking: build system packages" |
pankso@421 | 380 for pkg in slitaz-toolchain mpfr mpfr-dev gmp gmp-dev mpc-library \ |
pankso@421 | 381 gawk autoconf; do |
pankso@361 | 382 if [ ! -d "/var/lib/tazpkg/installed/$pkg" ]; then |
pankso@361 | 383 echo "Missing packages: $pkg" |
pankso@421 | 384 if [ -x /usr/sbin/spk-add ]; then |
pankso@421 | 385 spk-add $pkg |
pankso@421 | 386 else |
pankso@421 | 387 tazpkg -gi $pkg |
pankso@421 | 388 fi |
pankso@361 | 389 fi |
pankso@421 | 390 done |
pankso@441 | 391 echo "Using: --with-sysroot=$sysroot" ;; |
pankso@361 | 392 download) |
pankso@361 | 393 download_src ;; |
pankso@361 | 394 show-log) |
pankso@361 | 395 pkg=$2 |
pankso@371 | 396 log=$logdir/$pkg.log |
pankso@371 | 397 if [ ! -f "$log" ]; then |
pankso@371 | 398 echo "No log file found for: $pkg" && exit 1 |
pankso@371 | 399 fi |
pankso@371 | 400 less -E $log ;; |
pankso@361 | 401 binutils) |
pankso@412 | 402 rm -f $logdir/binutils.log |
pankso@361 | 403 binutils 2>&1 | tee $logdir/binutils.log ;; |
pankso@447 | 404 linux-headers) |
pankso@447 | 405 linux_headers 2>&1 | tee $logdir/linux-headers.log ;; |
pankso@447 | 406 glibc-headers) |
pankso@447 | 407 glibc_headers 2>&1 | tee $logdir/glibc-headers.log ;; |
pankso@403 | 408 gcc-static) |
pankso@403 | 409 gcc_static 2>&1 | tee $logdir/gcc-static.log ;; |
pankso@361 | 410 glibc) |
pankso@361 | 411 glibc 2>&1 | tee $logdir/glibc.log ;; |
pankso@441 | 412 eglibc) |
pankso@441 | 413 eglibc 2>&1 | tee $logdir/eglibc.log ;; |
pankso@361 | 414 gcc-final) |
pankso@361 | 415 gcc_final 2>&1 | tee $logdir/gcc-final.log ;; |
pankso@361 | 416 compile) |
pankso@400 | 417 # Compile the full toolchain. |
pankso@400 | 418 time=$(date +%s) |
pankso@361 | 419 init_compile |
pankso@361 | 420 echo "Compile start: $(date)" | tee $logdir/compile.log |
pankso@361 | 421 download_src |
pankso@361 | 422 binutils 2>&1 | tee $logdir/binutils.log |
pankso@447 | 423 case "$ARCH" in |
pankso@447 | 424 x86_64) glibc_headers 2>&1 | tee $logdir/glibc-headers.log ;; |
pankso@447 | 425 esac |
pankso@403 | 426 gcc_static 2>&1 | tee $logdir/gcc-static.log |
pankso@361 | 427 linux_headers 2>&1 | tee $logdir/linux-headers.log |
pankso@441 | 428 case "$ARCH" in |
pankso@441 | 429 arm) eglibc 2>&1 | tee $logdir/eglibc.log ;; |
pankso@441 | 430 x86_64) glibc 2>&1 | tee $logdir/glibc.log ;; |
pankso@441 | 431 esac |
pankso@361 | 432 gcc_final 2>&1 | tee $logdir/gcc-final.log |
pankso@361 | 433 echo "" |
pankso@365 | 434 echo "Compile end : $(date)" | tee -a $logdir/compile.log |
pankso@400 | 435 time=$(($(date +%s) - $time)) |
pankso@400 | 436 sec=$time |
pankso@400 | 437 div=$(( ($time + 30) / 60)) |
pankso@400 | 438 [ "$div" != 0 ] && min="~ ${div}m" |
pankso@401 | 439 echo "Build time : ${sec}s $min" | tee -a $logdir/compile.log |
pankso@361 | 440 echo "" ;; |
pankso@416 | 441 clean) |
pankso@416 | 442 echo -n "Removing all source files..." |
pankso@441 | 443 rm -rf $WORK/source && status |
pankso@441 | 444 [ "$log" ] && rm -f $WORK/log/*.log ;; |
pankso@371 | 445 clean-tools) |
pankso@371 | 446 # Remove crap :-) |
pankso@371 | 447 init_compile |
pankso@441 | 448 echo "Cleaning : $tools ($(du -sh $tools | awk '{print $1}'))" |
pankso@443 | 449 for file in share/info share/man share/local |
pankso@371 | 450 do |
pankso@440 | 451 echo -n "Removing : $file" |
pankso@441 | 452 rm -rf $tools/$file && status |
pankso@371 | 453 done |
pankso@419 | 454 echo -n "Stripping : shared libs and binaries" |
pankso@443 | 455 find $tools/bin -type f -exec strip -s '{}' 2>/dev/null \; |
pankso@443 | 456 find $tools/lib -name cc1* -exec strip -s '{}' 2>/dev/null \; |
pankso@443 | 457 find $tools/lib -name lto* -exec strip -s '{}' 2>/dev/null \; |
pankso@444 | 458 find $sysroot -name "*.so*" -exec ${TARGET}-strip -s '{}' 2>/dev/null \; |
pankso@416 | 459 sleep 1 && status |
pankso@441 | 460 echo -n "Tools size : " && du -sh $tools | awk '{print $1}' ;; |
pankso@416 | 461 gen-prebuilt) |
pankso@420 | 462 # Create a prebuilt cross toolchain tarball. |
pankso@416 | 463 init_compile |
pankso@420 | 464 date=$(date "+%Y%m%d") |
pankso@443 | 465 package="slitaz-$ARCH-toolchain-$date" |
pankso@419 | 466 tarball="$package.tar.bz2" |
pankso@441 | 467 cd /cross |
pankso@443 | 468 mkdir -p $package/$ARCH || exit 1 |
pankso@419 | 469 echo "" |
pankso@419 | 470 echo -n "Copying $ARCH to: $package" |
pankso@443 | 471 cp -a $ARCH/tools $package/$ARCH |
pankso@443 | 472 cp -a $ARCH/sysroot $package/$ARCH |
pankso@419 | 473 status |
pankso@420 | 474 prebuilt_readme |
pankso@416 | 475 echo -n "Creating prebuilt $ARCH toolchain tarball..." |
pankso@419 | 476 tar cjf $tarball $package |
pankso@416 | 477 status |
pankso@419 | 478 rm -rf $package |
pankso@441 | 479 size=$(du -sh $tarball | awk '{print $1}') |
pankso@441 | 480 echo "Tarball path: $(pwd)/$tarball" |
pankso@419 | 481 echo "Tarball size: $size" |
pankso@419 | 482 echo "" ;; |
pankso@361 | 483 *) |
pankso@361 | 484 usage ;; |
pankso@361 | 485 esac |
pankso@361 | 486 |