1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
# makefile to manage dpdk package
#
# Copyright 2015-2016 OPNFV
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Contributors:
# Aihua Li, Huawei Technologies.
# Martin Klozik, Intel Corporation.
# Christian Trautman, Red Hat Inc.
include ../mk/master.mk
include ../package-list.mk
include /etc/os-release
.PHONY: install force_make
ifndef VHOST_USER
VHOST_USER = n
endif
WORK_DIR = dpdk
TAG_DONE_FLAG = $(WORK_DIR)/.$(DPDK_TAG).tag.done
# VHOST configuration options are stored in different files based on DPDK version
# v1.2.3r0-v1.6.0r2 - configuration inside config/defconfig_x86_64-default-linuxapp-gcc
# v1.7.0-rc1-v2.2.0 - configuration inside config/common_linuxapp
# v16 and newer - configuration split between config/common_linuxapp and config/common_base
DPDK_TAG_MAJOR = $(shell echo $(DPDK_TAG) | cut -d. -f1)
DPDK_TAG_MINOR = $(shell echo $(DPDK_TAG) | cut -d. -f2)
ifeq ($(DPDK_TAG_MAJOR),v1)
ifeq ($(DPDK_TAG_MINOR), $(filter $(DPDK_TAG_MINOR), 7 8))
DPDK_TARGET = x86_64-native-linuxapp-gcc
CONFIG_FILE_LINUXAPP = $(WORK_DIR)/config/common_linuxapp
else
DPDK_TARGET = x86_64-default-linuxapp-gcc
CONFIG_FILE_LINUXAPP = $(WORK_DIR)/config/defconfig_x86_64-default-linuxapp-gcc
endif
else
ifeq ($(DPDK_TAG_MAJOR),v2)
DPDK_TARGET = x86_64-native-linuxapp-gcc
CONFIG_FILE_LINUXAPP = $(WORK_DIR)/config/common_linuxapp
else
DPDK_TARGET = x86_64-native-linuxapp-gcc
CONFIG_FILE_BASE = $(WORK_DIR)/config/common_base
CONFIG_FILE_LINUXAPP = $(WORK_DIR)/config/common_linux
endif
endif
all: force_make
@echo "Finished making $(WORK_DIR) "
INSTALL_TARGET = force_make
# modify CONFIG_FILE to enable VHOST_USER build and restore original CONFIG_FILE after the build
# DPDK v16 comments:
## CONFIG_RTE_BUILD_COMBINE_LIBS has been obsoleted
## CONFIG_RTE_LIBRTE_VHOST and CONFIG_RTE_LIBRTE_KNI are listed in both config_base and config_linuxapp,
## values from config_linuxapp will be used, but options are modified at both places to avoid confusion.
force_make: $(TAG_DONE_FLAG)
$(AT)cd $(WORK_DIR) && git pull $(DPDK_URL) $(DPDK_TAG)
ifdef CONFIG_FILE_BASE
$(AT)sed -i -e 's/CONFIG_RTE_LIBRTE_VHOST_USER=.\+/CONFIG_RTE_LIBRTE_VHOST_USER=$(VHOST_USER)/g' $(CONFIG_FILE_BASE)
$(AT)sed -i -e 's/CONFIG_RTE_LIBRTE_VHOST=./CONFIG_RTE_LIBRTE_VHOST=y/g' $(CONFIG_FILE_BASE)
$(AT)sed -i -e 's/CONFIG_RTE_LIBRTE_KNI=./CONFIG_RTE_LIBRTE_KNI=n/g' $(CONFIG_FILE_BASE)
$(AT)sed -i -e 's/CONFIG_RTE_LIBRTE_VHOST_NUMA=./CONFIG_RTE_LIBRTE_VHOST_NUMA=y/g' $(CONFIG_FILE_BASE)
$(AT)sed -i -e 's/CONFIG_RTE_EAL_IGB_UIO=./CONFIG_RTE_EAL_IGB_UIO=y/g' $(CONFIG_FILE_BASE)
else
$(AT)sed -i -e 's/CONFIG_RTE_LIBRTE_VHOST_USER=.\+/CONFIG_RTE_LIBRTE_VHOST_USER=$(VHOST_USER)/g' $(CONFIG_FILE_LINUXAPP)
$(AT)sed -i -e 's/CONFIG_RTE_BUILD_COMBINE_LIBS=./CONFIG_RTE_BUILD_COMBINE_LIBS=y/g' $(CONFIG_FILE_LINUXAPP)
endif
# CentOS 7.3 specific config changes to compile
ifeq ($(ID),"centos")
ifeq ($(VERSION_ID),"7")
$(AT)sed -i.bak s@'SRCS-y += ethtool/igb/igb_main.c'@'#SRCS-y += ethtool/igb/igb_main.c'@g $(WORK_DIR)/kernel/linux/kni/Makefile
endif
endif
# RHEL 7.3 specific config changes to compile
ifeq ($(ID),"rhel")
ifeq ($(VERSION_ID),"7.3")
$(AT)sed -i.bak s@'SRCS-y += ethtool/igb/igb_main.c'@'#SRCS-y += ethtool/igb/igb_main.c'@g $(WORK_DIR)/kernel/linux/kni/Makefile
endif
endif
$(AT)sed -i -e 's/CONFIG_RTE_LIBRTE_VHOST=./CONFIG_RTE_LIBRTE_VHOST=y/g' $(CONFIG_FILE_LINUXAPP)
$(AT)sed -i -e 's/CONFIG_RTE_LIBRTE_KNI=./CONFIG_RTE_LIBRTE_KNI=n/g' $(CONFIG_FILE_LINUXAPP)
$(AT)cd $(WORK_DIR); make install T=$(DPDK_TARGET) -j DESTDIR=$(WORK_DIR)
$(AT)cd `dirname $(CONFIG_FILE_LINUXAPP)` && git checkout `basename $(CONFIG_FILE_LINUXAPP)` && cd -
ifdef CONFIG_FILE_BASE
$(AT)cd `dirname $(CONFIG_FILE_BASE)` && git checkout `basename $(CONFIG_FILE_BASE)` && cd -
endif
$(AT)echo "VHOST_USER = $(VHOST_USER)"
@echo "Make done"
install: $(INSTALL_TARGET)
$(AT)sudo cp -a $(WORK_DIR)/$(DPDK_TARGET)/kmod $(INSTALL_DIR)/lib/modules/$(KERNEL_VERSION)
@echo "install done"
# hard way to clean and clobber
clean:
$(AT)cd $(WORK_DIR) && git clean -xfd *.o
clobber:
$(AT)rm -rf $(WORK_DIR)
# distclean is for developer who would like to keep the
# clone git repo, saving time to fetch again from url
distclean:
$(AT)cd $(WORK_DIR) && git clean -xfd && git checkout -f
test:
@echo "Make test in $(WORK_DIR) (stub) "
sanity:
@echo "Make sanity in $(WORK_DIR) (stub) "
$(WORK_DIR):
$(AT)git clone $(DPDK_URL) dpdk
$(TAG_DONE_FLAG): $(WORK_DIR)
$(AT)cd $(WORK_DIR); git checkout $(DPDK_TAG)
$(AT)touch $@
|