buildgcc: solidify and remove boilerplate code
- don't capture build_$package in a subshell by piping it - move HOSTCFLAGS to build_GMP - only create a build directory if a build happens - automatically collect packages to build Change-Id: Ic5a9f3f222faecd3381b413e5f25dff87262a855 Signed-off-by: Stefan Reinauer <stefan.reinauer@coreboot.org> Reviewed-on: http://review.coreboot.org/10475 Reviewed-by: Alexander Couzens <lynxis@fe80.eu> Tested-by: build bot (Jenkins)
This commit is contained in:
parent
93b4745d93
commit
1c70e052aa
|
@ -235,29 +235,37 @@ unpack_and_patch() {
|
|||
)
|
||||
}
|
||||
|
||||
wait_for_build() {
|
||||
# $1: directory in which log file and failure marker are stored
|
||||
cat > "$1/crossgcc-build.log"
|
||||
test -r "$1/.failed" && printf "${RED}failed${NC}. Check $1/crossgcc-build.log.\n" || \
|
||||
printf "${green}ok${NC}\n"
|
||||
test -r "$1/.failed" && exit 1
|
||||
true
|
||||
fn_exists()
|
||||
{
|
||||
type $1 2>/dev/null | grep -q 'is a function'
|
||||
}
|
||||
|
||||
build() {
|
||||
package=$1
|
||||
version="$(eval echo \$$package"_VERSION")"
|
||||
|
||||
fn_exists build_$package || return
|
||||
|
||||
mkdir -p ${BUILDDIRPREFIX}-$package
|
||||
|
||||
[[ "$PACKAGES" == *$package* ]] && \
|
||||
if [ -f ${BUILDDIRPREFIX}-$package/.success ]; then
|
||||
printf "Skipping $package as it is already built\n"
|
||||
else
|
||||
printf "Building $package $version ... "
|
||||
(
|
||||
cd ${BUILDDIRPREFIX}-$package
|
||||
rm -f .failed
|
||||
build_${package}
|
||||
if [ ! -f .failed ]; then touch .success; fi
|
||||
) 2>&1 | wait_for_build "${BUILDDIRPREFIX}-$package" || exit 1
|
||||
DIR=$PWD
|
||||
cd ${BUILDDIRPREFIX}-$package
|
||||
rm -f .failed
|
||||
build_${package} > build.log 2>&1
|
||||
cd $DIR/${BUILDDIRPREFIX}-$package
|
||||
if [ ! -f .failed ]; then touch .success; fi
|
||||
cd ..
|
||||
|
||||
if [ -r "${BUILDDIRPREFIX}-$package/.failed" ]; then
|
||||
printf "${RED}failed${NC}. Check ${BUILDDIRPREFIX}-$package/build.log.\n"
|
||||
exit 1
|
||||
fi
|
||||
printf "${green}ok${NC}\n"
|
||||
fi
|
||||
}
|
||||
|
||||
|
@ -322,6 +330,11 @@ build_GMP() {
|
|||
$MAKE install DESTDIR=$DESTDIR || touch .failed
|
||||
|
||||
normalize_dirs
|
||||
|
||||
# Now set CFLAGS to match GMP CFLAGS but strip out -pedantic
|
||||
# as GCC 4.6.x fails if it's there.
|
||||
export HOSTCFLAGS=$(grep __GMP_CFLAGS $DESTDIR$TARGETDIR/include/gmp.h |cut -d\" -f2 |\
|
||||
sed s,-pedantic,,)
|
||||
}
|
||||
|
||||
build_MPFR() {
|
||||
|
@ -538,11 +551,11 @@ if [ $SKIPGDB -eq 1 ]; then
|
|||
SKIPPYTHON=1
|
||||
fi
|
||||
else
|
||||
if [ $SKIPPYTHON -eq 0 ]; then
|
||||
PACKAGES="$PACKAGES EXPAT PYTHON"
|
||||
fi
|
||||
PACKAGES="$PACKAGES GDB"
|
||||
fi
|
||||
if [ $SKIPPYTHON -eq 0 ]; then
|
||||
PACKAGES="$PACKAGES EXPAT PYTHON"
|
||||
fi
|
||||
|
||||
# coreboot does not like the GOLD linker
|
||||
# USE_GOLD="--enable-gold"
|
||||
|
@ -558,7 +571,7 @@ printf "Downloaded tar balls ... ${green}ok${NC}\n"
|
|||
|
||||
printf "Unpacking and patching ... \n"
|
||||
for P in $PACKAGES; do
|
||||
unpack_and_patch $P
|
||||
unpack_and_patch $P || exit 1
|
||||
done
|
||||
printf "Unpacked and patched ... ${green}ok${NC}\n"
|
||||
|
||||
|
@ -591,30 +604,12 @@ if [ "$USECCACHE" = 1 ]; then
|
|||
CC="ccache $CC"
|
||||
fi
|
||||
|
||||
for package in $PACKAGES; do
|
||||
mkdir -p ${BUILDDIRPREFIX}-$package
|
||||
done
|
||||
|
||||
mkdir -p $DESTDIR$TARGETDIR/bin
|
||||
export PATH=$DESTDIR$TARGETDIR/bin:$PATH
|
||||
|
||||
build GMP
|
||||
|
||||
# Now set CFLAGS to match GMP CFLAGS but strip out -pedantic
|
||||
# as GCC 4.6.x fails if it's there.
|
||||
HOSTCFLAGS=$(grep __GMP_CFLAGS $DESTDIR$TARGETDIR/include/gmp.h |cut -d\" -f2 |\
|
||||
sed s,-pedantic,,)
|
||||
|
||||
build MPFR
|
||||
build MPC
|
||||
build LIBELF
|
||||
build BINUTILS
|
||||
build GCC
|
||||
build EXPAT
|
||||
build PYTHON
|
||||
build GDB
|
||||
build IASL
|
||||
build LLVM
|
||||
for package in $PACKAGES; do
|
||||
build $package
|
||||
done
|
||||
|
||||
# Adding git information of current tree to target directory
|
||||
# for reproducibility
|
||||
|
|
Loading…
Reference in New Issue