Skip to content

Vexu/arocc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

d768f7d · Mar 14, 2025
Oct 13, 2024
Feb 11, 2025
Aug 28, 2024
Jan 6, 2025
Mar 14, 2025
Feb 12, 2025
Jan 16, 2023
Jun 15, 2024
Feb 21, 2021
Nov 8, 2023
Jan 6, 2025
Dec 30, 2024
Mar 14, 2025

Repository files navigation

Aro

Aro

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.

Codegen

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.

#542

Using aro as a module

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.