aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/windows/appveyor/build.ps1
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/windows/appveyor/build.ps1')
-rw-r--r--scripts/windows/appveyor/build.ps1112
1 files changed, 112 insertions, 0 deletions
diff --git a/scripts/windows/appveyor/build.ps1 b/scripts/windows/appveyor/build.ps1
new file mode 100644
index 000000000..359fb4da7
--- /dev/null
+++ b/scripts/windows/appveyor/build.ps1
@@ -0,0 +1,112 @@
+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.
+ .PARAMETER Indent
+ Indentation string.
+ #>
+ [CmdletBinding()]
+ param(
+ [Parameter(ValueFromPipeline=$true)]
+ $InputObject
+ )
+
+ begin
+ { $LineRemainer = "" }
+
+ process
+ { if ($InputObject -is [System.Management.Automation.ErrorRecord])
+ { if ($InputObject.FullyQualifiedErrorId -eq "NativeCommandError")
+ { Write-Output $InputObject.ToString() }
+ elseif ($InputObject.FullyQualifiedErrorId -eq "NativeCommandErrorMessage")
+ { $NewLine = $LineRemainer + $InputObject.ToString()
+ while (($NewLinePos = $NewLine.IndexOf("`n")) -ne -1)
+ { Write-Output $NewLine.Substring(0, $NewLinePos)
+ $NewLine = $NewLine.Substring($NewLinePos + 1)
+ }
+ $LineRemainer = $NewLine
+ }
+ }
+ elseif ($InputObject -is [String])
+ { Write-Output $InputObject }
+ else
+ { Write-Host "Unsupported object in pipeline stream" }
+ }
+
+ end
+ { if ($LineRemainer -ne "")
+ { Write-Output $LineRemainer }
+ }
+}
+
+#### Environment
+
+$BUILD_DIRNAME = "$($env:BUILD_MINGW)-$($env:BUILD_BACKEND)"
+$GHDL_BUILD_DIR = "$($env:APPVEYOR_BUILD_FOLDER)\build\$BUILD_DIRNAME"
+
+if ($env:APPVEYOR_REPO_TAG -eq "true")
+{
+ # There is a tag. Remove the leading v.
+ $BUILD_VERSION = $($env:APPVEYOR_REPO_TAG_NAME) -creplace "^v", ""
+}
+else
+{
+ $BUILD_VERSION = $($env:APPVEYOR_BUILD_VERSION)
+}
+
+$PREFIX_DIRNAME = "$BUILD_VERSION-$BUILD_DIRNAME"
+
+$GHDL_PREFIX_DIR = "c:/Tools/GHDL/$PREFIX_DIRNAME"
+$ZipFile = "ghdl-$PREFIX_DIRNAME.zip"
+
+$env:GHDL_BUILD_DIR = $GHDL_BUILD_DIR
+$env:GHDL_PREFIX_DIR = $GHDL_PREFIX_DIR
+
+#### Build
+
+mkdir $GHDL_BUILD_DIR | cd
+
+if ($env:BUILD_BACKEND -eq "mcode")
+{ Write-Host "Configuring GHDL for $($env:BUILD_MINGW), mcode..." -Foreground Yellow
+
+ c:\msys64\usr\bin\bash.exe -c "../../configure --prefix=$GHDL_PREFIX_DIR LDFLAGS=-static" 2>&1 | Restore-NativeCommandStream | %{ "$_" }
+}
+elseif ($env:BUILD_BACKEND -eq "llvm")
+{ Write-Host "Configuring GHDL for $($env:BUILD_MINGW), LLVM..." -Foreground Yellow
+
+ c:\msys64\usr\bin\bash.exe -c "../../configure --prefix=$GHDL_PREFIX_DIR --with-llvm-config='llvm-config --link-static' LDFLAGS='-static' --enable-libghdl --enable-synth CXX=clang++" 2>&1 | Restore-NativeCommandStream | %{ "$_" }
+}
+
+Write-Host "Building GHDL and libraries..." -Foreground Yellow
+c:\msys64\usr\bin\make.exe 2>&1 | Restore-NativeCommandStream | %{ "$_" }
+$Err = $LastExitCode
+
+if ($Err -eq 0)
+{
+ Write-Host "Installing GHDL and libraries..." -Foreground Yellow
+ c:\msys64\usr\bin\make.exe install 2>&1 | Restore-NativeCommandStream | %{ "$_" }
+ $Err = $LastExitCode
+}
+
+#### Binaries
+
+if ($Err -eq 0)
+{
+ Write-Host "Building binary archives..." -Foreground Yellow
+ cd c:\Tools
+ 7z a "$($env:APPVEYOR_BUILD_FOLDER)\$ZipFile" -r "GHDL\$PREFIX_DIRNAME\"
+
+ cd $env:APPVEYOR_BUILD_FOLDER
+ Push-AppveyorArtifact $ZipFile
+}
+
+cd $env:APPVEYOR_BUILD_FOLDER
+
+exit $Err