diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 109b3ed2e..d1d53985c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -139,11 +139,16 @@ jobs: strategy: matrix: toolset: [143] - platform: [x86, x64] + platform: [x86, x64, arm64] include: - toolset: 143 image: windows-2022 - vcvars: "C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\VC\\Auxiliary\\Build\\vcvarsall.bat" + - platform: x86 + setenv: amd64_x86 + - platform: x64 + setenv: amd64 + - platform: arm64 + setenv: amd64_arm64 env: VER_SUFFIX: .VS${{ matrix.toolset }} CXXFLAGS: '/D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR' # https://github.com/actions/runner-images/issues/10004 @@ -167,11 +172,13 @@ jobs: with: python-version: 3.12 architecture: x86 + - name: Setup dev env + uses: ilammy/msvc-dev-cmd@v1 + with: + arch: ${{ matrix.setenv }} - name: Build run: | & .\build.ps1 ` - -vcvars "${{ matrix.vcvars }}" ` - -platform ${{ matrix.platform }} ` -swig C:/ProgramData/chocolatey/bin/swig.exe ` -doxygen "C:/Program files/doxygen/bin/doxygen.exe" ` -boost diff --git a/README.md b/README.md index 74c0c80a3..e4c15e6ae 100644 --- a/README.md +++ b/README.md @@ -94,16 +94,18 @@ * [Python](https://www.python.org/downloads/) - Optional, for Python bindings * [Java](https://www.oracle.com/java/technologies/downloads/) - Optional, for Java bindings - Toolset: - * 142 - Visual Studio 2019 (Default) - * 143 - Visual Studio 2022 +2. Open desired Visual Studio tools command prompt: + * x64 Native Tool Command Prompt + * x86 Native Tool Command Prompt + * ARM64 Native Tool Command Prompt + * Or some cross compile combination with target host type -2. Fetch the source +3. Fetch the source git clone --recursive https://github.com/open-eid/libdigidocpp cd libdigidocpp -3. Configure +4. Configure cmake -DCMAKE_TOOLCHAIN_FILE=vcpkg/scripts/buildsystems/vcpkg.cmake ` -DVCPKG_TARGET_TRIPLET=x64-windows ` @@ -117,18 +119,18 @@ After running the cmake build, digidoc_csharp.dll along with the C# source files will be created, more info at [examples/DigiDocCSharp/README.md](examples/DigiDocCSharp/README.md). -4. Build +5. Build cmake --build build -5. Alternative to steps 4. and 5. - +6. Alternative to steps 4. and 5. - - powershell -ExecutionPolicy ByPass -File build.ps1 -platform x64 + powershell -ExecutionPolicy ByPass -File build.ps1 The build script builds executables and installation media for given platform (Debug and Release with debug symbols) -6. Execute +7. Execute build/src/digidoc-tool.exe diff --git a/build.ps1 b/build.ps1 index a8b71976e..3b19e96a3 100644 --- a/build.ps1 +++ b/build.ps1 @@ -1,18 +1,18 @@ #powershell -ExecutionPolicy ByPass -File build.ps1 param( [string]$libdigidocpp = $PSScriptRoot, - [string]$platform = "x64", + [string]$platform = $env:VSCMD_ARG_TGT_ARCH, + [string]$build_number = $(if ($null -eq $env:BUILD_NUMBER) {"0"} else {$env:BUILD_NUMBER}), + [string]$msiversion = "4.1.0.$build_number", + [string]$msi_name = "libdigidocpp-$msiversion$env:VER_SUFFIX.$platform.msi", [string]$git = "git.exe", [string]$vcpkg = "vcpkg\vcpkg.exe", [string]$vcpkg_dir = (split-path -parent $vcpkg), [string]$vcpkg_installed = $libdigidocpp, [string]$vcpkg_installed_platform = "$vcpkg_installed\vcpkg_installed_$platform", - [string]$build_number = $(if ($null -eq $env:BUILD_NUMBER) {"0"} else {$env:BUILD_NUMBER}), - [string]$msiversion = "4.1.0.$build_number", - [string]$msi_name = "libdigidocpp-$msiversion$env:VER_SUFFIX.$platform.msi", + [string]$vcpkg_triplet = "$platform-windows", [string]$cmake = "cmake.exe", [string]$generator = "NMake Makefiles", - [string]$vcvars = "vcvarsall", [string]$swig = $null, [string]$doxygen = $null, [switch]$boost = $false, @@ -43,6 +43,13 @@ if($doxygen) { $cmakeext += "-DDOXYGEN_EXECUTABLE=$doxygen" $wixext += "-d", "docLocation=$(Get-Location)/$platform/share/doc/libdigidocpp" } +if($env:VSCMD_ARG_HOST_ARCH -ne "arm64") { + $cmakeext += "-DCMAKE_DISABLE_FIND_PACKAGE_Python3=yes" + $wixext += "-d", "disablePython=1" + if($platform -eq "arm64") { + $boost = $false + } +} if($boost) { $cmakeext += "-DVCPKG_MANIFEST_FEATURES=tests" $target += "check" @@ -50,33 +57,35 @@ if($boost) { foreach($type in @("Debug", "RelWithDebInfo")) { $buildpath = $platform+$type - & $vcvars $platform "&&" $cmake --fresh -B $buildpath -S $libdigidocpp "-G$generator" ` + & $cmake --fresh -B $buildpath -S $libdigidocpp "-G$generator" $cmakeext ` "-DCMAKE_BUILD_TYPE=$type" ` "-DCMAKE_INSTALL_PREFIX=$platform" ` "-DCMAKE_INSTALL_LIBDIR=bin" ` "-DCMAKE_TOOLCHAIN_FILE=$vcpkg_dir/scripts/buildsystems/vcpkg.cmake" ` "-DVCPKG_INSTALLED_DIR=$vcpkg_installed_platform" ` - "-DSIGNCERT=$sign" ` - $cmakeext "&&" $cmake --build $buildpath --target $target "&&" $cmake --install $buildpath + "-DVCPKG_TARGET_TRIPLET=$vcpkg_triplet" ` + "-DSIGNCERT=$sign" + & $cmake --build $buildpath --target $target + & $cmake --install $buildpath } if($sign) { - & $vcvars $platform "&&" signtool.exe sign /a /v /s MY /n "$sign" /fd SHA256 /du http://installer.id.ee ` + & signtool.exe sign /a /v /s MY /n "$sign" /fd SHA256 /du http://installer.id.ee ` /tr http://timestamp.digicert.com /td SHA256 ` - $vcpkg_installed_platform/$platform-windows/bin/*.dll ` - $vcpkg_installed_platform/$platform-windows/debug/bin/*.dll + $vcpkg_installed_platform/$vcpkg_triplet/bin/*.dll ` + $vcpkg_installed_platform/$vcpkg_triplet/debug/bin/*.dll } -& $vcvars $platform "&&" wix build -nologo -arch $platform -out $msi_name $wixext ` +& wix build -nologo -arch $platform -out $msi_name $wixext ` -ext WixToolset.UI.wixext ` -bv "WixUIBannerBmp=$libdigidocpp/banner.bmp" ` -bv "WixUIDialogBmp=$libdigidocpp/dlgbmp.bmp" ` -d "ICON=$libdigidocpp/ID.ico" ` - -d "vcpkg=$vcpkg_installed_platform/$platform-windows" ` + -d "vcpkg=$vcpkg_installed_platform/$vcpkg_triplet" ` -d "libdigidocpp=$(Get-Location)/$platform" ` $libdigidocpp\libdigidocpp.wxs if($sign) { - & $vcvars $platform "&&" signtool.exe sign /a /v /s MY /n "$sign" /fd SHA256 /du http://installer.id.ee ` + & signtool.exe sign /a /v /s MY /n "$sign" /fd SHA256 /du http://installer.id.ee ` /tr http://timestamp.digicert.com /td SHA256 "$msi_name" } diff --git a/libdigidocpp.wxs b/libdigidocpp.wxs index 4155212c6..e21f679a6 100644 --- a/libdigidocpp.wxs +++ b/libdigidocpp.wxs @@ -1,12 +1,15 @@  + + + @@ -31,7 +34,7 @@ - + + + @@ -86,7 +91,9 @@ + + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d457b3431..79db18445 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -254,15 +254,17 @@ if(WIN32) install(FILES $ $ DESTINATION ${CMAKE_INSTALL_BINDIR} OPTIONAL) if(SIGNCERT) foreach(TARGET digidocpp digidoc-tool digidoc_java digidoc_csharp digidoc_python) - if(CROSSSIGNCERT) - target_link_options(${TARGET} PRIVATE "/INTEGRITYCHECK") + if (TARGET ${TARGET}) + if(CROSSSIGNCERT) + target_link_options(${TARGET} PRIVATE "/INTEGRITYCHECK") + endif() + add_custom_command(TARGET ${TARGET} POST_BUILD + COMMAND signtool.exe sign /a /v /s MY /n "${SIGNCERT}" /fd SHA256 /du http://installer.id.ee + "$<$:/ph;/ac;${CROSSSIGNCERT}>" + /tr http://timestamp.digicert.com /td SHA256 $ + COMMAND_EXPAND_LISTS + ) endif() - add_custom_command(TARGET ${TARGET} POST_BUILD - COMMAND signtool.exe sign /a /v /s MY /n "${SIGNCERT}" /fd SHA256 /du http://installer.id.ee - "$<$:/ph;/ac;${CROSSSIGNCERT}>" - /tr http://timestamp.digicert.com /td SHA256 $ - COMMAND_EXPAND_LISTS - ) endforeach() endif() endif()