Skip to content

Commit 41fdeb3

Browse files
authored
Merge pull request swiftlang#30 from nkcsgexi/update-tool
build-script: add a script to rebuild SwiftSyntax and install it to an existing toolchain.
2 parents 71bc488 + 49d1928 commit 41fdeb3

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed

update-toolchain.py

+75
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
#!/usr/bin/env python
2+
from __future__ import print_function
3+
4+
import argparse
5+
import os
6+
import subprocess
7+
import sys
8+
import tempfile
9+
import errno
10+
import platform
11+
import shutil
12+
13+
BUILD_SCRIPT = os.path.dirname(os.path.abspath(__file__)) + '/build-script.py'
14+
15+
def printerr(message):
16+
print(message, file=sys.stderr)
17+
18+
def note(message):
19+
print("--- %s: note: %s" % (os.path.basename(sys.argv[0]), message))
20+
sys.stdout.flush()
21+
22+
def fatal_error(message):
23+
printerr(message)
24+
sys.exit(1)
25+
26+
def escapeCmdArg(arg):
27+
if '"' in arg or ' ' in arg:
28+
return '"%s"' % arg.replace('"', '\\"')
29+
else:
30+
return arg
31+
32+
def check_call(cmd, env=os.environ):
33+
print(' '.join([escapeCmdArg(arg) for arg in cmd]))
34+
return subprocess.check_call(cmd, env=env, stderr=subprocess.STDOUT)
35+
36+
def build(swiftc_exec, build_dir):
37+
check_call([BUILD_SCRIPT, '--release', '--swiftc-exec', swiftc_exec,
38+
'--build-dir', build_dir, '-v'])
39+
40+
def install(swiftc_exec, build_dir, dylib_dir, module_dir):
41+
check_call([BUILD_SCRIPT, '--release', '--install', '--swiftc-exec',
42+
swiftc_exec, '--dylib-dir', dylib_dir, '--swiftmodule-dir', module_dir,
43+
'--build-dir', build_dir, '-v'])
44+
45+
def main():
46+
if not os.geteuid() == 0:
47+
fatal_error("\n!!!!!!!!Run this script with root access!!!!!!!!\n")
48+
parser = argparse.ArgumentParser(
49+
formatter_class=argparse.RawDescriptionHelpFormatter,
50+
description='''
51+
Build and re-install SwiftSytnax for an existing toolchain.
52+
53+
This script calls ./build-script internally to rebuild SwiftSyntax using an
54+
existing toolchain and install the build artifacts back to the toolchain.
55+
''')
56+
57+
basic_group = parser.add_argument_group('Basic')
58+
59+
basic_group.add_argument('--toolchain-dir', default=None, help='''
60+
Directory of an existing toolchain.
61+
''')
62+
63+
args = parser.parse_args(sys.argv[1:])
64+
build_dir = tempfile.mkdtemp()
65+
swiftc_exec = args.toolchain_dir + '/usr/bin/swiftc'
66+
dylib_dir = args.toolchain_dir + '/usr/lib/swift/macosx'
67+
module_dir = args.toolchain_dir + '/usr/lib/swift/macosx/x86_64'
68+
print('Using swiftc: ' + swiftc_exec)
69+
print('Using build directory: ' + build_dir)
70+
build(swiftc_exec=swiftc_exec, build_dir=build_dir)
71+
install(swiftc_exec=swiftc_exec, build_dir=build_dir, dylib_dir=dylib_dir,
72+
module_dir=module_dir)
73+
74+
if __name__ == '__main__':
75+
main()

0 commit comments

Comments
 (0)