Reenable Windows on ARM builds for FreeDV. (#1297)

* Enable Windows on ARM builds for FreeDV.

* Use test branch to make sure no other problems compiling.

* Force certificate store creation to work around CI failure.

* Fix typo.

* Fix syntax errors.

* Choose the correct installer to use.

* Fix rename.

* Disable Windows on ARM CI testing.

* Revert "Use test branch to make sure no other problems compiling."

This reverts commit e6be639275.

* Add PR #1297 to changelog.

* Cleanup driver setup in CI environment.

* Add debugging.

* Fix VAD path.

* Trust certificate prior to install.

* Need to run devgen first.

* Install WDK.

* Find location of devgen.exe.

* Fix syntax errors.

* Try shorter path for search.

* Last ditch effort to find devgen.exe.

* Debugging: output all Windows SDK files.

* Remove dereference to devgenpath to force command output to print.

* Retry filter.

* Figured out actual path to use for devgen.exe.

* Use GH Action way of referencing environment variables.

* Add quotes around devgen.exe path.

* Need to add & to the beginning of command.

* /add, not add.

* Try 4.70 version of VAC.

* Forgot .zip.

* CI cleanup.

* Update signed Windows release script.

* No need to install PyTorch for Windows tests.

* Use windows-2025 to be more in line with Windows ARM runners.

* Forgot to update excludes.

* Revert to windows -2022.
pull/1293/head
Mooneer Salem 2026-04-20 22:23:19 -07:00 committed by GitHub
parent 67840fd751
commit 566fe625d9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 52 additions and 59 deletions

View File

@ -19,10 +19,16 @@ jobs:
# well on Windows or Mac. You can convert this to a matrix build if you need
# cross-platform coverage.
# See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
runs-on: ubuntu-24.04
outputs:
INSTALLER_FILENAME: ${{ steps.installer-filename.outputs.INSTALLER_FILENAME }}
strategy:
fail-fast: false
matrix:
arch: [x86_64, aarch64]
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v6
@ -46,7 +52,7 @@ jobs:
export PATH=${{github.workspace}}/llvm-mingw-20251216-ucrt-ubuntu-22.04-x86_64/bin:$PATH
mkdir build_windows
cd build_windows
cmake -DENABLE_LTO=1 -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=${{github.workspace}}/cross-compile/freedv-mingw-llvm-x86_64.cmake ..
cmake -DENABLE_LTO=1 -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=${{github.workspace}}/cross-compile/freedv-mingw-llvm-${{ matrix.arch }}.cmake ..
- name: Build freedv-gui
shell: bash
@ -70,38 +76,62 @@ jobs:
path: ${{github.workspace}}/build_windows/${{ steps.installer-filename.outputs.INSTALLER_FILENAME }}
test:
runs-on: windows-2022
strategy:
fail-fast: false
matrix:
runner: [windows-2022, windows-11-arm]
arch: [x86_64, aarch64]
exclude:
- runner: windows-2022
arch: aarch64
- runner: windows-11-arm
arch: x86_64
runs-on: ${{ matrix.runner }}
needs: build
env:
RADIO_TO_COMPUTER_DEVICE: "CABLE Output (VB-Audio Virtual Cable)"
COMPUTER_TO_RADIO_DEVICE: "Speakers (VB-Audio Virtual Cable)"
MICROPHONE_TO_COMPUTER_DEVICE: "Line 1 (Virtual Audio Cable)"
COMPUTER_TO_SPEAKER_DEVICE: "Line 1 (Virtual Audio Cable)"
steps:
- uses: actions/checkout@v6
- uses: actions/download-artifact@v8
with:
name: ${{needs.build.outputs.INSTALLER_FILENAME}}
merge-multiple: true
pattern: FreeDV-2*-${{ matrix.arch }}.exe
path: ${{github.workspace}}
- uses: TheMrMilchmann/setup-msvc-dev@v4
with:
arch: x64
- name: Install VB-Cable ("Radio" sound device)
uses: LABSN/sound-ci-helpers@v1
- run: 'Invoke-WebRequest https://k6aq.net/freedv-build/vac464.zip -OutFile vac464.zip'
- run: 'Expand-Archive -Path vac464.zip -DestinationPath vac464'
- run: 'Import-Certificate -FilePath ${{github.workspace}}\test\vac464.cer -CertStoreLocation Cert:\LocalMachine\root'
- run: 'Import-Certificate -FilePath ${{github.workspace}}\test\vac464.cer -CertStoreLocation Cert:\LocalMachine\TrustedPublisher'
- name: Install driver
shell: pwsh
run: |
.\vac464\setup64.exe -s -k 30570681-0a8b-46e5-8cb2-d835f43af0c5 | Out-Null
Start-Sleep -Seconds 10
# For convenience, make sure we fail fast if for whatever reason the install gets blocked on some GUI prompt.
timeout-minutes: 10
Invoke-WebRequest https://download.vb-audio.com/Download_CABLE/VBCABLE_Driver_Pack45.zip -OutFile VBCABLE_Driver_Pack45.zip
Expand-Archive -Path VBCABLE_Driver_Pack45.zip -DestinationPath VBCABLE_Driver_Pack45
Import-Certificate -FilePath ${{github.workspace}}\ci\vbcable.cer -CertStoreLocation Cert:\LocalMachine\root
Import-Certificate -FilePath ${{github.workspace}}\ci\vbcable.cer -CertStoreLocation Cert:\LocalMachine\TrustedPublisher
Get-ChildItem -Path $Env:WindowsSdkDir -Recurse -Filter "devgen.exe" | Select-Object FullName
& "${{ env.WindowsSdkDir }}\Tools\${{ env.WindowsSDKVersion }}\${{ env.Platform }}\devgen.exe" /add /bus ROOT /hardwareid VBAudioVACWDM
pnputil /add-driver VBCable_Driver_Pack45\vbMmeCable64_win10.inf /install
- name: Install VAC ("analog" sound device)
run: |
Invoke-WebRequest https://software.muzychenko.net/freeware/vac470lite.zip -OutFile vac470lite.zip
Expand-Archive -Path vac470lite.zip -DestinationPath vac470lite
$driverFile = 'vac470lite\${{ env.Platform }}\vrtaucbl.sys';
$outputFile = '${{github.workspace}}\vac.cer';
$exportType = [System.Security.Cryptography.X509Certificates.X509ContentType]::Cert;
$cert = (Get-AuthenticodeSignature $driverFile).SignerCertificate;
[System.IO.File]::WriteAllBytes($outputFile, $cert.Export($exportType));
Import-Certificate -FilePath ${{github.workspace}}\vac.cer -CertStoreLocation Cert:\LocalMachine\root
Import-Certificate -FilePath ${{github.workspace}}\vac.cer -CertStoreLocation Cert:\LocalMachine\TrustedPublisher
& "${{ env.WindowsSdkDir }}\Tools\${{ env.WindowsSDKVersion }}\${{ env.Platform }}\devgen.exe" /add /bus ROOT /hardwareid VirtualAudioCable_83ed7f0e-2028-4956-b0b4-39c76fdaef1d
pnputil /add-driver "vac470lite\vrtaucbl.inf" /install
- name: Screenshot if failed
if: failure()
@ -120,7 +150,8 @@ jobs:
- name: Install FreeDV on hard drive
shell: pwsh
run: |
.\${{needs.build.outputs.INSTALLER_FILENAME}} /S /D=${{github.workspace}}\FreeDV-Install-Location | Out-Null
Get-ChildItem *.exe | Rename-Item -NewName FreeDV.exe
.\FreeDV.exe /S /D=${{github.workspace}}\FreeDV-Install-Location | Out-Null
- name: Copy test scripts to install folder
shell: pwsh
@ -149,17 +180,13 @@ jobs:
- name: Start Windows Audio Service
run: |
net start audiosrv
Restart-Service -Name audiosrv -Force
- name: List audio devices
shell: pwsh
run: |
Get-CimInstance win32_sounddevice
- name: Install Python dependencies
run: |
python.exe -m pip install torch matplotlib
- name: Test RADE
shell: pwsh
working-directory: ${{github.workspace}}\FreeDV-Install-Location\bin

View File

@ -942,6 +942,7 @@ LDPC | Low Density Parity Check Codes - a family of powerful FEC codes
* Update Hamlib to 4.7.0. (PR #1226)
* Update wxWidgets to 3.3.2. (PR #1244)
* Flex: Update Docker container version to match AppImage version. (PR #1256)
* Reenable Windows on ARM builds previously disabled in 2.0.0. (PR #1297)
4. Documentation:
* Update README instructions to reflect current Windows build steps. (PR #1232)
* Add OmniRig troubleshooting to the user manual. (PR #1264)

View File

@ -24,7 +24,7 @@ WIN_BUILD_DIR=$SCRIPT_DIR/build_windows
mkdir $WIN_BUILD_DIR
cd $WIN_BUILD_DIR
for arch in x86_64; do
for arch in x86_64 aarch64; do
BUILD_ARCH_DIR="$WIN_BUILD_DIR/build_win_$arch"
# Clear existing build

BIN
ci/vbcable.cer 100644

Binary file not shown.

View File

@ -1,35 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIGDDCCBPSgAwIBAgIMW5i7HVbfDAJdVbddMA0GCSqGSIb3DQEBCwUAMG4xCzAJ
BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMUQwQgYDVQQDEztH
bG9iYWxTaWduIEV4dGVuZGVkIFZhbGlkYXRpb24gQ29kZVNpZ25pbmcgQ0EgLSBT
SEEyNTYgLSBHMzAeFw0yMDA1MjYxMjE4NDBaFw0yMzA4MjYxMjE4NDBaMIIBOzEd
MBsGA1UEDwwUUHJpdmF0ZSBPcmdhbml6YXRpb24xGDAWBgNVBAUTDzMxNjU0NzYw
MDEwNTU1NjETMBEGCysGAQQBgjc8AgEDEwJSVTEmMCQGCysGAQQBgjc8AgECExVO
b3Zvc2liaXJza2F5YSBvYmxhc3QxCzAJBgNVBAYTAlJVMR4wHAYDVQQIExVOb3Zv
c2liaXJza2F5YSBvYmxhc3QxFDASBgNVBAcTC05vdm9zaWJpcnNrMSswKQYDVQQK
EyJNdXp5Y2hlbmtvIEV2Z2VuaWkgVmlrdG9yb3ZpY2gsIElQMSswKQYDVQQDEyJN
dXp5Y2hlbmtvIEV2Z2VuaWkgVmlrdG9yb3ZpY2gsIElQMSYwJAYJKoZIhvcNAQkB
Fhdzb2Z0d2FyZUBtdXp5Y2hlbmtvLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAMzy2+Ke77GcrnUkMh5D8SB99OrONoC3QkniNZ78H0k1t/9qdBB7
PgsGIGMXlyo3tLx5A6kWI9iczp5iWEpdZUmvTs7AV/NDPGIDbHU7dJR1gFlzc4yn
0CSYbW5GkQEnYLZutYDzfJP6WkteKdj7EHg2N1iO9AtpcyyC8k4CWRahymT8wQLO
TmhcwoIgayY1rn4Qfyx5rO4EPf4dYl3NwNItJk5IAL+QgWuSQSIHptqbxM8G1Eiu
wR0Q+Ab5v3tKktdQc7OQootJv1IX1IhLaT/AYHTxrKugiTArwzAv77fYo6HUZPZ4
a+lKt/FH/FF6wH0BZZoDtAab1NU2m15Cz8kCAwEAAaOCAdkwggHVMA4GA1UdDwEB
/wQEAwIHgDCBoAYIKwYBBQUHAQEEgZMwgZAwTgYIKwYBBQUHMAKGQmh0dHA6Ly9z
ZWN1cmUuZ2xvYmFsc2lnbi5jb20vY2FjZXJ0L2dzZXh0ZW5kY29kZXNpZ25zaGEy
ZzNvY3NwLmNydDA+BggrBgEFBQcwAYYyaHR0cDovL29jc3AyLmdsb2JhbHNpZ24u
Y29tL2dzZXh0ZW5kY29kZXNpZ25zaGEyZzMwVQYDVR0gBE4wTDBBBgkrBgEEAaAy
AQIwNDAyBggrBgEFBQcCARYmaHR0cHM6Ly93d3cuZ2xvYmFsc2lnbi5jb20vcmVw
b3NpdG9yeS8wBwYFZ4EMAQMwCQYDVR0TBAIwADBFBgNVHR8EPjA8MDqgOKA2hjRo
dHRwOi8vY3JsLmdsb2JhbHNpZ24uY29tL2dzZXh0ZW5kY29kZXNpZ25zaGEyZzMu
Y3JsMCIGA1UdEQQbMBmBF3NvZnR3YXJlQG11enljaGVua28ubmV0MBMGA1UdJQQM
MAoGCCsGAQUFBwMDMB8GA1UdIwQYMBaAFNwsWCwqbzUtn3mVqEhdxG0+U7+5MB0G
A1UdDgQWBBSIENjDBY/ZwM9nURvPaBjwD0BpIDANBgkqhkiG9w0BAQsFAAOCAQEA
KAHk8s47IfKW8g/P2+Ia1koc/CkHFy4Q+R+uVC3DF3GVvNeBY9qCj8f8xUpQfkF1
mRUyIxfGCWS6sg+/CtzMY+vuSZnGb1C/2GQ5hBP/CvXXGz1W+sKASy29EU/gzzKd
j0sBVAUk+dgQ18P8cyUDnBxOGaizG/Yn10/2jzLi2eyBoxnunpzxMcgaaLUhtt/7
q7Jmor+A6FQ2xiuJlWE6TnUTR4aJH6uPswa6s6msHwNj9P7mbQfgK9P3pVmLuHBK
k9K9jkyL9KAAlNa7GBoT98a86z4x2lC/GcKOAD78M09qrfsd9+8f2II0XIXVuEuE
nabx4jlGD9IwXJ+daDrhfA==
-----END CERTIFICATE-----