1 Set-PSDebug -Trace 1 2 3 $RELEASE_VERSION=$args[0] 4 $CMAKE_ARCH=$args[1] 5 $VCPKG_PATH=$args[2] 6 if($args.length -eq 4) { 7 if($args[3] -eq "zip") { 8 $ZIP = "TRUE" 9 } 10 } 11 12 if($CMAKE_ARCH -eq "Win32") { 13 $ARCH="x86" 14 } else { 15 $ARCH="x64" 16 } 17 18 $SOURCE_DIR="$PSScriptRoot/../.." 19 $BUILD_DIR="$SOURCE_DIR/win32_release" 20 $RELEASE_DIR="$SOURCE_DIR/yubico-piv-tool-$RELEASE_VERSION-$ARCH" 21 $RELEASE_ARCHIVE="$SOURCE_DIR/yubico-piv-tool-$RELEASE_VERSION-$ARCH.zip" 22 $LICENSES_DIR="$RELEASE_DIR/licenses" 23 24 # Install prerequisites 25 cd $VCPKG_PATH 26 .\vcpkg.exe install openssl:$ARCH-windows 27 .\vcpkg.exe install getopt:$ARCH-windows 28 29 $env:OPENSSL_ROOT_DIR ="$VCPKG_PATH/packages/openssl_$ARCH-windows" 30 31 # Build for x86 architecture 32 cd $SOURCE_DIR 33 mkdir $BUILD_DIR; cd $BUILD_DIR 34 cmake -A "$CMAKE_ARCH" -DVERBOSE_CMAKE=1 -DGETOPT_LIB_DIR="$VCPKG_PATH/packages/getopt-win32_$ARCH-windows/lib" -DGETOPT_INCLUDE_DIR="$VCPKG_PATH/packages/getopt-win32_$ARCH-windows/include" -DCMAKE_INSTALL_PREFIX="$RELEASE_DIR" .. 35 cmake --build . -v --config Release 36 cmake --install . 37 cd $RELEASE_DIR/bin 38 if($ARCH -eq "x86") 39 { 40 cp $VCPKG_PATH/packages/openssl_x86-windows/bin/libcrypto-1_1.dll . 41 cp $VCPKG_PATH/packages/getopt-win32_x86-windows/bin/getopt.dll . 42 } 43 else 44 { 45 cp $VCPKG_PATH/packages/openssl_x64-windows/bin/libcrypto-1_1-x64.dll . 46 cp $VCPKG_PATH/packages/getopt-win32_x64-windows/bin/getopt.dll . 47 } 48 49 # Create missing directories 50 mkdir -p $LICENSES_DIR 51 52 # Copy licenses 53 $license=(Get-ChildItem -Path $SOURCE_DIR -Filter COPYING -Recurse -ErrorAction SilentlyContinue -Force | %{$_.FullName}) 54 cp $license $LICENSES_DIR\yubico-piv-tool.txt 55 56 $license=(Get-ChildItem -Path $VCPKG_PATH\buildtrees\openssl\src\ -Filter LICENSE -Recurse -ErrorAction SilentlyContinue -Force | %{$_.FullName}) 57 cp $license $LICENSES_DIR\openssl.txt 58 59 $license=(Get-ChildItem -Path $VCPKG_PATH\buildtrees\getopt-win32\src\ -Filter LICENSE -Recurse -ErrorAction SilentlyContinue -Force | %{$_.FullName}) 60 cp $license $LICENSES_DIR\getopt.txt 61 62 # Copy OpenSSL header files 63 cp -r $VCPKG_PATH\packages\openssl_$ARCH-windows\include\openssl $RELEASE_DIR/include/ 64 65 if($ZIP) 66 { 67 # Create a zip with the binaries 68 Add-Type -Assembly System.IO.Compression.FileSystem 69 $compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal 70 [System.IO.Compression.ZipFile]::CreateFromDirectory($RELEASE_DIR, $RELEASE_ARCHIVE, $compressionLevel, $true) 71 cd $SOURCE_DIR 72 rm -r $RELEASE_DIR 73 } 74 75 # Clean directory 76 cd $SOURCE_DIR 77 rm -r $BUILD_DIR 78