#!/bin/bash set -e if [ ! $# -eq 1 ]; then echo "usage: $0 " exit 1 fi PRODUCT="$1" ################################ basic setup ################################ BUILDROOT=$(pwd) SCRIPTDIR=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) NUMJOBS=$(grep -e "^processor" /proc/cpuinfo | wc -l) LAYERCONF="$SCRIPTDIR/product/${PRODUCT}.layers" if [ ! -f "$LAYERCONF" ]; then echo "Cannot find layer configuration for $PRODUCT" exit 1 fi PKGSRCDIR="$BUILDROOT/src" PKGDOWNLOADDIR="$BUILDROOT/download" PKGBUILDDIR="$BUILDROOT/$PRODUCT/build" PKGDEPLOYDIR="$BUILDROOT/$PRODUCT/deploy" PKGLOGDIR="$BUILDROOT/$PRODUCT/log" PACKAGELIST="$BUILDROOT/$PRODUCT/pkglist" REPODIR="$BUILDROOT/$PRODUCT/repo" mkdir -p "$PKGDOWNLOADDIR" "$PKGSRCDIR" "$PKGLOGDIR" "$PKGDEPLOYDIR" mkdir -p "$REPODIR" pushd "$SCRIPTDIR" > /dev/null OS_NAME="Pygos" OS_RELEASE=$(git describe --always --tags --dirty) popd > /dev/null ############################# include utilities ############################## source "$SCRIPTDIR/util/depends.sh" source "$SCRIPTDIR/util/download.sh" source "$SCRIPTDIR/util/pkgcmd.sh" source "$SCRIPTDIR/util/toolchain.sh" source "$SCRIPTDIR/util/misc.sh" source "$SCRIPTDIR/util/override.sh" source "$SCRIPTDIR/util/autotools.sh" ############################## toolchain config ############################## include_merge "TOOLCHAIN" HOSTTUPLE=$($SCRIPTDIR/util/config.guess) TCDIR="$BUILDROOT/$PRODUCT/toolchain" export PATH="$TCDIR/bin:$PATH" mkdir -p "$TCDIR/$TARGET" "$TCDIR/bin" CMAKETCFILE="$TCDIR/toolchain.cmake" ############################### build packages ############################### echo "--- resolving package dependencies ---" include_pkg "$RELEASEPKG" dependencies | tsort | tac > "$PACKAGELIST" cat "$PACKAGELIST" echo "--- downloading package files ---" while read pkg; do include_pkg "$pkg" fetch_package done < "$PACKAGELIST" echo "--- building packages ---" while read pkg; do if [ ! -e "$PKGLOGDIR/.$pkg" ]; then include_pkg "$pkg" install_build_deps run_pkg_command "build" run_pkg_command "deploy" deploy_dev_cleanup "$PKGDEPLOYDIR/$PKGNAME" strip_files ${PKGDEPLOYDIR}/${PKGNAME}/{bin,lib} restore_toolchain if [ -d "$PKGDEPLOYDIR/$PKGNAME" ]; then for f in $PKGDEPLOYDIR/$PKGNAME/*.desc; do if [ ! -f "$f" ]; then continue fi pkg pack -r "$REPODIR" -d "$f" -l $PKGDEPLOYDIR/$PKGNAME/$(basename "$f" .desc).files done fi rm -rf "$PKGBUILDDIR" touch "$PKGLOGDIR/.$pkg" fi done < "$PACKAGELIST" echo "--- done ---"