<div align="center">
# 🧮 Mathic
*A programming language with builtin symbolic algebra capabilities, powered by LLVM/MLIR*
</div>
# Installation
## 🔧 Dependencies
- **Rust** 1.94.0 or higher
- **LLVM/MLIR** 21.x.x
### LLVM/MLIR Installation
There are many ways of installing LLVM. Choose the one that fits your needs.
#### MacOS and Linux (Homebrew)
```bash
brew install llvm@21
```
After installation, set the environment variables:
```sh
export LIBRARY_PATH=/opt/homebrew/lib
export LLVM_SYS_211_PREFIX=$(brew --prefix llvm@21)
export MLIR_SYS_210_PREFIX=$(brew --prefix llvm@21)
export TABLEGEN_210_PREFIX=$(brew --prefix llvm@21)
```
#### Building from Source
> ⚠️ Note: Building LLVM from source requires at least 6GB of RAM and ~20GB of
disk space. Ensure these requirements are met, as the build process is likely
to fail otherwise.
1. **Clone LLVM Project**
```bash
git clone https://github.com/llvm/llvm-project.git
cd llvm-project
git checkout llvmorg-21.1.7
mkdir build && cd build
```
2. **Configure Build**
```bash
cmake -G Ninja ../llvm \
-DLLVM_ENABLE_PROJECTS="mlir" \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DLLVM_ENABLE_ASSERTIONS=On \
-DLLVM_BUILD_LLVM_DYLIB=On \
-DLLVM_LINK_LLVM_DYLIB=On \
-DMLIR_BUILD_MLIR_C_DYLIB=On \
-DLLVM_TARGETS_TO_BUILD=host \
-DCMAKE_INSTALL_PREFIX=/opt/llvm-21
```
if you have mold installed, you can add this flag which will make linking much faster:
```sh
-DLLVM_USE_LINKER=mold
```
For more info about building from source, check: https://llvm.org/docs/GettingStarted.html
3. **Build and Install**
```bash
ninja install
```
You'll need to export the required environment variables as well:
```sh
export LLVM_SYS_211_PREFIX=<path-to-install-prefix>
export MLIR_SYS_210_PREFIX=<path-to-install-prefix>
export TABLEGEN_210_PREFIX=<path-to-install-prefix>
```
> If you used to command above, the prefix will be `/opt/llvm-21`
## Installing Mathic
You can install mathic using cargo
```shell
cargo install mathic
```
> Note: Ensure the required environment variables are set, otherwise the build will fail.
### Usage
You can run a program using this command:
```bash
euler <path-to-file>.mth
```
## 📖 Current Status
⚠️ This project is in early development. Features are being added incrementally. Due to this, you are welcome to test it and create issues.
For more details, see the [docs](./docs/README.md).
<div align="center">
**Built with ❤️ and 🦀 Rust**
</div>