X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/98aaf6c28dde5365ca65b9b18182042f45867e70..fce44eb4a4d1c1793c2a1d2c40b1a1b30c413136:/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b3995b14f..8992f7f1eb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -110,12 +110,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 +126,8 @@ 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 @@ -185,21 +180,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) @@ -239,7 +239,8 @@ 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() @@ -269,6 +270,7 @@ 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") @@ -299,21 +301,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) - - +file(REMOVE testprog) if(HAVE_thread_storage_run) set(HAVE_THREAD_LOCAL_STORAGE 1) else() @@ -338,6 +338,8 @@ endif() if(enable_jedule) set(HAVE_JEDULE 1) +else() + set(HAVE_JEDULE 0) endif() if(enable_mallocators) @@ -371,6 +373,8 @@ 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() #-------------------------------------------------------------------------------------------------- @@ -417,8 +421,8 @@ if(HAVE_PTHREAD) 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: @@ -434,9 +438,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) @@ -461,8 +465,9 @@ if(HAVE_PTHREAD) 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) @@ -477,9 +482,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) @@ -564,7 +569,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 @@ -577,64 +582,67 @@ 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 ############################################# + +# 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_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) -exec_program("${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/internal_config.h.generated ${CMAKE_BINARY_DIR}/src/internal_config.h") -exec_program("${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid_config.h.generated ${CMAKE_BINARY_DIR}/include/simgrid_config.h") +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) @@ -875,7 +883,7 @@ 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() @@ -961,7 +969,7 @@ 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")