summaryrefslogtreecommitdiff
path: root/deno2/tools/build.py
blob: 25f30f4f8f21663bcc237ed5927ae12385049af0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/usr/bin/env python
# Get Depot Tools and make sure it's in your path.
# http://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up
# Use .gclient to modify the deps.
import os
import sys
import subprocess
import argparse

TARGET = "deno"

parser = argparse.ArgumentParser(description="build.py")
parser.add_argument('--debug', dest='debug', action='store_true')
parser.add_argument('--use_ccache', dest='use_ccache', action='store_true')
parser.add_argument('--sync', dest='sync', action='store_true')
parser.set_defaults(debug=False, use_ccache=False, sync=False)
args = parser.parse_args()

root_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))


def main():
    os.chdir(root_path)
    buildName = "Debug" if args.debug else "Default"
    buildDir = os.path.join(root_path, "out", buildName)
    # Run sync if any of the dep dirs don't exist.
    # Or the user supplied the --sync flag.
    if args.sync or dirsMissing():
        run(["gclient", "sync", "--no-history"])

    # Run gn gen out/Default if out doesn't exist.
    if not os.path.exists(buildDir):
        gn_gen = ["gn", "gen", buildDir]
        gn_args = []
        if args.debug:
            gn_args.append("is_debug=true")
        if args.use_ccache:
            gn_args.append("cc_wrapper=\"ccache\"")
        if len(gn_args) > 0:
            gn_gen += ["--args=%s" % " ".join(gn_args)]
        run(gn_gen)

    # Always run ninja.
    run(["ninja", "-C", buildDir, TARGET])


def run(args):
    print " ".join(args)
    env = os.environ.copy()
    subprocess.check_call(args, env=env)


def dirsMissing():
    dirsToLoad = [
        "v8",
        "third_party/protobuf",
        "tools/protoc_wrapper",
        "third_party/zlib",
    ]
    for d in dirsToLoad:
        if not os.path.exists(d):
            return True
    return False


if '__main__' == __name__:
    main()