• Stars
    star
    502
  • Rank 84,905 (Top 2 %)
  • Language
    C
  • License
    BSD 2-Clause "Sim...
  • Created about 5 years ago
  • Updated over 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A minimalist C compiler with x86_64 code generation

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:

$ make

MazuCC comes with unit tests. To run the tests, give "check" as an argument:

$ make check

MazuCC is known to work on both GNU/Linux and macOS.

Use MazuCC to compile C source:

$ ./mzcc  sample/nqueen.c

Alternatively, MazuCC accepts the stream from standard input. The equivalent form for the above command is:

$ 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:

$ ./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:

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.

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.

More Repositories

1

amacc

Small C Compiler generating ELF executable Arm architecture, supporting JIT execution
C
997
star
2

mini-arm-os

Build a minimal multi-tasking OS kernel for ARM from scratch
C
929
star
3

facebooc

Yet another Facebook clone written in C
C
553
star
4

talks

schedule and materials about my presentations
338
star
5

nstack

Userspace TCP/IP stack for Linux
C
300
star
6

unix-v1

Restoration of 1st Edition UNIX kernel sources from Bell Laboratories
C
193
star
7

kernel-in-kernel

Develop your own OS kernel by reusing Linux infrastructure
C
171
star
8

min-dl

minimal dynamic linker implementation for ELF, supporting x86_64 and Arm/Aarch64
C
162
star
9

tetris

A text-mode tetris game
C
144
star
10

xv6-x86_64

re-implementation of UNIX v6 in ANSI C for x86_64 SMP
C
143
star
11

stm32f429-linux-builder

create a uClinux distribution for STM32f429 Discovery board
Makefile
133
star
12

full-stack-hello

minimal instruction set and assembler/compiler for "Hello World" execution
C
115
star
13

mazu-editor

a minimalist text editor with syntax highlight, copy/paste, and search
C
108
star
14

codezero

Codezero Microkernel
C
102
star
15

cregex

A small implementation of regular expression matching engine in C
C
80
star
16

tlsf-bsd

Two Level Segregated Fit (TLSF) memory allocator implementation, BSD License
C
74
star
17

simple-dvm

A simplified educational Dalvik virtual machine implementation
C
58
star
18

armv8-hello

Hello World for bare metal ARMv8 using QEMU
Makefile
51
star
19

lsd_slam

LSD-SLAM
C++
48
star
20

tinygl

TinyGL: a Small, Free and Fast Subset of OpenGL
C
44
star
21

ogc

A minimal mark-and-sweep garbage collector
C
43
star
22

x-compressor

A minimalist lossless data compressor
C
42
star
23

jit-construct

JIT compiler from scratch, derived from Nick Desaulniers' great work
Lua
37
star
24

svgirl

SVG Instant Rendering Library with focus on embedded systems
C
36
star
25

rv32jit

JIT-accelerated RISC-V instruction set simulator
C++
27
star
26

stm32f429-r3d

small software 3D rendering program on STM32F429-Discovery
C
26
star
27

ttt

An implementation of tic-tac-toe in C, featuring an AI powered by the negamax algorithm
C
25
star
28

kvm-user-x86

A simple userspace program to interact with Linux KVM
C
23
star
29

uThreads

A concurrent library based on cooperative scheduling of user-level threads(fibers) implemented in C++
C++
22
star
30

tvision

GCC/Linux port of Turbo Vision
C++
21
star
31

hungry-birds

classical example of concurrent producer/consumer problem
C
20
star
32

nalloc

structure aware memory allocator
C
19
star
33

stm32f429-lcd-demo

Simple STM32F429 Discovery LCD demo program using emWin library
C
18
star
34

jamvm

JamVM 2 + OpenJDK
C
18
star
35

littlefs-fuse

A FUSE wrapper that puts the littlefs in user-space
C
17
star
36

linsched

Restoration of The Linux Scheduler Simulator (LinSched)
C
16
star
37

stm32f429-demos

Collection of demo program for STM32F429 Discovery
Makefile
15
star
38

auto-tetris

Play Tetris game automatically!
C
15
star
39

skin-deep

Generate faces with smoother skin
C
14
star
40

matrix_oo

Object-oriented matrix implementation in C99
C
14
star
41

tic-tac-toe

An implementation of classical tic-tac-toe game for terminal I/O
C
12
star
42

dummy-driver

dummy Linux kernel module for education purpose
C
11
star
43

Taunix

Realtime operating system kernel for TI TMS320F24x DSP
C
11
star
44

MathEX

An embedded mathematical expression evaluator in C99
C
10
star
45

fizzbuzz

Implement Fizzbuzz without loop-internal conditionals, or arithmetic operators.
C
10
star
46

cjit

A tiny JIT compiler based on MIR
C++
9
star
47

anrmalloc

A new embedded-friendly memory allocator
C
9
star
48

arith_register

Use ELF linker set to construct lists of arithmetic implementations automatically
C
8
star
49

membroker

Memory Broker is a library that helps balance memory load between processes in user space using IPC
C
6
star
50

scalable-font-editor

A scalable font editor, which produces the fonts for embedded environments
C
5
star
51

bubble-sort-arm

Bubble sort in ARM assembly (incomplete)
Assembly
4
star
52

doxygen-oop-in-c

C
4
star
53

iota-whitepaper

IOTA whitepaper
TeX
4
star
54

git-hook-tests

Tests for Git Hooks
Shell
1
star
55

micronaut-from-scratch

Ahead-of-Time compilation with Micronaut and GraalVM
Java
1
star
56

ci-test-public

(TMP) A repository for testing CI pipeline
1
star