#!/bin/bash

ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)
cd $ROOT/tmp

if [ -z "$NUM_JOBS" ]; then
    NUM_JOBS=1
fi

VERILATOR_REPO="https://github.com/verilator/verilator.git"
VERILATOR_BRANCH="master"
# Use the release tag instead of a full SHA1 hash.
VERILATOR_HASH="v5.008"
VERILATOR_PATCH="$ROOT/verif/regress/verilator-v5.patch"

VERILATOR_BUILD_DIR=$PWD/verilator-$VERILATOR_HASH/verilator
VERILATOR_INSTALL_DIR="$(dirname $VERILATOR_BUILD_DIR)"

if [ ! -e "$VERILATOR_INSTALL_DIR/bin/verilator" ]; then
    echo "Building Verilator in $VERILATOR_BUILD_DIR..."
    echo "Verilator will be installed in $VERILATOR_INSTALL_DIR"
    echo "VERILATOR_REPO=$VERILATOR_REPO"
    echo "VERILATOR_BRANCH=$VERILATOR_BRANCH"
    echo "VERILATOR_HASH=$VERILATOR_HASH"
    echo "VERILATOR_PATCH=$VERILATOR_PATCH"
    mkdir -p $VERILATOR_BUILD_DIR
    cd $VERILATOR_BUILD_DIR
    sudo apt install libfl-dev help2man
    [ -d .git ] || git clone $VERILATOR_REPO -b $VERILATOR_BRANCH .
    git checkout $VERILATOR_HASH
    if [[ -n "$VERILATOR_PATCH" && -f "$VERILATOR_PATCH" ]] ; then
      git apply $VERILATOR_PATCH || true
    fi
    # Generate the config script and configure Verilator.
    autoconf && ./configure --prefix="$VERILATOR_INSTALL_DIR" && make -j${NUM_JOBS}
    # FORNOW: Accept failure in 'make test' (segfault issue on Debian10)
    make test || true
    echo "Installing Verilator in $VERILATOR_INSTALL_DIR..."
    make install
else
    echo "Using Verilator from cached directory $VERILATOR_INSTALL_DIR."
fi

cd $ROOT
