aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/vendors/compile-uvvm.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/vendors/compile-uvvm.sh')
-rwxr-xr-xscripts/vendors/compile-uvvm.sh437
1 files changed, 437 insertions, 0 deletions
diff --git a/scripts/vendors/compile-uvvm.sh b/scripts/vendors/compile-uvvm.sh
new file mode 100755
index 000000000..d33743a87
--- /dev/null
+++ b/scripts/vendors/compile-uvvm.sh
@@ -0,0 +1,437 @@
+#! /usr/bin/env bash
+# ==============================================================================
+# Authors:
+# Patrick Lehmann
+#
+# Bash Script (executable):
+# Script to compile the UVVM library for GHDL on Linux.
+#
+# Description:
+# - Creates a subdirectory in the current working directory
+# - Compiles all UVVM packages and verification IPs
+#
+# ==============================================================================
+# Copyright (C) 2017-2021 Patrick Lehmann - Boetzingen, Germany
+# Copyright (C) 2015-2016 Patrick Lehmann - Dresden, Germany
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <gnu.org/licenses>.
+# ==============================================================================
+
+# Work around for Darwin (Mac OS)
+test greadlink --version > /dev/null 2>&1 && READLINK=greadlink || READLINK=readlink
+
+# Save working directory
+WorkingDir=$(pwd)
+ScriptDir="$(dirname $0)"
+ScriptDir="$($READLINK -f $ScriptDir)"
+
+# Source Bash utilities
+source $ScriptDir/../ansi_color.sh
+if [[ $? -ne 0 ]]; then echo 1>&2 -e "${COLORED_ERROR} While loading Bash utilities.${ANSI_NOCOLOR}" ; exit 1; fi
+
+
+# Command line argument processing
+COMMAND=1
+CLEAN=0
+COMPILE_UVVM=0
+COMPILE_UVVM_UTILITIES=0
+COMPILE_UVVM_VVC_FRAMEWORK=0
+COMPILE_UVVM_VIP=0
+COMPILE_UVVM_VIP_AVALON_MM=0
+COMPILE_UVVM_VIP_AVALON_ST=0
+COMPILE_UVVM_VIP_AXI=0
+COMPILE_UVVM_VIP_AXILITE=0
+COMPILE_UVVM_VIP_AXISTREAM=0
+COMPILE_UVVM_VIP_CLOCK_GENERATOR=0
+COMPILE_UVVM_VIP_ERROR_INJECTION=0
+COMPILE_UVVM_VIP_ETHERNET=0
+COMPILE_UVVM_VIP_GMII=0
+COMPILE_UVVM_VIP_GPIO=0
+COMPILE_UVVM_VIP_HVVC_TO_VVC_BRIDGE=0
+COMPILE_UVVM_VIP_I2C=0
+COMPILE_UVVM_VIP_RGMII=0
+COMPILE_UVVM_VIP_SBI=0
+COMPILE_UVVM_VIP_SCOREBOARD=0
+COMPILE_UVVM_VIP_SPEC_COV=0
+COMPILE_UVVM_VIP_SPI=0
+COMPILE_UVVM_VIP_UART=0
+VERBOSE=0
+DEBUG=0
+FILTERING=1
+SUPPRESS_WARNINGS=0
+HALT_ON_ERROR=0
+DestDir=""
+SrcDir=""
+while [[ $# -gt 0 ]]; do
+ case "$1" in
+ -c|--clean)
+ COMMAND=3
+ CLEAN=1
+ ;;
+ -a|--all)
+ COMMAND=2
+ ;;
+ --uvvm)
+ COMMAND=3
+ COMPILE_UVVM=1
+ ;;
+ --uvvm-vip)
+ COMMAND=3
+ COMPILE_UVVM_VIP=1
+ ;;
+ --uvvm-utilities)
+ COMMAND=3
+ COMPILE_UVVM_UTILITIES=1
+ ;;
+ --uvvm-vvc-framework)
+ COMMAND=3
+ COMPILE_UVVM_VVC_FRAMEWORK=1
+ ;;
+ --uvvm-vip-avalon_mm)
+ COMMAND=3
+ COMPILE_UVVM_VIP_AVALON_MM=1
+ ;;
+ --uvvm-vip-avalon_st)
+ COMMAND=3
+ COMPILE_UVVM_VIP_AVALON_ST=1
+ ;;
+ --uvvm-vip-axi)
+ COMMAND=3
+ COMPILE_UVVM_VIP_AXI=1
+ ;;
+ --uvvm-vip-axi_lite)
+ COMMAND=3
+ COMPILE_UVVM_VIP_AXILITE=1
+ ;;
+ --uvvm-vip-axi_stream)
+ COMMAND=3
+ COMPILE_UVVM_VIP_AXISTREAM=1
+ ;;
+ --uvvm-vip-clock)
+ COMMAND=3
+ COMPILE_UVVM_VIP_CLOCK_GENERATOR=1
+ ;;
+ --uvvm-vip-error)
+ COMMAND=3
+ COMPILE_UVVM_VIP_ERROR_INJECTION=1
+ ;;
+ --uvvm-vip-ethernet)
+ COMMAND=3
+ COMPILE_UVVM_VIP_ETHERNET=1
+ ;;
+ --uvvm-vip-gmii)
+ COMMAND=3
+ COMPILE_UVVM_VIP_GMII=1
+ ;;
+ --uvvm-vip-gpio)
+ COMMAND=3
+ COMPILE_UVVM_VIP_GPIO=1
+ ;;
+ --uvvm-vip-hvvc2vvc)
+ COMMAND=3
+ COMPILE_UVVM_VIP_HVVC_TO_VVC_BRIDGE=1
+ ;;
+ --uvvm-vip-i2c)
+ COMMAND=3
+ COMPILE_UVVM_VIP_I2C=1
+ ;;
+ --uvvm-vip-rgmii)
+ COMMAND=3
+ COMPILE_UVVM_VIP_RGMII=1
+ ;;
+ --uvvm-vip-sbi)
+ COMMAND=3
+ COMPILE_UVVM_VIP_SBI=1
+ ;;
+ --uvvm-vip-spec)
+ COMMAND=3
+ COMPILE_UVVM_VIP_SPEC_COV=1
+ ;;
+ --uvvm-vip-spi)
+ COMMAND=3
+ COMPILE_UVVM_VIP_SPI=1
+ ;;
+ --uvvm-vip-scoreboard)
+ COMMAND=3
+ COMPILE_UVVM_VIP_SCOREBOARD=1
+ ;;
+ --uvvm-vip-uart)
+ COMMAND=3
+ COMPILE_UVVM_VIP_UART=1
+ ;;
+ -v|--verbose)
+ VERBOSE=1
+ ;;
+ -d|--debug)
+ VERBOSE=1
+ DEBUG=1
+ ;;
+ -h|--help)
+ COMMAND=0
+ break
+ ;;
+ -n|--no-filter)
+ FILTERING=0
+ ;;
+ -N|--no-warnings)
+ SUPPRESS_WARNINGS=1
+ ;;
+ -H|--halt-on-error)
+ HALT_ON_ERROR=1
+ ;;
+ --ghdl)
+ GHDL="$2" # overwrite a potentially existing GHDL environment variable
+ shift # skip argument
+ ;;
+ --source)
+ SrcDir="$2"
+ shift # skip argument
+ ;;
+ --output)
+ DestDir="$2"
+ shift # skip argument
+ ;;
+ *) # unknown option
+ echo 1>&2 -e "\n${COLORED_ERROR} Unknown command line option '$1'.${ANSI_NOCOLOR}"
+ COMMAND=0
+ break
+ ;;
+ esac
+ shift # parsed argument or value
+done
+
+ERRORCOUNT=0
+
+if [[ $COMMAND -le 1 ]]; then
+ test $COMMAND -eq 1 && echo 1>&2 -e "\n${COLORED_ERROR} No command selected.${ANSI_NOCOLOR}"
+ echo ""
+ echo "Synopsis:"
+ echo " A script to compile the simulation library 'uvvm' for GHDL on Linux."
+ echo " A library folder 'uvvm/v08' will be created relative to the current"
+ echo " working directory."
+ echo ""
+ echo " Use the adv. options or edit 'config.sh' to supply paths and default parameters."
+ echo ""
+ echo "Usage:"
+ echo " compile-uvvm.sh [<verbosity>] <common command>|<library> [<options>] [<adv. options>]"
+ echo ""
+ echo "Common commands:"
+ echo " -h --help Print this help page"
+ echo " -c --clean Remove all generated files"
+ echo ""
+ echo "Libraries:"
+ echo " -a --all Compile all libraries."
+ echo " --uvvm Compile UVVM library packages."
+ echo " --uvvm-vip Compile UVVM Verification IPs (VIPs)."
+ echo ""
+ echo "Common Packages:"
+ echo " --uvvm-utilities UVVM utilities."
+ echo " --uvvm-vvc-framework VHDL Verification Component (VVC) framework."
+ echo ""
+ echo "Verification IPs:"
+ echo " --uvvm-vip-avalon_mm Altera/Intel Avalon Memory Mapped"
+ echo " --uvvm-vip-avalon_st Altera/Intel Avalon Stream"
+ echo " --uvvm-vip-axi ARM AMBA AXI4"
+ echo " --uvvm-vip-axi_lite ARM AMBA AXI4-Lite"
+ echo " --uvvm-vip-axi_stream ARM AMBA AXI4-Stream"
+ echo " --uvvm-vip-clock Clock generator"
+ echo " --uvvm-vip-error Error injection"
+ echo " --uvvm-vip-ethernet Ethernet"
+ echo " --uvvm-vip-gmii GMII"
+ echo " --uvvm-vip-gpio General Purpose Input/Output (GPIO)"
+ echo " --uvvm-vip-hvvc2vvc HVVC to VVC bridge"
+ echo " --uvvm-vip-i2c Inter-Integrated Circuit (I²C)"
+ echo " --uvvm-vip-rgmii RGMII"
+ echo " --uvvm-vip-sbi Simple Bus Interface"
+ echo " --uvvm-vip-scoreboard Scoreboard"
+ echo " --uvvm-vip-spec Specification Coverage"
+ echo " --uvvm-vip-spi Serial Peripheral Interface"
+ echo " --uvvm-vip-uart Universal Asynchronous Receiver Transmitter (UART)"
+ echo ""
+ echo "Library compile options:"
+ echo " -H --halt-on-error Halt on error(s)."
+ echo ""
+ echo "Advanced options:"
+ echo " --ghdl <GHDL binary> Path to GHDL's executable, e.g. /usr/local/bin/ghdl"
+ echo " --output <dir name> Name of the output directory, e.g. uvvm_util"
+ echo " --source <Path to UVVM> Path to the sources."
+ echo ""
+ echo "Verbosity:"
+ echo " -v --verbose Print verbose messages."
+ echo " -d --debug Print debug messages."
+ echo " -n --no-filter Disable output filtering scripts."
+ echo " -N --no-warnings Suppress all warnings. Show only error messages."
+ echo ""
+ exit $COMMAND
+fi
+
+if [[ $COMMAND -eq 2 ]]; then
+ COMPILE_UVVM=1
+ COMPILE_UVVM_VIP=1
+fi
+if [[ $COMPILE_UVVM -eq 1 ]]; then
+ COMPILE_UVVM_UTILITIES=1
+ COMPILE_UVVM_VVC_FRAMEWORK=1
+fi
+if [[ $COMPILE_UVVM_VIP -eq 1 ]]; then
+ COMPILE_UVVM_VIP_AVALON_MM=1
+ COMPILE_UVVM_VIP_AVALON_ST=1
+ COMPILE_UVVM_VIP_AXI=1
+ COMPILE_UVVM_VIP_AXILITE=1
+ COMPILE_UVVM_VIP_AXISTREAM=1
+ COMPILE_UVVM_VIP_CLOCK_GENERATOR=1
+ COMPILE_UVVM_VIP_ERROR_INJECTION=1
+ COMPILE_UVVM_VIP_ETHERNET=1
+ COMPILE_UVVM_VIP_GMII=1
+ COMPILE_UVVM_VIP_GPIO=1
+ COMPILE_UVVM_VIP_HVVC_TO_VVC_BRIDGE=1
+ COMPILE_UVVM_VIP_I2C=1
+ COMPILE_UVVM_VIP_RGMII=1
+ COMPILE_UVVM_VIP_SBI=1
+ COMPILE_UVVM_VIP_SCOREBOARD=1
+ COMPILE_UVVM_VIP_SPEC_COV=1
+ COMPILE_UVVM_VIP_SPI=1
+ COMPILE_UVVM_VIP_UART=1
+fi
+
+
+# Source configuration file from GHDL's 'vendors' library directory
+echo -e "${ANSI_MAGENTA}Loading environment...${ANSI_NOCOLOR}"
+source $ScriptDir/config.sh
+if [[ $? -ne 0 ]]; then echo 1>&2 -e "${COLORED_ERROR} While loading configuration.${ANSI_NOCOLOR}" ; exit 1; fi
+source $ScriptDir/shared.sh
+if [[ $? -ne 0 ]]; then echo 1>&2 -e "${COLORED_ERROR} While loading further procedures.${ANSI_NOCOLOR}"; exit 1; fi
+
+# <= $VHDLVersion
+# <= $VHDLStandard
+# <= $VHDLFlavor
+GHDLSetup 2008
+
+# -> $SourceDirectories
+# -> $DestinationDirectories
+# -> $SrcDir
+# -> $DestDir
+# <= $SourceDirectory
+# <= $DestinationDirectory
+SetupDirectories UVVM "UVVM"
+
+# Create "uvvm" directory and change to it
+# => $DestinationDirectory
+CreateDestinationDirectory
+cd $DestinationDirectory
+
+
+# Extend global GHDL Options TODO: move to GHDLSetup
+Analyze_Parameters+=(
+ -fexplicit
+ -Wbinding
+ -Wno-shared
+)
+if [[ $DEBUG -eq 0 ]]; then
+ Analyze_Parameters+=(
+ -Wno-hide
+ )
+fi
+if [[ ! (VERBOSE -eq 1) && ($DEBUG -eq 1) ]]; then
+ Analyze_Parameters+=(
+ -Wno-others
+ -Wno-static
+ )
+fi
+Analyze_Parameters+=(
+ --ieee=$VHDLFlavor
+ --no-vital-checks
+ --std=$VHDLStandard
+ -frelaxed
+ -P$DestinationDirectory
+)
+
+
+# Cleanup directory
+# ==============================================================================
+if [[ $CLEAN -eq 1 ]]; then
+ echo -e "${ANSI_YELLOW}Cleaning up vendor directory ...${ANSI_NOCOLOR}"
+ rm *.o 2> /dev/null
+ rm *.cf 2> /dev/null
+fi
+
+
+# Read order of components
+# ==============================================================================
+test $VERBOSE -eq 1 && echo -e " ${ANSI_GRAY}Reading compile order files...${ANSI_NOCOLOR}"
+
+Components=()
+while IFS= read -r Component; do
+ Component=${Component%\r}
+ if [[ ${Component:0:2} != "# " ]]; then
+ Components+=("$Component")
+ fi
+done < <(cat "$SourceDirectory/script/component_list.txt")
+
+
+# Read libraries and Verification IPs
+# ==============================================================================
+VIPNames=()
+
+for ComponentName in "${Components[@]}"; do
+ x="${ComponentName%%_*}"
+ pos=${#x}+1
+ l=${ComponentName:$pos}
+ VIPName=${l^^}
+ LibraryPath=$ComponentName
+
+ VIPName=${VIPName//UTIL/UTILITIES}
+ VIPName=${VIPName//AXILITE/AXI_LITE}
+ VIPName=${VIPName//AXISTREAM/AXI_STREAM}
+
+ test $VERBOSE -eq 1 && echo -e " ${ANSI_GRAY}Found VIP '$VIPName' in '$LibraryPath'.${ANSI_NOCOLOR}"
+ test $DEBUG -eq 1 && echo -e " ${ANSI_DARK_GRAY}Reading compile order from '$SourceDirectory/$LibraryPath/script/compile_order.txt'${ANSI_NOCOLOR}"
+
+ # Reading component's files
+ StructName=$VIPName
+ Files=()
+
+ CompileOrderFile="$SourceDirectory/$LibraryPath/script/compile_order.txt"
+ if [[ -f "$CompileOrderFile" ]]; then
+ echo -e "${COLORED_ERROR} Compile order file '$CompileOrderFile' does not exist..${ANSI_NOCOLOR}"
+ continue
+ fi
+
+ while IFS= read -r File; do
+ File=${File%\r}
+ if [[ ${File:0:2} == "# " ]]; then
+ if [[ ${File:2:7} == "library" ]]; then
+ LibraryName=${File:10}
+ fi
+ else
+ Files+=("${File:3}")
+ fi
+ done < <(cat "$CompileOrderFile")
+
+ CreateLibraryStruct $StructName $LibraryName $LibraryPath $VHDLVersion "${Files[@]}"
+
+ VarName="COMPILE_UVVM_${VIPName}"
+ test ${!VarName} -eq 1 && Libraries+=("$StructName")
+done
+
+# Compile components
+if [[ ${#Libraries[@]} -ne 0 ]]; then
+ Compile "$SourceDirectory" "${Libraries[*]}"
+
+ echo "--------------------------------------------------------------------------------"
+ echo -e "Compiling UVVM packages and VIPs $(test $ERRORCOUNT -eq 0 && echo $COLORED_SUCCESSFUL || echo $COLORED_FAILED)"
+else
+ echo -e "${COLORED_ERROR} Neither UVVM packages nor VIPs selected.${ANSI_NOCOLOR}"
+ exit 2
+fi