coreboot-kgpe-d16/util/abuild/abuild
Uwe Hermann dabbf5777b Revert the image size increasing for abuild. It breaks more boards than
it fixes. It seems many of the other boards run out of space for the
payload.

Thus, this patch only increases the image size for the three boards

 - tyan/s2912
 - nvidia/l1_2pvv
 - gigabyte/m57sli

by adding a custom Config-abuild.lb file for each of them.

Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Stefan Reinauer <stepan@coresystems.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@2618 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2007-04-25 00:23:39 +00:00

526 lines
12 KiB
Bash
Executable file

#!/bin/bash
#
# LinuxBIOS autobuild
#
# This script builds LinuxBIOS images for all available targets.
#
# (C) 2004 by Stefan Reinauer <stepan@openbios.org>
# (C) 2006 by coresystems GmbH <info@coresystems.de>
#
# 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....
ABUILD_DATE="October 24, 2006"
ABUILD_VERSION="0.4"
# 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
TESTSUBMISSION="http://qa.linuxbios.org/deployment/send.php"
# 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/"`
trap interrupt INT
function interrupt
{
printf "\n$0: execution interrupted manually.\n"
if [ "$mode" == "xml" ]; then
printf "$0: deleting incomplete xml output file.\n"
fi
exit 1
}
function debug
{
test "$verbose" == "true" && printf "$*\n"
}
function xml
{
test "$mode" == "xml" && printf "$*\n" >> $XMLFILE
}
function xmlfile
{
test "$mode" == "xml" && {
printf '<![CDATA[\n'
cat $1
printf ']]>\n'
} >> $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.
# the --payload option expects a directory containing
# an executable shell script payload.sh
# Usage: payload.sh [VENDOR] [DEVICE]
# the script returns an absolute path to the payload binary.
if [ -x $payloads/payload.sh ]; then
PAYLOAD=`$payloads/payload.sh $VENDOR $MAINBOARD`
printf "Using payload $PAYLOAD\n"
fi
mkdir -p $TARGET
if [ -f $TARGCONFIG ]; then
cp $TARGCONFIG $TARGET/Config-${VENDOR}_${MAINBOARD}.lb
printf "Using existing test target $TARGCONFIG"
xml " <config>$TARGCONFIG</config>"
else
printf " Creating config file..."
xml " <config>autogenerated</config>"
( 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"
__COMPRESSION__
EOF
if [ "$TARCH" == i386 ] ; then
cat <<EOF
romimage "normal"
option USE_FALLBACK_IMAGE=0
option ROM_IMAGE_SIZE=0x17000
option LINUXBIOS_EXTRA_VERSION=".0-normal"
payload __PAYLOAD__
end
romimage "fallback"
option USE_FALLBACK_IMAGE=1
option ROM_IMAGE_SIZE=0x17000
option LINUXBIOS_EXTRA_VERSION=".0-fallback"
payload __PAYLOAD__
end
buildrom ./linuxbios.rom ROM_SIZE "normal" "fallback"
EOF
else
cat <<EOF
romimage "only"
option LINUXBIOS_EXTRA_VERSION=".0"
payload __PAYLOAD__
end
buildrom ./linuxbios.rom ROM_SIZE "only"
EOF
fi
) > $TARGET/Config-${VENDOR}_${MAINBOARD}.lb
fi
if [ "`which lzma`" != "" -a "$PAYLOAD" != /dev/null ]; then
COMPRESSION="option CONFIG_COMPRESSED_PAYLOAD_LZMA=1"
else
COMPRESSION="# no compression"
fi
sed -i.pre -e s,VENDOR,$VENDOR,g \
-e s,MAINBOARD,$MAINBOARD,g \
-e s,payload\ __PAYLOAD__,payload\ $PAYLOAD,g \
-e s,CROSSCC,"$CC",g \
-e s,CROSS_PREFIX,"$CROSS_COMPILE",g \
-e s,CROSS_HOSTCC,"$HOSTCC",g \
-e s,__COMPRESSION__,"$COMPRESSION",g \
$TARGET/Config-${VENDOR}_${MAINBOARD}.lb
printf " ok\n"
}
function create_builddir
{
VENDOR=$1
MAINBOARD=$2
printf " 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
printf "ok\n"
xml " <builddir>ok</builddir>"
xml ""
return 0
else
printf "FAILED! Log excerpt:\n"
xml " <builddir>failed</builddir>"
xml " <log>"
xmlfile $build_dir/config.log
xml " </log>"
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
printf " 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 " <compile>ok</compile>"
xml " <compiletime>${duration}s</compiletime>"
printf "ok\n" > compile.status
printf "ok. (took ${duration}s)\n"
cd $CURR
return 0
else
xml " <compile>failed</compile>"
xml " <compiletime>${duration}s</compiletime>"
xml " <log>"
xmlfile make.log
xml " </log>"
printf "FAILED after ${duration}s! Log excerpt:\n"
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=''
printf "Processing mainboard/$VENDOR/$MAINBOARD"
xml "<mainboard>"
xml ""
xml " <vendor>$VENDOR</vendor>"
xml " <device>$MAINBOARD</device>"
xml ""
xml " <architecture>$TARCH</architecture>"
xml ""
[ -r "$LBROOT/src/mainboard/${VENDOR}/${MAINBOARD}/abuild.info" ] && \
source $LBROOT/src/mainboard/${VENDOR}/${MAINBOARD}/abuild.info
if [ "$ARCH" == "$TARCH" ]; then
printf " ($TARCH: ok)\n"
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
printf " ($TARCH: skipped, we're $ARCH)\n\n"
xml " <status>notbuilt</status>"
xml ""
xml "</mainboard>"
return 0
else
printf " ($TARCH: ok, we're $ARCH)\n"
xml " <compiler>"
xml " <path>`which ${CROSS_COMPILE}gcc`</path>"
xml " <version>`${CROSS_COMPILE}gcc --version | head -1`</version>"
xml " </compiler>"
xml ""
fi
fi
built_successfully $VENDOR $MAINBOARD && \
{
printf " ( mainboard/$VENDOR/$MAINBOARD previously ok )\n\n"
xml " <status>previouslyok</status>"
xml ""
xml "</mainboard>"
return 0
}
build_broken $VENDOR $MAINBOARD || \
{
printf " ( broken mainboard/$VENDOR/$MAINBOARD skipped )\n\n"
xml " <status>knownbroken</status>"
xml ""
xml "</mainboard>"
return 0
}
create_buildenv $VENDOR $MAINBOARD
if [ $? -eq 0 ]; then
compile_target $VENDOR $MAINBOARD &&
xml " <status>ok</status>" ||
xml "<status>broken</status>"
fi
xml ""
xml "</mainboard>"
printf "\n"
}
function test_target
{
VENDOR=$1
MAINBOARD=$2
if [ "$hwtest" != "true" ]; then
return 0
fi
# image does not exist. we silently skip the patch.
if [ ! -r "$TARGET/${VENDOR}_${MAINBOARD}/linuxbios.rom" ]; then
return 0
fi
which curl &> /dev/null
if [ $? != 0 ]; then
printf "curl is not installed but required for test submission. skipping test.\n\n"
return 0
fi
CURR=`pwd`
if [ -r "$TARGET/${VENDOR}_${MAINBOARD}/tested" ]; then
printf "Testing image for board $VENDOR $MAINBOARD skipped (previously submitted).\n\n"
return 0
fi
# touch $TARGET/${VENDOR}_${MAINBOARD}/tested
printf "Submitting image for board $VENDOR $MAINBOARD to test system...\n"
curl -f -F "romfile=@$TARGET/${VENDOR}_${MAINBOARD}/linuxbios.rom" \
-F "mode=abuild" -F "mainboard=${VENDOR}_${MAINBOARD}" -F "submit=Upload" \
"http://qa.linuxbios.org/deployment/send.php"
printf "\n"
return 0
}
function myhelp
{
printf "Usage: $0 [-v] [-a] [-b] [-t <vendor/board>] [-p <dir>] [lbroot]\n"
printf " $0 [-V|--version]\n"
printf " $0 [-h|--help]\n\n"
printf "Options:\n"
printf " [-v|--verbose] print more messages\n"
printf " [-a|--all] build previously succeeded ports as well\n"
printf " [-b|--broken] attempt to build ports that are known broken\n"
printf " [-t|--target <vendor/board>] attempt to build target vendor/board only\n"
printf " [-p|--payloads <dir>] use payloads in <dir> to build images\n"
printf " [-V|--version] print version number and exit\n"
printf " [-h|--help] print this help and exit\n"
printf " [-x|--xml] write xml log file \n"
printf " (defaults to $XMLFILE)\n"
printf " [-T|--test] submit image(s) to automated test system\n"
printf " [lbroot] absolute path to LinuxBIOS sources\n"
printf " (defaults to $LBROOT)\n\n"
}
function myversion
{
cat << EOF
LinuxBIOS autobuild v$ABUILD_VERSION ($ABUILD_DATE)
Copyright (C) 2004 by Stefan Reinauer <stepan@openbios.org>
Copyright (C) 2006 by coresystems GmbH <info@coresystems.de>
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
}
# default options
target=""
buildall=false
LBROOT=$( cd ../..; pwd )
verbose=false
# parse parameters
args=`getopt -l version,verbose,help,all,target:,broken,payloads:,test Vvhat:bp:T -- "$@"`
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; myversion; myhelp; exit 0;;
-p|--payloads) shift; payloads="$1"; shift;;
-T|--test) shift; hwtest=true;;
--) shift; break;;
-*) printf "Invalid option\n\n"; myhelp; exit 1;;
*) break;;
esac
done
# /path/to/freebios2/
test -z "$1" || LBROOT=$1
debug "LBROOT=$LBROOT"
xml '<?xml version="1.0" encoding="utf-8"?>'
xml '<abuild>'
if [ "$target" != "" ]; then
# build a single board
VENDOR=`printf $target|cut -f1 -d/`
MAINBOARD=`printf $target|cut -f2 -d/`
build_target $VENDOR $MAINBOARD
test_target $VENDOR $MAINBOARD
else
# build all boards per default
for VENDOR in $( vendors ); do
for MAINBOARD in $( mainboards $VENDOR ); do
build_target $VENDOR $MAINBOARD
test_target $VENDOR $MAINBOARD
done
done
fi
xml '</abuild>'