project(
'hkvs', 'c',
default_options: [
'warning_level=3',
'c_std=gnu18',
],
)
cc = meson.get_compiler('c')
fuzz = get_option('fuzz')
if fuzz == 'none'
fuzz_deps = []
elif fuzz == 'libFuzzer'
fuzz_deps = [declare_dependency(
link_args: ['-fsanitize=fuzzer'],
)]
add_project_arguments(['-fsanitize=fuzzer-no-link', '-DFUZZING'], language: 'c')
add_project_link_arguments(['-fsanitize=fuzzer-no-link'], language: 'c')
endif
warning_flags = [
'-Werror=conversion',
'-Werror=sign-conversion',
'-Werror=float-conversion',
'-Werror=old-style-definition',
'-Werror=strict-prototypes',
'-Werror=missing-prototypes',
'-Werror=implicit-function-declaration',
'-Werror=missing-declarations',
'-Werror=return-type',
'-Werror=pointer-arith',
'-Werror=vla',
'-Werror=incompatible-pointer-types',
'-Werror=int-conversion',
'-Werror=int-conversion',
'-Werror=format=2',
'-Werror=overflow',
'-Werror=shift-count-overflow',
'-Werror=init-self',
'-Werror=shadow',
'-Werror=redundant-decls',
'-Werror=missing-field-initializers',
'-Werror=write-strings',
'-Werror=date-time',
'-Werror=nested-externs',
'-Werror=endif-labels',
'-Werror=undef',
'-Wmissing-include-dirs',
'-Wfloat-equal',
'-Winline',
'-Wmissing-noreturn',
]
if cc.get_id() == 'gcc'
warning_flags += [
'-Werror=implicit-fallthrough=5',
'-Werror=strict-aliasing=3',
'-Werror=old-style-declaration',
'-Werror=shift-overflow=2',
'-Wlogical-op',
'-Wsuggest-attribute=noreturn',
'-Wsuggest-attribute=const',
'-Wsuggest-attribute=pure',
'-Wsuggest-attribute=malloc',
'-Wsuggest-attribute=format',
'-Wmissing-format-attribute',
'-Wsuggest-attribute=cold',
]
elif cc.get_id() == 'clang'
warning_flags += [
'-Werror=missing-variable-declarations',
'-Werror=implicit-fallthrough',
'-Werror=shift-overflow',
]
else
warning('Unknown C compiler')
endif
add_project_arguments(warning_flags, language : 'c')
hkvs_include = include_directories('include')
hkvs_lib = library(
'hkvs',
[
'lib/die.c',
'lib/db.c',
'lib/table.c',
'lib/slab.c',
'lib/extfile.c',
'lib/hash.c',
'lib/ix.c',
'lib/record.c',
'lib/util.c',
'lib/iter.c',
'lib/io_mem.c',
'lib/io_dirfd.c',
],
implicit_include_directories: false,
include_directories: hkvs_include,
)
hkvs = declare_dependency(
include_directories: hkvs_include,
link_with: hkvs_lib
)
examples = [
'write', 'print',
]
tests_fuzz = [
'simple_ops',
]
foreach i: examples
executable(
'example-' + i,
'examples/' + i + '.c',
implicit_include_directories: false,
dependencies: [hkvs],
install: false,
)
endforeach
if fuzz != 'none'
foreach i: tests_fuzz
executable(
'fuzz-' + i,
'fuzz/' + i + '.c',
implicit_include_directories: false,
dependencies: [hkvs] + fuzz_deps,
install: false,
)
endforeach
endif