From 9d10da366f0ffd8f6da443b87edbb16e22d1fc20 Mon Sep 17 00:00:00 2001 From: Isaiah Inuwa Date: Thu, 4 Dec 2025 08:46:23 -0600 Subject: [PATCH] Support x64 for cross-platform Appx builds --- apps/desktop/cross-build.ps1 | 29 ++++++++++++++++++++++------- apps/desktop/package.json | 2 +- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/apps/desktop/cross-build.ps1 b/apps/desktop/cross-build.ps1 index 54df02b41d8..25817604c5b 100755 --- a/apps/desktop/cross-build.ps1 +++ b/apps/desktop/cross-build.ps1 @@ -1,9 +1,11 @@ #!/usr/bin/env pwsh param( + [Parameter(Mandatory=$true)] + [System.Runtime.InteropServices.Architecture]$Architecture, $CertificatePath, $CertificatePassword, $ElectronConfigFile="electron-builder.json", - $Target="debug" + [Switch]$Release=$false ) $ErrorActionPreference = "Stop" $PSNativeCommandUseErrorActionPreference = $true @@ -22,10 +24,10 @@ $assetsDir = Get-Item $builderConfig.directories.buildResources $buildDir = Get-Item $builderConfig.directories.app $outDir = Join-Path (Get-Location) ($builderConfig.directories.output ?? "dist") -if ($target -eq "release") { - $targetStr = "--release" +if ($Release) { + $buildConfiguration = "--release" } -$arch = 'arm64' +$arch = "$Architecture".ToLower() $ext = "appx" $version = Get-Date -Format "yyyy.M.d.Hmm" # $buildNumber = Get-Date -Format "HHmm" @@ -34,7 +36,15 @@ $productName = $builderConfig.productName $artifactName = "${productName}-$($packageConfig.version)-${arch}.$ext" Write-Host "Building native code" -npm run build-native-win-cross -- $targetStr +$rustTarget = switch ($Architecture) { + X64 { "x86_64-pc-windows-msvc" } + ARM64 { "aarch64-pc-windows-msvc" } + default { + Write-Error "Unsupported architecture: $Architecture. Supported architectures are x64 and arm64" + Exit(1) + } +} +npm run build-native-win-cross -- $buildConfiguration "--target=$rustTarget" Write-Host "Building Javascript code" if ($target -eq "release") { @@ -55,7 +65,12 @@ New-Item -Type Directory (Join-Path $outDir "appx") Write-Host "Building Appx directory structure" $appxDir = (Join-Path $outDir appx/app) -Move-Item (Join-Path $outDir "win-${arch}-unpacked") $appxDir +if ($arch -eq "x64") { + Move-Item (Join-Path $outDir "win-unpacked") $appxDir +} +else { + Move-Item (Join-Path $outDir "win-${arch}-unpacked") $appxDir +} Write-Host "Copying Assets" New-Item -Type Directory (Join-Path $outDir appx/assets) @@ -103,7 +118,7 @@ else { $endTime = Get-Date $elapsed = $endTime - $startTime Write-Host "Successfully packaged $(Get-Item $outfile)" -Write-Host ("Finished in $($elapsed.ToString('mm')) minutes and $($elapsed.ToString('ss')).$($elapsed.ToString('fff')) seconds") +Write-Host ("Finished at $($endTime.ToString('HH:mm:ss')) in $($elapsed.ToString('mm')) minutes and $($elapsed.ToString('ss')).$($elapsed.ToString('fff')) seconds") } finally { Set-Location -Path $originalLocation diff --git a/apps/desktop/package.json b/apps/desktop/package.json index b3f55ed4dda..1c4bf02bc9d 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -20,7 +20,7 @@ "start": "cross-env ELECTRON_IS_DEV=0 ELECTRON_NO_UPDATER=1 electron ./build", "build-native-macos": "cd desktop_native && ./macos_provider/build.sh && node build.js cross-platform", "build-native": "cd desktop_native && node build.js", - "build-native-win-cross": "cd desktop_native && node build.js cross-platform --target=aarch64-pc-windows-msvc", + "build-native-win-cross": "cd desktop_native && node build.js cross-platform", "build": "concurrently -n Main,Rend,Prel -c yellow,cyan \"npm run build:main\" \"npm run build:renderer\" \"npm run build:preload\"", "build:dev": "concurrently -n Main,Rend,Prel -c yellow,cyan \"npm run build:main:dev\" \"npm run build:renderer:dev\" \"npm run build:preload:dev\"", "build:preload": "cross-env NODE_ENV=production webpack --config webpack.config.js --config-name preload",