113 lines
3.3 KiB
Meson
113 lines
3.3 KiB
Meson
project('Aegis', 'cpp',
|
|
# Get version number from file.
|
|
# Fallback to "more" for Windows compatibility.
|
|
version: run_command(find_program('cat', 'more'),
|
|
files('VERSION')).stdout().strip(),
|
|
license: 'BSD',
|
|
default_options: ['cpp_std=c++17', 'buildtype=debug', 'default_library=static', ],
|
|
meson_version: '>= 0.58.0'
|
|
)
|
|
|
|
# check the OS is supported, rather than going any further
|
|
supported_exec_envs = ['linux']
|
|
exec_env = host_machine.system()
|
|
if not supported_exec_envs.contains(exec_env)
|
|
error('unsupported system type "@0@"'.format(exec_env))
|
|
endif
|
|
|
|
# set up some global vars for compiler, platform, configuration, etc.
|
|
compiler = meson.get_compiler('cpp')
|
|
compiler_version = compiler.version()
|
|
|
|
# set include directory (where the header files live)
|
|
inc = include_directories('include')
|
|
|
|
#project_libary = libary('project',files[sources])
|
|
|
|
# find dependencies
|
|
dpdk_dep = dependency('libdpdk', required : false)
|
|
project_dep = declare_dependency(include_directories : inc)
|
|
pthread_dep = dependency('threads')
|
|
boost_dep = dependency('boost', modules: ['filesystem','system','log'])
|
|
|
|
if boost_dep.found()
|
|
message('boost found')
|
|
|
|
message('building on: "' + exec_env + '"')
|
|
message('with compiler: "' + compiler.version() + '"')
|
|
message('host machine: "' + host_machine.system() + '"')
|
|
|
|
subdir('doc')
|
|
subdir('source')
|
|
|
|
if dpdk_dep.found()
|
|
executable(
|
|
'aegis',
|
|
sources,
|
|
include_directories : inc,
|
|
dependencies : [dpdk_dep,pthread_dep,boost_dep]
|
|
)
|
|
|
|
# ============= A T T A C K E R ================= #
|
|
|
|
executable(
|
|
'syntflut',
|
|
sources_attack,
|
|
include_directories : inc,
|
|
dependencies : [dpdk_dep,pthread_dep,boost_dep],
|
|
cpp_args : '-DATTACK'
|
|
)
|
|
endif
|
|
|
|
|
|
#================ T E S T S ==================== #
|
|
|
|
catch2_dep = dependency('catch2',
|
|
fallback : ['catch2', 'catch2_dep'],
|
|
required: true)
|
|
|
|
catch2 = declare_dependency(sources:'catch.cpp',dependencies:[catch2_dep])
|
|
|
|
subdir('test')
|
|
|
|
inc_test = include_directories('include', 'test/libdpdk_dummy/include')
|
|
|
|
# create new string array which has the same elements like sources but without the source/main.cpp file
|
|
sources_tests = []
|
|
foreach string : sources
|
|
if (string != 'source/main.cpp') and (string != 'source/Initializer.cpp')
|
|
sources_tests += [string]
|
|
endif
|
|
endforeach
|
|
|
|
# create test targets
|
|
foreach t : test_sources_dict.keys()
|
|
exe_name = t+'_test'
|
|
test_name = t+'_test'
|
|
|
|
sources_this_test = sources_tests + [test_sources_dict.get(t)]
|
|
|
|
e = executable(
|
|
exe_name,
|
|
sources_this_test,
|
|
include_directories : inc_test,
|
|
dependencies : [catch2, pthread_dep, boost_dep],
|
|
cpp_args : '-DTEST'
|
|
)
|
|
|
|
test(test_name, e, suite:['unit_tests', 'catch2'])
|
|
message('built test ' + test_name)
|
|
|
|
endforeach
|
|
|
|
# this does not affect any part of the build, for information only.
|
|
message('\n=================\nMeson prepared build\nrun Ninja to build\n=================\n')
|
|
endif
|
|
|
|
if not boost_dep.found()
|
|
warning('boost not found')
|
|
endif
|
|
if not dpdk_dep.found()
|
|
warning('dpdk not found; only unit tests can be executed')
|
|
endif
|