# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2017-2019 Intel Corporation
+# check the OS is supported, rather than going any further
+supported_exec_envs = ['freebsd', 'linux', 'windows']
+exec_env = host_machine.system()
+if not supported_exec_envs.contains(exec_env)
+ error('unsupported system type "@0@"'.format(exec_env))
+endif
+
+# define a handy variable for checking which OS we have.
+# gives us "is_windows", "is_freebsd" and "is_linux"
+foreach env:supported_exec_envs
+ set_variable('is_' + env, exec_env == env)
+endforeach
+
# set the major version, which might be used by drivers and libraries
# depending on the configuration options
pver = meson.project_version().split('.')
driver_install_path = join_paths(get_option('libdir'), pmd_subdir_opt)
eal_pmd_path = join_paths(get_option('prefix'), driver_install_path)
+# driver .so files often depend upon the bus drivers for their connect bus,
+# e.g. ixgbe depends on librte_bus_pci. This means that the bus drivers need
+# to be in the library path, so symlink the drivers from the main lib directory.
+meson.add_install_script('../buildtools/symlink-drivers-solibs.sh',
+ get_option('libdir'),
+ pmd_subdir_opt)
+
# set the machine type and cflags for it
if meson.is_cross_build()
machine = host_machine.cpu()
endif
# for linux link against dl, for bsd execinfo
-if host_machine.system() == 'linux'
+if is_linux
link_lib = 'dl'
-elif host_machine.system() == 'freebsd'
+elif is_freebsd
link_lib = 'execinfo'
else
link_lib = ''
dpdk_extra_ldflags += '-lnuma'
endif
-# check for strlcpy
-if host_machine.system() == 'linux'
- libbsd = dependency('libbsd', required: false)
- if libbsd.found()
- dpdk_conf.set('RTE_USE_LIBBSD', 1)
- endif
+# check for libbsd
+libbsd = dependency('libbsd', required: false)
+if libbsd.found()
+ dpdk_conf.set('RTE_USE_LIBBSD', 1)
endif
# add -include rte_config to cflags
# enable extra warnings and disable any unwanted warnings
warning_flags = [
+ '-Wunused-parameter',
'-Wsign-compare',
'-Wcast-qual',
'-Wno-address-of-packed-member'
install_headers('rte_config.h', subdir: get_option('include_subdir_arch'))
# enable VFIO only if it is linux OS
-dpdk_conf.set('RTE_EAL_VFIO', host_machine.system() == 'linux')
+dpdk_conf.set('RTE_EAL_VFIO', is_linux)
+
+# specify -D_GNU_SOURCE unconditionally
+add_project_arguments('-D_GNU_SOURCE', language: 'c')
+
+# specify -D__BSD_VISIBLE for FreeBSD
+if is_freebsd
+ add_project_arguments('-D__BSD_VISIBLE', language: 'c')
+endif