Logo AND Algorithmique Numérique Distribuée

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