Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Unified Diff: tools/gn.py

Issue 2614493002: GN: Add option to build with TSAN (Closed)
Patch Set: Add an option for MSAN as well Created 3 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/tools/gyp/runtime-configurations.gypi ('k') | tools/gyp/all.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gn.py
diff --git a/tools/gn.py b/tools/gn.py
index 93bbf1bbcf6c45406ae2ff178c0785515b46d258..24e9380d6ddefb5e953ba022e5b748b5ea1ee03d 100755
--- a/tools/gn.py
+++ b/tools/gn.py
@@ -90,14 +90,16 @@ def to_gn_args(args, mode, arch, target_os):
gn_args['dart_zlib_path'] = "//runtime/bin/zlib"
# Use tcmalloc only when targeting Linux and when not using ASAN.
- gn_args['dart_use_tcmalloc'] = (gn_args['target_os'] == 'linux'
- and not args.asan)
+ gn_args['dart_use_tcmalloc'] = ((gn_args['target_os'] == 'linux')
+ and not args.asan
+ and not args.msan
+ and not args.tsan)
# Force -mfloat-abi=hard and -mfpu=neon on Linux as we're specifying
# a gnueabihf compiler in //build/toolchain/linux BUILD.gn.
# TODO(zra): This will likely need some adjustment to build for armv6 etc.
hard_float = (gn_args['target_cpu'].startswith('arm') and
- gn_args['target_os'] == 'linux')
+ (gn_args['target_os'] == 'linux'))
if hard_float:
gn_args['arm_float_abi'] = 'hard'
gn_args['arm_use_neon'] = True
@@ -114,17 +116,22 @@ def to_gn_args(args, mode, arch, target_os):
# TODO(zra): Investigate using clang with these configurations.
# Clang compiles tcmalloc's inline assembly for ia32 on Linux wrong, so we
- # don't use clang in that configuration.
+ # don't use clang in that configuration. Thus, we use gcc for ia32 *unless*
+ # asan or tsan is specified.
has_clang = (host_os != 'win'
and args.os not in ['android']
- and not (gn_args['target_os'] == 'linux' and
- gn_args['host_cpu'] == 'x86' and
- not args.asan) # Use clang for asan builds.
and not gn_args['target_cpu'].startswith('arm')
- and not gn_args['target_cpu'].startswith('mips'))
+ and not gn_args['target_cpu'].startswith('mips')
+ and not ((gn_args['target_os'] == 'linux')
+ and (gn_args['host_cpu'] == 'x86')
+ and not args.asan
+ and not args.msan
+ and not args.tsan)) # Use clang for sanitizer builds.
gn_args['is_clang'] = args.clang and has_clang
gn_args['is_asan'] = args.asan and gn_args['is_clang']
+ gn_args['is_msan'] = args.msan and gn_args['is_clang']
+ gn_args['is_tsan'] = args.tsan and gn_args['is_clang']
# Setup the user-defined sysroot.
if gn_args['target_os'] == 'linux' and args.wheezy:
@@ -214,11 +221,18 @@ def ide_switch(host_os):
# Environment variables for default settings.
DART_USE_ASAN = "DART_USE_ASAN"
+DART_USE_MSAN = "DART_USE_MSAN"
+DART_USE_TSAN = "DART_USE_TSAN"
DART_USE_WHEEZY = "DART_USE_WHEEZY"
def use_asan():
return DART_USE_ASAN in os.environ
+def use_msan():
+ return DART_USE_MSAN in os.environ
+
+def use_tsan():
+ return DART_USE_TSAN in os.environ
def use_wheezy():
return DART_USE_WHEEZY in os.environ
@@ -226,70 +240,91 @@ def use_wheezy():
def parse_args(args):
args = args[1:]
- parser = argparse.ArgumentParser(description='A script to run `gn gen`.')
+ parser = argparse.ArgumentParser(
+ description='A script to run `gn gen`.',
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter)
+ common_group = parser.add_argument_group('Common Arguments')
+ other_group = parser.add_argument_group('Other Arguments')
- parser.add_argument("-v", "--verbose",
- help='Verbose output.',
- default=False, action="store_true")
- parser.add_argument('--mode', '-m',
+ common_group.add_argument('--arch', '-a',
+ type=str,
+ help='Target architectures (comma-separated).',
+ metavar='[all,ia32,x64,simarm,arm,simarmv6,armv6,simarmv5te,armv5te,'
+ 'simmips,mips,simarm64,arm64,simdbc,armsimdbc]',
+ default='x64')
+ common_group.add_argument('--mode', '-m',
type=str,
help='Build variants (comma-separated).',
metavar='[all,debug,release,product]',
default='debug')
- parser.add_argument('--os',
+ common_group.add_argument('--os',
type=str,
help='Target OSs (comma-separated).',
metavar='[all,host,android]',
default='host')
- parser.add_argument('--arch', '-a',
- type=str,
- help='Target architectures (comma-separated).',
- metavar='[all,ia32,x64,simarm,arm,simarmv6,armv6,simarmv5te,armv5te,'
- 'simmips,mips,simarm64,arm64,simdbc,armsimdbc]',
- default='x64')
- parser.add_argument('--asan',
+ common_group.add_argument("-v", "--verbose",
+ help='Verbose output.',
+ default=False, action="store_true")
+
+ other_group.add_argument('--asan',
help='Build with ASAN',
default=use_asan(),
action='store_true')
- parser.add_argument('--no-asan',
+ other_group.add_argument('--no-asan',
help='Disable ASAN',
dest='asan',
action='store_false')
- parser.add_argument('--wheezy',
- help='Use the Debian wheezy sysroot on Linux',
- default=use_wheezy(),
+ other_group.add_argument('--clang',
+ help='Use Clang',
+ default=True,
action='store_true')
- parser.add_argument('--no-wheezy',
- help='Disable the Debian wheezy sysroot on Linux',
- dest='wheezy',
+ other_group.add_argument('--no-clang',
+ help='Disable Clang',
+ dest='clang',
action='store_false')
- parser.add_argument('--goma',
+ other_group.add_argument('--goma',
help='Use goma',
default=True,
action='store_true')
- parser.add_argument('--no-goma',
+ other_group.add_argument('--no-goma',
help='Disable goma',
dest='goma',
action='store_false')
- parser.add_argument('--clang',
- help='Use Clang',
- default=True,
- action='store_true')
- parser.add_argument('--no-clang',
- help='Disable Clang',
- dest='clang',
- action='store_false')
- parser.add_argument('--ide',
+ other_group.add_argument('--ide',
help='Generate an IDE file.',
default=os_has_ide(HOST_OS),
action='store_true')
- parser.add_argument('--target-sysroot', '-s',
+ other_group.add_argument('--msan',
+ help='Build with MSAN',
+ default=use_msan(),
+ action='store_true')
+ other_group.add_argument('--no-msan',
+ help='Disable MSAN',
+ dest='msan',
+ action='store_false')
+ other_group.add_argument('--target-sysroot', '-s',
type=str,
help='Path to the toolchain sysroot')
- parser.add_argument('--toolchain-prefix', '-t',
+ other_group.add_argument('--toolchain-prefix', '-t',
type=str,
help='Path to the toolchain prefix')
- parser.add_argument('--workers', '-w',
+ other_group.add_argument('--tsan',
+ help='Build with TSAN',
+ default=use_tsan(),
+ action='store_true')
+ other_group.add_argument('--no-tsan',
+ help='Disable TSAN',
+ dest='tsan',
+ action='store_false')
+ other_group.add_argument('--wheezy',
+ help='Use the Debian wheezy sysroot on Linux',
+ default=use_wheezy(),
+ action='store_true')
+ other_group.add_argument('--no-wheezy',
+ help='Disable the Debian wheezy sysroot on Linux',
+ dest='wheezy',
+ action='store_false')
+ other_group.add_argument('--workers', '-w',
type=int,
help='Number of simultaneous GN invocations',
dest='workers',
« no previous file with comments | « runtime/tools/gyp/runtime-configurations.gypi ('k') | tools/gyp/all.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698