##
## Check the C/C++ standard that we need
## See also tools/cmake/GCCFlags.cmake that sets our paranoid warning flags
-if (MSVC)
- message("-- You are compiling SimGrid with MicroSoft Visual C. Good luck.")
-
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_SCL_SECURE_NO_WARNINGS")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_SCL_SECURE_NO_WARNINGS")
-else() # gcc or clang
- INCLUDE(CheckCCompilerFlag)
- CHECK_C_COMPILER_FLAG(-fstack-cleaner HAVE_C_STACK_CLEANER)
-
- ## Request full debugging flags
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3")
- set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -g")
-
- if (CMAKE_COMPILER_IS_GNUCC)
- if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.7")
- message(FATAL_ERROR
- "SimGrid needs at least g++ version 4.7 to compile but you have ${CMAKE_CXX_COMPILER_VERSION}."
- "You need a sufficient support of c++11 to compile SimGrid.")
- endif()
+INCLUDE(CheckCCompilerFlag)
+CHECK_C_COMPILER_FLAG(-fstack-cleaner HAVE_C_STACK_CLEANER)
+
+## Request full debugging flags
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3")
+set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -g")
+
+if (CMAKE_COMPILER_IS_GNUCC)
+ if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.7")
+ message(FATAL_ERROR
+ "SimGrid needs at least g++ version 4.7 to compile but you have ${CMAKE_CXX_COMPILER_VERSION}."
+ "You need a sufficient support of c++11 to compile SimGrid.")
endif()
+endif()
- ## We need a decent support of the c++11 standard
- include(CheckCXXCompilerFlag)
- CHECK_CXX_COMPILER_FLAG("-std=gnu++11" COMPILER_SUPPORTS_CXX11)
- if(COMPILER_SUPPORTS_CXX11)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
- else()
- message(FATAL_ERROR
- "The compiler ${CMAKE_CXX_COMPILER} (v${CMAKE_CXX_COMPILER_VERSION}) has no C++11 support. "
- "Please use a decent C++ compiler.")
- endif()
+## We need a decent support of the c++11 standard
+include(CheckCXXCompilerFlag)
+CHECK_CXX_COMPILER_FLAG("-std=gnu++11" COMPILER_SUPPORTS_CXX11)
+if(COMPILER_SUPPORTS_CXX11)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
+else()
+ message(FATAL_ERROR
+ "The compiler ${CMAKE_CXX_COMPILER} (v${CMAKE_CXX_COMPILER_VERSION}) has no C++11 support. "
+ "Please use a decent C++ compiler.")
+endif()
- ### And we need C11 standard, too
- include(CheckCCompilerFlag)
- CHECK_C_COMPILER_FLAG("-std=gnu11" COMPILER_SUPPORTS_C11)
- if(COMPILER_SUPPORTS_C11)
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu11")
- else()
- message(FATAL_ERROR
- "The compiler ${CMAKE_C_COMPILER} (v${CMAKE_C_COMPILER_VERSION}) has no C11 support. "
- "Please use a decent C compiler "
- "(note that c++11 support of ${CMAKE_CXX_COMPILER} seems ok).")
- endif()
- if(APPLE AND (CMAKE_C_COMPILER_VERSION VERSION_LESS "4.6"))
- ### gcc 4.[1-5] cannot compile ucontext on OSX
- message(STATUS "Ucontext can't be used with this version of gcc (must be greater than 4.5)")
- set(HAVE_UCONTEXT_H 0)
- endif()
-endif() # NOT MSVC
+### And we need C11 standard, too
+include(CheckCCompilerFlag)
+CHECK_C_COMPILER_FLAG("-std=gnu11" COMPILER_SUPPORTS_C11)
+if(COMPILER_SUPPORTS_C11)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu11")
+else()
+ message(FATAL_ERROR
+ "The compiler ${CMAKE_C_COMPILER} (v${CMAKE_C_COMPILER_VERSION}) has no C11 support. "
+ "Please use a decent C compiler "
+ "(note that c++11 support of ${CMAKE_CXX_COMPILER} seems ok).")
+endif()
+if(APPLE AND (CMAKE_C_COMPILER_VERSION VERSION_LESS "4.6"))
+ ### gcc 4.[1-5] cannot compile ucontext on OSX
+ message(STATUS "Ucontext can't be used with this version of gcc (must be greater than 4.5)")
+ set(HAVE_UCONTEXT_H 0)
+endif()
+
+
+### Setup Options
+include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Option.cmake)
### SMPI vs. Fortran
-if ((NOT DEFINED enable_smpi OR enable_smpi) AND NOT APPLE) # smpi is enabled by default
- # Call enable_language(Fortran) in order to load the build rules for
- # this language, needed by teshsuite/smpi/mpich-test/. Use
- # CMAKE_FORCE_Fortran_COMPILER to bypass checks for a working
- # compiler (smpiff don't exist at configure time).
+if ((NOT DEFINED enable_smpi) OR enable_smpi)
+ if(enable_fortran)
+ include(FindGFortran)
+ else()
+ SET(SMPI_FORTRAN 0)
+ endif()
+
+ if(NOT APPLE) # smpi is enabled by default
+ # Call enable_language(Fortran) in order to load the build rules for this language, needed by
+ # teshsuite/smpi/mpich-test/. Use CMAKE_FORCE_Fortran_COMPILER to bypass checks for a working compiler (smpiff
+ # doesn't exist at configure time).
include(CMakeForceCompiler)
if(NOT COMMAND CMAKE_FORCE_Fortran_COMPILER)
MACRO(CMAKE_FORCE_Fortran_COMPILER compiler id)
endif()
CMAKE_FORCE_Fortran_COMPILER(smpiff smpiff)
enable_language(Fortran OPTIONAL)
+ endif()
endif()
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
set(SIMGRID_VERSION_MAJOR "3")
set(SIMGRID_VERSION_MINOR "13")
-set(SIMGRID_VERSION_PATCH "0")
-set(SIMGRID_VERSION_EXTRA "-devel") # Extra words to add to version string (e.g. -rc1)
+set(SIMGRID_VERSION_PATCH "90")
+set(SIMGRID_VERSION_EXTRA "-prealpha") # Extra words to add to version string (e.g. -rc1)
set(SIMGRID_VERSION_DATE "2016") # Year for copyright information
endif()
set(SIMGRID_VERSION_STRING "SimGrid version ${release_version}${SIMGRID_VERSION_EXTRA}")
-set(SIMGRID_VERSION_BANNER "SIMGRID_VERSION_STRING\\nCopyright (c) 2004-${SIMGRID_VERSION_DATE}. The Simgrid Team.")
-if(release)
- set(SIMGRID_VERSION_BANNER "${SIMGRID_VERSION_BANNER}\\nRelease build")
-else()
- set(SIMGRID_VERSION_BANNER "${SIMGRID_VERSION_BANNER}\\nDevelopment build")
-endif()
set(libsimgrid_version "${release_version}")
set(libsimgrid-java_version "${release_version}")
endif()
endif()
-execute_process(COMMAND ${CMAKE_LINKER} --version
- OUTPUT_VARIABLE LINKER_VERSION)
+execute_process(COMMAND ${CMAKE_LINKER} --version OUTPUT_VARIABLE LINKER_VERSION)
string(REGEX MATCH "[0-9].[0-9]*" LINKER_VERSION "${LINKER_VERSION}")
### Find programs and paths
ENDIF()
if(WIN32)
-
set(CMAKE_INCLUDE_WIN "${CMAKE_C_COMPILER}")
set(CMAKE_LIB_WIN "${CMAKE_C_COMPILER}")
string(REGEX REPLACE "/bin/gcc.*" "/include" CMAKE_INCLUDE_WIN "${CMAKE_INCLUDE_WIN}")
string(REGEX REPLACE "/bin/gcc.*" "/lib" CMAKE_LIB_WIN "${CMAKE_LIB_WIN}")
set(INCLUDES ${INCLUDES} ${CMAKE_INCLUDE_WIN})
unset(CMAKE_INCLUDE_WIN)
-
endif()
include_directories(${INCLUDES})
-### Setup Options
-include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Option.cmake)
+
### Determine the assembly flavor that we need today
set(HAVE_RAW_CONTEXTS 0)
set(HAVE_GRAPHVIZ 0)
include(FindGraphviz)
-include(FindLibSigc++)
set(HAVE_LUA 0)
if(enable_lua)
if(WIN32)
set(Boost_USE_STATIC_LIBS 1)
endif()
+set(HAVE_PAPI 0)
+if(enable_smpi_papi)
+ include(FindPAPI)
+ if (NOT HAVE_PAPI)
+ message(FATAL_ERROR "Cannot find PAPI. Please install it (apt-get install papi-tools libpapi-dev) or disable PAPI bindings.")
+ endif()
+endif()
find_package(Boost 1.48)
if(Boost_FOUND)
else()
message(FATAL_ERROR "Failed to find Boost libraries."
"Did you install libboost-dev and libboost-context-dev?"
- "(libboost-context-dev is optional)")
+ "(libboost-context-dev is optional)"
+ "SimGrid requires Boost >= 1.48.0")
endif()
endif()
-# Try again to see if we have libboost-context
-find_package(Boost 1.42 COMPONENTS context)
-set(Boost_FOUND 1) # We don't care of whether this component is missing
+#Boost context 1.61 will break compatibility with our implementation.
+#Warn users about that
+find_package(Boost 1.61 COMPONENTS context)
if(Boost_FOUND AND Boost_CONTEXT_FOUND)
- # We should use feature detection for this instead:
- if (Boost_VERSION LESS 105600)
- message("Found Boost.Context API v1")
- set(HAVE_BOOST_CONTEXTS 1)
+ message("WARNING : our implementation of Boost context factory is not compatible with Boost >=1.61 yet.")
+
+ set(Boost_FOUND 1)
+ set(HAVE_BOOST_CONTEXTS 0)
+else()
+# Try again to see if we have libboost-context
+ find_package(Boost 1.42 COMPONENTS context)
+ set(Boost_FOUND 1) # We don't care of whether this component is missing
+
+ if(Boost_FOUND AND Boost_CONTEXT_FOUND)
+ # We should use feature detection for this instead:
+ if (Boost_VERSION LESS 105600)
+ message("Found Boost.Context API v1")
+ set(HAVE_BOOST_CONTEXTS 1)
+ else()
+ message("Found Boost.Context API v2")
+ set(HAVE_BOOST_CONTEXTS 2)
+ endif()
else()
- message("Found Boost.Context API v2")
- set(HAVE_BOOST_CONTEXTS 2)
+ message (" boost : found.")
+ message (" boost-context: missing. Install libboost-context-dev for this optional feature.")
+ set(HAVE_BOOST_CONTEXTS 0)
endif()
-else()
- message (" boost : found.")
- message (" boost-context: missing. Install libboost-context-dev for this optional feature.")
- set(HAVE_BOOST_CONTEXTS 0)
endif()
+# Try again to see if we have libboost-graph
+#find_package(Boost 1.42 COMPONENTS graph)
+#set(Boost_FOUND 1) # We don't care of whether this component is missing
+#
+#if(Boost_FOUND AND Boost_GRAPH_FOUND)
+# set(HAVE_BOOST_GRAPH 1)
+#else()
+# message (" boost : found.")
+# message (" boost-graph : missing. Install libboost-graph-dev for this optional feature.")
+# set(HAVE_BOOST_GRAPH 0)
+#endif()
+
# Checks for header libraries functions.
-CHECK_LIBRARY_EXISTS(execinfo backtrace "" HAVE_BACKTRACE_IN_LIBEXECINFO)
CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_POSIX_GETTIME)
CHECK_LIBRARY_EXISTS(pthread pthread_create "" HAVE_PTHREAD)
CHECK_INCLUDE_FILE("ucontext.h" HAVE_UCONTEXT_H)
CHECK_INCLUDE_FILE("linux/futex.h" HAVE_FUTEX_H)
+CHECK_FUNCTION_EXISTS(backtrace HAVE_BACKTRACE)
CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
CHECK_FUNCTION_EXISTS(getdtablesize HAVE_GETDTABLESIZE)
SET(HAVE_MMALLOC 0)
endif()
+if (enable_model-checking AND enable_ns3)
+ message(FATAL_ERROR "Cannot activate both model-checking and NS3 bindings: NS3 pull too much dependencies for the MC to work")
+endif()
+
if(enable_smpi)
- include(FindGFortran)
SET(HAVE_SMPI 1)
if("${CMAKE_SYSTEM}" MATCHES "Linux")
SET(USE_LIBUTIL 0)
### Check for GNU dynamic linker
CHECK_INCLUDE_FILE("dlfcn.h" HAVE_DLFCN_H)
if (HAVE_DLFCN_H)
- execute_process(COMMAND ${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_gnu_dynlinker.c -ldl -o test_gnu_ld
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
- OUTPUT_VARIABLE HAVE_GNU_LD_compil
- )
- if(HAVE_GNU_LD_compil)
- set(HAVE_GNU_LD 0)
- message(STATUS "Warning: test program toward GNU ld failed to compile:")
- message(STATUS "${HAVE_GNU_LD_comp_output}")
+ execute_process(COMMAND ${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_gnu_dynlinker.c -ldl -o test_gnu_ld
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+ OUTPUT_VARIABLE HAVE_GNU_LD_compil
+ )
+ if(HAVE_GNU_LD_compil)
+ set(HAVE_GNU_LD 0)
+ message(STATUS "Warning: test program toward GNU ld failed to compile:")
+ message(STATUS "${HAVE_GNU_LD_comp_output}")
+ else()
+ execute_process(COMMAND ./test_gnu_ld
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+ RESULT_VARIABLE HAVE_GNU_LD_run
+ OUTPUT_VARIABLE var_exec
+ )
+
+ if(NOT HAVE_GNU_LD_run)
+ set(HAVE_GNU_LD 1)
+ message(STATUS "We are using GNU dynamic linker")
else()
-
- execute_process(COMMAND ./test_gnu_ld
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
- RESULT_VARIABLE HAVE_GNU_LD_run
- OUTPUT_VARIABLE var_exec
- )
-
- if(NOT HAVE_GNU_LD_run)
- set(HAVE_GNU_LD 1)
- message(STATUS "We are using GNU dynamic linker")
- else()
- set(HAVE_GNU_LD 0)
- message(STATUS "Warning: error while checking for GNU ld:")
- message(STATUS "Test output: '${var_exec}'")
- message(STATUS "Exit status: ${HAVE_GNU_LD_run}")
- endif()
- file(REMOVE test_gnu_ld)
+ set(HAVE_GNU_LD 0)
+ message(STATUS "Warning: error while checking for GNU ld:")
+ message(STATUS "Test output: '${var_exec}'")
+ message(STATUS "Exit status: ${HAVE_GNU_LD_run}")
endif()
+ file(REMOVE test_gnu_ld)
+ endif()
endif()
-
#--------------------------------------------------------------------------------------------------
### Initialize of CONTEXT THREADS
set(HAVE_THREAD_CONTEXTS 0)
-
if(HAVE_PTHREAD)
### Test that we have a way to create semaphores
endif()
endif()
file(REMOVE sem_open)
-
else()
set(HAVE_SEM_OPEN 0)
endif()
message("-- Support for thread context factory ok.")
endif()
-
set(HAVE_UCONTEXT_CONTEXTS 0)
if(NOT HAVE_UCONTEXT_H)
message("-- No ucontext factory: <ucontext.h> not found.")
else()
try_compile(compile_makecontext ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_makecontext.c
OUTPUT_VARIABLE compile_makecontext_output)
-
+
#If can have both context
if(compile_makecontext)
set(HAVE_UCONTEXT_CONTEXTS 1)
OUTPUT_VARIABLE GIT_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE)
message(STATUS "Git version: ${GIT_VERSION}")
-
+
execute_process(COMMAND git --git-dir=${CMAKE_HOME_DIRECTORY}/.git log -n 1 --pretty=format:%ai .
WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.git/
OUTPUT_VARIABLE GIT_DATE
OUTPUT_STRIP_TRAILING_WHITESPACE)
message(STATUS "Git date: ${GIT_DATE}")
string(REGEX REPLACE " .*" "" GIT_VERSION "${GIT_VERSION}")
-
+
execute_process(COMMAND git --git-dir=${CMAKE_HOME_DIRECTORY}/.git log --pretty=format:%H -1
WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.git/
OUTPUT_VARIABLE SIMGRID_GITHASH
FILE(STRINGS ${CMAKE_HOME_DIRECTORY}/.gitversion GIT_VERSION)
endif()
-if(GIT_VERSION)
- set(SIMGRID_VERSION_BANNER "${SIMGRID_VERSION_BANNER} at commit ${GIT_VERSION}")
-endif()
-if(GIT_DATE)
- set(SIMGRID_VERSION_BANNER "${SIMGRID_VERSION_BANNER} (${GIT_DATE})")
-endif()
-
### Generate the required headers and scripts
#############################################
# So we include only where needed, and compile with -Wundef to notice the missing includes.
# But cmake sometimes defines to the empty definition (#define HAVE_VALGRIND_H).
# So we have to make sure that everything got a decent value before generating the files.
-foreach(var HAVE_EXECINFO_H HAVE_FUTEX_H HAVE_GETDTABLESIZE HAVE_GETTIMEOFDAY HAVE_MMAP
- HAVE_NANOSLEEP HAVE_POPEN HAVE_POSIX_GETTIME HAVE_PROCESS_VM_READV HAVE_SIGNAL_H
- HAVE_SYS_PARAM_H HAVE_SYS_SYSCTL_H HAVE_SYSCONF HAVE_UCONTEXT_H HAVE_UNISTD_H
- HAVE_VALGRIND_H HAVE_VASPRINTF)
+foreach(var HAVE_BACKTRACE HAVE_EXECINFO_H HAVE_FUTEX_H HAVE_GETDTABLESIZE HAVE_GETTIMEOFDAY HAVE_MMAP HAVE_NANOSLEEP HAVE_POPEN
+ HAVE_POSIX_GETTIME HAVE_PROCESS_VM_READV HAVE_SIGNAL_H HAVE_SYS_PARAM_H HAVE_SYS_SYSCTL_H HAVE_SYSCONF
+ HAVE_UCONTEXT_H HAVE_UNISTD_H HAVE_VALGRIND_H HAVE_VASPRINTF)
if(${var})
set(${var} 1)
else()
${CMAKE_CURRENT_BINARY_DIR}/include/simgrid_config.h
)
-set(generated_headers
- ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h
- )
+set(generated_headers ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h )
set(generated_files_to_clean
${generated_headers}
configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_gather.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt COPYONLY)
configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allgatherv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt COPYONLY)
configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile COPYONLY)
-
+
configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/description_file ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file COPYONLY)
configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/README ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README COPYONLY)
configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/smpi_replay.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt COPYONLY)
message(" Smpi fortran ..............: ${SMPI_FORTRAN}")
message(" MPICH3 testsuite ..........: ${enable_smpi_MPICH3_testsuite}")
message(" Privatization .............: ${HAVE_PRIVATIZATION}")
+message(" PAPI support...............: ${HAVE_PAPI}")
message(" Compile Boost.Context support: ${HAVE_BOOST_CONTEXTS}")
message("")
message(" Maintainer mode .............: ${enable_maintainer_mode}")
message(" Model checking ..............: ${HAVE_MC}")
message(" Jedule mode ................: ${HAVE_JEDULE}")
message(" Graphviz mode ...............: ${HAVE_GRAPHVIZ}")
-message(" Sigc++ mode .................: ${SIMGRID_HAVE_LIBSIG}")
message(" Mallocators .................: ${enable_mallocators}")
message("")
message(" Simgrid dependencies ........: ${SIMGRID_DEP}")