Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[SMPI/PAPI] Added cmake switch for SMPI+PAPI
authorChristian Heinrich <franz-christian.heinrich@inria.fr>
Mon, 29 Feb 2016 09:24:48 +0000 (10:24 +0100)
committerChristian Heinrich <franz-christian.heinrich@inria.fr>
Thu, 19 May 2016 14:37:23 +0000 (16:37 +0200)
This commit includes:

- Enable/disable PAPI bindings via ccmake
- The FindPAPI.cmake file
- The #define for C/C++

CMakeLists.txt
tools/cmake/MakeLib.cmake
tools/cmake/Modules/FindPAPI.cmake [new file with mode: 0644]
tools/cmake/Option.cmake
tools/cmake/src/internal_config.h.in

index b46a981..579a485 100644 (file)
@@ -217,6 +217,13 @@ endif()
 if(WIN32)
   set(Boost_USE_STATIC_LIBS 1)
 endif()
+set(HAVE_PAPI 0)
+if(enable_smpi_papi)
+  include(FindPAPI)
+  if (NOT HAVE_PAPI)
+    message(FATAL_ERROR "Cannot find PAPI. Please install it (apt-get install papi-tools libpapi-dev) or disable PAPI bindings.")
+  endif()
+endif()
 
 find_package(Boost 1.48)
 if(Boost_FOUND)
@@ -962,6 +969,7 @@ message("        Compile Smpi ................: ${HAVE_SMPI}")
 message("          Smpi fortran ..............: ${SMPI_FORTRAN}")
 message("          MPICH3 testsuite ..........: ${enable_smpi_MPICH3_testsuite}")
 message("          Privatization .............: ${HAVE_PRIVATIZATION}")
+message("          PAPI support...............: ${HAVE_PAPI}")
 message("        Compile Boost.Context support: ${HAVE_BOOST_CONTEXTS}")
 message("")
 message("        Maintainer mode .............: ${enable_maintainer_mode}")
index efb9595..ed62a97 100644 (file)
@@ -56,6 +56,10 @@ if(HAVE_LUA)
   SET(SIMGRID_DEP "${SIMGRID_DEP} ${LUA_LIBRARY} -ldl")
 endif()
 
+if(HAVE_PAPI)
+  SET(SIMGRID_DEP "${SIMGRID_DEP} -lpapi")
+endif()
+
 if(HAVE_GRAPHVIZ)
   if(HAVE_CGRAPH_LIB)
     SET(SIMGRID_DEP "${SIMGRID_DEP} -lcgraph")
diff --git a/tools/cmake/Modules/FindPAPI.cmake b/tools/cmake/Modules/FindPAPI.cmake
new file mode 100644 (file)
index 0000000..afb95bb
--- /dev/null
@@ -0,0 +1,77 @@
+# Try to find PAPI headers and LIBRARY.
+#
+# Usage of this module as follows:
+#
+#     find_package(PAPI)
+#
+# Variables used by this module, they can change the default behaviour and need
+# to be set before calling find_package:
+#
+#  PAPI_PREFIX         Set this variable to the root installation of
+#                      libpapi if the module has problems finding the
+#                      proper installation path.
+#
+# Variables defined by this module:
+#
+#  PAPI_FOUND              System has PAPI LIBRARY and headers
+#  PAPI_LIBRARY          The PAPI library
+#  PAPI_INCLUDE_DIRS       The location of PAPI headers
+
+set(HAVE_PAPI 0)
+set(PAPI_HINT ${papi_path} CACHE PATH "Path to search for PAPI headers and library")
+
+find_path(PAPI_PREFIX
+    NAMES include/papi.h
+       PATHS
+       ${PAPI_HINT}
+)
+
+message(STATUS "Looking for libpapi")
+find_library(PAPI_LIBRARY
+    NAMES libpapi papi
+    PATH_SUFFIXES lib64 lib 
+    # HINTS gets searched before PATHS
+    HINTS 
+    ${PAPI_PREFIX}/lib 
+)
+if(PAPI_LIBRARY)
+  message(STATUS "Looking for libpapi - found at ${PAPI_LIBRARY}")
+else()
+  message(STATUS "Looking for libpapi - not found")
+endif()
+
+message(STATUS "Looking for papi.h")
+find_path(PAPI_INCLUDE_DIRS
+    NAMES papi.h
+    # HINTS gets searched before PATHS
+    HINTS ${PAPI_PREFIX}/include 
+)
+if(PAPI_INCLUDE_DIRS)
+  message(STATUS "Looking for papi.h - found at ${PAPI_INCLUDE_DIRS}")
+else()
+  message(STATUS "Looking for papi.h - not found")
+endif()
+
+
+if (PAPI_LIBRARY)
+  if(PAPI_INCLUDE_DIRS)
+    set(HAVE_PAPI 1)
+    mark_as_advanced(HAVE_PAPI)
+  endif()
+endif()
+if(NOT HAVE_PAPI)
+  message(FATAL_ERROR, "Could not find PAPI LIBRARY and/or papi.h. Make sure they are correctly installed!")
+endif()
+
+#include(FindPackageHandleStandardArgs)
+#find_package_handle_standard_args(PAPI DEFAULT_MSG
+#    PAPI_LIBRARY
+#    PAPI_INCLUDE_DIRS
+#)
+
+mark_as_advanced(
+    PAPI_PREFIX_DIRS
+    PAPI_LIBRARY
+    PAPI_INCLUDE_DIRS
+)
+
index dc14fd0..511f861 100644 (file)
@@ -38,6 +38,9 @@ if(WIN32)
   option(enable_smpi_MPICH3_testsuite "Whether the test suite form MPICH 3 should be built" off)
 else()
   option(enable_smpi "Whether SMPI in included in library." on)
+  # PAPI does not support windows (they did in 3.7, but not anymore in 5.x)
+  # See http://icl.cs.utk.edu/papi/custom/index.html?lid=62&slid=96
+  option(enable_smpi_papi    "Whether SMPI supports PAPI bindings." off)
   option(enable_smpi_MPICH3_testsuite "Whether the test suite form MPICH 3 should be built" off)
 endif()
 option(enable_smpi_ISP_testsuite "Whether the test suite from ISP should be built." off)
index 0b8d91b..1ad92b1 100644 (file)
@@ -56,6 +56,9 @@
 #define SMPI_FORTRAN       @SMPI_FORTRAN@
 #define HAVE_PRIVATIZATION @HAVE_PRIVATIZATION@ /* We have mmap and objdump to handle privatization */
 
+/* Make PAPI available? */
+#define HAVE_PAPI @HAVE_PAPI@
+
 /* Other function checks */
 #define HAVE_BACKTRACE @HAVE_BACKTRACE@ /* Function backtrace */
 #define HAVE_MMAP      @HAVE_MMAP@ /* Function mmap */