forked from llvm/llvm-project
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnfc-check-setup.py
59 lines (53 loc) · 2.01 KB
/
nfc-check-setup.py
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
#!/usr/bin/env python3
import argparse
import os
import re
import shlex
import subprocess
import sys
import textwrap
def main():
parser = argparse.ArgumentParser(description=textwrap.dedent('''
This script builds two versions of BOLT (with the current and
previous revision) and sets up symlink for llvm-bolt-wrapper.
Passes the options through to llvm-bolt-wrapper.
'''))
parser.add_argument('build_dir', nargs='?', default=os.getcwd(),
help='Path to BOLT build directory, default is current directory')
args, wrapper_args = parser.parse_known_args()
bolt_path = f'{args.build_dir}/bin/llvm-bolt'
source_dir = None
# find the repo directory
with open(f'{args.build_dir}/CMakeCache.txt') as f:
for line in f:
m = re.match(r'LLVM_SOURCE_DIR:STATIC=(.*)', line)
if m:
source_dir = m.groups()[0]
if not source_dir:
sys.exit("Source directory is not found")
wrapper_path = os.path.abspath(
f'{source_dir}/../bolt/utils/llvm-bolt-wrapper.py')
# build the current commit
subprocess.run(shlex.split("cmake --build . --target llvm-bolt"),
cwd=args.build_dir)
# rename llvm-bolt
os.replace(bolt_path, f'{bolt_path}.new')
# check out the previous commit
subprocess.run(shlex.split("git checkout -f HEAD^"),
cwd=source_dir)
# build the previous commit
subprocess.run(shlex.split("cmake --build . --target llvm-bolt"),
cwd=args.build_dir)
# rename llvm-bolt
os.replace(bolt_path, f'{bolt_path}.old')
# set up llvm-bolt-wrapper.ini
ini = subprocess.check_output(
shlex.split(
f"{wrapper_path} {bolt_path}.old {bolt_path}.new") + wrapper_args,
text=True)
with open(f'{args.build_dir}/bin/llvm-bolt-wrapper.ini', 'w') as f:
f.write(ini)
# symlink llvm-bolt-wrapper
os.symlink(wrapper_path, bolt_path)
if __name__ == "__main__":
main()