Lines Matching +full:swift +full:- +full:build +full:- +full:run
8 # http://www.apache.org/licenses/LICENSE-2.0
17 """Helper script for OSS-Fuzz users. Can do common tasks like building
36 BUILD_DIR = os.path.join(OSS_FUZZ_DIR, 'build')
38 BASE_RUNNER_IMAGE = 'gcr.io/oss-fuzz-base/base-runner'
42 'gcr.io/oss-fuzz-base/base-image',
43 'gcr.io/oss-fuzz-base/base-clang',
44 'gcr.io/oss-fuzz-base/base-builder',
46 'gcr.io/oss-fuzz-base/base-runner-debug',
48 'go': ['gcr.io/oss-fuzz-base/base-builder-go'],
49 'jvm': ['gcr.io/oss-fuzz-base/base-builder-jvm'],
50 'python': ['gcr.io/oss-fuzz-base/base-builder-python'],
51 'rust': ['gcr.io/oss-fuzz-base/base-builder-rust'],
52 'swift': ['gcr.io/oss-fuzz-base/base-builder-swift'],
55 VALID_PROJECT_NAME_REGEX = re.compile(r'^[a-zA-Z0-9_-]+$')
59 'gs://{project_name}-corpus.clusterfuzz-external.appspot.com/libFuzzer/'
62 'gs://{project_name}-backup.clusterfuzz-external.appspot.com/corpus/'
70 LANGUAGES_WITH_BUILDER_IMAGES = {'go', 'jvm', 'python', 'rust', 'swift'}
73 raw_input = input # pylint: disable=invalid-name
75 # pylint: disable=too-many-lines
79 """Class representing a project that is in OSS-Fuzz or an external project
137 def main(): # pylint: disable=too-many-branches,too-many-return-statements
212 '--external',
219 def get_parser(): # pylint: disable=too-many-statements
221 parser = argparse.ArgumentParser('helper.py', description='oss-fuzz helpers')
228 '--language',
230 choices=['c', 'c++', 'rust', 'go', 'jvm', 'swift', 'python'],
235 help='Build an image.')
237 build_image_parser.add_argument('--pull',
240 build_image_parser.add_argument('--cache',
244 build_image_parser.add_argument('--no-pull',
250 'build_fuzzers', help='Build fuzzers for a project.')
260 build_fuzzers_parser.add_argument('--mount_path',
264 build_fuzzers_parser.add_argument('--clean',
268 build_fuzzers_parser.add_argument('--no-clean',
289 'run_fuzzer', help='Run a fuzzer in the emulated fuzzing environment.')
295 '--corpus-dir', help='directory to store corpus for the fuzz target')
305 coverage_parser.add_argument('--no-corpus-download',
308 'OSS-Fuzz; use corpus located in '
309 'build/corpus/<project>/<fuzz_target>/')
310 coverage_parser.add_argument('--port',
314 coverage_parser.add_argument('--fuzz-target',
316 'target to be run for generating coverage '
318 coverage_parser.add_argument('--corpus-dir',
320 ' to be used (requires --fuzz-target argument)')
325 'pass to llvm-cov utility.',
331 download_corpora_parser.add_argument('--fuzz-target',
338 reproduce_parser.add_argument('--valgrind',
340 help='run with valgrind')
352 'shell', help='Run /bin/bash within the builder container.')
370 return os.path.exists(os.path.join('infra', 'base-images', image_name))
389 command = ['docker', 'run', '--rm']
390 command.extend(['-v', '%s:/out' % project.out])
393 command.extend(['/bin/bash', '-c', 'test -f /out/%s' % fuzzer_name])
398 logging.error('%s does not seem to exist. Please run build_fuzzers first.',
435 parser.add_argument('--architecture',
444 parser.add_argument('--engine',
454 '--sanitizer',
462 parser.add_argument('-e',
472 image_project = 'oss-fuzz-base'
473 docker_build_dir = os.path.join(OSS_FUZZ_DIR, 'infra', 'base-images',
481 image_project = 'oss-fuzz'
488 build_args.append('--no-cache')
491 '-t',
492 'gcr.io/%s/%s' % (image_project, image_name), '--file', dockerfile_path
500 return sum([['-e', v] for v in env_list], [])
528 """Calls `docker run`."""
529 command = ['docker', 'run', '--rm', '--privileged']
533 command.append('-i')
551 """Calls `docker build`."""
552 command = ['docker', 'build']
559 logging.error('Docker build failed.')
582 logging.error('Incompatible arguments --pull and --no-pull.')
605 def build_fuzzers_impl( # pylint: disable=too-many-arguments,too-many-locals,too-many-branches
619 logging.info('Cleaning existing build artifacts.')
623 '-v',
624 '%s:/out' % project.out, '-t',
625 'gcr.io/oss-fuzz/%s' % project.name, '/bin/bash', '-c', 'rm -rf /out/*'
629 '-v',
630 '%s:/work' % project.work, '-t',
631 'gcr.io/oss-fuzz/%s' % project.name, '/bin/bash', '-c', 'rm -rf /work/*'
635 logging.info('Keeping existing build artifacts as-is (if any).')
650 command = ['--cap-add', 'SYS_PTRACE'] + _env_to_docker_args(env)
655 '-v',
664 '-v',
669 '-v',
670 '%s:/out' % project.out, '-v',
671 '%s:/work' % project.work, '-t',
672 'gcr.io/oss-fuzz/%s' % project.name
728 '-v', '%s:/out' % args.project.out, '-t', BASE_RUNNER_IMAGE
738 logging.info('Check build passed.')
740 logging.error('Check build failed.')
746 """Returns names of fuzz targest build in the project's /out directory."""
749 if name.startswith('afl-'):
753 if name == 'llvm-symbolizer':
779 # asking for two-factor authentication.
789 latest_backup_url = output.splitlines()[-1]
791 command = ['gsutil', '-q', 'cp', latest_backup_url, archive_path]
794 command = ['unzip', '-q', '-o', archive_path, '-d', corpus_dir]
801 command = ['gsutil', '-m', '-q', 'rsync', '-R', corpus_url, corpus_dir]
812 subprocess.check_call(['gsutil', '--version'], stdout=stdout)
829 except Exception as error: # pylint:disable=broad-except
844 '--corpus-dir requires specifying a particular fuzz target using '
845 '--fuzz-target')
875 '-p',
881 logging.error('The path provided in --corpus-dir argument does not '
885 run_args.extend(['-v', '%s:/corpus/%s' % (corpus_dir, args.fuzz_target)])
887 run_args.extend(['-v', '%s:/corpus' % args.project.corpus])
890 '-v',
892 '-t',
930 logging.error('The path provided in --corpus-dir argument does not exist')
934 '-v',
940 '-v',
942 '-t',
957 def reproduce_impl( # pylint: disable=too-many-arguments
975 image_name = 'base-runner'
978 debugger = 'valgrind --tool=memcheck --track-origins=yes --leak-check=full'
981 image_name = 'base-runner-debug'
988 '-v',
990 '-v',
992 '-t',
993 'gcr.io/oss-fuzz-base/%s' % image_name,
996 '-runs=100',
1003 """Validates |project_name| is a valid OSS-Fuzz project name."""
1026 """Returns True on successful creation of a build integration directory.
1027 Suitable for OSS-Fuzz and external projects."""
1041 build.sh."""
1046 if filename == 'build.sh':
1063 return 'base-builder'
1064 return 'base-builder-{language}'.format(language=language)
1109 if args.project.name != 'base-runner-debug':
1116 image_project = 'oss-fuzz-base'
1119 image_project = 'oss-fuzz'
1125 '-v',
1130 '-v',
1131 '%s:/out' % out_dir, '-v',
1132 '%s:/work' % args.project.work, '-t',
1141 """Pulls base images used to build projects in language lang (or all if lang