summaryrefslogtreecommitdiff
path: root/config/meson.build
diff options
context:
space:
mode:
Diffstat (limited to 'config/meson.build')
-rw-r--r--config/meson.build286
1 files changed, 142 insertions, 144 deletions
diff --git a/config/meson.build b/config/meson.build
index 6e6ef8c0e1..9e49abc0f8 100644
--- a/config/meson.build
+++ b/config/meson.build
@@ -5,13 +5,13 @@
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))
+ 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)
+ set_variable('is_' + env, exec_env == env)
endforeach
# MS linker requires special treatment.
@@ -22,8 +22,7 @@ is_ms_linker = is_windows and (cc.get_id() == 'clang')
# depending on the configuration options
pver = meson.project_version().split('.')
major_version = '@0@.@1@'.format(pver.get(0), pver.get(1))
-abi_version = run_command(find_program('cat', 'more'),
- abi_version_file).stdout().strip()
+abi_version = run_command(find_program('cat', 'more'), abi_version_file).stdout().strip()
# Libraries have the abi_version as the filename extension
# and have the soname be all but the final part of the abi_version.
@@ -35,21 +34,21 @@ so_version = abi_version.split('.')[0]
dpdk_conf.set('RTE_VER_YEAR', pver.get(0).to_int())
dpdk_conf.set('RTE_VER_MONTH', pver.get(1).to_int())
if pver.get(2).contains('-rc')
- rc_ver = pver.get(2).split('-rc')
- dpdk_conf.set('RTE_VER_MINOR', rc_ver.get(0).to_int())
- dpdk_conf.set_quoted('RTE_VER_SUFFIX', '-rc')
- dpdk_conf.set('RTE_VER_RELEASE', rc_ver.get(1).to_int())
+ rc_ver = pver.get(2).split('-rc')
+ dpdk_conf.set('RTE_VER_MINOR', rc_ver.get(0).to_int())
+ dpdk_conf.set_quoted('RTE_VER_SUFFIX', '-rc')
+ dpdk_conf.set('RTE_VER_RELEASE', rc_ver.get(1).to_int())
else
- dpdk_conf.set('RTE_VER_MINOR', pver.get(2).to_int())
- dpdk_conf.set_quoted('RTE_VER_SUFFIX', '')
+ dpdk_conf.set('RTE_VER_MINOR', pver.get(2).to_int())
+ dpdk_conf.set_quoted('RTE_VER_SUFFIX', '')
# for actual, non-rc releases, set the release value to 99 to ensure releases
# have higher version numbers than their respective release candidates
- dpdk_conf.set('RTE_VER_RELEASE', 99)
+ dpdk_conf.set('RTE_VER_RELEASE', 99)
endif
pmd_subdir_opt = get_option('drivers_install_subdir')
if pmd_subdir_opt.contains('<VERSION>')
- pmd_subdir_opt = abi_version.join(pmd_subdir_opt.split('<VERSION>'))
+ pmd_subdir_opt = abi_version.join(pmd_subdir_opt.split('<VERSION>'))
endif
driver_install_path = join_paths(get_option('libdir'), pmd_subdir_opt)
eal_pmd_path = join_paths(get_option('prefix'), driver_install_path)
@@ -58,9 +57,8 @@ eal_pmd_path = join_paths(get_option('prefix'), driver_install_path)
# 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.
if not is_windows
- meson.add_install_script('../buildtools/symlink-drivers-solibs.sh',
- get_option('libdir'),
- pmd_subdir_opt)
+ meson.add_install_script('../buildtools/symlink-drivers-solibs.sh',
+ get_option('libdir'), pmd_subdir_opt)
endif
# init disable/enable driver lists that will be populated in different places
@@ -69,9 +67,9 @@ enable_drivers = ''
# set the machine type and cflags for it
if meson.is_cross_build()
- machine = host_machine.cpu()
+ machine = host_machine.cpu()
else
- machine = get_option('machine')
+ machine = get_option('machine')
endif
# machine type 'generic' is special, it selects the per arch agreed common
@@ -82,17 +80,17 @@ endif
# This can be bumped up by the DPDK project, but it can never be an
# invariant like 'native'
if machine == 'default' or machine == 'generic'
- if host_machine.cpu_family().startswith('x86')
- # matches the old pre-meson build systems generic machine
- machine = 'corei7'
- elif host_machine.cpu_family().startswith('arm')
- machine = 'armv7-a'
- elif host_machine.cpu_family().startswith('aarch')
- # arm64 manages generic config in config/arm/meson.build
- machine = 'generic'
- elif host_machine.cpu_family().startswith('ppc')
- machine = 'power8'
- endif
+ if host_machine.cpu_family().startswith('x86')
+ # matches the old pre-meson build systems generic machine
+ machine = 'corei7'
+ elif host_machine.cpu_family().startswith('arm')
+ machine = 'armv7-a'
+ elif host_machine.cpu_family().startswith('aarch')
+ # arm64 manages generic config in config/arm/meson.build
+ machine = 'generic'
+ elif host_machine.cpu_family().startswith('ppc')
+ machine = 'power8'
+ endif
endif
dpdk_conf.set('RTE_MACHINE', machine)
@@ -100,10 +98,10 @@ machine_args = []
# ppc64 does not support -march= at all, use -mcpu and -mtune for that
if host_machine.cpu_family().startswith('ppc')
- machine_args += '-mcpu=' + machine
- machine_args += '-mtune=' + machine
+ machine_args += '-mcpu=' + machine
+ machine_args += '-mtune=' + machine
else
- machine_args += '-march=' + machine
+ machine_args += '-march=' + machine
endif
toolchain = cc.get_id()
@@ -114,88 +112,88 @@ dpdk_conf.set('RTE_ARCH_64', cc.sizeof('void *') == 8)
dpdk_conf.set('RTE_ARCH_32', cc.sizeof('void *') == 4)
if not is_windows
- add_project_link_arguments('-Wl,--no-as-needed', language: 'c')
+ add_project_link_arguments('-Wl,--no-as-needed', language: 'c')
endif
# use pthreads if available for the platform
if not is_windows
- add_project_link_arguments('-pthread', language: 'c')
- dpdk_extra_ldflags += '-pthread'
+ add_project_link_arguments('-pthread', language: 'c')
+ dpdk_extra_ldflags += '-pthread'
endif
# on some OS, maths functions are in a separate library
if cc.find_library('m', required : false).found()
- # some libs depend on maths lib
- add_project_link_arguments('-lm', language: 'c')
- dpdk_extra_ldflags += '-lm'
+ # some libs depend on maths lib
+ add_project_link_arguments('-lm', language: 'c')
+ dpdk_extra_ldflags += '-lm'
endif
if is_linux
- link_lib = 'dl'
+ link_lib = 'dl'
else
- link_lib = ''
+ link_lib = ''
endif
# if link_lib is empty, do not add it to project properties
if link_lib != ''
- add_project_link_arguments('-l' + link_lib, language: 'c')
- dpdk_extra_ldflags += '-l' + link_lib
+ add_project_link_arguments('-l' + link_lib, language: 'c')
+ dpdk_extra_ldflags += '-l' + link_lib
endif
# check for libraries used in multiple places in DPDK
has_libnuma = 0
find_libnuma = true
if meson.is_cross_build() and not meson.get_cross_property('numa', true)
- # don't look for libnuma if explicitly disabled in cross build
- find_libnuma = false
+ # don't look for libnuma if explicitly disabled in cross build
+ find_libnuma = false
endif
if find_libnuma
- numa_dep = cc.find_library('numa', required: false)
- if numa_dep.found() and cc.has_header('numaif.h')
- dpdk_conf.set10('RTE_HAS_LIBNUMA', true)
- has_libnuma = 1
- add_project_link_arguments('-lnuma', language: 'c')
- dpdk_extra_ldflags += '-lnuma'
- endif
+ numa_dep = cc.find_library('numa', required: false)
+ if numa_dep.found() and cc.has_header('numaif.h')
+ dpdk_conf.set10('RTE_HAS_LIBNUMA', true)
+ has_libnuma = 1
+ add_project_link_arguments('-lnuma', language: 'c')
+ dpdk_extra_ldflags += '-lnuma'
+ endif
endif
has_libfdt = 0
fdt_dep = cc.find_library('libfdt', required: false)
if fdt_dep.found() and cc.has_header('fdt.h')
- dpdk_conf.set10('RTE_HAS_LIBFDT', true)
- has_libfdt = 1
- add_project_link_arguments('-lfdt', language: 'c')
- dpdk_extra_ldflags += '-lfdt'
+ dpdk_conf.set10('RTE_HAS_LIBFDT', true)
+ has_libfdt = 1
+ add_project_link_arguments('-lfdt', language: 'c')
+ dpdk_extra_ldflags += '-lfdt'
endif
libexecinfo = cc.find_library('libexecinfo', required: false)
if libexecinfo.found() and cc.has_header('execinfo.h')
- add_project_link_arguments('-lexecinfo', language: 'c')
- dpdk_extra_ldflags += '-lexecinfo'
+ add_project_link_arguments('-lexecinfo', language: 'c')
+ dpdk_extra_ldflags += '-lexecinfo'
endif
# check for libbsd
libbsd = dependency('libbsd', required: false, method: 'pkg-config')
if libbsd.found()
- dpdk_conf.set('RTE_USE_LIBBSD', 1)
+ dpdk_conf.set('RTE_USE_LIBBSD', 1)
endif
# check for pcap
pcap_dep = dependency('libpcap', required: false, method: 'pkg-config')
if not pcap_dep.found()
- # pcap got a pkg-config file only in 1.9.0
- pcap_dep = cc.find_library('pcap', required: false)
+ # pcap got a pkg-config file only in 1.9.0
+ pcap_dep = cc.find_library('pcap', required: false)
endif
if pcap_dep.found() and cc.has_header('pcap.h', dependencies: pcap_dep)
- dpdk_conf.set('RTE_PORT_PCAP', 1)
- dpdk_extra_ldflags += '-lpcap'
+ dpdk_conf.set('RTE_PORT_PCAP', 1)
+ dpdk_extra_ldflags += '-lpcap'
endif
# for clang 32-bit compiles we need libatomic for 64-bit atomic ops
if cc.get_id() == 'clang' and dpdk_conf.get('RTE_ARCH_64') == false
- atomic_dep = cc.find_library('atomic', required: true)
- add_project_link_arguments('-latomic', language: 'c')
- dpdk_extra_ldflags += '-latomic'
+ atomic_dep = cc.find_library('atomic', required: true)
+ add_project_link_arguments('-latomic', language: 'c')
+ dpdk_extra_ldflags += '-latomic'
endif
# add -include rte_config to cflags
@@ -203,48 +201,48 @@ add_project_arguments('-include', 'rte_config.h', language: 'c')
# enable extra warnings and disable any unwanted warnings
warning_flags = [
- # -Wall is added by meson by default, so add -Wextra only
- '-Wextra',
-
- # additional warnings in alphabetical order
- '-Wcast-qual',
- '-Wdeprecated',
- '-Wformat',
- '-Wformat-nonliteral',
- '-Wformat-security',
- '-Wmissing-declarations',
- '-Wmissing-prototypes',
- '-Wnested-externs',
- '-Wold-style-definition',
- '-Wpointer-arith',
- '-Wsign-compare',
- '-Wstrict-prototypes',
- '-Wundef',
- '-Wwrite-strings',
-
- # globally disabled warnings
- '-Wno-address-of-packed-member',
- '-Wno-packed-not-aligned',
- '-Wno-missing-field-initializers'
+ # -Wall is added by meson by default, so add -Wextra only
+ '-Wextra',
+
+ # additional warnings in alphabetical order
+ '-Wcast-qual',
+ '-Wdeprecated',
+ '-Wformat',
+ '-Wformat-nonliteral',
+ '-Wformat-security',
+ '-Wmissing-declarations',
+ '-Wmissing-prototypes',
+ '-Wnested-externs',
+ '-Wold-style-definition',
+ '-Wpointer-arith',
+ '-Wsign-compare',
+ '-Wstrict-prototypes',
+ '-Wundef',
+ '-Wwrite-strings',
+
+ # globally disabled warnings
+ '-Wno-address-of-packed-member',
+ '-Wno-packed-not-aligned',
+ '-Wno-missing-field-initializers',
]
if cc.get_id() == 'gcc' and cc.version().version_compare('>=10.0')
# FIXME: Bugzilla 396
- warning_flags += '-Wno-zero-length-bounds'
+ warning_flags += '-Wno-zero-length-bounds'
endif
if not dpdk_conf.get('RTE_ARCH_64')
# for 32-bit, don't warn about casting a 32-bit pointer to 64-bit int - it's fine!!
- warning_flags += '-Wno-pointer-to-int-cast'
+ warning_flags += '-Wno-pointer-to-int-cast'
endif
if cc.get_id() == 'intel'
- warning_ids = [181, 188, 2203, 2279, 2557, 3179, 3656]
- foreach i:warning_ids
- warning_flags += '-diag-disable=@0@'.format(i)
- endforeach
+ warning_ids = [181, 188, 2203, 2279, 2557, 3179, 3656]
+ foreach i:warning_ids
+ warning_flags += '-diag-disable=@0@'.format(i)
+ endforeach
endif
foreach arg: warning_flags
- if cc.has_argument(arg)
- add_project_arguments(arg, language: 'c')
- endif
+ if cc.has_argument(arg)
+ add_project_arguments(arg, language: 'c')
+ endif
endforeach
# set other values pulled from the build options
@@ -258,9 +256,9 @@ dpdk_conf.set('RTE_MAX_VFIO_GROUPS', 64)
dpdk_conf.set('RTE_DRIVER_MEMPOOL_BUCKET_SIZE_KB', 64)
dpdk_conf.set('RTE_LIBRTE_DPAA2_USE_PHYS_IOVA', true)
if dpdk_conf.get('RTE_ARCH_64')
- dpdk_conf.set('RTE_MAX_MEM_MB', 524288)
+ dpdk_conf.set('RTE_MAX_MEM_MB', 524288)
else # for 32-bit we need smaller reserved memory areas
- dpdk_conf.set('RTE_MAX_MEM_MB', 2048)
+ dpdk_conf.set('RTE_MAX_MEM_MB', 2048)
endif
@@ -270,24 +268,24 @@ dpdk_conf.set('RTE_COMPILE_TIME_CPUFLAGS', ','.join(compile_time_cpuflags))
# apply cross-specific options
if meson.is_cross_build()
- # configure RTE_MAX_LCORE and RTE_MAX_NUMA_NODES from cross file
- cross_max_lcores = meson.get_cross_property('max_lcores', 0)
- if cross_max_lcores != 0
- message('Setting RTE_MAX_LCORE from cross file')
- dpdk_conf.set('RTE_MAX_LCORE', cross_max_lcores)
- endif
- cross_max_numa_nodes = meson.get_cross_property('max_numa_nodes', 0)
- if cross_max_numa_nodes != 0
- message('Setting RTE_MAX_NUMA_NODES from cross file')
- dpdk_conf.set('RTE_MAX_NUMA_NODES', cross_max_numa_nodes)
- endif
+ # configure RTE_MAX_LCORE and RTE_MAX_NUMA_NODES from cross file
+ cross_max_lcores = meson.get_cross_property('max_lcores', 0)
+ if cross_max_lcores != 0
+ message('Setting RTE_MAX_LCORE from cross file')
+ dpdk_conf.set('RTE_MAX_LCORE', cross_max_lcores)
+ endif
+ cross_max_numa_nodes = meson.get_cross_property('max_numa_nodes', 0)
+ if cross_max_numa_nodes != 0
+ message('Setting RTE_MAX_NUMA_NODES from cross file')
+ dpdk_conf.set('RTE_MAX_NUMA_NODES', cross_max_numa_nodes)
+ endif
endif
# set the install path for the drivers
dpdk_conf.set_quoted('RTE_EAL_PMD_PATH', eal_pmd_path)
install_headers(['rte_config.h'],
- subdir: get_option('include_subdir_arch'))
+ subdir: get_option('include_subdir_arch'))
# enable VFIO only if it is linux OS
dpdk_conf.set('RTE_EAL_VFIO', is_linux)
@@ -297,53 +295,53 @@ 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')
+ add_project_arguments('-D__BSD_VISIBLE', language: 'c')
endif
if is_windows
- # VirtualAlloc2() is available since Windows 10 / Server 2016.
- add_project_arguments('-D_WIN32_WINNT=0x0A00', language: 'c')
+ # VirtualAlloc2() is available since Windows 10 / Server 2016.
+ add_project_arguments('-D_WIN32_WINNT=0x0A00', language: 'c')
- # Use MinGW-w64 stdio, because DPDK assumes ANSI-compliant formatting.
- if cc.get_id() == 'gcc'
- add_project_arguments('-D__USE_MINGW_ANSI_STDIO', language: 'c')
- endif
+ # Use MinGW-w64 stdio, because DPDK assumes ANSI-compliant formatting.
+ if cc.get_id() == 'gcc'
+ add_project_arguments('-D__USE_MINGW_ANSI_STDIO', language: 'c')
+ endif
- # Disable secure CRT deprecated warnings for clang
- if cc.get_id() == 'clang'
- add_project_arguments('-D_CRT_SECURE_NO_WARNINGS', language: 'c')
- endif
+ # Disable secure CRT deprecated warnings for clang
+ if cc.get_id() == 'clang'
+ add_project_arguments('-D_CRT_SECURE_NO_WARNINGS', language: 'c')
+ endif
- add_project_link_arguments('-lws2_32', language: 'c')
+ add_project_link_arguments('-lws2_32', language: 'c')
- # Contrary to docs, VirtualAlloc2() is exported by mincore.lib
- # in Windows SDK, while MinGW exports it by advapi32.a.
- if is_ms_linker
- add_project_link_arguments('-lmincore', language: 'c')
- endif
+ # Contrary to docs, VirtualAlloc2() is exported by mincore.lib
+ # in Windows SDK, while MinGW exports it by advapi32.a.
+ if is_ms_linker
+ add_project_link_arguments('-lmincore', language: 'c')
+ endif
- add_project_link_arguments('-ladvapi32', '-lsetupapi', language: 'c')
- add_project_link_arguments('-ldbghelp', language: 'c')
+ add_project_link_arguments('-ladvapi32', '-lsetupapi', language: 'c')
+ add_project_link_arguments('-ldbghelp', language: 'c')
endif
if get_option('b_lto')
- if cc.has_argument('-ffat-lto-objects')
- add_project_arguments('-ffat-lto-objects', language: 'c')
- else
- error('compiler does not support fat LTO objects - please turn LTO off')
- endif
- # workaround for gcc bug 81440
- if cc.get_id() == 'gcc' and cc.version().version_compare('<8.0')
- add_project_arguments('-Wno-lto-type-mismatch', language: 'c')
- add_project_link_arguments('-Wno-lto-type-mismatch', language: 'c')
- endif
+ if cc.has_argument('-ffat-lto-objects')
+ add_project_arguments('-ffat-lto-objects', language: 'c')
+ else
+ error('compiler does not support fat LTO objects - please turn LTO off')
+ endif
+ # workaround for gcc bug 81440
+ if cc.get_id() == 'gcc' and cc.version().version_compare('<8.0')
+ add_project_arguments('-Wno-lto-type-mismatch', language: 'c')
+ add_project_link_arguments('-Wno-lto-type-mismatch', language: 'c')
+ endif
endif
if get_option('default_library') == 'both'
- error( '''
- Unsupported value "both" for "default_library" option.
+ error( '''
+ Unsupported value "both" for "default_library" option.
- NOTE: DPDK always builds both shared and static libraries. Please set
- "default_library" to either "static" or "shared" to select default linkage
- for apps and any examples.''')
+ NOTE: DPDK always builds both shared and static libraries. Please set
+ "default_library" to either "static" or "shared" to select default linkage
+ for apps and any examples.''')
endif