From patchwork Wed Dec 9 14:11:53 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Viktorin X-Patchwork-Id: 554675 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by ozlabs.org (Postfix) with ESMTP id 8A4801402D9 for ; Thu, 10 Dec 2015 01:13:15 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id D410C92478; Wed, 9 Dec 2015 14:13:14 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id oLgFoJqbwD1T; Wed, 9 Dec 2015 14:13:08 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by whitealder.osuosl.org (Postfix) with ESMTP id 10C5D92421; Wed, 9 Dec 2015 14:13:00 +0000 (UTC) X-Original-To: buildroot@lists.busybox.net Delivered-To: buildroot@osuosl.org Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by ash.osuosl.org (Postfix) with ESMTP id CB2F01C0E31 for ; Wed, 9 Dec 2015 14:12:52 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id C5114331B4 for ; Wed, 9 Dec 2015 14:12:52 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Y1edD1kiT3Fp for ; Wed, 9 Dec 2015 14:12:50 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from wes1-so2.wedos.net (wes1-so2.wedos.net [46.28.106.16]) by silver.osuosl.org (Postfix) with ESMTPS id 7BA7E331C1 for ; Wed, 9 Dec 2015 14:12:50 +0000 (UTC) Received: from pcviktorin.fit.vutbr.cz (pcviktorin.fit.vutbr.cz [147.229.13.147]) by wes1-so2.wedos.net (Postfix) with ESMTPSA id 3pG0hK0W8CzqZ; Wed, 9 Dec 2015 15:12:49 +0100 (CET) From: Jan Viktorin To: buildroot@buildroot.org Date: Wed, 9 Dec 2015 15:11:53 +0100 Message-Id: <1449670313-3613-4-git-send-email-viktorin@rehivetech.com> X-Mailer: git-send-email 2.6.3 In-Reply-To: <1449670313-3613-1-git-send-email-viktorin@rehivetech.com> References: <1446203156-26848-1-git-send-email-viktorin@rehivetech.com> <1449670313-3613-1-git-send-email-viktorin@rehivetech.com> Cc: Jan Viktorin Subject: [Buildroot] [PATCH v2 3/3] dpdk: new package X-BeenThere: buildroot@busybox.net X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: Discussion and development of buildroot List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: buildroot-bounces@busybox.net Sender: "buildroot" This patch introduces support of the DPDK library (www.dpdk.org) into Buildroot. DPDK is a library for high-speed packet sending/receiving while bypassing the Linux Kernel. It allows to reach a high throughput for 10-100 Gbps networks on the x86 platform. The package compiles and installs DPDK libraries on the target and staging and allows to compiler other applications depending on the DPDK library. It can also install some basic tools the DPDK provides (testpmd, python scripts, test suite). The patch assumes DPDK 2.2.0 (rc3) which introduces the ARM architecture support. The included hashes are calculated locally by downloading the tar.gz archives by hand. The DPDK project is licensed under BSD license (see http://dpdk.org/), however, there is no license file in the root of the project. Moreover, there are parts (Linux Kernel modules) which are GPLv2. So the license specification might look strange. Signed-off-by: Jan Viktorin --- v2: (mostly suggestions by Arnout) * simplified Config.in - avoid version, source and config selection * improved dependency on libpcap * user python scripts are included if python package is enabled * installing of tests includes autotest*.py scripts (we do not care about the python here, assuming the user will install it manually when testing) * minor coding style fixes * depends on python-pexpect package * using version 2.2.0-rc3 --- package/Config.in | 1 + package/dpdk/Config.in | 47 +++++++++++++++++++++ package/dpdk/dpdk.hash | 4 ++ package/dpdk/dpdk.mk | 112 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 164 insertions(+) create mode 100644 package/dpdk/Config.in create mode 100644 package/dpdk/dpdk.hash create mode 100644 package/dpdk/dpdk.mk diff --git a/package/Config.in b/package/Config.in index 77a92d2..fd07d5d 100644 --- a/package/Config.in +++ b/package/Config.in @@ -999,6 +999,7 @@ menu "Networking" source "package/cgic/Config.in" source "package/cppzmq/Config.in" source "package/czmq/Config.in" + source "package/dpdk/Config.in" source "package/filemq/Config.in" source "package/flickcurl/Config.in" source "package/fmlib/Config.in" diff --git a/package/dpdk/Config.in b/package/dpdk/Config.in new file mode 100644 index 0000000..a4935ae --- /dev/null +++ b/package/dpdk/Config.in @@ -0,0 +1,47 @@ +config BR2_PACKAGE_DPDK + bool "dpdk" + depends on BR2_x86_i686 || BR2_x86_64 || BR2_powerpc_power8 || BR2_ARM_CPU_ARMV7A || BR2_aarch64 || BR2_aarch64_be + depends on BR2_TOOLCHAIN_USES_GLIBC + help + DPDK is a set of libraries and drivers for fast packet processing. It was designed to run on + any processors knowing Intel x86 has been the first CPU to be supported. Ports for other CPUs + like IBM Power 8 and ARM are under progress. It runs mostly in Linux userland. A FreeBSD port + is now available for a subset of DPDK features. + + Notes: + * To build the included Linux Kernel drivers, it is necessary to enable CONFIG_PCI_MSI, + CONFIG_UIO. + * To build the PCAP PMD properly, you need to enable the libpcap manually. + * To install the python scripts (dpdk_nic_bind.py, cpu_layout.py), enable + the python2 interpreter for the target. + + http://www.dpdk.org/ + +if BR2_PACKAGE_DPDK + +config BR2_PACKAGE_DPDK_CONFIG + string "Configuration" + default "i686-native-linuxapp-gcc" \ + if BR2_x86_i686 + default "x86_64-native-linuxapp-gcc" \ + if BR2_x86_64 + default "ppc_64-power8-native-linuxapp-gcc" \ + if BR2_powerpc_power8 + default "arm-armv7a-linuxapp-gcc" \ + if BR2_ARM_CPU_ARMV7A + default "arm64-armv8a-linuxapp-gcc" \ + if BR2_aarch64 || BR2_aarch64_be + +config BR2_PACKAGE_DPDK_TOOLS_TESTPMD + bool "Install testpmd" + default y + help + Install application for general testing of DPDK and PMD drivers. + +config BR2_PACKAGE_DPDK_TOOLS_TEST + bool "Install tests suite" + help + Install all DPDK tests. If you want to run the tests by the included + autotest.py script you need to enable python manually. + +endif diff --git a/package/dpdk/dpdk.hash b/package/dpdk/dpdk.hash new file mode 100644 index 0000000..c78ec85 --- /dev/null +++ b/package/dpdk/dpdk.hash @@ -0,0 +1,4 @@ +# Locally calculated +sha256 f7b322867a45f99afd9c8fbacdc56e1621676f9ca0f046656ec85eb6a99a3440 dpdk-2.1.0.tar.gz +sha256 530074d4eaefe1f717e7411e6a74e4ba0fa619af304c5e74e1097e51d33cc19e dpdk-2.2.0-rc2.tar.gz +sha256 7caf52554c0f724a09e9342ee6670b324a77dade5cd0b96ff5b66957ed1bc1f9 dpdk-2.2.0-rc3.tar.gz diff --git a/package/dpdk/dpdk.mk b/package/dpdk/dpdk.mk new file mode 100644 index 0000000..2d8a5a3 --- /dev/null +++ b/package/dpdk/dpdk.mk @@ -0,0 +1,112 @@ +################################################################################ +# +# dpdk +# +################################################################################ + +DPDK_VERSION = 2.2.0-rc3 +DPDK_SITE = http://dpdk.org/browse/dpdk/snapshot +DPDK_SOURCE = dpdk-$(DPDK_VERSION).tar.gz + +DPDK_LICENSE = BSD +DPDK_LICENSE_FILES = LICENSE.LGPL LICENSE.GPL +DPDK_INSTALL_STAGING = YES + +DPDK_DEPENDENCIES += linux + +ifeq ($(BR2_PACKAGE_LIBPCAP),y) +DPDK_DEPENDENCIES += libpcap +endif + +ifeq ($(BR2_SHARED_LIBS),y) +define DPDK_ENABLE_SHARED_LIBS + @echo CONFIG_RTE_BUILD_COMBINE_LIBS=y >> $(@D)/build/.config + @echo CONFIG_RTE_BUILD_SHARED_LIB=y >> $(@D)/build/.config +endef + +DPDK_POST_CONFIGURE_HOOKS += DPDK_ENABLE_SHARED_LIBS +endif + +# We're building a kernel module without using the kernel-module infra, +# so we need to tell we want module support in the kernel +ifeq ($(BR2_PACKAGE_DPDK),y) +LINUX_NEEDS_MODULES = y +endif + + +DPDK_CONFIG = $(call qstrip,$(BR2_PACKAGE_DPDK_CONFIG)) + +# We create symlink named $(DPDK_CONFIG) to the build directory +# to avoid calling install which behaves strange in DPDK build system. +define DPDK_CONFIGURE_CMDS + $(MAKE) -C $(@D) T=$(DPDK_CONFIG) RTE_KERNELDIR=$(LINUX_DIR) CROSS=$(TARGET_CROSS) config + @ln -sv build $(@D)/$(DPDK_CONFIG) +endef + +define DPDK_BUILD_CMDS + $(MAKE1) -C $(@D) T=$(DPDK_CONFIG) RTE_KERNELDIR=$(LINUX_DIR) CROSS=$(TARGET_CROSS) install +endef + +ifeq ($(BR2_SHARED_LIBS),n) +# Install static libs only (DPDK compiles either *.so or *.a) +define DPDK_INSTALL_STAGING_LIBS + $(INSTALL) -m 0755 -D -d $(STAGING_DIR)/usr/lib + $(INSTALL) -m 0644 -D $(@D)/build/lib/*.a $(STAGING_DIR)/usr/lib +endef + +else +# Install shared libs only (DPDK compiles either *.so or *.a) +define DPDK_INSTALL_STAGING_LIBS + $(INSTALL) -m 0755 -D -d $(STAGING_DIR)/usr/lib + $(INSTALL) -m 0644 -D $(@D)/build/lib/*.so* $(STAGING_DIR)/usr/lib +endef + +define DPDK_INSTALL_TARGET_LIBS + $(INSTALL) -m 0755 -D -d $(STAGING_DIR)/usr/lib + $(INSTALL) -m 0644 -D $(@D)/build/lib/*.so* $(TARGET_DIR)/usr/lib +endef +endif + +ifeq ($(BR2_PACKAGE_PYTHON),y) +define DPDK_INSTALL_TARGET_PYSCRIPTS + $(INSTALL) -m 0755 -D -d $(STAGING_DIR)/usr/bin + $(INSTALL) -m 0755 -D $(@D)/tools/dpdk_nic_bind.py $(TARGET_DIR)/usr/bin + $(INSTALL) -m 0755 -D $(@D)/tools/cpu_layout.py $(TARGET_DIR)/usr/bin +endef + +DPDK_DEPENDENCIES += python +endif + +ifeq ($(BR2_PACKAGE_DPDK_TOOLS_TESTPMD),y) +define DPDK_INSTALL_TARGET_TESTPMD + $(INSTALL) -m 0755 -D -d $(TARGET_DIR)/usr/bin + $(INSTALL) -m 0755 -D $(@D)/build/app/testpmd $(TARGET_DIR)/usr/bin +endef +endif + +ifeq ($(BR2_PACKAGE_DPDK_TOOLS_TEST),y) +define DPDK_INSTALL_TARGET_TEST + $(INSTALL) -m 0755 -D -d $(TARGET_DIR)/usr/dpdk + $(INSTALL) -m 0755 -D $(@D)/build/app/test $(TARGET_DIR)/usr/dpdk + $(INSTALL) -m 0755 -D $(@D)/app/test/*.py $(TARGET_DIR)/usr/dpdk +endef + +ifeq ($(BR2_PACKAGE_PYTHON),y) +DPDK_DEPENDENCIES += python-pexpect +endif +endif + +define DPDK_INSTALL_STAGING_CMDS + $(INSTALL) -m 0755 -D -d $(STAGING_DIR)/usr/include + $(INSTALL) -m 0644 -D $(@D)/build/include/*.h $(STAGING_DIR)/usr/include + $(DPDK_INSTALL_STAGING_LIBS) +endef + +define DPDK_INSTALL_TARGET_CMDS + $(DPDK_INSTALL_TARGET_LIBS) + $(DPDK_INSTALL_TARGET_PYSCRIPTS) + $(DPDK_INSTALL_TARGET_TESTPMD) + $(DPDK_INSTALL_TARGET_TEST) +endef + +$(eval $(generic-package))