abi_version = run_command(find_program('cat', 'more'),
abi_version_file).stdout().strip()
-# Regular libraries have the abi_version as the filename extension
+# Libraries have the abi_version as the filename extension
# and have the soname be all but the final part of the abi_version.
-# Experimental libraries have soname with '0.major'
-# and the filename suffix as 0.majorminor versions,
-# e.g. v20.1 => librte_stable.so.20.1, librte_experimental.so.0.201
-# sonames => librte_stable.so.20, librte_experimental.so.0.20
-# e.g. v20.0.1 => librte_stable.so.20.0.1, librte_experimental.so.0.2001
-# sonames => librte_stable.so.20.0, librte_experimental.so.0.200
-abi_va = abi_version.split('.')
-stable_so_version = abi_va.length() == 2 ? abi_va[0] : abi_va[0] + '.' + abi_va[1]
-experimental_abi_version = '0.' + abi_va[0] + abi_va[1] + '.' + abi_va[2]
-experimental_so_version = experimental_abi_version
+# e.g. v20.1 => librte_foo.so.20.1
+# sonames => librte_foo.so.20
+so_version = abi_version.split('.')[0]
# extract all version information into the build configuration
dpdk_conf.set('RTE_VER_YEAR', pver.get(0).to_int())
# 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)
+if not is_windows
+ meson.add_install_script('../buildtools/symlink-drivers-solibs.sh',
+ get_option('libdir'),
+ pmd_subdir_opt)
+endif
# set the machine type and cflags for it
if meson.is_cross_build()
dpdk_conf.set('RTE_TOOLCHAIN_' + toolchain.to_upper(), 1)
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')
endif
# use pthreads if available for the platform
-if not is_ms_linker
+if not is_windows
add_project_link_arguments('-pthread', language: 'c')
dpdk_extra_ldflags += '-pthread'
endif
dpdk_extra_ldflags += '-lnuma'
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'
+endif
+
# check for libbsd
libbsd = dependency('libbsd', required: false)
if libbsd.found()
endif
# check for pcap
-pcap_dep = dependency('pcap', required: false)
-if pcap_dep.found()
- # pcap got a pkg-config file only in 1.9.0 and before that meson uses
- # an internal pcap-config finder, which is not compatible with
- # cross-compilation, so try to fallback to find_library
+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)
endif
if pcap_dep.found() and cc.has_header('pcap.h', dependencies: pcap_dep)
# additional warnings in alphabetical order
'-Wcast-qual',
'-Wdeprecated',
+ '-Wformat',
'-Wformat-nonliteral',
'-Wformat-security',
'-Wmissing-declarations',
'-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'
+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'
endif
if cc.get_id() == 'intel'
- warning_ids = [188, 2203, 2279, 2557, 3179, 3656]
+ warning_ids = [181, 188, 2203, 2279, 2557, 3179, 3656]
foreach i:warning_ids
warning_flags += '-diag-disable=@0@'.format(i)
endforeach
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)
+else # for 32-bit we need smaller reserved memory areas
+ dpdk_conf.set('RTE_MAX_MEM_MB', 2048)
+endif
compile_time_cpuflags = []
-if host_machine.cpu_family().startswith('x86')
- arch_subdir = 'x86'
-elif host_machine.cpu_family().startswith('arm') or host_machine.cpu_family().startswith('aarch')
- arch_subdir = 'arm'
-elif host_machine.cpu_family().startswith('ppc')
- arch_subdir = 'ppc'
-endif
subdir(arch_subdir)
dpdk_conf.set('RTE_COMPILE_TIME_CPUFLAGS', ','.join(compile_time_cpuflags))
# 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'))
+install_headers(['rte_config.h', 'rte_compatibility_defines.h'],
+ subdir: get_option('include_subdir_arch'))
# enable VFIO only if it is linux OS
dpdk_conf.set('RTE_EAL_VFIO', is_linux)
endif
if is_windows
- # Minimum supported API is Windows 7.
- add_project_arguments('-D_WIN32_WINNT=0x0601', 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
+
+ # 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')
+
+ # 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')
endif
if get_option('b_lto')