aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/vendors/shared.psm1
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/vendors/shared.psm1')
-rw-r--r--scripts/vendors/shared.psm1510
1 files changed, 510 insertions, 0 deletions
diff --git a/scripts/vendors/shared.psm1 b/scripts/vendors/shared.psm1
new file mode 100644
index 000000000..eb3c4c037
--- /dev/null
+++ b/scripts/vendors/shared.psm1
@@ -0,0 +1,510 @@
+# ==============================================================================
+# Authors: Patrick Lehmann
+#
+# ==============================================================================
+# 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>.
+# ==============================================================================
+
+# .SYNOPSIS
+# This module provides common CmdLets for the library pre-compilation process.
+#
+# .DESCRIPTION
+# This PowerShell module provides CommandLets (CmdLets) to handle the 'ghdl.exe'
+# output streams (stdout and stderr).
+#
+[CmdletBinding()]
+param(
+ [Parameter(Mandatory=$true)][string]$VendorToolName,
+ [Parameter(Mandatory=$true)][string]$WorkingDir
+)
+
+$Module_VendorToolName = $VendorToolName
+$Module_WorkingDir = $WorkingDir
+
+function Exit-CompileScript
+{ <#
+ .SYNOPSIS
+ Undocumented
+
+ .DESCRIPTION
+ Undocumented
+
+ .PARAMETER ExitCode
+ ExitCode of this script run
+ #>
+ [CmdletBinding()]
+ param(
+ [int]$ExitCode = 0
+ )
+
+ cd $Module_WorkingDir
+
+ # unload modules
+ Remove-Module config -Verbose:$false
+ Remove-Module shared -Verbose:$false
+
+ exit $ExitCode
+}
+
+function Get-SourceDirectory
+{ <#
+ .SYNOPSIS
+ Undocumented
+
+ .DESCRIPTION
+ Undocumented
+
+ .PARAMETER Source
+ Undocumented
+ .PARAMETER EnvSource
+ Undocumented
+ #>
+ [CmdletBinding()]
+ param(
+ [string]$Source,
+ [string]$EnvSource
+ )
+
+ $VendorToolInstallationDirectory = Get-VendorToolInstallationDirectory
+ $VendorToolSourceDirectory = Get-VendorToolSourceDirectory
+
+ if ($Source -ne "")
+ { $SourceDirectory = $Source.TrimEnd("\") }
+ elseif ($EnvSource -ne "")
+ { $SourceDirectory = $EnvSource }
+ elseif ($VendorToolInstallationDirectory -ne "")
+ { $SourceDirectory = $VendorToolInstallationDirectory + "\" + $VendorToolSourceDirectory }
+ else
+ { Write-Host "[ERROR]: $Module_VendorToolName is not configured in '$ScriptDir\config.psm1'." -ForegroundColor Red
+ Write-Host " Use adv. options '-Source' and '-Output' or configure 'config.psm1'." -ForegroundColor Red
+ Exit-CompileScript -1
+ }
+
+ if (-not (Test-Path $SourceDirectory -PathType Container))
+ { Write-Host "[ERROR]: Path '$SourceDirectory' does not exist." -ForegroundColor Red
+ Exit-CompileScript -1
+ }
+
+ return Convert-Path (Resolve-Path $SourceDirectory)
+}
+
+function Get-DestinationDirectory
+{ <#
+ .SYNOPSIS
+ Undocumented
+
+ .DESCRIPTION
+ Undocumented
+
+ .PARAMETER Output
+ Undocumented
+ #>
+ [CmdletBinding()]
+ param(
+ [string]$Output
+ )
+ if ($Output -ne "")
+ { $DestinationDirectory = $Output.TrimEnd("\") }
+ else
+ { $DestinationDirectory = Get-VendorToolDestinationDirectory }
+
+ if ($DestinationDirectory -eq "")
+ { Write-Host "[ERROR]: $Module_VendorToolName is not configured in '$ScriptDir\config.psm1'." -ForegroundColor Red
+ Write-Host " Use adv. options '-Source' and '-Output' or configure 'config.psm1'." -ForegroundColor Red
+ Exit-CompileScript -1
+ }
+
+ if (-not [System.IO.Path]::IsPathRooted($DestinationDirectory))
+ { $DestinationDirectory = "$Module_WorkingDir\$DestinationDirectory" }
+
+ return $DestinationDirectory
+}
+
+function Get-GHDLBinary
+{ <#
+ .SYNOPSIS
+ Undocumented
+
+ .DESCRIPTION
+ Undocumented
+
+ .PARAMETER GHDL
+ Undocumented
+ #>
+ [CmdletBinding()]
+ param(
+ [string]$GHDL
+ )
+
+ if ($GHDL -ne "")
+ { $GHDLBinary = $GHDL }
+ elseif (Test-Path env:GHDL)
+ { $GHDLBinary = $env:GHDL }
+ else
+ { try
+ { write-host "calling which ..."
+ $GHDLBinary = (Get-Command "ghdl.exe").Source }
+ catch
+ { Write-Host "Use adv. options '-GHDL' to set the GHDL executable." -ForegroundColor Red
+ Exit-CompileScript -1
+ }
+ }
+
+ if (-not (Test-Path $GHDLBinary -PathType Leaf))
+ { Write-Host "Use adv. options '-GHDL' to set the GHDL executable." -ForegroundColor Red
+ Exit-CompileScript -1
+ }
+
+ return $GHDLBinary
+}
+
+
+function Get-VHDLVariables
+{ <#
+ .SYNOPSIS
+ Undocumented
+
+ .DESCRIPTION
+ Undocumented
+
+ .PARAMETER VHDL93
+ Undocumented
+ .PARAMETER VHDL2008
+ Undocumented
+ #>
+ [CmdletBinding()]
+ param(
+ [switch]$VHDL93 = $false,
+ [switch]$VHDL2008 = $true
+ )
+
+ if ($VHDL93)
+ { $VHDLVersion = "v93"
+ $VHDLStandard = "93c"
+ $VHDLFlavor = "synopsys"
+ }
+ elseif ($VHDL2008)
+ { $VHDLVersion = "v08"
+ $VHDLStandard = "08"
+ $VHDLFlavor = "synopsys"
+ }
+ else
+ { $VHDLVersion = "v93"
+ $VHDLStandard = "93c"
+ $VHDLFlavor = "synopsys"
+ }
+ return $VHDLVersion,$VHDLStandard,$VHDLFlavor
+}
+
+function New-DestinationDirectory
+{ <#
+ .SYNOPSIS
+ Undocumented
+
+ .DESCRIPTION
+ Undocumented
+
+ .PARAMETER DestinationDirectory
+ Undocumented
+ #>
+ [CmdletBinding()]
+ param(
+ [Parameter(Mandatory=$true)][string]$DestinationDirectory
+ )
+
+ if (Test-Path $DestinationDirectory -PathType Container)
+ { Write-Host "Vendor directory '$DestinationDirectory' already exists." -ForegroundColor Yellow }
+ elseif (Test-Path $DestinationDirectory -PathType Leaf)
+ { Write-Host "[ERROR]: Vendor directory '$DestinationDirectory' already exists as a file." -ForegroundColor Red
+ Exit-CompileScript -1
+ }
+ else
+ { Write-Host "Creating vendor directory: '$DestinationDirectory'." -ForegroundColor Yellow
+ mkdir "$DestinationDirectory" -ErrorAction SilentlyContinue | Out-Null
+ }
+}
+
+function Start-PackageCompilation
+{ <#
+ .SYNOPSIS
+ Undocumented
+
+ .DESCRIPTION
+ Undocumented
+
+ .PARAMETER GHDLBinary
+ Undocumented
+ .PARAMETER GHDLOptions
+ Undocumented
+ .PARAMETER Library
+ Undocumented
+ .PARAMETER SourceFiles
+ Undocumented
+ .PARAMETER HaltOnError
+ Undocumented
+ #>
+ [CmdletBinding()]
+ param(
+ [Parameter(Mandatory=$true)][string]$GHDLBinary,
+ [Parameter(Mandatory=$true)][string[]]$Analyze_Parameters,
+ [Parameter(Mandatory=$true)][string]$DestinationDirectory,
+ [Parameter(Mandatory=$true)][string]$Library,
+ [Parameter(Mandatory=$true)][string]$VHDLVersion,
+ [Parameter(Mandatory=$true)][string[]]$SourceFiles,
+ [Parameter(Mandatory=$true)][bool]$SuppressWarnings,
+ [Parameter(Mandatory=$true)][bool]$HaltOnError
+ )
+ # set default valuesvalues
+ $EnableDebug = [bool]$PSCmdlet.MyInvocation.BoundParameters["Debug"]
+ $EnableVerbose = [bool]$PSCmdlet.MyInvocation.BoundParameters["Verbose"] -or $EnableDebug
+
+ $Parameters = $Analyze_Parameters
+
+ if ($EnableDebug)
+ { $Parameters += "-v"
+ $Indent = " "
+ }
+ elseif ($EnableVerbose)
+ { $Indent = " " }
+ else
+ { $Indent = " " }
+
+ Write-Host "Compiling library '$Library' ..." -ForegroundColor Yellow
+ $LibraryDirectory= "$DestinationDirectory/$Library/$VHDLVersion"
+ $EnableVerbose -and (Write-Host " Creating library $Library ..." -ForegroundColor Gray ) | Out-Null
+ $EnableDebug -and (Write-Host " mkdir $LibraryDirectory" -ForegroundColor DarkGray ) | Out-Null
+ mkdir $LibraryDirectory -ErrorAction SilentlyContinue | Out-Null
+ $EnableDebug -and (Write-Host " cd $LibraryDirectory" -ForegroundColor DarkGray ) | Out-Null
+ cd $LibraryDirectory
+ $ErrorCount = 0
+ foreach ($File in $SourceFiles)
+ { Write-Host " Analyzing package file '$File'" -ForegroundColor DarkCyan
+ $InvokeExpr = "& '$GHDLBinary' -a " + ($Parameters -join " ") + " --work=$Library " + $File + " 2>&1"
+ $EnableDebug -and (Write-Host " $InvokeExpr" -ForegroundColor DarkGray ) | Out-Null
+ $ErrorRecordFound = Invoke-Expression $InvokeExpr | Restore-NativeCommandStream | Write-ColoredGHDLLine $SuppressWarnings -Indent:"$Indent"
+ if (($LastExitCode -ne 0) -or $ErrorRecordFound)
+ { $ErrorCount += 1
+ if ($HaltOnError)
+ { break }
+ }
+ }
+
+ cd $DestinationDirectory
+ return $ErrorCount
+}
+
+function Start-PrimitiveCompilation
+{ <#
+ .SYNOPSIS
+ Undocumented
+
+ .DESCRIPTION
+ Undocumented
+
+ .PARAMETER GHDLBinary
+ Undocumented
+ .PARAMETER GHDLOptions
+ Undocumented
+ .PARAMETER Library
+ Undocumented
+ .PARAMETER SourceFiles
+ Undocumented
+ .PARAMETER HaltOnError
+ Undocumented
+ #>
+ [CmdletBinding()]
+ param(
+ [Parameter(Mandatory=$true)][string]$GHDLBinary,
+ [Parameter(Mandatory=$true)][string[]]$Analyze_Parameters,
+ [Parameter(Mandatory=$true)][string]$DestinationDirectory,
+ [Parameter(Mandatory=$true)][string]$Library,
+ [Parameter(Mandatory=$true)][string]$VHDLVersion,
+ [Parameter(Mandatory=$true)][string[]]$SourceFiles,
+ [Parameter(Mandatory=$true)][bool]$SuppressWarnings,
+ [Parameter(Mandatory=$true)][bool]$HaltOnError
+ )
+ # set default values
+ $EnableDebug = [bool]$PSCmdlet.MyInvocation.BoundParameters["Debug"]
+ $EnableVerbose = [bool]$PSCmdlet.MyInvocation.BoundParameters["Verbose"] -or $EnableDebug
+
+ $Parameters = $Analyze_Parameters
+
+ if ($EnableDebug)
+ { $Parameters += "-v"
+ $Indent = " "
+ }
+ elseif ($EnableVerbose)
+ { $Indent = " " }
+ else
+ { $Indent = " " }
+
+ Write-Host "Compiling library '$Library' ..." -ForegroundColor Cyan
+ $LibraryDirectory="$DestinationDirectory/$Library/$VHDLVersion"
+ $EnableVerbose -and (Write-Host " Creating library $Library ..." -ForegroundColor Gray ) | Out-Null
+ $EnableDebug -and (Write-Host " mkdir $LibraryDirectory" -ForegroundColor DarkGray ) | Out-Null
+ mkdir $LibraryDirectory -ErrorAction SilentlyContinue | Out-Null
+ $EnableDebug -and (Write-Host " cd $LibraryDirectory" -ForegroundColor DarkGray ) | Out-Null
+
+ cd $LibraryDirectory
+
+ $ErrorCount = 0
+ foreach ($File in $SourceFiles)
+ { $EnableVerbose -and (Write-Host " Analyzing primitive file '$File'" -ForegroundColor DarkCyan ) | Out-Null
+ $InvokeExpr = "& '$GHDLBinary' -a " + ($Parameters -join " ") + " --work=$Library " + $File + " 2>&1"
+ $EnableDebug -and (Write-Host " $InvokeExpr" -ForegroundColor DarkGray ) | Out-Null
+ $ErrorRecordFound = Invoke-Expression $InvokeExpr | Restore-NativeCommandStream | Write-ColoredGHDLLine $SuppressWarnings -Indent:"$Indent"
+ if (($LastExitCode -ne 0) -or $ErrorRecordFound)
+ { $ErrorCount += 1
+ if ($HaltOnError)
+ { break }
+ }
+ }
+
+ cd $DestinationDirectory
+ return $ErrorCount
+}
+
+
+function Restore-NativeCommandStream
+{ <#
+ .SYNOPSIS
+ This CmdLet gathers multiple ErrorRecord objects and reconstructs outputs
+ as a single line.
+
+ .DESCRIPTION
+ This CmdLet collects multiple ErrorRecord objects and emits one String
+ object per line.
+
+ .PARAMETER InputObject
+ A object stream is required as an input.
+ #>
+ [CmdletBinding()]
+ param(
+ [Parameter(ValueFromPipeline=$true)]
+ $InputObject
+ )
+
+ process
+ { if (-not $InputObject)
+ { Write-Host "Empty pipeline!" }
+ elseif ($InputObject -is [System.Management.Automation.ErrorRecord])
+ { if ($InputObject.FullyQualifiedErrorId -eq "NativeCommandError")
+ { Write-Output $InputObject.ToString() }
+ elseif ($InputObject.FullyQualifiedErrorId -eq "NativeCommandErrorMessage")
+ { Write-Output $InputObject.ToString() }
+ }
+ elseif ($InputObject -is [String])
+ { Write-Output $InputObject }
+ else
+ { Write-Host "Unsupported object in pipeline stream" }
+ }
+}
+
+function Write-ColoredGHDLLine
+{ <#
+ .SYNOPSIS
+ This CmdLet colors GHDL output lines.
+
+ .DESCRIPTION
+ This CmdLet colors GHDL output lines. Warnings are prefixed with 'WARNING: '
+ in yellow and errors are prefixed with 'ERROR: ' in red.
+
+ .PARAMETER InputObject
+ A object stream is required as an input.
+ .PARAMETER SuppressWarnings
+ Skip warning messages. (Show errors only.)
+ .PARAMETER Indent
+ Indentation string.
+ #>
+ [CmdletBinding()]
+ param(
+ [Parameter(ValueFromPipeline=$true)]
+ $InputObject,
+
+ [Parameter(Position=1)]
+ [switch]$SuppressWarnings = $false,
+ [Parameter(Position=2)]
+ [string]$Indent = ""
+ )
+
+ begin
+ { $ErrorRecordFound = $false }
+
+ process
+ { if ($InputObject -is [String])
+ { if ($InputObject -match ":\d+:\d+:warning:\s")
+ { if (-not $SuppressWarnings)
+ { Write-Host "${Indent}WARNING: " -NoNewline -ForegroundColor Yellow
+ Write-Host $InputObject
+ }
+ }
+ elseif ($InputObject -match ":\d+:\d+:note:\s")
+ { if (-not $SuppressWarnings)
+ { Write-Host "${Indent}NOTE: " -NoNewline -ForegroundColor DarkCyan
+ Write-Host $InputObject
+ }
+ }
+ elseif ($InputObject -match ":\d+:\d+:\s")
+ { $ErrorRecordFound = $true
+ Write-Host "${Indent}ERROR: " -NoNewline -ForegroundColor Red
+ Write-Host $InputObject
+ }
+ elseif ($InputObject -match ":warning:\s")
+ { Write-Host "${Indent}WARNING: " -NoNewline -ForegroundColor Yellow
+ Write-Host $InputObject
+ }
+ elseif ($InputObject -match ":error:\s")
+ { $ErrorRecordFound = $true
+ Write-Host "${Indent}ERROR: " -NoNewline -ForegroundColor Red
+ Write-Host $InputObject
+ }
+ elseif ($InputObject -match ": unknown option\s")
+ { $ErrorRecordFound = $true
+ Write-Host "${Indent}ERROR: " -NoNewline -ForegroundColor Red
+ Write-Host $InputObject
+ }
+ elseif ($InputObject -match ": cannot open\s")
+ { $ErrorRecordFound = $true
+ Write-Host "${Indent}ERROR: " -NoNewline -ForegroundColor Red
+ Write-Host $InputObject
+ }
+ else
+ { Write-Host "${Indent}$InputObject" }
+ }
+ else
+ { Write-Host "Unsupported object in pipeline stream" }
+ }
+
+ end
+ { $ErrorRecordFound }
+}
+
+Export-ModuleMember -Function 'Exit-CompileScript'
+
+Export-ModuleMember -Function 'Get-SourceDirectory'
+Export-ModuleMember -Function 'Get-DestinationDirectory'
+Export-ModuleMember -Function 'Get-GHDLBinary'
+
+Export-ModuleMember -Function 'Get-VHDLVariables'
+
+Export-ModuleMember -Function 'New-DestinationDirectory'
+Export-ModuleMember -Function 'Start-PackageCompilation'
+Export-ModuleMember -Function 'Start-PrimitiveCompilation'
+
+
+Export-ModuleMember -Function 'Restore-NativeCommandStream'
+Export-ModuleMember -Function 'Write-ColoredGHDLLine'