Provisioning: Install Open62541 on Windows

Open62541 is one of the supported OPC UA backends in the Qt OpcUa
module.

Change-Id: I9baaffbae058d0590819e248694ee41887558708
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Reviewed-by: Tony Sarajärvi <tony.sarajarvi@qt.io>
This commit is contained in:
Maurice Kalinowski
2017-08-31 14:18:29 +02:00
committed by Liang Qi
parent 7670e95e52
commit d9fcbde41d
3 changed files with 263 additions and 0 deletions

View File

@@ -0,0 +1,260 @@
#############################################################################
##
## Copyright (C) 2018 The Qt Company Ltd.
## Contact: http://www.qt.io/licensing/
##
## This file is part of the provisioning scripts of the Qt Toolkit.
##
## $QT_BEGIN_LICENSE:LGPL21$
## Commercial License Usage
## Licensees holding valid commercial Qt licenses may use this file in
## accordance with the commercial license agreement provided with the
## Software or, alternatively, in accordance with the terms contained in
## a written agreement between you and The Qt Company. For licensing terms
## and conditions see http://www.qt.io/terms-conditions. For further
## information use the contact form at http://www.qt.io/contact-us.
##
## GNU Lesser General Public License Usage
## Alternatively, this file may be used under the terms of the GNU Lesser
## General Public License version 2.1 or version 3 as published by the Free
## Software Foundation and appearing in the file LICENSE.LGPLv21 and
## LICENSE.LGPLv3 included in the packaging of this file. Please review the
## following information to ensure the GNU Lesser General Public License
## requirements will be met: https://www.gnu.org/licenses/lgpl.html and
## http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
##
## As a special exception, The Qt Company gives you certain additional
## rights. These rights are described in The Qt Company LGPL Exception
## version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
##
## $QT_END_LICENSE$
##
#############################################################################
Param (
[string]$targetCommand= ""
)
. "$PSScriptRoot\helpers.ps1"
## Variables for builds
$commitSHA = "8845e493d7751fd4eee3917b540e5346646b9cf7"
$sha1 = "6845899f5fd0346472fc0d848ce9d9c814c802e0"
$extractTarget = "C:\open62541_build"
function CreateArchive
{
param(
[string]$sourceDirectory=$(throw("You must specify a directory")),
[string]$archiveName=$(throw("You must specify an archive name"))
)
if ((Get-Command "7z.exe" -ErrorAction SilentlyContinue) -eq $null) {
$zipExe = join-path (${env:ProgramFiles(x86)}, ${env:ProgramFiles}, ${env:ProgramW6432} -ne $null)[0] '7-zip\7z.exe'
if (-not (test-path $zipExe)) {
$zipExe = "C:\Utils\sevenzip\7z.exe"
if (-not (test-path $zipExe)) {
throw "Could not find 7-zip."
}
}
} else {
$zipExe = "7z.exe"
}
Run-Executable $zipExe "a -y `"$archiveName`" `"$sourceDirectory`""
}
function PrepareRepository
{
$username = $env:USERNAME
$zip = "c:\users\$username\downloads\open62541.zip"
$externalUrl = "https://github.com/open62541/open62541/archive/$commitSHA.zip"
$internalUrl = "http://ci-files01-hki.ci.local/input/open62541/$commitSHA.zip"
Download $externalUrl $internalUrl $zip
Verify-Checksum $zip $sha1
Extract-7Zip $zip $extractTarget
}
function PushDevEnvironment
{
# Provisioning updates the registry entries for PATH etc. However, they are not
# propagated to the next provisioning script and hence need to be manually
# read / set.
$adaptedPath = $env:PATH
$jomLocation = [Environment]::GetEnvironmentVariable("CI_JOM_PATH", "Machine")
$adaptedPath = $adaptedPath + ";" + $jomLocation
$adaptedPath = $adaptedPath + ";" + "C:\CMake\bin"
[Environment]::SetEnvironmentVariable("PATH", $adaptedPath, "Process")
}
function MSVCEnvironment
{
Param (
[string]$msvcDir=$(throw("No VS Directory specified")),
[string]$msvcbat=$(throw("No vsvars batch file specified"))
)
Push-Location $msvcDir
cmd /c "$msvcbat&set" |
foreach {
if ($_ -match "=") {
$v = $_.split("="); Set-Item -force -path "ENV:\$($v[0])" -value "$($v[1])"
}
}
Pop-Location
}
function BuildAndInstallOpen62541
{
Param (
[string]$Type=$(throw("You must specify the dev type [mingw530, mingw630, msvc2015, msvc2017]")),
[string]$Platform=$(throw("You must specify the target platform [x86, x64]")),
[string]$MakeCommand=$(throw("You must specify a make command [mingw32-make, nmake]"))
)
Write-Host "### Open62541: Supposed to build with: $Type $Platform $MakeCommand"
## Make Build directory
$buildDir = "$extractTarget\open62541-$commitSHA\build" + "_" + $Type + "_" + $Platform
if (Test-Path $buildDir) {
Write-Host " Deleting pre-existing build directory"
Remove-Item $buildDir -Force -Recurse
}
New-Item -ItemType Directory -Force -Path $buildDir
Push-Location $buildDir
## Invoke Cmake
$makeGenerator = "NMake Makefiles JOM"
$installTarget = "C:\Utils\open62541" + "_" + $Type + "_" + $Platform
if (Test-Path $installTarget) {
Write-Host " Deleting pre-existing install directory"
Remove-Item $installTarget -Force -Recurse
}
if ($Type.StartsWith("mingw")) {
$makeGenerator = "MinGW Makefiles"
}
cmake -G "$makeGenerator" -DUA_ENABLE_AMALGAMATION=ON -DUA_ENABLE_METHODCALLS=ON -DCMAKE_INSTALL_PREFIX:PATH=$installTarget -DLIB_INSTALL_DIR:PATH=$installTarget/lib ..
## Call build command
Write-Host "### Open62541: Compilation ###"
Run-Executable $MakeCommand
## call install command
Write-Host "### Open62541: Installation ###"
Run-Executable $MakeCommand install
$platformVariable = "CI_OPEN62541_" + $Type + "_" + $Platform
Set-EnvironmentVariable $platformVariable $installTarget
## Packaging
Push-Location "C:\Utils"
$archiveName = "open62541_" + $Type + "_" + $Platform + ".7z"
CreateArchive $installTarget $archiveName
Pop-Location
## cleanup build directory
Write-Host "### Open62541: Cleanup ###"
Pop-Location
Remove-Item $buildDir -Force -Recurse
}
function DownloadAndInstall
{
Param (
[string]$Type=$(throw("You must specify the dev type [mingw530, mingw630, msvc2015, msvc2017]")),
[string]$Platform=$(throw("You must specify the target platform [x86, x64]"))
)
$baseLocation = "http://ci-files01-hki.intra.qt.io/input/open62541/"
$targetName = "open62541_" + $Type + "_" + $Platform
$archiveName = $targetName + ".7z"
$downloadUrl = $baseLocation + $archiveName
# Download
$downloadTarget = "C:\Utils\" + $archiveName
Download $downloadUrl $downloadUrl $downloadTarget
# Extract
Push-Location C:\Utils
Extract-7Zip $downloadTarget C:\Utils
Pop-Location
# Set environment variable
$platformVariable = "CI_OPEN62541_" + $Type + "_" + $Platform
$platformPath = "C:\Utils\" + $targetName
Set-EnvironmentVariable $platformVariable $platformPath
}
##############################
# Startup #
##############################
if ($targetCommand.StartsWith("mingw")) {
Write-Host "### Creating Open62541 for MinGW"
$mingwPath = [Environment]::GetEnvironmentVariable($targetCommand, "Machine")
if (!$mingwPath) {
throw("Could not find mingw")
}
# Strawberry has its own gcc, put mingw in front
$adaptedPath = $mingwPath + "\bin;" + [Environment]::GetEnvironmentVariable("PATH", "Machine")
[Environment]::SetEnvironmentVariable("PATH", $adaptedPath, "Process")
PushDevEnvironment
BuildAndInstallOpen62541 $targetCommand x86 "mingw32-make"
} elseif ($targetCommand -eq "msvc2015_x86") {
Write-Host "### Creating Open62541 for MSVC2015 x86"
MSVCEnvironment "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC" "vcvarsall.bat x86"
PushDevEnvironment
BuildAndInstallOpen62541 msvc2015 x86 jom
} elseif ($targetCommand -eq "msvc2015_x64") {
Write-Host "### Creating Open62541 for MSVC2015 x64"
MSVCEnvironment "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC" "vcvarsall.bat amd64"
PushDevEnvironment
BuildAndInstallOpen62541 msvc2015 x64 jom
} elseif ($targetCommand -eq "msvc2017_x86") {
Write-Host "### Creating Open62541 for MSVC2017 x86"
MSVCEnvironment "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build" vcvars32.bat
PushDevEnvironment
BuildAndInstallOpen62541 msvc2017 x86 jom
} elseif ($targetCommand -eq "msvc2017_x64") {
Write-Host "### Creating Open62541 for MSVC2017 x64"
MSVCEnvironment "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build" vcvars64.bat
PushDevEnvironment
BuildAndInstallOpen62541 msvc2017 x64 jom
} elseif ($targetCommand -eq "prepare") {
PrepareRepository
} elseif ($targetCommand -eq "build") {
Write-Host "### Building for all supported platforms"
PrepareRepository
Write-Host "### Invoking MinGW530 build"
PowerShell -ExecutionPolicy Bypass -File "$PSScriptRoot\open62541.ps1" -targetCommand mingw530
Write-Host "### Invoking MinGW630 build"
PowerShell -ExecutionPolicy Bypass -File "$PSScriptRoot\open62541.ps1" -targetCommand mingw630
Write-Host "### Invoking MSVC2015 build"
PowerShell -ExecutionPolicy Bypass -File "$PSScriptRoot\open62541.ps1" -targetCommand msvc2015_x86
PowerShell -ExecutionPolicy Bypass -File "$PSScriptRoot\open62541.ps1" -targetCommand msvc2015_x64
Write-Host "### Invoking MSVC2017 build"
PowerShell -ExecutionPolicy Bypass -File "$PSScriptRoot\open62541.ps1" -targetCommand msvc2017_x86
PowerShell -ExecutionPolicy Bypass -File "$PSScriptRoot\open62541.ps1" -targetCommand msvc2017_x64
Write-Host "### Archives have been generated at C:/Utils. Please upload manually"
} elseif ($targetCommand -eq "packaged") {
Write-Host "### Expecting pre-built packages, download and install from archives"
Write-Host "### MinGW530 x64"
DownloadAndInstall mingw530 x86
Write-Host "### MinGW630 x64"
DownloadAndInstall mingw630 x86
Write-Host "### MSVC2015 x86"
DownloadAndInstall msvc2015 x86
Write-Host "### MSVC2015 x64"
DownloadAndInstall msvc2015 x64
Write-Host "### MSVC2017 x64"
DownloadAndInstall msvc2017 x64
} elseif ($targetCommand) {
Write-Host "### Unknown parameter specified:" $targetCommand " Options are: mingw, msvc2015_x(86/64), msvc2017_x(86/64)"
throw("Unknown parameter")
} else {
# Default behavior
PowerShell -ExecutionPolicy Bypass -File "$PSScriptRoot\open62541.ps1" -targetCommand build
}

View File

@@ -0,0 +1 @@
. "$PSScriptRoot\..\common\windows\open62541.ps1"

View File

@@ -0,0 +1,2 @@
. "$PSScriptRoot\..\common\windows\open62541.ps1" -targetCommand prepare
. "$PSScriptRoot\..\common\windows\open62541.ps1" -targetCommand mingw530