Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jserv/MazuCC
A minimalist C compiler with x86_64 code generation
https://github.com/jserv/MazuCC
c compiler gcc-complier gnu x86-64
Last synced: about 2 months ago
JSON representation
A minimalist C compiler with x86_64 code generation
- Host: GitHub
- URL: https://github.com/jserv/MazuCC
- Owner: jserv
- License: bsd-2-clause
- Created: 2019-04-21T19:45:22.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2020-10-09T03:11:18.000Z (about 4 years ago)
- Last Synced: 2024-04-08T22:03:56.736Z (9 months ago)
- Topics: c, compiler, gcc-complier, gnu, x86-64
- Language: C
- Size: 53.7 KB
- Stars: 509
- Watchers: 32
- Forks: 65
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- AwesomeCompiler - MazuCC
README
# MazuCC
MazuCC is a minimalist C compiler with x86_64 code generation.
It is intended to support partial C99 language features while keeping the code
as small and simple as possible.## Build
Run make to build:
```shell
$ make
```MazuCC comes with unit tests. To run the tests, give "check" as an argument:
```shell
$ make check
```MazuCC is known to work on both GNU/Linux and macOS.
Use MazuCC to compile C source:
```shell
$ ./mzcc sample/nqueen.c
```Alternatively, MazuCC accepts the stream from standard input. The equivalent
form for the above command is:```shell
$ cat sample/nqueen.c | ./mzcc -
```You will get the generated x86_64 assembly in AT&T syntax. The output can be
assembled and linked into a valid executable:
```shell
$ ./mzcc -o sample/nqueen.s sample/nqueen.c
$ gcc -no-pie -o sample/nqueen sample/nqueen.s
```If MazuCC is compiled and executed on macOS, the above argument `-no-pie`
should be eliminated.Reference output of MazuCC-compiled `sample/nqueen`:
```
Q . . . . . . .
. . . . Q . . .
. . . . . . . Q
. . . . . Q . .
. . Q . . . . .
. . . . . . Q .
. Q . . . . . .
. . . Q . . . .
```Alternatively, you can dump internal abstract syntax tree:
```shell
echo 'struct {int x; char y; struct { int t; } z; } a;' | ./mzcc --dump-ast -
```The expected output in S-expression form:
```
(decl (struct (int)
(char)
((struct (int)))) a)
```## Acknowledge
MazuCC is heavily inspired by [8cc](https://github.com/rui314/8cc).
## License
MazuCC is freely redistributable under the BSD 2 clause license. Use of
this source code is governed by a BSD-style license that can be found in the
LICENSE file.