Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
add tests for isendrecv and isendrecv_replace
[simgrid.git] / docs / source / Start_your_own_project.rst
index 3d131a7..bb06f09 100644 (file)
@@ -1,4 +1,4 @@
-..
+.. _setup_your_own:
 
 Start your Own Project
 ======================
 
 Start your Own Project
 ======================
@@ -30,10 +30,10 @@ of source files.
 
 .. code-block:: cmake
 
 
 .. code-block:: cmake
 
-   cmake_minimum_required(VERSION 2.8.8)
+   cmake_minimum_required(VERSION 2.8.12)
    project(MyFirstSimulator)
 
    project(MyFirstSimulator)
 
-   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
+   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
 
    set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
    find_package(SimGrid REQUIRED)
 
    set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
    find_package(SimGrid REQUIRED)
@@ -58,16 +58,33 @@ manually but your project will produce relevant error messages when
 trying to compile on a machine where SimGrid is not installed. Please
 also refer to the file header for more information.
 
 trying to compile on a machine where SimGrid is not installed. Please
 also refer to the file header for more information.
 
-MPI projects should include ``find_package (MPI)`` in CMakeLists.txt. Then, the
-variables ``MPI_C_COMPILER``, ``MPI_CXX_COMPILER``, and ``MPI_Fortran_COMPILER`` should
-point to the full path of smpicc, smpicxx, and smpiff respectively.
-It is however not advised to set these variables from the CMakeLists.txt file directly.
-In addition, you may need to set ``SMPI_PRETEND_CC=1`` to please cmake when it tests the compiler.
+MPI projects should NOT search for MPI as usual in cmake, but instead use the ``smpi_c_target()`` macro
+to declare that a given target is meant to be executed in ``smpirun`` (which path is set in ``${SMPIRUN}``).
+This macro should work for C and C++ programs. Here is a small example:
+
+.. code-block:: cmake
+
+   # Search FindSimgrid in my sources
+   set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}")
+   find_package(SimGrid)
+
+   # Declare an executable, and specify that it's meant to run within smpirun
+   add_executable(roundtrip roundtrip.c)
+   smpi_c_target(roundtrip)
+
+   # Declare a test running our executable in ${SMPIRUN}
+   enable_testing()
+   add_test(NAME RoundTrip
+            COMMAND ${SMPIRUN} -platform ${CMAKE_SOURCE_DIR}/../cluster_backbone.xml -np 2 ./roundtrip)
+
+To compile Fortran code with cmake, you must override the ``MPI_Fortran_COMPILER`` variable as follows, but it will probably
+break some configuration checks, so you should export ``SMPI_PRETEND_CC=1`` during the configuration (not during the compilation
+nor the execution).
 
 .. code-block:: console
 
    $ SMPI_PRETEND_CC=1 cmake -DMPI_C_COMPILER=/opt/simgrid/bin/smpicc -DMPI_CXX_COMPILER=/opt/simgrid/bin/smpicxx -DMPI_Fortran_COMPILER=/opt/simgrid/bin/smpiff .
 
 .. code-block:: console
 
    $ SMPI_PRETEND_CC=1 cmake -DMPI_C_COMPILER=/opt/simgrid/bin/smpicc -DMPI_CXX_COMPILER=/opt/simgrid/bin/smpicxx -DMPI_Fortran_COMPILER=/opt/simgrid/bin/smpiff .
-
+   $ make
 
 Building your project with Makefile
 -----------------------------------
 
 Building your project with Makefile
 -----------------------------------
@@ -124,7 +141,7 @@ Develop in C++ with Eclipse
 If you wish to develop your plugin or modify SimGrid using
 Eclipse. You have to run cmake and import it as a Makefile project.
 
 If you wish to develop your plugin or modify SimGrid using
 Eclipse. You have to run cmake and import it as a Makefile project.
 
-Next, you have to activate C++14 in your build settings, add -std=c++14
+Next, you have to activate C++17 in your build settings, add -std=c++17
 in the CDT GCC Built-in compiler settings.
 
 .. image:: /img/eclipseScreenShot.png
 in the CDT GCC Built-in compiler settings.
 
 .. image:: /img/eclipseScreenShot.png
@@ -160,7 +177,6 @@ Many undefined references
 .. code-block:: console
 
   masterworker.c:209: undefined reference to `sg_version_check'
 .. code-block:: console
 
   masterworker.c:209: undefined reference to `sg_version_check'
-  masterworker.c:209: undefined reference to `MSG_init_nocheck'
   (and many other undefined references)
 
 This happens when the linker tries to use the wrong library. Use
   (and many other undefined references)
 
 This happens when the linker tries to use the wrong library. Use