12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- # Copyright 2014 The Chromium Authors. All rights reserved.
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
- """Creates IPC fuzzer packages suitable for uploading to ClusterFuzz. Stores
- the packages into chrome build directory. See fuzzer_list below for the list of
- fuzzers.
- """
- from __future__ import print_function
- import argparse
- import distutils.archive_util
- import os
- import shutil
- import sys
- import tempfile
- FUZZER_LIST = [
- 'ipc_fuzzer_mut',
- 'ipc_fuzzer_gen',
- ]
- class CFPackageBuilder:
- def __init__(self):
- self.fuzzer_list = FUZZER_LIST
- def parse_arguments(self):
- desc = 'Builder of IPC fuzzer packages for ClusterFuzz'
- parser = argparse.ArgumentParser(description=desc)
- parser.add_argument(
- '--out-dir',
- dest='out_dir',
- default='out',
- help='output directory under src/ directory')
- parser.add_argument(
- '--build-type',
- dest='build_type',
- default='Release',
- help='Debug vs. Release build')
- self.args = parser.parse_args()
- def set_application_paths(self):
- script_path = os.path.realpath(__file__)
- self.mutate_dir = os.path.dirname(script_path)
- src_dir = os.path.join(self.mutate_dir, os.pardir, os.pardir, os.pardir)
- src_dir = os.path.abspath(src_dir)
- out_dir = os.path.join(src_dir, self.args.out_dir)
- self.build_dir = os.path.join(out_dir, self.args.build_type)
- def switch_to_temp_work_directory(self):
- self.old_cwd = os.getcwd()
- self.work_dir = tempfile.mkdtemp()
- os.chdir(self.work_dir)
- def remove_temp_work_directory(self):
- os.chdir(self.old_cwd)
- shutil.rmtree(self.work_dir)
- def build_package(self, fuzzer):
- os.makedirs(fuzzer)
- fuzzer_src_path = os.path.join(self.mutate_dir, fuzzer + '.py')
- fuzzer_dst_path = os.path.join(fuzzer, 'run.py')
- shutil.copyfile(fuzzer_src_path, fuzzer_dst_path)
- utils_src_path = os.path.join(self.mutate_dir, 'utils.py')
- utils_dst_path = os.path.join(fuzzer, 'utils.py')
- shutil.copyfile(utils_src_path, utils_dst_path)
- distutils.archive_util.make_zipfile(fuzzer, fuzzer)
- package_name = fuzzer + '.zip'
- shutil.copy(package_name, self.build_dir)
- final_package_path = os.path.join(self.build_dir, package_name)
- print('Built %s.' % final_package_path)
- def main(self):
- self.parse_arguments()
- self.set_application_paths()
- self.switch_to_temp_work_directory()
- for fuzzer in self.fuzzer_list:
- self.build_package(fuzzer)
- self.remove_temp_work_directory()
- return 0
- if __name__ == '__main__':
- builder = CFPackageBuilder()
- sys.exit(builder.main())
|