pencilc is my toy compiler project to learn more about compilers and practice rust.
The pencil language itself is a subset of rust designed for ease of use (and of implementation hehe).
Pencil is a highly derivative toy language designed to be a subset of Rust.
Planned features
- Compiling files
- Control flow
- Strings
- Lists
- Custom structs
- Using external functions from
libc
Simply point pencilc at your source file[s].
pencilc my_file.pencilRun the help command to see all options
pencilc --helpTo build pencilc you will require the following dependencies
- A rust toolchain
- LLVM v16 (note: can install using homebrew:
brew install llvm) - Just (optional)
First clone the repo
git clone https://github.com/giraugh/pencilc
To build and use pencilc you will need to provide the path to your llvm installation. pencilc expects to see this in
the form of an environment variable that points to your llvm path prefix (the path that /bin) is in.
(if you installed llvm using homebrew your prefix will be /opt/homebrew/opt/llvm)
The easiest way to do this is to create a .env file with your prefix in it. Then, when you run the build scripts with just it will
automatically load the environment.
LLVM_SYS_160_PREFIX=/your/path/to/llvmOnce you have your environment setup, you can use pencilc to compile a source file with just run <source_file>.
You can also run just fixture to compile the provided sample.pcl and link it with fixture.c to print to stdout. Ater running just fixture
you can run the executable with ./fixture.
If you'd prefer to not use just you can provide the environment as an argument when using cargo.
LLVM_SYS_160_PREFIX=/your/path/to/llvm cargo run -- my_file.pcl
To build pencilc and have it available without using cargo or just you can install it with cargo install.
Any and all contributions are welcome!
Licensed under MIT (Please see the LICENSE file in the repo for more details)