From c79050aa44b8836d836c5dd22a383a073c28b74b Mon Sep 17 00:00:00 2001 From: nicoo Date: Wed, 12 Feb 2020 13:42:22 +0100 Subject: Import upstream release 1.3.0 Closes: #951184 --- windows/build.ps1 | 204 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100644 windows/build.ps1 (limited to 'windows/build.ps1') diff --git a/windows/build.ps1 b/windows/build.ps1 new file mode 100644 index 0000000..aaa848d --- /dev/null +++ b/windows/build.ps1 @@ -0,0 +1,204 @@ +param( + [string]$CMakePath = "C:\Program Files\CMake\bin\cmake.exe", + [string]$GitPath = "C:\Program Files\Git\bin\git.exe", + [string]$SevenZPath = "C:\Program Files\7-Zip\7z.exe", + [string]$GPGPath = "C:\Program Files (x86)\GnuPG\bin\gpg.exe" +) + +$ErrorActionPreference = "Continue" + +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 + +# LibreSSL coordinates. +New-Variable -Name 'LIBRESSL_URL' ` + -Value 'https://ftp.openbsd.org/pub/OpenBSD/LibreSSL' -Option Constant +New-Variable -Name 'LIBRESSL' -Value 'libressl-3.0.2' -Option Constant + +# libcbor coordinates. +New-Variable -Name 'LIBCBOR' -Value 'libcbor-0.5.0' -Option Constant +New-Variable -Name 'LIBCBOR_BRANCH' -Value 'v0.5.0' -Option Constant +New-Variable -Name 'LIBCBOR_GIT' -Value 'https://github.com/pjk/libcbor' ` + -Option Constant + +# Work directories. +New-Variable -Name 'BUILD' -Value "$PSScriptRoot\..\build" -Option Constant +New-Variable -Name 'OUTPUT' -Value "$PSScriptRoot\..\output" -Option Constant + +# Find CMake. +$CMake = $(Get-Command cmake -ErrorAction Ignore | Select-Object -ExpandProperty Source) +if([string]::IsNullOrEmpty($CMake)) { + $CMake = $CMakePath +} + +# Find Git. +$Git = $(Get-Command git -ErrorAction Ignore | Select-Object -ExpandProperty Source) +if([string]::IsNullOrEmpty($Git)) { + $Git = $GitPath +} + +# Find 7z. +$SevenZ = $(Get-Command 7z -ErrorAction Ignore | Select-Object -ExpandProperty Source) +if([string]::IsNullOrEmpty($SevenZ)) { + $SevenZ = $SevenZPath +} + +# Find GPG. +$GPG = $(Get-Command gpg -ErrorAction Ignore | Select-Object -ExpandProperty Source) +if([string]::IsNullOrEmpty($GPG)) { + $GPG = $GPGPath +} + +if(-Not (Test-Path $CMake)) { + throw "Unable to find CMake at $CMake" +} + +if(-Not (Test-Path $Git)) { + throw "Unable to find Git at $Git" +} + +if(-Not (Test-Path $SevenZ)) { + throw "Unable to find 7z at $SevenZ" +} + +if(-Not (Test-Path $GPG)) { + throw "Unable to find GPG at $GPG" +} + +Write-Host "Git: $Git" +Write-Host "CMake: $CMake" +Write-Host "7z: $SevenZ" +Write-Host "GPG: $GPG" + +New-Item -Type Directory ${BUILD} +New-Item -Type Directory ${BUILD}\32 +New-Item -Type Directory ${BUILD}\64 +New-Item -Type Directory ${OUTPUT} +New-Item -Type Directory ${OUTPUT}\pkg\Win64\Release\v142\dynamic +New-Item -Type Directory ${OUTPUT}\pkg\Win32\Release\v142\dynamic + +Push-Location ${BUILD} + +try { + if (Test-Path .\${LIBRESSL}) { + Remove-Item .\${LIBRESSL} -Recurse -ErrorAction Stop + } + + if(-Not (Test-Path .\${LIBRESSL}.tar.gz -PathType leaf)) { + Invoke-WebRequest ${LIBRESSL_URL}/${LIBRESSL}.tar.gz ` + -OutFile .\${LIBRESSL}.tar.gz + } + if(-Not (Test-Path .\${LIBRESSL}.tar.gz.asc -PathType leaf)) { + Invoke-WebRequest ${LIBRESSL_URL}/${LIBRESSL}.tar.gz.asc ` + -OutFile .\${LIBRESSL}.tar.gz.asc + } + + Copy-Item "$PSScriptRoot\libressl.gpg" -Destination "${BUILD}" + & $GPG --list-keys + & $GPG -v --no-default-keyring --keyring ./libressl.gpg ` + --verify .\${LIBRESSL}.tar.gz.asc .\${LIBRESSL}.tar.gz + if ($LastExitCode -ne 0) { + throw "GPG signature verification failed" + } + + & $SevenZ e .\${LIBRESSL}.tar.gz + & $SevenZ x .\${LIBRESSL}.tar + Remove-Item -Force .\${LIBRESSL}.tar + + if(-Not (Test-Path .\${LIBCBOR})) { + Write-Host "Cloning ${LIBCBOR}..." + & $Git clone --branch ${LIBCBOR_BRANCH} ${LIBCBOR_GIT} ` + .\${LIBCBOR} + } +} catch { + throw "Failed to fetch and verify dependencies" +} finally { + Pop-Location +} + +Function Build(${OUTPUT}, ${GENERATOR}, ${ARCH}) { + if(-Not (Test-Path .\${LIBRESSL})) { + New-Item -Type Directory .\${LIBRESSL} -ErrorAction Stop + } + + Push-Location .\${LIBRESSL} + & $CMake ..\..\${LIBRESSL} -G "${GENERATOR}" -A "${ARCH}" ` + -DCMAKE_C_FLAGS_RELEASE="/Zi" ` + -DCMAKE_INSTALL_PREFIX="${OUTPUT}" -DBUILD_SHARED_LIBS=ON ` + -DLIBRESSL_TESTS=OFF + & $CMake --build . --config Release + & $CMake --build . --config Release --target install + Pop-Location + + if(-Not (Test-Path .\${LIBCBOR})) { + New-Item -Type Directory .\${LIBCBOR} -ErrorAction Stop + } + + Push-Location .\${LIBCBOR} + & $CMake ..\..\${LIBCBOR} -G "${GENERATOR}" -A "${ARCH}" ` + -DCMAKE_C_FLAGS_RELEASE="/Zi" ` + -DCMAKE_INSTALL_PREFIX="${OUTPUT}" + & $CMake --build . --config Release + & $CMake --build . --config Release --target install + Pop-Location + + & $CMake ..\.. -G "${GENERATOR}" -A "${ARCH}" ` + -DCBOR_INCLUDE_DIRS="${OUTPUT}\include" ` + -DCBOR_LIBRARY_DIRS="${OUTPUT}\lib" ` + -DCRYPTO_INCLUDE_DIRS="${OUTPUT}\include" ` + -DCRYPTO_LIBRARY_DIRS="${OUTPUT}\lib" ` + -DCMAKE_INSTALL_PREFIX="${OUTPUT}" + & $CMake --build . --config Release + & $CMake --build . --config Release --target install + "cbor.dll", "crypto-45.dll" | %{ Copy-Item "${OUTPUT}\bin\$_" ` + -Destination "examples\Release" } +} + +Function Package-Headers() { + Copy-Item "${OUTPUT}\64\include" -Destination "${OUTPUT}\pkg" ` + -Recurse -ErrorAction Stop +} + +Function Package-Libraries(${SRC}, ${DEST}) { + Copy-Item "${SRC}\bin\cbor.dll" "${DEST}" -ErrorAction Stop + Copy-Item "${SRC}\lib\cbor.lib" "${DEST}" -ErrorAction Stop + Copy-Item "${SRC}\bin\crypto-45.dll" "${DEST}" -ErrorAction Stop + Copy-Item "${SRC}\lib\crypto-45.lib" "${DEST}" -ErrorAction Stop + Copy-Item "${SRC}\lib\fido2.dll" "${DEST}" -ErrorAction Stop + Copy-Item "${SRC}\lib\fido2.lib" "${DEST}" -ErrorAction Stop +} + +Function Package-PDBs(${SRC}, ${DEST}) { + Copy-Item "${SRC}\${LIBRESSL}\crypto\crypto.dir\Release\vc142.pdb" ` + "${DEST}\crypto-45.pdb" -ErrorAction Stop + Copy-Item "${SRC}\${LIBCBOR}\src\cbor_shared.dir\Release\vc142.pdb" ` + "${DEST}\cbor.pdb" -ErrorAction Stop + Copy-Item "${SRC}\src\fido2_shared.dir\Release\vc142.pdb" ` + "${DEST}\fido2.pdb" -ErrorAction Stop +} + +Function Package-Tools(${SRC}, ${DEST}) { + Copy-Item "${SRC}\tools\Release\fido2-assert.exe" ` + "${DEST}\fido2-assert.exe" -ErrorAction stop + Copy-Item "${SRC}\tools\Release\fido2-cred.exe" ` + "${DEST}\fido2-cred.exe" -ErrorAction stop + Copy-Item "${SRC}\tools\Release\fido2-token.exe" ` + "${DEST}\fido2-token.exe" -ErrorAction stop +} + +Push-Location ${BUILD}\64 +Build ${OUTPUT}\64 "Visual Studio 16 2019" "x64" +Pop-Location + +Push-Location ${BUILD}\32 +Build ${OUTPUT}\32 "Visual Studio 16 2019" "Win32" +Pop-Location + +Package-Headers + +Package-Libraries ${OUTPUT}\64 ${OUTPUT}\pkg\Win64\Release\v142\dynamic +Package-PDBs ${BUILD}\64 ${OUTPUT}\pkg\Win64\Release\v142\dynamic +Package-Tools ${BUILD}\64 ${OUTPUT}\pkg\Win64\Release\v142\dynamic + +Package-Libraries ${OUTPUT}\32 ${OUTPUT}\pkg\Win32\Release\v142\dynamic +Package-PDBs ${BUILD}\32 ${OUTPUT}\pkg\Win32\Release\v142\dynamic +Package-Tools ${BUILD}\32 ${OUTPUT}\pkg\Win32\Release\v142\dynamic -- cgit v1.2.3