From 6422a9d338ed0cd7816a721e16e0b2b5701772ef Mon Sep 17 00:00:00 2001 From: Patrick Lehmann Date: Thu, 10 Nov 2016 03:31:25 +0100 Subject: Implemented vendor compile script for UVVM (Bash). --- libraries/vendors/compile-uvvm.sh | 386 +++++++++++++++++++++++++++++++++++++ libraries/vendors/compile-vunit.sh | 4 +- libraries/vendors/config.sh | 3 + 3 files changed, 391 insertions(+), 2 deletions(-) create mode 100644 libraries/vendors/compile-uvvm.sh (limited to 'libraries') diff --git a/libraries/vendors/compile-uvvm.sh b/libraries/vendors/compile-uvvm.sh new file mode 100644 index 000000000..94485421e --- /dev/null +++ b/libraries/vendors/compile-uvvm.sh @@ -0,0 +1,386 @@ +#! /usr/bin/env bash +# EMACS settings: -*- tab-width: 2; indent-tabs-mode: t -*- +# vim: tabstop=2:shiftwidth=2:noexpandtab +# kate: tab-width 2; replace-tabs off; indent-width 2; +# +# ============================================================================== +# Authors: Patrick Lehmann +# +# Bash Script: Script to compile the UVVM library for GHDL on Linux +# +# Description: +# ------------------------------------ +# This is a Bash script (executable) which: +# - creates a subdirectory in the current working directory +# - compiles all UVVM packages +# +# ============================================================================== +# Copyright (C) 2015-2016 Patrick Lehmann - Dresden, Germany +# +# GHDL 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, or (at your option) any later +# version. +# +# GHDL 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 GHDL; see the file COPYING. If not, write to the Free +# Software Foundation, 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. +# ============================================================================== + +# --------------------------------------------- +# work around for Darwin (Mac OS) +READLINK=readlink; if [[ $(uname) == "Darwin" ]]; then READLINK=greadlink; fi + +# save working directory +WorkingDir=$(pwd) +ScriptDir="$(dirname $0)" +ScriptDir="$($READLINK -f $ScriptDir)" + +# source configuration file from GHDL's 'vendors' library directory +source $ScriptDir/config.sh +source $ScriptDir/shared.sh + +# command line argument processing +NO_COMMAND=1 +SUPPRESS_WARNINGS=0 +HALT_ON_ERROR=0 +GHDLBinDir="" +DestDir="" +SrcDir="" +while [[ $# > 0 ]]; do + key="$1" + case $key in + -c|--clean) + CLEAN=TRUE + NO_COMMAND=0 + ;; + -a|--all) + COMPILE_ALL=TRUE + NO_COMMAND=0 + ;; + --uvvm) + COMPILE_UVVM=TRUE + NO_COMMAND=0 + ;; + --uvvm-vip) + COMPILE_UVVM_VIP=TRUE + NO_COMMAND=0 + ;; + -h|--help) + HELP=TRUE + NO_COMMAND=0 + ;; + -n|--no-warnings) + SUPPRESS_WARNINGS=1 + ;; + -H|--halt-on-error) + HALT_ON_ERROR=1 + ;; + --ghdl) + GHDLBinDir="$2" + shift # skip argument + ;; + --src) + SrcDir="$2" + shift # skip argument + ;; + --out) + DestDir="$2" + shift # skip argument + ;; + *) # unknown option + echo 1>&2 -e "${COLORED_ERROR} Unknown command line option '$key'.${ANSI_NOCOLOR}" + exit -1 + ;; + esac + shift # past argument or value +done + +# makes no sense to enable it for UVVM +SKIP_EXISTING_FILES=0 + +if [ $NO_COMMAND -eq 1 ]; then + HELP=TRUE +fi + +if [ "$HELP" == "TRUE" ]; then + test $NO_COMMAND -eq 1 && echo 1>&2 -e "/n${COLORED_ERROR} No command selected." + echo "" + echo "Synopsis:" + echo " A script to compile the simulation library 'uvvm_util' for GHDL on Linux." + echo " A library folder 'uvvm_util/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 params." + echo "" + echo "Usage:" + echo " compile-uvvm.sh | [] []" + 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 "Library compile options:" + echo " -H --halt-on-error Halt on error(s)." + echo "" + echo "Advanced options:" + echo " --ghdl Path to GHDL's binary directory, e.g. /usr/local/bin" + echo " --out Name of the output directory, e.g. uvvm_util" + echo " --src Path to the sources." + echo "" + echo "Verbosity:" + echo " -n --no-warnings Suppress all warnings. Show only error messages." + echo "" + exit 0 +fi + +if [ "$COMPILE_ALL" == "TRUE" ]; then + COMPILE_UVVM=TRUE + COMPILE_UVVM_VIP=TRUE +fi +if [ "$COMPILE_UVVM" == "TRUE" ]; then + COMPILE_UVVM_UTILITIES=TRUE + COMPILE_UVVM_VVC_FRAMEWORK=TRUE +fi +if [ "$COMPILE_UVVM_VIP" == "TRUE" ]; then + COMPILE_UVVM_VIP_AXILITE=TRUE + COMPILE_UVVM_VIP_AXISTREAM=TRUE + COMPILE_UVVM_VIP_I2C=TRUE + COMPILE_UVVM_VIP_SBI=TRUE + COMPILE_UVVM_VIP_UART=TRUE +fi + +# -> $SourceDirectories +# -> $DestinationDirectories +# -> $SrcDir +# -> $DestDir +# -> $GHDLBinDir +# <= $SourceDirectory +# <= $DestinationDirectory +# <= $GHDLBinary +SetupDirectories UVVM "UVVM" + +# create "uvvm_util" directory and change to it +# => $DestinationDirectory +CreateDestinationDirectory +cd $DestinationDirectory + + +# => $SUPPRESS_WARNINGS +# <= $GRC_COMMAND +SetupGRCat + + +# define global GHDL Options +GHDL_OPTIONS=(-fexplicit -frelaxed-rules --no-vital-checks --warn-binding --mb-comments) + +# create a set of GHDL parameters +GHDL_PARAMS=(${GHDL_OPTIONS[@]}) +GHDL_PARAMS+=(--std=08 -P$DestinationDirectory) + +# Cleanup directory +# ============================================================================== +if [ "$CLEAN" == "TRUE" ]; then + echo -e "${ANSI_YELLOW}Cleaning up vendor directory ...${ANSI_NOCOLOR}" + rm *.o 2> /dev/null + rm *.cf 2> /dev/null +fi + +# UVVM libraries +# ============================================================================== +# compile uvvm_util packages +ERRORCOUNT=0 +if [ "$COMPILE_UVVM" == "TRUE" ]; then + Library="uvvm_util" + VHDLVersion="v08" + Files=( + uvvm_util/src/types_pkg.vhd + uvvm_util/src/adaptations_pkg.vhd + uvvm_util/src/string_methods_pkg.vhd + uvvm_util/src/protected_types_pkg.vhd + uvvm_util/src/hierarchy_linked_list_pkg.vhd + uvvm_util/src/alert_hierarchy_pkg.vhd + uvvm_util/src/license_pkg.vhd + uvvm_util/src/methods_pkg.vhd + uvvm_util/src/bfm_common_pkg.vhd + uvvm_util/src/uvvm_util_context.vhd + ) + + # append absolute source path + SourceFiles=() + for File in ${Files[@]}; do + SourceFiles+=("$SourceDirectory/$File") + done + + GHDLCompilePackages +fi + +# compile uvvm_vvc_framework packages +ERRORCOUNT=0 +if [ "$COMPILE_UVVM" == "TRUE" ]; then + Library="uvvm_vvc_framework" + VHDLVersion="v08" + Files=( + uvvm_vvc_framework/src/ti_vvc_framework_support_pkg.vhd + uvvm_vvc_framework/src/ti_generic_queue_pkg.vhd + uvvm_vvc_framework/src/ti_data_queue_pkg.vhd + uvvm_vvc_framework/src/ti_data_fifo_pkg.vhd + uvvm_vvc_framework/src/ti_data_stack_pkg.vhd + ) + + # append absolute source path + SourceFiles=() + for File in ${Files[@]}; do + SourceFiles+=("$SourceDirectory/$File") + done + + GHDLCompilePackages +fi + +# Verification IPs +# ============================================================================== +# compile bitvis_vip_axilite packages +ERRORCOUNT=0 +if [ "$COMPILE_UVVM_VIP_AXILITE" == "TRUE" ]; then + Library="bitvis_vip_axilite" + VHDLVersion="v08" + Files=( + bitvis_vip_axilite/src/axilite_bfm_pkg.vhd + bitvis_vip_axilite/src/vvc_cmd_pkg.vhd + uvvm_vvc_framework/src_target_dependent/td_target_support_pkg.vhd + uvvm_vvc_framework/src_target_dependent/td_vvc_framework_common_methods_pkg.vhd + bitvis_vip_axilite/src/vvc_methods_pkg.vhd + uvvm_vvc_framework/src_target_dependent/td_queue_pkg.vhd + uvvm_vvc_framework/src_target_dependent/td_vvc_entity_support_pkg.vhd + bitvis_vip_axilite/src/axilite_vvc.vhd + ) + + # append absolute source path + SourceFiles=() + for File in ${Files[@]}; do + SourceFiles+=("$SourceDirectory/$File") + done + + GHDLCompilePackages +fi + +# compile bitvis_vip_axistream packages +ERRORCOUNT=0 +if [ "$COMPILE_UVVM_VIP_AXISTREAM" == "TRUE" ]; then + Library="bitvis_vip_axistream" + VHDLVersion="v08" + Files=( + bitvis_vip_axistream/src/axistream_bfm_pkg.vhd + bitvis_vip_axistream/src/vvc_cmd_pkg.vhd + uvvm_vvc_framework/src_target_dependent/td_target_support_pkg.vhd + uvvm_vvc_framework/src_target_dependent/td_vvc_framework_common_methods_pkg.vhd + bitvis_vip_axistream/src/vvc_methods_pkg.vhd + uvvm_vvc_framework/src_target_dependent/td_queue_pkg.vhd + uvvm_vvc_framework/src_target_dependent/td_vvc_entity_support_pkg.vhd + bitvis_vip_axistream/src/axistream_vvc.vhd + ) + + # append absolute source path + SourceFiles=() + for File in ${Files[@]}; do + SourceFiles+=("$SourceDirectory/$File") + done + + GHDLCompilePackages +fi + +# compile bitvis_vip_i2c packages +ERRORCOUNT=0 +if [ "$COMPILE_UVVM_VIP_I2C" == "TRUE" ]; then + Library="bitvis_vip_i2c" + VHDLVersion="v08" + Files=( + bitvis_vip_i2c/src/i2c_bfm_pkg.vhd + bitvis_vip_i2c/src/vvc_cmd_pkg.vhd + uvvm_vvc_framework/src_target_dependent/td_target_support_pkg.vhd + uvvm_vvc_framework/src_target_dependent/td_vvc_framework_common_methods_pkg.vhd + bitvis_vip_i2c/src/vvc_methods_pkg.vhd + uvvm_vvc_framework/src_target_dependent/td_queue_pkg.vhd + uvvm_vvc_framework/src_target_dependent/td_vvc_entity_support_pkg.vhd + bitvis_vip_i2c/src/i2c_vvc.vhd + ) + + # append absolute source path + SourceFiles=() + for File in ${Files[@]}; do + SourceFiles+=("$SourceDirectory/$File") + done + + GHDLCompilePackages +fi + +# compile bitvis_vip_sbi packages +ERRORCOUNT=0 +if [ "$COMPILE_UVVM_VIP_SBI" == "TRUE" ]; then + Library="bitvis_vip_sbi" + VHDLVersion="v08" + Files=( + bitvis_vip_sbi/src/sbi_bfm_pkg.vhd + bitvis_vip_sbi/src/vvc_cmd_pkg.vhd + uvvm_vvc_framework/src_target_dependent/td_target_support_pkg.vhd + uvvm_vvc_framework/src_target_dependent/td_vvc_framework_common_methods_pkg.vhd + bitvis_vip_sbi/src/vvc_methods_pkg.vhd + uvvm_vvc_framework/src_target_dependent/td_queue_pkg.vhd + uvvm_vvc_framework/src_target_dependent/td_vvc_entity_support_pkg.vhd + bitvis_vip_sbi/src/sbi_vvc.vhd + ) + + # append absolute source path + SourceFiles=() + for File in ${Files[@]}; do + SourceFiles+=("$SourceDirectory/$File") + done + + GHDLCompilePackages +fi + +# compile bitvis_vip_uart packages +ERRORCOUNT=0 +if [ "$COMPILE_UVVM_VIP_UART" == "TRUE" ]; then + Library="bitvis_vip_uart" + VHDLVersion="v08" + Files=( + bitvis_vip_uart/src/uart_bfm_pkg.vhd + bitvis_vip_uart/src/vvc_cmd_pkg.vhd + uvvm_vvc_framework/src_target_dependent/td_target_support_pkg.vhd + uvvm_vvc_framework/src_target_dependent/td_vvc_framework_common_methods_pkg.vhd + bitvis_vip_uart/src/vvc_methods_pkg.vhd + uvvm_vvc_framework/src_target_dependent/td_queue_pkg.vhd + uvvm_vvc_framework/src_target_dependent/td_vvc_entity_support_pkg.vhd + bitvis_vip_uart/src/uart_rx_vvc.vhd + bitvis_vip_uart/src/uart_tx_vvc.vhd + bitvis_vip_uart/src/uart_vvc.vhd + ) + + # append absolute source path + SourceFiles=() + for File in ${Files[@]}; do + SourceFiles+=("$SourceDirectory/$File") + done + + GHDLCompilePackages +fi + +echo "--------------------------------------------------------------------------------" +echo -n "Compiling UVVM packages " +if [ $ERRORCOUNT -gt 0 ]; then + echo -e $COLORED_FAILED +else + echo -e $COLORED_SUCCESSFUL +fi diff --git a/libraries/vendors/compile-vunit.sh b/libraries/vendors/compile-vunit.sh index 0f98d2cd6..277ec47ef 100755 --- a/libraries/vendors/compile-vunit.sh +++ b/libraries/vendors/compile-vunit.sh @@ -110,7 +110,7 @@ if [ "$HELP" == "TRUE" ]; then echo "" echo "Synopsis:" echo " A script to compile the simulation library 'vunit_lib' for GHDL on Linux." - echo " A library folder 'vunit/v08' will be created relative to the current" + echo " A library folder 'vunit_lib/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 params." @@ -131,7 +131,7 @@ if [ "$HELP" == "TRUE" ]; then echo "" echo "Advanced options:" echo " --ghdl Path to GHDL's binary directory, e.g. /usr/local/bin" - echo " --out Name of the output directory, e.g. vunit" + echo " --out Name of the output directory, e.g. vunit_lib" echo " --src Path to the sources." echo "" echo "Verbosity:" diff --git a/libraries/vendors/config.sh b/libraries/vendors/config.sh index 357236f61..d4606512b 100644 --- a/libraries/vendors/config.sh +++ b/libraries/vendors/config.sh @@ -43,6 +43,7 @@ declare -A InstallationDirectories InstallationDirectories[AlteraQuartus]="" # "/opt/altera/16.0/quartus" InstallationDirectories[LatticeDiamond]="" # "/usr/local/diamond/3.7_x64" InstallationDirectories[OSVVM]="" # "~/git/github/osvvm" +InstallationDirectories[UVVM]="" # "~/git/github/uvvm_all" InstallationDirectories[VUnit]="" # "~/git/github/vunit" InstallationDirectories[XilinxISE]="" # "/opt/Xilinx/14.7/ISE_DS/ISE" InstallationDirectories[XilinxVivado]="" # "/opt/Xilinx/Vivado/2016.2" @@ -52,6 +53,7 @@ declare -A DestinationDirectories DestinationDirectories[AlteraQuartus]="altera" DestinationDirectories[LatticeDiamond]="lattice" DestinationDirectories[OSVVM]="." # "osvvm" +DestinationDirectories[UVVM]="." DestinationDirectories[VUnit]="." # "vunit_lib" DestinationDirectories[XilinxISE]="xilinx-ise" DestinationDirectories[XilinxVivado]="xilinx-vivado" @@ -63,6 +65,7 @@ SourceDirectories[XilinxISE]="vhdl/src" SourceDirectories[XilinxVivado]="data/vhdl/src" SourceDirectories[LatticeDiamond]="cae_library/simulation/vhdl" SourceDirectories[OSVVM]="." +SourceDirectories[UVVM]="." SourceDirectories[VUnit]="vunit/vhdl" # input files greater than $LARGE_FILESIZE are skipped if '--skip-largefiles' is set -- cgit v1.2.3