forked from OSchip/llvm-project
60 lines
2.0 KiB
Python
60 lines
2.0 KiB
Python
#!/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()
|