Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
fb60a4423624882bd3d82ce226e6645571b3b4cd
[simgrid.git] / CMakeLists.txt
1 cmake_minimum_required(VERSION 2.8.8)
2 message(STATUS "Cmake version ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}")
3 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/tools/cmake/Modules)
4
5 project(SimGrid C CXX)
6
7 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
8 #     Check for the compiler        #
9 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
10
11 ### Need to set rc ccompiler before enable language
12 if(WIN32)
13   SET(CMAKE_RC_COMPILER "windres")
14 endif()
15
16 ## 
17 ## Check the C/C++ standard that we need
18 ##   See also tools/cmake/GCCFlags.cmake that sets our paranoid warning flags
19 INCLUDE(CheckCCompilerFlag)
20 CHECK_C_COMPILER_FLAG(-fstack-cleaner HAVE_C_STACK_CLEANER)
21
22 ## Request full debugging flags
23 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3")
24 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3")
25 set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -g")
26
27 if (CMAKE_COMPILER_IS_GNUCC)    
28   if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.7")
29     message(FATAL_ERROR
30             "SimGrid needs at least g++ version 4.7 to compile but you have ${CMAKE_CXX_COMPILER_VERSION}."
31             "You need a sufficient support of c++11 to compile SimGrid.")
32   endif()
33 endif()
34
35 ## We need a decent support of the C++11 and C11 standards
36 set(CMAKE_CXX_STANDARD 11)
37 set(CMAKE_CXX_STANDARD_REQUIRED ON)
38
39 set(CMAKE_C_STANDARD 11)
40 set(CMAKE_C_STANDARD_REQUIRED ON)
41
42 if (CMAKE_C_COMPILER_ID STREQUAL "Intel" AND CMAKE_C11_EXTENSION_COMPILE_OPTION STREQUAL "-std=c11")
43   set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
44 endif()
45
46 ### Check threading support
47 set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
48 find_package(Threads)
49
50 ### Setup Options
51 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Option.cmake)
52
53 ### SMPI vs. Fortran
54 if ((NOT DEFINED enable_smpi) OR enable_smpi) 
55   # First unset the compiler in case we're re-running cmake over a previous
56   # configuration where it was saved as smpiff
57   unset(CMAKE_Fortran_COMPILER)
58   
59   SET(SMPI_FORTRAN 0)
60   if(enable_fortran)
61     enable_language(Fortran OPTIONAL)
62   endif()
63   
64   if(CMAKE_Fortran_COMPILER)
65
66     # Fortran compiler detected: save it, then replace by smpiff
67     set(SMPI_Fortran_COMPILER "${CMAKE_Fortran_COMPILER}" CACHE FILEPATH "The real Fortran compiler")
68
69         # Set flags/libs to be used in smpiff
70     if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
71       set(SMPI_Fortran_FLAGS "\"-fpic\" \"-ff2c\" \"-fno-second-underscore\"")
72       set(SMPI_Fortran_LIBS "\"-lgfortran\"")
73       set(SMPI_GFORTRAN 1)
74     elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
75       set(SMPI_Fortran_FLAGS "\"-fPIC\" \"-nofor-main\"")
76       set(SMPI_Fortran_LIBS "\"-lifcore\"")
77       set(SMPI_IFORT 1)
78     elseif(CMAKE_Fortran_COMPILER_ID MATCHES "PGI|Flang") # flang
79       set(SMPI_Fortran_FLAGS "\"-fPIC\"")
80       set(SMPI_Fortran_LIBS "")
81       set(SMPI_FLANG 1)
82     endif()
83
84     set(SMPI_FORTRAN 1)
85   endif(CMAKE_Fortran_COMPILER)
86
87 endif()
88
89 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
90 #     Build the version number      #
91 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
92
93 set(SIMGRID_VERSION_MAJOR "3")
94 set(SIMGRID_VERSION_MINOR "21")
95 set(SIMGRID_VERSION_PATCH "90")
96 set(SIMGRID_VERSION_EXTRA "-DEVEL") # Extra words to add to version string (e.g. -rc1)
97
98 set(SIMGRID_VERSION_DATE  "2019") # Year for copyright information
99
100 if(${SIMGRID_VERSION_PATCH} EQUAL "0")
101   set(release_version "${SIMGRID_VERSION_MAJOR}.${SIMGRID_VERSION_MINOR}")
102 else()
103   set(release_version "${SIMGRID_VERSION_MAJOR}.${SIMGRID_VERSION_MINOR}.${SIMGRID_VERSION_PATCH}")
104 endif()
105
106 set(SIMGRID_VERSION_STRING "SimGrid version ${release_version}${SIMGRID_VERSION_EXTRA}")
107
108 set(libsimgrid_version "${release_version}")
109 set(libsimgrid-java_version "${release_version}")
110
111 ### SET THE LIBRARY EXTENSION 
112 if(APPLE)
113   set(LIB_EXE "dylib")
114 elseif(WIN32)
115   set(LIB_EXE "a")
116   set(BIN_EXE ".exe")
117 else()
118   set(LIB_EXE "so")
119 endif()
120
121 execute_process(COMMAND ${CMAKE_LINKER} -version OUTPUT_VARIABLE LINKER_VERSION ERROR_VARIABLE LINKER_VERSION)
122 string(REGEX MATCH "[0-9].[0-9]*" LINKER_VERSION "${LINKER_VERSION}")
123
124 ### Find programs and paths
125 FIND_PROGRAM(GCOV_PATH gcov)
126 include(FindPerl)
127 if(NOT PERL_FOUND)
128   message(FATAL_ERROR "Please install Perl to compile SimGrid.")
129 endif()
130
131 # tesh.py needs python 3 (or the module python-subprocess32 on python2.8+)
132 set(PythonInterp_FIND_VERSION 3)
133 set(PythonInterp_FIND_VERSION_COUNT 1)
134 set(PythonInterp_FIND_VERSION_MAJOR 3)
135 include(FindPythonInterp)
136 if(NOT PYTHONINTERP_FOUND)
137   message(FATAL_ERROR "Please install Python (version 3 or higher) to compile SimGrid.")
138 endif()
139
140 SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
141
142 ### Compute the include paths
143
144 # Only include public headers by default
145 include_directories(
146    ${CMAKE_BINARY_DIR}/include
147    ${CMAKE_HOME_DIRECTORY}/include
148 )
149
150 # Compute the ones that should be added when compiling the library
151 set(INTERNAL_INCLUDES
152   ${CMAKE_BINARY_DIR}
153   ${CMAKE_HOME_DIRECTORY}
154   ${CMAKE_HOME_DIRECTORY}/src/include
155   )
156
157 if(enable_smpi)
158   set (INTERNAL_INCLUDES ${INTERNAL_INCLUDES} ${CMAKE_HOME_DIRECTORY}/src/smpi/include)
159 endif()
160
161 if(NOT CMAKE_CROSSCOMPILING AND EXISTS /usr/include/)
162   set(INTERNAL_INCLUDES ${INTERNAL_INCLUDES} /usr/include/)
163 endif()
164
165 if(WIN32)
166   set(CMAKE_INCLUDE_WIN "${CMAKE_C_COMPILER}")
167   set(CMAKE_LIB_WIN "${CMAKE_C_COMPILER}")
168   string(REGEX REPLACE "/bin/gcc.*" "/include"  CMAKE_INCLUDE_WIN "${CMAKE_INCLUDE_WIN}")
169   string(REGEX REPLACE "/bin/gcc.*" "/lib"  CMAKE_LIB_WIN "${CMAKE_LIB_WIN}")
170   set(INTERNAL_INCLUDES ${INTERNAL_INCLUDES} ${CMAKE_INCLUDE_WIN})
171   unset(CMAKE_INCLUDE_WIN)
172 endif()
173
174 # library dependency cannot start with a space (CMP0004), so initialize it with something that is never desactivated.
175 set(SIMGRID_DEP "-lm") 
176
177 ### Determine the assembly flavor that we need today
178 set(HAVE_RAW_CONTEXTS 0)
179 include(CMakeDetermineSystem)
180 IF(CMAKE_SYSTEM_PROCESSOR MATCHES ".86|AMD64|amd64")
181   IF(CMAKE_SIZEOF_VOID_P EQUAL 4) # 32 bits
182     message(STATUS "System processor: i686 (${CMAKE_SYSTEM_PROCESSOR}, 32 bits)")
183     set(SIMGRID_PROCESSOR_i686 1)
184     set(SIMGRID_PROCESSOR_x86_64 0)
185   ELSE()
186     message(STATUS "System processor: x86_64 (${CMAKE_SYSTEM_PROCESSOR}, 64 bits)")
187     set(SIMGRID_PROCESSOR_i686 0)
188     set(SIMGRID_PROCESSOR_x86_64 1)
189   ENDIF()
190   if (WIN32)
191     message(STATUS "Disable fast raw contexts on Windows.")
192   else()
193     set(HAVE_RAW_CONTEXTS 1)
194   endif()
195 ELSE()
196   set(SIMGRID_PROCESSOR_i686 0)
197   set(SIMGRID_PROCESSOR_x86_64 0)
198 ENDIF()
199
200 include(CheckFunctionExists)
201 include(CheckTypeSize)
202 include(CheckIncludeFile)
203 include(CheckIncludeFiles)
204 include(CheckLibraryExists)
205 include(CheckSymbolExists)
206
207 set(HAVE_GRAPHVIZ 0)
208 include(FindGraphviz)
209
210 set(SIMGRID_HAVE_LUA 0)
211 if(enable_lua)
212   include(FindLuaSimgrid)
213 endif()
214
215 set(SIMGRID_HAVE_NS3 0)
216 if(enable_ns3)
217   include(FindNS3)
218   if (SIMGRID_HAVE_NS3)
219     set(SIMGRID_HAVE_NS3 1)
220     foreach(lib core csma point-to-point internet network applications)
221       set(SIMGRID_DEP "${SIMGRID_DEP} -lns${NS3_VERSION}-${lib}${NS3_SUFFIX}")
222     endforeach()
223   else()
224     message(FATAL_ERROR "Cannot find NS3. Please install it (apt-get install ns3 libns3-dev) or disable that cmake option")
225   endif()
226 endif()
227
228 if(WIN32)
229   set(Boost_USE_STATIC_LIBS 1)
230 endif()
231
232 set(HAVE_PAPI 0)
233 if(enable_smpi_papi)
234   include(FindPAPI)
235   if (NOT HAVE_PAPI)
236     message(FATAL_ERROR "Cannot find PAPI. Please install it (apt-get install papi-tools libpapi-dev) or disable PAPI bindings.")
237   endif()
238 endif()
239
240 # But we do need the core of Boost
241 find_package(Boost 1.48)
242 if(Boost_FOUND)
243   include_directories(${Boost_INCLUDE_DIRS})
244 else()
245   if(APPLE)
246     message(FATAL_ERROR "Boost libraries not found. Try to install them with 'sudo fink install boost1.53.nopython' (check the exact name with 'fink list boost') or 'sudo brew install boost'")
247   else()
248     message(FATAL_ERROR "Boost libraries not found. Install libboost-dev (>= 1.48.0).")
249   endif()
250 endif()
251
252 # cmake before 3.13.1 does not know about stacktrace components. Fix it.
253 # Usable components: https://www.boost.org/doc/libs/1_65_1/doc/html/stacktrace/configuration_and_build.html
254 set(_Boost_STACKTRACE_HEADERS           "boost/stacktrace.hpp")
255 set(_Boost_STACKTRACE_BACKTRACE_HEADERS "boost/stacktrace.hpp")
256
257 find_package(Boost 1.59 COMPONENTS context stacktrace_backtrace unit_test_framework)
258 set(Boost_FOUND 1) # These components are optionals
259 message(STATUS "Mandatory components found. SimGrid is compilable.")
260 message(STATUS "Looking for optional Boost components:")
261
262 if (Boost_STACKTRACE_BACKTRACE_FOUND)
263   message (STATUS "  stacktrace: found. Activating human-readable stack traces.")
264   set(HAVE_BOOST_STACKTRACE 1)
265   set(SIMGRID_DEP "${SIMGRID_DEP} -lboost_stacktrace_backtrace")
266 else()
267   message (STATUS "  stacktrace: MISSING. Install libboost-stacktrace-dev to display the stacktraces.")
268   set(HAVE_BOOST_STACKTRACE 0)
269 endif()
270
271 if(Boost_CONTEXT_FOUND)
272   message (STATUS "  context: found. Activating Boost contexts.")
273   set(HAVE_BOOST_CONTEXTS 1)
274 else()
275   message (STATUS "  context: MISSING. Install libboost-context-dev for this optional feature.")
276   set(HAVE_BOOST_CONTEXTS 0)
277 endif()
278
279 if (Boost_UNIT_TEST_FRAMEWORK_FOUND)
280   message(STATUS  "  unit_test_framework: found. Activating the Boost-based unit tests.")
281 else()
282   message(STATUS  "  unit_test_framework: MISSING. Install libboost-test-dev (>= v1.59) to activate the Unit Tests.")
283 endif()
284
285
286 # Checks for header libraries functions.
287 CHECK_LIBRARY_EXISTS(rt      clock_gettime           "" HAVE_POSIX_GETTIME)
288 CHECK_LIBRARY_EXISTS(pthread pthread_setaffinity_np  "" HAVE_PTHREAD_SETAFFINITY)
289
290 if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
291   set(CMAKE_REQUIRED_DEFINITIONS "-D_XOPEN_SOURCE=700 -D_DARWIN_C_SOURCE")
292 elseif(MINGW)
293   # Use the GNU version of unusual modifiers like PRIx64
294   add_definitions(-D__USE_MINGW_ANSI_STDIO=1)
295   set(CMAKE_REQUIRED_DEFINITIONS "-D__USE_MINGW_ANSI_STDIO=1")
296 else()
297   set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE")
298 endif()
299
300 CHECK_INCLUDE_FILE("valgrind/valgrind.h" HAVE_VALGRIND_H)
301 CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H)
302 CHECK_INCLUDE_FILE("signal.h" HAVE_SIGNAL_H)
303 CHECK_INCLUDE_FILE("sys/param.h" HAVE_SYS_PARAM_H)
304 CHECK_INCLUDE_FILE("sys/sysctl.h" HAVE_SYS_SYSCTL_H)
305 CHECK_INCLUDE_FILE("ucontext.h" HAVE_UCONTEXT_H)
306 CHECK_INCLUDE_FILE("linux/futex.h" HAVE_FUTEX_H)
307
308 CHECK_FUNCTION_EXISTS(dlfunc HAVE_DLFUNC)
309 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
310 CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
311 CHECK_FUNCTION_EXISTS(getdtablesize HAVE_GETDTABLESIZE)
312 CHECK_FUNCTION_EXISTS(sysconf HAVE_SYSCONF)
313 CHECK_FUNCTION_EXISTS(process_vm_readv HAVE_PROCESS_VM_READV)
314 CHECK_FUNCTION_EXISTS(mmap HAVE_MMAP)
315 CHECK_FUNCTION_EXISTS(mremap HAVE_MREMAP)
316
317 CHECK_SYMBOL_EXISTS(vasprintf stdio.h HAVE_VASPRINTF)
318 if(MINGW)
319   # The detection of vasprintf fails on MinGW, assumingly because it's
320   # defined as an inline function in stdio.h instead of a regular
321   # function. So force the result to be 1 despite of the test.
322   set(HAVE_VASPRINTF 1)
323 endif()
324
325 CHECK_INCLUDE_FILE("sys/sendfile.h" HAVE_SENDFILE_H)
326 CHECK_FUNCTION_EXISTS(sendfile HAVE_SENDFILE)
327 if(HAVE_SENDFILE_H AND HAVE_SENDFILE)
328   set(SG_HAVE_SENDFILE 1)
329 else()
330   set(SG_HAVE_SENDFILE 0)
331 endif()
332
333 if(enable_model-checking AND NOT "${CMAKE_SYSTEM}" MATCHES "Linux|FreeBSD")
334   message(WARNING "Support for model-checking has not been enabled on ${CMAKE_SYSTEM}: disabling it")
335   set(enable_model-checking FALSE)
336 endif()
337
338 if(HAVE_MMAP)
339   SET(HAVE_MMALLOC 1)
340 else()
341   SET(HAVE_MMALLOC 0)
342   if(enable_model-checking)
343     message(STATUS "Warning: support for model-checking has been disabled because you are missing either mmap or __thread.")
344   endif()
345   SET(enable_model-checking 0)
346 endif()
347
348 if(enable_jedule)
349   set(SIMGRID_HAVE_JEDULE 1)
350 else()
351   set(SIMGRID_HAVE_JEDULE 0)
352 endif()
353
354 if(enable_mallocators)
355   SET(SIMGRID_HAVE_MALLOCATOR 1)
356 else()
357   SET(SIMGRID_HAVE_MALLOCATOR 0)
358 endif()
359
360 include(FindLibunwind)
361 if(HAVE_LIBUNWIND)
362   SET(SIMGRID_DEP "${SIMGRID_DEP} ${LIBUNWIND_LIBRARIES}")
363 else()
364   if(enable_model-checking)
365     message(FATAL_ERROR "Please install libunwind-dev libdw-dev libelf-dev libevent-dev if you want to compile the SimGrid model checker.")
366   endif()
367 endif()
368
369 if(enable_model-checking)
370   find_package(Libdw REQUIRED)
371   find_package(Libelf REQUIRED)
372   find_package(Libevent REQUIRED)
373   include_directories(${LIBDW_INCLUDE_DIR} ${LIBELF_INCLUDE_DIR} ${LIBEVENT_INCLUDE_DIR})
374   set(SIMGRID_DEP "${SIMGRID_DEP} ${LIBEVENT_LIBRARIES} ${LIBELF_LIBRARIES} ${LIBDW_LIBRARIES}")
375   set(SIMGRID_HAVE_MC 1)
376   if("${CMAKE_SYSTEM}" MATCHES "FreeBSD" AND enable_java)
377     message(WARNING "FreeBSD + Model-Checking + Java = too much for now. Disabling java")
378     set(enable_java FALSE)
379   endif()
380 else()
381   SET(SIMGRID_HAVE_MC 0)  
382   set(HAVE_MMALLOC 0)
383 endif()
384 mark_as_advanced(PATH_LIBDW_H)
385 mark_as_advanced(PATH_LIBDW_LIB)
386
387 if (enable_model-checking AND enable_ns3)
388   message(FATAL_ERROR "Cannot activate both model-checking and NS3 bindings: NS3 pull too much dependencies for the MC to work")
389 endif()
390
391 if(enable_smpi)
392   SET(HAVE_SMPI 1)
393   if("${CMAKE_SYSTEM}" MATCHES "Darwin|FreeBSD|Linux")
394     SET(HAVE_PRIVATIZATION 1)
395   else()
396     message (STATUS "Warning:  no support for SMPI automatic privatization on this platform")
397     SET(HAVE_PRIVATIZATION 0)
398   endif()
399 else()
400   SET(HAVE_SMPI 0)
401 endif()
402
403 #--------------------------------------------------------------------------------------------------
404 ### Check what context backends are available
405
406 set(HAVE_UCONTEXT_CONTEXTS 0)
407 if(NOT HAVE_UCONTEXT_H)
408   message(STATUS "No ucontext factory: <ucontext.h> not found.")
409 elseif(APPLE)
410   message(STATUS "No ucontext factory: Apple don't want us to use them.")
411   set(HAVE_UCONTEXT_H 0)
412 else()
413   try_compile(compile_makecontext ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_makecontext.c
414     OUTPUT_VARIABLE compile_makecontext_output)
415
416   #If can have both context
417   if(compile_makecontext)
418     set(HAVE_UCONTEXT_CONTEXTS 1)
419     message(STATUS "Support for ucontext factory ok.")
420   else()
421     message(STATUS "Error: <ucontext.h> exists, but makecontext is not compilable. Compilation output:\n ${compile_makecontext_output}")
422     message(STATUS "No ucontext factory: makecontext() is not compilable.")
423   endif()
424
425   # Stack setup (size and address)
426   try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR
427     ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stacksetup.c
428     RUN_OUTPUT_VARIABLE stack_setup)
429
430   LIST(LENGTH stack_setup stack_setup_len)
431   if("${stack_setup_len}" STREQUAL "2")
432     LIST(GET stack_setup 0 makecontext_addr)
433     LIST(GET stack_setup 1 makecontext_size)
434     set(sg_makecontext_stack_addr "#define sg_makecontext_stack_addr(skaddr) (${makecontext_addr})")
435     set(sg_makecontext_stack_size "#define sg_makecontext_stack_size(sksize) (${makecontext_size})")
436   else()
437     message(FATAL_ERROR "Could not figure out the stack setup. Compil: ${RUN_makecontext_VAR}. Exec: ${COMPILE_makecontext_VAR}. Output: ${stack_setup}")
438   endif()
439 endif()
440
441 # Stack growth direction (upward or downward). Used for the following contexts: SysV, raw, Boost
442 try_run(RUN_stackgrowth_VAR COMPILE_stackgrowth_VAR
443   ${CMAKE_BINARY_DIR}
444   ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stackgrowth.c
445   RUN_OUTPUT_VARIABLE stack
446   COPY_FILE test_stackgrowth)
447
448 if("${stack}" STREQUAL "down")
449   set(PTH_STACKGROWTH "-1")
450 elseif("${stack}" STREQUAL "up")
451   set(PTH_STACKGROWTH "1")
452 else()
453   if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
454     set(PTH_STACKGROWTH "-1")
455   elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686")
456     set(PTH_STACKGROWTH "-1")
457   else()
458     message(FATAL_ERROR "Could not figure out the stack direction. Test prog returned: ${stack}; CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}.")
459   endif()
460 endif()
461 # If the test ran well, remove the test binary
462 file(REMOVE test_stackgrowth)
463 #--------------------------------------------------------------------------------------------------
464
465 ###############
466 ## GIT version check
467 ##
468 if(EXISTS ${CMAKE_HOME_DIRECTORY}/.git/)
469   execute_process(
470      COMMAND git remote
471      COMMAND head -n 1
472      WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.git/
473      OUTPUT_VARIABLE remote
474      OUTPUT_STRIP_TRAILING_WHITESPACE)
475   #message(STATUS "Git remote: ${remote}")
476   execute_process(COMMAND git config --get remote.${remote}.url
477      WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.git/
478      OUTPUT_VARIABLE url
479      OUTPUT_STRIP_TRAILING_WHITESPACE)
480   #message(STATUS "Git url: ${url}")
481   if(url)
482     execute_process(COMMAND git --git-dir=${CMAKE_HOME_DIRECTORY}/.git log --pretty=oneline --abbrev-commit -1
483        WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.git/
484        OUTPUT_VARIABLE GIT_VERSION
485        OUTPUT_STRIP_TRAILING_WHITESPACE)
486     message(STATUS "Git version: ${GIT_VERSION}")
487
488     execute_process(COMMAND git --git-dir=${CMAKE_HOME_DIRECTORY}/.git log -n 1 --pretty=format:%ai .
489        WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.git/
490        OUTPUT_VARIABLE GIT_DATE 
491        OUTPUT_STRIP_TRAILING_WHITESPACE)
492     message(STATUS "Git date: ${GIT_DATE}")
493     string(REGEX REPLACE " .*" "" GIT_VERSION "${GIT_VERSION}")
494
495     execute_process(COMMAND git --git-dir=${CMAKE_HOME_DIRECTORY}/.git log --pretty=format:%H -1
496        WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.git/
497        OUTPUT_VARIABLE SIMGRID_GITHASH
498        OUTPUT_STRIP_TRAILING_WHITESPACE)
499   endif()
500 elseif(EXISTS ${CMAKE_HOME_DIRECTORY}/.gitversion)
501   FILE(STRINGS ${CMAKE_HOME_DIRECTORY}/.gitversion GIT_VERSION)
502 else()
503   set(GIT_VERSION "none, release version")
504 endif()
505
506 ### Setup gcc & clang flags
507 if (NOT MSVC)
508   include(${CMAKE_HOME_DIRECTORY}/tools/cmake/GCCFlags.cmake)
509 endif()
510
511 ### Generate the required headers and scripts
512 #############################################
513
514 # Avoid triggering a (full) rebuild by touching the files if they did not really change
515 configure_file("${CMAKE_HOME_DIRECTORY}/src/internal_config.h.in"    "${CMAKE_BINARY_DIR}/src/internal_config.h.generated"    @ONLY IMMEDIATE)
516 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/config.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated" @ONLY IMMEDIATE)
517 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/internal_config.h.generated ${CMAKE_BINARY_DIR}/src/internal_config.h)
518 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/config.h)
519 file(REMOVE ${CMAKE_BINARY_DIR}/src/internal_config.h.generated)
520 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated)
521
522 # We need two versions of the SMPI scripts because they contain the path to the library
523 # so, it depends of whether SimGrid is installed, or run from the sources (during the build)
524
525 file(READ ${CMAKE_HOME_DIRECTORY}/src/smpi/smpitools.sh SMPITOOLS_SH) # Definitions shared amongst all SMPI scripts, inlined in each of them
526
527 ### SMPI script used when simgrid is installed
528 set(exec_prefix ${CMAKE_INSTALL_PREFIX})
529 set(includeflag "-I${CMAKE_INSTALL_PREFIX}/include -I${CMAKE_INSTALL_PREFIX}/include/smpi")
530 set(includedir "${CMAKE_INSTALL_PREFIX}/include")
531 set(libdir ${exec_prefix}/lib)
532 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${CMAKE_INSTALL_PREFIX}/lib")
533 if(NS3_LIBRARY_PATH)
534   set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
535 endif()
536 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
537 set(SMPIMAIN ${libdir}/simgrid/smpimain)
538 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
539
540 configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/include/smpi/mpif.h @ONLY)
541 #configure mpif.f90 to build mpi.mod
542 if(SMPI_FORTRAN)
543   set(MODULE_MPIF_IN "module mpi")
544   set(MODULE_MPIF_OUT "end module mpi")
545   configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated @ONLY)
546   execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
547   set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/include/smpi)
548   add_library(mpi SHARED ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
549 endif()
550
551 foreach(script cc cxx ff f90 run)
552   configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/bin/smpi${script} @ONLY)
553 endforeach()
554
555 ### SMPI scripts used when compiling simgrid 
556 set(exec_prefix "${CMAKE_BINARY_DIR}/smpi_script/")
557 set(includeflag "-I${CMAKE_HOME_DIRECTORY}/include -I${CMAKE_HOME_DIRECTORY}/include/smpi")
558 set(includeflag "${includeflag} -I${CMAKE_BINARY_DIR}/include -I${CMAKE_BINARY_DIR}/include/smpi")
559 set(includedir "${CMAKE_HOME_DIRECTORY}/include")
560 set(libdir "${CMAKE_BINARY_DIR}/lib")
561 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${CMAKE_BINARY_DIR}/lib")
562 if(NS3_LIBRARY_PATH)
563   set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
564 endif()
565 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
566 set(SMPIMAIN ${CMAKE_BINARY_DIR}/lib/simgrid/smpimain)
567 set(SMPIREPLAYMAIN ${CMAKE_BINARY_DIR}/lib/simgrid/smpireplaymain)
568
569 foreach(script cc cxx ff f90 run)
570   configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script} @ONLY)
571 endforeach()
572
573 if(NOT WIN32)
574   foreach(script cc cxx ff f90 run)
575     execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpi${script})
576     execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script})
577   endforeach()
578 endif()
579
580 set(generated_headers_to_install
581   ${CMAKE_CURRENT_BINARY_DIR}/include/smpi/mpif.h
582   ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h
583   )
584
585 set(generated_headers  ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h )
586
587 set(generated_files_to_clean
588   ${generated_headers}
589   ${generated_headers_to_install}
590   ${CMAKE_BINARY_DIR}/bin/smpicc
591   ${CMAKE_BINARY_DIR}/bin/smpicxx
592   ${CMAKE_BINARY_DIR}/bin/smpiff
593   ${CMAKE_BINARY_DIR}/bin/smpif90
594   ${CMAKE_BINARY_DIR}/bin/smpirun
595   ${CMAKE_BINARY_DIR}/bin/colorize
596   ${CMAKE_BINARY_DIR}/bin/simgrid_update_xml
597   ${CMAKE_BINARY_DIR}/examples/smpi/tracing/smpi_traced.trace
598   )
599
600 if(NOT "${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_HOME_DIRECTORY}")
601   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt COPYONLY)
602   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt COPYONLY)
603   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allreduce.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt COPYONLY)
604   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_barrier.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt COPYONLY)
605   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_bcast.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt COPYONLY)
606   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_with_isend.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt COPYONLY)
607   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt COPYONLY)
608   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoallv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt COPYONLY)
609   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_waitall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt COPYONLY)
610   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_reducescatter.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt COPYONLY)
611   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_gather.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt COPYONLY)
612   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allgatherv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt COPYONLY)
613   configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile COPYONLY)
614   configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_cluster ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_cluster COPYONLY)
615   configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_coll ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_coll COPYONLY)
616
617   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/description_file ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file COPYONLY)
618   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/README ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README COPYONLY)
619   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/smpi_replay.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt COPYONLY)
620   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace0.txt COPYONLY)
621   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace1.txt COPYONLY)
622   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace2.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace2.txt COPYONLY)
623   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace3.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace3.txt COPYONLY)
624   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace4.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace4.txt COPYONLY)
625   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace5.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace5.txt COPYONLY)
626   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace6.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace6.txt COPYONLY)
627   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace7.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace7.txt COPYONLY)
628   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace8.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace8.txt COPYONLY)
629   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace9.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace9.txt COPYONLY)
630   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace10.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace10.txt COPYONLY)
631   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace11.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace11.txt COPYONLY)
632   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace12.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace12.txt COPYONLY)
633   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace13.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace13.txt COPYONLY)
634   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace14.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace14.txt COPYONLY)
635   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace15.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace15.txt COPYONLY)
636   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace16.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace16.txt COPYONLY)
637   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace17.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace17.txt COPYONLY)
638   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace18.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace18.txt COPYONLY)
639   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace19.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace19.txt COPYONLY)
640   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace20.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace20.txt COPYONLY)
641   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace21.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace21.txt COPYONLY)
642   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace22.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace22.txt COPYONLY)
643   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace23.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace23.txt COPYONLY)
644   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace24.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace24.txt COPYONLY)
645   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace25.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace25.txt COPYONLY)
646   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace26.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace26.txt COPYONLY)
647   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace27.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace27.txt COPYONLY)
648   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace28.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace28.txt COPYONLY)
649   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace29.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace29.txt COPYONLY)
650   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace30.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace30.txt COPYONLY)
651   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace31.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace31.txt COPYONLY)
652
653 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/compute_only.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only.txt COPYONLY)
654 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions0.txt COPYONLY)
655 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions1.txt COPYONLY)
656 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/empty.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty.txt COPYONLY)
657 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/empty/actions0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions0.txt COPYONLY)
658 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/empty/actions1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions1.txt COPYONLY)
659 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/mixed.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed.txt COPYONLY)
660 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/mixed/actions0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions0.txt COPYONLY)
661 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/mixed/actions1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions1.txt COPYONLY)
662 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/workload_compute ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute COPYONLY)
663 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive COPYONLY)
664 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive2 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive2 COPYONLY)
665 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/workload_compute_simple ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_simple COPYONLY)
666 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time COPYONLY)
667 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time_and_resources ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time_and_resources COPYONLY)
668
669   set(generated_files_to_clean
670     ${generated_files_to_clean}
671     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt
672     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt
673     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt
674     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt
675     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt
676     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt
677     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt
678     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt
679     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt
680     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt
681     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt
682     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt
683     ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile
684     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file
685     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README
686     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt
687     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace0.txt
688     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace1.txt
689     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace2.txt
690     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace3.txt
691     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace4.txt
692     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace5.txt
693     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace6.txt
694     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace7.txt
695     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace8.txt
696     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace9.txt
697     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace10.txt
698     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace11.txt
699     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace12.txt
700     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace13.txt
701     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace14.txt
702     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace15.txt
703     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace16.txt
704     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace17.txt
705     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace18.txt
706     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace19.txt
707     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace20.txt
708     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace21.txt
709     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace22.txt
710     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace23.txt
711     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace24.txt
712     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace25.txt
713     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace26.txt
714     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace27.txt
715     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace28.txt
716     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace29.txt
717     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace30.txt
718     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace31.txt
719     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only.txt
720     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions0.txt
721     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions1.txt
722     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty.txt
723     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions0.txt
724     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions1.txt
725     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed.txt
726     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions0.txt
727     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions1.txt
728     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/replay_multiple_manual.tesh
729     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute
730     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive
731     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive2
732     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_simple
733     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty1
734     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2
735     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_resources
736     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time
737     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time_and_resources
738     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed1
739     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2
740     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_resources
741     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time
742     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time_and_resources
743     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_nojob
744     )
745 endif()
746
747 SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
748   "${generated_files_to_clean}")
749
750 ### Define source packages for Libs
751 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/DefinePackages.cmake)
752
753 ### Build some Maintainer files
754 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MaintainerMode.cmake)
755 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/UnitTesting.cmake)
756
757 ### Make Libs
758 if(NOT WIN32)
759   include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLib.cmake)
760 else()
761   include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLibWin.cmake)
762 endif()
763
764 if(enable_java)
765   include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Java.cmake)
766 endif()
767
768 # Python binding, generated with pybind11
769 set(PYBIND11_CPP_STANDARD -std=c++11)
770 find_package(pybind11 2.2.0)
771 if(NOT PYTHONLIBS_FOUND)
772   set(pybind11_FOUND OFF)
773 endif()
774 option(enable_python "Whether the Python bindings are activated." ${pybind11_FOUND}) # ON by default if dependencies are met
775
776 if("${CMAKE_SYSTEM}" MATCHES "FreeBSD" AND enable_model-checking AND enable_python)
777   message(WARNING "FreeBSD + Model-Checking + Python = too much for now. Disabling python")
778   set(enable_python FALSE)
779 endif()
780
781 if(enable_python)
782   if(pybind11_FOUND)
783     pybind11_add_module(python-bindings src/bindings/python/simgrid_python.cpp)
784     set_source_files_properties(src/bindings/python/simgrid_python.cpp PROPERTIES COMPILE_FLAGS -std=c++14)
785     target_link_libraries(python-bindings PUBLIC simgrid)
786     set_target_properties(python-bindings PROPERTIES LIBRARY_OUTPUT_NAME simgrid)
787     set_property(TARGET python-bindings
788                  APPEND PROPERTY INCLUDE_DIRECTORIES "${INTERNAL_INCLUDES}")
789   else()
790     message(FATAL_ERROR "Please install pybind11-dev to build the Python bindings (or disable that option).")
791   endif()
792 endif()
793 mark_as_advanced(PYBIND11_PYTHON_VERSION)
794 mark_as_advanced(pybind11_DIR)
795
796 ### Make tests
797 if(enable_memcheck_xml)
798   set(enable_memcheck true)
799 endif()
800
801 INCLUDE(CTest)
802 ENABLE_TESTING()
803 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Tests.cmake)
804 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/CTestConfig.cmake)
805
806 ### Define subdirectories
807 foreach(cmakefile ${CMAKEFILES_TXT})
808   string(REPLACE "/CMakeLists.txt" "" repository ${cmakefile})
809   add_subdirectory("${CMAKE_HOME_DIRECTORY}/${repository}")
810 endforeach()
811
812 ### Setup the distrib
813 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Distrib.cmake)
814
815 ### Build the docs if asked to
816 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Documentation.cmake)
817
818 ### Print the result of configuration
819 message("")
820 message("##########################################")
821 message("#### Content of src/internal_config.h ####")
822 message("##########################################")
823 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h config_output)
824 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 10) # Pass the file header
825 foreach(line ${config_output})
826   message("   ${line}")
827 endforeach()
828 message("##########################################")
829 message("####   Content of simgrid/config.h    ####")
830 message("##########################################")
831 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h config_output)
832 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 -1) # Pass the file header
833 foreach(line ${config_output})
834   message("   ${line}")
835 endforeach()
836 message("##########################################")
837 message("####   End of configuration headers   ####")
838 message("##########################################")
839
840 message("\nConfiguration of package `simgrid':")
841 message("        Home directory ..............: ${CMAKE_HOME_DIRECTORY}")
842 message("        Build Name ..................: ${BUILDNAME}")
843 message("        Cmake Generator .............: ${CMAKE_GENERATOR}")
844 message("        Site ........................: ${SITE}")
845 message("        Install prefix ..............: ${CMAKE_INSTALL_PREFIX}")
846 if(release)
847   message("        Release .....................: simgrid-${release_version}${SIMGRID_VERSION_EXTRA} (release build)")
848 else()
849   message("        Release .....................: simgrid-${release_version}${SIMGRID_VERSION_EXTRA} (development build)")
850 endif()
851 message("")
852 message("        Compiler: C .................: ${CMAKE_C_COMPILER} (id: ${CMAKE_C_COMPILER_ID})")
853 message("                version .............: ${CMAKE_C_COMPILER_VERSION}")
854 message("                is gnu ..............: ${CMAKE_COMPILER_IS_GNUCC}")
855 message("        Compiler: C++ ...............: ${CMAKE_CXX_COMPILER} (id: ${CMAKE_CXX_COMPILER_ID})")
856 message("                version .............: ${CMAKE_CXX_COMPILER_VERSION}")
857 if(${Java_FOUND})
858   message("        Compiler: Javac .............: ${Java_JAVAC_EXECUTABLE}")
859   message("                version .............: ${Java_VERSION_STRING}")
860   message("                runtime .............: ${Java_JAVA_EXECUTABLE}")
861 endif()
862 if(CMAKE_Fortran_COMPILER)
863   message("        Compiler: Fortran ...........: ${SMPI_Fortran_COMPILER} (id: ${CMAKE_Fortran_COMPILER_ID})")
864   message("                version .............: ${CMAKE_Fortran_COMPILER_VERSION}")
865 endif()
866 message("        Linker: .....................: ${CMAKE_LINKER}")
867 message("                version .............: ${LINKER_VERSION}")
868 message("        Make program: ...............: ${CMAKE_MAKE_PROGRAM}")
869 message("")
870 message("        CFlags ......................: ${CMAKE_C_FLAGS}")
871 message("        CXXFlags ....................: ${CMAKE_CXX_FLAGS}")
872 message("        LDFlags .....................: ${CMAKE_C_LINK_FLAGS}")
873 message("        with LTO ....................: ${enable_lto}")
874 message("")
875
876 if (SIMGRID_HAVE_NS3)
877   message("        Compile NS-3 ................: yes (path: ${NS3_PATH})")
878 else()
879   message("        Compile NS-3 ................: NO  (hint: ${NS3_HINT})")
880 endif()
881
882 if (${Java_FOUND})
883   message("        Compile Java ................: yes")
884   message("          Native lib in jar .........: ${enable_lib_in_jar}")
885 else()
886   message("        Compile Java ................: NO")
887 endif()
888 if(pybind11_FOUND)
889   message("        Compile Python bindings .....: ${enable_python}")
890   message("          module ....................: ${PYTHON_MODULE_PREFIX}simgrid${PYTHON_MODULE_EXTENSION}")
891 else()
892   message("        Compile Python bindings .....: NO (disabled, or pybind11 not found)")
893 endif()
894 message("        Compile Lua .................: ${SIMGRID_HAVE_LUA}")
895 message("        Compile Smpi ................: ${HAVE_SMPI}")
896 message("          Smpi fortran ..............: ${SMPI_FORTRAN}")
897 message("          MPICH3 testsuite ..........: ${enable_smpi_MPICH3_testsuite}")
898 message("          Privatization .............: ${HAVE_PRIVATIZATION}")
899 message("          PAPI support...............: ${HAVE_PAPI}")
900 message("        Compile Boost.Context support: ${HAVE_BOOST_CONTEXTS}")
901 message("")
902 message("        Maintainer mode .............: ${enable_maintainer_mode}")
903 message("        Documentation................: ${enable_documentation}")
904 message("        Model checking ..............: ${SIMGRID_HAVE_MC}")
905 message("        Jedule  mode ................: ${SIMGRID_HAVE_JEDULE}")
906 message("        Graphviz mode ...............: ${HAVE_GRAPHVIZ}")
907 message("        Mallocators .................: ${enable_mallocators}")
908 message("")
909 message("        Simgrid dependencies ........: ${SIMGRID_DEP}")
910 message("")
911
912 execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/Testing/Notes/)
913 file(WRITE ${PROJECT_BINARY_DIR}/Testing/Notes/Build  "GIT version : ${GIT_VERSION}\n")
914 file(APPEND ${PROJECT_BINARY_DIR}/Testing/Notes/Build "Release     : simgrid-${release_version}\n")
915
916 INCLUDE(Dart)