config BR2_PACKAGE_DPDK_ARCH_SUPPORTS
	bool
	# DPDK can be used for the following little endian architecture
	default y if BR2_aarch64
	# DPDK requires SSE4.2 for x86_64 since v17.08
	default y if BR2_x86_64 && BR2_X86_CPU_HAS_SSE42

config BR2_PACKAGE_DPDK
	bool "dpdk"
	depends on BR2_PACKAGE_DPDK_ARCH_SUPPORTS
	depends on BR2_TOOLCHAIN_HAS_THREADS # DPDK design
	depends on BR2_USE_MMU # pthread() memory mappings
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # C11/stdatomic.h
	depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_19
	depends on BR2_TOOLCHAIN_USES_GLIBC
	select BR2_PACKAGE_HOST_PYTHON3 # host-python-pyelftools
	help
	  DPDK (Data Plane Development Kit) is a set of libraries
	  and drivers for fast packet processing.

	  http://dpdk.org/

	  Optional but recommended kernel configurations:
	    - CONFIG_VFIO_IOMMU_TYPE1
	    - CONFIG_VFIO_VIRQFD
	    - CONFIG_VFIO
	    - CONFIG_VFIO_NOIOMMU
	    - CONFIG_VFIO_PCI
	    - CONFIG_VFIO_PCI_MMAP
	    - CONFIG_HUGETLBFS
	    - CONFIG_HUGETLB_PAGE
	    - CONFIG_PROC_PAGE_MONITOR

	  For x86 only, the following can also be useful:
	    - CONFIG_HPET
	    - CONFIG_HPET_MMAP

if BR2_PACKAGE_DPDK

config BR2_PACKAGE_DPDK_EXAMPLES
	bool "Install examples"

config BR2_PACKAGE_DPDK_TESTS
	bool "Install tests"

config BR2_PACKAGE_DPDK_DRIVERS_LIST
	string "List of enabled drivers"
	help
	  Controls which DPDK drivers are built.

	  Values:
	   (empty): use DPDK defaults
	   none   : build no drivers
	   list   : e.g. "net/virtio,net/intel/ixgbe"

	  To list possible drivers found in the DPDK source tree:
	    find drivers -mindepth 2 -maxdepth 3 -type d \
	    ! -printf '%P\n' | sort

	  Note: providing manually a list of dpdk drivers to enable
	  does not automatically enable its dependencies (internal or
	  external). It is the user responsiblity to add internal dpdk
	  dependencies in this list, and/or select the relevant
	  Buildroot packages for external dependencies. DPDK
	  configuration will fail in case of missing dependencies.

config BR2_PACKAGE_DPDK_LIBS_LIST
	string "List of enabled libraries"
	help
	  Controls which DPDK libraries are built.

	  Values:
	    (empty): use DPDK defaults
	    none   : build no libraries
	    list   : e.g. "hash,fib,rib"

	  To list all libraries found in the DPDK source tree:
	    find lib -mindepth 2 -maxdepth 2 -type f -name meson.build \
	      -printf '%h\n' | xargs -n1 basename | sort -u

	  Note: providing manually a list of dpdk libraries to enable
	  does not automatically enable its dependencies (internal or
	  external). It is the user responsiblity to add internal dpdk
	  dependencies in this list, and/or select the relevant
	  Buildroot packages for external dependencies. DPDK
	  configuration will fail in case of missing dependencies.

config BR2_PACKAGE_DPDK_APPS_LIST
	string "List of enabled applications"
	help
	  Controls which DPDK applications are built.

	  Values:
	    (empty): use DPDK defaults
	    none   : build no apps
	    list   : e.g. "test-cmdline,test-pmd"

	  To list all applications found in the DPDK source tree:
	    find app -mindepth 2 -maxdepth 2 -type f -name meson.build \
	      -printf '%h\n' | xargs -n1 basename | sort -u

	  Note: providing manually a list of dpdk libraries to enable
	  does not automatically enable its dependencies (internal or
	  external). It is the user responsiblity to add internal dpdk
	  dependencies in this list, and/or select the relevant
	  Buildroot packages for external dependencies. DPDK
	  configuration will fail in case of missing dependencies.

endif

comment "dpdk needs a glibc toolchain w/ threads, gcc >= 4.9, headers >= 4.19"
	depends on BR2_USE_MMU # pthread() memory mappings
	depends on BR2_PACKAGE_DPDK_ARCH_SUPPORTS
	depends on !BR2_TOOLCHAIN_HAS_THREADS || \
		!BR2_TOOLCHAIN_USES_GLIBC || \
		!BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || \
		!BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_19
