Misc. updates to bash scripts

This commit is contained in:
Abraham Gonzalez
2022-09-21 22:45:13 -07:00
parent 85f16d3342
commit c5447b168c
5 changed files with 136 additions and 100 deletions

View File

@@ -28,7 +28,7 @@ usage() {
echo "Options"
echo " --help -h : Display this message"
echo " --unpinned-deps -ud : Use unpinned conda environment"
echo " --skip-validate : Skip prompt checking for tagged release/conda"
echo " --batch : Skip prompt checking for tagged release/conda"
echo " --skip-conda : Skip conda env creation"
echo " --skip-toolchain-extra : Skip building extra RISC-V toolchain collateral (Spike, PK, tests, libgloos)"
exit "$1"
@@ -36,7 +36,7 @@ usage() {
TOOLCHAIN="riscv-tools"
USE_PINNED_DEPS=true
SKIP_VALIDATE_FLAG=""
BATCH_FLAG=""
SKIP_CONDA=false
SKIP_TOOLCHAIN=false
@@ -50,8 +50,8 @@ do
TOOLCHAIN=$1 ;;
-ud | --unpinned-deps )
USE_PINNED_DEPS=false ;;
--skip-validate)
SKIP_VALIDATE_FLAG=$1 ;;
--batch)
BATCH_FLAG=$1 ;;
--skip-conda)
SKIP_CONDA=true ;;
--skip-toolchain-extra)
@@ -80,19 +80,21 @@ if [ "$SKIP_CONDA" = false ]; then
conda activate $DIR/.conda-env
fi
if [ -z "$SKIP_VALIDATE_FLAG" ]; then
if [ -z "$BATCH_FLAG" ]; then
if [ -z ${CONDA_DEFAULT_ENV+x} ]; then
error "ERROR: No conda environment detected. Did you activate the conda environment (e.x. 'conda activate base')?"
exit 1
fi
fi
$DIR/scripts/init-submodules-no-riscv-tools.sh $SKIP_VALIDATE_FLAG
$DIR/scripts/init-submodules-no-riscv-tools.sh $BATCH_FLAG
if [ "$SKIP_TOOLCHAIN" = false ]; then
$DIR/scripts/build-toolchain-extra.sh $SKIP_VALIDATE_FLAG $TOOLCHAIN
$DIR/scripts/build-toolchain-extra.sh $BATCH_FLAG $TOOLCHAIN
fi
$DIR/scripts/gen-tags.sh
cat << EOT >> env.sh
# line auto-generated by $0
conda activate $DIR/.conda-env

View File

@@ -1,22 +1,15 @@
#!/usr/bin/env bash
# this script is based on the firesim build toolchains script
# exit script if any command fails
set -e
set -o pipefail
# On macOS, use GNU readlink from 'coreutils' package in Homebrew/MacPorts
if [ "$(uname -s)" = "Darwin" ] ; then
READLINK=greadlink
else
READLINK=readlink
fi
RDIR=$(git rev-parse --show-toplevel)
# If BASH_SOURCE is undefined, we may be running under zsh, in that case
# provide a zsh-compatible alternative
DIR="$(dirname "$($READLINK -f "${BASH_SOURCE[0]:-${(%):-%x}}")")"
CHIPYARD_DIR="$(dirname "$DIR")"
# get helpful utilities
source $RDIR/scripts/utils.sh
common_setup
# Allow user to override MAKE
[ -n "${MAKE:+x}" ] || MAKE=$(command -v gnumake || command -v gmake || command -v make)
@@ -33,29 +26,21 @@ usage() {
echo " --prefix PREFIX : Install destination. If unset, defaults to $CONDA_PREFIX/riscv-tools"
echo " or $CONDA_PREFIX/esp-tools"
echo " --clean-after-install : Run make clean in calls to module_make and module_build"
echo " --skip-validate : Skip prompt checking for conda"
echo " --batch : Skip prompt checking for conda"
echo " --help -h : Display this message"
exit "$1"
}
error() {
echo "${0##*/}: ${1}" >&2
}
die() {
error "$1"
exit "${2:--1}"
}
TOOLCHAIN="riscv-tools"
CLEANAFTERINSTALL=""
RISCV=""
SKIP_VALIDATE=false
BATCH=false
# getopts does not support long options, and is inflexible
while [ "$1" != "" ];
do
case $1 in
-h | --help | help )
-h | -H | --help | help )
usage 3 ;;
-p | --prefix )
shift
@@ -64,8 +49,8 @@ do
CLEANAFTERINSTALL="true" ;;
riscv-tools | esp-tools)
TOOLCHAIN=$1 ;;
--skip-validate)
SKIP_VALIDATE=true;
--batch)
BATCH=true;
;;
* )
error "invalid option $1"
@@ -74,7 +59,7 @@ do
shift
done
if [ "$SKIP_VALIDATE" = false ]; then
if [ "$BATCH" = false ]; then
if [ -z ${CONDA_DEFAULT_ENV+x} ]; then
error "ERROR: No conda environment detected. Did you activate the conda environment (e.x. 'conda activate chipyard')?"
exit 1
@@ -92,7 +77,7 @@ echo "Installing extra toolchain utilities/tests to $RISCV"
# install risc-v tools
export RISCV="$RISCV"
cd "${CHIPYARD_DIR}"
cd "${RDIR}"
SRCDIR="$(pwd)/toolchains/${TOOLCHAIN}"
[ -d "${SRCDIR}" ] || die "unsupported toolchain: ${TOOLCHAIN}"

View File

@@ -5,13 +5,12 @@
set -e
set -o pipefail
RDIR=$(pwd)
scripts_dir="$( cd "$( dirname "${BASH_SOURCE[0]:-${(%):-%x}}" )" >/dev/null 2>&1 && pwd )"
RDIR=$(git rev-parse --show-toplevel)
cd "${scripts_dir}/.."
cd "$RDIR"
# Reenable the FireSim submodule
git config --unset submodule.sims/firesim.update || true
cd sims/firesim
pushd sims/firesim
./build-setup.sh "$@" --library --skip-validate
cd "$RDIR"
popd

View File

@@ -4,27 +4,34 @@
set -e
set -o pipefail
SKIP_VALIDATE=false
RDIR=$(git rev-parse --show-toplevel)
# get helpful utilities
source $RDIR/scripts/utils.sh
common_setup
function usage
{
echo "Usage: $0 [--skip-validate]"
echo "Usage: $0 [--batch]"
echo "Initialize Chipyard submodules and setup initial env.sh script."
echo ""
echo " --skip-validate Skip prompt checking for tagged release"
echo " --batch Skip prompt checking for tagged release"
}
BATCH=false
while test $# -gt 0
do
case "$1" in
--skip-validate)
SKIP_VALIDATE=true;
--batch)
BATCH=true;
;;
-h | -H | --help)
-h | -H | --help | help)
usage
exit 1
;;
*) echo "ERROR: bad argument $1"
*)
echo "ERROR: bad argument $1"
usage
exit 2
;;
@@ -32,47 +39,36 @@ do
shift
done
# Check that git version is at least 1.7.8
MYGIT=$(git --version)
MYGIT=${MYGIT#'git version '} # Strip prefix
case ${MYGIT} in
[1-9]*) ;;
*) echo 'warning: unknown git version' ;;
esac
MINGIT="1.8.5"
if [ "$MINGIT" != "$(echo -e "$MINGIT\n$MYGIT" | sort -V | head -n1)" ]; then
echo "This script requires git version $MINGIT or greater. Exiting."
false
fi
# before doing anything verify that you are on a release branch/tag
save_bash_options
set +e
tag=$(git describe --exact-match --tags)
tag_ret_code=$?
set -e
if [ $tag_ret_code -ne 0 ]; then
if [ "$SKIP_VALIDATE" = false ]; then
read -p "WARNING: You are not on an official release of Chipyard."$'\n'"Type \"y\" to continue if this is intended, otherwise see https://chipyard.readthedocs.io/en/stable/Chipyard-Basics/Initial-Repo-Setup.html#setting-up-the-chipyard-repo: " validate
[[ $validate == [yY] ]] || exit 3
echo "Setting up non-official Chipyard release"
git_tag=$(git describe --exact-match --tags)
git_tag_rc=$?
restore_bash_options
if [ "$git_tag_rc" -ne 0 ]; then
if [ "$BATCH" == false ]; then
while true; do
read -p "WARNING: You are not on an official release of Chipyard."$'\n'"Type \"y\" to continue if this is intended or \"n\" if not: " validate
case "$validate" in
y | Y)
echo "Continuing on to setting up non-official Chipyard release repository"
break
;;
n | N)
error "See https://chipyard.readthedocs.io/en/stable/Chipyard-Basics/Initial-Repo-Setup.html#setting-up-the-chipyard-repo for setting up an official release of Chipyard. "
exit 3
;;
*)
error "Invalid response. Please type \"y\" or \"n\""
;;
esac
done
fi
else
echo "Setting up official Chipyard release: $tag"
echo "Setting up official Chipyard release: $git_tag"
fi
# On macOS, use GNU readlink from 'coreutils' package in Homebrew/MacPorts
if [ "$(uname -s)" = "Darwin" ] ; then
READLINK=greadlink
else
READLINK=readlink
fi
# If BASH_SOURCE is undefined we may be running under zsh, in that case
# provide a zsh-compatible alternative
DIR="$(dirname "$($READLINK -f "${BASH_SOURCE[0]:-${(%):-%x}}")")"
CHIPYARD_DIR="$(dirname "$DIR")"
cd "$CHIPYARD_DIR"
cd "$RDIR"
(
# Blocklist of submodules to initially skip:
@@ -106,29 +102,28 @@ cd "$CHIPYARD_DIR"
_unskip() { git config --local --unset-all "submodule.${1}.update" || : ; }
trap 'git_submodule_exclude _unskip' EXIT INT TERM
(
set -x
git_submodule_exclude _skip
git submodule update --init --recursive #--jobs 8
set +x
)
)
set -x
(
# Non-recursive clone to exclude riscv-linux
git submodule update --init generators/sha3
# Non-recursive clone to exclude riscv-linux
git submodule update --init generators/sha3
# Non-recursive clone to exclude gemmini-software
git submodule update --init generators/gemmini
git -C generators/gemmini/ submodule update --init --recursive software/gemmini-rocc-tests
# Non-recursive clone to exclude gemmini-software
git submodule update --init generators/gemmini
git -C generators/gemmini/ submodule update --init --recursive software/gemmini-rocc-tests
# Minimal non-recursive clone to initialize sbt dependencies
git submodule update --init sims/firesim
git config --local submodule.sims/firesim.update none
# Minimal non-recursive clone to initialize sbt dependencies
git submodule update --init sims/firesim
git config --local submodule.sims/firesim.update none
# Only shallow clone needed for basic SW tests
git submodule update --init software/firemarshal
set +x
# Only shallow clone needed for basic SW tests
git submodule update --init software/firemarshal
)
# Configure firemarshal to know where our firesim installation is
if [ ! -f ./software/firemarshal/marshal-config.yaml ]; then

55
scripts/utils.sh Normal file
View File

@@ -0,0 +1,55 @@
#/usr/bin/env bash
#######################################
# Common setup. Init MacOS compatibility
# variables.
# Globals:
# READLINK
#######################################
function common_setup
{
# On macOS, use GNU readlink from 'coreutils' package in Homebrew/MacPorts
if [ "$(uname -s)" = "Darwin" ] ; then
READLINK=greadlink
else
READLINK=readlink
fi
}
#######################################
# Error echo wrapper
#######################################
function error
{
echo "${0##*/}: ${1}" >&2
}
#######################################
# Error then exit wrapper
# Arguments:
# string to print before exit
# (optional) int error code
#######################################
function die
{
error "$1"
exit "${2:--1}"
}
#######################################
# Save bash options. Must be called
# before a corresponding `restore_bash_options`.
#######################################
function save_bash_options
{
OLDSTATE=$(set +o)
}
#######################################
# Restore bash options. Must be called
# after a corresponding `save_bash_options`.
#######################################
function restore_bash_options
{
set +vx; eval "$OLDSTATE"
}