eth0s/01-toolchain
2021-03-18 05:17:30 +07:00

154 lines
2.8 KiB
Bash
Executable file

#!/bin/bash -e
if type -p "sudo" &>/dev/null; then
PRIV="sudo"
elif type -p "doas" &>/dev/null; then
PRIV="doas"
else
echo -e "\e[1;31merror:\e[0m sudo/doas not found!"
exit 1
fi
fetch() {
tarballname=$(echo $1 | rev | cut -d / -f 1 | rev)
WGETCMD="wget --passive-ftp --tries=3 --waitretry=3 --output-document=$2/$tarballname.partial"
WGETRESUME="-c"
if [ -f $2/$tarballname ]; then
echo "Source file $tarballname found."
return 0
else
if [ -f $2/$tarballname.partial ]; then
echo "Resuming $1"
$WGETCMD $WGETRESUME $1
else
mkdir -p "$2"
echo "Downloading $1"
$WGETCMD $1
fi
fi
if [ $? = 0 ]; then
mv $2/$tarballname.partial $2/$tarballname
else
echo "Failed fetching source: $tarballname"
exit 1
fi
}
fetch_src() {
if [ "${#source[@]}" -gt 0 ]; then
for s in ${source[@]}; do
fetch $s $SRCDIR
done
fi
}
extract_src() {
[ "$name" ] && rm -fr $WORKDIR/$name
mkdir -p $WORKDIR/$name
if [ "${#source[@]}" -gt 0 ]; then
for s in ${source[@]}; do
filename=$(basename $s)
case $filename in
*.tar|*.tar.gz|*.tar.Z|*.tgz|*.tar.bz2|*.tbz2|*.tar.xz|*.txz|*.tar.lzma|*.zip|*.rpm)
tar xvf $SRCDIR/$filename -C $WORKDIR/$name || exit 1;;
*)
cp -v $SRCDIR/$filename $WORKDIR/$name || exit 1;;
esac
done
fi
}
build_src() {
cd $WORKDIR/$name
if [ "$(type -t build)" = function ]; then
(set -e -x; build)
fi
if [ $? -ne 0 ]; then
echo "!!! build $name-$version failed !!!"
exit 1
else
echo "--- build $name-$version success ---"
fi
[ "$name" ] && rm -fr $WORKDIR/$name
register
}
register() {
echo $name-$version > $LFS/tools/$(basename $script)
}
checkdone() {
if [ -e $LFS/tools/$(basename $script) ]; then
echo "*** skip $(basename $script) ***"
return 1
else
echo ">>> building $(basename $script) <<<"
return 0
fi
}
build_stage1() {
cd $CWD
source $1 || exit 1
fetch_src
extract_src
build_src
unset source name version build
}
main() {
for script in $TCDIR/[0-9][0-9]-*; do
checkdone || continue
build_stage1 $script
done
$PRIV chown -Rv 0:0 $LFS
}
if [ $(id -u) = 0 ]; then
echo "$0 script need to run as regular user!"
exit 1
fi
CWD=$PWD
if [ -f $CWD/config ]; then
source $CWD/config
fi
PATH=/tools/bin:/bin:/usr/bin
TCDIR=$CWD/toolchain
PATCHDIR=$CWD/patches
FILEDIR=$CWD/files
LFS_TGT=x86_64-lfs-linux-gnu
LFS_TGT32=i686-lfs-linux-gnu
MAKEFLAGS="${MAKEFLAGS:--j$(nproc)}"
LFS="${LFS:-/mnt/lfs}"
PKGDIR="${PKGDIR:-$CWD/pkg}"
SRCDIR="${SRCDIR:-$CWD/src}"
WORKDIR="${WORKDIR:-/tmp}"
CFLAGS="${CFLAGS:--O2 -march=x86-64 -pipe}"
export LC_ALL=C PATH MAKEFLAGS LFS LFS_TGT LFS_TGT32
mkdir -p $SRCDIR $PKGDIR $WORKDIR
if [ ! -d $LFS/tools ]; then
$PRIV mkdir -pv $LFS/tools
fi
if [ ! -w $LFS ]; then
$PRIV chown -Rv $USER:$USER $LFS
fi
if [ ! -L /tools ] || [ $(realpath /tools) != $LFS/tools ]; then
$PRIV ln -svf $LFS/tools /
fi
main $@
exit 0