mirror of
https://github.com/denoland/deno.git
synced 2024-12-22 07:14:47 -05:00
4d08bb85a4
* Make sync_third_party work in general * Un-break build.py and run_hooks.py on windows * Partially fix format.py on windows * Reduce code duplication between run_hooks and sync_third_party
64 lines
2 KiB
Python
Executable file
64 lines
2 KiB
Python
Executable file
#!/usr/bin/env python
|
|
# Copyright 2018 the Deno authors. All rights reserved. MIT license.
|
|
import argparse
|
|
import os
|
|
import sys
|
|
from os.path import join
|
|
from third_party import depot_tools_path, third_party_path, fix_symlinks, google_env
|
|
from util import root_path, run
|
|
import distutils.spawn
|
|
|
|
parser = argparse.ArgumentParser(description='')
|
|
parser.add_argument(
|
|
'--build_path', default='', help='Directory to build into.')
|
|
parser.add_argument(
|
|
'--args', default='', help='Specifies build arguments overrides.')
|
|
parser.add_argument(
|
|
'--mode', default='debug', help='Build configuration: debug, release.')
|
|
options, targets = parser.parse_known_args()
|
|
|
|
fix_symlinks()
|
|
|
|
os.chdir(root_path)
|
|
|
|
gn_path = join(depot_tools_path, "gn")
|
|
ninja_path = join(depot_tools_path, "ninja")
|
|
|
|
if options.build_path:
|
|
build_path = options.build_path
|
|
else:
|
|
build_path = join(root_path, "out", options.mode)
|
|
|
|
gn_args = []
|
|
if options.args:
|
|
gn_args += options.args.split()
|
|
|
|
if options.mode == "release":
|
|
gn_args += ["is_official_build=true"]
|
|
elif options.mode == "debug":
|
|
pass
|
|
else:
|
|
print "Bad mode {}. Use 'release' or 'debug' (default)" % options.mode
|
|
sys.exit(1)
|
|
|
|
# Check if ccache is in the path, and if so we cc_wrapper.
|
|
ccache_path = distutils.spawn.find_executable("ccache")
|
|
if ccache_path:
|
|
gn_args += [r'cc_wrapper="%s"' % ccache_path]
|
|
|
|
# mkdir $build_path. We do this so we can write args.gn before running gn gen.
|
|
if not os.path.isdir(build_path):
|
|
os.makedirs(build_path)
|
|
|
|
# Rather than using gn gen --args we manually write the args.gn override file.
|
|
# This is to avoid quoting/escaping complications when passing overrides as
|
|
# command-line arguments.
|
|
args_filename = join(build_path, "args.gn")
|
|
if not os.path.exists(args_filename) or options.args:
|
|
with open(args_filename, "w+") as f:
|
|
f.write("\n".join(gn_args) + "\n")
|
|
|
|
run([gn_path, "gen", build_path], env=google_env())
|
|
|
|
target = " ".join(targets) if targets else ":all"
|
|
run([ninja_path, "-C", build_path, target], env=google_env())
|