Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/keyvank/30cc
30 C Compiler
https://github.com/keyvank/30cc
c compiler educational
Last synced: about 12 hours ago
JSON representation
30 C Compiler
- Host: GitHub
- URL: https://github.com/keyvank/30cc
- Owner: keyvank
- Created: 2024-09-25T21:38:20.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2024-12-08T21:27:43.000Z (18 days ago)
- Last Synced: 2024-12-23T20:45:37.494Z (3 days ago)
- Topics: c, compiler, educational
- Language: C
- Homepage:
- Size: 516 KB
- Stars: 279
- Watchers: 3
- Forks: 10
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 30 C Compiler!
`30cc` (Pronounced as *CCC*, because in the Persian language, the number 30 is pronounced as C) is a toy C compiler written in C, which is strong enough to compile itself 🤝 This was my first attempt in writing a self-hosting software! What is a self-hosting software?
- Imagine `30cc` gets strong enough to be able to compile itself.
- I will first compile `30cc` with `gcc` to get the `30cc` compiler's binary.
- I will then use the `gcc`-generated `30cc` binary file to compile the `30cc` again.
- I now have a `30cc`-compiled version of `30cc`, which I can use for further developing the compiler!
- I can forget about `gcc`, as if it never existed! Beautiful hah? `30cc` is now all alive by itself!`30cc` emits x86-64 assembly as its output. The outputs are totally unoptimized, but that's fine, the project aims to be educational.
## Usage
Bootstrap the compiler by running `make`. This will generate 3 different versions of 30cc compiler:
1. `30cc_gcc` which is the bootstrapped gcc-compiled version of 30cc
2. `30cc_30cc` which is the output of gcc-compiled 30cc compiler, compiling the 30cc compiler
3. `30cc` which is the output of 30cc-compiled 30cc compiler, compiling the 30cc compilerRunning independent source-files through `make`:
```
make run program=./examples/inp.c arguments=something
```## Contribute
### Tests
To run tests use
```
python scripts/test.py update
```Then check the output of the tests.
If you are on mac use `./scripts/test_mac.sh` to run the tests in docker.