mirror of
https://github.com/fail0verflow/bootmii-utils.git
synced 2024-12-01 22:44:18 +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) 2007 Segher Boessenkool <segher@kernel.crashing.org>
|
||||||
# Copyright (C) 2009 Hector Martin "marcan" <hector@marcansoft.com>
|
# Copyright (C) 2009 Hector Martin "marcan" <hector@marcansoft.com>
|
||||||
# Copyright (C) 2009 Andre Heider "dhewg" <dhewg@wiibrew.org>
|
# 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
|
# Released under the terms of the GNU GPL, version 2
|
||||||
SCRIPTDIR=`dirname $PWD/$0`
|
SCRIPTDIR=`dirname $PWD/$0`
|
||||||
@ -27,7 +28,6 @@ GCC_DIR="gcc-$GCC_VER"
|
|||||||
GCC_TARBALL="gcc-core-$GCC_VER.tar.bz2"
|
GCC_TARBALL="gcc-core-$GCC_VER.tar.bz2"
|
||||||
GCC_URI="http://ftp.gnu.org/gnu/gcc/gcc-$GCC_VER/$GCC_TARBALL"
|
GCC_URI="http://ftp.gnu.org/gnu/gcc/gcc-$GCC_VER/$GCC_TARBALL"
|
||||||
|
|
||||||
BUILDTYPE=$1
|
|
||||||
|
|
||||||
ARM_TARGET=armeb-eabi
|
ARM_TARGET=armeb-eabi
|
||||||
POWERPC_TARGET=powerpc-elf
|
POWERPC_TARGET=powerpc-elf
|
||||||
@ -46,63 +46,82 @@ case `uname -s` in
|
|||||||
MAKE=make
|
MAKE=make
|
||||||
esac
|
esac
|
||||||
|
|
||||||
export PATH=$WIIDEV/bin:$PATH
|
|
||||||
|
|
||||||
die() {
|
die() {
|
||||||
echo $@
|
echo $@
|
||||||
exit 1
|
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() {
|
download() {
|
||||||
DL=1
|
DL=1
|
||||||
if [ -f "$WIIDEV/$2" ]; then
|
if [ -f "$1" ]; then
|
||||||
echo "Testing $2..."
|
echo "Testing $1..."
|
||||||
tar tf "$WIIDEV/$2" >/dev/null 2>&1 && DL=0
|
tar tf "$1" >/dev/null 2>&1 && DL=0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $DL -eq 1 ]; then
|
if [ $DL -eq 1 ]; then
|
||||||
echo "Downloading $2..."
|
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
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
extract() {
|
extract() {
|
||||||
echo "Extracting $1..."
|
echo "Extracting $2..."
|
||||||
tar xf "$WIIDEV/$1" -C "$2" || die "Error unpacking $1"
|
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"
|
cleansrc() {
|
||||||
mkdir -p $WIIDEV/build_gcc || die "Error making gcc build directory $WIIDEV/build_gcc"
|
[ -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() {
|
buildbinutils() {
|
||||||
TARGET=$1
|
|
||||||
(
|
(
|
||||||
cd $WIIDEV/build_binutils && \
|
export PATH="$1/bin:$PATH"
|
||||||
$WIIDEV/$BINUTILS_DIR/configure --target=$TARGET \
|
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 \
|
--prefix=$WIIDEV --disable-nls --disable-werror \
|
||||||
--disable-multilib && \
|
--disable-multilib && \
|
||||||
nice $MAKE $MAKEOPTS && \
|
nice $MAKE $MAKEOPTS && \
|
||||||
$MAKE install
|
$MAKE install
|
||||||
) || die "Error building binutils for target $TARGET"
|
) || die "Error building binutils for target $2"
|
||||||
}
|
}
|
||||||
|
|
||||||
buildgcc() {
|
buildgcc() {
|
||||||
TARGET=$1
|
|
||||||
(
|
(
|
||||||
cd $WIIDEV/build_gcc && \
|
export PATH="$1/bin:$PATH"
|
||||||
$WIIDEV/$GCC_DIR/configure --target=$TARGET --enable-targets=all \
|
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 \
|
--prefix=$WIIDEV --disable-multilib \
|
||||||
--enable-languages=c --without-headers \
|
--enable-languages=c --without-headers \
|
||||||
--disable-nls --disable-threads --disable-shared \
|
--disable-nls --disable-threads --disable-shared \
|
||||||
@ -112,35 +131,44 @@ buildgcc() {
|
|||||||
CFLAGS='-fgnu89-inline -g -O2' && \
|
CFLAGS='-fgnu89-inline -g -O2' && \
|
||||||
nice $MAKE $MAKEOPTS && \
|
nice $MAKE $MAKEOPTS && \
|
||||||
$MAKE install
|
$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() {
|
build() {
|
||||||
cleanbuild
|
cleanbuild "$1"
|
||||||
makedirs
|
echo "******* Building $2 binutils"
|
||||||
echo "******* Building PowerPC binutils"
|
[ -f "$1/bin/$2-ld" ] || buildbinutils "$1" "$2"
|
||||||
buildbinutils $POWERPC_TARGET
|
echo "******* Building $2 GCC"
|
||||||
echo "******* Building PowerPC GCC"
|
[ -f "$1/bin/$2-gcc" ] || buildgcc "$1" "$2"
|
||||||
buildgcc $POWERPC_TARGET
|
echo "******* $2 toolchain built and installed"
|
||||||
echo "******* PowerPC toolchain built and installed"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ -z "$WIIDEV" ]; then
|
if [ -z "$WIIDEV" ]; then
|
||||||
die "Please set WIIDEV in your environment."
|
die "Please set WIIDEV in your environment."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
BUILDTYPE="$1"
|
||||||
case $BUILDTYPE in
|
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)"
|
die "Please specify build type (arm/powerpc/both/clean)"
|
||||||
;;
|
;;
|
||||||
@ -148,34 +176,3 @@ case $BUILDTYPE in
|
|||||||
die "Unknown build type $BUILDTYPE"
|
die "Unknown build type $BUILDTYPE"
|
||||||
;;
|
;;
|
||||||
esac
|
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