# Copyright (C) 2015-2025 Jonathan Müller and foonathan/memory contributors # SPDX-License-Identifier: Zlib # builds actual library set(header_path ${FOONATHAN_MEMORY_SOURCE_DIR}/include/foonathan/memory) set(detail_header ${header_path}/detail/align.hpp ${header_path}/detail/assert.hpp ${header_path}/detail/container_node_sizes.hpp ${header_path}/detail/debug_helpers.hpp ${header_path}/detail/ebo_storage.hpp ${header_path}/detail/free_list.hpp ${header_path}/detail/free_list_array.hpp ${header_path}/detail/ilog2.hpp ${header_path}/detail/lowlevel_allocator.hpp ${header_path}/detail/memory_stack.hpp ${header_path}/detail/small_free_list.hpp ${header_path}/detail/utility.hpp) set(header ${header_path}/aligned_allocator.hpp ${header_path}/allocator_storage.hpp ${header_path}/allocator_traits.hpp ${header_path}/config.hpp ${header_path}/container.hpp ${header_path}/debugging.hpp ${header_path}/default_allocator.hpp ${header_path}/deleter.hpp ${header_path}/error.hpp ${header_path}/fallback_allocator.hpp ${header_path}/malloc_allocator.hpp ${header_path}/heap_allocator.hpp ${header_path}/iteration_allocator.hpp ${header_path}/joint_allocator.hpp ${header_path}/memory_arena.hpp ${header_path}/memory_pool.hpp ${header_path}/memory_pool_collection.hpp ${header_path}/memory_pool_type.hpp ${header_path}/memory_resource_adapter.hpp ${header_path}/memory_stack.hpp ${header_path}/namespace_alias.hpp ${header_path}/new_allocator.hpp ${header_path}/segregator.hpp ${header_path}/smart_ptr.hpp ${header_path}/static_allocator.hpp ${header_path}/std_allocator.hpp ${header_path}/temporary_allocator.hpp ${header_path}/threading.hpp ${header_path}/tracking.hpp ${header_path}/virtual_memory.hpp ${CMAKE_CURRENT_BINARY_DIR}/container_node_sizes_impl.hpp) set(src detail/align.cpp detail/debug_helpers.cpp detail/assert.cpp detail/free_list.cpp detail/free_list_array.cpp detail/free_list_utils.hpp detail/small_free_list.cpp debugging.cpp error.cpp heap_allocator.cpp iteration_allocator.cpp malloc_allocator.cpp memory_arena.cpp memory_pool.cpp memory_pool_collection.cpp memory_stack.cpp new_allocator.cpp static_allocator.cpp temporary_allocator.cpp virtual_memory.cpp) # configure config file configure_file("config.hpp.in" "${CMAKE_CURRENT_BINARY_DIR}/config_impl.hpp") # generate container_node_sizes.hpp if necessary if(NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/container_node_sizes_impl.hpp) get_container_node_sizes(${CMAKE_CURRENT_BINARY_DIR}/container_node_sizes_impl.hpp) endif() add_library(foonathan_memory ${detail_header} ${header} ${src}) target_include_directories(foonathan_memory PUBLIC $ # for client in subdirectory $ # for generated files in build mode $ # for client in install mode PRIVATE ${header_path}) # for source files target_compile_definitions(foonathan_memory PUBLIC FOONATHAN_MEMORY=1 FOONATHAN_MEMORY_VERSION_MAJOR=$CACHE{FOONATHAN_MEMORY_VERSION_MAJOR} FOONATHAN_MEMORY_VERSION_MINOR=$CACHE{FOONATHAN_MEMORY_VERSION_MINOR} FOONATHAN_MEMORY_VERSION_PATCH=$CACHE{FOONATHAN_MEMORY_VERSION_PATCH}) if(NOT MSVC) target_compile_features(foonathan_memory PUBLIC cxx_constexpr) endif() if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") if("${CMAKE_CXX_SIMULATE_ID}" STREQUAL "MSVC") target_compile_options(foonathan_memory PRIVATE /WX /W3 /D _CRT_SECURE_NO_WARNINGS) else() target_compile_options(foonathan_memory PRIVATE -pedantic-errors -Werror -Wall -Wextra -Wconversion -Wsign-conversion) endif() elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") target_compile_options(foonathan_memory PRIVATE -pedantic-errors -Werror -Wall -Wextra -Wconversion -Wsign-conversion) elseif(MSVC) target_compile_options(foonathan_memory PRIVATE /WX /W3 /D _CRT_SECURE_NO_WARNINGS) endif() set_target_properties(foonathan_memory PROPERTIES OUTPUT_NAME "foonathan_memory-$CACHE{FOONATHAN_MEMORY_VERSION}" POSITION_INDEPENDENT_CODE ON) if(NEED_LIBRARY_FOR_CXX_ATOMIC) target_link_libraries(foonathan_memory PRIVATE -latomic) endif() install(TARGETS foonathan_memory EXPORT foonathan_memoryTargets RUNTIME DESTINATION ${FOONATHAN_MEMORY_RUNTIME_INSTALL_DIR} LIBRARY DESTINATION ${FOONATHAN_MEMORY_LIBRARY_INSTALL_DIR} ARCHIVE DESTINATION ${FOONATHAN_MEMORY_ARCHIVE_INSTALL_DIR} FRAMEWORK DESTINATION ${FOONATHAN_MEMORY_FRAMEWORK_INSTALL_DIR}) # Write/install version file include(CMakePackageConfigHelpers) set(version_file "${CMAKE_CURRENT_BINARY_DIR}/cmake/foonathan_memory-config-version.cmake") write_basic_package_version_file(${version_file} VERSION $CACHE{FOONATHAN_MEMORY_VERSION} COMPATIBILITY AnyNewerVersion) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/config_impl.hpp DESTINATION ${FOONATHAN_MEMORY_INC_INSTALL_DIR}/foonathan/memory/) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/container_node_sizes_impl.hpp DESTINATION ${FOONATHAN_MEMORY_INC_INSTALL_DIR}/foonathan/memory/detail) install(FILES ${header} DESTINATION ${FOONATHAN_MEMORY_INC_INSTALL_DIR}/foonathan/memory) install(FILES ${detail_header} DESTINATION ${FOONATHAN_MEMORY_INC_INSTALL_DIR}/foonathan/memory/detail) install(FILES ${version_file} DESTINATION ${FOONATHAN_MEMORY_CMAKE_CONFIG_INSTALL_DIR})