1# Copyright 2024 The Pigweed Authors 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); you may not 4# use this file except in compliance with the License. You may obtain a copy of 5# the License at 6# 7# https://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12# License for the specific language governing permissions and limitations under 13# the License. 14 15include($ENV{PW_ROOT}/pw_build/pigweed.cmake) 16include($ENV{PW_ROOT}/pw_malloc/backend.cmake) 17 18pw_add_module_config(pw_malloc_CONFIG) 19 20pw_add_facade(pw_malloc INTERFACE 21 BACKEND 22 pw_malloc_BACKEND 23 HEADERS 24 public/pw_malloc/malloc.h 25 PUBLIC_INCLUDES 26 public 27 PUBLIC_DEPS 28 pw_malloc.config 29 SOURCES 30 malloc.cc 31) 32 33pw_add_library(pw_malloc.config INTERFACE 34 PUBLIC_INCLUDES 35 . 36 public 37 HEADERS 38 public/pw_malloc/config.h 39 PUBLIC_DEPS 40 pw_malloc.common 41 ${pw_malloc_CONFIG} 42) 43 44pw_add_library(pw_malloc.common INTERFACE 45 PUBLIC_INCLUDES 46 public 47 HEADERS 48 public/pw_malloc/config.h 49 PUBLIC_DEPS 50 pw_allocator.allocator 51 pw_allocator.synchronized_allocator 52 pw_allocator.tracking_allocator 53 pw_assert 54 pw_bytes 55 pw_preprocessor 56 PUBLIC_LINK_OPTIONS 57 "-Wl,--wrap=malloc" 58 "-Wl,--wrap=free" 59 "-Wl,--wrap=realloc" 60 "-Wl,--wrap=calloc" 61 "-Wl,--wrap=_malloc_r" 62 "-Wl,--wrap=_realloc_r" 63 "-Wl,--wrap=_free_r" 64 "-Wl,--wrap=_calloc_r" 65) 66 67# Allocator-based backends. 68 69pw_add_library(pw_malloc.best_fit_block_allocator STATIC 70 PUBLIC_DEPS 71 pw_malloc.facade 72 PRIVATE_DEPS 73 pw_allocator.best_fit_block_allocator 74 SOURCES 75 best_fit_block_allocator.cc 76) 77 78pw_add_library(pw_malloc.bucket_block_allocator STATIC 79 PUBLIC_DEPS 80 pw_malloc.facade 81 PRIVATE_DEPS 82 pw_allocator.bucket_block_allocator 83 SOURCES 84 bucket_block_allocator.cc 85) 86 87pw_add_library(pw_malloc.dual_first_fit_block_allocator STATIC 88 PUBLIC_DEPS 89 pw_malloc.facade 90 PRIVATE_DEPS 91 pw_allocator.dual_first_fit_block_allocator 92 SOURCES 93 dual_first_fit_block_allocator.cc 94) 95 96pw_add_library(pw_malloc.first_fit_block_allocator STATIC 97 PUBLIC_DEPS 98 pw_malloc.facade 99 PRIVATE_DEPS 100 pw_allocator.first_fit_block_allocator 101 SOURCES 102 first_fit_block_allocator.cc 103) 104 105pw_add_library(pw_malloc.last_fit_block_allocator STATIC 106 PUBLIC_DEPS 107 pw_malloc.facade 108 PRIVATE_DEPS 109 pw_allocator.last_fit_block_allocator 110 SOURCES 111 last_fit_block_allocator.cc 112) 113 114pw_add_library(pw_malloc.worst_fit_block_allocator STATIC 115 PUBLIC_DEPS 116 pw_malloc.facade 117 PRIVATE_DEPS 118 pw_allocator.worst_fit_block_allocator 119 SOURCES 120 worst_fit_block_allocator.cc 121) 122 123# TODO(b/343531095): Add unit tests to CMake build whenever the following 124# conditions are met: 125# * The backend is not set. 126# * The host is not "mac", due to missing linker support. 127# * No sanitizer is configured, due to conflicts with interceptors. 128# * pico_malloc is not in use. 129# * gtest is not in use, since it dynamically allocates before calling SetUp(). 130