cookutils annotate cross @ rev 363
cross: typo
author | Christophe Lincoln <pankso@slitaz.org> |
---|---|
date | Wed May 09 22:41:21 2012 +0200 (2012-05-09) |
parents | e60f4a6df297 |
children | dc114cbd0d56 |
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@361 | 9 . cross.conf || exit 1 |
pankso@361 | 10 |
pankso@361 | 11 # Help and usage. |
pankso@361 | 12 usage() { |
pankso@361 | 13 cat << EOT |
pankso@361 | 14 |
pankso@361 | 15 Usage: $(basename $0) command --option |
pankso@361 | 16 |
pankso@361 | 17 Commands: |
pankso@361 | 18 howto Man alike and howto |
pankso@361 | 19 info Dispaly cross-tools info |
pankso@361 | 20 testsuite Execute a small testsuite |
pankso@361 | 21 check-env Check build host tools |
pankso@361 | 22 download Download necessary sources |
pankso@361 | 23 clean Clean-up environment |
pankso@361 | 24 show-log Show a compile log |
pankso@361 | 25 binutils Compile Binutils |
pankso@361 | 26 gcc-static Compile GCC static |
pankso@361 | 27 linux-headers Install Kernel headers |
pankso@361 | 28 glibc Compile GNU Glibc |
pankso@361 | 29 gcc-final Compile final GCC |
pankso@361 | 30 busybox Cross compile Busybox |
pankso@361 | 31 compile Compile everything at once |
pankso@361 | 32 |
pankso@361 | 33 EOT |
pankso@361 | 34 } |
pankso@361 | 35 |
pankso@361 | 36 # Make sure we have all directories. |
pankso@361 | 37 init_compile() { |
pankso@361 | 38 export LC_ALL=POSIX LANG=POSIX |
pankso@361 | 39 export PATH=$PATH:$PREFIX/bin |
pankso@361 | 40 export CROSS_COMPILE=$TARGET- |
pankso@361 | 41 source=$WORK/source |
pankso@361 | 42 logdir=$WORK/log |
pankso@361 | 43 mkdir -p $source $logdir $install |
pankso@361 | 44 cd $source |
pankso@361 | 45 } |
pankso@361 | 46 |
pankso@361 | 47 # Get source if not yet in $SRC. |
pankso@361 | 48 download_src() { |
pankso@361 | 49 mkdir -p $SRC && cd $SRC |
pankso@361 | 50 [ -f "binutils-$BINUTILS_VERSION.tar.bz2" ] || wget $BINUTILS_WGET |
pankso@361 | 51 [ -f "linux-$LINUX_VERSION.tar.bz2" ] || wget $LINUX_WGET |
pankso@361 | 52 [ -f "glibc-$GLIBC_VERSION.tar.bz2" ] || wget $GLIBC_WGET |
pankso@361 | 53 [ -f "gcc-$GCC_VERSION.tar.bz2" ] || wget $GCC_WGET |
pankso@361 | 54 [ -f "busybox-$BUSYBOX_VERSION.tar.bz2" ] || wget $BUSYBOX_WGET |
pankso@361 | 55 } |
pankso@361 | 56 |
pankso@361 | 57 # 1. Binutils |
pankso@361 | 58 binutils() { |
pankso@361 | 59 echo "Extracting: binutils-$BINUTILS_VERSION.tar.bz2" |
pankso@361 | 60 tar xjf $SRC/binutils-$BINUTILS_VERSION.tar.bz2 |
pankso@361 | 61 # Peer arch options --disable-werror |
pankso@361 | 62 case $ARCH in |
pankso@361 | 63 arm) archopts="" ;; |
pankso@361 | 64 x86_64) archopts="" ;; |
pankso@361 | 65 esac |
pankso@361 | 66 cd binutils-$BINUTILS_VERSION |
pankso@361 | 67 ./configure \ |
pankso@361 | 68 --prefix=$PREFIX \ |
pankso@361 | 69 --target=$TARGET \ |
pankso@361 | 70 --enable-targets=$BUILD_SYSTEM \ |
pankso@361 | 71 --enable-shared $archopts |
pankso@361 | 72 make || exit 1 |
pankso@361 | 73 make install |
pankso@361 | 74 } |
pankso@361 | 75 |
pankso@361 | 76 # 2. Kernel headers |
pankso@361 | 77 linux_headers() { |
pankso@361 | 78 echo "Extracting: linux-$LINUX_VERSION.tar.bz2" |
pankso@361 | 79 tar xjf $SRC/linux-$LINUX_VERSION.tar.bz2 |
pankso@361 | 80 cd linux-$LINUX_VERSION |
pankso@361 | 81 make mrproper |
pankso@361 | 82 make ARCH=$ARCH headers_check |
pankso@361 | 83 make ARCH=$ARCH headers_install \ |
pankso@361 | 84 INSTALL_HDR_PATH=$PREFIX |
pankso@361 | 85 } |
pankso@361 | 86 |
pankso@361 | 87 # 3. GCC static (first pass) |
pankso@361 | 88 gcc_static() { |
pankso@361 | 89 echo "Extracting: gcc-$GCC_VERSION.tar.bz2" |
pankso@361 | 90 tar xjf $SRC/gcc-$GCC_VERSION.tar.bz2 |
pankso@361 | 91 # Peer arch options |
pankso@361 | 92 case $ARCH in |
pankso@361 | 93 arm) archopts="" ;; |
pankso@361 | 94 x86_64) archopts="" ;; |
pankso@361 | 95 esac |
pankso@361 | 96 rm -rf gcc-static |
pankso@361 | 97 mkdir gcc-static && cd gcc-static |
pankso@361 | 98 ../gcc-$GCC_VERSION/configure \ |
pankso@361 | 99 --prefix=$PREFIX \ |
pankso@361 | 100 --target=$TARGET \ |
pankso@361 | 101 --disable-shared \ |
pankso@361 | 102 --disable-threads \ |
pankso@361 | 103 --without-headers \ |
pankso@361 | 104 --with-newlib \ |
pankso@361 | 105 --enable-languages=c |
pankso@361 | 106 make all-gcc all-target-libgcc || exit 1 |
pankso@361 | 107 make install-gcc install-target-libgcc |
pankso@361 | 108 cd $PREFIX/lib/gcc/$TARGET/$GCC_VERSION |
pankso@361 | 109 ln -s libgcc.a libgcc_eh.a |
pankso@361 | 110 } |
pankso@361 | 111 |
pankso@361 | 112 # 4. GNU Glibc |
pankso@361 | 113 glibc() { |
pankso@361 | 114 echo "Extracting: glibc-$GLIBC_VERSION.tar.bz2" |
pankso@361 | 115 tar xjf $SRC/glibc-$GLIBC_VERSION.tar.bz2 |
pankso@361 | 116 [ "$continue" ] || rm -rf glibc-build |
pankso@361 | 117 # Peer arch options |
pankso@361 | 118 case $ARCH in |
pankso@361 | 119 arm) |
pankso@361 | 120 archopts="" |
pankso@362 | 121 [ -f "$SRC/glibc-ports-$GLIBC_VERSION.tar.bz2" ] || wget \ |
pankso@362 | 122 http://ftp.gnu.org/gnu/libc/glibc-ports-$GLIBC_VERSION.tar.bz2 \ |
pankso@362 | 123 -O $SRC/glibc-ports-$GLIBC_VERSION.tar.bz2 || exit 1 |
pankso@361 | 124 echo "Extracting: glibc-ports-$GLIBC_VERSION.tar.bz2" |
pankso@361 | 125 rm -rf glibc-$GLIBC_VERSION/ports |
pankso@361 | 126 tar xjf $SRC/glibc-ports-$GLIBC_VERSION.tar.bz2 |
pankso@361 | 127 mv glibc-ports-$GLIBC_VERSION glibc-$GLIBC_VERSION/ports ;; |
pankso@361 | 128 x86_64) |
pankso@361 | 129 archopts="" ;; |
pankso@361 | 130 esac |
pankso@361 | 131 mkdir -p glibc-build && cd glibc-build |
pankso@361 | 132 BUILD_CC="gcc" |
pankso@361 | 133 CC="$PREFIX/bin/$TARGET-gcc" \ |
pankso@361 | 134 libc_cv_forced_unwind=yes \ |
pankso@361 | 135 libc_cv_c_cleanup=yes \ |
pankso@361 | 136 ../glibc-$GLIBC_VERSION/configure \ |
pankso@361 | 137 --prefix=$PREFIX \ |
pankso@361 | 138 --host=$TARGET \ |
pankso@361 | 139 --with-headers=$PREFIX/include \ |
pankso@361 | 140 --with-binutils=$PREFIX/bin \ |
pankso@361 | 141 --enable-add-ons |
pankso@361 | 142 make || exit 1 |
pankso@361 | 143 make install |
pankso@361 | 144 cd $PREFIX/$TARGET |
pankso@361 | 145 rm -rf lib include |
pankso@361 | 146 ln -s ../lib lib |
pankso@361 | 147 ln -s ../include include |
pankso@361 | 148 } |
pankso@361 | 149 |
pankso@361 | 150 # 5. GCC final |
pankso@361 | 151 gcc_final() { |
pankso@361 | 152 if [ ! -d "gcc-$GCC_VERSION" ]; then |
pankso@361 | 153 echo "Extracting: gcc-$GCC_VERSION.tar.bz2" |
pankso@361 | 154 tar xjf $SRC/gcc-$GCC_VERSION.tar.bz2 |
pankso@361 | 155 fi |
pankso@361 | 156 # Peer arch options |
pankso@361 | 157 case $ARCH in |
pankso@361 | 158 arm) archopts="" ;; |
pankso@361 | 159 x86_64) archopts="" ;; |
pankso@361 | 160 esac |
pankso@361 | 161 rm -rf gcc-build |
pankso@361 | 162 mkdir gcc-build && cd gcc-build |
pankso@361 | 163 ../gcc-$GCC_VERSION/configure \ |
pankso@361 | 164 --prefix=$PREFIX \ |
pankso@361 | 165 --target=$TARGET \ |
pankso@361 | 166 --enable-shared \ |
pankso@361 | 167 --enable-languages=c,c++ \ |
pankso@361 | 168 --enable-c99 \ |
pankso@361 | 169 --enable-long-long \ |
pankso@361 | 170 --enable-__cxa_atexit \ |
pankso@361 | 171 --with-pkgversion="SliTaz" |
pankso@361 | 172 make || exit 1 |
pankso@361 | 173 make install |
pankso@361 | 174 } |
pankso@361 | 175 |
pankso@361 | 176 # Build Busybox to we can create prebuild tiny rootfs image and boot |
pankso@361 | 177 # from NFS ? |
pankso@361 | 178 cross_busybox() { |
pankso@361 | 179 echo "Extracting: busybox-$BUSYBOX_VERSION.tar.bz2" |
pankso@361 | 180 tar xjf $SRC/busybox-$BUSYBOX_VERSION.tar.bz2 |
pankso@361 | 181 cd busybox-$BUSYBOX_VERSION |
pankso@361 | 182 # CROSS_COMPILE is exported via init_compile, but be sure. |
pankso@361 | 183 make CROSS_COMPILE=$TARGET- defconfig |
pankso@361 | 184 make CROSS_COMPILE=$TARGET- || exit 1 |
pankso@361 | 185 make CROSS_COMPILE=$TARGET- install |
pankso@361 | 186 chmod 4755 _install/bin/busybox |
pankso@361 | 187 readelf -h _install/bin/busybox |
pankso@361 | 188 } |
pankso@361 | 189 |
pankso@361 | 190 # |
pankso@361 | 191 # Commands |
pankso@361 | 192 # |
pankso@361 | 193 |
pankso@361 | 194 case "$1" in |
pankso@361 | 195 howto|man) |
pankso@361 | 196 doc=/usr/share/doc/cookutils/cross.txt |
pankso@361 | 197 [ -f "$doc" ] && less -E $doc ;; |
pankso@361 | 198 info) |
pankso@361 | 199 init_compile |
pankso@361 | 200 CC=${TARGET}-gcc |
pankso@361 | 201 echo -e "\nCross Toolchain iformation" && separator |
pankso@361 | 202 cat << EOT |
pankso@361 | 203 Target arch : $ARCH |
pankso@361 | 204 C Compiler : $CC |
pankso@361 | 205 Additonal path: /usr/cross/$ARCH/bin |
pankso@361 | 206 EOT |
pankso@361 | 207 separator && echo "" |
pankso@361 | 208 echo "GCC version" && separator |
pankso@361 | 209 $CC -v |
pankso@361 | 210 separator && echo "" ;; |
pankso@361 | 211 testsuite) |
pankso@361 | 212 init_compile |
pankso@361 | 213 echo "[COMPILING] $TARGET-gcc -v -Wall -o test.out test.c" \ |
pankso@361 | 214 | tee $logdir/testsuite.log |
pankso@361 | 215 echo 'int main() { return 0; }' > test.c |
pankso@361 | 216 $TARGET-gcc -v -Wall -o test.out test.c 2>&1 | tee -a $logdir/testsuite.log |
pankso@361 | 217 if [ -x /usr/bin/file ]; then |
pankso@361 | 218 echo -e "\n[CHECKING] file test.out" | tee -a $logdir/testsuite.log |
pankso@361 | 219 file test.out | tee -a $logdir/testsuite.log |
pankso@361 | 220 fi |
pankso@361 | 221 echo -e "\n[CHECKING] readelf -h test.out" | tee -a $logdir/testsuite.log |
pankso@361 | 222 readelf -h test.out | tee -a $logdir/testsuite.log ;; |
pankso@361 | 223 check-host) |
pankso@361 | 224 for pkg in mpfr mpfr-dev gmp gmp-dev mpc-library gawk autoconf |
pankso@361 | 225 do |
pankso@361 | 226 if [ ! -d "/var/lib/tazpkg/installed/$pkg" ]; then |
pankso@361 | 227 echo "Missing packages: $pkg" |
pankso@361 | 228 [ "$install" ] && tazpkg -gi $pkg |
pankso@361 | 229 fi |
pankso@361 | 230 done ;; |
pankso@361 | 231 download) |
pankso@361 | 232 download_src ;; |
pankso@361 | 233 clean) |
pankso@361 | 234 echo -n "Remove all source files..." |
pankso@361 | 235 rm -rf $WORK/source/* && status |
pankso@361 | 236 [ "$log" ] && rm -f $WORK/log/*.log |
pankso@361 | 237 echo "To clean chroot: rm -rf $PREFIX" ;; |
pankso@361 | 238 show-log) |
pankso@361 | 239 pkg=$2 |
pankso@361 | 240 less -E $logdir/$pkg.log ;; |
pankso@361 | 241 binutils) |
pankso@361 | 242 init_compile |
pankso@361 | 243 rm -f $logdir/binutils.log |
pankso@361 | 244 binutils 2>&1 | tee $logdir/binutils.log ;; |
pankso@361 | 245 linux-headers) |
pankso@361 | 246 init_compile |
pankso@363 | 247 linux_headers 2>&1 | tee $logdir/linux-headers.log ;; |
pankso@361 | 248 gcc-static) |
pankso@361 | 249 init_compile |
pankso@361 | 250 gcc_static 2>&1 | tee $logdir/gcc-static.log ;; |
pankso@361 | 251 glibc) |
pankso@361 | 252 init_compile |
pankso@361 | 253 glibc 2>&1 | tee $logdir/glibc.log ;; |
pankso@361 | 254 gcc-final) |
pankso@361 | 255 init_compile |
pankso@361 | 256 gcc_final 2>&1 | tee $logdir/gcc-final.log ;; |
pankso@361 | 257 busybox) |
pankso@361 | 258 init_compile |
pankso@361 | 259 cross_busybox 2>&1 | tee $logdir/busybox.log ;; |
pankso@361 | 260 compile) |
pankso@361 | 261 init_compile |
pankso@361 | 262 echo "Compile start: $(date)" | tee $logdir/compile.log |
pankso@361 | 263 download_src |
pankso@361 | 264 binutils 2>&1 | tee $logdir/binutils.log |
pankso@361 | 265 linux_headers 2>&1 | tee $logdir/linux-headers.log |
pankso@361 | 266 gcc_static 2>&1 | tee $logdir/gcc-static.log |
pankso@361 | 267 glibc 2>&1 | tee $logdir/glibc.log |
pankso@361 | 268 gcc_final 2>&1 | tee $logdir/gcc-final.log |
pankso@361 | 269 echo "" |
pankso@361 | 270 echo "Compile end: $(date)" | tee -a $logdir/compile.log |
pankso@361 | 271 echo "" ;; |
pankso@361 | 272 *) |
pankso@361 | 273 usage ;; |
pankso@361 | 274 esac |
pankso@361 | 275 |