Skip to content
Snippets Groups Projects
cook.sh 4.69 KiB
Newer Older
Jeremy Soller's avatar
Jeremy Soller committed
# Configuration
Jeremy Soller's avatar
Jeremy Soller committed
export TARGET=x86_64-unknown-redox
Jeremy Soller's avatar
Jeremy Soller committed

# Automatic variables
ROOT="$(cd `dirname "$0"` && pwd)"
REPO="$ROOT/repo/$TARGET"
Jeremy Soller's avatar
Jeremy Soller committed
export CC="$ROOT/libc-artifacts/gcc.sh"

# Variables to be overriden by recipes
Jeremy Soller's avatar
Jeremy Soller committed
function op {
    echo -e "\033[01;38;5;215mcook - $1 $2\033[0m"
Jeremy Soller's avatar
Jeremy Soller committed
    case "$2" in
        dist)
            op $1 fetch
            op $1 update
            op $1 build
            op $1 stage
            op $1 tar
            ;;
        distclean)
            op $1 untar
            op $1 unstage
            op $1 unfetch
            ;;
Jeremy Soller's avatar
Jeremy Soller committed
        fetch)
            if [ ! -d build ]
            then
                git clone --recursive "$GIT" build
            fi

            pushd build > /dev/null
            git pull
            git submodule sync
            git submodule update --init --recursive
            popd > /dev/null
            ;;
        unfetch)
Jeremy Soller's avatar
Jeremy Soller committed
            rm -rfv build
Jeremy Soller's avatar
Jeremy Soller committed
            ;;
        info)
            pushd build > /dev/null
            skip="0"
            if [ "$(type -t recipe_info)" = "function" ]
            then
                recipe_info || skip="1"
            fi
            if [ "$skip" -eq "0" ]
                echo "$1_$(cargo config package.version | tr -d '"')"
            fi
            popd > /dev/null
            ;;
Jeremy Soller's avatar
Jeremy Soller committed
        update)
            pushd build > /dev/null
            skip="0"
            if [ "$(type -t recipe_update)" = "function" ]
            then
                recipe_update || skip="1"
            fi
            if [ "$skip" -eq "0" ]
            then
                xargo update
            fi
Jeremy Soller's avatar
Jeremy Soller committed
            popd > /dev/null
            ;;
        build)
            pushd build > /dev/null
            skip="0"
            if [ "$(type -t recipe_build)" = "function" ]
            then
                recipe_build || skip="1"
            fi
            if [ "$skip" -eq "0" ]
            then
                cp -r "$ROOT/Xargo.toml" "$ROOT/.cargo" "$ROOT/libc-artifacts" .
                xargo build --target "$TARGET" --release $CARGOFLAGS
            fi
Jeremy Soller's avatar
Jeremy Soller committed
            popd > /dev/null
            ;;
        test)
            pushd build > /dev/null
            skip="0"
            if [ "$(type -t recipe_test)" = "function" ]
            then
                recipe_test || skip="1"
            fi
            if [ "$skip" -eq "0" ]
            then
                cp -r "$ROOT/Xargo.toml" "$ROOT/.cargo" "$ROOT/libc-artifacts" .
                xargo test --no-run --target "$TARGET" --release $CARGOFLAGS
            fi
            popd > /dev/null
            ;;
Jeremy Soller's avatar
Jeremy Soller committed
        clean)
            pushd build > /dev/null
            skip="0"
            if [ "$(type -t recipe_clean)" = "function" ]
            then
                recipe_clean || skip="1"
            fi
            if [ "$skip" -eq "0" ]
            then
                xargo clean
            fi
Jeremy Soller's avatar
Jeremy Soller committed
            popd > /dev/null
            ;;
        stage)
Jeremy Soller's avatar
Jeremy Soller committed
            mkdir -p stage
Jeremy Soller's avatar
Jeremy Soller committed
            pushd build > /dev/null
Jeremy Soller's avatar
Jeremy Soller committed
            if [ "$(type -t recipe_stage)" = "function" ]
            then
                recipe_stage ../stage || skip="1"
                #TODO xargo install --root "../stage" $CARGOFLAGS
                bins="$(find target/$TARGET/release/ -maxdepth 1 -type f ! -name '*.*')"
                if [ -n "$bins" ]
                then
                    for bin in $bins
                    do
                        strip -v "../stage/$BINDIR/$(basename $bin)"
Jeremy Soller's avatar
Jeremy Soller committed
            fi
Jeremy Soller's avatar
Jeremy Soller committed
            popd > /dev/null
            ;;
        unstage)
Jeremy Soller's avatar
Jeremy Soller committed
            rm -rfv stage
Jeremy Soller's avatar
Jeremy Soller committed
            ;;
        tar)
            pushd stage > /dev/null
Jeremy Soller's avatar
Jeremy Soller committed
            tar cfv ../stage.tar .
Jeremy Soller's avatar
Jeremy Soller committed
            popd > /dev/null
            ;;
        untar)
Jeremy Soller's avatar
Jeremy Soller committed
            rm -rfv stage.tar
            ;;
        publish)
            mkdir -p "$REPO"
            cp -v stage.tar "$REPO/$1.tar"
            ;;
        unpublish)
            rm -rfv "$REPO/$1.tar"
            echo "cook.sh $1 {dist|distclean|build|clean|fetch|unfetch|publish|unpublish|stage|unstage|tar|untar|update}"
Jeremy Soller's avatar
Jeremy Soller committed
if [ -n "$1" ]
then
    if [ -d "$ROOT/recipes/$1" ]
Jeremy Soller's avatar
Jeremy Soller committed
    then
        cd "$ROOT/recipes/$1"
Jeremy Soller's avatar
Jeremy Soller committed
        source recipe.sh
        for arg in "${@:2}"
        do
Jeremy Soller's avatar
Jeremy Soller committed
            op "$1" "$arg"
Jeremy Soller's avatar
Jeremy Soller committed
    else
Jeremy Soller's avatar
Jeremy Soller committed
        echo "cook.sh: recipe '$1' not found"
Jeremy Soller's avatar
Jeremy Soller committed
    fi
else
    echo "cook.sh {package} {dist|distclean|build|clean|fetch|unfetch|publish|unpublish|stage|unstage|tar|untar|update}"
Jeremy Soller's avatar
Jeremy Soller committed
fi