From 8db629a14baf2aea99cf8b355eac8b5a09d0dadc Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Thu, 26 Jul 2018 13:28:02 +0800 Subject: [PATCH] cmake: import allocator libraries in a better way * 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 --- CMakeLists.txt | 14 ++++++------ cmake/modules/FindJeMalloc.cmake | 15 ++++++++++--- cmake/modules/Findgperftools.cmake | 34 ++++++++++++++++++++++++++++-- src/CMakeLists.txt | 6 +++--- src/include/config-h.in.cmake | 3 --- 5 files changed, 53 insertions(+), 19 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8a13fad12cd52..09d655525d4d1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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) diff --git a/cmake/modules/FindJeMalloc.cmake b/cmake/modules/FindJeMalloc.cmake index 784560d1d1e1c..8acab181f092c 100644 --- a/cmake/modules/FindJeMalloc.cmake +++ b/cmake/modules/FindJeMalloc.cmake @@ -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() diff --git a/cmake/modules/Findgperftools.cmake b/cmake/modules/Findgperftools.cmake index e9aa9bfb0034c..52e2df0deb965 100644 --- a/cmake/modules/Findgperftools.cmake +++ b/cmake/modules/Findgperftools.cmake @@ -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() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c1f7f484c91be..87d76cdbeaa9e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -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") diff --git a/src/include/config-h.in.cmake b/src/include/config-h.in.cmake index 42800a5ccdd1a..6181eaa22cc41 100644 --- a/src/include/config-h.in.cmake +++ b/src/include/config-h.in.cmake @@ -117,9 +117,6 @@ /* 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 -- 2.39.5