1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
|
# Copyright Contributors to the OpenVDB Project
# SPDX-License-Identifier: MPL-2.0
#
#[=======================================================================[.rst:
FindJemalloc
-----------
Find Jemalloc include dirs and libraries
Use this module by invoking find_package with the form::
find_package(Jemalloc
[version] [EXACT] # Minimum or EXACT version
[REQUIRED] # Fail with error if Jemalloc is not found
)
IMPORTED Targets
^^^^^^^^^^^^^^^^
``Jemalloc::jemalloc``
This module defines IMPORTED target Jemalloc::jemalloc, if Jemalloc has been
found.
Result Variables
^^^^^^^^^^^^^^^^
This will define the following variables:
``Jemalloc_FOUND``
True if the system has the Jemalloc library.
``Jemalloc_VERSION``
The version of the Jemalloc library which was found.
``Jemalloc_LIBRARIES``
Libraries needed to link to Jemalloc.
``Jemalloc_LIBRARY_DIRS``
Jemalloc library directories.
Cache Variables
^^^^^^^^^^^^^^^
The following cache variables may also be set:
``Jemalloc_LIBRARY``
The path to the Jemalloc library.
Hints
^^^^^
Instead of explicitly setting the cache variables, the following variables
may be provided to tell this module where to look.
``Jemalloc_ROOT``
Preferred installation prefix.
``JEMALLOC_LIBRARYDIR``
Preferred library directory e.g. <prefix>/lib
``SYSTEM_LIBRARY_PATHS``
Global list of library paths intended to be searched by and find_xxx call
``JEMALLOC_USE_STATIC_LIBS``
Only search for static jemalloc libraries
``DISABLE_CMAKE_SEARCH_PATHS``
Disable CMakes default search paths for find_xxx calls in this module
#]=======================================================================]
cmake_minimum_required(VERSION 3.18)
include(GNUInstallDirs)
mark_as_advanced(
Jemalloc_LIBRARY
)
set(_FIND_JEMALLOC_ADDITIONAL_OPTIONS "")
if(DISABLE_CMAKE_SEARCH_PATHS)
set(_FIND_JEMALLOC_ADDITIONAL_OPTIONS NO_DEFAULT_PATH)
endif()
# Set _JEMALLOC_ROOT based on a user provided root var. Xxx_ROOT and ENV{Xxx_ROOT}
# are prioritised over the legacy capitalized XXX_ROOT variables for matching
# CMake 3.12 behaviour
# @todo deprecate -D and ENV JEMALLOC_ROOT from CMake 3.12
if(Jemalloc_ROOT)
set(_JEMALLOC_ROOT ${Jemalloc_ROOT})
elseif(DEFINED ENV{Jemalloc_ROOT})
set(_JEMALLOC_ROOT $ENV{Jemalloc_ROOT})
elseif(JEMALLOC_ROOT)
set(_JEMALLOC_ROOT ${JEMALLOC_ROOT})
elseif(DEFINED ENV{JEMALLOC_ROOT})
set(_JEMALLOC_ROOT $ENV{JEMALLOC_ROOT})
endif()
# Additionally try and use pkconfig to find jemalloc
if(NOT DEFINED PKG_CONFIG_FOUND)
find_package(PkgConfig)
endif()
pkg_check_modules(PC_Jemalloc QUIET jemalloc)
# ------------------------------------------------------------------------
# Search for Jemalloc lib DIR
# ------------------------------------------------------------------------
set(_JEMALLOC_LIBRARYDIR_SEARCH_DIRS "")
list(APPEND _JEMALLOC_LIBRARYDIR_SEARCH_DIRS
${JEMALLOC_LIBRARYDIR}
${_JEMALLOC_ROOT}
${PC_Jemalloc_LIBDIR}
${SYSTEM_LIBRARY_PATHS}
)
# Library suffix handling
set(_JEMALLOC_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
if(MSVC)
if(JEMALLOC_USE_STATIC_LIBS)
set(CMAKE_FIND_LIBRARY_SUFFIXES ".lib")
else()
list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES "_dll.lib")
endif()
else()
if(JEMALLOC_USE_STATIC_LIBS)
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
endif()
endif()
# Build suffix directories
set(JEMALLOC_PATH_SUFFIXES
${CMAKE_INSTALL_LIBDIR}
lib64
lib
)
find_library(Jemalloc_LIBRARY jemalloc
${_FIND_JEMALLOC_ADDITIONAL_OPTIONS}
PATHS ${_JEMALLOC_LIBRARYDIR_SEARCH_DIRS}
PATH_SUFFIXES ${JEMALLOC_PATH_SUFFIXES}
)
# Reset library suffix
set(CMAKE_FIND_LIBRARY_SUFFIXES ${_JEMALLOC_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
unset(_JEMALLOC_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES)
# ------------------------------------------------------------------------
# Cache and set Jemalloc_FOUND
# ------------------------------------------------------------------------
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Jemalloc
FOUND_VAR Jemalloc_FOUND
REQUIRED_VARS
Jemalloc_LIBRARY
VERSION_VAR Jemalloc_VERSION
)
if(Jemalloc_FOUND)
# Configure lib type. If XXX_USE_STATIC_LIBS, we always assume a static
# lib is in use. If win32, we can't mark the import .libs as shared, so
# these are always marked as UNKNOWN. Otherwise, infer from extension.
set(JEMALLOC_LIB_TYPE UNKNOWN)
if(JEMALLOC_USE_STATIC_LIBS)
set(JEMALLOC_LIB_TYPE STATIC)
elseif(UNIX)
get_filename_component(_JEMALLOC_EXT ${Jemalloc_LIBRARY} EXT)
if(_JEMALLOC_EXT STREQUAL ".a")
set(JEMALLOC_LIB_TYPE STATIC)
elseif(_JEMALLOC_EXT STREQUAL ".so" OR
_JEMALLOC_EXT STREQUAL ".dylib")
set(JEMALLOC_LIB_TYPE SHARED)
endif()
endif()
set(Jemalloc_LIBRARIES ${Jemalloc_LIBRARY})
get_filename_component(Jemalloc_LIBRARY_DIRS ${Jemalloc_LIBRARY} DIRECTORY)
if(NOT TARGET Jemalloc::jemalloc)
add_library(Jemalloc::jemalloc ${JEMALLOC_LIB_TYPE} IMPORTED)
set_target_properties(Jemalloc::jemalloc PROPERTIES
IMPORTED_LOCATION "${Jemalloc_LIBRARIES}"
INTERFACE_COMPILE_OPTIONS "${PC_Jemalloc_CFLAGS_OTHER}"
)
endif()
elseif(Jemalloc_FIND_REQUIRED)
message(FATAL_ERROR "Unable to find Jemalloc")
endif()
|