From 20cee55214da0539d5b0433451b56df2ecf99ab4 Mon Sep 17 00:00:00 2001 From: Maryam Tahhan Date: Thu, 19 May 2016 13:07:14 +0100 Subject: src: add makefiles to clone and build dependencies Add Makefiles to clone and build DPDK and collectd-with-DPDK. Change-Id: Icb0e95e4b8ad758562bfd009850b9522e7a0418a Signed-off-by: Maryam Tahhan Reviewed-by: Christoph Meyer Reviewed-by: Bruce Richardson Reviewed-by: Thomas Monjalon Reviewed-by: Jarmo Virtanen Reviewed-by: John McNamara --- src/Makefile | 40 ++++++++++++++++++++ src/collectd/Makefile | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/dpdk/Makefile | 79 +++++++++++++++++++++++++++++++++++++++ src/mk/make-subsys.mk | 29 +++++++++++++++ src/mk/master.mk | 44 ++++++++++++++++++++++ src/package-list.mk | 13 +++++++ 6 files changed, 306 insertions(+) create mode 100644 src/Makefile create mode 100644 src/collectd/Makefile create mode 100644 src/dpdk/Makefile create mode 100644 src/mk/make-subsys.mk create mode 100644 src/mk/master.mk create mode 100644 src/package-list.mk diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 00000000..1b0157ac --- /dev/null +++ b/src/Makefile @@ -0,0 +1,40 @@ +# Top Makefile to build upstream packages. +# + +# Copyright 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. +# Maryam Tahhan, Intel Corporation. + +all clean distclean: subbuilds + +subbuilds: $(SUBBUILDS) +$(SUBBUILDS): + $(AT)mkdir -p ../$@/mk + $(AT)cp -rf mk/* ../$@/mk + $(AT)cp -rf package-list.mk ../$@/ + $(AT)cp Makefile.$@ ../$@/Makefile + $(AT)$(MAKE) -C ../$@ $(MAKECMDGOALS) + +with-dpdk: +export WITH_DPDK +include mk/master.mk +SUBDIRS = +SUBDIRS += dpdk +SUBDIRS += collectd + +include mk/make-subsys.mk diff --git a/src/collectd/Makefile b/src/collectd/Makefile new file mode 100644 index 00000000..255859e1 --- /dev/null +++ b/src/collectd/Makefile @@ -0,0 +1,101 @@ +# makefile to manage collectd package +# + +# Copyright 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. +# Maryam Tahhan, Intel Corporation. + +include ../mk/master.mk +include ../package-list.mk + +WORK_DIR = collectd-with-DPDK +TAG_DONE_FLAG = $(WORK_DIR)/.$(COLLECTD_TAG).done +BUILD_CMD = ./build.sh +CONFIG_CMD = +CONFIG_CMD += ./configure + +# DPDK_DIR is the directory where DPDK shared lib is installed +DPDK_DIR = $(shell echo $$DPDK_DIR) +ifeq ($(DPDK_DIR),) +DPDK_DIR = /usr +endif + +CONFIG_CMD += --enable-syslog +CONFIG_CMD += --enable-logfile +CONFIG_CMD += --with-libdpdk=$(DPDK_DIR) + +.PHONY: install force_install config force_make + +# install depends on make +force_install: force_make + +all: force_make + @echo "Finished making $(WORK_DIR) " + +config $(WORK_DIR)/Makefile: $(WORK_DIR)/configure + $(AT)cd $(WORK_DIR); $(CONFIG_CMD) + @echo "Configure done" + +INSTALL_TARGET = force_install force_make + +force_make: $(WORK_DIR)/Makefile + $(AT)cd $(WORK_DIR) && git pull $(COLLECTD_URL) $(COLLECTD_TAG) + @echo "git pull done" + $(AT)$(MAKE) -C $(WORK_DIR) $(MORE_MAKE_FLAGS) + @echo "Make done" + +force_install: + $(AT)sudo $(MAKE) -C $(WORK_DIR) install + +install: $(INSTALL_TARGET) + +# 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) " + +.PHONY: boot +# boot collectd is the process to produce the script 'configure' +boot $(WORK_DIR)/configure: + @echo "booting up collectd" + $(AT)cd $(WORK_DIR); $(BUILD_CMD) + @echo "done booting collectd" + +boot $(WORK_DIR)/configure: $(TAG_DONE_FLAG) + +$(WORK_DIR): + $(AT)git clone $(COLLECTD_URL) + +$(TAG_DONE_FLAG): $(WORK_DIR) + $(AT)cd collectd-with-DPDK; git checkout $(collectd_TAG) +ifneq ($(PATCH_FILE),) + $(AT)cd $(WORK_DIR); patch -p1 < ../$(PATCH_FILE) +endif + $(AT)touch $@ diff --git a/src/dpdk/Makefile b/src/dpdk/Makefile new file mode 100644 index 00000000..b8524322 --- /dev/null +++ b/src/dpdk/Makefile @@ -0,0 +1,79 @@ +# 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. + +include ../mk/master.mk +include ../package-list.mk + +.PHONY: install force_make + +WORK_DIR = dpdk +TAG_DONE_FLAG = $(WORK_DIR)/.$(DPDK_TAG).tag.done + +DPDK_TARGET = x86_64-native-linuxapp-gcc +CONFIG_FILE_LINUXAPP = $(WORK_DIR)/config/common_base + +all: force_make install + @echo "Finished making $(WORK_DIR) " + +INSTALL_TARGET = force_make + +# modify CONFIG_FILE to enable SHARED_LIB 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) + $(AT)sed -i -e 's/CONFIG_RTE_BUILD_SHARED_LIB=./CONFIG_RTE_BUILD_SHARED_LIB=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 config T=$(DPDK_TARGET) -j; make -j + $(AT)cd `dirname $(CONFIG_FILE_LINUXAPP)` && git checkout `basename $(CONFIG_FILE_LINUXAPP)` && cd - + @echo "Make done" + +install: $(INSTALL_TARGET) + $(AT)cd $(WORK_DIR); sudo make -j install prefix=/usr; cd - + $(AT)sudo cp -a $(WORK_DIR)/build/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) + +$(TAG_DONE_FLAG): $(WORK_DIR) + $(AT)cd $(WORK_DIR); git checkout $(DPDK_TAG) + $(AT)touch $@ diff --git a/src/mk/make-subsys.mk b/src/mk/make-subsys.mk new file mode 100644 index 00000000..86802821 --- /dev/null +++ b/src/mk/make-subsys.mk @@ -0,0 +1,29 @@ +# Master makefile definitions for project opnfv vswitchperf +# + +# 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. + +.PHONY: $(SUBDIRS) + +all clean distclean clobber install uninstall test sanity: $(SUBDIRS) + $(AT)echo "finished making $@" + +$(SUBDIRS): + $(AT)echo "Enter directory $@" + $(AT)$(MAKE) -C $@ $(MAKECMDGOALS) diff --git a/src/mk/master.mk b/src/mk/master.mk new file mode 100644 index 00000000..af43e530 --- /dev/null +++ b/src/mk/master.mk @@ -0,0 +1,44 @@ +# Master makefile definitions for project opnfv vswitchperf +# + +# 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. + +# user has the full control to decide where to put the build by +# specifying INSTALL_DIR from the make input + +# try to read it in from environment +INSTALL_DIR ?= $(shell echo $$INSTALL_DIR) + +# for debugging Makefile +# Make V as a synonum for VERBOSE +ifdef V +VERBOSE = $(V) +endif + +VERBOSE ?= 0 + +ifeq ($(VERBOSE),0) + AT = @ +else + BASH_X = -x +endif + +.DEFAULT_GOAL := all + +.PHONY: all clean cleanse clobber diff --git a/src/package-list.mk b/src/package-list.mk new file mode 100644 index 00000000..45b908e9 --- /dev/null +++ b/src/package-list.mk @@ -0,0 +1,13 @@ +# Upstream Package List +# +# Everything here is defined as its suggested default +# value, it can always be overriden when invoking Make + +# dpdk section +# DPDK_URL ?= git://dpdk.org/dpdk +DPDK_URL ?= http://dpdk.org/git/dpdk +DPDK_TAG ?= v16.04 + +# collectd section +COLLECTD_URL ?= https://github.com/maryamtahhan/collectd-with-DPDK +COLLECTD_TAG ?= dpdkstat -- cgit 1.2.3-korg