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.
Only Linux and Mac OS is supported. For Windows, run through WSL.
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:native Builds native image for CLI.
To build native image, run:
( This requires having native-image
tool installed locally. Use the appropriate JDK distribution. )
bb cli:build:native
This produces a binary cljcc-cli
at /target/cli
. Pass the path to the C file.
./target/cli/cljcc-cli "path/to/file.c"
bb cli:run:jar
Some talks / projects which helped in implementation.