blob: 12ead15cccd2f35ad8bab36cd3f67aab05963899 [file] [log] [blame]
#!/usr/bin/env python
# Copyright 2019 the V8 project authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import argparse
import os
import subprocess
import sys
def ToBool(option):
return "true" if option else "false"
def GenerateBuildFiles(options):
gn_args = []
gn_args.append("is_debug=%s" % ToBool(options.debug))
gn_args.append("use_goma=%s" % ToBool(options.goma))
gn_args.append("is_component_build=%s" % ToBool(options.shared))
gn_args.append("node_use_code_cache=%s" % ToBool(not options.no_cache))
if options.sysroot:
gn_args.append("use_sysroot=true")
gn_args.append("use_custom_libcxx=true")
if options.asan:
gn_args.append("is_lsan=true")
gn_args.append("is_asan=true")
gn_args.append("v8_enable_test_features=true")
if options.tsan:
gn_args.append("is_tsan=true")
gn_args.append("v8_enable_test_features=true")
if options.ubsan:
gn_args.append("is_ubsan=true")
gn_args.append("is_ubsan_no_recover=true")
gn_args.append("v8_enable_test_features=true")
flattened_args = ' '.join(gn_args)
args = ["gn", "gen", options.out_dir, "-q", "--args=" + flattened_args]
print('\n'.join(gn_args))
subprocess.check_call(args)
def ParseOptions(args):
parser = argparse.ArgumentParser(
description="Generate GN build configurations")
parser.add_argument("out_dir", help="Build directory")
parser.add_argument("--goma", help="Use goma", action="store_true")
parser.add_argument("--asan", help="Use address sanitizer",
action="store_true", default=False)
parser.add_argument("--tsan", help="Use thread sanitizer",
action="store_true", default=False)
parser.add_argument("--ubsan", help="Use undefined-behavior sanitizer",
action="store_true", default=False)
parser.add_argument("--shared", help="Use component build",
action="store_true", default=False)
parser.add_argument("--sysroot", help="Use bundled sysroot",
action="store_true", default=False)
parser.add_argument("--debug", help="Debug mode",
action="store_true", default=False)
parser.add_argument("--no-cache", help="Do not use code cache",
action="store_true", default=False)
options = parser.parse_args(args)
# Only one sanitizer is enabled.
assert(options.asan + options.tsan + options.ubsan <= 1)
if options.asan or options.tsan or options.ubsan:
options.shared = False
options.debug = False
return options
if __name__ == "__main__":
options = ParseOptions(sys.argv[1:])
GenerateBuildFiles(options)