From 330ea6732666779dcadaf8936805acefa4eadc0a Mon Sep 17 00:00:00 2001
From: Patrick Lehmann <Patrick.Lehmann@tu-dresden.de>
Date: Fri, 17 Feb 2017 04:53:59 +0100
Subject: Fixed Windows compile flow (PowerShell scripts) for GHDL and library
 compilations.

---
 dist/windows/compile-ghdl.ps1 | 246 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 246 insertions(+)
 create mode 100644 dist/windows/compile-ghdl.ps1

(limited to 'dist/windows/compile-ghdl.ps1')

diff --git a/dist/windows/compile-ghdl.ps1 b/dist/windows/compile-ghdl.ps1
new file mode 100644
index 000000000..45e1d7c50
--- /dev/null
+++ b/dist/windows/compile-ghdl.ps1
@@ -0,0 +1,246 @@
+# 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	(ported batch file to PowerShell)
+#											Brian Davis			(contributions to the batch file)
+#											Tristan Gingold	(initial batch file for compilations on Windows)
+# 
+#	PowerShell Script:	Script to compile GHDL for Windows
+# 
+# Description:
+# ------------------------------------
+#	This is a PowerShell script (executable) which:
+#		- sets up a compilation environment
+#		- test all dependencies
+#		- compiles GHDL with GNAT
+#
+# ==============================================================================
+#	Copyright (C) 2002, 2003, 2004, 2005 Tristan Gingold
+#	Copyright (C) 2015-2017 Patrick Lehmann
+#	
+#	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.
+# ==============================================================================
+
+# .SYNOPSIS 
+# GHDL for Windows - GHDL compile script
+# Use 'compile-ghdl.ps1 -Help' to see the integrated help page
+# 
+# .EXAMPLE
+# C:\PS> .\compile-ghdl.ps1 -Clean -Compile
+# 
+[CmdletBinding()]
+param(
+	# Display this help"
+	[switch]$Help =							$false,
+	
+	# Slean up all files and directories
+	[switch]$Clean =						$false,
+		[switch]$Clean_GHDL =			$false,
+	
+	# Compile all targets
+	[switch]$All =							$false,
+	
+	# Compile main targets
+	[switch]$Compile =					$false,
+		# Compile GHDL (simulator)
+		[switch]$Compile_GHDL =		$false,
+	# Undocumented
+	[switch]$Test =							$false,
+		# Undocumented
+		[switch]$Test_GHDL =			$false,
+	
+	# Build options
+	# Build a release version
+	[switch]$Release =					$false,
+	# Set the back-end
+	[string]$Backend =					"mcode",
+	
+	# Reduced messages
+	[switch]$Quiet =						$false,
+	# Skip warning messages. (Show errors only.)
+	[switch]$SuppressWarnings = $false,
+	# Halt on errors
+	[switch]$HaltOnError =			$false,
+	# Undocumented
+	[switch]$Hosted =						$false
+)
+
+# configure script here
+$RelPathToRoot =			"..\.."
+
+# ---------------------------------------------
+# save parameters and working directory
+$Script_ScriptDir =		$PSScriptRoot
+$Script_WorkingDir =	Get-Location
+$GHDLRootDir =				Convert-Path (Resolve-Path ($PSScriptRoot + "\" + $RelPathToRoot))
+
+# set default values
+$EnableVerbose =			$PSCmdlet.MyInvocation.BoundParameters["Verbose"]
+$EnableDebug =				$PSCmdlet.MyInvocation.BoundParameters["Debug"]
+if ($EnableVerbose -eq $null)	{	$EnableVerbose =	$false	}
+if ($EnableDebug	 -eq $null)	{	$EnableDebug =		$false	}
+if ($EnableDebug	 -eq $true)	{	$EnableVerbose =	$true		}
+
+# load modules from GHDL's 'libraries' directory
+Import-Module $PSScriptRoot\shared.psm1  -Verbose:$false -Debug:$false -ArgumentList "$Script_WorkingDir", $Hosted
+Import-Module $PSScriptRoot\targets.psm1 -Verbose:$false -Debug:$false
+
+# Display help if no command was selected
+$Help = $Help -or (-not (
+					$All -or 
+					$Clean -or $Clean_GHDL -or
+					$Compile -or $Compile_GHDL -or
+					$Test -or $Test_GHDL
+				))
+
+if (-not $Hosted)
+{	Write-Host "================================================================================" -ForegroundColor Magenta
+	Write-Host "GHDL for Windows - GHDL compile script" -ForegroundColor Magenta
+	Write-Host "================================================================================" -ForegroundColor Magenta
+}
+
+if ($Help)
+{	Get-Help $MYINVOCATION.InvocationName -Detailed
+	Exit-CompileScript
+}
+
+if ($Clean)
+{	$Clean_GHDL =		$true
+}
+if ($All)
+{	$Compile =			$true
+}
+if ($Compile)
+{	$Compile_GHDL =	$true
+}
+if ($Test)
+{	$Test_GHDL =		$true
+}
+
+# configure some variables: paths, executables, directory names, ...
+$BuildDirectoryName =						"build"
+
+# Parameter checks
+if ($Backend -ne "mcode")
+{	Write-Host "[ERROR]: Back-end '$Backend' is not supported on Windows." -ForegroundColor Red
+	Exit-CompileScript -1
+}
+
+# construct directories
+$BinaryDestinationDirectory =		"$GHDLRootDir\$BuildDirectoryName\$Backend"
+# construct executables
+$GHDLNewExecutable =						"$GHDLRootDir\$BuildDirectoryName\$Backend\bin\ghdl.exe"
+
+# grep GHDL version string from Ada source file
+$GHDLVersion = 							Get-GHDLVersion $GHDLRootDir
+# compute some variables
+$BuildRelease = if ($Release)	{	"Release"	}	else	{	"Development"	}
+if (-not $Hosted)
+{	Write-Host "  Version:    $GHDLVersion"
+	Write-Host "  Release:    $BuildRelease"
+}
+
+$Git_IsGitRepo =						Test-GitRepository
+# gather git information
+if ($Git_IsGitRepo)
+{	$Git_Branch_Name =				& git rev-parse --abbrev-ref HEAD
+	$Git_Commit_DateString =	& git log -1 --format=%cd --date=short
+	$Git_Commit_ShortHash =		& git rev-parse --short HEAD
+
+	if (-not $Hosted)
+	{	Write-Host "  Git branch: $Git_Branch_Name"
+		Write-Host "  Git commit: $Git_Commit_DataString ($Git_Commit_ShortHash)"
+	}
+}
+if (-not $Hosted)
+{	Write-Host ""	}
+
+if ($Release)
+{	$BuildDirectory =		$BinaryDestinationDirectory		}
+else
+{	$BuildDirectory =		$BinaryDestinationDirectory		}
+
+
+# ==============================================================================
+# Main Target: Clean
+# ==============================================================================
+if ($Clean_GHDL)
+{	$error = Invoke-Clean $BuildDirectory -Quiet:$Quiet -Verbose:$EnableVerbose -Debug:$EnableDebug
+	if ($error -eq $true)
+	{	Write-Host "  [FAILED]"	-ForegroundColor Red
+		Exit-CompileScript -1
+	}
+}	# Clean
+
+
+# ==============================================================================
+# Main Target: GHDL
+# ==============================================================================
+if ($Compile_GHDL)
+{	# create a build directory
+	$error = New-BuildDirectory $BuildDirectory
+	if ($error -eq $true)
+	{	Write-Host "  [FAILED]"	-ForegroundColor Red
+		Exit-CompileScript -1
+	}
+	
+	# patch the version file if it's no release build
+	if (-not $Release -and $Git_IsGitRepo)
+	{	$error = Invoke-PatchVersionFile $GHDLRootDir $Git_Branch_Name $Git_Commit_DateString $Git_Commit_ShortHash
+		if ($error -eq $true)
+		{	Write-Host "  [FAILED]"	-ForegroundColor Red
+			Exit-CompileScript -1
+		}
+	}
+	
+	# build C source files
+	$error = Invoke-CompileCFiles $GHDLRootDir $BinaryDestinationDirectory
+	if ($error -eq $true)
+	{	Write-Host "  [FAILED]"	-ForegroundColor Red
+		Exit-CompileScript -1
+	}
+	
+	# build Ada source files
+	$error = Invoke-CompileGHDLAdaFiles $GHDLRootDir $BinaryDestinationDirectory
+	if ($error -eq $true)
+	{	Write-Host "  [FAILED]"	-ForegroundColor Red
+		Exit-CompileScript -1
+	}
+	
+	# strip result
+	$error = Invoke-StripGHDLExecutable $BinaryDestinationDirectory
+	if ($error -eq $true)
+	{	Write-Host "  [FAILED]"	-ForegroundColor Red
+		Exit-CompileScript -1
+	}
+}
+
+
+# ==============================================================================
+# Main Target: GHDL
+# ==============================================================================
+if ($Test_GHDL)
+{	# running ghdl
+	$error = Test-GHDLVersion $BuildDir
+	if ($error -eq $true)
+	{	Write-Host "  [FAILED]"	-ForegroundColor Red
+		Exit-CompileScript -1
+	}
+}	# Test
+
+Exit-CompileScript 0
-- 
cgit v1.2.3