X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/3cf8dfbfab4595b3e7ae85d3cd89ce9dbcdd7a24..4c0f097ce86c3fee37663cfcf88cf3d3dc8da088:/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 48070fd9d8..58aa7888c7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,63 +16,55 @@ endif() ## ## 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() ### 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). + # 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) @@ -98,8 +90,8 @@ 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 @@ -110,12 +102,6 @@ else() 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}") @@ -132,7 +118,7 @@ else() endif() endif() -exec_program("${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 @@ -169,14 +155,12 @@ ELSE() 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}) @@ -185,21 +169,26 @@ include_directories(${INCLUDES}) include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Option.cmake) ### Determine the assembly flavor that we need today +set(HAVE_RAW_CONTEXTS 0) include(CMakeDetermineSystem) IF(CMAKE_SYSTEM_PROCESSOR MATCHES ".86|AMD64|amd64") IF(${ARCH_32_BITS}) message(STATUS "System processor: i686 (${CMAKE_SYSTEM_PROCESSOR}, 32 bits)") set(PROCESSOR_i686 1) + set(PROCESSOR_x86_64 0) ELSE() message(STATUS "System processor: x86_64 (${CMAKE_SYSTEM_PROCESSOR}, 64 bits)") + set(PROCESSOR_i686 0) set(PROCESSOR_x86_64 1) ENDIF() if (WIN32) - message(STATUS "Disable fast raw contextes on Windows.") + message(STATUS "Disable fast raw contexts on Windows.") else() set(HAVE_RAW_CONTEXTS 1) endif() - +ELSE() + set(PROCESSOR_i686 0) + set(PROCESSOR_x86_64 0) ENDIF() include(CheckFunctionExists) @@ -211,7 +200,6 @@ include(CheckSymbolExists) set(HAVE_GRAPHVIZ 0) include(FindGraphviz) -include(FindLibSigc++) set(HAVE_LUA 0) if(enable_lua) @@ -239,36 +227,60 @@ else() 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_LIBRARY_EXISTS(pthread sem_init "" HAVE_SEM_INIT_LIB) CHECK_LIBRARY_EXISTS(pthread sem_open "" HAVE_SEM_OPEN_LIB) +set(HAVE_PTHREAD_SETAFFINITY 0) CHECK_LIBRARY_EXISTS(pthread pthread_setaffinity_np "" HAVE_PTHREAD_SETAFFINITY) if(CMAKE_SYSTEM_NAME MATCHES "Darwin") @@ -281,7 +293,7 @@ else() set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE") endif() -CHECK_INCLUDE_FILE("valgrind/valgrind.h" HAVE_VALGRIND_VALGRIND_H) +CHECK_INCLUDE_FILE("valgrind/valgrind.h" HAVE_VALGRIND_H) CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H) CHECK_INCLUDE_FILE("execinfo.h" HAVE_EXECINFO_H) CHECK_INCLUDE_FILE("signal.h" HAVE_SIGNAL_H) @@ -290,6 +302,7 @@ CHECK_INCLUDE_FILE("sys/sysctl.h" HAVE_SYS_SYSCTL_H) 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) @@ -299,21 +312,19 @@ CHECK_FUNCTION_EXISTS(process_vm_readv HAVE_PROCESS_VM_READV) CHECK_FUNCTION_EXISTS(mmap HAVE_MMAP) CHECK_SYMBOL_EXISTS(vasprintf stdio.h HAVE_VASPRINTF) -if(MINGW) +if(MINGW) # The detection of vasprintf fails on MinGW, assumingly because it's # defined as an inline function in stdio.h instead of a regular # function. So force the result to be 1 despite of the test. set(HAVE_VASPRINTF 1) endif() - #Check if __thread is defined execute_process( - COMMAND "${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_thread_storage.c" + COMMAND "${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_thread_storage.c -o testprog" WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - RESULT_VARIABLE HAVE_thread_storage_run - ) - + RESULT_VARIABLE HAVE_thread_storage_run) +file(REMOVE testprog) if(HAVE_thread_storage_run) set(HAVE_THREAD_LOCAL_STORAGE 1) else() @@ -338,26 +349,26 @@ endif() if(enable_jedule) set(HAVE_JEDULE 1) +else() + set(HAVE_JEDULE 0) endif() if(enable_mallocators) - SET(MALLOCATOR_IS_WANTED 1) + SET(HAVE_MALLOCATOR 1) else() - SET(MALLOCATOR_IS_WANTED 0) + SET(HAVE_MALLOCATOR 0) endif() if(enable_model-checking AND HAVE_MMALLOC) SET(HAVE_MC 1) - SET(MMALLOC_WANT_OVERRIDE_LEGACY 1) include(FindLibunwind) include(FindLibdw) else() if(enable_model-checking) - message(STATUS "Warning: support for model-checking has been disabled because HAVE_MMALLOC is false") + message(STATUS "Warning: support for model-checking has been disabled because you are missing either mmap or __thread.") endif() SET(HAVE_MC 0) SET(HAVE_MMALLOC 0) - SET(MMALLOC_WANT_OVERRIDE_LEGACY 0) endif() if(enable_smpi) @@ -373,54 +384,53 @@ if(enable_smpi) message (STATUS "Warning: no support for SMPI automatic privatization on this platform") SET(HAVE_PRIVATIZATION 0) endif() +else() + SET(HAVE_SMPI 0) endif() #-------------------------------------------------------------------------------------------------- ### 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 if(HAVE_SEM_OPEN_LIB) execute_process(COMMAND ${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_sem_open.c -lpthread -o sem_open - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - OUTPUT_VARIABLE HAVE_SEM_OPEN_compil + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + OUTPUT_VARIABLE HAVE_SEM_OPEN_compil ) # Test sem_open by compiling: @@ -436,9 +446,9 @@ if(HAVE_PTHREAD) # If we're not crosscompiling, we check by executing the program: if (HAVE_SEM_OPEN AND NOT CMAKE_CROSSCOMPILING) execute_process(COMMAND ./sem_open - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - RESULT_VARIABLE HAVE_SEM_OPEN_run - OUTPUT_VARIABLE var_compil + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + RESULT_VARIABLE HAVE_SEM_OPEN_run + OUTPUT_VARIABLE var_compil ) if (NOT HAVE_SEM_OPEN_run) set(HAVE_SEM_OPEN 1) @@ -456,15 +466,15 @@ if(HAVE_PTHREAD) endif() endif() file(REMOVE sem_open) - else() set(HAVE_SEM_OPEN 0) endif() if(HAVE_SEM_INIT_LIB) execute_process(COMMAND ${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_sem_init.c -lpthread -o sem_init - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - RESULT_VARIABLE HAVE_SEM_INIT_run OUTPUT_VARIABLE HAVE_SEM_INIT_compil) + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + RESULT_VARIABLE HAVE_SEM_INIT_run + OUTPUT_VARIABLE HAVE_SEM_INIT_compil) # Test sem_init by compiling: if(HAVE_SEM_INIT_compil) @@ -479,9 +489,9 @@ if(HAVE_PTHREAD) # If we're not crosscompiling, we check by executing the program: if (HAVE_SEM_INIT AND NOT CMAKE_CROSSCOMPILING) execute_process(COMMAND ./sem_init - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - RESULT_VARIABLE HAVE_SEM_INIT_run - OUTPUT_VARIABLE var_compil + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + RESULT_VARIABLE HAVE_SEM_INIT_run + OUTPUT_VARIABLE var_compil ) if (NOT HAVE_SEM_INIT_run) set(HAVE_SEM_INIT 1) @@ -509,7 +519,6 @@ if(HAVE_PTHREAD) message("-- Support for thread context factory ok.") endif() - set(HAVE_UCONTEXT_CONTEXTS 0) if(NOT HAVE_UCONTEXT_H) message("-- No ucontext factory: not found.") @@ -519,7 +528,7 @@ elseif(APPLE) 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) @@ -566,7 +575,7 @@ else() endif() endif() # If the test ran well, remove the test binary -execute_process(COMMAND ${CMAKE_COMMAND} -E remove test_stackgrowth) +file(REMOVE test_stackgrowth) #-------------------------------------------------------------------------------------------------- ### check for addr2line @@ -579,65 +588,72 @@ endif() ## GIT version check ## if(EXISTS ${CMAKE_HOME_DIRECTORY}/.git/) - execute_process(COMMAND git remote - COMMAND head -n 1 - WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.git/ - OUTPUT_VARIABLE remote - RESULT_VARIABLE ret - ) - string(REPLACE "\n" "" remote "${remote}") + execute_process( + COMMAND git remote + COMMAND head -n 1 + WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.git/ + OUTPUT_VARIABLE remote + OUTPUT_STRIP_TRAILING_WHITESPACE) #message(STATUS "Git remote: ${remote}") execute_process(COMMAND git config --get remote.${remote}.url - WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.git/ - OUTPUT_VARIABLE url - RESULT_VARIABLE ret - ) - string(REPLACE "\n" "" url "${url}") + WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.git/ + OUTPUT_VARIABLE url + OUTPUT_STRIP_TRAILING_WHITESPACE) #message(STATUS "Git url: ${url}") if(url) execute_process(COMMAND git --git-dir=${CMAKE_HOME_DIRECTORY}/.git log --pretty=oneline --abbrev-commit -1 - WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.git/ - OUTPUT_VARIABLE GIT_VERSION - RESULT_VARIABLE ret - ) - string(REPLACE "\n" "" GIT_VERSION "${GIT_VERSION}") + WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.git/ + 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 - RESULT_VARIABLE ret - ) - string(REPLACE "\n" "" GIT_DATE "${GIT_DATE}") + 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 - RESULT_VARIABLE ret - ) - string(REPLACE "\n" "" SIMGRID_GITHASH "${SIMGRID_GITHASH}") - + WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.git/ + OUTPUT_VARIABLE SIMGRID_GITHASH + OUTPUT_STRIP_TRAILING_WHITESPACE) endif() elseif(EXISTS ${CMAKE_HOME_DIRECTORY}/.gitversion) 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 ############################################# -configure_file("${CMAKE_HOME_DIRECTORY}/tools/cmake/src/internal_config.h.in" "${CMAKE_BINARY_DIR}/src/internal_config.h" @ONLY IMMEDIATE) -configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid_config.h.in" "${CMAKE_BINARY_DIR}/include/simgrid_config.h" @ONLY IMMEDIATE) + +# gcc makes no difference between "#define HAVE_FOOBAR" and "#define HAVE_FOOBAR 0" by default, +# but this too error prone. If you forget to include the config.h, you get weird segfaults. +# If you include it everywhere, everything gets recompiled everytime. +# 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_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() + set(${var} 0) + endif() +endforeach() + +# Avoid triggering a (full) rebuild by touching the files if they did not really change +configure_file("${CMAKE_HOME_DIRECTORY}/tools/cmake/src/internal_config.h.in" "${CMAKE_BINARY_DIR}/src/internal_config.h.generated" @ONLY IMMEDIATE) +configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid_config.h.in" "${CMAKE_BINARY_DIR}/include/simgrid_config.h.generated" @ONLY IMMEDIATE) +execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/internal_config.h.generated ${CMAKE_BINARY_DIR}/src/internal_config.h) +execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid_config.h.generated ${CMAKE_BINARY_DIR}/include/simgrid_config.h) +file(REMOVE ${CMAKE_BINARY_DIR}/src/internal_config.h.generated) +file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid_config.h.generated) # We need two versions of the SMPI scripts because they contain the path to the library # so, it depends of whether SimGrid is installed, or run from the sources (during the build) -file(READ ${CMAKE_HOME_DIRECTORY}/src/smpi/smpitools.sh SMPITOOLS_SH) # Definitions shared amongst all scripts, inlined in each of them + +file(READ ${CMAKE_HOME_DIRECTORY}/src/smpi/smpitools.sh SMPITOOLS_SH) # Definitions shared amongst all SMPI scripts, inlined in each of them ### SMPI script used when simgrid is installed set(exec_prefix ${CMAKE_INSTALL_PREFIX}) @@ -683,9 +699,7 @@ set(generated_headers_to_install ${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} @@ -714,7 +728,7 @@ if(NOT "${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_HOME_DIRECTORY}") 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) @@ -869,12 +883,22 @@ endif() message("") message("##########################################") message("#### Content of src/internal_config.h ####") +message("##########################################") file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h config_output) -LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8) # Pass the file header +LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 10) # Pass the file header foreach(line ${config_output}) message(" ${line}") endforeach() -message("#### end of src/internal_config.h ####") +message("##########################################") +message("#### Content of simgrid_config.h ####") +message("##########################################") +file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid_config.h config_output) +LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 -1) # Pass the file header +foreach(line ${config_output}) + message(" ${line}") +endforeach() +message("##########################################") +message("#### End of configuration headers ####") message("##########################################") message("\nConfiguration of package `simgrid':") @@ -941,13 +965,12 @@ message(" Documentation................: ${enable_documentation}") 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}") message("") -exec_program("${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/Testing/Notes/" OUTPUT_VARIABLE OKIDOKI) +execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/Testing/Notes/) file(WRITE ${PROJECT_BINARY_DIR}/Testing/Notes/Build "GIT version : ${GIT_VERSION}\n") file(APPEND ${PROJECT_BINARY_DIR}/Testing/Notes/Build "Release : simgrid-${release_version}\n")