1
0
mirror of https://git.code.sf.net/p/zint/code synced 2026-10-29 22:32:33 +00:00
Files
zint/.github/workflows/build-arm64-select-platform.yml
T
2026-09-23 19:33:56 -03:00

154 lines
4.7 KiB
YAML

name: Build Zint ARM64 libraries
on:
workflow_dispatch:
inputs:
platform:
description: 'Platform to build'
required: true
type: choice
options:
- both
- linux-arm64
- windows-arm64
default: both
permissions:
contents: read
jobs:
linux-arm64:
if: ${{ inputs.platform == 'both' || inputs.platform == 'linux-arm64' }}
runs-on: ubuntu-24.04-arm
steps:
- name: Checkout Zint
uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y build-essential cmake libpng-dev
- name: Configure
run: |
cmake -S . -B build \
-DCMAKE_BUILD_TYPE=Release \
-DZINT_SHARED=ON \
-DZINT_STATIC=OFF \
-DZINT_USE_QT=OFF
- name: Build
run: |
cmake --build build -j"$(nproc)"
- name: Show architecture
run: |
file build/backend/libzint.so
- name: Upload Linux ARM64 library
uses: actions/upload-artifact@v4
with:
name: zint-linux-arm64
path: build/backend/libzint.so*
if-no-files-found: error
windows-arm64:
if: ${{ inputs.platform == 'both' || inputs.platform == 'windows-arm64' }}
runs-on: windows-11-arm
steps:
- name: Checkout Zint
uses: actions/checkout@v4
- name: Install libpng and zlib for ARM64
shell: pwsh
run: |
if (-not $env:VCPKG_INSTALLATION_ROOT) {
throw "VCPKG_INSTALLATION_ROOT is not defined"
}
vcpkg install libpng:arm64-windows
if ($LASTEXITCODE -ne 0) {
throw "Failed to install libpng for ARM64"
}
$dependencyDirectory = Join-Path $env:VCPKG_INSTALLATION_ROOT "installed\arm64-windows\bin"
if (-not (Test-Path $dependencyDirectory)) {
throw "Dependency directory not found: $dependencyDirectory"
}
Write-Host "Installed ARM64 runtime libraries:"
Get-ChildItem $dependencyDirectory -Filter '*.dll' | Select-Object Name, Length
- name: Configure Zint with PNG support
shell: pwsh
run: |
$toolchain = Join-Path $env:VCPKG_INSTALLATION_ROOT "scripts\buildsystems\vcpkg.cmake"
if (-not (Test-Path $toolchain)) {
throw "vcpkg CMake toolchain not found: $toolchain"
}
cmake -S . -B build `
-A ARM64 `
"-DCMAKE_TOOLCHAIN_FILE=$toolchain" `
-DVCPKG_TARGET_TRIPLET=arm64-windows `
-DZINT_SHARED=ON `
-DZINT_STATIC=OFF `
-DZINT_FRONTEND=OFF `
-DZINT_USE_QT=OFF `
-DZINT_USE_PNG=ON `
2>&1 | Tee-Object -FilePath "cmake-configure.log"
if ($LASTEXITCODE -ne 0) {
throw "CMake configuration failed"
}
- name: Verify PNG support
shell: pwsh
run: |
$log = Get-Content "cmake-configure.log" -Raw
if ($log -notmatch '(?m)^-- Using PNG\s*$') {
Write-Host $log
throw "Zint was configured WITHOUT PNG support"
}
Write-Host "SUCCESS: Zint PNG support is enabled."
Get-Content "build/CMakeCache.txt" | Select-String "PNG|ZLIB|VCPKG_TARGET_TRIPLET"
- name: Build Zint ARM64
shell: pwsh
run: |
cmake --build build --config Release
if ($LASTEXITCODE -ne 0) {
throw "Zint ARM64 build failed"
}
- name: Package Windows ARM64 libraries
shell: pwsh
run: |
$package = Join-Path $env:GITHUB_WORKSPACE "zint-arm64-package"
New-Item -ItemType Directory -Path $package -Force | Out-Null
$zintDlls = @(Get-ChildItem -Path build -Filter 'zint.dll' -Recurse -File)
if ($zintDlls.Count -ne 1) {
throw "Expected one zint.dll; found $($zintDlls.Count)"
}
Copy-Item $zintDlls[0].FullName -Destination $package
$dependencyDirectory = Join-Path $env:VCPKG_INSTALLATION_ROOT "installed\arm64-windows\bin"
$runtimeDlls = @(Get-ChildItem -Path $dependencyDirectory -Filter '*.dll' -File)
if ($runtimeDlls.Count -eq 0) {
throw "No ARM64 runtime DLLs found in $dependencyDirectory"
}
foreach ($dll in $runtimeDlls) {
Copy-Item $dll.FullName -Destination $package
}
Write-Host "Packaged libraries:"
Get-ChildItem $package | Select-Object Name, Length
- name: Upload Windows ARM64 libraries
uses: actions/upload-artifact@v4
with:
name: zint-windows-arm64
path: zint-arm64-package/
if-no-files-found: error