3 Commits

Author SHA1 Message Date
Dave Rolsky
e2ab1c3836 Update changes with more details on Linux ARM support
Some checks failed
Lint / Check that code is lint clean using precious (push) Failing after 0s
Self-test / Test action (map[cache-cross-binary:false can-execute:true cross-version:19be834 expect-cross:--expect-cross expect-cross-version:19be834 expect-file-re:aarch64 expect-stripped: platform_name:Linux-aarch64 with cross 19be834 (no cache) runs-on:ubuntu-2… (push) Failing after 0s
Self-test / Test action (map[cache-cross-binary:false can-execute:true cross-version:v0.2.3 expect-cross:--expect-cross expect-cross-version:0.2.3 expect-file-re:aarch64 expect-stripped: platform_name:Linux-aarch64 with cross v0.2.3 (no cache) runs-on:ubuntu-24.04… (push) Failing after 0s
Self-test / Test action (map[cache-cross-binary:false can-execute:true expect-cross:--expect-cross expect-file-re:aarch64 expect-stripped: platform_name:Linux-aarch64 (no cache) runs-on:ubuntu-24.04 target:aarch64-unknown-linux-gnu]) (push) Failing after 0s
Self-test / Test action (map[cache-cross-binary:true can-execute:false expect-cross:--expect-cross expect-file-re:x86-64.+FreeBSD expect-stripped: platform_name:FreeBSD-x86_64 runs-on:ubuntu-24.04 target:x86_64-unknown-freebsd]) (push) Failing after 0s
Self-test / Test action (map[cache-cross-binary:true can-execute:false expect-cross:--expect-cross expect-file-re:x86-64.+NetBSD expect-stripped: platform_name:NetBSD-x86_64 runs-on:ubuntu-24.04 target:x86_64-unknown-netbsd]) (push) Failing after 0s
Self-test / Test action (map[cache-cross-binary:true can-execute:true cross-version:19be834 expect-cross:--expect-cross expect-cross-version:19be834 expect-file-re:aarch64 expect-stripped: platform_name:Linux-aarch64 with cross 19be834 runs-on:ubuntu-24.04 target:… (push) Failing after 0s
Self-test / Test action (map[cache-cross-binary:true can-execute:true cross-version:v0.2.3 expect-cross:--expect-cross expect-cross-version:0.2.3 expect-file-re:aarch64 expect-stripped: platform_name:Linux-aarch64 with cross v0.2.3 runs-on:ubuntu-24.04 target:aarc… (push) Failing after 0s
Self-test / Test action (map[cache-cross-binary:true can-execute:true expect-cross: expect-file-re:ELF.+x86-64 expect-stripped:--expect-stripped platform_name:Linux-x86_64 runs-on:ubuntu-24.04 target:x86_64-unknown-linux-musl]) (push) Failing after 0s
Self-test / Test action (map[cache-cross-binary:true can-execute:true expect-cross:--expect-cross expect-file-re:32.+ARM expect-stripped: platform_name:Linux-arm runs-on:ubuntu-24.04 target:arm-unknown-linux-gnueabi]) (push) Failing after 1s
Self-test / Test action (map[cache-cross-binary:true can-execute:true expect-cross:--expect-cross expect-file-re:32.+PowerPC expect-stripped: platform_name:Linux-powerpc runs-on:ubuntu-24.04 target:powerpc-unknown-linux-gnu]) (push) Failing after 0s
Self-test / Test action (map[cache-cross-binary:true can-execute:true expect-cross:--expect-cross expect-file-re:64.+PowerPC expect-stripped: platform_name:Linux-powerpc64 runs-on:ubuntu-24.04 target:powerpc64-unknown-linux-gnu]) (push) Failing after 0s
Self-test / Test action (map[cache-cross-binary:true can-execute:true expect-cross:--expect-cross expect-file-re:64.+PowerPC expect-stripped: platform_name:Linux-powerpc64le runs-on:ubuntu-24.04 target:powerpc64le-unknown-linux-gnu]) (push) Failing after 0s
Self-test / Test action (map[cache-cross-binary:true can-execute:true expect-cross:--expect-cross expect-file-re:64.+RISC-V expect-stripped: platform_name:Linux-riscv64 runs-on:ubuntu-24.04 target:riscv64gc-unknown-linux-gnu]) (push) Failing after 0s
Self-test / Test action (map[cache-cross-binary:true can-execute:true expect-cross:--expect-cross expect-file-re:64.+S/390 expect-stripped: platform_name:Linux-s390x runs-on:ubuntu-24.04 target:s390x-unknown-linux-gnu]) (push) Failing after 0s
Self-test / Test action (map[cache-cross-binary:true can-execute:true expect-cross:--expect-cross expect-file-re:ELF.+80386 expect-stripped: platform_name:Linux-i586 runs-on:ubuntu-24.04 target:i586-unknown-linux-gnu]) (push) Failing after 0s
Self-test / Test action (map[cache-cross-binary:true can-execute:true expect-cross:--expect-cross expect-file-re:ELF.+80386 expect-stripped: platform_name:Linux-i686 runs-on:ubuntu-24.04 target:i686-unknown-linux-gnu]) (push) Failing after 0s
Self-test / Test action (map[cache-cross-binary:true can-execute:true expect-cross:--expect-cross expect-file-re:ELF.+x86-64 expect-stripped: force-use-cross:true platform_name:Linux-x86_64 (force cross) runs-on:ubuntu-24.04 target:x86_64-unknown-linux-gnu]) (push) Failing after 0s
Self-test / Test action (map[cache-cross-binary:true can-execute:true expect-cross:--expect-cross expect-file-re:aarch64 expect-stripped: platform_name:Linux-aarch64 runs-on:ubuntu-24.04 target:aarch64-unknown-linux-musl]) (push) Failing after 0s
Self-test / Test validate-inputs (push) Failing after 0s
Self-test / Test action (map[cache-cross-binary:true can-execute:false expect-cross: expect-file-re:Aarch64.+Windows expect-stripped: platform_name:Windows-aarch64 runs-on:windows-latest target:aarch64-pc-windows-msvc]) (push) Has been cancelled
Self-test / Test action (map[cache-cross-binary:true can-execute:false expect-cross: expect-file-re:Mach-O.+arm64 expect-stripped:--expect-stripped platform_name:macOS-aarch64 runs-on:macOS-latest target:aarch64-apple-darwin]) (push) Has been cancelled
Self-test / Test action (map[cache-cross-binary:true can-execute:true expect-cross: expect-file-re:80386.+Windows expect-stripped:--expect-stripped platform_name:Windows-i686 runs-on:windows-latest target:i686-pc-windows-msvc]) (push) Has been cancelled
Self-test / Test action (map[cache-cross-binary:true can-execute:true expect-cross: expect-file-re:Mach-O.+x86_64 expect-stripped:--expect-stripped platform_name:macOS-x86_64 runs-on:macOS-latest target:x86_64-apple-darwin]) (push) Has been cancelled
Self-test / Test action (map[cache-cross-binary:true can-execute:true expect-cross: expect-file-re:aarch64 expect-stripped:--expect-stripped platform_name:Linux-aarch64 with arm64 host runs-on:ubuntu-24.04-arm target:aarch64-unknown-linux-gnu]) (push) Has been cancelled
Self-test / Test action (map[cache-cross-binary:true can-execute:true expect-file-re:x86-64.+Windows expect-stripped:--expect-stripped platform_name:Windows-x86_64 runs-on:windows-latest target:x86_64-pc-windows-msvc]) (push) Has been cancelled
2025-02-17 13:31:48 -06:00
Dave Rolsky
d2db46a173 Add release date for 1.0.3 2025-02-17 13:29:49 -06:00
Dave Rolsky
83dc934d7f Add partial support for cross-compiling on Linux ARM runners
Until https://github.com/cross-rs/cross/issues/1628 is resolved, running cross on Linux ARM also
requires the user to provide a custom Docker image, so this is only sort of usable.
2025-02-17 13:28:30 -06:00
4 changed files with 57 additions and 1 deletions

View File

@@ -103,6 +103,32 @@ jobs:
expect-stripped: ""
can-execute: true
- platform_name: Linux-aarch64 with arm64 host
runs-on: ubuntu-24.04-arm
target: aarch64-unknown-linux-gnu
cache-cross-binary: true
expect-file-re: "aarch64"
expect-cross: ""
expect-stripped: "--expect-stripped"
can-execute: true
# This fails because of some sort of weird bug in cross. See
# https://github.com/cross-rs/cross/issues/1628 for more details. Until that's fixed
# cross-compiling on Linux ARM won't work without a custom Docker image, which I don't
# want to do just for the sake of testing this.
#
# - platform_name: Linux-aarch64 with arm64 host compile to x86-64
# runs-on: ubuntu-24.04-arm
# target: x86_64-unknown-linux-gnu
# # Until cross produces arm64 binary releases we _have_ to set this when running on
# # arm64.
# cross-version: "c7dee4d"
# cache-cross-binary: true
# expect-file-re: "ELF.+x86-64"
# expect-cross: "--expect-cross"
# expect-stripped: ""
# can-execute: true
- platform_name: Linux-arm
runs-on: ubuntu-24.04
target: arm-unknown-linux-gnueabi

View File

@@ -1,3 +1,11 @@
## 1.0.3 - 2025-02-17
- Fixed a bug when running with a Linux ARM host where the action would use a cached `cross`
download for x86-64 Linux (or vice versa). Now the cache key for the `cross` binary includes both
the runner's architecture in addition to its OS.
- This release partially support running on Linxu ARM, but see the `README.md` file for details on
this.
## 1.0.2 - 2025-02-16
- Added a new `force-use-cross` input, which does what it says. It will force the use of `cross`

View File

@@ -163,6 +163,19 @@ you can avoid this issue by structuring your workflow as follows:
When structured this way, it does not matter if the output of crate A is deleted in step 3.
## Cross-Compiling from Linux ARM Runners
In theory, this should work, and this action does implement some of the necessary work for this.
However, there are a couple issues with this:
1. As of 2025-02-17, the `cross` project does not publish Linux ARM binary releases. That means that
in order to use `cross` on a Linux ARM runner as part of this action, you must set
`cross-version` to a more recent commit from the `cross` repo.
2. There is
[a bug in `cross` that means you must use a custom Docker image](https://github.com/cross-rs/cross/issues/1628)
when cross-compiling from a Linux ARM runner. See
[this other `cross` issue](https://github.com/cross-rs/cross/issues/751) for more details.
## Linting and Tidying this Code
The code in this repo is linted and tidied with

View File

@@ -107,6 +107,15 @@ runs:
targets: ${{ inputs.target }}
toolchain: ${{ inputs.toolchain }}
- name: Install qemu-user emulator binaries if cross-compiling on arm64 host
shell: bash
run: |
set -e
set -x
docker run --privileged --rm tonistiigi/binfmt --install all
if: steps.determine-cross-compile.outputs.needs-cross == 'true' && runner.os == 'Linux' && contains(runner.arch, 'ARM')
- name: Determine cross version
id: determine-cross-version
shell: bash
@@ -128,7 +137,7 @@ runs:
uses: actions/cache@v4
with:
path: ${{ steps.set-cross-dir.outputs.cross-dir }}/cross
key: ${{ runner.os }}-${{ steps.determine-cross-version.outputs.cross-version }}
key: ${{ runner.os }}-${{ runner.arch }}-${{ steps.determine-cross-version.outputs.cross-version }}
if: steps.determine-cross-compile.outputs.needs-cross == 'true' && inputs.cache-cross-binary == 'true'
- name: Install cross if cross-compiling (*nix)