Source code for llvm_ir_dataset_utils.tools.build_swift_packages
"""Tool for building a list of cargo packages."""
import logging
import json
from absl import app
from absl import flags
import ray
from llvm_ir_dataset_utils.builders import builder
FLAGS = flags.FLAGS
flags.DEFINE_string('package_list', None, 'The path to the package list.')
flags.DEFINE_string('source_dir', None,
'The path to the directory to download source code into.')
flags.DEFINE_string('build_dir', None,
'The base directory to perform builds in.')
flags.DEFINE_string('corpus_dir', None, 'The directory to place the corpus in')
flags.DEFINE_integer('thread_count', 2,
'The number of threads to use per package build.')
flags.DEFINE_bool(
'archive_corpus', False,
'Whether or not to put the output corpus for each package into an archive.')
[docs]def main(_):
ray.init()
with open(FLAGS.package_list) as package_list_file:
package_repositories = json.load(package_list_file)
build_futures = []
for index, package_repository in enumerate(package_repositories):
corpus_description = {
'sources': [{
'type': 'git',
'repo_url': package_repository['repo'],
'commit_sha': None
}],
'folder_name': f'build-{index}',
'build_system': 'swift',
'package_name': f'build-{index}',
'license': package_repository['license'],
'license_source': package_repository['license_source']
}
build_futures.append(
builder.get_build_future(
corpus_description,
FLAGS.source_dir,
FLAGS.build_dir,
FLAGS.corpus_dir,
FLAGS.thread_count, {},
cleanup=True,
archive_corpus=FLAGS.archive_corpus))
while len(build_futures) > 0:
finished, build_futures = ray.wait(build_futures, timeout=5.0)
finished_data = ray.get(finished)
logging.info(
f'Just finished {len(finished_data)}, {len(build_futures)} remaining.')
if __name__ == '__main__':
app.run(main)