- Notifications
You must be signed in to change notification settings - Fork0
Apron Numerical Abstract Domain Library
License
aibolem/apron
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Apron is a library to represent properties of numeric variables, such as variable bounds or linear relations between variables, and to manipulate these properties through semantic operations, such as variable assignments, tests, conjunctions, entailment.
Apron is intended to be used in static program analyzers, in order to infer invariants of numeric variables, i.e., properties that hold for all executions of a program. It is based on the theory of Abstract Interpretation.
The API documentation is available on theGitHub page for Apron.
The Apron library includes several numeric abstract domains, corresponding to different classes of numeric properties with their own internal representation and algorithms, achieving various trade-offs between precision, expressiveness, and efficiency.
Apron includes the following numeric domains:
- intervals (boxes)
- polyhedra (newpolka)
- octagons
- zonotopes (taylor1plus)
Additional domains are made available through the optional PPL and PPLite third-party libraries:
- alternate polyhedra implementation (PPL, PPLite)
- grids (PPL)
- reduced products of polyhedra and grids (PPL)
The domains are made available under a common interface, so that changing the abstract domain of interpretation in a static analysis should only take a one-line change.
The core API is in C, but optional API wrappers for additional languages are provided:
- OCaml
- Java
- C++
Compiling the built-in domains with the C interface requires:
- a C compiler (gcc or clang)
- https://gmplib.org/ version 5 or later, with development files
- https://www.mpfr.org/ version 3 or later, with development files
- perl
- sed
Compiling the PPL-based domains requires theParma Polyhedra Library (tested with version 1.2) and gcc (no clang).
Compiling the PPLite-based domains requires thePPLite library,which also depends on Flint.Note that building the PPLite library from sources requires using aC++ compiler (g++ or clang++) that supports the c++17 language standard;however, starting from PPLite version 0.11, the Apron wrapper for PPLitecan be compiled using a C++ compiler supporting the c++11 language standard.
Additional language wrappers require additional components:
- a C++ compiler for the C++ API
- a JDK >= 1.6 for the Java API
- for the OCaml API:
- a recent OCaml compiler (tested with 4.07, but earlier 4.x should also work)
- ocamlfind
- camlidl
- mlgmpidl
If you are using OCaml and theOpam package manager, then you could install the latest version of Apron in Opam with justopam install apron
.Only Opam 2.x is supported.
To compile from this source tree, you can install the dependencies withopam install --deps-only .
and follow the instructions below.
On deb-based Linux distributions (Debian, Ubuntu) asudo apt-get install libgmp-dev libmpfr-dev
should suffice to get the dependencies for the basic C library.
On Opam-based OCaml distributions, aopam install ocamlfind camlidl mlgmpidl
should suffice to get the dependencies for the OCaml API.
Compilation from source could be as simple as:
./configure
make
sudo make install
./configure
automatically generates aMakefile.config
file. It is also possible to write aMakefile.config
by hand by taking some inspiration fromMakefile.config.model
.
In case some components fail to compile, it is possible to disable them through./configure
options:
-no-cxx
to disable the C++ API-no-java
to disable the Java API (there are known problems where the compilation fails to findjni.h
)-no-ocaml
to disable the OCaml API-no-ppl
to disable the PPL domains-no-pplite
to disable the PPLite domains
See./configure -help
for more options.
By default,make install
now only install non-debug versions of the C libraries.Moreover, these are striped of symbols.
Use the-debug
./configure
option to also install debug (non-stripped) C versions, and-no-strip
to avoid stripping the non-debug C versions.The C debug versions have a_debug
suffix (such aslibapron_debug.so
).
When installing withopam
, debug versions are always available.OCaml debug libraries use the.d
suffix (such asapron.d.cmxa
).
Help needed for this section.
TheREADME.mac file is not up to date.
See theWindows README.
You can build the documentation withmake doc
.You will need the following tools:
pdflatex
texi2html
for the C APIocamldoc
for the OCaml APIdoxygen
for the the C++ APIjavadoc
for the Java API
Note that some generated documentation may not be up-to-date.
A generated copy of the documentation is available on-line on theGitHub page for Apron.
About
Apron Numerical Abstract Domain Library
Topics
Resources
License
Stars
Watchers
Forks
Packages0
Languages
- C68.3%
- C++18.2%
- Java8.4%
- Makefile2.7%
- OCaml1.7%
- HTML0.3%
- Other0.4%