cbindgen = find_program('cbindgen') fuzzers = {} subdir('atom') foreach fuzzer, meta : fuzzers gencorpus_rs = meta['gencorpus'] fuzz_rs = meta['fuzzer'] deps = meta['deps'] gencorpus = executable( fuzzer + '_' + 'gencorpus', gencorpus_rs, dependencies: [mon], link_with: [gentoo_utils], ) corpus_directory = fuzzer + '_' + 'corpus' corpus = custom_target( f'@fuzzer@_corpus', output: f'@fuzzer@_corpus', command: [gencorpus, corpus_directory], ) fuzz_h = custom_target( f'@fuzzer@_fuzz.h', input: fuzz_rs, output: f'@fuzzer@_fuzz.h', command: [cbindgen, '@INPUT@', '-o', '@OUTPUT'], ) fuzz_rs = static_library( f'@fuzzer@.rs', fuzz_rs, rust_abi: 'c', rust_args: [ '-Cpasses=sancov-module', '-Cllvm-args=-sanitizer-coverage-level=3', '-Cllvm-args=-sanitizer-coverage-inline-8bit-counters', ], dependencies: deps, link_with: [gentoo_utils], ) fuzz = executable( f'@fuzzer@_fuzzer', link_args: ['-fsanitize=fuzzer'], link_with: [fuzz_rs], ) test( fuzzer + '_' + 'fuzz', fuzz, args: [corpus_directory], depends: [corpus], timeout: 0, ) endforeach