blob: 8d824e1b6aff9b4e2ee2d426c7cb9361488cd1a1 [file] [log] [blame]
# Copyright 2022 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# This defines PartitionAlloc's default build configuration for chromium.
# If building PartitionAlloc as a part of chromium,
# //build_overrides/partition_alloc.gni points out this file.
# //base/allocator/partition_allocator/partition_alloc.gni will import
# this file and will use the defined values as default build configuration.
#
# partition_alloc.gni declares the following variables:
# - use_allocator_shim
# - use_partition_alloc_as_malloc
# - enable_backup_ref_ptr_support
# - enable_backup_ref_ptr_slow_checks
# - enable_dangling_raw_ptr_checks
# - backup_ref_ptr_poison_oob_ptr
#
# Temporarily defines use_allocator_shim here. After deciding what
# allocator_shim should be (e.g. a part of PartitionAlloc, a new component:
# allocator_shim, and so on), move use_allocator_shim_default to the place.
# - use_allocator_shim
#
# {variable}_default works as the default value of {variable}.
# TODO(crbug.com/41481467) Document what are the required and optional GN
# variable embedders can provide to partition_alloc. For the least common,
# consider wrapping them into some partition_alloc specific names.
import("//build/config/android/config.gni")
import("//build/config/cast.gni")
import("//build/config/chromeos/ui_mode.gni")
import("//build/config/compiler/compiler.gni")
import("//build/config/cronet/config.gni")
import("//build/config/dcheck_always_on.gni")
import("//build/config/logging.gni")
import("//build/config/sanitizers/sanitizers.gni")
if (is_ios) {
import("//ios/features.gni")
}
partition_alloc_enable_arc_config = "//build/config/compiler:enable_arc"
declare_args() {
# Turns on compiler optimizations in PartitionAlloc in Debug build. If
# enabling PartitionAlloc-Everywhere in Debug build for tests in Debug build,
# since all memory allocations and deallocations are executed by non-optimized
# PartitionAlloc, chrome (including tests) will be much slower. This will
# cause debug trybots' timeouts. If we want to debug PartitionAlloc itself,
# use partition_alloc_optimized_debug=false. Otherwise, use
# partition_alloc_optimized_debug=true to enable optimized PartitionAlloc.
partition_alloc_optimized_debug = true
}
if (!is_debug || partition_alloc_optimized_debug) {
# In chrome, partition_alloc is relatively hot (>1% of cycles for users of
# CrOS). Use speed-focused optimizations for it.
partition_alloc_remove_configs =
[ "//build/config/compiler:default_optimization" ]
partition_alloc_add_configs = [ "//build/config/compiler:optimize_speed" ]
} else {
partition_alloc_remove_configs =
[ "//build/config/compiler:default_optimization" ]
partition_alloc_add_configs = [ "//build/config/compiler:no_optimize" ]
}
# llvm_profile_set_target() generated by -fgenerate-profile invokes malloc()
# internally. Since allocator_shim and PartitionAlloc are not reenterant,
# the code will cause crashes. See crbug.com/338094768.
partition_alloc_remove_configs +=
[ "//build/config/compiler/pgo:default_pgo_flags" ]
# - Component build support is disabled on all platforms except Linux. It is
# known to cause issues on some (e.g. Windows with shims, Android with
# non-universal symbol wrapping), and has not been validated on others.
# - Windows: debug CRT is not compatible, see below.
_disable_partition_alloc_everywhere =
(!is_linux && is_component_build) || (is_win && is_debug)
use_allocator_shim_default = true # Updated below:
# Sanitizers replace the allocator, don't use our own.
if (is_asan || is_hwasan || is_lsan || is_tsan || is_msan) {
use_allocator_shim_default = false
}
# Under Fuchsia, the allocator shim is only required for PA-E.
if (is_fuchsia && _disable_partition_alloc_everywhere) {
use_allocator_shim_default = false
}
# Under Windows debug build, the allocator shim is not compatible with CRT.
if (is_win && is_debug) {
use_allocator_shim_default = false
}
if (is_win && is_component_build && (!use_custom_libcxx || libcxx_is_shared)) {
use_allocator_shim_default = false
}
# When Cronet builds within Android this is not supported. See
# https://crrev.com/c/6179216.
if (is_cronet_for_aosp_build) {
use_allocator_shim_default = false
}
shim_supports_sized_dealloc_default = use_sized_deallocation
use_partition_alloc_as_malloc_default =
use_allocator_shim_default && !_disable_partition_alloc_everywhere
enable_backup_ref_ptr_support_default = use_partition_alloc_as_malloc_default
enable_backup_ref_ptr_slow_checks_default = false
enable_dangling_raw_ptr_checks_default =
# The DanglingPointerDetector relies on BackupRefPtr:
enable_backup_ref_ptr_support_default &&
# DanglingPointerDetector is not yet enabled for official builds.
# Enabling it would require:
# - Metric-monitored dry-runs to assess real-world impact.
# - Performance re-evaluation, although past impact was neutral.
# - Additional considerations (etc.).
#
# It's also unclear if potential security issues warrant crash reports,
# as this could burden developers. Non-crashing metrics might help assess
# the value.
!is_official_build &&
# In unofficial builds, enable only for developers interested in
# DCHECKd/Debug builds. In the future, given its neutral performance impact,
# we could consider removing this restriction.
(is_debug || dcheck_always_on) &&
# iOS is rolling out DanglingPointerDetection bot-by-bot.
(!is_ios || ios_enable_dangling_raw_ptr_checks) &&
# Fuchsia has never been tested against DanglingPointerDetector at the
#moment.
!is_fuchsia &&
# Only the `android-rel` CQ bot has enforced DanglingPointerDetector checks
# at the moment. The other Android bots are not ready for it yet.
!is_android
raw_ptr_zero_on_construct_default = true
raw_ptr_zero_on_move_default = true
raw_ptr_zero_on_destruct_default = false
# Allow embedders to opt-out of C++20 build which is set as default.
# Kindly notify PartitionAlloc owners of change to false.
assert_cpp20_default = true
# Cronet disables PartitionAlloc to reduce its binary size (crbug.com/674570).
# TODO(crbug.com/384669394): Consider enabling it instead.
use_partition_alloc_default = !is_cronet_build