240ef7c769
instead of coreboot.strip. That fixes the normal image because the calculations for its offset in the ROM match reality again. This requires changes in CBFS configurations to minimize the bootblock size. These are also done for CBFS boards. Other than this a couple of minor fixes are in this patch: - make asus/m2v-mx_se build with abuild with a crosscompiler - move CONFIG_CBFS for hp/dl145_g3 to Options.lb as it's done everywhere else - change the default config of abuild to not provide ROM_IMAGE_SIZE values for the images in a CBFS configuration - change abuild's crosscompile autodetection to not try to use "i386-elf-i386-elf-gcc" (which is bogus) Except for the latter two abuild changes (both in util/abuild/abuild), they're available as patch set on the mailing list in a mail from 2009-06-05 titled [PATCH]es to get normal image to work again with CBFS The changes in util/abuild/abuild are trivial and abuild tested. As discussed on the list, targets/hp/dl145_g3/Config-abuild.lb is deleted, now that Config.lb works again. Signed-off-by: Patrick Georgi <patrick.georgi@coresystems.de> Acked-by: Ronald G. Minnich <rminnich@gmail.com> Acked-by: Uwe Hermann <uwe@hermann-uwe.de> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@4344 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
676 lines
16 KiB
Bash
Executable file
676 lines
16 KiB
Bash
Executable file
#!/bin/bash
|
|
#
|
|
# coreboot autobuild
|
|
#
|
|
# This script builds coreboot images for all available targets.
|
|
#
|
|
# (C) 2004 by Stefan Reinauer <stepan@openbios.org>
|
|
# (C) 2006-2009 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="April 10th, 2009"
|
|
ABUILD_VERSION="0.8.1"
|
|
|
|
# Where shall we place all the build trees?
|
|
TARGET=$( pwd )/coreboot-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.coreboot.org/deployment/send.php"
|
|
|
|
# Number of CPUs to compile on per default
|
|
cpus=1
|
|
|
|
# Configure-only mode
|
|
configureonly=0
|
|
|
|
# One might want to adjust these in case of cross compiling
|
|
for i in make gmake gnumake nonexistant_make; do
|
|
$i --version 2>/dev/null |grep "GNU Make" >/dev/null && break
|
|
done
|
|
if [ "$i" = "nonexistant_make" ]; then
|
|
echo No GNU Make found.
|
|
exit 1
|
|
fi
|
|
MAKE=$i
|
|
PYTHON=python
|
|
|
|
# this can be changed to xml by -x
|
|
mode=text
|
|
|
|
# silent mode.. no compiler calls, only warnings in the log files.
|
|
# this is disabled per default but can be enabled with -s
|
|
silent=
|
|
|
|
# clang mode enabled by -sb option.
|
|
scanbuild=false
|
|
|
|
# stackprotect mode enabled by -ns option.
|
|
stackprotect=false
|
|
|
|
# loglevel changed with -l / --loglevel option
|
|
loglevel=default
|
|
|
|
ARCH=`uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
|
|
-e s/i86pc/i386/ \
|
|
-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
|
|
ARCH=`cat $LBROOT/src/mainboard/$VENDOR/$MAINBOARD/Config.lb | \
|
|
grep ^arch | cut -f 2 -d\ `
|
|
echo $ARCH | sed s/ppc/powerpc/
|
|
}
|
|
|
|
function create_config
|
|
{
|
|
VENDOR=$1
|
|
MAINBOARD=$2
|
|
CONFIG=$3
|
|
TARCH=$( architecture $VENDOR $MAINBOARD )
|
|
TARGCONFIG=$LBROOT/targets/$VENDOR/$MAINBOARD/Config-abuild.lb
|
|
|
|
if [ "$CONFIG" != "" ]; then
|
|
TARGCONFIG=$LBROOT/targets/$VENDOR/$MAINBOARD/$CONFIG
|
|
fi
|
|
|
|
# get a working payload for the board if we have one.
|
|
# the --payload option expects a directory containing
|
|
# a shell script payload.sh
|
|
# Usage: payload.sh [VENDOR] [DEVICE]
|
|
# the script returns an absolute path to the payload binary.
|
|
|
|
if [ -f $payloads/payload.sh ]; then
|
|
PAYLOAD=`sh $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__
|
|
__LOGLEVEL__
|
|
|
|
EOF
|
|
if [ "$TARCH" == i386 ] ; then
|
|
cat <<EOF
|
|
romimage "normal"
|
|
option USE_FALLBACK_IMAGE=0
|
|
if CONFIG_CBFS
|
|
else
|
|
option ROM_IMAGE_SIZE=0x17000
|
|
end
|
|
option COREBOOT_EXTRA_VERSION=".0-normal"
|
|
payload __PAYLOAD__
|
|
end
|
|
|
|
romimage "fallback"
|
|
option USE_FALLBACK_IMAGE=1
|
|
if CONFIG_CBFS
|
|
else
|
|
option ROM_IMAGE_SIZE=0x17000
|
|
end
|
|
option COREBOOT_EXTRA_VERSION=".0-fallback"
|
|
payload __PAYLOAD__
|
|
end
|
|
buildrom ./coreboot.rom ROM_SIZE "normal" "fallback"
|
|
EOF
|
|
else
|
|
cat <<EOF
|
|
romimage "only"
|
|
option COREBOOT_EXTRA_VERSION=".0"
|
|
payload __PAYLOAD__
|
|
end
|
|
buildrom ./coreboot.rom ROM_SIZE "only"
|
|
EOF
|
|
fi
|
|
) > $TARGET/Config-${VENDOR}_${MAINBOARD}.lb
|
|
fi
|
|
|
|
if [ "$loglevel" != "default" ]; then
|
|
LOGLEVEL1="option MAXIMUM_CONSOLE_LOGLEVEL=$loglevel"
|
|
LOGLEVEL2="option DEFAULT_CONSOLE_LOGLEVEL=$loglevel"
|
|
else
|
|
LOGLEVEL1="# no loglevel override"
|
|
LOGLEVEL2=""
|
|
fi
|
|
|
|
COMPRESSION="# no compression"
|
|
if which lzma >/dev/null 2>/dev/null; then
|
|
if [ "$PAYLOAD" != /dev/null ]; then
|
|
COMPRESSION="option CONFIG_COMPRESSED_PAYLOAD_LZMA=1"
|
|
fi
|
|
fi
|
|
|
|
cp $TARGET/Config-${VENDOR}_${MAINBOARD}.lb $TARGET/Config-${VENDOR}_${MAINBOARD}.lb.pre
|
|
sed -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 \
|
|
-e s:__LOGLEVEL__:"$LOGLEVEL1"\
|
|
"$LOGLEVEL2":g \
|
|
$TARGET/Config-${VENDOR}_${MAINBOARD}.lb.pre > $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 " <log>"
|
|
xmlfile $build_dir/config.log
|
|
xml " </log>"
|
|
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 2> /dev/null || tail -$CONTEXT $build_dir/config.log
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
function create_buildenv
|
|
{
|
|
VENDOR=$1
|
|
MAINBOARD=$2
|
|
CONFIG=$3
|
|
create_config $VENDOR $MAINBOARD $CONFIG
|
|
create_builddir $VENDOR $MAINBOARD
|
|
}
|
|
|
|
function compile_target
|
|
{
|
|
VENDOR=$1
|
|
MAINBOARD=$2
|
|
|
|
printf " Compiling image "
|
|
test "$cpus" == "" && printf "in parallel .. "
|
|
test "$cpus" == "1" && printf "on 1 cpu .. "
|
|
test 0$cpus -gt 1 && printf "on %d cpus in parallel .. " $cpus
|
|
|
|
CURR=$( pwd )
|
|
cd $TARGET/${VENDOR}_${MAINBOARD}
|
|
stime=`perl -e 'print time();'`
|
|
eval $MAKE $silent -j $cpus &> make.log
|
|
ret=$?
|
|
etime=`perl -e 'print time();'`
|
|
duration=$(( $etime - $stime ))
|
|
if [ $ret -eq 0 ]; then
|
|
xml " <compile>ok</compile>"
|
|
xml " <compiletime>${duration}s</compiletime>"
|
|
xml " <log>"
|
|
xmlfile make.log
|
|
xml " </log>"
|
|
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 2> /dev/null || tail -$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
|
|
CONFIG=$3
|
|
TARCH=$( architecture $VENDOR $MAINBOARD )
|
|
|
|
# Allow architecture override in an abuild.info file.
|
|
# This is used for the Motorola Sandpoint, which is not a real target
|
|
# but a skeleton target for the Sandpoint X3.
|
|
[ -r "$LBROOT/src/mainboard/${VENDOR}/${MAINBOARD}/abuild.info" ] && \
|
|
source $LBROOT/src/mainboard/${VENDOR}/${MAINBOARD}/abuild.info
|
|
|
|
# default setting
|
|
|
|
CC="${CROSS_COMPILE}gcc"
|
|
CROSS_COMPILE=""
|
|
found_crosscompiler=false
|
|
if which $TARCH-elf-gcc 2>/dev/null >/dev/null; then
|
|
# i386-elf target needs --divide, for i386-linux, that's the default
|
|
if [ "$TARCH" = "i386" ]; then
|
|
CC="$CC -Wa,--divide"
|
|
fi
|
|
CROSS_COMPILE="$TARCH-elf-"
|
|
CC=gcc
|
|
echo using $CROSS_COMPILE$CC
|
|
found_crosscompiler=true
|
|
fi
|
|
|
|
HOSTCC='gcc'
|
|
|
|
printf "Processing mainboard/$VENDOR/$MAINBOARD"
|
|
|
|
xml "<mainboard>"
|
|
xml ""
|
|
xml " <vendor>$VENDOR</vendor>"
|
|
xml " <device>$MAINBOARD</device>"
|
|
xml ""
|
|
xml " <architecture>$TARCH</architecture>"
|
|
xml ""
|
|
|
|
if [ "$ARCH" = "$TARCH" -o $found_crosscompiler = true ]; 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- powerpc-elf-; 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 with a ${CROSS_COMPILE} cross compiler)\n"
|
|
xml " <compiler>"
|
|
xml " <path>`which ${CROSS_COMPILE}gcc`</path>"
|
|
xml " <version>`${CROSS_COMPILE}gcc --version | head -1`</version>"
|
|
xml " </compiler>"
|
|
xml ""
|
|
fi
|
|
fi
|
|
|
|
CC=${CROSS_COMPILE}$CC
|
|
|
|
if [ "$stackprotect" = "true" ]; then
|
|
CC="$CC -fno-stack-protector"
|
|
fi
|
|
|
|
if [ "$scanbuild" = "true" ]; then
|
|
ccwrap=`mktemp`
|
|
mkdir -p $TARGET/${VENDOR}_${MAINBOARD}
|
|
mkdir -p $TARGET/scan-build-results-tmp
|
|
mv $ccwrap $TARGET/${VENDOR}_${MAINBOARD}
|
|
ccwrap=$TARGET/${VENDOR}_${MAINBOARD}/`basename $ccwrap`
|
|
echo '#!/bin/sh' > $ccwrap
|
|
echo $CC' "$@"' >> $ccwrap
|
|
chmod +x $ccwrap
|
|
origMAKE=$MAKE
|
|
MAKE="scan-build --use-cc=$ccwrap -o $TARGET/scan-build-results-tmp -analyze-headers $MAKE GCC=$ccwrap"
|
|
CC="\$(CC)"
|
|
HOSTCC="CCC_CC=$HOSTCC \$(CC)"
|
|
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 $CONFIG
|
|
if [ $? -eq 0 -a $configureonly -eq 0 ]; then
|
|
compile_target $VENDOR $MAINBOARD &&
|
|
xml " <status>ok</status>" ||
|
|
xml "<status>broken</status>"
|
|
if [ "$scanbuild" = "true" ]; then
|
|
mv `dirname $TARGET/scan-build-results-tmp/*/index.html` $TARGET/${VENDOR}_${MAINBOARD}-scanbuild
|
|
MAKE=$origMAKE
|
|
fi
|
|
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}/coreboot.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}/coreboot.rom" \
|
|
-F "mode=abuild" -F "mainboard=${VENDOR}_${MAINBOARD}" -F "submit=Upload" \
|
|
"http://qa.coreboot.org/deployment/send.php"
|
|
|
|
printf "\n"
|
|
return 0
|
|
}
|
|
|
|
function remove_target
|
|
{
|
|
if [ "$remove" != "true" ]; then
|
|
return 0
|
|
fi
|
|
|
|
VENDOR=$1
|
|
MAINBOARD=$2
|
|
|
|
# Save the generated coreboot.rom file of each board.
|
|
if [ -r "$TARGET/${VENDOR}_${MAINBOARD}/coreboot.rom" ]; then
|
|
cp $TARGET/${VENDOR}_${MAINBOARD}/coreboot.rom \
|
|
${VENDOR}_${MAINBOARD}_coreboot.rom
|
|
fi
|
|
|
|
printf "Removing build dir for board $VENDOR $MAINBOARD...\n"
|
|
rm -rf $TARGET/${VENDOR}_${MAINBOARD}
|
|
|
|
return 0
|
|
}
|
|
|
|
function myhelp
|
|
{
|
|
printf "Usage: $0 [-v] [-a] [-b] [-r] [-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 " [-r|--remove] remove output dir after build\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 " [-c|--cpus <numcpus>] build on <numcpus> at the same time\n"
|
|
printf " [-s|--silent] omit compiler calls in logs\n"
|
|
printf " [-ns|--nostackprotect] use gcc -fno-stack-protector option\n"
|
|
printf " [-sb|--scan-build] use clang's static analyzer\n"
|
|
printf " [-C|--config] configure-only mode\n"
|
|
printf " [-l|--loglevel <num>] set loglevel\n"
|
|
printf " [lbroot] absolute path to coreboot sources\n"
|
|
printf " (defaults to $LBROOT)\n\n"
|
|
}
|
|
|
|
function myversion
|
|
{
|
|
cat << EOF
|
|
|
|
coreboot autobuild v$ABUILD_VERSION ($ABUILD_DATE)
|
|
|
|
Copyright (C) 2004 by Stefan Reinauer <stepan@openbios.org>
|
|
Copyright (C) 2006-2008 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.. try to find out whether we're running GNU getopt
|
|
getoptbrand="`getopt -V`"
|
|
if [ "${getoptbrand:0:6}" == "getopt" ]; then
|
|
# Detected GNU getopt that supports long options.
|
|
args=`getopt -l version,verbose,help,all,target:,broken,payloads:,test,cpus:,silent,xml,config,loglevel Vvhat:bp:Tc:sxCl: -- "$@"`
|
|
eval set "$args"
|
|
else
|
|
# Detected non-GNU getopt
|
|
args=`getopt Vvhat:bp:Tc:sxCl: $*`
|
|
set -- $args
|
|
fi
|
|
|
|
if [ $? != 0 ]; then
|
|
myhelp
|
|
exit 1
|
|
fi
|
|
|
|
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;;
|
|
-r|--remove) shift; remove=true; shift;;
|
|
-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;;
|
|
-c|--cpus) shift; cpus="$1"; test "$cpus" == "max" && cpus=""; shift;;
|
|
-s|--silent) shift; silent="-s";;
|
|
-ns|--nostackprotect) shift; stackprotect=true;;
|
|
-sb|--scan-build) shift; scanbuild=true;;
|
|
-C|--config) shift; configureonly=1;;
|
|
-l|--loglevel) shift; loglevel="$1"; shift;;
|
|
--) 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/`
|
|
CONFIG=`printf $target|cut -f3 -d/`
|
|
build_target $VENDOR $MAINBOARD $CONFIG
|
|
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
|
|
remove_target $VENDOR $MAINBOARD
|
|
done
|
|
done
|
|
fi
|
|
xml '</abuild>'
|
|
|