1# Copyright 2023 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") 16 17# Libraries 18 19pw_add_library(pw_allocator.allocator STATIC 20 HEADERS 21 public/pw_allocator/allocator.h 22 public/pw_allocator/as_pmr_allocator.h 23 PUBLIC_INCLUDES 24 public 25 PUBLIC_DEPS 26 pw_allocator.deallocator 27 pw_assert.check 28 pw_result 29 SOURCES 30 allocator.cc 31 as_pmr_allocator.cc 32) 33 34pw_add_library(pw_allocator.allocator_as_pool STATIC 35 HEADERS 36 public/pw_allocator/allocator_as_pool.h 37 PUBLIC_INCLUDES 38 public 39 PUBLIC_DEPS 40 pw_allocator.allocator 41 pw_allocator.pool 42 pw_status 43 SOURCES 44 allocator_as_pool.cc 45) 46 47pw_add_library(pw_allocator.best_fit_block_allocator INTERFACE 48 HEADERS 49 public/pw_allocator/best_fit_block_allocator.h 50 PUBLIC_INCLUDES 51 public 52 PUBLIC_DEPS 53 pw_allocator.block_allocator_base 54) 55 56pw_add_library(pw_allocator.block STATIC 57 HEADERS 58 public/pw_allocator/block.h 59 PUBLIC_INCLUDES 60 public 61 PUBLIC_DEPS 62 pw_allocator.allocator 63 pw_allocator.buffer 64 pw_assert 65 pw_bytes 66 pw_bytes.alignment 67 pw_result 68 pw_status 69 PRIVATE_DEPS 70 pw_allocator.buffer 71 pw_assert 72 SOURCES 73 block.cc 74) 75 76# TODO(b/326509341): Remove when all customers depend on the correct targets. 77pw_add_library(pw_allocator.block_allocator INTERFACE 78 HEADERS 79 public/pw_allocator/block_allocator.h 80 PUBLIC_INCLUDES 81 public 82 PUBLIC_DEPS 83 pw_allocator.first_fit_block_allocator 84 pw_allocator.last_fit_block_allocator 85 pw_allocator.best_fit_block_allocator 86 pw_allocator.worst_fit_block_allocator 87 pw_allocator.dual_first_fit_block_allocator 88) 89 90# TODO(b/326509341): Rename when all customers depend on the correct targets. 91pw_add_library(pw_allocator.block_allocator_base STATIC 92 HEADERS 93 public/pw_allocator/block_allocator_base.h 94 PUBLIC_INCLUDES 95 public 96 PUBLIC_DEPS 97 pw_allocator.allocator 98 pw_allocator.block 99 pw_allocator.fragmentation 100 pw_bytes.alignment 101 pw_result 102 pw_status 103 PRIVATE_DEPS 104 pw_assert 105 SOURCES 106 block_allocator.cc 107) 108 109pw_add_library(pw_allocator.bucket STATIC 110 HEADERS 111 public/pw_allocator/bucket.h 112 PUBLIC_INCLUDES 113 public 114 PUBLIC_DEPS 115 pw_function 116 pw_span 117 PRIVATE_DEPS 118 pw_assert 119 SOURCES 120 bucket.cc 121) 122 123pw_add_library(pw_allocator.bucket_block_allocator INTERFACE 124 HEADERS 125 public/pw_allocator/bucket_block_allocator.h 126 PUBLIC_INCLUDES 127 public 128 PUBLIC_DEPS 129 pw_allocator.block_allocator_base 130 pw_allocator.bucket 131 pw_status 132) 133 134pw_add_library(pw_allocator.buddy_allocator STATIC 135 HEADERS 136 public/pw_allocator/buddy_allocator.h 137 PUBLIC_INCLUDES 138 public 139 PUBLIC_DEPS 140 pw_alignment 141 pw_allocator.allocator 142 pw_allocator.bucket 143 pw_allocator.buffer 144 pw_bytes 145 pw_containers.vector 146 PRIVATE_DEPS 147 pw_allocator.buffer 148 pw_bytes.alignment 149 pw_assert 150 SOURCES 151 buddy_allocator.cc 152) 153 154pw_add_library(pw_allocator.buffer INTERFACE 155 HEADERS 156 public/pw_allocator/buffer.h 157 PUBLIC_INCLUDES 158 public 159 PUBLIC_DEPS 160 pw_bytes 161 pw_result 162) 163 164pw_add_library(pw_allocator.bump_allocator STATIC 165 HEADERS 166 public/pw_allocator/bump_allocator.h 167 PUBLIC_INCLUDES 168 public 169 PUBLIC_DEPS 170 pw_allocator.allocator 171 pw_bytes 172 PRIVATE_DEPS 173 pw_allocator.buffer 174 pw_bytes.alignment 175 SOURCES 176 bump_allocator.cc 177) 178 179pw_add_library(pw_allocator.chunk_pool STATIC 180 HEADERS 181 public/pw_allocator/chunk_pool.h 182 PUBLIC_INCLUDES 183 public 184 PUBLIC_DEPS 185 pw_allocator.pool 186 pw_bytes 187 pw_result 188 PRIVATE_DEPS 189 pw_allocator.buffer 190 pw_bytes.alignment 191 pw_assert.check 192 SOURCES 193 chunk_pool.cc 194) 195 196pw_add_library(pw_allocator.deallocator STATIC 197 SOURCES 198 unique_ptr.cc 199 HEADERS 200 public/pw_allocator/capability.h 201 public/pw_allocator/layout.h 202 public/pw_allocator/deallocator.h 203 public/pw_allocator/unique_ptr.h 204 PUBLIC_INCLUDES 205 public 206 PUBLIC_DEPS 207 pw_assert 208 pw_preprocessor 209 pw_result 210 pw_status 211) 212 213pw_add_library(pw_allocator.dual_first_fit_block_allocator INTERFACE 214 HEADERS 215 public/pw_allocator/dual_first_fit_block_allocator.h 216 PUBLIC_INCLUDES 217 public 218 PUBLIC_DEPS 219 pw_allocator.block_allocator_base 220) 221 222pw_add_library(pw_allocator.fallback_allocator STATIC 223 SOURCES 224 fallback_allocator.cc 225 HEADERS 226 public/pw_allocator/fallback_allocator.h 227 PUBLIC_INCLUDES 228 public 229 PUBLIC_DEPS 230 pw_allocator.allocator 231 pw_allocator.deallocator 232 pw_result 233 pw_status 234 PRIVATE_DEPS 235 pw_assert.check 236) 237 238pw_add_library(pw_allocator.first_fit_block_allocator INTERFACE 239 HEADERS 240 public/pw_allocator/first_fit_block_allocator.h 241 PUBLIC_INCLUDES 242 public 243 PUBLIC_DEPS 244 pw_allocator.block_allocator_base 245) 246 247pw_add_library(pw_allocator.fragmentation STATIC 248 HEADERS 249 public/pw_allocator/fragmentation.h 250 PUBLIC_INCLUDES 251 public 252 SOURCES 253 fragmentation.cc 254) 255 256pw_add_library(pw_allocator.freelist STATIC 257 HEADERS 258 public/pw_allocator/freelist.h 259 PUBLIC_INCLUDES 260 public 261 PUBLIC_DEPS 262 pw_containers.vector 263 pw_span 264 pw_status 265 SOURCES 266 freelist.cc 267) 268 269pw_add_library(pw_allocator.freelist_heap STATIC 270 HEADERS 271 public/pw_allocator/freelist_heap.h 272 PUBLIC_INCLUDES 273 public 274 PUBLIC_DEPS 275 pw_allocator.block 276 pw_allocator.freelist 277 PRIVATE_DEPS 278 pw_assert 279 pw_log 280 pw_span 281 SOURCES 282 freelist_heap.cc 283) 284 285pw_add_library(pw_allocator.last_fit_block_allocator INTERFACE 286 HEADERS 287 public/pw_allocator/last_fit_block_allocator.h 288 PUBLIC_INCLUDES 289 public 290 PUBLIC_DEPS 291 pw_allocator.block_allocator_base 292) 293 294pw_add_library(pw_allocator.libc_allocator STATIC 295 SOURCES 296 libc_allocator.cc 297 HEADERS 298 public/pw_allocator/libc_allocator.h 299 PUBLIC_INCLUDES 300 public 301 PUBLIC_DEPS 302 pw_allocator.allocator 303) 304 305pw_add_library(pw_allocator.null_allocator STATIC 306 SOURCES 307 null_allocator.cc 308 HEADERS 309 public/pw_allocator/null_allocator.h 310 PUBLIC_INCLUDES 311 public 312 PUBLIC_DEPS 313 pw_allocator.allocator 314) 315 316pw_add_library(pw_allocator.pool INTERFACE 317 HEADERS 318 public/pw_allocator/pool.h 319 PUBLIC_INCLUDES 320 public 321 PUBLIC_DEPS 322 pw_allocator.deallocator 323 pw_bytes 324 pw_result 325) 326 327pw_add_library(pw_allocator.synchronized_allocator INTERFACE 328 HEADERS 329 public/pw_allocator/synchronized_allocator.h 330 PUBLIC_INCLUDES 331 public 332 PUBLIC_DEPS 333 pw_allocator.allocator 334 pw_sync.borrow 335) 336 337pw_add_library(pw_allocator.tracking_allocator INTERFACE 338 HEADERS 339 public/pw_allocator/metrics.h 340 public/pw_allocator/tracking_allocator.h 341 PUBLIC_INCLUDES 342 public 343 PUBLIC_DEPS 344 pw_allocator.allocator 345 pw_metric 346 pw_status 347) 348 349pw_add_library(pw_allocator.typed_pool INTERFACE 350 HEADERS 351 public/pw_allocator/typed_pool.h 352 PUBLIC_INCLUDES 353 public 354 PUBLIC_DEPS 355 pw_allocator.allocator 356 pw_allocator.chunk_pool 357 pw_bytes 358 pw_result 359) 360 361pw_add_library(pw_allocator.worst_fit_block_allocator INTERFACE 362 HEADERS 363 public/pw_allocator/worst_fit_block_allocator.h 364 PUBLIC_INCLUDES 365 public 366 PUBLIC_DEPS 367 pw_allocator.block_allocator_base 368) 369 370# Test support 371 372pw_add_library(pw_allocator.testing INTERFACE 373 HEADERS 374 public/pw_allocator/testing.h 375 PUBLIC_INCLUDES 376 public 377 PUBLIC_DEPS 378 pw_allocator.allocator 379 pw_allocator.block 380 pw_allocator.buffer 381 pw_allocator.first_fit_block_allocator 382 pw_allocator.tracking_allocator 383 pw_bytes 384 pw_result 385 pw_status 386 pw_unit_test 387 PRIVATE_DEPS 388 pw_assert 389) 390 391pw_add_library(pw_allocator.block_allocator_testing STATIC 392 HEADERS 393 public/pw_allocator/block_allocator_testing.h 394 public/pw_allocator/testing.h 395 PUBLIC_INCLUDES 396 public 397 PUBLIC_DEPS 398 pw_allocator.block 399 pw_allocator.block_allocator 400 pw_unit_test 401 PRIVATE_DEPS 402 pw_assert 403 pw_bytes.alignment 404 pw_status 405 SOURCES 406 block_allocator_testing.cc 407) 408 409pw_add_library(pw_allocator.test_harness STATIC 410 HEADERS 411 public/pw_allocator/test_harness.h 412 PUBLIC_INCLUDES 413 public 414 PUBLIC_DEPS 415 pw_allocator.allocator 416 pw_containers 417 pw_random 418 PRIVATE_DEPS 419 pw_assert 420 pw_third_party.fuchsia.stdcompat 421 SOURCES 422 test_harness.cc 423) 424 425pw_add_library(pw_allocator.fuzzing STATIC 426 HEADERS 427 public/pw_allocator/fuzzing.h 428 PUBLIC_INCLUDES 429 public 430 PUBLIC_DEPS 431 pw_allocator.test_harness 432 pw_fuzzer.fuzztest 433 SOURCES 434 fuzzing.cc 435) 436 437# Tests 438 439pw_add_test(pw_allocator.allocator_as_pool_test 440 PRIVATE_DEPS 441 pw_allocator.allocator_as_pool 442 pw_allocator.testing 443 SOURCES 444 allocator_as_pool_test.cc 445 GROUPS 446 modules 447 pw_allocator 448) 449 450pw_add_test(pw_allocator.allocator_test 451 SOURCES 452 allocator_test.cc 453 PRIVATE_DEPS 454 pw_allocator.allocator 455 pw_allocator.testing 456 GROUPS 457 modules 458 pw_allocator 459) 460 461pw_add_test(pw_allocator.as_pmr_allocator_test 462 SOURCES 463 as_pmr_allocator_test.cc 464 PRIVATE_DEPS 465 pw_allocator.allocator 466 pw_allocator.testing 467 pw_unit_test 468 GROUPS 469 modules 470 pw_allocator 471) 472 473pw_add_test(pw_allocator.best_fit_block_allocator_test 474 SOURCES 475 best_fit_block_allocator_test.cc 476 PRIVATE_DEPS 477 pw_allocator.block_allocator_testing 478 pw_allocator.best_fit_block_allocator 479 GROUPS 480 modules 481 pw_allocator 482) 483 484pw_add_test(pw_allocator.block_test 485 SOURCES 486 block_test.cc 487 PRIVATE_DEPS 488 pw_allocator.block 489 pw_span 490 GROUPS 491 modules 492 pw_allocator 493) 494 495pw_add_test(pw_allocator.bucket_block_allocator_test 496 PRIVATE_DEPS 497 pw_allocator.block_allocator_testing 498 pw_allocator.bucket_block_allocator 499 SOURCES 500 bucket_block_allocator_test.cc 501 GROUPS 502 modules 503 pw_allocator 504) 505 506pw_add_test(pw_allocator.buddy_allocator_test 507 PRIVATE_DEPS 508 pw_allocator.buddy_allocator 509 SOURCES 510 buddy_allocator_test.cc 511 GROUPS 512 modules 513 pw_allocator 514) 515 516pw_add_test(pw_allocator.buffer_test 517 SOURCES 518 buffer_test.cc 519 PRIVATE_DEPS 520 pw_allocator.buffer 521 pw_bytes 522 pw_result 523 GROUPS 524 modules 525 pw_allocator 526) 527 528pw_add_test(pw_allocator.bump_allocator_test 529 PRIVATE_DEPS 530 pw_allocator.bump_allocator 531 SOURCES 532 bump_allocator_test.cc 533 GROUPS 534 modules 535 pw_allocator 536) 537 538pw_add_test(pw_allocator.chunk_pool_test 539 PRIVATE_DEPS 540 pw_allocator.chunk_pool 541 pw_allocator.testing 542 SOURCES 543 chunk_pool_test.cc 544) 545 546pw_add_test(pw_allocator.dual_first_fit_block_allocator_test 547 SOURCES 548 dual_first_fit_block_allocator_test.cc 549 PRIVATE_DEPS 550 pw_allocator.block_allocator_testing 551 pw_allocator.dual_first_fit_block_allocator 552 GROUPS 553 modules 554 pw_allocator 555) 556 557pw_add_test(pw_allocator.fallback_allocator_test 558 PRIVATE_DEPS 559 pw_allocator.testing 560 pw_allocator.fallback_allocator 561 pw_status 562 SOURCES 563 fallback_allocator_test.cc 564 GROUPS 565 modules 566 pw_allocator 567) 568 569pw_add_test(pw_allocator.first_fit_block_allocator_test 570 SOURCES 571 first_fit_block_allocator_test.cc 572 PRIVATE_DEPS 573 pw_allocator.block_allocator_testing 574 pw_allocator.buffer 575 pw_allocator.first_fit_block_allocator 576 GROUPS 577 modules 578 pw_allocator 579) 580 581pw_add_test(pw_allocator.fragmentation_test 582 SOURCES 583 fragmentation_test.cc 584 PRIVATE_DEPS 585 pw_allocator.fragmentation 586 GROUPS 587 modules 588 pw_allocator 589) 590 591pw_add_test(pw_allocator.freelist_test 592 SOURCES 593 freelist_test.cc 594 PRIVATE_DEPS 595 pw_allocator.freelist 596 pw_span 597 pw_status 598 GROUPS 599 modules 600 pw_allocator 601) 602 603pw_add_test(pw_allocator.freelist_heap_test 604 SOURCES 605 freelist_heap_test.cc 606 PRIVATE_DEPS 607 pw_allocator.freelist_heap 608 GROUPS 609 modules 610 pw_allocator 611) 612 613pw_add_test(pw_allocator.last_fit_block_allocator_test 614 SOURCES 615 last_fit_block_allocator_test.cc 616 PRIVATE_DEPS 617 pw_allocator.block_allocator_testing 618 pw_allocator.last_fit_block_allocator 619 GROUPS 620 modules 621 pw_allocator 622) 623 624pw_add_test(pw_allocator.libc_allocator_test 625 SOURCES 626 libc_allocator_test.cc 627 PRIVATE_DEPS 628 pw_allocator.libc_allocator 629 pw_unit_test 630 GROUPS 631 modules 632 pw_allocator 633) 634 635pw_add_test(pw_allocator.null_allocator_test 636 SOURCES 637 null_allocator_test.cc 638 PRIVATE_DEPS 639 pw_allocator.null_allocator 640 pw_unit_test 641 GROUPS 642 modules 643 pw_allocator 644) 645 646pw_add_test(pw_allocator.synchronized_allocator_test 647 SOURCES 648 synchronized_allocator_test.cc 649 PRIVATE_DEPS 650 pw_allocator.testing 651 pw_allocator.test_harness 652 pw_allocator.synchronized_allocator 653 pw_sync.binary_semaphore 654 pw_sync.interrupt_spin_lock 655 pw_sync.mutex 656 pw_thread.test_thread_context 657 pw_thread.thread 658 pw_thread.thread_core 659 pw_thread.yield 660 pw_random 661 GROUPS 662 modules 663 pw_allocator 664) 665 666pw_add_test(pw_allocator.tracking_allocator_test 667 SOURCES 668 tracking_allocator_test.cc 669 PRIVATE_DEPS 670 pw_allocator.testing 671 pw_allocator.tracking_allocator 672 GROUPS 673 modules 674 pw_allocator 675) 676 677pw_add_test(pw_allocator.typed_pool_test 678 SOURCES 679 typed_pool_test.cc 680 PRIVATE_DEPS 681 pw_allocator.typed_pool 682 pw_bytes.alignment 683 pw_unit_test 684 GROUPS 685 modules 686 pw_allocator 687) 688 689pw_add_test(pw_allocator.unique_ptr_test 690 SOURCES 691 unique_ptr_test.cc 692 PRIVATE_DEPS 693 pw_allocator.allocator 694 pw_allocator.testing 695 GROUPS 696 modules 697 pw_allocator 698) 699 700pw_add_test(pw_allocator.worst_fit_block_allocator_test 701 SOURCES 702 worst_fit_block_allocator_test.cc 703 PRIVATE_DEPS 704 pw_allocator.block_allocator_testing 705 pw_allocator.worst_fit_block_allocator 706 GROUPS 707 modules 708 pw_allocator 709) 710 711add_subdirectory(examples) 712