| # Build Config |
| |
| PartitionAlloc's behavior and operation can be influenced by many |
| different settings. Broadly, these are controlled at the top-level by |
| [GN args][gn-declare-args], which propagate via |
| [buildflags][buildflag-header] and `#defined` clauses. |
| |
| *** promo |
| Most of what you'll want to know exists between |
| |
| * [`//base/allocator/partition_allocator/BUILD.gn`][pa-build-gn], |
| * Everything else ending in `.gn` or `.gni` in |
| `//base/allocator/partition_allocator/src/partition_alloc/`, |
| * [`allocator.gni`][allocator-gni], |
| * [`//base/allocator/BUILD.gn`][base-allocator-build-gn], and |
| * [`//base/BUILD.gn`][base-build-gn]. |
| *** |
| |
| *** aside |
| While Chromium promotes the `#if BUILDFLAG(FOO)` construct, some of |
| PartitionAlloc's behavior is governed by compound conditions `#defined` |
| in [`partition_alloc_config.h`][partition-alloc-config]. |
| *** |
| |
| *** promo |
| PartitionAlloc targets C++20. As the team develops standalone |
| PartitionAlloc, this may diverge from what the rest of Chrome browser |
| does, as we will be obligated to support external clients that |
| may not yet support newer C++ standards. |
| |
| See [Chrome-External Builds](./external_builds.md) for more. |
| *** |
| |
| ## Select GN Args |
| |
| ### `use_partition_alloc` |
| |
| Defines whether PartitionAlloc is at all available. |
| |
| Setting this `false` will entirely remove PartitionAlloc from the |
| Chromium build. _You probably do not want this._ |
| |
| *** note |
| Back when PartitionAlloc was the dedicated allocator in Blink, disabling |
| it was logically identical to wholly disabling it in Chromium. This GN |
| arg organically grew in scope with the advent of |
| PartitionAlloc-Everywhere and must be `true` as a prerequisite for |
| enabling PA-E. |
| *** |
| |
| ### `use_partition_alloc_as_malloc` |
| |
| Does nothing special when value is `false`. Enables |
| [PartitionAlloc-Everywhere (PA-E)][pae-public-doc] when value is `true`. |
| |
| *** note |
| * While "everywhere" (in "PartitionAlloc-Everywhere") tautologically |
| includes Blink where PartitionAlloc originated, setting |
| `use_partition_alloc_as_malloc = false` does not disable PA usage in Blink, |
| which invokes PA explicitly (not via malloc). |
| * `use_partition_alloc_as_malloc = true` must not be confused |
| with `use_partition_alloc` (see above). |
| *** |
| |
| ## Notable Macros |
| |
| There is an ongoing effort |
| [to break out PartitionAlloc into a standalone library][pa-ee-crbug]. |
| Once PartitionAlloc stands alone from the larger Chrome build apparatus, |
| the code loses access to some macros. This is not an immediate concern, |
| but the team needs to decide either |
| |
| * how to propagate these macros in place, or |
| * how to remove them, replacing them with PA-specific build config. |
| |
| A non-exhaustive list of work items: |
| |
| * `OFFICIAL_BUILD` - influences crash macros and |
| `PA_THREAD_CACHE_ALLOC_STATS`. These are conceptually distinct enough |
| to be worth separating into dedicated build controls. |
| * `IS_PARTITION_ALLOC_IMPL` - must be defined when PartitionAlloc is |
| built as a shared library. This is required to export symbols. |
| * `COMPONENT_BUILD` - component builds (as per |
| `//docs/component_build.md`) must `#define COMPONENT_BUILD`. |
| Additionally, to build Win32, invoker must `#define WIN32`. |
| * `MEMORY_TOOL_REPLACES_ALLOCATOR` |
| * `*_SANITIZER` - mainly influences unit tests. |
| |
| *** note |
| Over time, the above list should evolve into a list of macros / GN args |
| that influence PartitionAlloc's behavior. |
| *** |
| |
| [gn-declare-args]: https://gn.googlesource.com/gn/+/refs/heads/main/docs/reference.md#func_declare_args |
| [buildflag-header]: https://source.chromium.org/chromium/chromium/src/+/main:build/buildflag_header.gni |
| [pa-build-gn]: https://source.chromium.org/chromium/chromium/src/+/main:base/allocator/partition_allocator/BUILD.gn |
| [allocator-gni]: https://source.chromium.org/chromium/chromium/src/+/main:base/allocator/allocator.gni |
| [base-allocator-build-gn]: https://source.chromium.org/chromium/chromium/src/+/main:base/allocator/BUILD.gn |
| [base-build-gn]: https://source.chromium.org/chromium/chromium/src/+/main:base/BUILD.gn |
| [partition-alloc-config]: https://source.chromium.org/chromium/chromium/src/+/main:base/allocator/partition_allocator/src/partition_alloc/partition_alloc_config.h |
| [pae-public-doc]: https://docs.google.com/document/d/1R1H9z5IVUAnXJgDjnts3nTJVcRbufWWT9ByXLgecSUM/preview |
| [miracleptr-doc]: https://docs.google.com/document/d/1pnnOAIz_DMWDI4oIOFoMAqLnf_MZ2GsrJNb_dbQ3ZBg/preview |
| [pa-ee-crbug]: https://crbug.com/1151236 |