-
Andre Maroneze authoredAndre Maroneze authored
Installing Frama-C
- Installing Frama-C
- Testing the Installation
- Installing Additional Frama-C Plugins
Installing Frama-C via opam
opam is the OCaml package manager. Every Frama-C release is made available via an opam package.
First you need to install opam, then you may install Frama-C using opam.
Installing opam
Several Linux distributions already include an opam
package.
macOS has opam through Homebrew.
Windows users can install opam via WSL (Windows Subsystem for Linux).
If your system does not have an opam package >= 2, you can use the provided opam binaries available at:
http://opam.ocaml.org/doc/Install.html
Installing Frama-C from opam repository
The Frama-C package in opam is called frama-c
, which includes both the
command-line frama-c
executable and the graphical interface frama-c-gui
.
frama-c
has some non-OCaml dependencies, such as Gtk and GMP. On most
systems, opam
's depext
mechanism can take care of installing these
external dependencies. As of version
2.1.0, depext
is directly included
in opam
, so that the following command should install everything, at
least if your OS is supported by depext
(and you have administrative
rights):
opam install frama-c
For older opam
versions, you have to install it
separately and call it explicitly with the following commands, before
installing Frama-C as above. Again, installing the external dependencies
requires administrative rights.
# install Frama-C's dependencies with pre-2.1.0 opam
opam install depext
opam depext frama-c
If there are errors due to missing external dependencies, opam may emit a
message indicating which packages to install. If this is not sufficient,
there may be missing dependencies in opam's depext
tool. In this case,
you may create a Gitlab issue
indicating your distribution and error message.
Configuring provers for Frama-C/WP
Frama-C/WP uses the Why3 platform to run external provers for proving ACSL annotations. The Why3 platform and the Alt-Ergo prover are automatically installed via opam when installing Frama-C.
Other recommended, efficient provers are CVC4 and Z3. They can be used as replacement or combined with Alt-Ergo. Actually, you can use any prover supported by Why3 in combination with Frama-C/WP.
Most provers are available on all platforms. After their installation, Why3 must be configured to make them available for Frama-C/WP:
why3 config detect
Reference configuration
See file reference-configuration.md for a set of packages that is known to work with Frama-C+dev.
Installing Custom Versions of Frama-C
If you have a non-standard version of Frama-C available (with proprietary extensions, custom plugins, etc.), you can use opam to install Frama-C's dependencies and compile your own sources directly:
# optional: remove the standard frama-c package if it was installed
opam remove --force frama-c
# install Frama-C's dependencies
opam install depext # only for opam < 2.1.0
opam depext frama-c # only for opam < 2.1.0
opam install --deps-only frama-c
# install custom version of frama-c
opam pin add --kind=path frama-c <dir>
where <dir>
is the root of your unpacked Frama-C archive.
See opam pin
for more details.
If your extensions require other libraries than the ones already used by Frama-C, they must of course be installed as well.
Installing Frama-C on Windows via WSL
Frama-C is developed on Linux, but it can be installed on Windows using the Windows Subsystem for Linux (WSL).
Note: if you have WSL2 (Windows 11), you can run the graphical interface directly, thanks to WSLg. If you are using WSL 1, you need to install an X server for Windows, such as VcXsrv (see section "Running the Frama-C GUI on WSL").
Prerequisites: WSL + a Linux distribution
To enable WSL on Windows, you may follow these instructions (we tested with Ubuntu 20.04 LTS; other distributions/versions should also work, but the instructions below may require some modifications).
https://docs.microsoft.com/en-us/windows/wsl/install
Notes:
- older builds of Windows 10 and systems without access to the Microsoft Store may have no compatible Linux packages.
- in WSL 1, Frama-C/WP cannot use Why3 because of some missing features in WSL support, thus using WSL 2 is highly recommended.
Installing opam and Frama-C on WSL
To install opam, some packages are required. The following commands can be run to update the system and install those packages:
sudo apt update
sudo apt upgrade
sudo apt install make m4 gcc opam gnome-icon-theme
Then opam can be set up using these commands:
opam init --disable-sandboxing --shell-setup
eval $(opam env)
opam install -y depext
You can force a particular Ocaml version during opam init
by using the option
-c <version>
if needed. For instance, you can try installing the OCaml version
mentioned in the reference configuration.
Now, to install Frama-C, run the following commands, which will use apt
to
install the dependencies of the opam packages and then install them:
opam depext --install -y lablgtk3 lablgtk3-sourceview3
opam depext --install -y frama-c
Running the Frama-C GUI on WSL
If you have WSL2: a known issue with Frama-C 24.0 (Chromium), lablgtk3 and
Wayland require prefixing the command running the Frama-C GUI with
GDK_BACKEND=x11
, as in:
GDK_BACKEND=x11 frama-c-gui <options>
If you have WSL 1: WSL 1 does not support graphical user interfaces directly. If you want to run Frama-C's GUI, you need to install an X server, such as VcXsrv or Cygwin/X. We present below how to install VcXsrv.
First, install VcXsrv from:
https://sourceforge.net/projects/vcxsrv/
The default installation settings should work.
Now run VcXsrv from the Windows menu (it is named XLaunch), the firewall must authorize both "Public" and "Private" domains. On the first configuration screen, select "Multiple Windows". On the second:
- keep "Start no client" selected,
- keep "Native opengl" selected,
- select "Disable access control".
Now specific settings must be provided in WSL. you can put the export commands
in your ~/.bashrc
file, so this is done automatically when starting WSL.
WSL 1
The Xserver is ready. From WSL, run:
export LIBGL_ALWAYS_INDIRECT=1
export DISPLAY=:0
frama-c-gui