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() {
|
fn_exists()
|
||||||
# $1: directory in which log file and failure marker are stored
|
{
|
||||||
cat > "$1/crossgcc-build.log"
|
type $1 2>/dev/null | grep -q 'is a function'
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
build() {
|
build() {
|
||||||
package=$1
|
package=$1
|
||||||
version="$(eval echo \$$package"_VERSION")"
|
version="$(eval echo \$$package"_VERSION")"
|
||||||
|
|
||||||
|
fn_exists build_$package || return
|
||||||
|
|
||||||
|
mkdir -p ${BUILDDIRPREFIX}-$package
|
||||||
|
|
||||||
[[ "$PACKAGES" == *$package* ]] && \
|
[[ "$PACKAGES" == *$package* ]] && \
|
||||||
if [ -f ${BUILDDIRPREFIX}-$package/.success ]; then
|
if [ -f ${BUILDDIRPREFIX}-$package/.success ]; then
|
||||||
printf "Skipping $package as it is already built\n"
|
printf "Skipping $package as it is already built\n"
|
||||||
else
|
else
|
||||||
printf "Building $package $version ... "
|
printf "Building $package $version ... "
|
||||||
(
|
DIR=$PWD
|
||||||
cd ${BUILDDIRPREFIX}-$package
|
cd ${BUILDDIRPREFIX}-$package
|
||||||
rm -f .failed
|
rm -f .failed
|
||||||
build_${package}
|
build_${package} > build.log 2>&1
|
||||||
|
cd $DIR/${BUILDDIRPREFIX}-$package
|
||||||
if [ ! -f .failed ]; then touch .success; fi
|
if [ ! -f .failed ]; then touch .success; fi
|
||||||
) 2>&1 | wait_for_build "${BUILDDIRPREFIX}-$package" || exit 1
|
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
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -322,6 +330,11 @@ build_GMP() {
|
||||||
$MAKE install DESTDIR=$DESTDIR || touch .failed
|
$MAKE install DESTDIR=$DESTDIR || touch .failed
|
||||||
|
|
||||||
normalize_dirs
|
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() {
|
build_MPFR() {
|
||||||
|
@ -538,10 +551,10 @@ if [ $SKIPGDB -eq 1 ]; then
|
||||||
SKIPPYTHON=1
|
SKIPPYTHON=1
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
PACKAGES="$PACKAGES GDB"
|
if [ $SKIPPYTHON -eq 0 ]; then
|
||||||
fi
|
|
||||||
if [ $SKIPPYTHON -eq 0 ]; then
|
|
||||||
PACKAGES="$PACKAGES EXPAT PYTHON"
|
PACKAGES="$PACKAGES EXPAT PYTHON"
|
||||||
|
fi
|
||||||
|
PACKAGES="$PACKAGES GDB"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# coreboot does not like the GOLD linker
|
# coreboot does not like the GOLD linker
|
||||||
|
@ -558,7 +571,7 @@ printf "Downloaded tar balls ... ${green}ok${NC}\n"
|
||||||
|
|
||||||
printf "Unpacking and patching ... \n"
|
printf "Unpacking and patching ... \n"
|
||||||
for P in $PACKAGES; do
|
for P in $PACKAGES; do
|
||||||
unpack_and_patch $P
|
unpack_and_patch $P || exit 1
|
||||||
done
|
done
|
||||||
printf "Unpacked and patched ... ${green}ok${NC}\n"
|
printf "Unpacked and patched ... ${green}ok${NC}\n"
|
||||||
|
|
||||||
|
@ -591,30 +604,12 @@ if [ "$USECCACHE" = 1 ]; then
|
||||||
CC="ccache $CC"
|
CC="ccache $CC"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for package in $PACKAGES; do
|
|
||||||
mkdir -p ${BUILDDIRPREFIX}-$package
|
|
||||||
done
|
|
||||||
|
|
||||||
mkdir -p $DESTDIR$TARGETDIR/bin
|
mkdir -p $DESTDIR$TARGETDIR/bin
|
||||||
export PATH=$DESTDIR$TARGETDIR/bin:$PATH
|
export PATH=$DESTDIR$TARGETDIR/bin:$PATH
|
||||||
|
|
||||||
build GMP
|
for package in $PACKAGES; do
|
||||||
|
build $package
|
||||||
# Now set CFLAGS to match GMP CFLAGS but strip out -pedantic
|
done
|
||||||
# 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
|
|
||||||
|
|
||||||
# Adding git information of current tree to target directory
|
# Adding git information of current tree to target directory
|
||||||
# for reproducibility
|
# for reproducibility
|
||||||
|
|
Loading…
Reference in New Issue