futil 0.1.1

Compiler Infrastructure for Hardware Accelerator Generation
<h1>
<p align="center">
<img src="https://capra.cs.cornell.edu/calyx/img/logo-text.svg" width="300">
</p>
<p align="center">
<a href="https://capra.cs.cornell.edu/calyx">A Compiler Infrastructure for Accelerator Generators</a>
</p>
</h1>

Calyx is an intermediate language and infrastructure for building compilers that generate custom hardware accelerators.

See the [Calyx website][site], [language documentation][docs] and the
[documentation for the source code][source-docs]
for more information. Calyx's design is based on [our paper][paper].

## Installation

### Quick
If you want to try out the compiler, install it using `cargo`:
```
cargo install futil
```

This will install the `futil` binary which includes the calyx frontend,
optimization passes, and several backends.

### Recommended

Follow the [getting started][docs] instructions.

## Organization

This repository contains the source code for the following:
1. [`calyx`][] (`calyx/`): The intermediate representation used for hardware
   accelerator generation.
2. [`futil`][] (`src/`): The compiler infrastructure for compiling Calyx programs.
   If `calyx` is like LLVM, then `futil` is Clang.
3. Calyx debugger (`interp/`): An interpreter and debugger for Calyx.
4. `fud`, The Calyx driver: Utility tool that wraps various hardware toolchains.

[site]: https://capra.cs.cornell.edu/calyx
[docs]: https://capra.cs.cornell.edu/docs/calyx/
[source-docs]: https://capra.cs.cornell.edu/docs/calyx/source/calyx
[paper]: https://rachitnigam.com/files/pubs/calyx.pdf