From 2ad05312618e0dd53cba28e06b5e20cebcd3bba6 Mon Sep 17 00:00:00 2001 From: khcrysalis <97859147+khcrysalis@users.noreply.github.com> Date: Sat, 21 Feb 2026 15:31:18 -0800 Subject: [PATCH 1/4] feat: add arm64 & x86 support --- .github/workflows/build.yml | 47 ++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0d7d64e..88d7145 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -46,40 +46,65 @@ jobs: build-windows: runs-on: ubuntu-24.04 + strategy: + matrix: + include: + - target: x86_64-pc-windows-gnu + arch: x86_64 + - target: i686-pc-windows-gnu + arch: x86 + - target: aarch64-pc-windows-gnullvm + arch: arm64 steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: - targets: x86_64-pc-windows-gnu + targets: ${{ matrix.target }} - - name: Install mingw-w64 + - name: Install mingw-w64 (x86_64/x86) + if: matrix.arch == 'x86_64' || matrix.arch == 'x86' run: | sudo apt-get update sudo apt-get install -y mingw-w64 + - name: Install llvm-mingw (arm64) + if: matrix.arch == 'arm64' + run: | + curl -L https://github.com/mstorsjo/llvm-mingw/releases/download/20241119/llvm-mingw-20241119-ucrt-ubuntu-20.04-x86_64.tar.xz -o llvm-mingw.tar.xz + tar -xf llvm-mingw.tar.xz + echo "$PWD/llvm-mingw-20241119-ucrt-ubuntu-20.04-x86_64/bin" >> $GITHUB_PATH + - name: Build binaries (cross-compile) + env: + CARGO_TARGET_AARCH64_PC_WINDOWS_GNULLVM_LINKER: aarch64-w64-mingw32-clang + CC_aarch64_pc_windows_gnullvm: aarch64-w64-mingw32-clang + CXX_aarch64_pc_windows_gnullvm: aarch64-w64-mingw32-clang++ + AR_aarch64_pc_windows_gnullvm: aarch64-w64-mingw32-ar run: | - cargo build --bins --workspace --release --target x86_64-pc-windows-gnu + cargo build --bins --workspace --release --target ${{ matrix.target }} mkdir -p dist - cp target/x86_64-pc-windows-gnu/release/plumeimpactor.exe dist/Impactor-windows-x86_64-portable.exe - cp target/x86_64-pc-windows-gnu/release/plumesign.exe dist/plumesign-windows-x86_64.exe + cp target/${{ matrix.target }}/release/plumeimpactor.exe dist/Impactor-windows-${{ matrix.arch }}-portable.exe + cp target/${{ matrix.target }}/release/plumesign.exe dist/plumesign-windows-${{ matrix.arch }}.exe - name: Upload Bundles uses: actions/upload-artifact@v4 with: - name: ${{ env.BINARY_NAME }}-windows + name: ${{ env.BINARY_NAME }}-windows-${{ matrix.arch }} path: dist/*.exe build-windows-installer: runs-on: windows-latest needs: [build-windows] + strategy: + matrix: + arch: [x86_64, x86, arm64] steps: - uses: actions/checkout@v4 - name: Download Windows Artifacts uses: actions/download-artifact@v4 with: - name: ${{ env.BINARY_NAME }}-windows + name: ${{ env.BINARY_NAME }}-windows-${{ matrix.arch }} path: dist - name: Install NSIS @@ -89,15 +114,15 @@ jobs: run: | mkdir dist\nsis copy package\windows\* dist\nsis\ - copy dist\Impactor-windows-x86_64-portable.exe dist\nsis\plumeimpactor.exe + copy dist\Impactor-windows-${{ matrix.arch }}-portable.exe dist\nsis\plumeimpactor.exe makensis dist\nsis\installer.nsi - move dist\nsis\installer.exe dist\Impactor-windows-x86_64-setup.exe + move dist\nsis\installer.exe dist\Impactor-windows-${{ matrix.arch }}-setup.exe - name: Upload Installer uses: actions/upload-artifact@v4 with: - name: ${{ env.BINARY_NAME }}-windows-installer - path: dist/Impactor-windows-x86_64-setup.exe + name: ${{ env.BINARY_NAME }}-windows-installer-${{ matrix.arch }} + path: dist/Impactor-windows-${{ matrix.arch }}-setup.exe build-macos-slices: runs-on: ubuntu-24.04 From 54c0954f7426c8591a70481775ac03df827e5676 Mon Sep 17 00:00:00 2001 From: khcrysalis <97859147+khcrysalis@users.noreply.github.com> Date: Sat, 21 Feb 2026 15:38:12 -0800 Subject: [PATCH 2/4] experiment --- .github/workflows/build.yml | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 88d7145..8e3724e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -45,16 +45,19 @@ jobs: path: dist/* build-windows: - runs-on: ubuntu-24.04 + runs-on: ${{ matrix.runner }} strategy: matrix: include: - target: x86_64-pc-windows-gnu arch: x86_64 + runner: ubuntu-24.04 - target: i686-pc-windows-gnu arch: x86 - - target: aarch64-pc-windows-gnullvm + runner: ubuntu-24.04 + - target: aarch64-pc-windows-msvc arch: arm64 + runner: windows-11-arm steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable @@ -67,25 +70,23 @@ jobs: sudo apt-get update sudo apt-get install -y mingw-w64 - - name: Install llvm-mingw (arm64) - if: matrix.arch == 'arm64' - run: | - curl -L https://github.com/mstorsjo/llvm-mingw/releases/download/20241119/llvm-mingw-20241119-ucrt-ubuntu-20.04-x86_64.tar.xz -o llvm-mingw.tar.xz - tar -xf llvm-mingw.tar.xz - echo "$PWD/llvm-mingw-20241119-ucrt-ubuntu-20.04-x86_64/bin" >> $GITHUB_PATH - - - name: Build binaries (cross-compile) - env: - CARGO_TARGET_AARCH64_PC_WINDOWS_GNULLVM_LINKER: aarch64-w64-mingw32-clang - CC_aarch64_pc_windows_gnullvm: aarch64-w64-mingw32-clang - CXX_aarch64_pc_windows_gnullvm: aarch64-w64-mingw32-clang++ - AR_aarch64_pc_windows_gnullvm: aarch64-w64-mingw32-ar + - name: Build binaries (Linux cross-compile) + if: matrix.arch != 'arm64' run: | cargo build --bins --workspace --release --target ${{ matrix.target }} mkdir -p dist cp target/${{ matrix.target }}/release/plumeimpactor.exe dist/Impactor-windows-${{ matrix.arch }}-portable.exe cp target/${{ matrix.target }}/release/plumesign.exe dist/plumesign-windows-${{ matrix.arch }}.exe + - name: Build binaries (Windows ARM64 native) + if: matrix.arch == 'arm64' + shell: pwsh + run: | + cargo build --bins --workspace --release --target ${{ matrix.target }} + New-Item -ItemType Directory -Force -Path dist + Copy-Item "target/${{ matrix.target }}/release/plumeimpactor.exe" "dist/Impactor-windows-${{ matrix.arch }}-portable.exe" + Copy-Item "target/${{ matrix.target }}/release/plumesign.exe" "dist/plumesign-windows-${{ matrix.arch }}.exe" + - name: Upload Bundles uses: actions/upload-artifact@v4 with: From 4f5edff4c83446242c9ee6e8fd6183ff738ac38d Mon Sep 17 00:00:00 2001 From: khcrysalis <97859147+khcrysalis@users.noreply.github.com> Date: Sat, 21 Feb 2026 15:31:18 -0800 Subject: [PATCH 3/4] feat: add arm64 & x86 support --- .github/workflows/build.yml | 47 ++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0d7d64e..88d7145 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -46,40 +46,65 @@ jobs: build-windows: runs-on: ubuntu-24.04 + strategy: + matrix: + include: + - target: x86_64-pc-windows-gnu + arch: x86_64 + - target: i686-pc-windows-gnu + arch: x86 + - target: aarch64-pc-windows-gnullvm + arch: arm64 steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: - targets: x86_64-pc-windows-gnu + targets: ${{ matrix.target }} - - name: Install mingw-w64 + - name: Install mingw-w64 (x86_64/x86) + if: matrix.arch == 'x86_64' || matrix.arch == 'x86' run: | sudo apt-get update sudo apt-get install -y mingw-w64 + - name: Install llvm-mingw (arm64) + if: matrix.arch == 'arm64' + run: | + curl -L https://github.com/mstorsjo/llvm-mingw/releases/download/20241119/llvm-mingw-20241119-ucrt-ubuntu-20.04-x86_64.tar.xz -o llvm-mingw.tar.xz + tar -xf llvm-mingw.tar.xz + echo "$PWD/llvm-mingw-20241119-ucrt-ubuntu-20.04-x86_64/bin" >> $GITHUB_PATH + - name: Build binaries (cross-compile) + env: + CARGO_TARGET_AARCH64_PC_WINDOWS_GNULLVM_LINKER: aarch64-w64-mingw32-clang + CC_aarch64_pc_windows_gnullvm: aarch64-w64-mingw32-clang + CXX_aarch64_pc_windows_gnullvm: aarch64-w64-mingw32-clang++ + AR_aarch64_pc_windows_gnullvm: aarch64-w64-mingw32-ar run: | - cargo build --bins --workspace --release --target x86_64-pc-windows-gnu + cargo build --bins --workspace --release --target ${{ matrix.target }} mkdir -p dist - cp target/x86_64-pc-windows-gnu/release/plumeimpactor.exe dist/Impactor-windows-x86_64-portable.exe - cp target/x86_64-pc-windows-gnu/release/plumesign.exe dist/plumesign-windows-x86_64.exe + cp target/${{ matrix.target }}/release/plumeimpactor.exe dist/Impactor-windows-${{ matrix.arch }}-portable.exe + cp target/${{ matrix.target }}/release/plumesign.exe dist/plumesign-windows-${{ matrix.arch }}.exe - name: Upload Bundles uses: actions/upload-artifact@v4 with: - name: ${{ env.BINARY_NAME }}-windows + name: ${{ env.BINARY_NAME }}-windows-${{ matrix.arch }} path: dist/*.exe build-windows-installer: runs-on: windows-latest needs: [build-windows] + strategy: + matrix: + arch: [x86_64, x86, arm64] steps: - uses: actions/checkout@v4 - name: Download Windows Artifacts uses: actions/download-artifact@v4 with: - name: ${{ env.BINARY_NAME }}-windows + name: ${{ env.BINARY_NAME }}-windows-${{ matrix.arch }} path: dist - name: Install NSIS @@ -89,15 +114,15 @@ jobs: run: | mkdir dist\nsis copy package\windows\* dist\nsis\ - copy dist\Impactor-windows-x86_64-portable.exe dist\nsis\plumeimpactor.exe + copy dist\Impactor-windows-${{ matrix.arch }}-portable.exe dist\nsis\plumeimpactor.exe makensis dist\nsis\installer.nsi - move dist\nsis\installer.exe dist\Impactor-windows-x86_64-setup.exe + move dist\nsis\installer.exe dist\Impactor-windows-${{ matrix.arch }}-setup.exe - name: Upload Installer uses: actions/upload-artifact@v4 with: - name: ${{ env.BINARY_NAME }}-windows-installer - path: dist/Impactor-windows-x86_64-setup.exe + name: ${{ env.BINARY_NAME }}-windows-installer-${{ matrix.arch }} + path: dist/Impactor-windows-${{ matrix.arch }}-setup.exe build-macos-slices: runs-on: ubuntu-24.04 From 781d8b9ac2b79ad4eeae9c48748518cef86e494d Mon Sep 17 00:00:00 2001 From: khcrysalis <97859147+khcrysalis@users.noreply.github.com> Date: Sat, 21 Feb 2026 15:38:12 -0800 Subject: [PATCH 4/4] experiment --- .github/workflows/build.yml | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 88d7145..8e3724e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -45,16 +45,19 @@ jobs: path: dist/* build-windows: - runs-on: ubuntu-24.04 + runs-on: ${{ matrix.runner }} strategy: matrix: include: - target: x86_64-pc-windows-gnu arch: x86_64 + runner: ubuntu-24.04 - target: i686-pc-windows-gnu arch: x86 - - target: aarch64-pc-windows-gnullvm + runner: ubuntu-24.04 + - target: aarch64-pc-windows-msvc arch: arm64 + runner: windows-11-arm steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable @@ -67,25 +70,23 @@ jobs: sudo apt-get update sudo apt-get install -y mingw-w64 - - name: Install llvm-mingw (arm64) - if: matrix.arch == 'arm64' - run: | - curl -L https://github.com/mstorsjo/llvm-mingw/releases/download/20241119/llvm-mingw-20241119-ucrt-ubuntu-20.04-x86_64.tar.xz -o llvm-mingw.tar.xz - tar -xf llvm-mingw.tar.xz - echo "$PWD/llvm-mingw-20241119-ucrt-ubuntu-20.04-x86_64/bin" >> $GITHUB_PATH - - - name: Build binaries (cross-compile) - env: - CARGO_TARGET_AARCH64_PC_WINDOWS_GNULLVM_LINKER: aarch64-w64-mingw32-clang - CC_aarch64_pc_windows_gnullvm: aarch64-w64-mingw32-clang - CXX_aarch64_pc_windows_gnullvm: aarch64-w64-mingw32-clang++ - AR_aarch64_pc_windows_gnullvm: aarch64-w64-mingw32-ar + - name: Build binaries (Linux cross-compile) + if: matrix.arch != 'arm64' run: | cargo build --bins --workspace --release --target ${{ matrix.target }} mkdir -p dist cp target/${{ matrix.target }}/release/plumeimpactor.exe dist/Impactor-windows-${{ matrix.arch }}-portable.exe cp target/${{ matrix.target }}/release/plumesign.exe dist/plumesign-windows-${{ matrix.arch }}.exe + - name: Build binaries (Windows ARM64 native) + if: matrix.arch == 'arm64' + shell: pwsh + run: | + cargo build --bins --workspace --release --target ${{ matrix.target }} + New-Item -ItemType Directory -Force -Path dist + Copy-Item "target/${{ matrix.target }}/release/plumeimpactor.exe" "dist/Impactor-windows-${{ matrix.arch }}-portable.exe" + Copy-Item "target/${{ matrix.target }}/release/plumesign.exe" "dist/plumesign-windows-${{ matrix.arch }}.exe" + - name: Upload Bundles uses: actions/upload-artifact@v4 with: