blob: 1f282e04c32dff2eb3fb55d12b0533680142916b [file] [log] [blame]
Nico Weberb80b0852019-08-01 22:03:011# Copyright 2019 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
Rob Hueber336a5ae2019-09-10 21:43:055import("//build/config/chromecast_build.gni")
Nico Weberb80b0852019-08-01 22:03:016import("//build/config/sanitizers/sanitizers.gni")
7
Ali Juma50a19382021-09-20 21:25:238if (is_ios) {
9 import("//build/config/ios/ios_sdk.gni")
10}
11
Benoit Lize88016fd2021-01-13 16:25:1112# Sanitizers replace the allocator, don't use our own.
13_is_using_sanitizers = is_asan || is_hwasan || is_lsan || is_tsan || is_msan
14
Benoit Lize1ac7ce72021-07-01 10:59:5515# - Component build support is disabled on all platforms. It is known to cause
16# issues on some (e.g. Windows with shims, Android with non-universal symbol
17# wrapping), and has not been validated on others.
18# - Windows: debug CRT is not compatible, see below.
Benoit Lizec74f98f2021-10-25 13:15:2919_disable_partition_alloc = is_component_build || (is_win && is_debug)
Benoit Lizeec6b52f2021-11-18 19:54:1720_is_partition_alloc_platform =
Kunihiko Sakamoto466878a42021-11-24 07:49:0121 is_android || is_win || is_mac || is_linux || is_chromeos
Benoit Lizeb30fcd42021-01-15 13:44:1222
Nico Weberb80b0852019-08-01 22:03:0123# The debug CRT on Windows has some debug features that are incompatible with
24# the shim. NaCl in particular does seem to link some binaries statically
25# against the debug CRT with "is_nacl=false".
Kunihiko Sakamoto466878a42021-11-24 07:49:0126if ((is_linux || is_chromeos || is_android || is_apple ||
Benoit Lize88016fd2021-01-13 16:25:1127 (is_win && !is_component_build && !is_debug)) && !_is_using_sanitizers) {
Nico Weberb80b0852019-08-01 22:03:0128 _default_use_allocator_shim = true
29} else {
30 _default_use_allocator_shim = false
31}
32
Benoit Lize060ef062021-02-01 11:41:4633if (_default_use_allocator_shim && _is_partition_alloc_platform &&
Benoit Lizeb30fcd42021-01-15 13:44:1234 !_disable_partition_alloc) {
Yuki Shiinod476ae3032020-11-18 05:56:2335 _default_allocator = "partition"
Lan Weidb909c372021-09-10 17:34:0936} else {
Benoit Ld4000aec2021-09-15 13:23:2637 _default_allocator = "none"
Yuki Shiinoa17905e32020-10-09 18:04:5938}
39
Nico Weberb80b0852019-08-01 22:03:0140declare_args() {
41 # Memory allocator to use. Set to "none" to use default allocator.
42 use_allocator = _default_allocator
43
44 # Causes all the allocations to be routed via allocator_shim.cc.
45 use_allocator_shim = _default_use_allocator_shim
Yuki Shiino24622fa2020-08-26 12:01:0246
Yuki Shiino90d5fe682020-09-02 11:03:5147 # Whether PartitionAlloc should be available for use or not.
48 # true makes PartitionAlloc linked to the executable or shared library and
49 # makes it available for use, but it doesn't mean that the default allocator
50 # is PartitionAlloc. PartitionAlloc may or may not be the default allocator.
51 #
52 # |use_allocator = "partition"| makes PartitionAlloc the default allocator
53 # but it's effective only when |use_partition_alloc = true|.
54 #
55 # TODO(lizeb, yukishiino): Determine if |use_partition_alloc| is necessary or
56 # not, and redesign or remove the flag accordingly. We may want to assert a
57 # possible conflict between |use_allocator = "partition"| and
58 # |use_partition_alloc = true| rather than prioritizing use_partition_alloc.
Ali Juma50a19382021-09-20 21:25:2359 # TODO(crbug.com/1250788): Enable use_partition_alloc on iOS device builds.
60 use_partition_alloc = !is_ios || target_environment == "simulator"
Yuki Shiino90d5fe682020-09-02 11:03:5161}
62
63if (!use_partition_alloc && use_allocator == "partition") {
64 # If there is a conflict, prioritize |use_partition_alloc| over
65 # |use_allocator|.
66 use_allocator = "none"
Nico Weberb80b0852019-08-01 22:03:0167}
68
Benoit Ld4000aec2021-09-15 13:23:2669# No longer the default on any platform, but still supported through GN args on Linux.
70assert(use_allocator != "tcmalloc" || is_linux,
71 "tcmalloc is only supported on Linux")
72assert(use_allocator == "none" || use_allocator == "partition" ||
73 use_allocator == "tcmalloc")
Nico Weberb80b0852019-08-01 22:03:0174
Rohit Rao849b4262020-05-01 19:10:3475assert(
Yuki Shiino24622fa2020-08-26 12:01:0276 !use_allocator_shim || is_linux || is_chromeos || is_android || is_win ||
Kevin Marshall64a82a92021-09-08 20:49:4577 is_fuchsia || is_apple,
78 "use_allocator_shim works only on Android, iOS, Linux, macOS, Fuchsia, " +
79 "and Windows.")
Nico Weberb80b0852019-08-01 22:03:0180
Moe Ahmadia36d801a2021-08-30 22:30:5381if (is_win && use_allocator_shim) {
Kevin Marshall64a82a92021-09-08 20:49:4582 # TODO(crbug.com/1245317): Add a comment indicating why the shim doesn't work.
Nico Weberb80b0852019-08-01 22:03:0183 assert(!is_component_build,
Moe Ahmadia36d801a2021-08-30 22:30:5384 "The allocator shim doesn't work for the component build on Windows.")
Nico Weberb80b0852019-08-01 22:03:0185}
Bartek Nowierskiceb2fb32021-05-26 15:09:0586
Keishi Hattori122e7a02021-11-28 11:51:0187_is_brp_supported = (is_win || is_android) && use_allocator == "partition"
Keishi Hattori01d5ac8fe2021-11-26 23:59:1488
89declare_args() {
90 # Set use_backup_ref_ptr true to use BackupRefPtr (BRP) as the implementation
91 # of raw_ptr<T>, and enable PartitionAlloc support for it.
92 use_backup_ref_ptr = _is_brp_supported
93
94 # If BRP is enabled, additional options are available:
95 # - put_ref_count_in_previous_slot: place the ref-count at the end of the
96 # previous slot (or in metadata if a slot starts on the page boundary), as
97 # opposed to the beginning of the slot.
98 # - never_remove_from_brp_pool_blocklist: never remove super-pages from the
99 # BRP-pool block list
100 # - enable_backup_ref_ptr_slow_checks: enable additional safety checks that
101 # are too expensive to have on by default.
Bartek Nowierski0bd8f5d2021-12-15 02:19:37102 put_ref_count_in_previous_slot = _is_brp_supported
Keishi Hattori01d5ac8fe2021-11-26 23:59:14103 never_remove_from_brp_pool_blocklist = _is_brp_supported
Keishi Hattori14dcefd2021-11-28 10:46:22104 enable_backup_ref_ptr_slow_checks = false
Keishi Hattori01d5ac8fe2021-11-26 23:59:14105
106 # Registers the binary for a fake binary A/B experiment. The binaries built
107 # with this flag have no behavior difference, except for setting a synthetic
108 # Finch.
109 use_fake_binary_experiment = false
110}
111
Bartek Nowierskiceb2fb32021-05-26 15:09:05112# Prevent using BackupRefPtr when PartitionAlloc-Everywhere isn't used.
113# In theory, such a configuration is possible, but its scope would be limited to
114# only Blink partitions, which is currently not tested. Better to trigger an
115# error, than have BackupRefPtr silently disabled while believing it is enabled.
116if (!is_nacl) {
117 assert(!use_backup_ref_ptr || use_allocator == "partition",
118 "Can't use BackupRefPtr without PartitionAlloc-Everywhere")
119}
120
Bartek Nowierskiceb2fb32021-05-26 15:09:05121# put_ref_count_in_previous_slot can only be used if use_backup_ref_ptr
122# is true.
123assert(
124 use_backup_ref_ptr || !put_ref_count_in_previous_slot,
125 "Can't put ref count in the previous slot if BackupRefPtr isn't enabled at all")
126
Bartek Nowierski53904392021-07-14 06:55:13127# never_remove_from_brp_pool_blocklist can only be used if use_backup_ref_ptr
Bartek Nowierskiceb2fb32021-05-26 15:09:05128# is true.
129assert(
Bartek Nowierski53904392021-07-14 06:55:13130 use_backup_ref_ptr || !never_remove_from_brp_pool_blocklist,
131 "never_remove_from_brp_pool_blocklist requires BackupRefPtr to be enabled")
Bartek Nowierskiceb2fb32021-05-26 15:09:05132
133# enable_backup_ref_ptr_slow_checks can only be used if use_backup_ref_ptr
134# is true.
135assert(use_backup_ref_ptr || !enable_backup_ref_ptr_slow_checks,
136 "Can't enable additional BackupRefPtr checks if it isn't enabled at all")