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.