Logo AND Algorithmique Numérique Distribuée

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