mirror of
https://github.com/falcosecurity/falco.git
synced 2025-06-19 11:32:20 +00:00
77 lines
2.8 KiB
CMake
77 lines
2.8 KiB
CMake
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
# Copyright (C) 2024 The Falco Authors.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
|
# in compliance with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software distributed under the License
|
|
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
|
# or implied. See the License for the specific language governing permissions and limitations under
|
|
# the License.
|
|
#
|
|
|
|
option(USE_BUNDLED_JEMALLOC "Use bundled jemalloc allocator" ${USE_BUNDLED_DEPS})
|
|
|
|
if(JEMALLOC_INCLUDE)
|
|
# we already have JEMALLOC
|
|
elseif(NOT USE_BUNDLED_JEMALLOC)
|
|
find_path(JEMALLOC_INCLUDE jemalloc/jemalloc.h)
|
|
set(JEMALLOC_INCLUDE ${JEMALLOC_INCLUDE}/jemalloc)
|
|
if(BUILD_SHARED_LIBS)
|
|
set(JEMALLOC_LIB_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
|
|
else()
|
|
set(JEMALLOC_LIB_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX})
|
|
endif()
|
|
find_library(JEMALLOC_LIB NAMES libjemalloc${JEMALLOC_LIB_SUFFIX})
|
|
if(JEMALLOC_LIB)
|
|
message(STATUS "Found JEMALLOC: include: ${JEMALLOC_INCLUDE}, lib: ${JEMALLOC_LIB}")
|
|
else()
|
|
message(FATAL_ERROR "Couldn't find system jemalloc")
|
|
endif()
|
|
else()
|
|
if(BUILD_SHARED_LIBS)
|
|
set(JEMALLOC_LIB_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
|
|
else()
|
|
set(JEMALLOC_LIB_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX})
|
|
endif()
|
|
set(JEMALLOC_SRC "${PROJECT_BINARY_DIR}/jemalloc-prefix/src")
|
|
set(JEMALLOC_LIB "${JEMALLOC_SRC}/jemalloc/lib/libjemalloc${JEMALLOC_LIB_SUFFIX}")
|
|
set(JEMALLOC_INCLUDE "${JEMALLOC_SRC}/jemalloc/include/jemalloc")
|
|
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
|
|
set(JEMALLOC_ARCH_SPECIFIC_CONFIGURE_ARGS --with-lg-page=14)
|
|
else()
|
|
set(JEMALLOC_ARCH_SPECIFIC_CONFIGURE_ARGS "")
|
|
endif()
|
|
ExternalProject_Add(
|
|
jemalloc
|
|
PREFIX "${PROJECT_BINARY_DIR}/jemalloc-prefix"
|
|
URL "https://github.com/jemalloc/jemalloc/archive/refs/tags/5.3.0.tar.gz"
|
|
URL_HASH "SHA256=ef6f74fd45e95ee4ef7f9e19ebe5b075ca6b7fbe0140612b2a161abafb7ee179"
|
|
CONFIGURE_COMMAND ./autogen.sh --enable-prof --disable-libdl
|
|
${JEMALLOC_ARCH_SPECIFIC_CONFIGURE_ARGS}
|
|
BUILD_IN_SOURCE 1
|
|
BUILD_COMMAND make build_lib_static
|
|
INSTALL_COMMAND ""
|
|
UPDATE_COMMAND ""
|
|
BUILD_BYPRODUCTS ${JEMALLOC_LIB}
|
|
)
|
|
message(STATUS "Using bundled jemalloc: include: ${JEMALLOC_INCLUDE}, lib: ${JEMALLOC_LIB}")
|
|
install(
|
|
FILES "${JEMALLOC_LIB}"
|
|
DESTINATION "${CMAKE_INSTALL_LIBDIR}/${LIBS_PACKAGE_NAME}"
|
|
COMPONENT "libs-deps"
|
|
)
|
|
endif()
|
|
|
|
# We add a custom target, in this way we can always depend on `jemalloc` without distinguishing
|
|
# between "bundled" and "not-bundled" case
|
|
if(NOT TARGET jemalloc)
|
|
add_custom_target(jemalloc)
|
|
endif()
|
|
|
|
include_directories(${JEMALLOC_INCLUDE})
|
|
add_compile_definitions(HAS_JEMALLOC)
|