177 lines
4.4 KiB
Meson
177 lines
4.4 KiB
Meson
tests = [
|
|
'hb-shape-fuzzer.cc',
|
|
'hb-subset-fuzzer.cc',
|
|
'hb-raster-fuzzer.cc',
|
|
'hb-vector-fuzzer.cc',
|
|
'hb-gpu-fuzzer.cc',
|
|
'hb-repacker-fuzzer.cc',
|
|
]
|
|
|
|
# Build the binaries
|
|
foreach file_name : tests
|
|
test_name = file_name.split('.')[0]
|
|
|
|
sources = [file_name]
|
|
fuzzer_ldflags = []
|
|
extra_cpp_args = []
|
|
|
|
if get_option('fuzzer_ldflags') == ''
|
|
sources += 'main.cc'
|
|
else
|
|
fuzzer_ldflags += get_option('fuzzer_ldflags').split()
|
|
extra_cpp_args += '-DHB_IS_IN_FUZZER'
|
|
endif
|
|
|
|
if get_option('experimental_api')
|
|
extra_cpp_args += '-DHB_EXPERIMENTAL_API'
|
|
endif
|
|
|
|
if (test_name.contains('subset') or test_name.contains('repacker')) and get_option('subset').disabled()
|
|
continue
|
|
endif
|
|
|
|
if test_name.contains('raster') and get_option('raster').disabled()
|
|
continue
|
|
endif
|
|
|
|
if test_name.contains('vector') and get_option('vector').disabled()
|
|
continue
|
|
endif
|
|
|
|
if test_name.contains('gpu') and get_option('gpu').disabled()
|
|
continue
|
|
endif
|
|
|
|
link_with_libs = [libharfbuzz]
|
|
if test_name.contains('subset') or test_name.contains('repacker')
|
|
link_with_libs += [libharfbuzz_subset]
|
|
endif
|
|
if test_name.contains('raster')
|
|
link_with_libs += [libharfbuzz_raster]
|
|
endif
|
|
if test_name.contains('vector')
|
|
link_with_libs += [libharfbuzz_vector]
|
|
endif
|
|
if test_name.contains('gpu')
|
|
link_with_libs += [libharfbuzz_gpu]
|
|
endif
|
|
|
|
exe = executable(test_name, sources,
|
|
cpp_args: cpp_args + extra_cpp_args,
|
|
include_directories: [incconfig, incsrc],
|
|
link_args: fuzzer_ldflags,
|
|
link_with: link_with_libs,
|
|
install: false,
|
|
)
|
|
set_variable('@0@_exe'.format(test_name.underscorify()), exe)
|
|
endforeach
|
|
|
|
glob_cmd = find_program('glob.py', required: true)
|
|
|
|
fonts_glob = run_command(glob_cmd, meson.current_source_dir() / 'fonts', check:true).stdout().strip().split('\n')
|
|
subset_fonts_glob = run_command(glob_cmd, meson.current_source_dir() / '..' / 'subset' / 'data' / 'fonts', check:true).stdout().strip().split('\n')
|
|
graphs_glob = run_command(glob_cmd, meson.current_source_dir() / 'graphs', check:true).stdout().strip().split('\n')
|
|
|
|
# Chunk the glob lists to avoid command line length limits, and for parallelization
|
|
chunk_size = 64
|
|
foreach glob_name : ['fonts_glob', 'subset_fonts_glob', 'graphs_glob']
|
|
glob = get_variable(glob_name)
|
|
chunks = []
|
|
chunk = []
|
|
foreach item : glob
|
|
if chunk.length() >= chunk_size
|
|
chunks += [chunk]
|
|
chunk = []
|
|
endif
|
|
chunk += [item]
|
|
endforeach
|
|
if chunk.length() > 0
|
|
chunks += [chunk]
|
|
endif
|
|
set_variable('@0@_chunks'.format(glob_name), chunks)
|
|
endforeach
|
|
|
|
# Run fuzzers
|
|
|
|
i = 0
|
|
foreach chunk : fonts_glob_chunks
|
|
test('shape-fuzzer-chunk-@0@'.format(i),
|
|
hb_shape_fuzzer_exe,
|
|
args: chunk,
|
|
workdir: meson.current_build_dir() / '..' / '..',
|
|
protocol: 'tap',
|
|
suite: ['fuzzing'],
|
|
)
|
|
i += 1
|
|
endforeach
|
|
|
|
if not get_option('raster').disabled()
|
|
i = 0
|
|
foreach chunk : fonts_glob_chunks
|
|
test('raster-fuzzer-chunk-@0@'.format(i),
|
|
hb_raster_fuzzer_exe,
|
|
args: chunk,
|
|
workdir: meson.current_build_dir() / '..' / '..',
|
|
protocol: 'tap',
|
|
suite: ['fuzzing'],
|
|
)
|
|
i += 1
|
|
endforeach
|
|
endif
|
|
|
|
if not get_option('vector').disabled()
|
|
i = 0
|
|
foreach chunk : fonts_glob_chunks
|
|
test('vector-fuzzer-chunk-@0@'.format(i),
|
|
hb_vector_fuzzer_exe,
|
|
args: chunk,
|
|
workdir: meson.current_build_dir() / '..' / '..',
|
|
protocol: 'tap',
|
|
suite: ['fuzzing'],
|
|
)
|
|
i += 1
|
|
endforeach
|
|
endif
|
|
|
|
if not get_option('gpu').disabled()
|
|
i = 0
|
|
foreach chunk : fonts_glob_chunks
|
|
test('gpu-fuzzer-chunk-@0@'.format(i),
|
|
hb_gpu_fuzzer_exe,
|
|
args: chunk,
|
|
workdir: meson.current_build_dir() / '..' / '..',
|
|
protocol: 'tap',
|
|
suite: ['fuzzing'],
|
|
)
|
|
i += 1
|
|
endforeach
|
|
endif
|
|
|
|
if not get_option('subset').disabled()
|
|
i = 0
|
|
foreach chunk : fonts_glob_chunks + subset_fonts_glob_chunks
|
|
test('subset-fuzzer-chunk-@0@'.format(i),
|
|
hb_subset_fuzzer_exe,
|
|
args: chunk,
|
|
workdir: meson.current_build_dir() / '..' / '..',
|
|
protocol: 'tap',
|
|
suite: ['fuzzing'],
|
|
)
|
|
i += 1
|
|
endforeach
|
|
endif
|
|
|
|
if not get_option('subset').disabled()
|
|
i = 0
|
|
foreach chunk : graphs_glob_chunks
|
|
test('repacker-fuzzer-chunk-@0@'.format(i),
|
|
hb_repacker_fuzzer_exe,
|
|
args: chunk,
|
|
workdir: meson.current_build_dir() / '..' / '..',
|
|
protocol: 'tap',
|
|
suite: ['fuzzing'],
|
|
)
|
|
i += 1
|
|
endforeach
|
|
endif
|