From aae478af2db79a5cb54a1669d79567aae10bc7d1 Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Sat, 7 Feb 2026 13:45:24 +0000 Subject: [PATCH] Add support for win-arm64 and linux-arm64 --- .github/workflows/main.yml | 2 +- build/BuildWindowsTask.cs | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ec079e7..ef33bf3 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -9,7 +9,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [windows-latest, macos-latest, ubuntu-22.04] + os: [windows-latest, macos-latest, ubuntu-22.04, ubuntu-22.04-arm] fail-fast: false steps: - name: Expose GitHub Runtime diff --git a/build/BuildWindowsTask.cs b/build/BuildWindowsTask.cs index 81bb2c2..efde647 100644 --- a/build/BuildWindowsTask.cs +++ b/build/BuildWindowsTask.cs @@ -11,9 +11,15 @@ public sealed class BuildWindowsTask : FrostingTask public override void Run(BuildContext context) { - var buildWorkingDir = "mojoshaderbuild/"; + BuildForArchitecture(context, "x64", "x64"); + BuildForArchitecture(context, "ARM64", "arm64"); + } + + private void BuildForArchitecture(BuildContext context, string arch, string rid) + { + var buildWorkingDir = $"mojoshaderbuild-{rid}/"; context.CreateDirectory(buildWorkingDir); - context.StartProcess("cmake", new ProcessSettings { WorkingDirectory = buildWorkingDir, Arguments = "../mojoshader/CMakeLists.txt" }); + context.StartProcess("cmake", new ProcessSettings { WorkingDirectory = buildWorkingDir, Arguments = $"-A {arch} ../mojoshader/CMakeLists.txt" }); // Fix generated projects using the same obj folder var dirProps = @" @@ -29,6 +35,9 @@ public override void Run(BuildContext context) context.ReplaceTextInFiles(System.IO.Path.Combine(buildWorkingDir, "mojoshader.vcxproj"), "MultiThreadedDLL", "MultiThreaded"); context.StartProcess("cmake", new ProcessSettings { WorkingDirectory = buildWorkingDir, Arguments = "--build . --config release" }); - context.CopyFile(System.IO.Path.Combine(buildWorkingDir, "Release", "mojoshader.dll"), $"{context.ArtifactsDir}/mojoshader.dll"); + + var outputDir = $"{context.ArtifactsDir}/win-{rid}"; + context.CreateDirectory(outputDir); + context.CopyFile(System.IO.Path.Combine(buildWorkingDir, "Release", "mojoshader.dll"), $"{outputDir}/mojoshader.dll"); } }