Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Is arm64 / aarch64 architecture supported? #518

Closed
K0-RR opened this issue Jun 12, 2023 · 8 comments
Closed

Is arm64 / aarch64 architecture supported? #518

K0-RR opened this issue Jun 12, 2023 · 8 comments

Comments

@K0-RR
Copy link

K0-RR commented Jun 12, 2023

I wanted to optimize photos directly on Android before moving them. Also, I have a raspberry pi server.

@templarundead
Copy link

Yes

@ez-me
Copy link

ez-me commented Jun 12, 2023

Yes, I used Termux to compile the binary on my Phone and it works fine.

@parasew
Copy link

parasew commented Jul 9, 2023

I can also confirm this. Issue can be closed imho.

@TPS
Copy link

TPS commented Jul 9, 2023

Maybe there should be a section in the ReadMe for platforms that oxipng is confirmed to work on?

@AlexTMjugador
Copy link
Collaborator

OxiPNG is a pure Rust project, so a priori there is no reason why its AArch64 support should be worse than x64, as both targets are well supported by rustc. I have some experience building Rust for AArch64 targets, so I can try adding a CI workflow for that if there is some interest.

@TPS
Copy link

TPS commented Jul 10, 2023

Maybe there should be a section in the ReadMe for platforms that oxipng is confirmed to work on?

OxiPNG is a pure Rust project, so a priori there is no reason why its AArch64 support should be worse than x64, as both targets are well supported by rustc.

I only meant, b/c this kind of question (& sometimes extra work, as for wasm #157#194) comes up periodically.

I have some experience building Rust for AArch64 targets, so I can try adding a CI workflow for that if there is some interest.

A PR FTW! 🙇🏾‍♂️

AlexTMjugador added a commit that referenced this issue Jul 10, 2023
As commented in issues #444 and #518, there is some user interest for
distributing binaries for each unstable commit, and target ARM64
platforms. Personally, I think both suggestions are useful for the
project, as uploading binary artifacts for each commit might help
interested users to catch regressions and give feedback earlier, and
powerful ARM64 platforms are becoming increasingly popular due to some
cloud services (e.g., Amazon EC2, Azure VMs, Oracle Cloud) offering
cheaper plans for this hardware, in addition to the well-known push for
ARM by Apple with their custom M1 chips.

These changes make the CI target ARM64 as a first-class citizen. Because
the public GitHub actions runners can only be hosted on x64 for now, I
resorted to cross-compilation, [Debian's
multiarch](https://elinux.org/images/d/d8/Multiarch_and_Why_You_Should_Care-_Running%2C_Installing_and_Crossbuilding_With_Multiple_Architectures.pdf),
and QEMU to build, get ARM64 C library dependencies, and run tests,
respectively.

When the CI workflow finishes, a release CLI binary artifact is now
uploaded, which can be downloaded from the workflow run page on the
GitHub web interface.

In addition, these changes also introduce some cleanup and miscellaneous
improvements and changes to the CI workflow:

- Tests are run using [`nextest`](https://nexte.st/) instead of `cargo
  test`, which substantially speeds up their execution. (On my
  development workstation, `cargo test --release` takes around 10.67 s,
  while `cargo nextest run --release` takes around 6.02 s.)
- The dependencies on unmaintained `actions-rs` actions were dropped in
  favor of running Cargo commands directly, or using
  `giraffate/clippy-action` for pretty inline annotations for Clippy.
  This gets rid of the deprecation warnings for each workflow run.
- Most CI steps are run with a nightly Rust toolchain now, which allows
  to take advantage of the latest Clippy lints and codegen improvements.
  In my experience, when not relying on specific nightly features or
  compiler internals, Rust does a pretty good job at making it possible
  to rely on a rolling-release compiler for CI, as breakage is extremely
  rare and thus offset by the improved features.
- The MSRV check was moved to a separate job with less steps, so that it
  takes less of a toll on total workflow run minutes.
AlexTMjugador added a commit that referenced this issue Jul 10, 2023
… and more

As commented in issues #444 and #518, there is some user interest for
distributing binaries for each unstable commit, and target ARM64
platforms. Personally, I think both suggestions are useful for the
project, as uploading binary artifacts for each commit might help
interested users to catch regressions and give feedback earlier, and
powerful ARM64 platforms are becoming increasingly popular due to some
cloud services (e.g., Amazon EC2, Azure VMs, Oracle Cloud) offering
cheaper plans for this hardware, in addition to the well-known push for
ARM by Apple with their custom M1 chips.

These changes make the CI target ARM64 as a first-class citizen. Because
the public GitHub actions runners can only be hosted on x64 for now, I
resorted to cross-compilation, [Debian's
multiarch](https://elinux.org/images/d/d8/Multiarch_and_Why_You_Should_Care-_Running%2C_Installing_and_Crossbuilding_With_Multiple_Architectures.pdf),
and QEMU to build, get ARM64 C library dependencies, and run tests,
respectively.

When the CI workflow finishes, a release CLI binary artifact is now
uploaded, which can be downloaded from the workflow run page on the
GitHub web interface.

In addition, these changes also introduce some cleanup and miscellaneous
improvements and changes to the CI workflow:

- Tests are run using [`nextest`](https://nexte.st/) instead of `cargo
  test`, which substantially speeds up their execution. (On my
  development workstation, `cargo test --release` takes around 10.67 s,
  while `cargo nextest run --release` takes around 6.02 s.)
- The dependencies on unmaintained `actions-rs` actions were dropped in
  favor of running Cargo commands directly, or using
  `giraffate/clippy-action` for pretty inline annotations for Clippy.
  This gets rid of the deprecation warnings for each workflow run.
- Most CI steps are run with a nightly Rust toolchain now, which allows
  to take advantage of the latest Clippy lints and codegen improvements.
  In my experience, when not relying on specific nightly features or
  compiler internals, Rust does a pretty good job at making it possible
  to rely on a rolling-release compiler for CI, as breakage is extremely
  rare and thus offset by the improved features.
- The MSRV check was moved to a separate job with less steps, so that it
  takes less of a toll on total workflow run minutes.
AlexTMjugador added a commit that referenced this issue Jul 25, 2023
… and more

As commented in issues #444 and #518, there is some user interest for
distributing binaries for each unstable commit, and target ARM64
platforms. Personally, I think both suggestions are useful for the
project, as uploading binary artifacts for each commit might help
interested users to catch regressions and give feedback earlier, and
powerful ARM64 platforms are becoming increasingly popular due to some
cloud services (e.g., Amazon EC2, Azure VMs, Oracle Cloud) offering
cheaper plans for this hardware, in addition to the well-known push for
ARM by Apple with their custom M1 chips.

These changes make the CI target ARM64 as a first-class citizen. Because
the public GitHub actions runners can only be hosted on x64 for now, I
resorted to cross-compilation, [Debian's
multiarch](https://elinux.org/images/d/d8/Multiarch_and_Why_You_Should_Care-_Running%2C_Installing_and_Crossbuilding_With_Multiple_Architectures.pdf),
and QEMU to build, get ARM64 C library dependencies, and run tests,
respectively.

When the CI workflow finishes, a release CLI binary artifact is now
uploaded, which can be downloaded from the workflow run page on the
GitHub web interface.

In addition, these changes also introduce some cleanup and miscellaneous
improvements and changes to the CI workflow:

- Tests are run using [`nextest`](https://nexte.st/) instead of `cargo
  test`, which substantially speeds up their execution. (On my
  development workstation, `cargo test --release` takes around 10.67 s,
  while `cargo nextest run --release` takes around 6.02 s.)
- The dependencies on unmaintained `actions-rs` actions were dropped in
  favor of running Cargo commands directly, or using
  `giraffate/clippy-action` for pretty inline annotations for Clippy.
  This gets rid of the deprecation warnings for each workflow run.
- Most CI steps are run with a nightly Rust toolchain now, which allows
  to take advantage of the latest Clippy lints and codegen improvements.
  In my experience, when not relying on specific nightly features or
  compiler internals, Rust does a pretty good job at making it possible
  to rely on a rolling-release compiler for CI, as breakage is extremely
  rare and thus offset by the improved features.
- The MSRV check was moved to a separate job with less steps, so that it
  takes less of a toll on total workflow run minutes.
shssoichiro pushed a commit that referenced this issue Jul 31, 2023
… and more

As commented in issues #444 and #518, there is some user interest for
distributing binaries for each unstable commit, and target ARM64
platforms. Personally, I think both suggestions are useful for the
project, as uploading binary artifacts for each commit might help
interested users to catch regressions and give feedback earlier, and
powerful ARM64 platforms are becoming increasingly popular due to some
cloud services (e.g., Amazon EC2, Azure VMs, Oracle Cloud) offering
cheaper plans for this hardware, in addition to the well-known push for
ARM by Apple with their custom M1 chips.

These changes make the CI target ARM64 as a first-class citizen. Because
the public GitHub actions runners can only be hosted on x64 for now, I
resorted to cross-compilation, [Debian's
multiarch](https://elinux.org/images/d/d8/Multiarch_and_Why_You_Should_Care-_Running%2C_Installing_and_Crossbuilding_With_Multiple_Architectures.pdf),
and QEMU to build, get ARM64 C library dependencies, and run tests,
respectively.

When the CI workflow finishes, a release CLI binary artifact is now
uploaded, which can be downloaded from the workflow run page on the
GitHub web interface.

In addition, these changes also introduce some cleanup and miscellaneous
improvements and changes to the CI workflow:

- Tests are run using [`nextest`](https://nexte.st/) instead of `cargo
  test`, which substantially speeds up their execution. (On my
  development workstation, `cargo test --release` takes around 10.67 s,
  while `cargo nextest run --release` takes around 6.02 s.)
- The dependencies on unmaintained `actions-rs` actions were dropped in
  favor of running Cargo commands directly, or using
  `giraffate/clippy-action` for pretty inline annotations for Clippy.
  This gets rid of the deprecation warnings for each workflow run.
- Most CI steps are run with a nightly Rust toolchain now, which allows
  to take advantage of the latest Clippy lints and codegen improvements.
  In my experience, when not relying on specific nightly features or
  compiler internals, Rust does a pretty good job at making it possible
  to rely on a rolling-release compiler for CI, as breakage is extremely
  rare and thus offset by the improved features.
- The MSRV check was moved to a separate job with less steps, so that it
  takes less of a toll on total workflow run minutes.
shssoichiro added a commit that referenced this issue Sep 2, 2023
… and more (#534)

As commented in issues #444
and #518, there is some user
interest for distributing binaries for each unstable commit, and target
ARM64 platforms. Personally, I think both suggestions are useful for the
project, as uploading binary artifacts for each commit might help
interested users to catch regressions and give feedback earlier, and
powerful ARM64 platforms are becoming increasingly popular due to some
cloud services (e.g., Amazon EC2, Azure VMs, Oracle Cloud) offering
cheaper plans for this hardware, in addition to the well-known push for
ARM by Apple with their custom M1 chips.

These changes make the CI target ARM64 as a first-class citizen. Because
the public GitHub actions runners can only be hosted on x64 for now, I
resorted to cross-compilation, [Debian's
multiarch](https://elinux.org/images/d/d8/Multiarch_and_Why_You_Should_Care-_Running%2C_Installing_and_Crossbuilding_With_Multiple_Architectures.pdf),
and QEMU to build, get ARM64 C library dependencies, and run tests,
respectively.

When the CI workflow finishes, a release CLI binary artifact is now
uploaded, which can be downloaded from the workflow run page on the
GitHub web interface.

In addition, these changes also introduce some cleanup and miscellaneous
improvements and changes to the CI workflow:

- Tests are run using [`nextest`](https://nexte.st/) instead of `cargo
test`, which substantially speeds up their execution. (On my development
workstation, `cargo test --release` takes around 10.67 s, while `cargo
nextest run --release` takes around 6.02 s.)
- The dependencies on unmaintained `actions-rs` actions were dropped in
favor of running Cargo commands directly, or using
`giraffate/clippy-action` for pretty inline annotations for Clippy. This
gets rid of the deprecation warnings for each workflow run.
- Most CI steps are run with a nightly Rust toolchain now, which allows
to take advantage of the latest Clippy lints and codegen improvements.
In my experience, when not relying on specific nightly features or
compiler internals, Rust does a pretty good job at making it possible to
rely on a rolling-release compiler for CI, as breakage is extremely rare
and thus offset by the improved features.
- The MSRV check was moved to a separate job with less steps, so that it
takes less of a toll on total workflow run minutes.

## Pending tasks

- [x] Generate universal macOS binaries with `lipo` (i.e., containing
both `aarch64` and `x64` code)
- [x] Tirelessly fix the stupid errors that tend to happen when
deploying a new CI workflow for the first time
- [x] Think what to do with the `deploy.yml` workflow. Should it fetch
artifacts from the CI job instead of building them again?
- [x] Maybe bring back 32-bit Windows binaries. Are they actually useful
for somebody, or just a way to remember the good old days?

---------

Co-authored-by: Josh Holmer <jholmer.in@gmail.com>
@ace-dent
Copy link

ace-dent commented Oct 8, 2023

@AlexTMjugador - fixed now?

@AlexTMjugador
Copy link
Collaborator

Yeah, it's now fixed, thanks for the remainder!

Pr0methean pushed a commit to Pr0methean/oxipng that referenced this issue Dec 1, 2023
… and more (shssoichiro#534)

As commented in issues shssoichiro#444
and shssoichiro#518, there is some user
interest for distributing binaries for each unstable commit, and target
ARM64 platforms. Personally, I think both suggestions are useful for the
project, as uploading binary artifacts for each commit might help
interested users to catch regressions and give feedback earlier, and
powerful ARM64 platforms are becoming increasingly popular due to some
cloud services (e.g., Amazon EC2, Azure VMs, Oracle Cloud) offering
cheaper plans for this hardware, in addition to the well-known push for
ARM by Apple with their custom M1 chips.

These changes make the CI target ARM64 as a first-class citizen. Because
the public GitHub actions runners can only be hosted on x64 for now, I
resorted to cross-compilation, [Debian's
multiarch](https://elinux.org/images/d/d8/Multiarch_and_Why_You_Should_Care-_Running%2C_Installing_and_Crossbuilding_With_Multiple_Architectures.pdf),
and QEMU to build, get ARM64 C library dependencies, and run tests,
respectively.

When the CI workflow finishes, a release CLI binary artifact is now
uploaded, which can be downloaded from the workflow run page on the
GitHub web interface.

In addition, these changes also introduce some cleanup and miscellaneous
improvements and changes to the CI workflow:

- Tests are run using [`nextest`](https://nexte.st/) instead of `cargo
test`, which substantially speeds up their execution. (On my development
workstation, `cargo test --release` takes around 10.67 s, while `cargo
nextest run --release` takes around 6.02 s.)
- The dependencies on unmaintained `actions-rs` actions were dropped in
favor of running Cargo commands directly, or using
`giraffate/clippy-action` for pretty inline annotations for Clippy. This
gets rid of the deprecation warnings for each workflow run.
- Most CI steps are run with a nightly Rust toolchain now, which allows
to take advantage of the latest Clippy lints and codegen improvements.
In my experience, when not relying on specific nightly features or
compiler internals, Rust does a pretty good job at making it possible to
rely on a rolling-release compiler for CI, as breakage is extremely rare
and thus offset by the improved features.
- The MSRV check was moved to a separate job with less steps, so that it
takes less of a toll on total workflow run minutes.

- [x] Generate universal macOS binaries with `lipo` (i.e., containing
both `aarch64` and `x64` code)
- [x] Tirelessly fix the stupid errors that tend to happen when
deploying a new CI workflow for the first time
- [x] Think what to do with the `deploy.yml` workflow. Should it fetch
artifacts from the CI job instead of building them again?
- [x] Maybe bring back 32-bit Windows binaries. Are they actually useful
for somebody, or just a way to remember the good old days?

---------

Co-authored-by: Josh Holmer <jholmer.in@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

8 participants