Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Vexu/arocc
A C compiler written in Zig.
https://github.com/Vexu/arocc
c compiler zig
Last synced: about 1 month ago
JSON representation
A C compiler written in Zig.
- Host: GitHub
- URL: https://github.com/Vexu/arocc
- Owner: Vexu
- License: mit
- Created: 2021-02-25T10:26:10.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2024-04-13T08:19:15.000Z (8 months ago)
- Last Synced: 2024-04-13T22:01:48.358Z (8 months ago)
- Topics: c, compiler, zig
- Language: Zig
- Homepage: http://aro.vexu.eu/
- Size: 3.76 MB
- Stars: 751
- Watchers: 12
- Forks: 47
- Open Issues: 30
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-zig - Aro
- awesome-zig - aroccποΈA C compiler written in Zig
README
# Aro
A C compiler with the goal of providing fast compilation and low memory usage with good diagnostics.
Aro is included as an alternative C frontend in the [Zig compiler](https://github.com/ziglang/zig)
for `translate-c` and eventually compiling C files by translating them to Zig first.
Aro is developed in https://github.com/Vexu/arocc and the Zig dependency is
updated from there when needed.Currently most of standard C is supported up to C23 and as are many of the common
extensions from GNU, MSVC, and ClangBasic code generation is supported for x86-64 linux and can produce a valid hello world:
```sh-session
$ cat hello.c
extern int printf(const char *restrict fmt, ...);
int main(void) {
printf("Hello, world!\n");
return 0;
}
$ zig build && ./zig-out/bin/arocc hello.c -o hello
$ ./hello
Hello, world!
```
---
# Using aro as a module
The following assumes that your package has a `build.zig.zon` file.
```sh-session
zig fetch --save git+https://github.com/Vexu/arocc.git
```Add the following to your `build.zig`:
```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
```zig
const aro = @import("aro");
```
in your Zig code.