view build.sh @ 792:b364ed2adf49

Fedora 11 hasn't got "which", so move the busybox build up and the host toolchain symlinks down to the end. Make sure toybox patch replaces busybox patch, and host toolchain ar replaces busybox ar.
author Rob Landley <rob@landley.net>
date Fri, 31 Jul 2009 01:00:45 -0500
parents 8b5ea56e7507
children dee27a32b160
line wrap: on
line source

#!/bin/bash

# If run with no arguments, list architectures.

ARCH="$1"

if [ $# -ne 1 ]
then
  echo "Usage: $0 ARCH"
  . sources/include.sh
  read_arch_dir
  
  exit 1
fi

# Download source code and build host tools.

./download.sh || exit 1

# host-tools populates one directory with every command the build needs,
# so we can ditch the old $PATH afterwards.

time ./host-tools.sh || exit 1

not_already()
{
  if [ -f "build/$1-$ARCH.tar.bz2" ]
  then
    echo "=== Skipping $1-$ARCH (already there)"
    return 1
  fi

  return 0
}

echo "=== Building ARCH $1"

# Do we need to build the cross compiler?

# This version is --disable shared, doesn't include uClibc++, and is
# dynamically linked against the host's shared libraries.

if not_already cross-compiler
then
  # If we need to build cross compiler, assume root filesystem is stale.

  rm -rf "build/root-filesystem-$ARCH.tar.bz2"
  time ./cross-compiler.sh "$ARCH" || exit 1
fi

# Optionally, we can build a statically linked compiler via canadian cross.

# We don't autodetect the host because i686 is more portable (running on
# both 64 and 32 bit hosts), but x86_64 is (slightly) faster on a 64 bit host.

if [ ! -z "$STATIC_CROSS_COMPILER_HOST" ] && not_already cross-static
then

  # These are statically linked against uClibc on the host (for portability),
  # built --with-shared, and have uClibc++ installed.

  # To build each of these we need two existing cross compilers: one for
  # the host (to build the executables) and one for the target (to build
  # the libraries).

  BUILD_STATIC=1 FROM_ARCH="$STATIC_CROSS_COMPILER_HOST" NATIVE_TOOLCHAIN=only \
    STAGE_NAME=cross-static ./root-filesystem.sh "$ARCH"

  # Replace the dynamic cross compiler with the static one so the rest of
  # the build uses the new one.

  rm -rf "build/cross-compiler-$ARCH" &&
  ln -s "cross-static-$ARCH" "build/cross-compiler-$ARCH" || exit 1
fi

# Optionally, we can build a static native compiler.  (The one in
# root-filesystem is dynamically linked against uClibc, this one can
# presumably be untarred and run on any appropriate host system.)

if [ ! -z "$BUILD_STATIC_NATIVE_COMPILER" ] && not_already native-compiler
then

  # Build static native compilers for each target, possibly in parallel

  BUILD_STATIC=1 NATIVE_TOOLCHAIN=only STAGE_NAME=native-compiler \
      ./root-filesystem.sh "$ARCH"
fi

# Do we need to build the root filesystem?

if not_already root-filesystem
then

  # If we need to build root filesystem, assume system image is stale.

  rm -rf "build/system-image-$ARCH.tar.bz2"
  time ./root-filesystem.sh "$ARCH" || exit 1
fi

if not_already system-image
then
  time ./system-image.sh $1 || exit 1
fi