]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cmake: import allocator libraries in a better way
authorKefu Chai <kchai@redhat.com>
Thu, 26 Jul 2018 05:28:02 +0000 (13:28 +0800)
committerKefu Chai <kchai@redhat.com>
Thu, 26 Jul 2018 07:16:48 +0000 (15:16 +0800)
* instead expose the paths, it'd better to expose a library target.
* remove HAVE_LIBJEMALLOC, as it not used anywhere.

Signed-off-by: Kefu Chai <kchai@redhat.com>
CMakeLists.txt
cmake/modules/FindJeMalloc.cmake
cmake/modules/Findgperftools.cmake
src/CMakeLists.txt
src/include/config-h.in.cmake

index 8a13fad12cd5263418e6303279a66dd2e2e8810c..09d655525d4d148caa0af39056e15ff762f6dda8 100644 (file)
@@ -314,19 +314,17 @@ if(ALLOCATOR)
     set(HAVE_LIBTCMALLOC ON)
   elseif(${ALLOCATOR} STREQUAL "jemalloc")
     find_package(JeMalloc REQUIRED)
-    set(HAVE_LIBJEMALLOC ${JEMALLOC_FOUND})
     set(HAVE_JEMALLOC 1)
   endif()
 else(ALLOCATOR)
   find_package(gperftools)
-  set(HAVE_LIBTCMALLOC ${GPERFTOOLS_FOUND})
-  if(NOT GPERFTOOLS_FOUND)
+  set(HAVE_LIBTCMALLOC ${gperftools_FOUND})
+  if(NOT gperftools_FOUND)
     find_package(JeMalloc)
-    set(HAVE_LIBJEMALLOC ${JEMALLOC_FOUND})
-  endif(NOT GPERFTOOLS_FOUND)
-  if(GPERFTOOLS_FOUND)
+  endif()
+  if(gperftools_FOUND)
     set(ALLOCATOR tcmalloc)
-  elseif(JEMALLOC_FOUND)
+  elseif(JeMalloc_FOUND)
     set(ALLOCATOR jemalloc)
   else()
     if(NOT FREEBSD)
@@ -334,7 +332,7 @@ else(ALLOCATOR)
       message(WARNING "tcmalloc and jemalloc not found, falling back to libc")
     endif()
     set(ALLOCATOR "libc")
-  endif(GPERFTOOLS_FOUND)
+  endif(gperftools_FOUND)
 endif(ALLOCATOR)
 
 
index 784560d1d1e1c3bccae59d761e4e9c6002f4c210..8acab181f092c1fcacc204111a7efe455d8abf35 100644 (file)
@@ -3,7 +3,7 @@
 #  JEMALLOC_INCLUDE_DIRS, where to find jemalloc.h, Set when
 #                        JEMALLOC_INCLUDE_DIR is found.
 #  JEMALLOC_LIBRARIES, libraries to link against to use JeMalloc.
-#  JEMALLOC_FOUND, If false, do not try to use JeMalloc.
+#  JeMalloc_FOUND, If false, do not try to use JeMalloc.
 #
 
 find_path(JEMALLOC_INCLUDE_DIR jemalloc/jemalloc.h)
@@ -11,10 +11,19 @@ find_path(JEMALLOC_INCLUDE_DIR jemalloc/jemalloc.h)
 find_library(JEMALLOC_LIBRARIES jemalloc)
 
 include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(JeMalloc DEFAULT_MSG
-    JEMALLOC_LIBRARIES JEMALLOC_INCLUDE_DIR)
+find_package_handle_standard_args(JeMalloc
+  FOUND_VAR JeMalloc_FOUND
+  REQUIRED_VARS JEMALLOC_LIBRARIES JEMALLOC_INCLUDE_DIR)
 
 mark_as_advanced(
   JEMALLOC_INCLUDE_DIR
   JEMALLOC_LIBRARIES)
 
+if(JeMalloc_FOUND AND NOT (TARGET JeMalloc::JeMalloc))
+    add_library(JeMalloc::JeMalloc UNKNOWN IMPORTED)
+    set_target_properties(JeMalloc::JeMalloc PROPERTIES
+      INTERFACE_INCLUDE_DIRECTORIES "${JEMALLOC_INCLUDE_DIR}"
+      IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+      IMPORTED_LOCATION "${JEMALLOC_LIBRARIES}")
+  endforeach()
+endif()
index e9aa9bfb0034c0d68caed72e75c166e19b479e2c..52e2df0deb9658c0a8595fedd2d4405d6f255722 100644 (file)
@@ -1,7 +1,7 @@
 # Try to find gperftools
 # Once done, this will define
 #
-# GPERFTOOLS_FOUND - system has Profiler
+# gperftools_FOUND - system has Profiler
 # GPERFTOOLS_INCLUDE_DIR - the Profiler include directories
 # Tcmalloc_INCLUDE_DIR - where to find Tcmalloc.h
 # GPERFTOOLS_TCMALLOC_LIBRARY - link it to use tcmalloc
@@ -38,9 +38,39 @@ foreach(component tcmalloc tcmalloc_minimal profiler)
   list(APPEND GPERFTOOLS_LIBRARIES GPERFTOOLS_${COMPONENT}_LIBRARY)
 endforeach()
 
+set(_gperftools_FIND_REQUIRED_VARS "GPERFTOOLS_INCLUDE_DIR")
+if(gperftools_FIND_COMPONENTS)
+  foreach(component ${gperftools_FIND_COMPONENTS})
+    string(TOUPPER ${component} COMPONENT)
+    list(APPEND _gperftools_FIND_REQUIRED_VARS "GPERFTOOLS_${COMPONENT}_LIBRARY")
+  endforeach()
+else()
+  list(APPEND _gperftools_FIND_REQUIRED_VARS "GPERFTOOLS_LIBRARIES")
+endif()
+
 include(FindPackageHandleStandardArgs)
 find_package_handle_standard_args(gperftools
-  REQUIRED_VARS ${GPERFTOOLS_LIBRARIES} GPERFTOOLS_INCLUDE_DIR
+  FOUND_VAR gperftools_FOUND
+  REQUIRED_VARS ${_gperftools_FIND_REQUIRED_VARS}
   VERSION_VAR TCMALLOC_VERSION_STRING)
 
 mark_as_advanced(${GPERFTOOLS_LIBRARIES} GPERFTOOLS_INCLUDE_DIR)
+
+if(gperftools_FOUND)
+  foreach(component tcmalloc tcmalloc_minimal profiler)
+    if(NOT (TARGET gperftools::${component}))
+      string(TOUPPER ${component} COMPONENT)
+      add_library(gperftools::${component} UNKNOWN IMPORTED)
+      set_target_properties(gperftools::${component} PROPERTIES
+        INTERFACE_INCLUDE_DIRECTORIES "${GPERFTOOLS_INCLUDE_DIR}"
+        IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
+        IMPORTED_LOCATION "${GPERFTOOLS_${COMPONENT}_LIBRARY}")
+    endif()
+  endforeach()
+  foreach(component tcmalloc tcmalloc_minimal)
+    if(NOT (TARGET gperftools::${component}))
+      set_target_properties(gperftools::${component} PROPERTIES
+        INTERFACE_COMPILE_OPTIONS "-fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free")
+    endif()
+  endforeach()
+endif()
index c1f7f484c91bee79b7c4043d1985d2c537d8fcdf..87d76cdbeaa9e9e2a9ea2f77859797225f82b09a 100644 (file)
@@ -299,15 +299,15 @@ endif(HAVE_XIO)
 
 # sort out which allocator to use
 if(ALLOCATOR STREQUAL "tcmalloc")
-  set(ALLOC_LIBS ${GPERFTOOLS_TCMALLOC_LIBRARY})
+  set(ALLOC_LIBS gperftools::tcmalloc)
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free")
   set(TCMALLOC_srcs perfglue/heap_profiler.cc)
 elseif(ALLOCATOR STREQUAL "tcmalloc_minimal")
-  set(ALLOC_LIBS ${GPERFTOOLS_TCMALLOC_MINIMAL_LIBRARY})
+  set(ALLOC_LIBS gperftools::tcmalloc_minimal)
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free")
   set(TCMALLOC_srcs perfglue/disabled_heap_profiler.cc)
 elseif(ALLOCATOR STREQUAL "jemalloc")
-  set(ALLOC_LIBS ${JEMALLOC_LIBRARIES})
+  set(ALLOC_LIBS JeMalloc::JeMalloc)
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free")
   set(TCMALLOC_srcs perfglue/disabled_heap_profiler.cc)
 elseif(ALLOCATOR STREQUAL "libc")
index 42800a5ccdd1a443b602057e3a2fef665c039bc9..6181eaa22cc418691bb1062a4db1cc0059c2af8c 100644 (file)
 /* Define if you have tcmalloc */
 #cmakedefine HAVE_LIBTCMALLOC
 
-/* Define if you have jemalloc */
-#cmakedefine HAVE_LIBJEMALLOC
-
 /* Define if have curl_multi_wait() */
 #cmakedefine HAVE_CURL_MULTI_WAIT 1