| <?xml version='1.0' ?> |
| <!-- |
| Copyright (c) 2016 CEA LIST. |
| |
| All rights reserved. This program and the accompanying materials |
| are made available under the terms of the Eclipse Public License v1.0 |
| which accompanies this distribution, and is available at |
| http://www.eclipse.org/legal/epl-v10.html |
| |
| Contributors: |
| Arnault Lapitre (CEA LIST) arnault.lapitre@cea.fr |
| - Initial API and Implementation |
| --> |
| <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"> |
| <book> |
| <title>INSTALL_tmp</title> |
| <chapter id="efm-symbex-build-and-installation-instructions"> |
| <title>EFM-SYMBEX : Build and Installation Instructions</title> |
| <section id="overview"> |
| <title>Overview</title> |
| <para>In order to build EFM-SYMBEX, you'll need : |
| </para> |
| <itemizedlist> |
| <listitem> |
| <para> |
| <ulink url="https://cmake.org/download/">CMake</ulink>, 2.8 or higher |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| <ulink url="http://www.boost.org/users/download/">Boost</ulink>, 1.53 or higher |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| <ulink url="https://gmplib.org/">GMP</ulink>, 2.5.1.3 |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| <ulink url="http://www.antlr2.org">ANTLR2</ulink>, C bindings library, 2.7.7 |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| <ulink url="http://www.antlr3.org">ANTLR3</ulink>, C bindings library, 3.4 |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| <ulink url="http://cvc4.cs.nyu.edu">CVC4</ulink>, 1.3.1 or higher |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| <ulink url="https://github.com/davewathaverford/the-omega-project">Omega</ulink> |
| </para> |
| </listitem> |
| </itemizedlist> |
| <para>EFM-SYMBEX build is driven by CMake and tested with the following generators : </para> |
| <itemizedlist> |
| <listitem> |
| <para>Unix Makefiles (native compilers)</para> |
| </listitem> |
| </itemizedlist> |
| </section> |
| <section id="prerequisites-installation"> |
| <title>Prerequisites installation</title> |
| <section id="binaries-almost-installation-on-linux"> |
| <title>Binaries (almost) installation on Linux</title> |
| <para>Following instructions are given for debian-like distributions. You should adapt them to the package manager used by your distribution. |
| </para> |
| <section id="cmake"> |
| <title>CMake</title> |
| <para> |
| |
| <code>sudo apt-get install cmake</code> |
| |
| |
| |
| <code>sudo apt-get install cmake-gui</code> |
| |
| </para> |
| </section> |
| <section id="boost"> |
| <title>Boost</title> |
| <para> |
| |
| <code>sudo apt-get install boost-1.53</code> |
| |
| </para> |
| </section> |
| <section id="gmp"> |
| <title>GMP</title> |
| <para> |
| |
| <code>sudo apt-get install libgmp-dev</code> |
| |
| </para> |
| </section> |
| <section id="antlr2"> |
| <title>ANTLR2</title> |
| <para> |
| |
| <code>sudo apt-get install libantlr-dev</code> |
| |
| </para> |
| </section> |
| <section id="antlr3"> |
| <title>ANTLR3</title> |
| <para>As no ANTLR 3.4 package seems available, it is necessary to compile a source distribution : |
| Download |
| <ulink url="http://www.antlr3.org/download/C/libantlr3c-3.4.tar.gz">libantlr3c-3.4.tar.gz</ulink> then : |
| |
| |
| |
| <code>tar zxvf libantlr3c-3.4.tar.gz</code> |
| |
| |
| |
| <code>./configure --enable-static=true --enable-shared=false</code>, add |
| <code>--enable-64bit</code> according to your system. |
| |
| |
| |
| <code>make</code> |
| |
| |
| |
| <code>make check</code> |
| |
| |
| |
| <code>sudo make install</code> |
| |
| </para> |
| <para>Headers and library should be automatically installed in /usr/local. Use |
| <code>.\configure --prefix=<yourpath></code> to install in another location. In this case, you'll need to set |
| <code>ANTLR3_ROOT</code> variable to this location for CMake to know about it. |
| |
| </para> |
| </section> |
| <section id="cvc4"> |
| <title>CVC4</title> |
| <para>Add the following lines in |
| <code>/etc/apt/sources.list</code> : |
| |
| |
| |
| <code>deb http://cvc4.cs.nyu.edu/debian/ stable/</code> |
| |
| |
| <code>deb http://cvc4.cs.nyu.edu/debian unstable/</code> |
| |
| |
| |
| <code>deb_src http://cvc4.cs.nyu.edu/debian unstable/</code> |
| |
| Then do : |
| |
| |
| |
| <code>sudo apt-get update</code> |
| |
| |
| |
| <code>sudo apt-get install cvc4 libcvc4-dev</code> |
| |
| </para> |
| </section> |
| <section id="omega"> |
| <title>Omega</title> |
| <para>No package being available for Omega, it is necessary to compile a source distribution. |
| |
| Clone the source repository : |
| |
| |
| |
| <code>git clone https://github.com/davewathaverford/the-omega-project.git</code> |
| |
| Then do : |
| |
| |
| <code>make depends</code> |
| |
| |
| |
| <code>make libomega.a</code> |
| |
| |
| |
| <code>sudo make install</code> |
| </para> |
| <para>Headers and library should be automatically installed in /usr/local. Use .\configure --prefix=/usr/local to install in another location. In this case, you'll need to set |
| <code>OMEGA_ROOT</code> variable to this location for CMake to know about it. |
| </para> |
| </section> |
| </section> |
| <section id="sources-installation-on-linux"> |
| <title>Sources installation on Linux</title> |
| <para> |
| <emphasis role="bold">TO BE DONE</emphasis> |
| </para> |
| </section> |
| <section id="sources-installation-on-windows-mingw-msys2"> |
| <title>Sources installation on Windows/MinGW/MSYS2</title> |
| <para> |
| <emphasis role="bold">WARNING : Currently under test</emphasis> |
| </para> |
| <section id="cmake2"> |
| <title>CMake</title> |
| <para>Use the Windows installer found |
| <ulink url="https://cmake.org/download/">here</ulink> |
| </para> |
| </section> |
| <section id="msys2"> |
| <title>MSYS2</title> |
| <para>Follow the instructions of INSTALL_MSYS.md.</para> |
| </section> |
| <section id="cvc42"> |
| <title>CVC4</title> |
| <para>Download the sources archive |
| <ulink url="http://cvc4.cs.nyu.edu/builds/src/cvc4-1.4.tar.gz">cvc4-1.4.tar.gz</ulink> |
| </para> |
| <para> |
| <emphasis role="bold">TO BE CONTINUED</emphasis> |
| </para> |
| </section> |
| </section> |
| </section> |
| <section id="standard-build"> |
| <title>Standard Build</title> |
| <para>Whatever the platform, launch CMake (or CMake-gui), set the sources directory and the desired build directory. |
| Choose a valid generator, select your compilers (native compilers are recommended), configure and generate. |
| If you have installed prerequisites in non-standard locations, you'll have to set <PREREQUISITE>_ROOT variabl(s)e in the CMake cache editor. |
| </para> |
| <para>Then build the project using the built-in commands of the generator : |
| </para> |
| <itemizedlist> |
| <listitem> |
| <para>With "Unix Makefiles", simply do |
| <code>make</code> in the build directory. |
| </para> |
| </listitem> |
| </itemizedlist> |
| <para>A the end of the process, the symbex executable is built and can be checked using |
| |
| <code>symbex -test</code>. |
| </para> |
| </section> |
| <section id="build-customization-for-developers"> |
| <title>Build Customization (for developers)</title> |
| <para>To customize the build, you'll have to modify CMake Files. All CMake files are CMakeLists.txt or *.cmake. |
| Each project target (main executable and internal libraries) is associated with a CMakeLists.txt in which every thing specific to this target are defined. All things relative to the project as a whole (prerequisites, cmake detection module, ...) are stored stored in the src/cmake directory.</para> |
| <section id="set-compilation-options"> |
| <title>Set compilation options</title> |
| <para>Options which hold for all target and whatever the platform are set in |
| <code>DefineGeneric.cmake</code> |
| Options which hold for all target and are platform-specific are set in |
| <code><Platform>Specific.cmake</code>. |
| Options which hold for one target and whatever the platform are set in the |
| <code>CMakeLists.txt</code> of this target. |
| </para> |
| </section> |
| <section id="modify-link-command-line"> |
| <title>Modify link command line</title> |
| <para>Main target link is defined in |
| <code>LinkMainTarget.cmake</code> |
| </para> |
| </section> |
| <section id="change-prerequisites-look-up-add-a-nex-prerequisite"> |
| <title>Change prerequisites look-up / Add a nex prerequisite</title> |
| <para>Prerequisites are defined and searched for in |
| <code>LookForMandatoryPrerequisites.cmake</code>. Here you add a new prerequisite or can change the way an existing prerequisite is search for. |
| </para> |
| </section> |
| <section id="change-project-structure-without-adding-a-new-target"> |
| <title>Change project structure without adding a new target</title> |
| <para>Simply add a new subdirectory(ies) into existing target(s) source hierarchy.</para> |
| </section> |
| <section id="add-a-new-target"> |
| <title>Add a new target</title> |
| <para>To add a new target <newtarget>, you must : |
| </para> |
| <orderedlist> |
| <listitem> |
| <para>Create the <newtarget> source hierarchy in src/</para> |
| </listitem> |
| <listitem> |
| <para>Add a CMakeLists.txt into <newtarget> (it is easy to adapt a CMakeLists.txt from other targets) </para> |
| </listitem> |
| <listitem> |
| <para>Add a new line |
| <code>add_subdirectory (<newtarget>)</code> in |
| <code>DefineProjectStructure.cmake</code> |
| 3. |
| </para> |
| </listitem> |
| <listitem> |
| <para>Complete |
| <code>LinkMainTarget.cmake</code> by adding <newtarget> to the link line. |
| </para> |
| </listitem> |
| </orderedlist> |
| </section> |
| </section> |
| </chapter> |
| </book> |