CompCert Install Instructions
Dependencies
Additional dependencies
Replace with the package manager for your distribution
sudo <pkg-manager> install -y mercurial darcs ocaml bubblewrap
Opam
sh <(curl -sL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)
Post-install
Run
eval `opam config env`
Add this to your .bashrc
or .bash_profile
. $HOME/.opam/opam-init/init.sh > /dev/null 2> /dev/null || true
Switch to a recent OCaml compiler version
opam switch create 4.12.0
opam switch 4.12.0
Install dependencies available through opam
opam install coq menhir
Note: it may happen that a newer version of Coq is not supported yet. You may downgrade to solve the problem:
opam pin add coq 8.13.2 # example of Coq version
For Kalray KVX
On this platform, we also need Gappa installed. You may need to first install some development packages. On Ubuntu:
apt install bison flex libmpfr-dev libboost-dev
This install Gappa and Flocq:
opam pin add coq-flocq 3.4.0 --no-action
opam install gappa coq-gappa coq-flocq
Compilation
You can choose change the installation directory by modifying the
config_simple.sh
file before running the configuration script.
Then, use the configuration script corresponding to your desired platform:
(for Kalray Coolidge it is config_kvx.sh
)
./config_<platform>.sh
If using Kalray's platform, make sure that the kvx tools are on your path Compile (adapt -j# to the number of cores and available RAM)
make -j12
make install
Tests
Documentation
You can generate the documentation locally with:
make documentation
Note that you need to install coq2html before doing so.
Utilization
ccomp
binaries are installed at $(CCOMP_INSTALL_PREFIX)/bin
(variable defined in config_simple.sh
).
Make sure to add that to your path to ease its use
Now you may use it like a regular compiler
ccomp -O3 test.c -S
ccomp -O3 test.c -o test.bin
Changing platform
If you decide to change the platform, for instance from kvx-cos to kvx-mbr, you
should change the compcert.ini
file with the respective tools and then run
make install
Cleaning
To clean only object files while keeping the platform configuration:
make clean
To clean everything (to then reconfigure for another platform):
make distclean