# 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
# - put_ref_count_in_previous_slot
# - 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}.

import("//build/config/chromecast_build.gni")
import("//build/config/sanitizers/sanitizers.gni")
if (is_ios) {
  import("//build/config/ios/ios_sdk.gni")
  import("//ios/features.gni")
}

# Sanitizers replace the allocator, don't use our own.
_is_using_sanitizers = is_asan || is_hwasan || is_lsan || is_tsan || is_msan

# - 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)

# - NaCl: No plans to support it.
# - iOS: Depends on ios_partition_alloc_enabled.
if (is_ios) {
  _is_partition_alloc_everywhere_platform = ios_partition_alloc_enabled
} else {
  _is_partition_alloc_everywhere_platform = !is_nacl
}

# Under Windows debug build, the allocator shim is not compatible with CRT.
#     NaCl in particular does seem to link some binaries statically
#     against the debug CRT with "is_nacl=false".
# Under Fuchsia, the allocator shim is only required for PA-E.
# For all other platforms & configurations, the shim is required, to replace
#     the default system allocators, e.g. with Partition Alloc.
if ((is_linux || is_chromeos || is_android || is_apple ||
     (is_fuchsia && !_disable_partition_alloc_everywhere) ||
     (is_win && !is_component_build && !is_debug)) && !_is_using_sanitizers) {
  _default_use_allocator_shim = true
} else {
  _default_use_allocator_shim = false
}

if (_default_use_allocator_shim && _is_partition_alloc_everywhere_platform &&
    !_disable_partition_alloc_everywhere) {
  _default_allocator = "partition"
} else {
  _default_allocator = "none"
}

use_partition_alloc_as_malloc_default = _default_allocator == "partition"
use_allocator_shim_default = _default_use_allocator_shim

_is_brp_supported = (is_win || is_android || is_linux || is_mac ||
                     is_chromeos) && use_partition_alloc_as_malloc_default

enable_backup_ref_ptr_support_default = _is_brp_supported

put_ref_count_in_previous_slot_default = true
enable_backup_ref_ptr_slow_checks_default = false
enable_dangling_raw_ptr_checks_default =
    enable_backup_ref_ptr_support_default && is_linux && !is_official_build &&
    (is_debug || dcheck_always_on)
