f33e395213
After collecting dependencies for ramstage, add an intermediate step in which object files are linked per directory. The results are then linked into the final binary. This reduces the maximum command line length and might also help with future use of LTO linking. Also adapt the lint test for build dir handling, since printall doesn't provide individual object files for ramstage anymore. Change-Id: Ie40febd8c1eaf4609944eedeab46d870639e53df Signed-off-by: Patrick Georgi <patrick@georgi-clan.de> Reviewed-on: http://review.coreboot.org/1911 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
70 lines
2.3 KiB
Bash
Executable file
70 lines
2.3 KiB
Bash
Executable file
#!/bin/sh
|
|
# This file is part of the coreboot project.
|
|
#
|
|
# Copyright (C) 2011 Patrick Georgi <patrick@georgi-clan.de>
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; version 2 of the License.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
#
|
|
# DESCR: Check that build directories can be chosen freely
|
|
|
|
# $1: command to test for GNU make
|
|
search_make() {
|
|
if [ -n "`$1 --version 2>&1 | grep GNU`" ]; then MAKE=$1; fi
|
|
}
|
|
|
|
# if $1 and $2 differ, exit with failure
|
|
compare_output() {
|
|
if ! [ "$1" = "$2" ]; then
|
|
echo \'$1\' should be \'$2\'
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# $1: object directory
|
|
run_printall() {
|
|
$MAKE CONFIG_USE_BLOBS=n CONFIG_CCACHE=n CONFIG_SCANBUILD_ENABLE=n NOMKDIR=1 \
|
|
DOTCONFIG=$TMPCONFIG obj=$1 printall | \
|
|
sed -e "s,^ *,," -e "s,^r.mstage-objs:=,," \
|
|
-e "s,mainboard/[^/]*/[^/]*/,.../,g" | \
|
|
tr " " "\n" | GREP_OPTIONS= grep "/static.*\.[co]" | sort | \
|
|
tr '\012\015' ' ' | sed -e "s, *, ,g" -e "s, *$,,"
|
|
}
|
|
|
|
# find GNU make
|
|
MAKE=
|
|
search_make make
|
|
[ -z $MAKE ] && search_make gmake
|
|
[ -z $MAKE ] && search_make gnumake
|
|
|
|
if [ "$MAKE" = "" ]; then
|
|
echo Could not identify GNU make
|
|
exit 1
|
|
fi
|
|
|
|
# prepare a config to use
|
|
TMPCONFIG=`mktemp .tmpconfig.XXXXXX`
|
|
rm -f $TMPCONFIG
|
|
$MAKE DOTCONFIG=$TMPCONFIG allyesconfig >/dev/null
|
|
|
|
# look up parent directory
|
|
CURRENTDIR=`pwd -P`
|
|
PARENTDIR=`dirname $CURRENTDIR`
|
|
|
|
compare_output "`run_printall build`" "build/.../static.c build/.../static.c build/.../static.romstage.o"
|
|
compare_output "`run_printall ../obj`" "$PARENTDIR/obj/.../static.c $PARENTDIR/obj/.../static.c $PARENTDIR/obj/.../static.romstage.o"
|
|
compare_output "`run_printall /tmp`" "/tmp/.../static.c /tmp/.../static.c /tmp/.../static.romstage.o"
|
|
compare_output "`run_printall /../tmp`" "/tmp/.../static.c /tmp/.../static.c /tmp/.../static.romstage.o"
|
|
|
|
rm -f $TMPCONFIG
|
|
|