aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/windows/compile-ghdl.ps1
blob: 8acc3313c10fc7675eb5c443e45d21a1bc3d9611 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
4
# This file is dual licensed under the terms of the Apache License, Version
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
# for complete details.

from __future__ import absolute_import, division, print_function

from cryptography import utils
from cryptography.hazmat.primitives import hashes, serialization
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives.ciphers import CipherAlgorithm
from cryptography.hazmat.primitives.ciphe
# 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
#
#  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 
# 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
$EnableDebug =        [bool]$PSCmdlet.MyInvocation.BoundParameters["Debug"]
$EnableVerbose =      [bool]$PSCmdlet.MyInvocation.BoundParameters["Verbose"] -or $EnableDebug

# 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.MyCommand.Path -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