Added "try-catch" to all build-setup steps
This was the only way I knew how to display the step at which the build-setup process failed. I've personally experienced failures at multiple of the build steps, and before I got used to Chipyard, it was hard to figure out which step was the culprit. With this, users should have a bit more info to troubleshoot their issues. For some of the build steps that required multiple lines, I figured it made more sense to put them into a sub-script, rather than putting a && at the end of each line. But for the firesim one for example, since it was two .sh calls, I just put a && after the first one, inside of the try block, to make sure both lines run.
This commit is contained in:
@@ -111,22 +111,13 @@ fi
|
|||||||
|
|
||||||
# setup and install conda environment
|
# setup and install conda environment
|
||||||
if run_step "1"; then
|
if run_step "1"; then
|
||||||
# note: lock file must end in .conda-lock.yml - see https://github.com/conda-incubator/conda-lock/issues/154
|
try; (
|
||||||
CONDA_REQS=$CYDIR/conda-reqs
|
source $CYDIR/scripts/build-step-init-conda-environment.sh
|
||||||
CONDA_LOCK_REQS=$CONDA_REQS/conda-lock-reqs
|
)
|
||||||
# must match with the file generated by generate-conda-lockfile.sh
|
catch || {
|
||||||
LOCKFILE=$CONDA_LOCK_REQS/conda-requirements-$TOOLCHAIN_TYPE-linux-64.conda-lock.yml
|
echo "Build script exited with exit code $? at step 1: conda environment setup. Check the above logs for more details on the error."
|
||||||
|
exit $?
|
||||||
if [ "$USE_UNPINNED_DEPS" = true ]; then
|
}
|
||||||
# auto-gen the lockfiles
|
|
||||||
$CYDIR/scripts/generate-conda-lockfiles.sh
|
|
||||||
fi
|
|
||||||
|
|
||||||
# use conda-lock to create env
|
|
||||||
conda-lock install --conda $(which conda) -p $CYDIR/.conda-env $LOCKFILE
|
|
||||||
|
|
||||||
source $CYDIR/.conda-env/etc/profile.d/conda.sh
|
|
||||||
conda activate $CYDIR/.conda-env
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "$FORCE_FLAG" ]; then
|
if [ -z "$FORCE_FLAG" ]; then
|
||||||
@@ -138,7 +129,13 @@ fi
|
|||||||
|
|
||||||
# initialize all submodules (without the toolchain submodules)
|
# initialize all submodules (without the toolchain submodules)
|
||||||
if run_step "2"; then
|
if run_step "2"; then
|
||||||
$CYDIR/scripts/init-submodules-no-riscv-tools.sh $FORCE_FLAG
|
try; (
|
||||||
|
$CYDIR/scripts/init-submodules-no-riscv-tools.sh $FORCE_FLAG
|
||||||
|
)
|
||||||
|
catch || {
|
||||||
|
echo "Build script exited with exit code $? at step 2: submodule initialization. Check the above logs for more details on the error."
|
||||||
|
exit $?
|
||||||
|
}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# build extra toolchain collateral (i.e. spike, pk, riscv-tests, libgloss)
|
# build extra toolchain collateral (i.e. spike, pk, riscv-tests, libgloss)
|
||||||
@@ -152,58 +149,95 @@ if run_step "3"; then
|
|||||||
fi
|
fi
|
||||||
PREFIX=$RISCV
|
PREFIX=$RISCV
|
||||||
fi
|
fi
|
||||||
$CYDIR/scripts/build-toolchain-extra.sh $TOOLCHAIN_TYPE -p $PREFIX
|
try; (
|
||||||
|
$CYDIR/scripts/build-toolchain-extra.sh $TOOLCHAIN_TYPE -p $PREFIX
|
||||||
|
)
|
||||||
|
catch || {
|
||||||
|
echo "Build script exited with exit code $? at step 3: toolchain collateral. Check the above logs for more details on the error."
|
||||||
|
exit $?
|
||||||
|
}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# run ctags for code navigation
|
# run ctags for code navigation
|
||||||
if run_step "4"; then
|
if run_step "4"; then
|
||||||
$CYDIR/scripts/gen-tags.sh
|
try; (
|
||||||
|
$CYDIR/scripts/gen-tags.sh
|
||||||
|
)
|
||||||
|
catch || {
|
||||||
|
echo "Build script exited with exit code $? at step 4: ctags generation. Check the above logs for more details on the error."
|
||||||
|
exit $?
|
||||||
|
}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# precompile chipyard scala sources
|
# precompile chipyard scala sources
|
||||||
if run_step "5"; then
|
if run_step "5"; then
|
||||||
pushd $CYDIR/sims/verilator
|
try; (
|
||||||
make launch-sbt SBT_COMMAND=";project chipyard; compile"
|
source $CYDIR/scripts/build-step-precompile-chipyard-scala.sh
|
||||||
make launch-sbt SBT_COMMAND=";project tapeout; compile"
|
)
|
||||||
popd
|
catch || {
|
||||||
|
echo "Build script exited with exit code $? at step 5: chipyard pre-compile sources. Check the above logs for more details on the error."
|
||||||
|
exit $?
|
||||||
|
}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# setup firesim
|
# setup firesim
|
||||||
if run_step "6"; then
|
if run_step "6"; then
|
||||||
$CYDIR/scripts/firesim-setup.sh
|
try; (
|
||||||
$CYDIR/sims/firesim/gen-tags.sh
|
$CYDIR/scripts/firesim-setup.sh &&
|
||||||
|
$CYDIR/sims/firesim/gen-tags.sh
|
||||||
|
)
|
||||||
|
catch || {
|
||||||
|
echo "Build script exited with exit code $? at step 6: firesim setup. Check the above logs for more details on the error."
|
||||||
|
exit $?
|
||||||
|
}
|
||||||
|
|
||||||
# precompile firesim scala sources
|
# precompile firesim scala sources
|
||||||
if run_step "7"; then
|
if run_step "7"; then
|
||||||
pushd $CYDIR/sims/firesim
|
try; (
|
||||||
(
|
source $CYDIR/scripts/build-step-precompile-firesim-scala.sh
|
||||||
echo $CYDIR
|
|
||||||
source sourceme-manager.sh --skip-ssh-setup
|
|
||||||
pushd sim
|
|
||||||
make sbt SBT_COMMAND="project {file:$CYDIR}firechip; compile" TARGET_PROJECT=firesim
|
|
||||||
popd
|
|
||||||
)
|
)
|
||||||
popd
|
catch || {
|
||||||
|
echo "Build script exited with exit code $? at step 7: firesim pre-compile sources. Check the above logs for more details on the error."
|
||||||
|
exit $?
|
||||||
|
}
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# setup firemarshal
|
# setup firemarshal
|
||||||
if run_step "8"; then
|
if run_step "8"; then
|
||||||
pushd $CYDIR/software/firemarshal
|
pushd $CYDIR/software/firemarshal
|
||||||
./init-submodules.sh
|
try; (
|
||||||
|
./init-submodules.sh
|
||||||
|
)
|
||||||
|
catch || {
|
||||||
|
echo "Build script exited with exit code $? at step 8: firemarshal setup. Check the above logs for more details on the error."
|
||||||
|
exit $?
|
||||||
|
}
|
||||||
|
|
||||||
# precompile firemarshal buildroot sources
|
# precompile firemarshal buildroot sources
|
||||||
if run_step "9"; then
|
if run_step "9"; then
|
||||||
source $CYDIR/scripts/fix-open-files.sh
|
try; (
|
||||||
./marshal $VERBOSE_FLAG build br-base.json
|
source $CYDIR/scripts/fix-open-files.sh &&
|
||||||
./marshal $VERBOSE_FLAG clean br-base.json
|
./marshal $VERBOSE_FLAG build br-base.json &&
|
||||||
|
./marshal $VERBOSE_FLAG clean br-base.json
|
||||||
|
)
|
||||||
|
catch || {
|
||||||
|
echo "Build script exited with exit code $? at step 9: firemarshal pre-compile buildroot sources. Check the above logs for more details on the error."
|
||||||
|
exit $?
|
||||||
|
}
|
||||||
fi
|
fi
|
||||||
popd
|
popd
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# do misc. cleanup for a "clean" git status
|
# do misc. cleanup for a "clean" git status
|
||||||
if run_step "10"; then
|
if run_step "10"; then
|
||||||
$CYDIR/scripts/repo-clean.sh
|
try; (
|
||||||
|
$CYDIR/scripts/repo-clean.sh
|
||||||
|
)
|
||||||
|
catch || {
|
||||||
|
echo "Build script exited with exit code $? at step 10: repository cleanup. Check the above logs for more details on the error."
|
||||||
|
exit $?
|
||||||
|
}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cat <<EOT >> env.sh
|
cat <<EOT >> env.sh
|
||||||
|
|||||||
21
scripts/build-step-init-conda-environment.sh
Executable file
21
scripts/build-step-init-conda-environment.sh
Executable file
@@ -0,0 +1,21 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# This script is intended to be used as a sub-step of build-setup.sh.
|
||||||
|
|
||||||
|
# note: lock file must end in .conda-lock.yml - see https://github.com/conda-incubator/conda-lock/issues/154
|
||||||
|
set -e
|
||||||
|
CONDA_REQS=$CYDIR/conda-reqs
|
||||||
|
CONDA_LOCK_REQS=$CONDA_REQS/conda-lock-reqs
|
||||||
|
# must match with the file generated by generate-conda-lockfile.sh
|
||||||
|
LOCKFILE=$CONDA_LOCK_REQS/conda-requirements-$TOOLCHAIN_TYPE-linux-64.conda-lock.yml
|
||||||
|
|
||||||
|
if [ "$USE_UNPINNED_DEPS" = true ]; then
|
||||||
|
# auto-gen the lockfiles
|
||||||
|
$CYDIR/scripts/generate-conda-lockfiles.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
# use conda-lock to create env
|
||||||
|
conda-lock install --conda $(which conda) -p $CYDIR/.conda-env $LOCKFILE
|
||||||
|
|
||||||
|
source $CYDIR/.conda-env/etc/profile.d/conda.sh
|
||||||
|
conda activate $CYDIR/.conda-env
|
||||||
10
scripts/build-step-precompile-chipyard-scala.sh
Normal file
10
scripts/build-step-precompile-chipyard-scala.sh
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# This script is intended to be used as a sub-step of build-setup.sh.
|
||||||
|
|
||||||
|
set -e
|
||||||
|
pushd $CYDIR/sims/verilator
|
||||||
|
make launch-sbt SBT_COMMAND=";project chipyard; compile"
|
||||||
|
make launch-sbt SBT_COMMAND=";project tapeout; compile"
|
||||||
|
popd
|
||||||
|
|
||||||
12
scripts/build-step-precompile-firesim-scala.sh
Normal file
12
scripts/build-step-precompile-firesim-scala.sh
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# This script is intended to be used as a sub-step of build-setup.sh.
|
||||||
|
pushd $CYDIR/sims/firesim
|
||||||
|
(
|
||||||
|
echo $CYDIR
|
||||||
|
source sourceme-manager.sh --skip-ssh-setup
|
||||||
|
pushd sim
|
||||||
|
make sbt SBT_COMMAND="project {file:$CYDIR}firechip; compile" TARGET_PROJECT=firesim
|
||||||
|
popd
|
||||||
|
)
|
||||||
|
popd
|
||||||
@@ -53,3 +53,24 @@ function restore_bash_options
|
|||||||
{
|
{
|
||||||
set +vx; eval "$OLDSTATE"
|
set +vx; eval "$OLDSTATE"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Basic try-catch block implementation
|
||||||
|
# for bash scripts.
|
||||||
|
# Usage: try; ( run commands )
|
||||||
|
# catch || { handle error }
|
||||||
|
# Source: https://stackoverflow.com/a/25180186/5121242
|
||||||
|
#######################################
|
||||||
|
function try()
|
||||||
|
{
|
||||||
|
[[ $- = *e* ]]; SAVED_OPT_E=$?
|
||||||
|
set +e
|
||||||
|
}
|
||||||
|
|
||||||
|
function catch()
|
||||||
|
{
|
||||||
|
export ex_code=$?
|
||||||
|
(( $SAVED_OPT_E )) && set +e
|
||||||
|
return $ex_code
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user