Logo AND Algorithmique Numérique Distribuée

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