1# 2# BSD LICENSE 3# 4# Copyright (c) Intel Corporation. 5# All rights reserved. 6# 7# Redistribution and use in source and binary forms, with or without 8# modification, are permitted provided that the following conditions 9# are met: 10# 11# * Redistributions of source code must retain the above copyright 12# notice, this list of conditions and the following disclaimer. 13# * Redistributions in binary form must reproduce the above copyright 14# notice, this list of conditions and the following disclaimer in 15# the documentation and/or other materials provided with the 16# distribution. 17# * Neither the name of Intel Corporation nor the names of its 18# contributors may be used to endorse or promote products derived 19# from this software without specific prior written permission. 20# 21# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32# 33 34SPDK_ROOT_DIR := $(abspath $(CURDIR)/..) 35include $(SPDK_ROOT_DIR)/mk/spdk.common.mk 36 37.PHONY: all clean install uninstall 38 39DPDK_FRAMEWORK = n 40DPDK_OPTS = 41DPDK_CFLAGS = 42 43ifeq ($(CONFIG_SHARED),y) 44DPDK_OPTS += CONFIG_RTE_BUILD_SHARED_LIB=y 45DPDK_LDFLAGS+= -rpath $(SPDK_ROOT_DIR)/dpdk/build/lib 46else 47DPDK_OPTS += CONFIG_RTE_BUILD_SHARED_LIB=n 48endif 49 50ifeq ($(CONFIG_CRYPTO),y) 51DPDK_FRAMEWORK = y 52DPDK_OPTS += CONFIG_RTE_LIBRTE_PMD_AESNI_MB=y 53DPDK_OPTS += CONFIG_RTE_LIBRTE_REORDER=y 54DPDK_CFLAGS += -I$(IPSEC_MB_DIR) 55DPDK_LDFLAGS += -L$(IPSEC_MB_DIR) 56else 57DPDK_OPTS += CONFIG_RTE_LIBRTE_PMD_AESNI_MB=n 58DPDK_OPTS += CONFIG_RTE_LIBRTE_REORDER=n 59endif 60 61ifeq ($(CONFIG_REDUCE),y) 62DPDK_FRAMEWORK = y 63DPDK_OPTS += CONFIG_RTE_LIBRTE_PMD_ISAL=y 64DPDK_CFLAGS += -I$(ISAL_DIR) 65DPDK_LDFLAGS += -L$(ISAL_DIR)/.libs 66else 67DPDK_OPTS += CONFIG_RTE_LIBRTE_PMD_ISAL=n 68endif 69 70ifeq ($(CONFIG_VHOST),y) 71DPDK_OPTS += CONFIG_RTE_LIBRTE_ETHER=y 72DPDK_OPTS += CONFIG_RTE_LIBRTE_CMDLINE=y 73DPDK_OPTS += CONFIG_RTE_LIBRTE_METER=y 74DPDK_OPTS += CONFIG_RTE_LIBRTE_HASH=y 75DPDK_OPTS += CONFIG_RTE_LIBRTE_VHOST=y 76else 77DPDK_OPTS += CONFIG_RTE_LIBRTE_ETHER=n 78DPDK_OPTS += CONFIG_RTE_LIBRTE_CMDLINE=n 79DPDK_OPTS += CONFIG_RTE_LIBRTE_METER=n 80DPDK_OPTS += CONFIG_RTE_LIBRTE_HASH=n 81DPDK_OPTS += CONFIG_RTE_LIBRTE_VHOST=n 82endif 83 84ifeq ($(CONFIG_IGB_UIO_DRIVER),y) 85DPDK_OPTS += CONFIG_RTE_EAL_IGB_UIO=y 86else 87DPDK_OPTS += CONFIG_RTE_EAL_IGB_UIO=n 88endif 89 90ifeq ($(DPDK_FRAMEWORK),y) 91DPDK_OPTS += CONFIG_RTE_LIBRTE_PMD_QAT=y 92DPDK_OPTS += CONFIG_RTE_LIBRTE_PMD_QAT_SYM=y 93else 94DPDK_OPTS += CONFIG_RTE_LIBRTE_PMD_QAT=n 95DPDK_OPTS += CONFIG_RTE_LIBRTE_PMD_QAT_SYM=n 96endif 97 98ifeq ($(TARGET_MACHINE),aarch64) 99DPDK_CONFIG := arm64-armv8a 100else 101DPDK_CONFIG := $(TARGET_MACHINE)-native 102endif 103 104ifneq ($(CONFIG_CROSS_PREFIX),) 105DPDK_OPTS += CROSS=$(CONFIG_CROSS_PREFIX)- 106endif 107 108ifeq ($(OS),Linux) 109DPDK_CONFIG := $(DPDK_CONFIG)-linuxapp 110NPROC := $(shell nproc) 111else 112ifeq ($(OS),FreeBSD) 113DPDK_CONFIG := $(DPDK_CONFIG)-bsdapp 114NPROC := $(shell sysctl hw.ncpu | awk '{print $$NF}') 115endif 116endif 117 118ifeq ($(CC_TYPE),clang) 119DPDK_CONFIG := $(DPDK_CONFIG)-clang 120else 121DPDK_CONFIG := $(DPDK_CONFIG)-gcc 122endif 123 124DPDK_CFLAGS += -fPIC 125 126ifeq ($(CONFIG_DEBUG),y) 127DPDK_CFLAGS += -O0 -g 128endif 129 130ifeq ($(CONFIG_WERROR),y) 131DPDK_CFLAGS += -Werror 132else 133DPDK_CFLAGS += -Wno-error 134endif 135 136ifdef EXTRA_DPDK_CFLAGS 137$(warning EXTRA_DPDK_CFLAGS defined, possibly to work around an unsupported compiler version) 138$(shell sleep 1) 139endif 140 141# Allow users to specify EXTRA_DPDK_CFLAGS if they want to build DPDK using unsupported compiler versions 142DPDK_CFLAGS += $(EXTRA_DPDK_CFLAGS) 143 144# Force-disable scan-build 145SUB_CC = $(patsubst %ccc-analyzer,$(DEFAULT_CC),$(CC)) 146 147$(SPDK_ROOT_DIR)/dpdk/build: $(SPDK_ROOT_DIR)/mk/cc.mk $(SPDK_ROOT_DIR)/include/spdk/config.h 148 $(Q)rm -rf $(SPDK_ROOT_DIR)/dpdk/build 149 $(Q)$(MAKE) -C $(SPDK_ROOT_DIR)/dpdk config T=$(DPDK_CONFIG) $(DPDK_OPTS) 150 151all: $(SPDK_ROOT_DIR)/dpdk/build 152 $(Q)$(MAKE) -C $(SPDK_ROOT_DIR)/dpdk/build EXTRA_CFLAGS="$(DPDK_CFLAGS)" EXTRA_LDFLAGS="$(DPDK_LDFLAGS)" CC=$(SUB_CC) T="$(DPDK_CONFIG)" $(DPDK_OPTS) 153 154clean: 155 $(Q)rm -rf $(SPDK_ROOT_DIR)/dpdk/build 156 157install: all 158 159uninstall: 160 @: 161