• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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