changeset 36:2f1a6a4645ed

Why didn't "hg mv build.sh cross-compiler.sh" figure out what build.sh had gone away? Also, update include.sh to dump all the version-independent package symlinks in a single directory, and fix up fallout from that.
author Rob Landley <rob@landley.net>
date Mon, 11 Dec 2006 21:06:19 -0500
parents 25bfa6ac9f84
children 11c23ebe3bf0
files build.sh cross-compiler.sh download.sh include.sh
diffstat 4 files changed, 6 insertions(+), 248 deletions(-) [+]
line wrap: on
line diff
--- a/build.sh	Mon Dec 11 19:51:35 2006 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,234 +0,0 @@
-#!/bin/sh
-
-# Memo: How should I pass this in?
-
-ARCH="$(echo "$1" | sed 's@.*/@@')"
-if [ ! -f sources/configs/"$1" ]
-then
-  echo "Usage: $0 ARCH"
-  echo "Supported architectures: $(cd sources/configs && ls)"
-  exit 1
-fi
-
-CLEANUP="rm -rf"
-
-function dienow()
-{
-  echo "Exiting due to errors"
-  exit 1
-}
-
-
-function dotprogress()
-{
-  x=0
-  while read i
-  do
-    x=$[$x + 1]
-    if [[ "$x" -eq 25 ]]
-    then
-      x=0
-      echo -n .
-    fi
-  done
-  echo
-}
-
-# Extract package $1, use work directory $2 (or $1 if no $2), use source
-# directory $3 (or $1 if no $3)
-
-function setupfor()
-{
-  FILE="${SOURCES}/${STAGE}/$1"
-  if [ -f "${FILE}".tar.bz2 ]
-  then
-    FILE="${FILE}".tar.bz2
-    DECOMPRESS="j"
-  else
-    FILE="${FILE}".tar.gz
-    DECOMPRESS="z"
-  fi
-  echo "=== Building $1"
-  echo -n "Extracting"
-  cd "${WORK}" &&
-  { tar xv${DECOMPRESS}f "$FILE" || dienow
-  } | dotprogress
-  if [ -z "$2" ]
-  then
-    cd "$1"* || dienow
-  else
-    mkdir "$2"
-    cd "$2" || dienow
-  fi
-  export CURSRC="$1"
-  [ ! -z "$3" ] && CURSRC="$3"
-  export CURSRC=`echo "${WORK}/${CURSRC}"*`
-  [ ! -d "${CURSRC}" ] && dienow
-}
-
-# Setup
-
-umask 022
-unset CFLAGS CXXFLAGS
-
-# Find/create directories
-
-TOP=`pwd`
-export SOURCES="${TOP}/sources"
-export CROSS="${TOP}/build/cross-compiler-$ARCH"
-export WORK="${TOP}/build/temp"
-mkdir -p "${CROSS}" "${WORK}"
-
-[ $? -ne 0 ] && dienow
-
-# For bash: check the $PATH for new executables added after startup.
-set +h
-# Put the cross compiler in the path
-export PATH=${CROSS}/bin:"$PATH"
-
-# Which platform are we building for?
-
-export CROSS_HOST=i686-pc-linux-gnu
-export CROSS_TARGET=${ARCH}-unknown-linux-gnu
-
-export STAGE=build-cross
-
-# Import the config for this arch.
-
-. sources/configs/"$ARCH"
-
-# Build and install binutils
-
-setupfor binutils build-binutils
-"${CURSRC}/configure" --prefix="${CROSS}" --host=${CROSS_HOST} \
-	--target=${CROSS_TARGET} --with-lib-path=lib --disable-nls \
-	--disable-shared --disable-multilib $BINUTILS_FLAGS &&
-make configure-host &&
-make &&
-make install &&
-cd .. &&
-mkdir -p "${CROSS}/include" &&
-cp binutils-*/include/libiberty.h "${CROSS}/include" &&
-$CLEANUP binutils-* build-binutils
-
-[ $? -ne 0 ] && dienow
-
-# Build and install gcc
-
-setupfor gcc-core build-gcc gcc-
-"${CURSRC}/configure" --prefix="${CROSS}" --host=${CROSS_HOST} \
-	--target=${CROSS_TARGET} --disable-threads --enable-languages=c \
-	--disable-multilib --disable-nls --disable-shared $GCC_FLAGS
-	#--with-local-prefix="${CROSS}" \
-	# --enable-languages=c,c++ --enable-__cxa_atexit --enable-c99 \
-	# --enable-long-long --enable-threads=posix &&
-make all-gcc &&
-make install-gcc &&
-cd .. &&
-
-# Move the gcc internal libraries and headers somewhere sane.
-
-mkdir -p "${CROSS}"/gcc &&
-mv "${CROSS}"/lib/gcc/*/*/include "${CROSS}"/gcc/include &&
-mv "${CROSS}"/lib/gcc/*/* "${CROSS}"/gcc/lib &&
-$CLEANUP "${CURSRC}" build-gcc "${CROSS}"/{lib/gcc,gcc/lib/install-tools} &&
-
-# Build and install gcc wrapper script.
-
-GCCNAME="$(echo "${CROSS}"/bin/*-gcc)" &&
-mv "$GCCNAME" "${CROSS}"/bin/gcc-unwrapped &&
-gcc "${TOP}"/sources/toys/gcc-uClibc.c -Os -s -o "$GCCNAME"
-
-[ $? -ne 0 ] && dienow
-
-# Install the linux kernel, and kernel headers.
-
-setupfor linux
-# Configure kernel
-##mv "${WORK}"/config-linux .config &&
-##(yes "" | make ARCH="${KARCH}" oldconfig) &&
-# Install Linux kernel headers (for use by uClibc).
-make headers_install ARCH="${KARCH}" INSTALL_HDR_PATH="${CROSS}" &&
-# Build bootable kernel for target.
-##make ARCH="${KARCH}" CROSS_COMPILE="${CROSS_TARGET}"- &&
-##cp "${KERNEL_PATH}" "${CROSS}"/zImage &&
-cd .. &&
-$CLEANUP linux-*
-
-[ $? -ne 0 ] && dienow
-
-# Build and install uClibc
-
-setupfor uClibc
-cp "${WORK}"/config-uClibc .config &&
-(yes "" | make CROSS="${CROSS_TARGET}"- oldconfig) &&
-make CROSS="${CROSS_TARGET}"- KERNEL_SOURCE="${CROSS}" &&
-#make CROSS="${CROSS_TARGET}"- utils &&
-# The kernel headers are already installed, but uClibc's install will try to
-# be "helpful" and copy them over themselves, at which point hilarity ensues.
-# Make it not do that.
-rm include/{asm,asm-generic,linux} &&
-make CROSS="${CROSS_TARGET}"- KERNEL_SOURCE="${CROSS}"/ \
-	RUNTIME_PREFIX="${CROSS}"/ DEVEL_PREFIX="${CROSS}"/ \
-	install_runtime install_dev &&
-# The uClibc build uses ./include instead of ${CROSS}/include, so the symlinks
-# need to come back.  (Yes, it links against the _headers_ from the source,
-# but against the _libraries_ from the destination.  Hence needing to install
-# libc.so before building utils.)
-ln -s "${CROSS}"/include/linux include/linux &&
-ln -s "${CROSS}"/include/asm include/asm &&
-ln -s "${CROSS}"/include/asm-generic include/asm-generic &&
-make CROSS=${CROSS_TARGET}- RUNTIME_PREFIX="${CROSS}"/ install_utils &&
-cd .. &&
-$CLEANUP uClibc*
-
-[ $? -ne 0 ] && dienow
-
-# A quick hello world program to test the cross-compiler out.
-
-cat > "$WORK"/hello.c << 'EOF' &&
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
-  printf("Hello world!\n");
-  return 0;
-}
-EOF
-
-# Build hello.c dynamic, then static, to verify header/library paths.
-
-"$GCCNAME" -Os "$WORK"/hello.c -o "$WORK"/hello &&
-"$GCCNAME" -Os -static "$WORK"/hello.c -o "$WORK"/hello &&
-[ x"$(qemu-"${KARCH}" "${WORK}"/hello)" == x"Hello world!" ] &&
-echo Cross-toolchain seems to work.
-
-[ $? -ne 0 ] && dienow
-
-# Change the FSF's crazy names to something reasonable.
-
-cd "${CROSS}"/bin &&
-for i in "${ARCH}"-*
-do
-  strip "$i"
-  mv "$i" "${ARCH}"-"$(echo "$i" | sed 's/.*-//')"
-done
-
-cat > "${CROSS}"/README << "EOF" &&
-Cross compiler for $ARCH
-From http://landley.net/code/firmware
-
-To use: Add the \"bin\" directory to your \$PATH, and use \"$ARCH-gcc\" as
-your compiler.
-
-The syntax used to build the Linux kernel is:
-
-  make ARCH="${KARCH}" CROSS_COMPILE="${ARCH}"-
-
-EOF
-
-# Tar up the cross compiler.
-cd "${TOP}"
-tar cjvCf build cross-compiler-"${ARCH}".tar.bz2 cross-compiler-"${ARCH}" &&
-
-[ $? -ne 0 ] && dienow
--- a/cross-compiler.sh	Mon Dec 11 19:51:35 2006 -0500
+++ b/cross-compiler.sh	Mon Dec 11 21:06:19 2006 -0500
@@ -2,7 +2,6 @@
 
 # Get lots of predefined environment variables and shell functions.
 
-STAGE="build-cross"
 source include.sh
 
 # Build and install binutils
--- a/download.sh	Mon Dec 11 19:51:35 2006 -0500
+++ b/download.sh	Mon Dec 11 21:06:19 2006 -0500
@@ -3,17 +3,12 @@
 NO_ARCH=none
 source include.sh
 
-echo "$SOURCES"
-
 # Download everything we haven't already got a copy of.
 
 echo "=== Download source code." &&
 
 # Required for cross compile toolchain
 
-export STAGEDIR=sources/build-cross
-mkdir -p "$STAGEDIR"
-
 URL=http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.19.tar.bz2 \
 SHA1=c00d5891e2461bce45be51c1ef7846ee842792dd \
 download &&
@@ -38,9 +33,6 @@
 
 # Required for native build environment
 
-export STAGEDIR=sources/build-native &&
-mkdir -p "$STAGEDIR" &&
-
 URL=http://superb-east.dl.sourceforge.net/sourceforge/squashfs/squashfs3.1.tar.gz \
 SHA1=89d537fd18190402ff226ff885ddbc14f6227a9b \
 download &&
--- a/include.sh	Mon Dec 11 19:51:35 2006 -0500
+++ b/include.sh	Mon Dec 11 21:06:19 2006 -0500
@@ -5,10 +5,10 @@
   FILENAME=`echo "$URL" | sed 's .*/  '`
   BASENAME=`echo "$FILENAME" | sed -r -e 's/-*([0-9\.]|-rc)*(\.tar\..z2*)$/\2/'`
 
-  if [ ! -z "$STAGEDIR" ]
+  if [ ! -z "$LINKDIR" ]
   then
-    rm -f "$STAGEDIR/$BASENAME" 2> /dev/null
-    ln -s "$FROMSRC/$FILENAME" "$STAGEDIR/$BASENAME"
+    rm -f "$LINKDIR/$BASENAME" 2> /dev/null
+    ln -s "$FROMSRC/$FILENAME" "$LINKDIR/$BASENAME"
   fi
 
   # The extra "" is so we test the sha1sum after the last download.
@@ -72,7 +72,7 @@
 
 function setupfor()
 {
-  FILE="${SOURCES}/${STAGE}/$1"
+  FILE="${LINKDIR}/$1"
   if [ -f "${FILE}".tar.bz2 ]
   then
     FILE="${FILE}".tar.bz2
@@ -109,10 +109,11 @@
 TOP=`pwd`
 export SOURCES="${TOP}/sources"
 export SRCDIR="${SOURCES}/packages"
+export LINKDIR="${SOURCES}/build-links"
 export WORK="${TOP}/build/temp"
 export FROMSRC=../packages
 export CROSS_BASE="${TOP}/build/cross-compiler"
-mkdir -p "${SRCDIR}" "${WORK}"
+mkdir -p "${SRCDIR}" "${WORK}" "${LINKDIR}"
 
 # For bash: check the $PATH for new executables added after startup.
 set +h