diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 48a74b6..ed3169e 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 9a7dbf9..b05d0d6 100644 --- a/build/BuildWindowsTask.cs +++ b/build/BuildWindowsTask.cs @@ -11,11 +11,29 @@ public sealed class BuildWindowsTask : FrostingTask public override void Run(BuildContext context) { - var buildWorkingDir = "assimp/"; - context.StartProcess("cmake", new ProcessSettings { WorkingDirectory = buildWorkingDir, Arguments = "-DASSIMP_BUILD_TESTS=OFF -DASSIMP_INSTALL=OFF CMakeLists.txt" }); - context.ReplaceTextInFiles("assimp/code/assimp.vcxproj", "MultiThreadedDLL", "MultiThreaded"); - context.ReplaceTextInFiles("assimp/contrib/zlib/zlibstatic.vcxproj", "MultiThreadedDLL", "MultiThreaded"); - context.StartProcess("cmake", new ProcessSettings { WorkingDirectory = buildWorkingDir, Arguments = "--build . --config release" }); - context.CopyFile(@"assimp/bin/Release/assimp-vc143-mt.dll", $"{context.ArtifactsDir}/assimp.dll"); + BuildForArchitecture(context, "x64", "win-x64"); + BuildForArchitecture(context, "ARM64", "win-arm64"); + } + + private void BuildForArchitecture(BuildContext context, string cmakeArch, string rid) + { + var buildWorkingDir = $"assimp/build_{rid}"; + context.CreateDirectory(buildWorkingDir); + + context.StartProcess("cmake", new ProcessSettings { + WorkingDirectory = buildWorkingDir, + Arguments = $"-A {cmakeArch} -DASSIMP_BUILD_TESTS=OFF -DASSIMP_INSTALL=OFF .." + }); + + context.ReplaceTextInFiles($"{buildWorkingDir}/code/assimp.vcxproj", "MultiThreadedDLL", "MultiThreaded"); + context.ReplaceTextInFiles($"{buildWorkingDir}/contrib/zlib/zlibstatic.vcxproj", "MultiThreadedDLL", "MultiThreaded"); + + context.StartProcess("cmake", new ProcessSettings { + WorkingDirectory = buildWorkingDir, + Arguments = "--build . --config release" + }); + + context.CreateDirectory($"{context.ArtifactsDir}/{rid}"); + context.CopyFile($@"{buildWorkingDir}/bin/Release/assimp-vc143-mt.dll", $"{context.ArtifactsDir}/{rid}/assimp.dll"); } }