#! /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 OSVVM library for GHDL on Linux # # Description: # ------------------------------------ # This is a Bash script (executable) which: # - creates a subdirectory in the current working directory # - compiles all OSVVM 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 . $ScriptDir/../ansi_color.sh . $ScriptDir/config.sh . $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 ;; --osvvm) COMPILE_OSVVM=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 # skip argument or value done # makes no sense to enable it for OSVVM 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 'OSVVM' for GHDL on Linux." echo " A library folder 'osvvm/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-osvvm.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 " --osvvm Compile library osvvm." 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. vunit" 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_OSVVM=TRUE fi # -> $SourceDirectories # -> $DestinationDirectories # -> $SrcDir # -> $DestDir # -> $GHDLBinDir # <= $SourceDirectory # <= $DestinationDirectory # <= $GHDLBinary SetupDirectories OSVVM "OSVVM" # create "osvvm" 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) # Cleanup directory # ============================================================================== if [ "$CLEAN" == "TRUE" ]; then echo -e "${ANSI_YELLOW}Cleaning up directory ...${ANSI_NOCOLOR}" rm *.o 2> /dev/null rm *.cf 2> /dev/null fi # create local set of GHDL parameters GHDL_PARAMS=(--std=08) GHDL_PARAMS+=(${GHDL_OPTIONS[@]}) VHDLVersion="v08" # Library osvvm # ============================================================================== # compile osvvm packages ERRORCOUNT=0 if [ "$COMPILE_OSVVM" == "TRUE" ]; then Library="osvvm" Files=( NamePkg.vhd OsvvmGlobalPkg.vhd VendorCovApiPkg.vhd TranscriptPkg.vhd TextUtilPkg.vhd AlertLogPkg.vhd MessagePkg.vhd SortListPkg_int.vhd RandomBasePkg.vhd RandomPkg.vhd CoveragePkg.vhd MemoryPkg.vhd ScoreboardGenericPkg.vhd ScoreboardPkg_slv.vhd ScoreboardPkg_int.vhd ResolutionPkg.vhd TbUtilPkg.vhd OsvvmContext.vhd ) # append absolute source path SourceFiles=() for File in ${Files[@]}; do SourceFiles+=("$SourceDirectory/$File") done GHDLCompilePackages fi echo "--------------------------------------------------------------------------------" echo -n "Compiling OSVVM packages " if [ $ERRORCOUNT -gt 0 ]; then echo -e $COLORED_FAILED else echo -e $COLORED_SUCCESSFUL fi