Installing from the Source
--------------------------
+.. _install_src_deps:
+
Getting the Dependencies
^^^^^^^^^^^^^^^^^^^^^^^^
``ccmake`` provides a nicer graphical interface compared to ``cmake``.
Press ``t`` in ``ccmake`` if you need to see absolutely all
configuration options (e.g., if your Python installation is not standard).
-boost (at least v1.48, v1.59 recommended)
- - On Debian / Ubuntu: ``apt install libboost-dev libboost-context-dev``
+boost mandatory components (at least v1.48, v1.59 recommended)
+ - On Debian / Ubuntu: ``apt install libboost-dev``
- On CentOS / Fedora: ``dnf install boost-devel``
- On macOS with homebrew: ``brew install boost``
+boost recommended components (optional).
+ - boost-context may be used instead of our own fast context switching code which only works on amd64.
+ - boost-stacktrace is used to get nice stacktraces on errors in SimGrid.
+ - On Debian / Ubuntu: ``apt install libboost-context-dev libboost-stacktrace-dev``
+python bindings (optional):
+ - On Debian / Ubuntu: ``apt install pybind11-dev python3-dev``
+Model-checking mandatory dependencies
+ - On Debian / Ubuntu: ``apt install libevent-dev``
Eigen3 (optional)
- On Debian / Ubuntu: ``apt install libeigen3-dev``
- On CentOS / Fedora: ``dnf install eigen3-devel``
- On macOS with homebrew: ``brew install eigen``
- - Use EIGEN3_HINT to specify where it's installed if cmake doesn't find it automatically.
+ - Use EIGEN3_HINT to specify where it's installed if cmake doesn't find it automatically. Set EIGEN3_HINT=OFF to disable detection even if it could be found.
+JSON (optional, for the DAG wfcommons loader)
+ - On Debian / Ubuntu: ``apt install nlohmann-json3-dev``
+ - Use nlohmann_json_HINT to specify where it's installed if cmake doesn't find it automatically.
For platform-specific details, please see below.
$ tar xf simgrid-3-XX.tar.gz
$ cd simgrid-*
- $ cmake -DCMAKE_INSTALL_PREFIX=/opt/simgrid -GNinja.
+ $ cmake -DCMAKE_INSTALL_PREFIX=/opt/simgrid -GNinja .
$ make
$ make install
files in the tree, you may need to wipe out your complete tree and
start with a fresh one when you install new dependencies.
- Another (better) solution is to :ref:`build out of the source tree
- <install_cmake_outsrc>`.
+ A better solution is to :ref:`build out of the source tree <install_cmake_outsrc>`.
Generic build-time options
""""""""""""""""""""""""""
.. code-block:: console
- $ cmake -DCC=clang -DCXX=clang++ .
+ $ cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ .
SimGrid compilation options
"""""""""""""""""""""""""""
Activates our internal memory caching mechanism. This produces faster
code, but it may fool the debuggers.
-enable_model-checking (on/OFF)
- Activates the formal verification mode. This will **hinder
- simulation speed** even when the model checker is not activated at
- run time.
-
-enable_msg (on/OFF)
- Activates the :ref:`MSG <MSG_doc>` legacy interface.
+enable_model-checking (ON/off)
+ Activates the verification mode. This should not impact the performance of your simulations if you build it but don't use it,
+ but you can still disable it to save some compilation time.
enable_ns3 (on/OFF)
- Activates the ns-3 bindings. See section :ref:`model_ns3`.
+ Activates the ns-3 bindings. See section :ref:`models_ns3`.
enable_smpi (ON/off)
Allows one to run MPI code on top of SimGrid.
-enable_smpi_MBI_testsuite (on/OFF)
- Adds many extra tests for the model checker module.
+enable_testsuite_McMini (on/OFF)
+ Adds several extra tests for the model checker module (targeting threaded applications).
+
+enable_testsuite_smpi_MBI (on/OFF)
+ Adds many extra tests for the model checker module (targeting MPI applications).
-enable_smpi_MPICH3_testsuite (on/OFF)
+enable_testsuite_smpi_MPICH3 (on/OFF)
Adds many extra tests for the MPI module.
minimal-bindings (on/OFF)
EIGEN3_HINT (empty by default)
Alternative path into which Eigen3 should be searched for.
+ Providing the value OFF as an hint will disable the detection alltogether.
SIMGRID_PYTHON_LIBDIR (auto-detected)
- Where to install the Python module library. By default, it is set to the cmake Python3_SITEARCH variable if installing to /usr,
- and a modified version of that variable if installing to another path. Just force another value if the auto-detected default
+ Where to install the Python module library. By default, it is set to the cmake Python3_SITEARCH variable if installing to /usr,
+ and a modified version of that variable if installing to another path. Just force another value if the auto-detected default
does not fit your setup.
SMPI_C_FLAGS, SMPI_CXX_FLAGS, SMPI_Fortran_FLAGS (string)
if some do not work for you.
- **make**: Build the core of SimGrid that gets installed, but not any example.
-- **make tests**: Build the tests and examples.
+- **make examples**: Build the examples, which are needed by the tests.
- **make simgrid**: Build only the SimGrid library. Not any example nor the helper tools.
- **make s4u-comm-pingpong**: Build only this example (works for any example)
- **make python-bindings**: Build the Python bindings
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The best solution to get SimGrid working on windows is to install the
-Ubuntu subsystem of Windows 10. All of SimGrid (but the model checker)
+Ubuntu subsystem of Windows 10. All of SimGrid
works in this setting. Native builds never really worked, and they are
disabled starting with SimGrid v3.33.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Once you have the Python development headers installed as well as a
-recent version of the `pybind11 <https://pybind11.readthedocs.io/en/stable/>`
+recent version of the `pybind11 <https://pybind11.readthedocs.io/en/stable/>`_
module (version at least 2.4), recompiling the Python bindings from
the source should be as easy as:
$ pip install simgrid
-Linux Multi-Arch specific instructions
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-On a multiarch x86_64 Linux, it should be possible to compile a 32-bit
-version of SimGrid with something like:
+If you installed SimGrid to a non-standard directory (such as ``/opt/simgrid`` as advised earlier), you should tell python where
+to find the libraries as follows (notice the elements suffixed to the configured prefix).
.. code-block:: console
- $ CFLAGS=-m32 \
- CXXFLAGS=-m32 \
- FFLAGS=-m32 \
- PKG_CONFIG_LIBDIR=/usr/lib/i386-linux-gnu/pkgconfig/ \
- cmake . \
- -DCMAKE_SYSTEM_PROCESSOR=i386 \
- -DCMAKE_Fortran_COMPILER=/some/path/to/i686-linux-gnu-gfortran \
- -DGFORTRAN_EXE=/some/path/to/i686-linux-gnu-gfortran \
- -DSMPI_C_FLAGS=-m32 \
- -DSMPI_CXX_FLAGS=-m32 \
- -DSMPI_Fortran_FLAGS=-m32
+ $ PYTHONPATH="/opt/simgrid/lib/python3/dist-packages" LD_LIBRARY_PATH="/opt/simgrid/lib" python your_script.py
-If needed, implement ``i686-linux-gnu-gfortran`` as a script:
+You can add those variables to your bash profile to not specify it each time by adding these lines to your ``~/.profile``:
-.. code-block:: shell
+.. code-block:: console
- #!/usr/bin/env sh
- exec gfortran -m32 "$@"
+ export PYTHONPATH="$PYTHONPATH:/opt/simgrid/lib/python3/dist-packages"
+ export LD_LIBRARY_PATH="$PYTHONPATH:/opt/simgrid/lib"