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