blob: 012f4a1d70eeaa9a857d13676877a978fb4772b8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# cljcc
A toy C Compiler implementation in Clojure.
Follows the book [Writing a C Compiler by Nora Sandler](https://nostarch.com/writing-c-compiler).
## Prerequisites
* [Clojure](https://clojure.org)
* [GraalVM](https://www.graalvm.org) for building native binary
* [babashka](https://github.com/babashka/babashka#installation)
Only Linux and Mac OS is supported. For Windows, run through WSL.
## Tasks
To see all available tasks in the project, run `bb tasks`:
``` sh
bb tasks
The following tasks are available:
clean Removes target folder.
run-main Run main
build-uberjar Builds uberjar
run-uberjar Run uberjar
build-native Builds native image
```
## Build
To build native image, run:
``` sh
bb build-native
```
This produces a binary `cljcc` at `/target/cljcc`. Pass the path to the C file.
``` sh
./target/cljcc/cljcc "path/to/file.c"
```
## Run
``` sh
bb run-main "path/to/file.c"
```
## References
Some talks / projects which helped in implementation.
* [What's So Hard About Writing A Compiler, Anyway? Oh - Ramsey Nasser](https://www.youtube.com/watch?v=_7sncBhluXI)
|