diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9e6787238..805cbf5ea 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,6 +24,8 @@ jobs: brew install --formula ninja swig doxygen boost brew unlink python@3.11 || true brew unlink python@3.12 || true + brew unlink python@3.13 || true + brew unlink openssl@3 || true brew unlink xz - name: Cache uses: actions/cache@v4 @@ -129,12 +131,19 @@ jobs: runs-on: ${{ matrix.image }} strategy: matrix: - toolset: [143] - platform: [x86, x64] + toolset: [143, 142] + platform: [x86, x64, arm64] include: - toolset: 143 image: windows-2022 - vcvars: "C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\VC\\Auxiliary\\Build\\vcvarsall.bat" + - toolset: 142 + image: windows-2019 + - 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 @@ -161,11 +170,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 ${{ github.workspace }}/swigwin-4.2.1/swig.exe ` -doxygen "C:/Program files/doxygen/bin/doxygen.exe" ` -boost @@ -214,9 +225,12 @@ jobs: tar xzf cov-analysis-linux64.tar.gz --strip 1 -C cov-analysis-linux64 - name: Build run: | - cmake . + cmake -B build -S . \ + -DCMAKE_DISABLE_FIND_PACKAGE_SWIG=YES \ + -DCMAKE_DISABLE_FIND_PACKAGE_Boost=YES \ + -DCMAKE_DISABLE_FIND_PACKAGE_Doxygen=YES export PATH=$PWD/cov-analysis-linux64/bin:$PATH - cov-build --dir cov-int cmake --build . + cov-build --dir cov-int cmake --build build - name: Submit the result to Coverity Scan run: | tar czvf upload.tgz cov-int diff --git a/README.md b/README.md index f33445cb4..0498621ce 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ 2. Fetch the source - git clone --recursive https://github.com/open-eid/libdigidocpp + git clone https://github.com/open-eid/libdigidocpp cd libdigidocpp 3. Configure @@ -56,7 +56,7 @@ 2. Fetch the source - git clone --recursive https://github.com/open-eid/libdigidocpp + git clone https://github.com/open-eid/libdigidocpp cd libdigidocpp 3. Prepare dependencies (available targets: macos, iphoneos, iphonesimulator, androidarm, androidarm64, androidx86_64) @@ -88,47 +88,56 @@ * [Visual Studio Community 2019/2022](https://www.visualstudio.com/downloads/) * [CMake](http://www.cmake.org) * [vcpkg](https://vcpkg.io/) - * [Swig](http://swig.org/download.html) - Optional, for C# and Java bindings - * [Doxygen](https://www.doxygen.nl/download.html) - Optional, for generationg documentation + * [Swig](http://swig.org/download.html) - Optional, for C#, Python and Java bindings + * [Doxygen](https://www.doxygen.nl/download.html) - Optional, for generating documentation * [Wix toolset](http://wixtoolset.org/releases/) - Optional, for creating Windows installation packages * [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 + git clone 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 ` -DVCPKG_MANIFEST_FEATURES=tests ` -B build -S . - Optional CMake parameters: + Optional CMake parameters: - -DSWIG_EXECUTABLE=C:/swigwin-4.2.1/swig.exe + -DSWIG_EXECUTABLE=C:/swigwin-4.2.1/swig.exe + -DDOXYGEN_EXECUTABLE=C:/Program files/doxygen/bin/doxygen.exe - 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). + 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 + + Optional build.ps1 parameters: + + -swig C:/swigwin-4.2.1/swig.exe + -doxygen "C:/Program files/doxygen/bin/doxygen.exe" + -boost 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 21fea9b42..9ab0027a5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -260,15 +260,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()