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

ARM builds (CI) (GitHub Actions should work for this in 2025) #12

Open
PMeira opened this issue Dec 1, 2019 · 8 comments
Open

ARM builds (CI) (GitHub Actions should work for this in 2025) #12

PMeira opened this issue Dec 1, 2019 · 8 comments
Labels
enhancement New feature or request

Comments

@PMeira
Copy link
Member

PMeira commented Dec 1, 2019

Investigate and potentially implement automated builds of ARM binaries.

@PMeira PMeira added the enhancement New feature or request label Dec 1, 2019
@PMeira
Copy link
Member Author

PMeira commented Aug 7, 2020

@PMeira
Copy link
Member Author

PMeira commented Aug 11, 2020

Tested in a machine with 32-bit ARM. The only changes required are in the CMakeLists.txt file. No code changes seem required so far.

@PMeira
Copy link
Member Author

PMeira commented Apr 10, 2021

I expected Travis-CI would be disabled by now, yet it still works. Weird. Maybe our usage is low enough.

  • Looks like GitHub actions don't support ARM yet. There are actions that build using qemu, which is wasteful.
  • Azure Pipelines supports it though (maybe it's only Linux still).
  • CircleCI also supports ARM64 (Linux).
  • Not sure about Apple M1 yet, or Windows for ARM.

@kdheepak
Copy link
Member

I thought I’d built for ARM on GitHub actions before? I’ll check, maybe I was cross compiling.

We could use BinaryBuilder.jl for building the KLUSolve. I can help set that up if you’d like.

@PMeira
Copy link
Member Author

PMeira commented Apr 10, 2021

I thought I’d built for ARM on GitHub actions before? I’ll check, maybe I was cross compiling.

@kdheepak That could be it (cc). We could cross-compile here, but we still need some minimal testing for the other projects.

Besides cc, I've seen a lot of mentions to self-hosted builders, the qemu-based actions.
Searching the docs and recent posts, people mention mainly self-hosted builders -- and the docs use of ARM for "Azure Resource Manager" is unfortunate.

We could use BinaryBuilder.jl for building the KLUSolve. I can help set that up if you’d like.

Oh, that looks nice. Let me adjust the build scripts for ARM64 (maybe armv7 too?) and test a bit more first, but the examples for CMake builds seem simple enough.

Someday (very low priority) I'd also like to add either Conan or vcpkg support for DSS C-API and KLUSolve. I think those use some cross-compilation too.

By the way, for DSS C-API, Free Pascal can (or used to, for decades) cross-compile too.

@PMeira
Copy link
Member Author

PMeira commented Apr 11, 2021

This could solve the 32-bit ARM issue: https://thegeeklab.de/posts/run-arm32-docker-daemon-on-arm64-servers/

I'm getting an SSD to test things better locally on a Raspberry Pi4 (for this and other projects), it should be here by Wednesday.

@PMeira
Copy link
Member Author

PMeira commented Apr 17, 2021

We could use BinaryBuilder.jl for building the KLUSolve. I can help set that up if you’d like.

@kdheepak Looks like any solution that can use CMake would work fine for KLUSolve. Our main issue is with the Pascal side of things, where the tools are scarce. For building DSS C-API, I add FPC to the base manylinux images from PyPA. If there's indeed a CI service with native compilation, we can use that. Otherwise, we could base the aarch64 binaries on the dockcross image I tested.

I pushed the changes to the master and legacy branches (legacy is closer to the original KLUSolve). For dss-extensions/dss_capi#69, I tested both native and cross-compilation for AARCH64: GCC 10 on openSUSE 15.2, GCC 6.3 using the dockcross image (Debian 9, 2017). The cross-compiled binary was slightly slower (~1%), probably because GCC 6.3 is old. This was mostly a test, it's better to use new compilers anyway since C++ features are more mature in the future (from the docs, it seems BinaryBuilder supports this).

This could solve the 32-bit ARM issue: https://thegeeklab.de/posts/run-arm32-docker-daemon-on-arm64-servers/

I'll try this later (just tested on my phone for the time being). One issue that I noticed is that some ARM32 images are very old. Probably not worth the trouble to distribute pre-built packages, but it would be good to test it from time to time, and keep the build scripts for anyone who needs those.

@PMeira
Copy link
Member Author

PMeira commented Oct 12, 2021

For the time being, binaries added at https://github.com/dss-extensions/klusolve/releases/tag/1.0.0a1 so we can test everything. So far I haven't found any issue on the C/C++ side of things, most big and little issues are at the Pascal side.

@PMeira PMeira changed the title ARM builds ARM builds (CI) Jul 11, 2022
@PMeira PMeira changed the title ARM builds (CI) ARM builds (CI) (GitHub Actions should work for this on 2025) Dec 5, 2024
@PMeira PMeira changed the title ARM builds (CI) (GitHub Actions should work for this on 2025) ARM builds (CI) (GitHub Actions should work for this in 2025) Dec 6, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants