net/ionic: query firmware for supported queue versions
[dpdk.git] / config / meson.build
index d3f05f8..3cf560b 100644 (file)
@@ -25,18 +25,11 @@ major_version = '@0@.@1@'.format(pver.get(0), pver.get(1))
 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())
@@ -64,9 +57,11 @@ 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)
+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()
@@ -111,13 +106,14 @@ dpdk_conf.set_quoted('RTE_TOOLCHAIN', toolchain)
 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
@@ -146,26 +142,40 @@ endif
 
 # check for libraries used in multiple places in DPDK
 has_libnuma = 0
-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'
+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
+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
+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)
+libbsd = dependency('libbsd', required: false, method: 'pkg-config')
 if libbsd.found()
        dpdk_conf.set('RTE_USE_LIBBSD', 1)
 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)
@@ -191,6 +201,7 @@ warning_flags = [
        # additional warnings in alphabetical order
        '-Wcast-qual',
        '-Wdeprecated',
+       '-Wformat',
        '-Wformat-nonliteral',
        '-Wformat-security',
        '-Wmissing-declarations',
@@ -217,7 +228,7 @@ if not dpdk_conf.get('RTE_ARCH_64')
        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
@@ -238,16 +249,37 @@ dpdk_conf.set('RTE_ENABLE_TRACE_FP', get_option('enable_trace_fp'))
 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 = []
 subdir(arch_subdir)
 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
+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'))
+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', is_linux)
@@ -269,6 +301,13 @@ if is_windows
                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
@@ -276,6 +315,7 @@ if is_windows
        endif
 
        add_project_link_arguments('-ladvapi32', '-lsetupapi', language: 'c')
+       add_project_link_arguments('-ldbghelp', language: 'c')
 endif
 
 if get_option('b_lto')
@@ -290,3 +330,12 @@ if get_option('b_lto')
                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.
+
+    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