mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-02-18 05:00:48 +01:00
Enable BackupRefPtr for compatible non-Official builds (see #3239)
Compatible configurations include: - Non-component builds. - Debug builds on Mac/Linux. - Release builds on Windows (b/c Debug builds require component builds). - ASAN builds (which are also Release builds). See related logic in //build_overrides/partition_alloc.gni
This commit is contained in:
parent
0170f431a0
commit
32fc106ab0
@ -158,7 +158,7 @@ def GetValueString(val):
|
|||||||
return val
|
return val
|
||||||
|
|
||||||
|
|
||||||
def GetChromiumDefaultArgs():
|
def GetChromiumDefaultArgs(is_debug):
|
||||||
"""
|
"""
|
||||||
Return default GN args. These must match the Chromium defaults.
|
Return default GN args. These must match the Chromium defaults.
|
||||||
Only args that may be retrieved via GetArgValue() need to be specified here.
|
Only args that may be retrieved via GetArgValue() need to be specified here.
|
||||||
@ -169,6 +169,7 @@ def GetChromiumDefaultArgs():
|
|||||||
defaults = {
|
defaults = {
|
||||||
'dcheck_always_on': False,
|
'dcheck_always_on': False,
|
||||||
'is_asan': False,
|
'is_asan': False,
|
||||||
|
'is_component_build': is_debug,
|
||||||
'is_debug': True,
|
'is_debug': True,
|
||||||
'is_official_build': False,
|
'is_official_build': False,
|
||||||
'target_cpu': 'x64',
|
'target_cpu': 'x64',
|
||||||
@ -188,12 +189,15 @@ def GetChromiumDefaultArgs():
|
|||||||
return defaults
|
return defaults
|
||||||
|
|
||||||
|
|
||||||
def GetArgValue(args, key):
|
def GetArgValue(args, key, is_debug=None):
|
||||||
"""
|
"""
|
||||||
Return an existing GN arg value or the Chromium default.
|
Return an existing GN arg value or the Chromium default.
|
||||||
|
The |is_debug| argument is required in cases where |key| references it in
|
||||||
|
GetChromiumDefaultArgs.
|
||||||
"""
|
"""
|
||||||
defaults = GetChromiumDefaultArgs()
|
defaults = GetChromiumDefaultArgs(is_debug)
|
||||||
assert key in defaults, "No default Chromium value specified for %s" % key
|
assert not defaults.get(key, None) is None, \
|
||||||
|
"No default Chromium value specified for %s" % key
|
||||||
return args.get(key, defaults[key])
|
return args.get(key, defaults[key])
|
||||||
|
|
||||||
|
|
||||||
@ -258,18 +262,6 @@ def GetRecommendedDefaultArgs():
|
|||||||
# https://groups.google.com/a/chromium.org/g/chromium-packagers/c/-2VGexQAK6w/m/5K5ppK9WBAAJ
|
# https://groups.google.com/a/chromium.org/g/chromium-packagers/c/-2VGexQAK6w/m/5K5ppK9WBAAJ
|
||||||
result['use_qt'] = False
|
result['use_qt'] = False
|
||||||
|
|
||||||
# Use the system allocator instead of PartitionAlloc. Default is True with
|
|
||||||
# the allocator shim enabled. See issues #3061 and #3095.
|
|
||||||
result['use_partition_alloc_as_malloc'] = False
|
|
||||||
|
|
||||||
if platform == 'linux' or platform == 'mac':
|
|
||||||
# Disable dangling pointer detector until raw_ptr<> is enabled (see #3239).
|
|
||||||
# https://chromium.googlesource.com/chromium/src/+/main/docs/dangling_ptr.md
|
|
||||||
# These also require use_partition_alloc_as_malloc=true.
|
|
||||||
result['enable_backup_ref_ptr_support'] = False
|
|
||||||
result['enable_dangling_raw_ptr_checks'] = False
|
|
||||||
result['enable_dangling_raw_ptr_feature_flag'] = False
|
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
@ -331,7 +323,7 @@ def GetMergedArgs(build_args):
|
|||||||
return MergeDicts(dict, required)
|
return MergeDicts(dict, required)
|
||||||
|
|
||||||
|
|
||||||
def ValidateArgs(args):
|
def ValidateArgs(args, is_debug):
|
||||||
"""
|
"""
|
||||||
Validate GN arg combinations that we know about. Also provide suggestions
|
Validate GN arg combinations that we know about. Also provide suggestions
|
||||||
where appropriate.
|
where appropriate.
|
||||||
@ -483,6 +475,39 @@ def GetConfigArgs(args, is_debug, cpu):
|
|||||||
is_debug = False
|
is_debug = False
|
||||||
add_args['dcheck_always_on'] = True
|
add_args['dcheck_always_on'] = True
|
||||||
|
|
||||||
|
if platform == 'linux':
|
||||||
|
# Use PartitionAlloc-Everywhere (PA-E) instead of the default system
|
||||||
|
# allocator. Default is True with the allocator shim enabled. This is
|
||||||
|
# disabled for improved client app compatibility (see issues #3061 and
|
||||||
|
# #3095).
|
||||||
|
#
|
||||||
|
# Note that PartitionAlloc is still available in the binary and may be
|
||||||
|
# used explicitly in some cases. It would be better to instead build with
|
||||||
|
# |use_allocator_shim=false use_partition_alloc=false| to completely
|
||||||
|
# disable the allocator shim and PartitionAlloc, however that currently
|
||||||
|
# causes build errors in Chromium (see issue #3095).
|
||||||
|
add_args['use_partition_alloc_as_malloc'] = False
|
||||||
|
|
||||||
|
# BackupRefPtr support requires PA-E, so disable it.
|
||||||
|
add_args['enable_backup_ref_ptr_support'] = False
|
||||||
|
else:
|
||||||
|
is_asan = GetArgValue(args, 'is_asan')
|
||||||
|
|
||||||
|
# Enable additional BackupRefPtr debug features in non-Official build
|
||||||
|
# configurations that support them. See //main/base/memory/raw_ptr.md
|
||||||
|
if (is_debug or platform == 'windows' or is_asan) and \
|
||||||
|
not GetArgValue(args, 'is_component_build', is_debug):
|
||||||
|
if is_asan:
|
||||||
|
# Enable additional security checks for ASAN. Note that ASAN does not
|
||||||
|
# support PartitionAlloc-Everywhere (PA-E) and consequently provides
|
||||||
|
# slightly different functionality. This arg is equivalent to passing
|
||||||
|
# `--enable-features=PartitionAllocBackupRefPtr` on the command-line.
|
||||||
|
add_args['enable_backup_ref_ptr_feature_flag'] = True
|
||||||
|
else:
|
||||||
|
# Use a global table to track all live raw_ptr/raw_ref instances to help
|
||||||
|
# debug dangling pointers. This requires PA-E.
|
||||||
|
add_args['enable_backup_ref_ptr_instance_tracer'] = True
|
||||||
|
|
||||||
result = MergeDicts(args, add_args, {
|
result = MergeDicts(args, add_args, {
|
||||||
'is_debug': is_debug,
|
'is_debug': is_debug,
|
||||||
'target_cpu': cpu,
|
'target_cpu': cpu,
|
||||||
@ -494,7 +519,7 @@ def GetConfigArgs(args, is_debug, cpu):
|
|||||||
if key.startswith('arm_'):
|
if key.startswith('arm_'):
|
||||||
del result[key]
|
del result[key]
|
||||||
|
|
||||||
ValidateArgs(result)
|
ValidateArgs(result, is_debug)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
@ -550,7 +575,7 @@ def GetConfigArgsSandbox(platform, args, is_debug, cpu):
|
|||||||
'target_cpu': cpu,
|
'target_cpu': cpu,
|
||||||
})
|
})
|
||||||
|
|
||||||
ValidateArgs(result)
|
ValidateArgs(result, is_debug)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user