summaryrefslogtreecommitdiff
path: root/deps/v8/tools/node/build_gn.py
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/tools/node/build_gn.py')
-rwxr-xr-xdeps/v8/tools/node/build_gn.py103
1 files changed, 72 insertions, 31 deletions
diff --git a/deps/v8/tools/node/build_gn.py b/deps/v8/tools/node/build_gn.py
index e95c3491e7..83071adbfe 100755
--- a/deps/v8/tools/node/build_gn.py
+++ b/deps/v8/tools/node/build_gn.py
@@ -25,15 +25,20 @@ import sys
import node_common
GN_ARGS = [
- "v8_monolithic = true",
- "is_component_build = false",
- "v8_use_external_startup_data = false",
- "use_custom_libcxx = false",
- "use_sysroot = false",
+ "v8_monolithic=true",
+ "is_component_build=false",
+ "v8_use_external_startup_data=false",
+ "use_custom_libcxx=false",
]
BUILD_TARGET = "v8_monolith"
+def FindTargetOs(flags):
+ for flag in flags:
+ if flag.startswith("target_os="):
+ return flag[len("target_os="):].strip('"')
+ raise Exception('No target_os was set.')
+
def FindGn(options):
if options.host_os == "linux":
os_path = "linux64"
@@ -46,57 +51,93 @@ def FindGn(options):
return os.path.join(options.v8_path, "buildtools", os_path, "gn")
def GenerateBuildFiles(options):
- print "Setting GN args."
gn = FindGn(options)
- gn_args = []
- gn_args.extend(GN_ARGS)
+ gn_args = list(GN_ARGS)
+ target_os = FindTargetOs(options.flag)
+ if target_os != "win":
+ gn_args.append("use_sysroot=false")
+
for flag in options.flag:
flag = flag.replace("=1", "=true")
flag = flag.replace("=0", "=false")
flag = flag.replace("target_cpu=ia32", "target_cpu=\"x86\"")
gn_args.append(flag)
- if options.mode == "DEBUG":
- gn_args.append("is_debug = true")
+ if options.mode == "Debug":
+ gn_args.append("is_debug=true")
else:
- gn_args.append("is_debug = false")
+ gn_args.append("is_debug=false")
+
+ flattened_args = ' '.join(gn_args)
+ if options.extra_gn_args:
+ flattened_args += ' ' + options.extra_gn_args
- if not os.path.isdir(options.build_path):
- os.makedirs(options.build_path)
- with open(os.path.join(options.build_path, "args.gn"), "w") as args_file:
- args_file.write("\n".join(gn_args))
- subprocess.check_call([gn, "gen", "-C", options.build_path],
- cwd=options.v8_path)
+ args = [gn, "gen", options.build_path, "-q", "--args=" + flattened_args]
+ subprocess.check_call(args)
def Build(options):
- print "Building."
depot_tools = node_common.EnsureDepotTools(options.v8_path, False)
ninja = os.path.join(depot_tools, "ninja")
- subprocess.check_call([ninja, "-v", "-C", options.build_path, BUILD_TARGET],
- cwd=options.v8_path)
+ if sys.platform == 'win32':
+ # Required because there is an extension-less file called "ninja".
+ ninja += ".exe"
+ args = [ninja, "-C", options.build_path, BUILD_TARGET]
+ if options.max_load:
+ args += ["-l" + options.max_load]
+ if options.max_jobs:
+ args += ["-j" + options.max_jobs]
+ else:
+ with open(os.path.join(options.build_path, "args.gn")) as f:
+ if "use_goma = true" in f.read():
+ args += ["-j500"]
+ subprocess.check_call(args)
def ParseOptions(args):
parser = argparse.ArgumentParser(
description="Build %s with GN" % BUILD_TARGET)
parser.add_argument("--mode", help="Build mode (Release/Debug)")
- parser.add_argument("--v8_path", help="Path to V8")
- parser.add_argument("--build_path", help="Path to build result")
+ parser.add_argument("--v8_path", help="Path to V8", required=True)
+ parser.add_argument("--build_path", help="Path to build result",
+ required=True)
parser.add_argument("--flag", help="Translate GYP flag to GN",
action="append")
parser.add_argument("--host_os", help="Current operating system")
+ parser.add_argument("--bundled-win-toolchain",
+ help="Value for DEPOT_TOOLS_WIN_TOOLCHAIN")
+ parser.add_argument("--bundled-win-toolchain-root",
+ help="Value for DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT")
+ parser.add_argument("--depot-tools", help="Absolute path to depot_tools")
+ parser.add_argument("--extra-gn-args", help="Additional GN args")
+ parser.add_argument("--build", help="Run ninja as opposed to gn gen.",
+ action="store_true")
+ parser.add_argument("--max-jobs", help="ninja's -j parameter")
+ parser.add_argument("--max-load", help="ninja's -l parameter")
options = parser.parse_args(args)
- assert options.host_os
- assert options.mode == "Debug" or options.mode == "Release"
+ options.build_path = os.path.abspath(options.build_path)
- assert options.v8_path
- options.v8_path = os.path.abspath(options.v8_path)
- assert os.path.isdir(options.v8_path)
+ if not options.build:
+ assert options.host_os
+ assert options.mode == "Debug" or options.mode == "Release"
+
+ options.v8_path = os.path.abspath(options.v8_path)
+ assert os.path.isdir(options.v8_path)
- assert options.build_path
- options.build_path = os.path.abspath(options.build_path)
return options
+
if __name__ == "__main__":
options = ParseOptions(sys.argv[1:])
- GenerateBuildFiles(options)
- Build(options)
+ # Build can result in running gn gen, so need to set environment variables
+ # for build as well as generate.
+ if options.bundled_win_toolchain:
+ os.environ['DEPOT_TOOLS_WIN_TOOLCHAIN'] = options.bundled_win_toolchain
+ if options.bundled_win_toolchain_root:
+ os.environ['DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT'] = (
+ options.bundled_win_toolchain_root)
+ if options.depot_tools:
+ os.environ['PATH'] = (
+ options.depot_tools + os.path.pathsep + os.environ['PATH'])
+ if not options.build:
+ GenerateBuildFiles(options)
+ else:
+ Build(options)