Logo AND Algorithmique Numérique Distribuée

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