diff --git a/.github/workflows/build_ubuntu_debug.yml b/.github/workflows/build_ubuntu_debug.yml new file mode 100644 index 000000000..58aac6a42 --- /dev/null +++ b/.github/workflows/build_ubuntu_debug.yml @@ -0,0 +1,47 @@ +name: Build Debug (Ubuntu) +on: [push, pull_request] + +env: + # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) + BUILD_TYPE: Debug + +jobs: + build: + # The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac. + # You can convert this to a matrix build if you need cross-platform coverage. + # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix + runs-on: ubuntu-latest + strategy: + matrix: + compiler: [g++-10, g++-9, g++-8, g++-7, clang-6, clang-7, clang-8, clang-9, clang-10, clang-11, clang-12] + + steps: + - uses: actions/checkout@v4 + + - name: Caching objects + id: cache-objects + uses: actions/cache@v4 + with: + path: ~/.cache/ccache + key: ${{ runner.os }}-${{env.BUILD_TYPE}}-${{ matrix.compiler }}-objects + + - name: Install Dependencies + shell: bash + run: | + sudo apt-get install libeigen3-dev libboost-dev + + - name: Configure + # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. + # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type + run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DEDO=ON -DEDO_USE_LIB=Eigen3 -DENABLE_CMAKE_EXAMPLE=ON -DENABLE_CMAKE_TESTING=ON + + - name: Build + # Build your program with the given configuration + run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} + + - name: Test + working-directory: ${{github.workspace}}/build + # Execute tests defined by the CMake configuration. + # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail + run: ctest -C ${{env.BUILD_TYPE}} + diff --git a/.gitignore b/.gitignore index 285690863..ef1e87e20 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,21 @@ -# ignore html files +# ignore generated files *.html +*.pdf # ignore all textual files *.txt +*.swp +*.swo +.kak_history +*.log +*.csv +*.ods # ignore object and archive files *.[oa] +*.bak +*.tar* +tags # ignore auto-saved files *~ @@ -28,4 +38,7 @@ debug/* build/* website/EO_star.png website/paradiseo_logo.png +Release/* +Debug/* +Build/* diff --git a/AUTHORS b/AUTHORS index 604157f80..47e9ce4b9 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,41 +1,52 @@ Current maintainers =================== -Arnaud Liefooghe -Clive Canape -Johann Dreo -Sébastien Verel -Active developpers -================== -Alexandre Quemy -Benjamin Bouvier -Caner Candan -Pierre Savéant +Johann Dreo + Past contributors ================= + atantar +Alesandro Sidero +Alexandre Quemy +Alix Zheng +Amine Aziz-Alaoui +Arnaud Liefooghe +Benjamin Bouvier +Bahri +Caner Candan +Clive Canape fatene Gustavo Romero Lopez jboisson Jeroen Eggermont Jochen Küpper -Joost +Joost Juan Julian Merelo Guervos Jérémie Humeau +Jxtopher Karima Boufaras -legillon +legillono +Leo Bertheas Louis Da Costa Loïc Jean David Arjanen Maarten Keijzer +Mammar Amara +Manu Marc Schoenauer Marie-Éleonore Mostepha Khouadjia Olivier König +Pierre Savéant Pedro Angel Castillo Valdivieso +Potalas +Ronald Pinho Steve Madere Sébastien Cahon +Sébastien Verel Thomas Legrand +Thibault Lasnier Victor Manuel Rivas Santos wcancino xohm diff --git a/CMakeLists.txt b/CMakeLists.txt index 3bbb8de3e..52c1fa4a5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,34 +1,36 @@ # ParadiseO + ###################################################################################### ### 0) Check the CMake version ###################################################################################### -cmake_minimum_required(VERSION 2.8 FATAL_ERROR) +cmake_minimum_required(VERSION 3.10 FATAL_ERROR) ###################################################################################### ### 1) Define the project ###################################################################################### ## Name -project("ParadisEO") +project("ParadisEO" + VERSION 3.1.3 + DESCRIPTION "Evolutionary optimization framework" + LANGUAGES C CXX) ## Language -enable_language(CXX) +set(CMAKE_CXX_STANDARD 17) -## Test the presence of a compiler -if("${CMAKE_CXX_COMPILER}" STREQUAL "" OR "${CMAKE_C_COMPILER}" STREQUAL "") - message(FATAL_ERROR "No compiler found!") -endif() +## ccache +find_program(CCACHE_PROGRAM ccache) -## Versioning -set(VERSION_MAJOR 2 CACHE STRING "Major version number" ) -set(VERSION_MINOR 1 CACHE STRING "Minor version number" ) -set(VERSION_PATCH 0 CACHE STRING "Patch version number" ) +if (CCACHE_PROGRAM) + message(NOTICE "-- ccache is enabled (found here: ${CCACHE_PROGRAM})") + set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "\"${CCACHE_PROGRAM}\"") + set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "\"${CCACHE_PROGRAM}\"") +else () + message(NOTICE "-- ccache has not been found") +endif () -SET(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}" CACHE INTERNAL "Package version" FORCE) -SET(VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}${PROJECT_VERSION_MISC}" CACHE INTERNAL "Global version" FORCE) -SET(GLOBAL_VERSION "${VERSION}") ###################################################################################### ### 2) Check dependencies @@ -61,16 +63,16 @@ include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/Target.cmake) ###################################################################################### ## Paths to sources of modules -set( EO_SRC_DIR "${CMAKE_SOURCE_DIR}/eo" CACHE INTERNAL "ParadisEO-EO source directory" FORCE) -set( EDO_SRC_DIR "${CMAKE_SOURCE_DIR}/edo" CACHE INTERNAL "ParadisEO-EDO source directory" FORCE) -set( MO_SRC_DIR "${CMAKE_SOURCE_DIR}/mo" CACHE INTERNAL "ParadisEO-MO source directory" FORCE) -set(MOEO_SRC_DIR "${CMAKE_SOURCE_DIR}/moeo" CACHE INTERNAL "ParadisEO-MOEO source directory" FORCE) -set( SMP_SRC_DIR "${CMAKE_SOURCE_DIR}/smp" CACHE INTERNAL "ParadisEO-SMP source directory" FORCE) -set( MPI_SRC_DIR "${CMAKE_SOURCE_DIR}/eo/src/mpi" CACHE INTERNAL "ParadisEO-MPI source directory" FORCE) +set( EO_SRC_DIR "${PROJECT_SOURCE_DIR}/eo" CACHE INTERNAL "ParadisEO-EO source directory" FORCE) +set( EDO_SRC_DIR "${PROJECT_SOURCE_DIR}/edo" CACHE INTERNAL "ParadisEO-EDO source directory" FORCE) +set( MO_SRC_DIR "${PROJECT_SOURCE_DIR}/mo" CACHE INTERNAL "ParadisEO-MO source directory" FORCE) +set(MOEO_SRC_DIR "${PROJECT_SOURCE_DIR}/moeo" CACHE INTERNAL "ParadisEO-MOEO source directory" FORCE) +set( SMP_SRC_DIR "${PROJECT_SOURCE_DIR}/smp" CACHE INTERNAL "ParadisEO-SMP source directory" FORCE) +set( MPI_SRC_DIR "${PROJECT_SOURCE_DIR}/eo/src/mpi" CACHE INTERNAL "ParadisEO-MPI source directory" FORCE) -set(PROBLEMS_SRC_DIR "${CMAKE_SOURCE_DIR}/problems" CACHE INTERNAL "Problems dependant source directory" FORCE) +set(PROBLEMS_SRC_DIR "${PROJECT_SOURCE_DIR}/problems" CACHE INTERNAL "Problems dependant source directory" FORCE) -set(CMAKE_BASE_SOURCE_DIR ${CMAKE_SOURCE_DIR}) +set(CMAKE_BASE_SOURCE_DIR ${PROJECT_SOURCE_DIR}) # All libraries are built in /lib/ set( EO_BIN_DIR "${CMAKE_BINARY_DIR}" CACHE INTERNAL "ParadisEO-EO binary directory" FORCE) @@ -90,31 +92,34 @@ set(SMP "false" CACHE BOOL "Build the SMP module") set(MPI "false" CACHE BOOL "Build the MPI module") ## EO Module -set(EO_MODULE_NAME "Evolving Object") +set(MODULE_NAME "Paradiseo") +set(DOXYGEN_CONFIG_DIR ${CMAKE_CURRENT_SOURCE_DIR}/doxygen) +# set(EO_MODULE_NAME "Evolving Objects") set(CMAKE_SOURCE_DIR ${EO_SRC_DIR}) add_subdirectory(${EO_SRC_DIR}) if(NOT EO_ONLY) ## MO Module - set(MO_MODULE_NAME "Moving objects") + # set(MO_MODULE_NAME "Moving Objects") + # set(MODULE_NAME "Moving Objects") set(CMAKE_SOURCE_DIR ${MO_SRC_DIR}) add_subdirectory(${MO_SRC_DIR}) ## EDO Module if(EDO) - set(EDO_MODULE_NAME "Evolving Distribution Objects") + # set(EDO_MODULE_NAME "Evolving Distribution Objects") set(CMAKE_SOURCE_DIR ${EDO_SRC_DIR}) add_subdirectory(${EDO_SRC_DIR}) endif() ## MOEO Module - set(MOEO_MODULE_NAME "Multi-Objectives EO") + # set(MOEO_MODULE_NAME "Multi-Objectives EO") set(CMAKE_SOURCE_DIR ${MOEO_SRC_DIR}) add_subdirectory(${MOEO_SRC_DIR}) ## SMP Module if(SMP) - set(SMP_MODULE_NAME "Symmetric Multi-Processing") + # set(SMP_MODULE_NAME "Symmetric Multi-Processing") set(CMAKE_SOURCE_DIR ${SMP_SRC_DIR}) add_subdirectory(${SMP_SRC_DIR}) endif() @@ -137,3 +142,12 @@ endif() if("${CMAKE_BUILD_TYPE}" STREQUAL "Release") include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/Package.cmake) endif() + + +# Add all targets to the build-tree export set +export(TARGETS eo FILE "${PROJECT_BINARY_DIR}/paradiseo-config.cmake") + +# Export the package for use from the build-tree +# (this registers the build-tree with a global CMake-registry) +export(PACKAGE paradiseo) + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..6eff1e82f --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,84 @@ + +Licenses +======== + +ParadisEO modules are using free software licenses, +any contribution should be licensed under the same license. + +| Module | License | Version | Copyleft | Patent-left | +|--------|---------|---------|----------|-------------| +| EO | LGPL | 2 | Lib only | No | +| EDO | LGPL | 2 | Lib only | No | +| MO | CeCILL | 2.1 | Yes | No | +| MOEO | CeCILL | 2.1 | Yes | No | +| SMP | CeCILL | 2.1 | Yes | No | + + +Contribution Workflow +===================== + +The maintainer(s) will try to answer under a couple of weeks, if not, do not hesitate to send an e-mail. + +If you're not familiar with Git and merge requests, start by cloning one of the main repository: +- `git clone https://github.com/nojhan/paradiseo.git` +- `git clone https://scm.gforge.inria.fr/anonscm/git/paradiseo/paradiseo.git` + + +Git workflow +------------ + +ParadisEO follows a classical Git workflow using merge requests. +In order to fix a bug or add a feature yourself, you would follow this process. + +```bash +cd paradiseo +git pull origin master # Always start with an up-to-date version. +git checkout -b # Always work on a dedicated branch. +# [ make some modifications… ] +git commit +mkdir build +cd build +cmake -DCMAKE_BUILD_TYPE=Debug -BUILD_TESTING=ON -DENABLE_CMAKE_TESTING=ON .. && make && ctest # Always test. +cd .. +git pull origin master # Always check that your modification still merges. +``` + +If everything went without error, you can either send the patch or submit a merge request. +To do so, you can either: +- submit a "pull request" on Github: [nojhan/paradiseo](https://github.com/nojhan/paradiseo), +- or send a patch on the [ParadisEO mailing list](https://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/paradiseo-users). + +See below for the details. + + +Github pull request +------------------- + +Once logged in Github, go to the [maintainer repository](https://github.com/nojhan/paradiseo) and click the "fork" button. +You should have your own copy of the ParadisEO project under your own name. +Then add it as an additional "remote" to your ParadisEO Git tree: `git remote add me `. +Then, checkout the branch holding the modifications you want to propose, check that it merges with the main repository +and push it on your own repository: +```bash +git checkout +git pull origin master +git push me +``` + +Then go to the maintainer's repository page, click on the "Pull request" tab, and on the "New pull request" button. +You should then select the maintainer's master branch on the left dropdown list, and your own `my_feature` on the right one. +Explain why the maintainer should merge your modifications and click the "Submit" button. + + +E-mail your patch +----------------- + +Generate a patch file from the difference between your branch and a fresh master: +```bash +git pull origin master +git diff master > my_feature.patch +``` + +Then send the `my_feature.patch` (along with your explanations about why the maintainer should merge your modifications) +to the [mailing list](https://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/paradiseo-users). + diff --git a/INSTALL b/INSTALL deleted file mode 100644 index 6f1d121a7..000000000 --- a/INSTALL +++ /dev/null @@ -1,200 +0,0 @@ - -========================================================================================== - INSTALLING PARADISEO -========================================================================================== - -There is several ways to install ParadisEO, according to your needs. - -========================================================================================== - WINDOWS -========================================================================================== - -On Windows, and for compatibility reason, ParadisEO supply support only for MinGW. -Feel free to test with another compiler and to send us you report. - ------------------------------------------------------------------------------------------- -1) WITH EXE ------------------------------------------------------------------------------------------- - -The simpliest way ton install ParadisEO on Windows is to use the NSIS installer. -We would like to draw your attention on the fact that the PATH variable will not -be affected by the installation in order to allow anybody to install ParadisEO -without administration right. To have further information about how to use ParadisEO -in your project, see the tutorial on ParadisEO website (http://paradiseo.gforge.inria.fr/). - ------------------------------------------------------------------------------------------- -2) WITH CMAKE ------------------------------------------------------------------------------------------- - -You can also install ParadisEO using CMake. For that you must have a compiler installed, -and obviously cmake. -Then, follow UNIX instructions. - -========================================================================================== - UNIX -========================================================================================== ------------------------------------------------------------------------------------------- -1. WITH CMAKE ------------------------------------------------------------------------------------------- -1.0 DEPENDENCIES ------------------------------------------------------------------------------------------- -Optionnal -- Doxygen for documentation -- lcov for coverage - ------------------------------------------------------------------------------------------- -1.1 FAST INSTALLATION ------------------------------------------------------------------------------------------- - -After getting ParadisEO sources from repository, you have to create a build directory in order to keep your file tree clean. - -> mkdir build -> cd build - -To make the installation easier, ParadisEO propose you two installation types which are "Full" and "Min". -Full corresponds examples / lessons, tests and obviously libraries. -Min corresponds to libraries and headers and it is the standard behavior. - -You can specified an installation type by adding the following declaration to cmake : - -> cmake .. -DINSTALL_TYPE=full -> cmake .. -DINSTALL_TYPE=min -which is equivalent to -> cmake .. - -Actually, by default the generator will be "Unix Makefiles" and cmake will try to look for a C++ compiler. -Be sure you have make installed, or choose an alternative according to your configuration. -To know available generators on your computer, type cmake -help. If you are on Windows and you use MinGW, you have to specify it explicitly by adding -G "MinGW Makefiles". - -To compile ParadisEO simply compile sources using your generator. For instance, if you are using Unix Makefiles, type make. - ------------------------------------------------------------------------------------------- -1.2 BUILD TYPE ------------------------------------------------------------------------------------------- - -There are 2 types of build : Release or Debug. -To explicitly change the type, add -DDEBUG=true, otherwise, it will be the Release type. - ------------------------------------------------------------------------------------------- -1.3 COMPILERS ------------------------------------------------------------------------------------------- - -You can change the compiler used by CMake with the following options : - ->-DCMAKE_C_COMPILER=/path/to/your/c/compiler - ->-DCMAKE_CXX_COMPILER=/path/to/your/c++/compiler - ------------------------------------------------------------------------------------------- -1.4 INSTALLATION ------------------------------------------------------------------------------------------- - -WARNING : This require administration rights. - -To install ParadisEO in standard paths (such as /usr/lib for lib and /usr/include for headers on UNIX-like) : - -> make install - ------------------------------------------------------------------------------------------- -2. SPECIFIC MODULE ------------------------------------------------------------------------------------------- -2.1 EO MODULE ONLY ------------------------------------------------------------------------------------------- - -If you want to compile and install only the Evolving Objects module, you can add to CMake the following option : - -> cmake .. -DEO_ONLY - ------------------------------------------------------------------------------------------- -2.1 SMP MODULE ------------------------------------------------------------------------------------------- - -WARNING : The SMP module requires gcc 4.7 or higher. This is due to the fact that it uses the new C++ standard. - -WARNING : At the moment, the SMP module does not work on Windows or Mac OS X since MinGW does not provide support for std::thread - and Apple does not supply a recent version of gcc (but you can try to compile gcc 4.7 by yourself). - -To enable the compilation of the SMP module, just add -DSMP=true to CMake : - -> cmake .. -DSMP=true - -Depending on your distribution, you might have to give to CMake the path of gcc and g++ 4.7. -This is the case for Ubuntu 12.04 LTS for instance. Please, check installation guide on ParadisEO website for more details. - -If you are in that case and assuming you have a standard path for gcc et g++ 4.7 : - -> cmake .. -DSMP=true -DCMAKE_C_COMPILER=/usr/bin/gcc-4.7 -DCMAKE_CXX_COMPILER=/usr/bin/g++-4.7 - ------------------------------------------------------------------------------------------- -2.2 PEO MODULE ------------------------------------------------------------------------------------------- - -WARNING : The PEO module requires libXML 2 and a MPI implementation such as MPICH2. - -To enable the compilation of the PEO module, just add -DPEO=true to CMake : - -> cmake .. -DPEO=true - ------------------------------------------------------------------------------------------- -2.3 EDO MODULE ------------------------------------------------------------------------------------------- - -WARNING : The EDO module requires either the Boost::ublas or the Eigen3 library. - -To enable the compilation of the EDO module, just add -DEDO=true to CMake : - -> cmake .. -DEDO=true - - ------------------------------------------------------------------------------------------- -3. DOCUMENTATION ------------------------------------------------------------------------------------------- - -There is 2 ways to build ParadisEO documentation : module by module, or all the documentation. - -Targets are : -doc for all documentations -doc-eo for building EO documentation -doc-mo for MO -doc-edo for MO -doc-moeo for MOEO -doc-smp for SMP - -Each documentation are generated separatly in the module build folder. -For instance, after the generation of the MO documentation, you will find it in build/paradise-mo/doc. - ------------------------------------------------------------------------------------------- -4. LESSONS / EXAMPLES ------------------------------------------------------------------------------------------- - -Examples and lessons are generated by default. -If you want to disable lessons manually, you have to specify -DENABLE_CMAKE_TESTING=false to CMake. -If you want to build a specific lesson or example, you can check the list of available targets with make help. - -All lessons are build on the same pattern : Lesson. -For instance, make moLesson4 will build the Lesson 4 from the MO module. -Easy, isn't it ? - ------------------------------------------------------------------------------------------- -5. TESTS ------------------------------------------------------------------------------------------- -5.1 CTESTS ------------------------------------------------------------------------------------------- - -By performing tests, you can check your installation. -Testing is disable by default, except if you build with the full install type. -To enable testing, define -DENABLE_CMAKE_TESTING=true when you launch cmake. - -To perform tests simply type ctest or make test. - ------------------------------------------------------------------------------------------- -5.2 REPORTING ------------------------------------------------------------------------------------------- - -Feel free to send us reports about building, installation, tests and profiling in order to help us to improve compatibilty and installation process. Sending reports is very simple : - -> ctest -D Experimental - -WARNING : Reports are anonymous. CTest will also send informations about your configuration such as OS, CPU frequency, etc. - - diff --git a/INSTALL.md b/INSTALL.md new file mode 100644 index 000000000..a3fb4e1b7 --- /dev/null +++ b/INSTALL.md @@ -0,0 +1,217 @@ + +Summary +======= + +As Paradiseo is a development framework, you do not really need to install it on all your systems. +Just put it somewhere on your development computer, compile it from here and indicate where to find it to your favorite build system. + + +Build +----- + +Paradiseo is mainly developed for Linux, on which it is straightforward to install a C++ build chain. For example, on Ubuntu 18.04: +```bash +sudo apt install g++-8 cmake make libeigen3-dev libopenmpi-dev doxygen graphviz libgnuplot-iostream-dev +``` + +Paradiseo use the CMake build system, so building it should be as simple as: +```bash +mkdir build ; cd build ; cmake -DEDO=ON .. && make -j +``` + +The file `howto_build_paradiseo.apptainer.def` shows you how to install and build from scratch. +It is a definition file for the [Apptainer](https://apptainer.org/) container system, +which is often used on HPC clusters. + + +Develop +------- + +Download the quick start project template, edit the `CMakeLists.txt` file to indicate where to find Paradiseo and start developing your own solver. + +If you don't know CMake or a modern build system, you should still be able to build a stand-alone code from a `paradiseo/build` directory with something like: +```bash + c++ ../solver.cpp -I../eo/src -I../edo/src -DWITH_EIGEN=1 -I/usr/include/eigen3 -std=c++17 -L./lib/ -leo -leoutils -les -lga -o solver +``` + + +Install +------- + +If you want to install ParadisEO system-wide anyway: +```bash +cmake -D CMAKE_BUILD_TYPE=Release .. && sudo make install +``` + + +More details +============ + +As a templated framework, most of the ParadisEO code rely within headers and is thus compiled +by you when you build your own solver. + +However, in order to save some compilation time, +the EO and EDO modules are compiled within static libraries by the default build system. + +If you believe you have a working build chain and want to test if it works with ParadisEO, +you can try to build the tests and the examples. +Note that if some of them failed (but not all), you may still be able to build your own solver, +as you will most probably not use all ParadisEO features anyway. + + +Windows +------- + +Last time we checked, ParadisEO could only be built with MinGW. +Feel free to test with another compiler and to send us your report. + +As of today, we cannot guarantee that it will be easy to +install ParadisEO under Windows if you're a beginner. +There is still some (possibly outdated) help about oldest version on the [Website](http://paradiseo.gforge.inria.fr/). + +If you know how to install a working compiler and the dependencies, +you may follow the same steps than the Linux process below. + +If you are a beginner, we strongly suggest you install a Linux distribution +(either as an OS, as a virtual machine or using the Windows 10 compatibility layer). + + +Linux +----- + +### Dependencies + +In order to build the latest version of Paradiseo, you will need a C++ compiler supporting C++17. +So far, GCC and CLANG gave good results under Linux. You will also need the CMake and make build tools. + +Some features are only available if some dependencies are installed: +- Most of the EDO module depends on either uBlas or Eigen3. The recommended package is Eigen3, which enables the adaptive algorithms. +- Doxygen is needed to build the API documentation, and you should also install graphviz if you want the class relationship diagrams. +- GNUplot is needed to have the… GNUplot graphs at checkpoints. + +To install all those dependencies at once under Ubuntu (18.04), just type: +```bash +sudo apt install g++-8 cmake make libeigen3-dev libopenmpi-dev doxygen graphviz libgnuplot-iostream-dev. +``` + + +### Build + +The build chain uses the classical workflow of CMake. +The recommended method is to build in a specific, separated directory and call `cmake ..` from here. +CMake will prepare the compilation script for your system of choice which you can change with the `-G ` option (see your CMake doc for the list of available generators). + +Under Linux, the default is `make`, and a build command is straitghtforward: +```bash +mkdir build ; cd build ; cmake .. && make -j +``` + +There is, however, several build options which you may want to switch. +To see them, we recommend the use of a CMake gui, like ccmake or cmake-gui. +On the command line, you can see the available options with: `cmake -LH ..`. +Those options can be set with the `-D