Unison is a simple, flexible, and potentially optimal software tool that performs register allocation and instruction scheduling in integration using combinatorial optimization.
Unison has the following dependencies: Stack, Qt (version 5.x, optional see #33), Graphviz library (also optional), and Gecode (version 6.0.0). To get the first three dependencies in Debian-based distributions, just run:
apt-get install haskell-stack qtbase5-dev libgraphviz-dev
Upgrade Slack after installing it:
stack upgrade
The source of Gecode can be fetched with:
wget https://github.com/Gecode/gecode/archive/release-6.0.0.tar.gz
Just go to the src
directory and run:
make build
Unison contains a test suite with a few functions where different targets and optimization goals are exercised. To execute the tests just run:
make test
The building process generates three binaries. The installation process consists
in copying the binaries into the appropriate system directory. To install the
binaries under the default directory usr/local
just run:
make install
The installation directory is specified by the Makefile variable PREFIX
. To
install the binaries under an alternative directory $DIR
just run:
make install PREFIX=$DIR
Unison can be run as a standalone tool but is only really useful as a complement
to a full-fledged compiler such as LLVM. Our LLVM
fork includes a Unison driver built on top
of LLVM's llc
code generator. To try it out, just clone the LLVM fork and
follow the instructions in the README.md
file from any of the branches with a
-unison
suffix.
Check out Unison's work-in-progress
manual. The manual's source can
be found in the doc
directory.
Source-level documentation is also available for the core Haskell modules of
Unison (MachineIR.Base
, Unison.Base
, and Unison.Target.API
). To generate
this documentation in HTML format and open it with a web browser, just run:
make doc
Roberto Castañeda Lozano [rcas@acm.org]
Unison is licensed under the BSD3 license, see the LICENSE.md file for details.
Check the Unison website.