#!/usr/bin/env python from __future__ import print_function import argparse import os import shutil import subprocess def perform_build(args, swiftbuild_path, config, binary_name, opt_flag): assert(config in ['debug', 'release']) assert(binary_name in ['Benchmark_O', 'Benchmark_Osize', 'Benchmark_Onone']) assert(opt_flag in ['-O', '-Osize', '-Onone']) inner_build_dir = os.path.join(args.build_path, binary_name) swiftbuild_args = [ swiftbuild_path, '--package-path', args.package_path, '--build-path', inner_build_dir, '--configuration', config, '-Xswiftc', '-Xllvm', '-Xswiftc', '-align-module-to-page-size', '-Xswiftc', opt_flag, ] if args.verbose: swiftbuild_args.append('--verbose') subprocess.call(swiftbuild_args) # Copy the benchmark file into the final ./bin directory. binpath = os.path.join(inner_build_dir, config, 'SwiftBench') finalpath = os.path.join(args.build_path, 'bin', binary_name) shutil.copy(binpath, finalpath) def main(): parser = argparse.ArgumentParser() parser.add_argument('--verbose', '-v', action='store_true') parser.add_argument('--package-path', type=str, required=True) parser.add_argument('--build-path', type=str, required=True) parser.add_argument('--toolchain', type=str, required=True) args = parser.parse_args() # Create our bin directory so we can copy in the binaries. bin_dir = os.path.join(args.build_path, 'bin') if not os.path.isdir(bin_dir): os.makedirs(bin_dir) swiftbuild_path = os.path.join(args.toolchain, 'usr', 'bin', 'swift-build') perform_build(args, swiftbuild_path, 'debug', 'Benchmark_Onone', '-Onone') perform_build(args, swiftbuild_path, 'release', 'Benchmark_Osize', '-Osize') perform_build(args, swiftbuild_path, 'release', 'Benchmark_O', '-O') if __name__ == "__main__": main()