Chromium Code Reviews| Index: tools/gn.py |
| diff --git a/tools/gn.py b/tools/gn.py |
| index 93bbf1bbcf6c45406ae2ff178c0785515b46d258..1df6523bf4514074bc754756916007856438a36d 100755 |
| --- a/tools/gn.py |
| +++ b/tools/gn.py |
| @@ -90,14 +90,15 @@ 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.tsan) |
|
siva
2017/01/03 20:53:08
and not args.msan
zra
2017/01/03 22:36:56
Done.
|
| # 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 +115,20 @@ 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. |
|
siva
2017/01/03 20:53:08
asan,msan or tsan is ...
zra
2017/01/03 22:36:56
Done.
|
| 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.tsan)) # Use clang for asan builds. |
|
siva
2017/01/03 20:53:08
and not args.msan
# Use clang for all sanitizer b
zra
2017/01/03 22:36:56
Done.
|
| gn_args['is_clang'] = args.clang and has_clang |
| gn_args['is_asan'] = args.asan and gn_args['is_clang'] |
| + gn_args['is_tsan'] = args.tsan and gn_args['is_clang'] |
|
siva
2017/01/03 20:53:08
msan too...
zra
2017/01/03 22:36:56
Done.
|
| # Setup the user-defined sysroot. |
| if gn_args['target_os'] == 'linux' and args.wheezy: |
| @@ -214,11 +218,14 @@ def ide_switch(host_os): |
| # Environment variables for default settings. |
| DART_USE_ASAN = "DART_USE_ASAN" |
| +DART_USE_TSAN = "DART_USE_TSAN" |
|
siva
2017/01/03 20:53:08
msan too.
zra
2017/01/03 22:36:56
Done.
|
| DART_USE_WHEEZY = "DART_USE_WHEEZY" |
| def use_asan(): |
| return DART_USE_ASAN 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 +233,83 @@ 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('--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') |
|
siva
2017/01/03 20:53:08
msan options too.
zra
2017/01/03 22:36:56
Done.
|
| + 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', |