A C compiler with the goal of providing fast compilation and low memory usage with good diagnostics.
The project intends to support standard C and all common extensions:
Version | status |
---|---|
C23 | Complete excluding Add IEEE 754 interchange and extended types |
C17 | Complete excluding warnings Ensure C1/ compatibility |
C11 | Complete excluding warnings Ensure C11 compatibility |
C99 | Complete excluding warnings Ensure C99 compatibility |
C95 | Complete |
C89 | Complete |
GNU extensions | Ensure GNU C extension compatibility |
Clang extensions | Ensure Clang C extension compatibility |
Aro will be used as the C frontend for C to Zig translation in the Zig toolchain.
Earlier there was a proof of concept backend capable of producing a valid hello world binary but it was removed to make way for a new more capable backend which is still under construction. The new backend will reuse parts of the self-hosted Zig compiler.
The following assumes that your package has a build.zig.zon
file.
zig fetch --save git+https://github.com/Vexu/arocc.git
Add the following to your build.zig
:
const aro = b.dependency("aro", .{
.target = target,
.optimize = optimize,
});
exe.root_module.addImport("aro", aro.module("aro"));
// Optional; this will make aro's builtin includes (the `include` directory of this repo) available to `Toolchain`
b.installDirectory(.{
.source_dir = aro.path("include"),
.install_dir = .prefix,
.install_subdir = "include",
});
Now you can do
const aro = @import("aro");
in your Zig code.