blob: 46570b642c0cec899c11ae788d3d3c28adbc9c57 [file] [log] [blame]
#!/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()