aboutsummaryrefslogblamecommitdiff
path: root/meson.build
blob: 8c64ffe288bb2b961dda58c1aecdf0bb5d48e078 (plain) (tree)









































































































































                                                                                        
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