Skip to content

Commit

Permalink
+ Windows ARM64 support.
Browse files Browse the repository at this point in the history
  • Loading branch information
drweb86 committed Jan 1, 2024
1 parent 95224b2 commit bf2dd4d
Show file tree
Hide file tree
Showing 5 changed files with 114 additions and 83 deletions.
5 changes: 5 additions & 0 deletions help/Version History (Changelog).md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
# 2024.01.02

## New Features
- Windows ARM64 support.

# 2024.01.01

## Changes
Expand Down
4 changes: 2 additions & 2 deletions snap/local/snapcraft.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ issues: https://github.com/drweb86/butil/issues
base: core22

architectures:
- amd64
- ###SnapcraftArchitectureLinux###

confinement: classic
compression: lzo
Expand All @@ -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:
Expand Down
8 changes: 3 additions & 5 deletions sources/BUILD.MD
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

- Windows 11x64 Professional;
- Microsoft Visual Studio 2022;
- AMD architecture

# Packaging

Expand All @@ -19,11 +20,8 @@ Update version (it should match the version name and tag of release!) in Version

Launch build.cmd.

It will create <root>\output\butil folders with compiled application.

It will create <root>\output\BUtil-x.exe with setup.

It will create <root>\output\BUtil-binaries.7z with binaries.
It will create <root>\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

Expand Down
156 changes: 96 additions & 60 deletions sources/build.ps1
Original file line number Diff line number Diff line change
@@ -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"

Expand Down Expand Up @@ -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"
}
}
24 changes: 8 additions & 16 deletions sources/setup.iss
Original file line number Diff line number Diff line change
@@ -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}
Expand All @@ -24,23 +24,23 @@ 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

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
Expand All @@ -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;
Expand Down Expand Up @@ -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"
Expand Down

0 comments on commit bf2dd4d

Please sign in to comment.