X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/4fede74d6c20d6332d75edcf395a4838619587aa..2e4ecba44c084819a4f16bd827545ed169b2d3be:/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index e1e5d54c42..cabb55c2b6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ -cmake_minimum_required(VERSION 2.6) -# Java requires 2.8.6 -message(STATUS "Cmake version ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}$") +cmake_minimum_required(VERSION 2.8.8) +message(STATUS "Cmake version ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}") +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/tools/cmake/Modules) project(SimGrid C CXX) @@ -30,11 +30,11 @@ else() # gcc or clang set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3") set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -g") - if (CMAKE_COMPILER_IS_GNUCC) - if (COMPILER_CXX_VERSION_MAJOR_MINOR STRLESS "4.7") + 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 " - "(c++11 support of previous versions is too limited).") + "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() @@ -45,7 +45,7 @@ else() # gcc or clang set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") else() message(FATAL_ERROR - "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. " + "The compiler ${CMAKE_CXX_COMPILER} (v${CMAKE_CXX_COMPILER_VERSION}) has no C++11 support. " "Please use a decent C++ compiler.") endif() @@ -56,11 +56,11 @@ else() # gcc or clang set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu11") else() message(FATAL_ERROR - "The compiler ${CMAKE_C_COMPILER} has no C11 support. " + "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 ("4.6" GREATER COMPILER_C_VERSION_MAJOR_MINOR)) + 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) @@ -101,7 +101,7 @@ 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_DATE "2015") # Year for copyright information +set(SIMGRID_VERSION_DATE "2016") # Year for copyright information if(${SIMGRID_VERSION_PATCH} EQUAL "0") set(release_version "${SIMGRID_VERSION_MAJOR}.${SIMGRID_VERSION_MINOR}") @@ -132,43 +132,29 @@ else() endif() endif() -if(${CMAKE_C_COMPILER_ID} STREQUAL "GNU") - exec_program("${CMAKE_C_COMPILER} --version" OUTPUT_VARIABLE "COMPILER_C_VERSION") - exec_program("${CMAKE_CXX_COMPILER} --version" OUTPUT_VARIABLE "COMPILER_CXX_VERSION") - string(REGEX MATCH "[0-9].[0-9].[0-9]" COMPILER_C_VERSION "${COMPILER_C_VERSION}") - string(REGEX MATCH "[0-9].[0-9].[0-9]" COMPILER_CXX_VERSION "${COMPILER_CXX_VERSION}") - - string(REGEX MATCH "^[0-9].[0-9]" COMPILER_C_VERSION_MAJOR_MINOR "${COMPILER_C_VERSION}") - string(REPLACE "${COMPILER_C_VERSION_MAJOR_MINOR}." "" COMPILER_C_VERSION_PATCH "${COMPILER_C_VERSION}") -endif() - exec_program("${CMAKE_LINKER} --version" OUTPUT_VARIABLE "LINKER_VERSION") string(REGEX MATCH "[0-9].[0-9]*" LINKER_VERSION "${LINKER_VERSION}") ### Find programs and paths FIND_PROGRAM(GCOV_PATH gcov) include(FindPerl) -if(NOT PERL_EXECUTABLE) - message(FATAL_ERROR "-- SimGrid cannot be compiled without Perl installed -- sorry. Bailling out.") +if(NOT PERL_FOUND) + message(FATAL_ERROR "Please install Perl to compile SimGrid.") endif() if (APPLE) set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) endif() - -### Set some variables for Cmake SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib) ### Compute the include paths set(INCLUDES ${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/include - ${CMAKE_HOME_DIRECTORY}/src ${CMAKE_HOME_DIRECTORY}/src/include ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/include - ${CMAKE_BINARY_DIR}/src ) if(WIN32) @@ -194,30 +180,13 @@ if(WIN32) 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}) - - if(CMAKE_COMPILER_IS_GNUCC) - set(__GNUC__ 1) - exec_program("${CMAKE_C_COMPILER} --version" OUTPUT_VARIABLE "COMPILER_C_VERSION") - string(REGEX MATCH "[0-9].[0-9].[0-9]" COMPILER_C_VERSION "${COMPILER_C_VERSION}") - string(REGEX MATCH "^[0-9]" COMPILER_C_MAJOR_VERSION "${COMPILER_C_VERSION}") - string(REGEX MATCH "^[0-9].[0-9]" COMPILER_C_MINOR_VERSION "${COMPILER_C_VERSION}") - string(REGEX REPLACE "^${COMPILER_C_MAJOR_VERSION}." "" COMPILER_C_MINOR_VERSION "${COMPILER_C_MINOR_VERSION}") - endif() - - set(NSIS_WIN_VERSION $ENV{PROCESSOR_ARCHITEW6432}) - if(NSIS_WIN_VERSION MATCHES "") - set(NSIS_WIN_VERSION $ENV{PROCESSOR_ARCHITECTURE}) - endif() - if(${NSIS_WIN_VERSION}) - string(TOLOWER ${NSIS_WIN_VERSION} NSIS_WIN_VERSION) - endif() + unset(CMAKE_INCLUDE_WIN) set(_XBT_WIN32 1) - message(STATUS "C_COMPILER ${CMAKE_C_COMPILER} ${COMPILER_C_VERSION_MAJOR_MINOR}") - message(STATUS "CXX_COMPILER ${CMAKE_CXX_COMPILER} ${COMPILER_CXX_VERSION_MAJOR_MINOR}") + message(STATUS "C_COMPILER ${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_VERSION}") + message(STATUS "CXX_COMPILER ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_VERSION}") message(STATUS "CMAKE_RC_COMPILER ${CMAKE_RC_COMPILER}") - message(STATUS "INCLUDE ${CMAKE_INCLUDE_WIN}") message(STATUS "LIB ${CMAKE_LIB_WIN}") message(STATUS "MAKE_PROGRAM ${CMAKE_MAKE_PROGRAM}") message(STATUS "CMAKE_BUILD_TOOL ${CMAKE_BUILD_TOOL}") @@ -232,11 +201,6 @@ include_directories(${INCLUDES}) ### Setup Options include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Option.cmake) -set(CMAKE_MODULE_PATH - ${CMAKE_MODULE_PATH} - ${CMAKE_HOME_DIRECTORY}/tools/cmake/Modules - ) - ### Determine the assembly flavor that we need today include(CMakeDetermineSystem) IF(CMAKE_SYSTEM_PROCESSOR MATCHES ".86|AMD64|amd64") @@ -250,46 +214,23 @@ IF(CMAKE_SYSTEM_PROCESSOR MATCHES ".86|AMD64|amd64") if (MSVC) message(STATUS "Disable fast raw contextes on Microsoft Visual.") else() - set(HAVE_RAWCTX 1) + set(HAVE_RAW_CONTEXTS 1) endif() ENDIF() -if(ARCH_32_BITS) - set(MPI_ADDRESS_SIZE 4) -else() - set(MPI_ADDRESS_SIZE 8) -endif() - include(CheckFunctionExists) include(CheckTypeSize) include(CheckIncludeFile) include(CheckIncludeFiles) include(CheckLibraryExists) include(CheckSymbolExists) -include(TestBigEndian) -TEST_BIG_ENDIAN(BIGENDIAN) +set(HAVE_GRAPHVIZ 0) include(FindGraphviz) include(FindLibSigc++) -if(enable_java) - find_package(Java REQUIRED COMPONENTS Runtime Development) - find_package(JNI REQUIRED) - message("-- [Java] JNI found: ${JNI_FOUND}") - message("-- [Java] JNI include dirs: ${JNI_INCLUDE_DIRS}") - if(enable_maintainer_mode) - find_package(SWIG REQUIRED) - include(UseSWIG) - message("-- [Java] Swig found: ${SWIG_FOUND} (version ${SWIG_VERSION})") - endif() - set(HAVE_Java 1) -endif() -if(enable_scala) - find_package(Scala REQUIRED) - message("-- [Scala] scalac found: ${SCALA_COMPILE}") - set(HAVE_Scala 1) -endif() +set(HAVE_LUA 0) if(enable_lua) include(FindLuaSimgrid) endif() @@ -323,27 +264,30 @@ 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_CONTEXT 1) + set(HAVE_BOOST_CONTEXTS 1) else() message("Found Boost.Context API v2") - set(HAVE_BOOST_CONTEXT 2) + set(HAVE_BOOST_CONTEXTS 2) endif() else() message (" boost : found.") message (" boost-context: missing. Install libboost-context-dev for this optional feature.") - set(HAVE_BOOST_CONTEXT 0) + set(HAVE_BOOST_CONTEXTS 0) endif() # Checks for header libraries functions. CHECK_LIBRARY_EXISTS(dl dlopen "" HAVE_DLOPEN_IN_LIBDL) CHECK_LIBRARY_EXISTS(execinfo backtrace "" HAVE_BACKTRACE_IN_LIBEXECINFO) -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) -CHECK_LIBRARY_EXISTS(pthread sem_timedwait "" HAVE_SEM_TIMEDWAIT_LIB) -CHECK_LIBRARY_EXISTS(pthread pthread_mutex_timedlock "" HAVE_MUTEX_TIMEDLOCK_LIB) CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_POSIX_GETTIME) +if(NOT WIN32) # We don't want to have winpthread-1.dll in the jarfile + 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) + CHECK_LIBRARY_EXISTS(pthread sem_timedwait "" HAVE_SEM_TIMEDWAIT_LIB) + CHECK_LIBRARY_EXISTS(pthread pthread_mutex_timedlock "" HAVE_MUTEX_TIMEDLOCK_LIB) +endif() + if(CMAKE_SYSTEM_NAME MATCHES "Darwin") set(CMAKE_REQUIRED_DEFINITIONS "-D_XOPEN_SOURCE=700 -D_DARWIN_C_SOURCE") elseif(MINGW) @@ -358,6 +302,7 @@ CHECK_INCLUDE_FILE("valgrind/valgrind.h" HAVE_VALGRIND_VALGRIND_H) CHECK_INCLUDE_FILE("socket.h" HAVE_SOCKET_H) CHECK_INCLUDE_FILE("stat.h" HAVE_STAT_H) CHECK_INCLUDE_FILE("sys/stat.h" HAVE_SYS_STAT_H) +CHECK_INCLUDE_FILE("sys/ptrace.h" HAVE_SYS_PTRACE_H) CHECK_INCLUDE_FILE("windows.h" HAVE_WINDOWS_H) CHECK_INCLUDE_FILE("errno.h" HAVE_ERRNO_H) CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H) @@ -435,8 +380,8 @@ if(WIN32) # Those files are not detected despite being present set(HAVE_MAKECONTEXT 1) endif() -set(CONTEXT_UCONTEXT 0) -set(CONTEXT_THREADS 0) +set(HAVE_UCONTEXT_CONTEXTS 0) +set(HAVE_THREAD_CONTEXTS 0) if(enable_jedule) set(HAVE_JEDULE 1) @@ -470,13 +415,15 @@ endif() if(enable_smpi) include(FindGFortran) - #really checks for objdump for privatization - find_package(BinUtils QUIET) SET(HAVE_SMPI 1) - - if( NOT "${CMAKE_OBJDUMP}" MATCHES "CMAKE_OBJDUMP-NOTFOUND" AND HAVE_MMAP) + if("${CMAKE_SYSTEM}" MATCHES "Linux") + SET(USE_LIBUTIL 0) SET(HAVE_PRIVATIZATION 1) + elseif("${CMAKE_SYSTEM}" MATCHES "^FreeBSD") + SET(USE_LIBUTIL 0) + SET(HAVE_PRIVATIZATION 0) else() + message (STATUS "Warning: no support for SMPI automatic privatization on this platform") SET(HAVE_PRIVATIZATION 0) endif() endif() @@ -676,12 +623,12 @@ endif() #If can have both context if(HAVE_UCONTEXT) - set(CONTEXT_UCONTEXT 1) + set(HAVE_UCONTEXT_CONTEXTS 1) message("-- Support for ucontext factory") endif() if(HAVE_PTHREAD) - set(CONTEXT_THREADS 1) + set(HAVE_THREAD_CONTEXTS 1) message("-- Support for thread context factory") endif() @@ -788,11 +735,12 @@ endif() ### check for stackgrowth if (NOT CMAKE_CROSSCOMPILING) - try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR + try_run(RUN_stackgrowth_VAR COMPILE_stackgrowth_VAR ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stackgrowth.c RUN_OUTPUT_VARIABLE stack - ) + COPY_FILE test_stackgrowth + ) endif() if("${stack}" STREQUAL "down") set(PTH_STACKGROWTH "-1") @@ -804,7 +752,7 @@ else() elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686") set(PTH_STACKGROWTH "-1") else() - message(ERROR "Could not figure the stack direction.") + message(FATAL_ERROR "Could not figure out the stack direction. Test prog returned: ${stack}; CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}.") endif() endif() @@ -812,123 +760,8 @@ endif() ## System checks ## -#SG_CONFIGURE_PART([System checks...]) -#AC_PROG_CC(xlC gcc cc) -auto -#AM_SANITY_CHECK -auto - -#AC_PROG_MAKE_SET - -#AC_CHECK_VA_COPY - -set(diff_va "va_copy((d),(s))" - "VA_COPY((d),(s))" - "__va_copy((d),(s))" - "__builtin_va_copy((d),(s))" - "do { (d) = (s)\; } while (0)" - "do { *(d) = *(s)\; } while (0)" - "memcpy((void *)&(d), (void *)&(s), sizeof(s))" - "memcpy((void *)(d), (void *)(s), sizeof(*(s)))" - ) - -foreach(fct ${diff_va}) - write_file("${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_va_copy.c" "#include -#include -#include -#define DO_VA_COPY(d,s) ${fct} -void test(char *str, ...) -{ - va_list ap, ap2; - int i; - va_start(ap, str); - DO_VA_COPY(ap2, ap); - for (i = 1; i <= 9; i++) { - int k = (int)va_arg(ap, int); - if (k != i) - abort(); - } - DO_VA_COPY(ap, ap2); - for (i = 1; i <= 9; i++) { - int k = (int)va_arg(ap, int); - if (k != i) - abort(); - } - va_end(ap); -} -int main(void) -{ - test(\"test\", 1, 2, 3, 4, 5, 6, 7, 8, 9); - exit(0); -}" - ) - - execute_process( - COMMAND ${CMAKE_C_COMPILER} "${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_va_copy.c" - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - RESULT_VARIABLE COMPILE_VA_NULL_VAR - OUTPUT_QUIET - ERROR_QUIET - ) - - if(NOT COMPILE_VA_NULL_VAR) - string(REGEX REPLACE "\;" "" fctbis ${fct}) - if(${fctbis} STREQUAL "va_copy((d),(s))") - set(HAVE_VA_COPY 1) - set(ac_cv_va_copy "C99") - set(__VA_COPY_USE_C99 "va_copy((d),(s))") - endif() - - if(${fctbis} STREQUAL "VA_COPY((d),(s))") - set(ac_cv_va_copy "GCM") - set(__VA_COPY_USE_GCM "VA_COPY((d),(s))") - endif() - - if(${fctbis} STREQUAL "__va_copy((d),(s))") - set(ac_cv_va_copy "GCH") - set(__VA_COPY_USE_GCH "__va_copy((d),(s))") - endif() - - if(${fctbis} STREQUAL "__builtin_va_copy((d),(s))") - set(ac_cv_va_copy "GCB") - set(__VA_COPY_USE_GCB "__builtin_va_copy((d),(s))") - endif() - - if(${fctbis} STREQUAL "do { (d) = (s) } while (0)") - set(ac_cv_va_copy "ASS") - set(__VA_COPY_USE_ASS "do { (d) = (s); } while (0)") - endif() - - if(${fctbis} STREQUAL "do { *(d) = *(s) } while (0)") - set(ac_cv_va_copy "ASP") - set(__VA_COPY_USE_ASP "do { *(d) = *(s); } while (0)") - endif() - - if(${fctbis} STREQUAL "memcpy((void *)&(d), (void *)&(s), sizeof(s))") - set(ac_cv_va_copy "CPS") - set(__VA_COPY_USE_CPS "memcpy((void *)&(d), (void *)&(s), sizeof(s))") - endif() - - if(${fctbis} STREQUAL "memcpy((void *)(d), (void *)(s), sizeof(*(s)))") - set(ac_cv_va_copy "CPP") - set(__VA_COPY_USE_CPP "memcpy((void *)(d), (void *)(s), sizeof(*(s)))") - endif() - - if(NOT STATUS_OK) - set(__VA_COPY_USE "__VA_COPY_USE_${ac_cv_va_copy}(d, s)") - endif() - set(STATUS_OK "1") - - endif() - -endforeach(fct ${diff_va}) - -#-------------------------------------------------------------------------------------------------- ### check for a working snprintf if(HAVE_SNPRINTF AND HAVE_VSNPRINTF OR WIN32) - if(WIN32) - #set(HAVE_SNPRINTF 1) - #set(HAVE_VSNPRINTF 1) - endif() - if(CMAKE_CROSSCOMPILING) set(RUN_SNPRINTF_FUNC "cross") #set(PREFER_PORTABLE_SNPRINTF 1) @@ -1178,8 +1011,6 @@ endif() SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${generated_files_to_clean}") -configure_file("${CMAKE_HOME_DIRECTORY}/tools/cmake/src/simgrid.nsi.in" "${CMAKE_BINARY_DIR}/simgrid.nsi" @ONLY IMMEDIATE) - ### Define source packages for Libs include(${CMAKE_HOME_DIRECTORY}/tools/cmake/DefinePackages.cmake) @@ -1214,7 +1045,10 @@ include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Tests.cmake) include(${CMAKE_HOME_DIRECTORY}/tools/cmake/CTestConfig.cmake) ### Define subdirectories -include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeExe.cmake) +foreach(cmakefile ${CMAKEFILES_TXT}) + string(REPLACE "/CMakeLists.txt" "" repository ${cmakefile}) + add_subdirectory("${CMAKE_HOME_DIRECTORY}/${repository}") +endforeach() ### Setup the distrib include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Distrib.cmake) @@ -1227,7 +1061,7 @@ else() find_program(WGET_PROGRAM NAMES wget) message(STATUS "wget: ${WGET_PROGRAM}") if(WGET_PROGRAM) - ADD_CUSTOM_TARGET(simgrid_documentation + ADD_CUSTOM_TARGET(documentation COMMENT "Downloading the SimGrid documentation..." COMMAND ${WGET_PROGRAM} -r -np -nH -nd http://simgrid.gforge.inria.fr/simgrid/${release_version}/doc/ WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/doc/html