mirror of
https://github.com/fail0verflow/bootmii-utils.git
synced 2024-11-26 04:04:15 +01:00
buildtoolchain: use less global variables, refactor build process a bit
This commit is contained in:
parent
a32b8f6520
commit
7aa26c15b5
@ -3,6 +3,7 @@
|
||||
# Copyright (C) 2007 Segher Boessenkool <segher@kernel.crashing.org>
|
||||
# Copyright (C) 2009 Hector Martin "marcan" <hector@marcansoft.com>
|
||||
# Copyright (C) 2009 Andre Heider "dhewg" <dhewg@wiibrew.org>
|
||||
# Copyright (C) 2022 Shiz <hi@shiz.me>
|
||||
|
||||
# Released under the terms of the GNU GPL, version 2
|
||||
SCRIPTDIR=`dirname $PWD/$0`
|
||||
@ -27,7 +28,6 @@ GCC_DIR="gcc-$GCC_VER"
|
||||
GCC_TARBALL="gcc-core-$GCC_VER.tar.bz2"
|
||||
GCC_URI="http://ftp.gnu.org/gnu/gcc/gcc-$GCC_VER/$GCC_TARBALL"
|
||||
|
||||
BUILDTYPE=$1
|
||||
|
||||
ARM_TARGET=armeb-eabi
|
||||
POWERPC_TARGET=powerpc-elf
|
||||
@ -46,63 +46,82 @@ case `uname -s` in
|
||||
MAKE=make
|
||||
esac
|
||||
|
||||
export PATH=$WIIDEV/bin:$PATH
|
||||
|
||||
die() {
|
||||
echo $@
|
||||
exit 1
|
||||
}
|
||||
|
||||
cleansrc() {
|
||||
[ -e $WIIDEV/$BINUTILS_DIR ] && rm -rf $WIIDEV/$BINUTILS_DIR
|
||||
[ -e $WIIDEV/$GCC_DIR ] && rm -rf $WIIDEV/$GCC_DIR
|
||||
}
|
||||
|
||||
cleanbuild() {
|
||||
[ -e $WIIDEV/build_binutils ] && rm -rf $WIIDEV/build_binutils
|
||||
[ -e $WIIDEV/build_gcc ] && rm -rf $WIIDEV/build_gcc
|
||||
}
|
||||
|
||||
download() {
|
||||
DL=1
|
||||
if [ -f "$WIIDEV/$2" ]; then
|
||||
echo "Testing $2..."
|
||||
tar tf "$WIIDEV/$2" >/dev/null 2>&1 && DL=0
|
||||
if [ -f "$1" ]; then
|
||||
echo "Testing $1..."
|
||||
tar tf "$1" >/dev/null 2>&1 && DL=0
|
||||
fi
|
||||
|
||||
if [ $DL -eq 1 ]; then
|
||||
echo "Downloading $2..."
|
||||
wget "$1" -c -O "$WIIDEV/$2" || die "Could not download $2"
|
||||
wget "$2" -c -O "$1" || die "Could not download $2"
|
||||
fi
|
||||
}
|
||||
|
||||
extract() {
|
||||
echo "Extracting $1..."
|
||||
tar xf "$WIIDEV/$1" -C "$2" || die "Error unpacking $1"
|
||||
echo "Extracting $2..."
|
||||
tar xf "$2" -C "$1" || die "Could not unpack $2"
|
||||
}
|
||||
|
||||
makedirs() {
|
||||
mkdir -p $WIIDEV/build_binutils || die "Error making binutils build directory $WIIDEV/build_binutils"
|
||||
mkdir -p $WIIDEV/build_gcc || die "Error making gcc build directory $WIIDEV/build_gcc"
|
||||
|
||||
cleansrc() {
|
||||
[ -e "$1/src/$BINUTILS_DIR" ] && rm -rf "$1/src/$BINUTILS_DIR"
|
||||
[ -e "$1/src/$GCC_DIR" ] && rm -rf "$1/src/$GCC_DIR"
|
||||
}
|
||||
|
||||
cleanbuild() {
|
||||
[ -e "$(printf "%s\n" "$1/var/build/$BINUTILS_DIR"-* | head -n 1)" ] && rm -rf "$1/var/build/$BINUTILS_DIR"-*
|
||||
[ -e "$(printf "%s\n" "$1/var/build/$GCC_DIR"-* | head -n 1)" ] && rm -rf "$1/var/build/$GCC_DIR"-*
|
||||
}
|
||||
|
||||
prepsrc() {
|
||||
mkdir -p "$1/var/cache" || die "Could not create cache directory $1/var/cache"
|
||||
|
||||
download "$1/var/cache/$BINUTILS_TARBALL" "$BINUTILS_URI"
|
||||
download "$1/var/cache/$GMP_TARBALL" "$GMP_URI"
|
||||
download "$1/var/cache/$MPFR_TARBALL" "$MPFR_URI"
|
||||
download "$1/var/cache/$GCC_TARBALL" "$GCC_URI"
|
||||
|
||||
cleansrc "$1"
|
||||
|
||||
mkdir -p "$1/src" || die "Could not create source directory $1/src"
|
||||
|
||||
extract "$1/src" "$1/var/cache/$BINUTILS_TARBALL"
|
||||
extract "$1/src" "$1/var/cache/$GCC_TARBALL"
|
||||
extract "$1/src/$GCC_DIR" "$1/var/cache/$GMP_TARBALL"
|
||||
mv "$1/src/$GCC_DIR/$GMP_DIR" "$1/src/$GCC_DIR/gmp" || die "Error renaming $GMP_DIR -> gmp"
|
||||
extract "$1/src/$GCC_DIR" "$1/var/cache/$MPFR_TARBALL"
|
||||
mv "$1/src/$GCC_DIR/$MPFR_DIR" "$1/src/$GCC_DIR/mpfr" || die "Error renaming $MPFR_DIR -> mpfr"
|
||||
|
||||
# http://sourceware.org/bugzilla/show_bug.cgi?id=12964
|
||||
patch -d $WIIDEV/$BINUTILS_DIR -u -p1 -i $SCRIPTDIR/binutils-2.21.1.patch || die "Error applying binutils patch"
|
||||
}
|
||||
|
||||
buildbinutils() {
|
||||
TARGET=$1
|
||||
(
|
||||
cd $WIIDEV/build_binutils && \
|
||||
$WIIDEV/$BINUTILS_DIR/configure --target=$TARGET \
|
||||
export PATH="$1/bin:$PATH"
|
||||
mkdir -p "$1/var/build/$BINUTILS_DIR-$2"
|
||||
cd "$1/var/build/$BINUTILS_DIR-$2" && \
|
||||
"$1/src/$BINUTILS_DIR/configure" --target="$2" \
|
||||
--prefix=$WIIDEV --disable-nls --disable-werror \
|
||||
--disable-multilib && \
|
||||
nice $MAKE $MAKEOPTS && \
|
||||
$MAKE install
|
||||
) || die "Error building binutils for target $TARGET"
|
||||
) || die "Error building binutils for target $2"
|
||||
}
|
||||
|
||||
buildgcc() {
|
||||
TARGET=$1
|
||||
(
|
||||
cd $WIIDEV/build_gcc && \
|
||||
$WIIDEV/$GCC_DIR/configure --target=$TARGET --enable-targets=all \
|
||||
export PATH="$1/bin:$PATH"
|
||||
mkdir -p "$1/var/build/$GCC_DIR-$2"
|
||||
cd "$1/var/build/$GCC_DIR-$2" && \
|
||||
"$1/src/$GCC_DIR/configure" --target="$2" --enable-targets=all \
|
||||
--prefix=$WIIDEV --disable-multilib \
|
||||
--enable-languages=c --without-headers \
|
||||
--disable-nls --disable-threads --disable-shared \
|
||||
@ -112,35 +131,44 @@ buildgcc() {
|
||||
CFLAGS='-fgnu89-inline -g -O2' && \
|
||||
nice $MAKE $MAKEOPTS && \
|
||||
$MAKE install
|
||||
) || die "Error building gcc for target $TARGET"
|
||||
) || die "Error building gcc for target $2"
|
||||
}
|
||||
|
||||
buildarm() {
|
||||
cleanbuild
|
||||
makedirs
|
||||
echo "******* Building ARM binutils"
|
||||
buildbinutils $ARM_TARGET
|
||||
echo "******* Building ARM GCC"
|
||||
buildgcc $ARM_TARGET
|
||||
echo "******* ARM toolchain built and installed"
|
||||
}
|
||||
|
||||
buildpowerpc() {
|
||||
cleanbuild
|
||||
makedirs
|
||||
echo "******* Building PowerPC binutils"
|
||||
buildbinutils $POWERPC_TARGET
|
||||
echo "******* Building PowerPC GCC"
|
||||
buildgcc $POWERPC_TARGET
|
||||
echo "******* PowerPC toolchain built and installed"
|
||||
build() {
|
||||
cleanbuild "$1"
|
||||
echo "******* Building $2 binutils"
|
||||
[ -f "$1/bin/$2-ld" ] || buildbinutils "$1" "$2"
|
||||
echo "******* Building $2 GCC"
|
||||
[ -f "$1/bin/$2-gcc" ] || buildgcc "$1" "$2"
|
||||
echo "******* $2 toolchain built and installed"
|
||||
}
|
||||
|
||||
if [ -z "$WIIDEV" ]; then
|
||||
die "Please set WIIDEV in your environment."
|
||||
fi
|
||||
|
||||
BUILDTYPE="$1"
|
||||
case $BUILDTYPE in
|
||||
arm|powerpc|both|clean) ;;
|
||||
arm)
|
||||
prepsrc "$WIIDEV"
|
||||
build "$WIIDEV" $ARM_TARGET
|
||||
;;
|
||||
powerpc)
|
||||
prepsrc "$WIIDEV"
|
||||
build "$WIIDEV" $POWERPC_TARGET
|
||||
;;
|
||||
both)
|
||||
prepsrc "$WIIDEV"
|
||||
build "$WIIDEV" $ARM_TARGET
|
||||
build "$WIIDEV" $POWERPC_TARGET
|
||||
cleanbuild "$WIIDEV"
|
||||
cleansrc "$WIIDEV"
|
||||
;;
|
||||
clean)
|
||||
cleanbuild "$WIIDEV"
|
||||
cleansrc "$WIIDEV"
|
||||
;;
|
||||
"")
|
||||
die "Please specify build type (arm/powerpc/both/clean)"
|
||||
;;
|
||||
@ -148,34 +176,3 @@ case $BUILDTYPE in
|
||||
die "Unknown build type $BUILDTYPE"
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ "$BUILDTYPE" = "clean" ]; then
|
||||
cleanbuild
|
||||
cleansrc
|
||||
exit 0
|
||||
fi
|
||||
|
||||
download "$BINUTILS_URI" "$BINUTILS_TARBALL"
|
||||
download "$GMP_URI" "$GMP_TARBALL"
|
||||
download "$MPFR_URI" "$MPFR_TARBALL"
|
||||
download "$GCC_URI" "$GCC_TARBALL"
|
||||
|
||||
cleansrc
|
||||
|
||||
extract "$BINUTILS_TARBALL" "$WIIDEV"
|
||||
extract "$GCC_TARBALL" "$WIIDEV"
|
||||
extract "$GMP_TARBALL" "$WIIDEV/$GCC_DIR"
|
||||
extract "$MPFR_TARBALL" "$WIIDEV/$GCC_DIR"
|
||||
|
||||
# http://sourceware.org/bugzilla/show_bug.cgi?id=12964
|
||||
patch -d $WIIDEV/$BINUTILS_DIR -u -p1 -i $SCRIPTDIR/binutils-2.21.1.patch || die "Error applying binutils patch"
|
||||
|
||||
# in-tree gmp and mpfr
|
||||
mv "$WIIDEV/$GCC_DIR/$GMP_DIR" "$WIIDEV/$GCC_DIR/gmp" || die "Error renaming $GMP_DIR -> gmp"
|
||||
mv "$WIIDEV/$GCC_DIR/$MPFR_DIR" "$WIIDEV/$GCC_DIR/mpfr" || die "Error renaming $MPFR_DIR -> mpfr"
|
||||
|
||||
case $BUILDTYPE in
|
||||
arm) buildarm ;;
|
||||
powerpc) buildpowerpc ;;
|
||||
both) buildarm ; buildpowerpc; cleanbuild; cleansrc ;;
|
||||
esac
|
||||
|
Loading…
Reference in New Issue
Block a user