From 2e3757d11c565a8fe68dc2a2c34975e98304533c Mon Sep 17 00:00:00 2001 From: Stefan Reinauer Date: Mon, 25 Sep 2006 09:15:52 +0000 Subject: rename abuild.sh to abuild. git-svn-id: svn://svn.coreboot.org/coreboot/trunk@2434 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1 --- util/abuild/abuild | 457 ++++++++++++++++++++++++++++++++++++++++++++++++++ util/abuild/abuild.sh | 457 -------------------------------------------------- 2 files changed, 457 insertions(+), 457 deletions(-) create mode 100755 util/abuild/abuild delete mode 100755 util/abuild/abuild.sh (limited to 'util') diff --git a/util/abuild/abuild b/util/abuild/abuild new file mode 100755 index 0000000000..53b492bfe0 --- /dev/null +++ b/util/abuild/abuild @@ -0,0 +1,457 @@ +#!/bin/bash +# +# LinuxBIOS autobuild +# +# This script builds LinuxBIOS images for all available targets. +# +# (C) 2004 by Stefan Reinauer +# (C) 2006 by coresystems GmbH +# +# This file is subject to the terms and conditions of the GNU General +# Public License. See the file COPYING in the main directory of this +# archive for more details. +# + +#set -x # Turn echo on.... + +# Where shall we place all the build trees? +TARGET=$( pwd )/linuxbios-builds +XMLFILE=$( pwd )/abuild.xml + +# path to payload. Should be more generic +PAYLOAD=/dev/null + +# Lines of error context to be printed in FAILURE case +CONTEXT=5 + +# One might want to adjust these in case of cross compiling +MAKE="make" +PYTHON=python + +# this can be changed to xml by -x +mode=text + +ARCH=`uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \ + -e s/arm.*/arm/ -e s/sa110/arm/ -e s/x86_64/amd64/ \ + -e "s/Power Macintosh/ppc/"` + +function debug +{ + test "$verbose" == "true" && echo $* +} + +function xml +{ + test "$mode" == "xml" && echo "$*" >> $XMLFILE +} + +function xmlfile +{ + test "$mode" == "xml" && { echo ''; } >> $XMLFILE +} + + + +function vendors +{ + # make this a function so we can easily select + # without breaking readability + ls -1 "$LBROOT/src/mainboard" | grep -v CVS +} + +function mainboards +{ + # make this a function so we can easily select + # without breaking readability + + VENDOR=$1 + + ls -1 $LBROOT/src/mainboard/$VENDOR | grep -v CVS +} + +function architecture +{ + VENDOR=$1 + MAINBOARD=$2 + cat $LBROOT/src/mainboard/$VENDOR/$MAINBOARD/Config.lb | \ + grep ^arch | cut -f 2 -d\ +} + +function create_config +{ + VENDOR=$1 + MAINBOARD=$2 + TARCH=$( architecture $VENDOR $MAINBOARD ) + TARGCONFIG=$LBROOT/targets/$VENDOR/$MAINBOARD/Config-abuild.lb + + # get a working payload for the board if we have one. + + if [ -x $payloads/payload.sh ]; then + PAYLOAD=`$payloads/payload.sh $VENDOR $MAINBOARD` + echo "Using custom payload $PAYLOAD" + fi + + mkdir -p $TARGET + + if [ -f $TARGCONFIG ]; then + cp $TARGCONFIG $TARGET/Config-${VENDOR}_${MAINBOARD}.lb + echo -n "Using existing test target $TARGCONFIG" + xml " $TARGCONFIG" + else + + echo -n " Creating config file..." + xml " autogenerated" + ( cat << EOF +# This will make a target directory of ./VENDOR_MAINBOARD + +target VENDOR_MAINBOARD +mainboard VENDOR/MAINBOARD + +option CC="CROSSCC" +option CROSS_COMPILE="CROSS_PREFIX" +option HOSTCC="CROSS_HOSTCC" + +EOF + if [ "$TARCH" == i386 ] ; then + cat < $TARGET/Config-${VENDOR}_${MAINBOARD}.lb + fi + + sed -i.pre -e s,VENDOR,$VENDOR,g \ + -e s,MAINBOARD,$MAINBOARD,g \ + -e s,PAYLOAD,$PAYLOAD,g \ + -e s,CROSSCC,"$CC",g \ + -e s,CROSS_PREFIX,"$CROSS_COMPILE",g \ + -e s,CROSS_HOSTCC,"$HOSTCC",g \ + $TARGET/Config-${VENDOR}_${MAINBOARD}.lb + + echo " ok" +} + +function create_builddir +{ + VENDOR=$1 + MAINBOARD=$2 + + echo -n " Creating builddir..." + + target_dir=$TARGET + config_dir=$LBROOT/util/newconfig + yapps2_py=$config_dir/yapps2.py + config_g=$config_dir/config.g + config_lb=Config-${VENDOR}_${MAINBOARD}.lb + + cd $target_dir + + build_dir=${VENDOR}_${MAINBOARD} + config_py=$build_dir/config.py + + if [ ! -d $build_dir ] ; then + mkdir -p $build_dir + fi + if [ ! -f $config_py ]; then + $PYTHON $yapps2_py $config_g $config_py &> $build_dir/py.log + fi + + # make sure config.py is up-to-date + + export PYTHONPATH=$config_dir + $PYTHON $config_py $config_lb $LBROOT &> $build_dir/config.log + if [ $? -eq 0 ]; then + echo "ok" + xml " ok" + xml "" + return 0 + else + echo "FAILED! Log excerpt:" + xml " failed" + xml " " + xmlfile $build_dir/config.log + xml " " + xml "" + tail -n $CONTEXT $build_dir/config.log + return 1 + fi +} + +function create_buildenv +{ + VENDOR=$1 + MAINBOARD=$2 + create_config $VENDOR $MAINBOARD + create_builddir $VENDOR $MAINBOARD +} + +function compile_target +{ + VENDOR=$1 + MAINBOARD=$2 + + echo -n " Compiling image .." + CURR=$( pwd ) + cd $TARGET/${VENDOR}_${MAINBOARD} + stime=`date +%s` + eval $MAKE &> make.log + ret=$? + etime=`date +%s` + duration=$(( $etime - $stime )) + if [ $ret -eq 0 ]; then + xml " ok" + xml " ${duration}s" + echo "ok" > compile.status + echo "ok. (took ${duration}s)" + cd $CURR + return 0 + else + xml " failed" + xml " ${duration}s" + xml " " + xmlfile make.log + xml " " + + echo "FAILED after ${duration}s! Log excerpt:" + tail -n $CONTEXT make.log + cd $CURR + return 1 + fi +} + +function built_successfully +{ + CURR=`pwd` + status="fail" + if [ -d "$TARGET/${VENDOR}_${MAINBOARD}" ]; then + cd $TARGET/${VENDOR}_${MAINBOARD} + if [ -r compile.status ] ; then + status=`cat compile.status` + fi + cd $CURR + fi + [ "$buildall" != "true" -a "$status" == "ok" ] +} + +function build_broken +{ + CURR=`pwd` + status="yes" + [ -r "$LBROOT/src/mainboard/${VENDOR}/${MAINBOARD}/BROKEN" ] && status="no" + [ "$buildbroken" == "true" -o "$status" == "yes" ] +} + +function build_target +{ + VENDOR=$1 + MAINBOARD=$2 + TARCH=$( architecture $VENDOR $MAINBOARD ) + + # default setting + CC='$(CROSS_COMPILE)gcc' + HOSTCC='gcc' + CROSS_COMPILE='' + + echo -n "Processing mainboard/$VENDOR/$MAINBOARD" + + xml "" + xml "" + xml " $VENDOR" + xml " $MAINBOARD" + xml "" + xml " $TARCH" + xml "" + + [ -r "$LBROOT/src/mainboard/${VENDOR}/${MAINBOARD}/abuild.info" ] && \ + source $LBROOT/src/mainboard/${VENDOR}/${MAINBOARD}/abuild.info + + if [ "$ARCH" == "$TARCH" ]; then + echo " ($TARCH: ok)" + else + found_crosscompiler=false + if [ "$ARCH" == amd64 -a "$TARCH" == i386 ]; then + CC="gcc -m32" + found_crosscompiler=true + fi + if [ "$ARCH" == ppc64 -a "$TARCH" == ppc ]; then + CC="gcc -m32" + found_crosscompiler=true + fi + if [ "$found_crosscompiler" == "false" -a "$TARCH" == ppc ];then + for prefix in powerpc-eabi- powerpc-linux- ppc_74xx- \ + powerpc-7450-linux-gnu-; do + if ${prefix}gcc --version > /dev/null 2> /dev/null ; then + found_crosscompiler=true + CROSS_COMPILE=$prefix + fi + done + fi + + + # TBD: look for suitable cross compiler suite + # cross-$TARCH-gcc and cross-$TARCH-ld + + # Check result: + if [ $found_crosscompiler == "false" ]; then + echo " ($TARCH: skipped, we're $ARCH)" + echo + xml " notbuilt" + xml "" + xml "" + + return 0 + else + echo " ($TARCH: ok, we're $ARCH)" + xml " " + xml " `which ${CROSS_COMPILE}gcc`" + xml " `${CROSS_COMPILE}gcc --version | head -1`" + xml " " + xml "" + fi + fi + + built_successfully $VENDOR $MAINBOARD && \ + { + echo " ( mainboard/$VENDOR/$MAINBOARD previously ok )" + echo + xml " previouslyok" + xml "" + xml "" + return 0 + } + + build_broken $VENDOR $MAINBOARD || \ + { + echo " ( broken mainboard/$VENDOR/$MAINBOARD skipped )" + echo + xml " knownbroken" + xml "" + xml "" + return 0 + } + + create_buildenv $VENDOR $MAINBOARD + if [ $? -eq 0 ]; then + compile_target $VENDOR $MAINBOARD && + xml "ok" || + xml "broken" + fi + + xml "" + xml "" + + echo +} + +function myhelp +{ + echo "Usage: $0 [-v] [-a] [-b] [-t ] [-p ] [lbroot]" + echo " $0 [-V|--version]" + echo " $0 [-h|--help]" + echo + echo "Options:" + echo " [-v|--verbose] print more messages" + echo " [-a|--all] build previously succeeded ports as well" + echo " [-b|--broken] attempt to build ports that are known broken" + echo " [-t|--target ] attempt to build target vendor/board only" + echo " [-p|--payloads ] use payloads in to build images" + echo " [-V|--version] print version number and exit" + echo " [-h|--help] print this help and exit" + echo " [-x|--xml] write xml log file " + echo " (defaults to $XMLFILE)" + echo " [lbroot] absolute path to LinuxBIOS sources" + echo " (defaults to $LBROOT)" + echo +} + +function myversion +{ + cat << EOF + +LinuxBIOS autobuild: V0.3. + +Copyright (C) 2004 by Stefan Reinauer +Copyright (C) 2006 by coresystems GmbH +This program is free software; you may redistribute it under the terms +of the GNU General Public License. This program has absolutely no +warranty. + +EOF + myhelp +} + +# default options +target="" +buildall=false +LBROOT=$( cd ../..; pwd ) +verbose=false + +# parse parameters +args=`getopt -l version,verbose,help,all,target:,broken,payloads: Vvhat:bp: -- "$@"` + +if [ $? != 0 ]; then + myhelp + exit 1 +fi + +eval set "$args" +while true ; do + case "$1" in + -x|--xml) shift; mode=xml; rm -f $XMLFILE ;; + -t|--target) shift; target="$1"; shift;; + -a|--all) shift; buildall=true;; + -b|--broken) shift; buildbroken=true;; + -v|--verbose) shift; verbose=true;; + -V|--version) shift; myversion; exit 0;; + -h|--help) shift; myhelp; exit 0;; + -p|--payloads) shift; payloads="$1"; shift;; + --) shift; break;; + -*) echo -e "Invalid option\n"; myhelp; exit 1;; + *) break;; + esac +done + +# /path/to/freebios2/ +test -z "$1" || LBROOT=$1 + +debug "LBROOT=$LBROOT" + +xml '' +xml '' + +if [ "$target" != "" ]; then + # build a single board + VENDOR=`echo $target|cut -f1 -d/` + MAINBOARD=`echo $target|cut -f2 -d/` + build_target $VENDOR $MAINBOARD +else + # build all boards per default + for VENDOR in $( vendors ); do + for MAINBOARD in $( mainboards $VENDOR ); do + build_target $VENDOR $MAINBOARD + done + done +fi +xml '' + diff --git a/util/abuild/abuild.sh b/util/abuild/abuild.sh deleted file mode 100755 index 53b492bfe0..0000000000 --- a/util/abuild/abuild.sh +++ /dev/null @@ -1,457 +0,0 @@ -#!/bin/bash -# -# LinuxBIOS autobuild -# -# This script builds LinuxBIOS images for all available targets. -# -# (C) 2004 by Stefan Reinauer -# (C) 2006 by coresystems GmbH -# -# This file is subject to the terms and conditions of the GNU General -# Public License. See the file COPYING in the main directory of this -# archive for more details. -# - -#set -x # Turn echo on.... - -# Where shall we place all the build trees? -TARGET=$( pwd )/linuxbios-builds -XMLFILE=$( pwd )/abuild.xml - -# path to payload. Should be more generic -PAYLOAD=/dev/null - -# Lines of error context to be printed in FAILURE case -CONTEXT=5 - -# One might want to adjust these in case of cross compiling -MAKE="make" -PYTHON=python - -# this can be changed to xml by -x -mode=text - -ARCH=`uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \ - -e s/arm.*/arm/ -e s/sa110/arm/ -e s/x86_64/amd64/ \ - -e "s/Power Macintosh/ppc/"` - -function debug -{ - test "$verbose" == "true" && echo $* -} - -function xml -{ - test "$mode" == "xml" && echo "$*" >> $XMLFILE -} - -function xmlfile -{ - test "$mode" == "xml" && { echo ''; } >> $XMLFILE -} - - - -function vendors -{ - # make this a function so we can easily select - # without breaking readability - ls -1 "$LBROOT/src/mainboard" | grep -v CVS -} - -function mainboards -{ - # make this a function so we can easily select - # without breaking readability - - VENDOR=$1 - - ls -1 $LBROOT/src/mainboard/$VENDOR | grep -v CVS -} - -function architecture -{ - VENDOR=$1 - MAINBOARD=$2 - cat $LBROOT/src/mainboard/$VENDOR/$MAINBOARD/Config.lb | \ - grep ^arch | cut -f 2 -d\ -} - -function create_config -{ - VENDOR=$1 - MAINBOARD=$2 - TARCH=$( architecture $VENDOR $MAINBOARD ) - TARGCONFIG=$LBROOT/targets/$VENDOR/$MAINBOARD/Config-abuild.lb - - # get a working payload for the board if we have one. - - if [ -x $payloads/payload.sh ]; then - PAYLOAD=`$payloads/payload.sh $VENDOR $MAINBOARD` - echo "Using custom payload $PAYLOAD" - fi - - mkdir -p $TARGET - - if [ -f $TARGCONFIG ]; then - cp $TARGCONFIG $TARGET/Config-${VENDOR}_${MAINBOARD}.lb - echo -n "Using existing test target $TARGCONFIG" - xml " $TARGCONFIG" - else - - echo -n " Creating config file..." - xml " autogenerated" - ( cat << EOF -# This will make a target directory of ./VENDOR_MAINBOARD - -target VENDOR_MAINBOARD -mainboard VENDOR/MAINBOARD - -option CC="CROSSCC" -option CROSS_COMPILE="CROSS_PREFIX" -option HOSTCC="CROSS_HOSTCC" - -EOF - if [ "$TARCH" == i386 ] ; then - cat < $TARGET/Config-${VENDOR}_${MAINBOARD}.lb - fi - - sed -i.pre -e s,VENDOR,$VENDOR,g \ - -e s,MAINBOARD,$MAINBOARD,g \ - -e s,PAYLOAD,$PAYLOAD,g \ - -e s,CROSSCC,"$CC",g \ - -e s,CROSS_PREFIX,"$CROSS_COMPILE",g \ - -e s,CROSS_HOSTCC,"$HOSTCC",g \ - $TARGET/Config-${VENDOR}_${MAINBOARD}.lb - - echo " ok" -} - -function create_builddir -{ - VENDOR=$1 - MAINBOARD=$2 - - echo -n " Creating builddir..." - - target_dir=$TARGET - config_dir=$LBROOT/util/newconfig - yapps2_py=$config_dir/yapps2.py - config_g=$config_dir/config.g - config_lb=Config-${VENDOR}_${MAINBOARD}.lb - - cd $target_dir - - build_dir=${VENDOR}_${MAINBOARD} - config_py=$build_dir/config.py - - if [ ! -d $build_dir ] ; then - mkdir -p $build_dir - fi - if [ ! -f $config_py ]; then - $PYTHON $yapps2_py $config_g $config_py &> $build_dir/py.log - fi - - # make sure config.py is up-to-date - - export PYTHONPATH=$config_dir - $PYTHON $config_py $config_lb $LBROOT &> $build_dir/config.log - if [ $? -eq 0 ]; then - echo "ok" - xml " ok" - xml "" - return 0 - else - echo "FAILED! Log excerpt:" - xml " failed" - xml " " - xmlfile $build_dir/config.log - xml " " - xml "" - tail -n $CONTEXT $build_dir/config.log - return 1 - fi -} - -function create_buildenv -{ - VENDOR=$1 - MAINBOARD=$2 - create_config $VENDOR $MAINBOARD - create_builddir $VENDOR $MAINBOARD -} - -function compile_target -{ - VENDOR=$1 - MAINBOARD=$2 - - echo -n " Compiling image .." - CURR=$( pwd ) - cd $TARGET/${VENDOR}_${MAINBOARD} - stime=`date +%s` - eval $MAKE &> make.log - ret=$? - etime=`date +%s` - duration=$(( $etime - $stime )) - if [ $ret -eq 0 ]; then - xml " ok" - xml " ${duration}s" - echo "ok" > compile.status - echo "ok. (took ${duration}s)" - cd $CURR - return 0 - else - xml " failed" - xml " ${duration}s" - xml " " - xmlfile make.log - xml " " - - echo "FAILED after ${duration}s! Log excerpt:" - tail -n $CONTEXT make.log - cd $CURR - return 1 - fi -} - -function built_successfully -{ - CURR=`pwd` - status="fail" - if [ -d "$TARGET/${VENDOR}_${MAINBOARD}" ]; then - cd $TARGET/${VENDOR}_${MAINBOARD} - if [ -r compile.status ] ; then - status=`cat compile.status` - fi - cd $CURR - fi - [ "$buildall" != "true" -a "$status" == "ok" ] -} - -function build_broken -{ - CURR=`pwd` - status="yes" - [ -r "$LBROOT/src/mainboard/${VENDOR}/${MAINBOARD}/BROKEN" ] && status="no" - [ "$buildbroken" == "true" -o "$status" == "yes" ] -} - -function build_target -{ - VENDOR=$1 - MAINBOARD=$2 - TARCH=$( architecture $VENDOR $MAINBOARD ) - - # default setting - CC='$(CROSS_COMPILE)gcc' - HOSTCC='gcc' - CROSS_COMPILE='' - - echo -n "Processing mainboard/$VENDOR/$MAINBOARD" - - xml "" - xml "" - xml " $VENDOR" - xml " $MAINBOARD" - xml "" - xml " $TARCH" - xml "" - - [ -r "$LBROOT/src/mainboard/${VENDOR}/${MAINBOARD}/abuild.info" ] && \ - source $LBROOT/src/mainboard/${VENDOR}/${MAINBOARD}/abuild.info - - if [ "$ARCH" == "$TARCH" ]; then - echo " ($TARCH: ok)" - else - found_crosscompiler=false - if [ "$ARCH" == amd64 -a "$TARCH" == i386 ]; then - CC="gcc -m32" - found_crosscompiler=true - fi - if [ "$ARCH" == ppc64 -a "$TARCH" == ppc ]; then - CC="gcc -m32" - found_crosscompiler=true - fi - if [ "$found_crosscompiler" == "false" -a "$TARCH" == ppc ];then - for prefix in powerpc-eabi- powerpc-linux- ppc_74xx- \ - powerpc-7450-linux-gnu-; do - if ${prefix}gcc --version > /dev/null 2> /dev/null ; then - found_crosscompiler=true - CROSS_COMPILE=$prefix - fi - done - fi - - - # TBD: look for suitable cross compiler suite - # cross-$TARCH-gcc and cross-$TARCH-ld - - # Check result: - if [ $found_crosscompiler == "false" ]; then - echo " ($TARCH: skipped, we're $ARCH)" - echo - xml " notbuilt" - xml "" - xml "" - - return 0 - else - echo " ($TARCH: ok, we're $ARCH)" - xml " " - xml " `which ${CROSS_COMPILE}gcc`" - xml " `${CROSS_COMPILE}gcc --version | head -1`" - xml " " - xml "" - fi - fi - - built_successfully $VENDOR $MAINBOARD && \ - { - echo " ( mainboard/$VENDOR/$MAINBOARD previously ok )" - echo - xml " previouslyok" - xml "" - xml "" - return 0 - } - - build_broken $VENDOR $MAINBOARD || \ - { - echo " ( broken mainboard/$VENDOR/$MAINBOARD skipped )" - echo - xml " knownbroken" - xml "" - xml "" - return 0 - } - - create_buildenv $VENDOR $MAINBOARD - if [ $? -eq 0 ]; then - compile_target $VENDOR $MAINBOARD && - xml "ok" || - xml "broken" - fi - - xml "" - xml "" - - echo -} - -function myhelp -{ - echo "Usage: $0 [-v] [-a] [-b] [-t ] [-p ] [lbroot]" - echo " $0 [-V|--version]" - echo " $0 [-h|--help]" - echo - echo "Options:" - echo " [-v|--verbose] print more messages" - echo " [-a|--all] build previously succeeded ports as well" - echo " [-b|--broken] attempt to build ports that are known broken" - echo " [-t|--target ] attempt to build target vendor/board only" - echo " [-p|--payloads ] use payloads in to build images" - echo " [-V|--version] print version number and exit" - echo " [-h|--help] print this help and exit" - echo " [-x|--xml] write xml log file " - echo " (defaults to $XMLFILE)" - echo " [lbroot] absolute path to LinuxBIOS sources" - echo " (defaults to $LBROOT)" - echo -} - -function myversion -{ - cat << EOF - -LinuxBIOS autobuild: V0.3. - -Copyright (C) 2004 by Stefan Reinauer -Copyright (C) 2006 by coresystems GmbH -This program is free software; you may redistribute it under the terms -of the GNU General Public License. This program has absolutely no -warranty. - -EOF - myhelp -} - -# default options -target="" -buildall=false -LBROOT=$( cd ../..; pwd ) -verbose=false - -# parse parameters -args=`getopt -l version,verbose,help,all,target:,broken,payloads: Vvhat:bp: -- "$@"` - -if [ $? != 0 ]; then - myhelp - exit 1 -fi - -eval set "$args" -while true ; do - case "$1" in - -x|--xml) shift; mode=xml; rm -f $XMLFILE ;; - -t|--target) shift; target="$1"; shift;; - -a|--all) shift; buildall=true;; - -b|--broken) shift; buildbroken=true;; - -v|--verbose) shift; verbose=true;; - -V|--version) shift; myversion; exit 0;; - -h|--help) shift; myhelp; exit 0;; - -p|--payloads) shift; payloads="$1"; shift;; - --) shift; break;; - -*) echo -e "Invalid option\n"; myhelp; exit 1;; - *) break;; - esac -done - -# /path/to/freebios2/ -test -z "$1" || LBROOT=$1 - -debug "LBROOT=$LBROOT" - -xml '' -xml '' - -if [ "$target" != "" ]; then - # build a single board - VENDOR=`echo $target|cut -f1 -d/` - MAINBOARD=`echo $target|cut -f2 -d/` - build_target $VENDOR $MAINBOARD -else - # build all boards per default - for VENDOR in $( vendors ); do - for MAINBOARD in $( mainboards $VENDOR ); do - build_target $VENDOR $MAINBOARD - done - done -fi -xml '' - -- cgit v1.2.3