X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/bc8c0b517b16228bb32fe680866e4a6a7605ecf9..e9f0018b823e34405847177b25a85d3facc30ae1:/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 6c8519b06a..2363facf59 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_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) @@ -110,8 +110,12 @@ 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.") +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}") @@ -128,42 +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) @@ -175,13 +166,7 @@ if(NOT CMAKE_CROSSCOMPILING AND EXISTS /usr/include/) endif() ### Check 32bits or 64bits -INCLUDE (CheckTypeSize) -CHECK_TYPE_SIZE("int" SIZEOF_INT) -CHECK_TYPE_SIZE("long" SIZEOF_LONG) -CHECK_TYPE_SIZE("long long" SIZEOF_LONGLONG) -CHECK_TYPE_SIZE("void*" SIZEOF_VOIDSTAR) -message (" Data model: (int)=${SIZEOF_INT} (long)=${SIZEOF_LONG} (long long)=${SIZEOF_LONGLONG} (void*)=${SIZEOF_VOIDSTAR}") -IF(SIZEOF_VOIDSTAR EQUAL 4) +IF(CMAKE_SIZEOF_VOID_P EQUAL 4) SET(ARCH_32_BITS 1) ELSE() SET(ARCH_32_BITS 0) @@ -195,22 +180,9 @@ 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}) + unset(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}") - if(COMPILER_C_MAJOR_VERSION) - # set(__GNUC__ ${COMPILER_C_MAJOR_VERSION}) - endif() - if(COMPILER_C_MINOR_VERSION) - # set(__GNUC_MINOR__ ${COMPILER_C_MINOR_VERSION}) - endif() - endif() - + find_program(NSIS_PROGRAM NAMES makensi) set(NSIS_WIN_VERSION $ENV{PROCESSOR_ARCHITEW6432}) if(NSIS_WIN_VERSION MATCHES "") set(NSIS_WIN_VERSION $ENV{PROCESSOR_ARCHITECTURE}) @@ -221,10 +193,9 @@ if(WIN32) 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}") @@ -239,15 +210,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 - ) - -# x86_64 -# x86 -# i.86 - ### Determine the assembly flavor that we need today include(CMakeDetermineSystem) IF(CMAKE_SYSTEM_PROCESSOR MATCHES ".86|AMD64|amd64") @@ -264,73 +226,18 @@ IF(CMAKE_SYSTEM_PROCESSOR MATCHES ".86|AMD64|amd64") set(HAVE_RAWCTX 1) endif() -ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^alpha") - message(STATUS "System processor: alpha") - -ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm") - # Subdir is "arm" for both big-endian (arm) and little-endian (armel). - message(STATUS "System processor: arm") - -ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^mips") - # mips* machines are bi-endian mostly so processor does not tell - # endianess of the underlying system. - message(STATUS "System processor: ${CMAKE_SYSTEM_PROCESSOR}" "mips" "mipsel" "mipseb") - -ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64") - message(STATUS "System processor: ppc64") - -ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)") - message(STATUS "System processor: ppc") - -ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^sparc") - # Both flavours can run on the same processor - message(STATUS "System processor: ${CMAKE_SYSTEM_PROCESSOR}" "sparc" "sparcv9") - -ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(parisc|hppa)") - message(STATUS "System processor: parisc" "parisc64") - -ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^s390") - # s390 binaries can run on s390x machines - message(STATUS "System processor: ${CMAKE_SYSTEM_PROCESSOR}" "s390" "s390x") - -ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^sh") - message(STATUS "System processor: sh") - -ELSE() #PROCESSOR NOT FOUND - message(STATUS "PROCESSOR NOT FOUND: ${CMAKE_SYSTEM_PROCESSOR}") - 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) 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}") @@ -404,6 +311,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,6 +343,8 @@ if(MINGW) # The detection of asprintf 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_SNPRINTF 1) + set(HAVE_VSNPRINTF 1) set(HAVE_ASPRINTF 1) set(HAVE_VASPRINTF 1) endif() @@ -477,15 +387,13 @@ endif() if(WIN32) # Those files are not detected despite being present set(HAVE_UCONTEXT_H 1) set(HAVE_MAKECONTEXT 1) - set(HAVE_SNPRINTF 1) - set(HAVE_VSNPRINTF 1) endif() set(CONTEXT_UCONTEXT 0) -SET(CONTEXT_THREADS 0) +set(CONTEXT_THREADS 0) if(enable_jedule) - SET(HAVE_JEDULE 1) + set(HAVE_JEDULE 1) endif() if(enable_latency_bound_tracking) @@ -516,13 +424,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() @@ -779,11 +689,6 @@ elseif(EXISTS ${CMAKE_HOME_DIRECTORY}/.gitversion) FILE(STRINGS ${CMAKE_HOME_DIRECTORY}/.gitversion GIT_VERSION) endif() -if(release) - set(SIMGRID_VERSION_BANNER "${SIMGRID_VERSION_BANNER}\\nRelease build") -else() - set(SIMGRID_VERSION_BANNER "${SIMGRID_VERSION_BANNER}\\nDevelopment build") -endif() if(GIT_VERSION) set(SIMGRID_VERSION_BANNER "${SIMGRID_VERSION_BANNER} at commit ${GIT_VERSION}") endif() @@ -830,8 +735,6 @@ if(HAVE_MAKECONTEXT OR WIN32) string(REPLACE "," "" makecontext_size "${MAKECONTEXT_SIZE}") set(pth_skaddr_makecontext "#define pth_skaddr_makecontext(skaddr,sksize) (${makecontext_addr})") set(pth_sksize_makecontext "#define pth_sksize_makecontext(skaddr,sksize) (${makecontext_size})") - message(STATUS "${pth_skaddr_makecontext}") - message(STATUS "${pth_sksize_makecontext}") else() # message(FATAL_ERROR "makecontext is not compilable") endif() @@ -1231,11 +1134,6 @@ endif() SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${generated_files_to_clean}") -IF(${ARCH_32_BITS}) - set(WIN_ARCH "32") -ELSE() - set(WIN_ARCH "64") -ENDIF() configure_file("${CMAKE_HOME_DIRECTORY}/tools/cmake/src/simgrid.nsi.in" "${CMAKE_BINARY_DIR}/simgrid.nsi" @ONLY IMMEDIATE) ### Define source packages for Libs @@ -1285,7 +1183,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