GitHub - kaepr/cljcc: Toy C compiler implemented in Clojure (original) (raw)
cljcc
A toy C Compiler implementation in Clojure.
Browser version: cljcc
Follows the book Writing a C Compiler by Nora Sandler.
Post about my experience implementing the book writing-a-c-compiler-in-clojure.
Post on how to compile to WASM compiling-clojure-to-webassembly.
Prerequisites
Only Linux and Mac OS is supported. For Windows, run through WSL.
Tasks
To see all available tasks in the project, run bb tasks
:
bb tasks The following tasks are available:
clean Removes target folder. nrepl Starts a nrepl session. storm Starts a nrepl session with storm debugger. lib:run:main Run's main only for cljcc library. lib:build:jar Builds uberjar only for cljcc lib. lib:build:wasm Builds native WASM image. cli:run:main Run's main CLI function. cli:build:jar Builds uberjar for CLI. cli:run:jar Runs CLI jar. cli:build:wasm Builds native image for WASM. cli:build:native Builds native image for CLI.
Build
To build native image, run:
This produces a binary cljcc-cli
at /target/cli
. Pass the path to the C file.
./target/cli/cljcc-cli "path/to/file.c"
Run Jar
References
Some talks / projects which helped in implementation.