# Copyright 2024 The Pigweed 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 # # https://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. include($ENV{PW_ROOT}/pw_build/pigweed.cmake) include($ENV{PW_ROOT}/pw_malloc/backend.cmake) pw_add_module_config(pw_malloc_CONFIG) pw_add_facade(pw_malloc INTERFACE BACKEND pw_malloc_BACKEND HEADERS public/pw_malloc/malloc.h PUBLIC_INCLUDES public PUBLIC_DEPS pw_malloc.config SOURCES malloc.cc ) pw_add_library(pw_malloc.config INTERFACE PUBLIC_INCLUDES . public HEADERS public/pw_malloc/config.h PUBLIC_DEPS pw_malloc.common ${pw_malloc_CONFIG} ) pw_add_library(pw_malloc.common INTERFACE PUBLIC_INCLUDES public HEADERS public/pw_malloc/config.h PUBLIC_DEPS pw_allocator.allocator pw_allocator.synchronized_allocator pw_allocator.tracking_allocator pw_assert pw_bytes pw_preprocessor PUBLIC_LINK_OPTIONS "-Wl,--wrap=malloc" "-Wl,--wrap=free" "-Wl,--wrap=realloc" "-Wl,--wrap=calloc" "-Wl,--wrap=_malloc_r" "-Wl,--wrap=_realloc_r" "-Wl,--wrap=_free_r" "-Wl,--wrap=_calloc_r" ) # Allocator-based backends. pw_add_library(pw_malloc.best_fit_block_allocator STATIC PUBLIC_DEPS pw_malloc.facade PRIVATE_DEPS pw_allocator.best_fit_block_allocator SOURCES best_fit_block_allocator.cc ) pw_add_library(pw_malloc.bucket_block_allocator STATIC PUBLIC_DEPS pw_malloc.facade PRIVATE_DEPS pw_allocator.bucket_block_allocator SOURCES bucket_block_allocator.cc ) pw_add_library(pw_malloc.dual_first_fit_block_allocator STATIC PUBLIC_DEPS pw_malloc.facade PRIVATE_DEPS pw_allocator.dual_first_fit_block_allocator SOURCES dual_first_fit_block_allocator.cc ) pw_add_library(pw_malloc.first_fit_block_allocator STATIC PUBLIC_DEPS pw_malloc.facade PRIVATE_DEPS pw_allocator.first_fit_block_allocator SOURCES first_fit_block_allocator.cc ) pw_add_library(pw_malloc.last_fit_block_allocator STATIC PUBLIC_DEPS pw_malloc.facade PRIVATE_DEPS pw_allocator.last_fit_block_allocator SOURCES last_fit_block_allocator.cc ) pw_add_library(pw_malloc.worst_fit_block_allocator STATIC PUBLIC_DEPS pw_malloc.facade PRIVATE_DEPS pw_allocator.worst_fit_block_allocator SOURCES worst_fit_block_allocator.cc ) # TODO(b/343531095): Add unit tests to CMake build whenever the following # conditions are met: # * The backend is not set. # * The host is not "mac", due to missing linker support. # * No sanitizer is configured, due to conflicts with interceptors. # * pico_malloc is not in use. # * gtest is not in use, since it dynamically allocates before calling SetUp().