From bf2dd4d10f3ce7aa926dd152c8c3ca0ad9098c98 Mon Sep 17 00:00:00 2001 From: Siarhei Kuchuk Date: Tue, 2 Jan 2024 02:39:41 +0300 Subject: [PATCH] + Windows ARM64 support. --- help/Version History (Changelog).md | 5 + snap/local/snapcraft.yaml | 4 +- sources/BUILD.MD | 8 +- sources/build.ps1 | 156 +++++++++++++++++----------- sources/setup.iss | 24 ++--- 5 files changed, 114 insertions(+), 83 deletions(-) diff --git a/help/Version History (Changelog).md b/help/Version History (Changelog).md index 0709880a..20ba382a 100644 --- a/help/Version History (Changelog).md +++ b/help/Version History (Changelog).md @@ -1,3 +1,8 @@ +# 2024.01.02 + +## New Features +- Windows ARM64 support. + # 2024.01.01 ## Changes diff --git a/snap/local/snapcraft.yaml b/snap/local/snapcraft.yaml index bdf7650f..360a392e 100644 --- a/snap/local/snapcraft.yaml +++ b/snap/local/snapcraft.yaml @@ -16,7 +16,7 @@ issues: https://github.com/drweb86/butil/issues base: core22 architectures: - - amd64 + - ###SnapcraftArchitectureLinux### confinement: classic compression: lzo @@ -37,7 +37,7 @@ parts: - dotnet-sdk-7.0 override-build: | cd ./sources - dotnet publish /p:Version=###VERSION### /p:AssemblyVersion=###VERSION### -r linux-x64 -c Release --self-contained true -o $SNAPCRAFT_PART_INSTALL/bin/ + dotnet publish /p:Version=###VERSION### /p:AssemblyVersion=###VERSION### -r ###CoreRuntimeLinux### -c Release --self-contained true -o $SNAPCRAFT_PART_INSTALL/bin/ chmod 0755 $SNAPCRAFT_PART_INSTALL/bin/butil-ui.Desktop chmod 0755 $SNAPCRAFT_PART_INSTALL/bin/butilc stage-packages: diff --git a/sources/BUILD.MD b/sources/BUILD.MD index 507269b0..293a8fb9 100644 --- a/sources/BUILD.MD +++ b/sources/BUILD.MD @@ -2,6 +2,7 @@ - Windows 11x64 Professional; - Microsoft Visual Studio 2022; +- AMD architecture # Packaging @@ -19,11 +20,8 @@ Update version (it should match the version name and tag of release!) in Version Launch build.cmd. -It will create \output\butil folders with compiled application. - -It will create \output\BUtil-x.exe with setup. - -It will create \output\BUtil-binaries.7z with binaries. +It will create \output folder with all compiled. +Special note about Ubuntu-ARM64: since snapcraft require hardware to build for this platform, it won't be available. ## Ubuntu diff --git a/sources/build.ps1 b/sources/build.ps1 index a504415c..b6f9709a 100644 --- a/sources/build.ps1 +++ b/sources/build.ps1 @@ -1,7 +1,7 @@ $version = Get-Content "..\help\Version History (Changelog).md" -First 1 $version = $version.Substring(2) -cls +Clear-Host Write-Output "Version is $version" $ErrorActionPreference = "Stop" @@ -65,71 +65,107 @@ if (Test-Path "..\snap\snapcraft.yaml") } } -Write-Output "Publish..." -& dotnet publish "/p:InformationalVersion=$version" ` - "/p:VersionPrefix=$version" ` - "/p:Version=$version" ` - "/p:AssemblyVersion=$version" ` - "--runtime=win-x64" ` - /p:Configuration=Release ` - /p:PublishDir=../../Output/butil/bin ` - /p:PublishReadyToRun=false ` - /p:RunAnalyzersDuringBuild=False ` - --self-contained true ` - --property WarningLevel=0 -if ($LastExitCode -ne 0) -{ - Write-Error "Fail." - Exit 1 -} +class BuildInfo { + [string]$CoreRuntimeWindows + [string]$InnoArchitectureWindows + [string]$SnapcraftArchitectureLinux + [string]$SnapcraftCoreRuntimeLinux -Write-Output "Setup..." -& "c:\Program Files (x86)\Inno Setup 6\ISCC.exe" setup.iss -if ($LastExitCode -ne 0) -{ - Write-Error "Fail." - Exit 1 + BuildInfo( + [string]$CoreRuntimeWindows, + [string]$InnoArchitectureWindows, + [string]$SnapcraftArchitectureLinux, + [string]$SnapcraftCoreRuntimeLinux) { + $this.CoreRuntimeWindows = $CoreRuntimeWindows + $this.InnoArchitectureWindows = $InnoArchitectureWindows + $this.SnapcraftArchitectureLinux = $SnapcraftArchitectureLinux + $this.SnapcraftCoreRuntimeLinux = $SnapcraftCoreRuntimeLinux + } } -Write-Output "Prepare to pack binaries" -Copy-Item "..\help\Readme.Binaries.md" "..\Output\BUtil\README.md" -if ($LastExitCode -ne 0) -{ - Write-Error "Fail." - Exit 1 -} +$platforms = New-Object System.Collections.ArrayList +[void]$platforms.Add([BuildInfo]::new("win-x64", "x64", "amd64", "linux-x64")) +[void]$platforms.Add([BuildInfo]::new("win-arm64", "arm64", "arm64", "linux-arm64")) -Write-Output "Pack binaries" -& "c:\Program Files\7-Zip\7z.exe" a -y "..\Output\BUtil-$version-binaries-Windows.7z" "..\Output\BUtil\*" -mx9 -t7z -m0=lzma2 -ms=on -sccUTF-8 -ssw -if ($LastExitCode -ne 0) +ForEach ($platform in $platforms) { - Write-Error "Fail." - Exit 1 -} + Write-Output "Platform: $($platform.CoreRuntimeWindows)" -Write-Output "Create snapcraft with version" -(Get-Content "..\snap\local\snapcraft.yaml").Replace("###VERSION###", "$version") | Set-Content "../snap\snapcraft.yaml" -if ($LastExitCode -ne 0) -{ - Write-Error "Fail." - Exit 1 -} + Write-Output "Publish..." + & dotnet publish "/p:InformationalVersion=$version" ` + "/p:VersionPrefix=$version" ` + "/p:Version=$version" ` + "/p:AssemblyVersion=$version" ` + "--runtime=$($platform.CoreRuntimeWindows)" ` + /p:Configuration=Release ` + "/p:PublishDir=../../Output/$($platform.CoreRuntimeWindows)/bin" ` + /p:PublishReadyToRun=false ` + /p:RunAnalyzersDuringBuild=False ` + --self-contained true ` + --property WarningLevel=0 + if ($LastExitCode -ne 0) + { + Write-Error "Fail." + Exit 1 + } -Write-Output "Create snap" -Set-Location .. -& wsl.exe sudo snapcraft -if ($LastExitCode -ne 0) -{ - Write-Error "Fail." - Set-Location sources - Exit 1 -} -Set-Location sources + Write-Output "Create Setup Script" + $innoSetupScriptFile="../Output/$($platform.CoreRuntimeWindows)/_InnoSetup $($platform.CoreRuntimeWindows).iss" -Write-Output "Pack snap" -& "c:\Program Files\7-Zip\7z.exe" a -y ..\Output\BUtil-$version-Ubuntu_amd64.zip "..\*.snap" "..\help\ubuntu-snap\readme.md" -mx9 -t7z -m0=lzma2 -ms=on -sccUTF-8 -ssw -if ($LastExitCode -ne 0) -{ - Write-Error "Fail." - Exit 1 + (Get-Content "setup.iss").Replace("###ARCHITECTURE###", $platform.InnoArchitectureWindows).Replace("###CORERUNTIME###", $platform.CoreRuntimeWindows).Replace("###VERSION###", $version) | Set-Content $innoSetupScriptFile + Write-Output "Setup..." + & "c:\Program Files (x86)\Inno Setup 6\ISCC.exe" $innoSetupScriptFile + if ($LastExitCode -ne 0) + { + Write-Error "Fail." + Exit 1 + } + + Write-Output "Prepare to pack binaries" + Copy-Item "..\help\Readme.Binaries.md" "..\Output\$($platform.CoreRuntimeWindows)\bin\README.md" + if ($LastExitCode -ne 0) + { + Write-Error "Fail." + Exit 1 + } + + Write-Output "Pack binaries" + & "c:\Program Files\7-Zip\7z.exe" a -y "..\Output\BUtil_v$($version)_$($platform.CoreRuntimeWindows)-binaries.7z" "..\Output\$($platform.CoreRuntimeWindows)\bin\*" -mx9 -t7z -m0=lzma2 -ms=on -sccUTF-8 -ssw + if ($LastExitCode -ne 0) + { + Write-Error "Fail." + Exit 1 + } + + if ($platform.SnapcraftArchitectureLinux -ne "arm64") + { + Write-Output "Create snapcraft with version" + (Get-Content "..\snap\local\snapcraft.yaml").Replace("###VERSION###", "$version").Replace("###CoreRuntimeLinux###", "$($platform.SnapcraftCoreRuntimeLinux)").Replace("###SnapcraftArchitectureLinux###", "$($platform.SnapcraftArchitectureLinux)") | Set-Content "../snap/snapcraft.yaml" + if ($LastExitCode -ne 0) + { + Write-Error "Fail." + Exit 1 + } + + Write-Output "Create snap" + Set-Location .. + & wsl.exe sudo snapcraft + if ($LastExitCode -ne 0) + { + Write-Error "Fail." + Set-Location sources + Exit 1 + } + Set-Location sources + + Write-Output "Pack snap" + & "c:\Program Files\7-Zip\7z.exe" a -y "..\Output\BUtil_v$($version)_ubuntu-$($platform.SnapcraftArchitectureLinux).tar" "..\butil_$($version)_$($platform.SnapcraftArchitectureLinux).snap" "..\help\ubuntu-snap\readme.md" + if ($LastExitCode -ne 0) + { + Write-Error "Fail." + Exit 1 + } + + Remove-Item "../snap/snapcraft.yaml" + } } diff --git a/sources/setup.iss b/sources/setup.iss index b6b062a1..ecee88c6 100644 --- a/sources/setup.iss +++ b/sources/setup.iss @@ -1,10 +1,10 @@ #define MyAppName "BUtil" -#define ApplicationVersion GetVersionNumbersString('..\Output\BUtil\bin\butil-ui.Desktop.exe') +#define ApplicationVersion "###VERSION###" #define CurrentYear GetDateTimeString('yyyy','','') #define StartYearCopyright "2011" #define MyAppSupportURL "https://github.com/drweb86/butil" #define MyAppAuthor "Siarhei Kuchuk" -#include ".\setup-strings.iss" +#include "..\..\sources\setup-strings.iss" [Setup] AppName={#MyAppName} @@ -24,7 +24,7 @@ VersionInfoVersion={#ApplicationVersion} UninstallDisplayName={#MyAppName} UninstallDisplayIcon={app}\bin\butil-ui.Desktop.exe -SetupIconFile=.\butil-ui\Assets\butil.ico +SetupIconFile=..\..\sources\butil-ui\Assets\butil.ico WizardStyle=modern @@ -32,15 +32,15 @@ DisableWelcomePage=yes DefaultDirName={autopf}\{#MyAppName} DefaultGroupName={#MyAppName} AllowNoIcons=yes -OutputDir=..\Output -OutputBaseFilename=BUtil_v{#ApplicationVersion} +OutputDir=.. +OutputBaseFilename=BUtil_v{#ApplicationVersion}_###CORERUNTIME### Compression=lzma2/ultra64 SolidCompression=yes PrivilegesRequired=none PrivilegesRequiredOverridesAllowed=commandline dialog UsePreviousGroup=no RestartIfNeededByRun=no -ArchitecturesInstallIn64BitMode=x64 +ArchitecturesInstallIn64BitMode=###ARCHITECTURE### DisableFinishedPage=yes DisableProgramGroupPage=yes DisableDirPage=yes @@ -51,15 +51,7 @@ UsePreviousAppDir=no [Code] function Is7ZipInstalled(): Boolean; begin - Result := True; - if Is64BitInstallMode then - begin - Result := FileExists(ExpandConstant('{commonpf32}\7-zip\7z.exe')) or FileExists(ExpandConstant('{commonpf64}\7-zip\7z.exe')); - end - else - begin - Result := FileExists(ExpandConstant('{commonpf32}\7-zip\7z.exe')); - end + Result := FileExists(ExpandConstant('{commonpf64}\7-zip\7z.exe')); end; function InitializeSetup: Boolean; @@ -98,7 +90,7 @@ begin end; [Files] -Source: "..\Output\BUtil\*.*"; DestDir: "{app}"; Flags: recursesubdirs +Source: "bin\*.*"; DestDir: "{app}"; Flags: recursesubdirs [Icons] Name: "{group}\{#MyAppName}"; Filename: "{app}\bin\butil-ui.Desktop.exe"