aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/vendors/compile-xilinx-ise.ps1
diff options
context:
space:
mode:
authorumarcor <unai.martinezcorral@ehu.eus>2021-01-21 00:07:40 +0100
committerumarcor <unai.martinezcorral@ehu.eus>2021-01-21 01:41:16 +0100
commit67fc67033cc356b7874d67b42698c5391dfdbf98 (patch)
tree4c3ff74236c8486fdb36d98a07fbf4f56de83062 /scripts/vendors/compile-xilinx-ise.ps1
parent12d669cb9c048d09a0e103a6123cfe0a4aad0800 (diff)
downloadghdl-67fc67033cc356b7874d67b42698c5391dfdbf98.tar.gz
ghdl-67fc67033cc356b7874d67b42698c5391dfdbf98.tar.bz2
ghdl-67fc67033cc356b7874d67b42698c5391dfdbf98.zip
vendors: move vendor pre-compile scripts into subdir 'scripts'
Diffstat (limited to 'scripts/vendors/compile-xilinx-ise.ps1')
-rw-r--r--scripts/vendors/compile-xilinx-ise.ps1308
1 files changed, 308 insertions, 0 deletions
diff --git a/scripts/vendors/compile-xilinx-ise.ps1 b/scripts/vendors/compile-xilinx-ise.ps1
new file mode 100644
index 000000000..5c51f8f25
--- /dev/null
+++ b/scripts/vendors/compile-xilinx-ise.ps1
@@ -0,0 +1,308 @@
+# ==============================================================================
+# 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
+# Script to compile the simulation libraries from Xilinx ISE for GHDL on Windows.
+#
+# .DESCRIPTION
+# This CmdLet:
+# (1) creates a subdirectory in the current working directory
+# (2) compiles all Xilinx ISE simulation libraries and packages
+# - unisim (incl. secureip)
+# - unimacro
+# - simprim (incl. secureip)
+# - xilinxcorelib
+#
+[CmdletBinding()]
+param(
+ # Show the embedded help page(s)
+ [switch]$Help = $false,
+
+ # Compile all libraries and packages.
+ [switch]$All = $false,
+
+ # Compile the Xilinx simulation library.
+ [switch]$Unisim = $false,
+
+ # Compile the Xilinx macro library.
+ [switch]$Unimacro = $false,
+
+ # Compile the Xilinx post-map simulation library.
+ [switch]$Simprim = $false,
+
+ # Compile the Xilinx CoreLib simulation library.
+ [switch]$CoreLib = $false,
+
+ # Compile the Xilinx secureip library.
+ [switch]$SecureIP = $false,
+
+ # Clean up directory before analyzing.
+ [switch]$Clean = $false,
+
+ # Set VHDL Standard to '93
+ [switch]$VHDL93 = $false,
+ # Set VHDL Standard to '08
+ [switch]$VHDL2008 = $false,
+
+ # Skip warning messages. (Show errors only.)
+ [switch]$SuppressWarnings = $false,
+ # Halt on errors.
+ [switch]$HaltOnError = $false,
+
+ # Set vendor library source directory.
+ [string]$Source = "",
+ # Set output directory name.
+ [string]$Output = "",
+ # Set GHDL binary directory.
+ [string]$GHDL = ""
+)
+
+# ---------------------------------------------
+# save working directory
+$WorkingDir = Get-Location
+
+# set default values
+$EnableDebug = [bool]$PSCmdlet.MyInvocation.BoundParameters["Debug"]
+$EnableVerbose = [bool]$PSCmdlet.MyInvocation.BoundParameters["Verbose"] -or $EnableDebug
+
+# load modules from GHDL's 'vendors' library directory
+$EnableVerbose -and (Write-Host "Loading modules..." -ForegroundColor Gray ) | Out-Null
+$EnableDebug -and (Write-Host " Import-Module $PSScriptRoot\config.psm1 -Verbose:`$$false -Debug:`$$false -ArgumentList `"XilinxISE`"" -ForegroundColor DarkGray ) | Out-Null
+Import-Module $PSScriptRoot\config.psm1 -Verbose:$false -ArgumentList "XilinxISE"
+$EnableDebug -and (Write-Host " Import-Module $PSScriptRoot\shared.psm1 -Verbose:`$$false -Debug:`$$false -ArgumentList @(`"Xilinx ISE`", `"$WorkingDir`")" -ForegroundColor DarkGray ) | Out-Null
+Import-Module $PSScriptRoot\shared.psm1 -Verbose:$false -ArgumentList @("Xilinx ISE", "$WorkingDir")
+
+# Display help if no command was selected
+$Help = $Help -or (-not ($All -or $Unisim -or $Simprim -or $Unimacro -or $CoreLib -or $Clean))
+
+if ($Help)
+{ Get-Help $MYINVOCATION.MyCommand.Path -Detailed
+ Exit-CompileScript
+}
+if ($All)
+{ $Unisim = $true
+ $Simprim = $true
+ $Unimacro = $true
+ $CoreLib = $true
+ $SecureIP = $true
+}
+
+function Get-XilinxISEDirectory
+{ if (Test-Path env:XILINX)
+ { return $XILINX + "\" + (Get-VendorToolSourceDirectory) }
+ else
+ { $EnvSourceDir = ""
+ foreach ($Drive in Get-PSDrive -PSProvider 'FileSystem')
+ { $Path = $Drive.Name + ":\" + "Xilinx"
+ if (Test-Path $Path -PathType Container)
+ { foreach ($Major in 14..12)
+ { foreach ($Minor in 7..1)
+ { $Dir = $Path + "\" + $Major + "." + $Minor + "\ISE_DS"
+ if (Test-Path $Dir -PathType Container)
+ { $EnvSourceDir = $Dir + "\" + (Get-VendorToolSourceDirectory)
+ return $EnvSourceDir
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+$SourceDirectory = Get-SourceDirectory $Source (Get-XilinxISEDirectory)
+$DestinationDirectory = Get-DestinationDirectory $Output
+$GHDLBinary = Get-GHDLBinary $GHDL
+
+# create "Altera" directory and change to it
+New-DestinationDirectory $DestinationDirectory
+cd $DestinationDirectory
+
+if ($VHDL2008)
+{ Write-Host "Not all Xilinx primitives are VHDL-2008 compatible! Setting HaltOnError to FALSE." -ForegroundColor Red
+ $HaltOnError = $false
+}
+$VHDLVersion,$VHDLStandard,$VHDLFlavor = Get-VHDLVariables $VHDL93 $VHDL2008
+
+# define global GHDL Options
+$Analyze_Parameters = @(
+ "-fexplicit",
+ "-frelaxed-rules",
+ "--mb-comments",
+ "-Wbinding"
+)
+if (-not $EnableDebug)
+{ $Analyze_Parameters += @(
+ "-Wno-hide"
+ )
+}
+if (-not ($EnableVerbose -or $EnableDebug))
+{ $Analyze_Parameters += @(
+ "-Wno-library",
+ "-Wno-others",
+ "-Wno-static"
+ )
+}
+$Analyze_Parameters += @(
+ "--ieee=$VHDLFlavor",
+ "--no-vital-checks",
+ "--std=$VHDLStandard",
+ "-P$DestinationDirectory"
+)
+
+# extract data from configuration
+# $SourceDir = $InstallationDirectory["AlteraQuartus"] + "\quartus\eda\sim_lib"
+
+$StopCompiling = $false
+$ErrorCount = 0
+
+
+# Cleanup directories
+# ==============================================================================
+if ($Clean)
+{ Write-Host "[ERROR]: '-Clean' is not implemented!" -ForegroundColor Red
+ Exit-CompileScript -1
+
+ Write-Host "Cleaning up vendor directory ..." -ForegroundColor Yellow
+ rm *.cf
+}
+
+
+# Library UniSim
+# ==============================================================================
+# compile unisim packages
+if ((-not $StopCompiling) -and $Unisim)
+{ $Library = "unisim"
+ $Files = @(
+ "unisims\unisim_VPKG.vhd",
+ "unisims\unisim_VCOMP.vhd"
+ )
+ $SourceFiles = $Files | % { "$SourceDirectory\$_" }
+
+ $ErrorCount += Start-PackageCompilation $GHDLBinary $Analyze_Parameters $DestinationDirectory $Library $VHDLVersion $SourceFiles $SuppressWarnings $HaltOnError -Verbose:$EnableVerbose -Debug:$EnableDebug
+ $StopCompiling = $HaltOnError -and ($ErrorCount -ne 0)
+}
+
+# compile unisim primitives
+if ((-not $StopCompiling) -and $Unisim)
+{ $Library = "unisim"
+ $SourceFiles = dir "$SourceDirectory\unisims\primitive\*.vhd*"
+
+ $ErrorCount += Start-PrimitiveCompilation $GHDLBinary $Analyze_Parameters $DestinationDirectory $Library $VHDLVersion $SourceFiles $SuppressWarnings $HaltOnError -Verbose:$EnableVerbose -Debug:$EnableDebug
+ $StopCompiling = $HaltOnError -and ($ErrorCount -ne 0)
+}
+
+# compile unisim secureip primitives
+if ((-not $StopCompiling) -and $Unisim -and $SecureIP)
+{ $Library = "secureip"
+ $SourceFiles = dir "$SourceDirectory\unisims\secureip\*.vhd*"
+
+ $ErrorCount += Start-PrimitiveCompilation $GHDLBinary $Analyze_Parameters $DestinationDirectory $Library $VHDLVersion $SourceFiles $SuppressWarnings $HaltOnError -Verbose:$EnableVerbose -Debug:$EnableDebug
+ $StopCompiling = $HaltOnError -and ($ErrorCount -ne 0)
+}
+
+# Library UNIMACRO
+# ==============================================================================
+# compile unimacro packages
+if ((-not $StopCompiling) -and $Unimacro)
+{ $Library = "unimacro"
+ $Files = @(
+ "unimacro\unimacro_VCOMP.vhd"
+ )
+ $SourceFiles = $Files | % { "$SourceDirectory\$_" }
+
+ $ErrorCount += Start-PackageCompilation $GHDLBinary $Analyze_Parameters $DestinationDirectory $Library $VHDLVersion $SourceFiles $SuppressWarnings $HaltOnError -Verbose:$EnableVerbose -Debug:$EnableDebug
+ $StopCompiling = $HaltOnError -and ($ErrorCount -ne 0)
+}
+
+# compile unimacro macros
+if ((-not $StopCompiling) -and $Unimacro)
+{ $Library = "unimacro"
+ $SourceFiles = dir "$SourceDirectory\unimacro\*_MACRO.vhd*"
+
+ $ErrorCount += Start-PrimitiveCompilation $GHDLBinary $Analyze_Parameters $DestinationDirectory $Library $VHDLVersion $SourceFiles $SuppressWarnings $HaltOnError -Verbose:$EnableVerbose -Debug:$EnableDebug
+ $StopCompiling = $HaltOnError -and ($ErrorCount -ne 0)
+}
+
+# Library SIMPRIM
+# ==============================================================================
+# compile simprim packages
+if ((-not $StopCompiling) -and $Simprim)
+{ $Library = "simprim"
+ $Files = (
+ "simprims\simprim_Vpackage.vhd",
+ "simprims\simprim_Vcomponents.vhd"
+ )
+ $SourceFiles = $Files | % { "$SourceDirectory\$_" }
+
+ $ErrorCount += Start-PackageCompilation $GHDLBinary $Analyze_Parameters $DestinationDirectory $Library $VHDLVersion $SourceFiles $SuppressWarnings $HaltOnError -Verbose:$EnableVerbose -Debug:$EnableDebug
+ $StopCompiling = $HaltOnError -and ($ErrorCount -ne 0)
+}
+
+# compile simprim primitives
+if ((-not $StopCompiling) -and $Simprim)
+{ $Library = "simprim"
+ $SourceFiles = dir "$SourceDirectory\simprims\primitive\other\*.vhd*"
+
+ $ErrorCount += Start-PrimitiveCompilation $GHDLBinary $Analyze_Parameters $DestinationDirectory $Library $VHDLVersion $SourceFiles $SuppressWarnings $HaltOnError -Verbose:$EnableVerbose -Debug:$EnableDebug
+ $StopCompiling = $HaltOnError -and ($ErrorCount -ne 0)
+}
+
+# compile simprim secureip primitives
+if ((-not $StopCompiling) -and $Simprim -and $SecureIP)
+{ $Library = "secureip"
+ $SourceFiles = dir "$SourceDirectory\simprims\secureip\other\*.vhd*"
+
+ $ErrorCount += Start-PrimitiveCompilation $GHDLBinary $Analyze_Parameters $DestinationDirectory $Library $VHDLVersion $SourceFiles $SuppressWarnings $HaltOnError -Verbose:$EnableVerbose -Debug:$EnableDebug
+ $StopCompiling = $HaltOnError -and ($ErrorCount -ne 0)
+}
+
+# Library XilinxCoreLib
+# ==============================================================================
+# compile CoreLib primitives
+if ((-not $StopCompiling) -and $CoreLib)
+{ $Library = "xilinxcorelib"
+
+ $AnalyzeFile = "$SourceDirectory\XilinxCoreLib\vhdl_analyze_order"
+ if (-not (Test-Path $AnalyzeFile -PathType Leaf))
+ { Write-Host "[ERROR]: Analyze file '$AnalyzeFile' not found!"
+ Exit-CompileScript -1
+ }
+
+ $AnalyzeOrder = Get-Content $AnalyzeFile -Encoding Ascii
+ $SourceFiles = @()
+ foreach ($line in $AnalyzeOrder)
+ { if (-not ($line.StartsWith("#") -or ($line -eq "")))
+ { $SourceFiles += "$SourceDirectory\XilinxCoreLib\$line" }
+ }
+
+ $ErrorCount += Start-PrimitiveCompilation $GHDLBinary $Analyze_Parameters $DestinationDirectory $Library $VHDLVersion $SourceFiles $SuppressWarnings $HaltOnError -Verbose:$EnableVerbose -Debug:$EnableDebug
+ $StopCompiling = $HaltOnError -and ($ErrorCount -ne 0)
+}
+
+Write-Host "--------------------------------------------------------------------------------"
+Write-Host "Compiling Xilinx ISE libraries " -NoNewline
+if ($ErrorCount -gt 0)
+{ Write-Host "[FAILED]" -ForegroundColor Red }
+else
+{ Write-Host "[SUCCESSFUL]" -ForegroundColor Green }
+
+Exit-CompileScript