v0.15.2
Elevate Acton's build capabilities by completing the adoption of the Zig build
system. Everything, including external library dependencies, builtins, RTS,
stdlib and backend, is now built using build.zig files. A hierarchy of zig
modules are formed, which allow building the entirety of the Acton system with a
single zig build, which is what actonc calls internally. This enables complete
control over all aspects of the low level compilation.
The most striking feature unlocked is likely cross-compilation:
user@machine$ actonc --quiet helloworld.act
user@machine$ file helloworld
helloworld: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.0.0, with debug_info, not stripped
user@machine$ actonc --quiet helloworld.act --target x86_64-macos-none
user@machine$ file helloworld
helloworld: Mach-O 64-bit x86_64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE>
Libraries for the local platform are still prebuilt and included in the Acton
distribution, hich are used when using the default target, i.e. targetting the
local machine. For any customization to the target, everything will be built
from source.
Fixed
- revamped low level build, now potentially rebuilding entire Acton system from
source code- allows cross-compilation and similar advanced features
- use
--target
for cross-compilation, e.g.--target aarch64-macos-none
to
target an Apple M1 computer - for Acton projects, there is now a
build-cache
directory that caches all
built output and speeds things up tremendously
json
module now correctly encodes and decodes floats [#1345] [#1349]- zig build of all external library dependencies
- gives us much better control over how libraries are compiled
- much much faster! autoconfig is really slow!
- e.g. building protobuf-c takes a few seconds on a 2015 MBP while with
autoconf, it spends > 1 minute trying to figure out capabilities of the
C++ compiler, despite the C++ parts of libprotobuf-c not being enabled! - the debian test job now often build Acton in less than 3 minutes, macos-13
often run in ~4 minutes - a real improvement!
- e.g. building protobuf-c takes a few seconds on a 2015 MBP while with
- libargp [#1336]
- libbsdnt [#1337]
- libgc [#1344]
- libnetstring [#1325]
- libpcre2 [#1331]
- libprotobuf-c [#1341]
- libutf8proc [#1332]
- libuuid [#1340]
- libuv [#1334]
- libxml2 [#1333]
- libyyjson [#1323]
- remove libbsd & libmd as dependency [#1329]
- only use was of arc4random in numpy, which is now rand using()
- backend is now built using zig [#1346]
- use curl instead of git clone to fetch dependencies [#1343]
- much faster and reduced disk usage
Testing / CI
- caching has been vastly improved in CI
- based on the new zig build system, we utilize zigs excellent caching
capability by using a single zig cache for the entire build of Acton. In CI,
we cache the zig-cache directory, so we don't actually have to recompile
files at all. Some CI runs now take less than 2 minutes to build Acton! - we should be able to trust Zigs caching to do the right thing, if files are
modified it will notice!
- based on the new zig build system, we utilize zigs excellent caching
- testing of the Homebrew Formula has been removed [#1338]
- since some time, this test job has been intermittently failing, or rather
only intermittently passing as most of the time it fails - to avoid lots of errors in CI, the job has been removed
- the failures are likely coming from some change in brew behavior
- we use a fairly hacked up and not supported workflow
- several attempts to fix it have been unsuccessful and we're unable to spend
more time on it right not
- since some time, this test job has been intermittently failing, or rather
- removed test of compiling Acton on Ubuntu 20.04 due to problems with stack
- note how executables built by actonc are still compatible with Ubuntu 20.04