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()