We don't have performance numbers to show yet (and not sure if we will be able to publish them when we will), but I can say I am pleasantly surprised with how much cross-compiling is easier than it was ~10 years ago. Especially with zig cc. :)
We don't have performance numbers to show yet (and not sure if we will be able to publish them when we will), but I can say I am pleasantly surprised with how much cross-compiling is easier than it was ~10 years ago. Especially with zig cc. :)
I tend to treat the desire to cross-compile as a rather strong indicator that the architecture is just not viable for general-purpose computing. Either because it's impossible to get actual hardware at all, or the hardware doesn't have decent specs. In both cases, it's going to be difficult find a business justification for building for this architecture (again for general-purpose computing).
Obviously, architecture bringup is an exception, but we are way past that for aarch64.
But this only applies to a very tiny amount of in-house code which hasn't been tested on aarch64 before.
I'd expect 99.9% of C++ code to just cross-compile and run without issues.
Literally every time in my life I've updated from version A of a compiler to version B of the same exact compiler, I had weeks of change sets required for getting the existing code to build under compiler B.
It's a bootstrapping problem. It takes a lot of infra to run the first build host. We can transition to aarch64 for build hosts if we see the need later.
Having cross-compilation makes things much easier from get-go.
Surely there is some huge win I'm missing here, so if you have figures showing the math you've done, I'm definitely interested.
ARM instances from cloud providers are very appealing to most large-scale enterprise cloud customers, because they represent a significant cost savings at only a moderate upfront investment.
I bought a rk3588 arm widget for $120 ($140 with a nice metal case) with 8GB ram and 8 cores. I installed Ubuntu 22.04 LTS and was able to compile Rust and Go from source. So far I'm impressed. It's pretty fast (about half as fast as my 2015 Xeon) at compiling Rust. It seems generally pretty usable aarch64 platform and bodes well for other aarch64 implementations. I believe the rk3588 requires a custom (not mainline) kernel, but I believe the important bits have been upstreamed and should appear soon ... hopefully.
Neat widget, no fan, cheap, and reasonably fast. Was something like 6-7 times faster than an Rpi4 at compiling rust.
Pretty happy with it, was easy to get ubuntu 22.04 going, but with their image. From what I can tell they use the same not upstreamed kernel on all their images. I've heard progress, in particular with OpenWRT. It does make a decent router, or just a nice mini server. 8GB ram means it can do handle a fair bit. Compiling rust was 6-8 times faster than a Pi4. It's been stable so far, it does require a usb-c power supply, which I had lying around.
It does have a microSD slot.
If in the USA you can get it quicker from amazon, but around $200.
If you have an amd64 desktop or aarch64 server, you can compile to amd64 and aarch64, and powerpc64 with almost the same command. The binary without dependencies can be copied to the server with `scp`. This is the approach we use at ClickHouse[1]. Even more, we always do cross-compilation, even if the host and target architectures are identical. It allows making the build hermetic, not dependent on the environment of the host system.
[1] https://github.com/ClickHouse/ClickHouse/blob/master/PreLoad...