Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Check for a dlfunc() function to get handle if present
[simgrid.git] / CMakeLists.txt
index 3973529..d1bf3e8 100644 (file)
@@ -119,6 +119,11 @@ endif()
 execute_process(COMMAND   ${CMAKE_LINKER}   -version    OUTPUT_VARIABLE LINKER_VERSION)
 string(REGEX MATCH "[0-9].[0-9]*" LINKER_VERSION "${LINKER_VERSION}")
 
+### Set the library providing dlopen
+if("${CMAKE_SYSTEM}" MATCHES "Linux")
+  find_library(DL_LIBRARY dl)
+endif("${CMAKE_SYSTEM}" MATCHES "Linux")
+
 ### Find programs and paths
 FIND_PROGRAM(GCOV_PATH gcov)
 include(FindPerl)
@@ -154,13 +159,6 @@ if(NOT CMAKE_CROSSCOMPILING AND EXISTS /usr/include/)
   set(INCLUDES ${INCLUDES} /usr/include/)
 endif()
 
-### Check 32bits or 64bits
-IF(CMAKE_SIZEOF_VOID_P EQUAL 4)
-  SET(ARCH_32_BITS 1)
-ELSE()
-  SET(ARCH_32_BITS 0)
-ENDIF()
-
 if(WIN32)
   set(CMAKE_INCLUDE_WIN "${CMAKE_C_COMPILER}")
   set(CMAKE_LIB_WIN "${CMAKE_C_COMPILER}")
@@ -179,7 +177,7 @@ set(SIMGRID_DEP "-lm")
 set(HAVE_RAW_CONTEXTS 0)
 include(CMakeDetermineSystem)
 IF(CMAKE_SYSTEM_PROCESSOR MATCHES ".86|AMD64|amd64")
-  IF(${ARCH_32_BITS})
+  IF(CMAKE_SIZEOF_VOID_P EQUAL 4) # 32 bits
     message(STATUS "System processor: i686 (${CMAKE_SYSTEM_PROCESSOR}, 32 bits)")
     set(PROCESSOR_i686 1)
     set(PROCESSOR_x86_64 0)
@@ -307,6 +305,7 @@ 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(dlfunc HAVE_DLFUNC)
 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
 CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
 CHECK_FUNCTION_EXISTS(getdtablesize HAVE_GETDTABLESIZE)
@@ -314,6 +313,7 @@ CHECK_FUNCTION_EXISTS(sysconf HAVE_SYSCONF)
 CHECK_FUNCTION_EXISTS(popen HAVE_POPEN)
 CHECK_FUNCTION_EXISTS(process_vm_readv HAVE_PROCESS_VM_READV)
 CHECK_FUNCTION_EXISTS(mmap HAVE_MMAP)
+CHECK_FUNCTION_EXISTS(mremap HAVE_MREMAP)
 
 CHECK_SYMBOL_EXISTS(vasprintf stdio.h HAVE_VASPRINTF)
 if(MINGW)
@@ -335,15 +335,10 @@ else()
   set(HAVE_THREAD_LOCAL_STORAGE 0)
 endif()
 
-# Our usage of mmap is Linux-specific (flag MAP_ANONYMOUS), but kFreeBSD uses a GNU libc
-IF(HAVE_MMAP AND
-   NOT "${CMAKE_SYSTEM}" MATCHES "Linux" AND 
-   NOT "${CMAKE_SYSTEM}" MATCHES "kFreeBSD" AND 
-   NOT "${CMAKE_SYSTEM}" MATCHES "GNU" AND 
-   NOT  "${CMAKE_SYSTEM}" MATCHES "Darwin")
-  SET(HAVE_MMAP 0)
-  message(STATUS "Warning: MMAP is thought as non functional on this architecture (${CMAKE_SYSTEM})")
-ENDIF()
+if(enable_model-checking AND NOT "${CMAKE_SYSTEM}" MATCHES "Linux")
+  message(WARNING "Support for model-checking has not been enabled on ${CMAKE_SYSTEM}: disabling it")
+  set(enable_model-checking FALSE)
+endif()
 
 if(HAVE_MMAP AND HAVE_THREAD_LOCAL_STORAGE)
   SET(HAVE_MMALLOC 1)
@@ -369,13 +364,22 @@ endif()
 
 include(FindLibunwind)
 if(HAVE_LIBUNWIND)
-  SET(SIMGRID_DEP "${SIMGRID_DEP} -lunwind -lunwind-ptrace")
-  # This supposes that the host machine is either an AMD or a X86.
-  # This is deeply wrong, and should be fixed by manually loading -lunwind-PLAT (FIXME)
-  if(PROCESSOR_x86_64)
-    SET(SIMGRID_DEP "${SIMGRID_DEP} -lunwind-x86_64")
+  if(NOT APPLE)
+    SET(SIMGRID_DEP "${SIMGRID_DEP} -lunwind")
   else()
-    SET(SIMGRID_DEP "${SIMGRID_DEP} -lunwind-x86")
+    # Apple forbids to link directly against its libunwind implementation
+    # So let's comply and link against the System framework
+    SET(SIMGRID_DEP "${SIMGRID_DEP} -lSystem")
+  endif()
+  if("${CMAKE_SYSTEM}" MATCHES "Linux")
+    set(SIMGRID_DEP "${SIMGRID_DEP} -lunwind-ptrace")
+    # This supposes that the host machine is either an AMD or a X86.
+    # This is deeply wrong, and should be fixed by manually loading -lunwind-PLAT (FIXME)
+    if(PROCESSOR_x86_64)
+      SET(SIMGRID_DEP "${SIMGRID_DEP} -lunwind-x86_64")
+    else()
+      SET(SIMGRID_DEP "${SIMGRID_DEP} -lunwind-x86")
+    endif()
   endif()
 else()
   if(enable_model-checking)
@@ -390,6 +394,7 @@ if(enable_model-checking)
   SET(SIMGRID_DEP "${SIMGRID_DEP} -ldw")
 else()
   SET(HAVE_MC 0)  
+  set(HAVE_MMALLOC 0)
 endif()
 
 if (enable_model-checking AND enable_ns3)
@@ -398,12 +403,9 @@ endif()
 
 if(enable_smpi)
   SET(HAVE_SMPI 1)
-  if("${CMAKE_SYSTEM}" MATCHES "Linux")
+  if("${CMAKE_SYSTEM}" MATCHES "Linux|FreeBSD")
     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)
@@ -416,7 +418,7 @@ 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
+  execute_process(COMMAND ${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_gnu_dynlinker.c ${DL_LIBRARY} -o test_gnu_ld
                   WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
                   OUTPUT_VARIABLE HAVE_GNU_LD_compil
   )