f4pga-examples/.github/scripts/build-examples.sh

185 lines
6.9 KiB
Bash
Executable File

#!/bin/bash
#
# Copyright (C) 2020 The SymbiFlow Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
set -e
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
source ${CURRENT_DIR}/common.sh
# -- validate input ----------------------------------------------------------
function help() {
echo
echo "Build examples from the repository"
echo
echo "Syntax: $0 fpga_family [examples]..."
echo "Arguments:"
echo " fpga_family - A supported FPGA family"
echo " examples - A name of an available example"
echo
}
if [[ ! $# -ge 1 ]]; then
echo "Invalid number of arguments!"
help
exit 1
fi
# -- tuttest -----------------------------------------------------------------
fpga_family=$1
shift
examples="$@"
if [ "$fpga_family" == "xc7" -a -z "$examples" ]; then
examples="counter picosoc litex litex_linux button_controller timer pulse_width_led hello-a"
elif [ "$fpga_family" == "eos-s3" -a -z "$examples" ]; then
examples="counter"
fi
# activate conda and enter example dir
activate_env="docs/building-examples.rst:export-install-dir,fpga-fam-$fpga_family,conda-prep-env-$fpga_family,conda-act-env"
snippets="${activate_env},enter-dir-$fpga_family"
additionalDesigns="${activate_env},enter-dir-$fpga_family,additional_examples"
# Xilinx 7-Series examples
if [ "$fpga_family" = "xc7" ]; then
for example in $examples; do
case $example in
"counter")
snippets="${snippets} xc7/counter_test/README.rst:example-counter-*-group"
;;
"picosoc")
snippets="${snippets} xc7/picosoc_demo/README.rst:example-picosoc-*-group"
;;
"litex")
snippets="${snippets} xc7/litex_demo/README.rst:example-litex-dir,example-litex-req,example-litex_picorv32-*-group,example-litex_vexriscv-*-group"
;;
"litex_linux")
snippets="${snippets} xc7/linux_litex_demo/README.rst:example-litex-*-group"
;;
#Additional examples:
"button_controller")
snippets="${additionalDesigns} xc7/additional_examples/button_controller/README.rst:example-debouncer-basys3"
;;
"pulse_width_led")
snippets="${snippets} xc7/pulse_width_led/README.rst:example-pulse-arty-35t"
;;
"timer")
snippets="${snippets} xc7/timer/README.rst:example-watch-basys3"
;;
# Project F examples
"hello-a")
snippets="${activate_env} projf-makefiles/hello/hello-arty/A/README.rst:hello-arty-a"
;;
"hello-b")
snippets="${activate_env} projf-makefiles/hello/hello-arty/B/README.rst:hello-arty-b"
;;
"hello-c")
snippets="${activate_env} projf-makefiles/hello/hello-arty/C/README.rst:hello-arty-c"
;;
"hello-d")
snippets="${activate_env} projf-makefiles/hello/hello-arty/D/README.rst:hello-arty-d"
;;
"hello-e")
snippets="${activate_env} projf-makefiles/hello/hello-arty/E/README.rst:hello-arty-e"
;;
"hello-f")
snippets="${activate_env} projf-makefiles/hello/hello-arty/F/README.rst:hello-arty-f"
;;
"hello-g")
snippets="${activate_env} projf-makefiles/hello/hello-arty/G/README.rst:hello-arty-g"
;;
"hello-h")
snippets="${activate_env} projf-makefiles/hello/hello-arty/H/README.rst:hello-arty-h"
;;
"hello-i")
snippets="${activate_env} projf-makefiles/hello/hello-arty/I/README.rst:hello-arty-i"
;;
"hello-j")
snippets="${activate_env} projf-makefiles/hello/hello-arty/J/README.rst:hello-arty-j"
;;
"hello-k")
snippets="${activate_env} projf-makefiles/hello/hello-arty/K/README.rst:hello-arty-k"
;;
"hello-l")
snippets="${activate_env} projf-makefiles/hello/hello-arty/L/README.rst:hello-arty-l"
;;
"hello-b")
snippets="${activate_env} projf-makefiles/hello/hello-arty/B/README.rst:hello-arty-b"
;;
"hello-c")
snippets="${activate_env} projf-makefiles/hello/hello-arty/C/README.rst:hello-arty-c"
;;
"hello-d")
snippets="${activate_env} projf-makefiles/hello/hello-arty/D/README.rst:hello-arty-d"
;;
"hello-e")
snippets="${activate_env} projf-makefiles/hello/hello-arty/E/README.rst:hello-arty-e"
;;
"hello-f")
snippets="${activate_env} projf-makefiles/hello/hello-arty/F/README.rst:hello-arty-f"
;;
"hello-g")
snippets="${activate_env} projf-makefiles/hello/hello-arty/G/README.rst:hello-arty-g"
;;
"hello-h")
snippets="${activate_env} projf-makefiles/hello/hello-arty/H/README.rst:hello-arty-h"
;;
"hello-i")
snippets="${activate_env} projf-makefiles/hello/hello-arty/I/README.rst:hello-arty-i"
;;
"hello-j")
snippets="${activate_env} projf-makefiles/hello/hello-arty/J/README.rst:hello-arty-j"
;;
"hello-k")
snippets="${activate_env} projf-makefiles/hello/hello-arty/K/README.rst:hello-arty-k"
;;
"hello-l")
snippets="${activate_env} projf-makefiles/hello/hello-arty/L/README.rst:hello-arty-l"
;;
*)
echo "ERROR: Unknown example name: $example" >&2
exit 1
;;
esac
done
# QuickLogic EOS-S3 examples
elif [ "$fpga_family" = "eos-s3" ]; then
for example in $examples; do
case $example in
"counter")
snippets="${snippets} eos-s3/btn_counter/README.rst:eos-s3-counter"
;;
*)
echo "ERROR: Unknown example name: $example" >&2
exit 1
;;
esac
done
else
echo "ERROR: Unknown fpga_family: $fpga_family" >&2
exit 1
fi
# call tuttest
tuttest_exec ${snippets}