From a4747c6048b5faae3110cfba5400ab47f5bf9cc8 Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Wed, 10 Aug 2016 10:28:20 -0700 Subject: [PATCH] env: Make the environment library configurable. This allows users to swap out SPDK's third party libraries for an implementation based on their own framework. Change-Id: Ia0b7384ce5e31acba5ad0d7002dec9e95b759c52 Signed-off-by: Ben Walker --- CONFIG | 7 ++- app/iscsi_tgt/Makefile | 7 ++- app/nvmf_tgt/Makefile | 7 ++- app/trace/Makefile | 2 +- examples/ioat/perf/Makefile | 7 ++- examples/ioat/verify/Makefile | 7 ++- examples/nvme/arbitration/Makefile | 7 ++- examples/nvme/fio_plugin/Makefile | 7 ++- examples/nvme/hello_world/Makefile | 7 ++- examples/nvme/identify/Makefile | 7 ++- examples/nvme/nvme_manage/Makefile | 7 ++- examples/nvme/perf/Makefile | 7 ++- examples/nvme/reserve/Makefile | 7 ++- lib/bdev/Makefile | 2 +- lib/bdev/malloc/Makefile | 2 +- lib/bdev/nvme/Makefile | 2 +- lib/copy/Makefile | 2 +- lib/copy/ioat/Makefile | 2 +- lib/env/env.mk | 73 ++++++++++++++++++++++++++++++ lib/event/Makefile | 2 +- lib/ioat/Makefile | 2 +- lib/iscsi/Makefile | 2 +- lib/nvme/Makefile | 2 +- lib/nvmf/Makefile | 2 +- lib/rpc/Makefile | 2 +- lib/scsi/Makefile | 2 +- lib/trace/Makefile | 2 +- lib/util/Makefile | 2 +- mk/spdk.common.mk | 29 ++---------- test/lib/bdev/bdevio/Makefile | 9 ++-- test/lib/bdev/bdevperf/Makefile | 9 ++-- test/lib/env/Makefile | 8 ++-- test/lib/event/event/Makefile | 6 +-- test/lib/event/reactor/Makefile | 6 +-- test/lib/nvme/aer/Makefile | 7 ++- test/lib/nvme/e2edp/Makefile | 7 ++- test/lib/nvme/overhead/Makefile | 7 ++- test/lib/nvme/reset/Makefile | 7 ++- test/lib/nvme/sgl/Makefile | 7 ++- test/lib/nvmf/nvmf/Makefile | 4 +- 40 files changed, 165 insertions(+), 128 deletions(-) create mode 100644 lib/env/env.mk diff --git a/CONFIG b/CONFIG index bcc573b95..d3ac75bca 100644 --- a/CONFIG +++ b/CONFIG @@ -43,9 +43,14 @@ CONFIG_COVERAGE?=n # Build with Address Sanitizer enabled CONFIG_ADDRESS_SANITIZER?=n +# Directory that contains the desired SPDK environment library. +# By default, this is implemented using DPDK. +CONFIG_ENV?=$(SPDK_ROOT_DIR)/lib/env + # This directory should contain 'include' and 'lib' directories for your DPDK # installation. Alternatively you can specify this on the command line -# with 'make DPDK_DIR=/path/to/dpdk'. +# with 'make DPDK_DIR=/path/to/dpdk'. This is only a valid entry +# when using the default SPDK environment library. CONFIG_DPDK_DIR?=/path/to/dpdk # Header file to use for NVMe implementation specific functions. diff --git a/app/iscsi_tgt/Makefile b/app/iscsi_tgt/Makefile index 8cebfa6ff..0736c769a 100644 --- a/app/iscsi_tgt/Makefile +++ b/app/iscsi_tgt/Makefile @@ -37,7 +37,7 @@ include $(SPDK_ROOT_DIR)/mk/spdk.modules.mk APP = iscsi_tgt -CFLAGS += $(DPDK_INC) +CFLAGS += $(ENV_CFLAGS) # Add iSCSI library directory to include path # TODO: remove this once iSCSI has a public API header @@ -57,20 +57,19 @@ SPDK_LIBS = \ $(SPDK_ROOT_DIR)/lib/trace/libspdk_trace.a \ $(SPDK_ROOT_DIR)/lib/conf/libspdk_conf.a \ $(SPDK_ROOT_DIR)/lib/util/libspdk_util.a \ - $(SPDK_ROOT_DIR)/lib/env/libspdk_env.a \ $(SPDK_ROOT_DIR)/lib/log/libspdk_log.a \ $(SPDK_ROOT_DIR)/lib/log/rpc/libspdk_log_rpc.a \ $(SPDK_ROOT_DIR)/lib/event/libspdk_event.a \ $(SPDK_ROOT_DIR)/lib/event/rpc/libspdk_app_rpc.a \ LIBS += -Wl,--whole-archive $(SPDK_LIBS) -Wl,--no-whole-archive -LIBS += -lcrypto $(DPDK_LIB) +LIBS += -lcrypto $(ENV_LINKER_ARGS) LIBS += $(BLOCKDEV_MODULES_LINKER_ARGS) \ $(COPY_MODULES_LINKER_ARGS) all : $(APP) -$(APP) : $(OBJS) $(SPDK_LIBS) +$(APP) : $(OBJS) $(SPDK_LIBS) $(ENV_LIBS) $(LINK_C) clean : diff --git a/app/nvmf_tgt/Makefile b/app/nvmf_tgt/Makefile index aead5c06e..e9fa90c65 100644 --- a/app/nvmf_tgt/Makefile +++ b/app/nvmf_tgt/Makefile @@ -37,7 +37,7 @@ include $(SPDK_ROOT_DIR)/mk/spdk.modules.mk APP = nvmf_tgt -CFLAGS += $(DPDK_INC) +CFLAGS += $(ENV_CFLAGS) # Add NVMf library directory to include path # TODO: remove this once NVMf has a public API header @@ -53,7 +53,6 @@ SPDK_LIBS = \ $(SPDK_ROOT_DIR)/lib/trace/libspdk_trace.a \ $(SPDK_ROOT_DIR)/lib/conf/libspdk_conf.a \ $(SPDK_ROOT_DIR)/lib/util/libspdk_util.a \ - $(SPDK_ROOT_DIR)/lib/env/libspdk_env.a \ $(SPDK_ROOT_DIR)/lib/bdev/libspdk_bdev.a \ $(SPDK_ROOT_DIR)/lib/copy/libspdk_copy.a \ $(SPDK_ROOT_DIR)/lib/rpc/libspdk_rpc.a \ @@ -71,11 +70,11 @@ ifeq ($(CONFIG_RDMA),y) LIBS += -libverbs -lrdmacm endif -LIBS += $(DPDK_LIB) +LIBS += $(ENV_LINKER_ARGS) all : $(APP) -$(APP) : $(OBJS) $(SPDK_LIBS) $(BLOCKDEV_MODULES) $(LINKER_MODULES) +$(APP) : $(OBJS) $(SPDK_LIBS) $(BLOCKDEV_MODULES) $(LINKER_MODULES) $(ENV_LIBS) $(LINK_C) clean : diff --git a/app/trace/Makefile b/app/trace/Makefile index 01122e23d..2b49ce0b0 100644 --- a/app/trace/Makefile +++ b/app/trace/Makefile @@ -34,7 +34,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..) include $(SPDK_ROOT_DIR)/mk/spdk.common.mk -CXXFLAGS += $(DPDK_INC) +CXXFLAGS += $(ENV_CFLAGS) CXX_SRCS := trace.cpp APP = spdk_trace diff --git a/examples/ioat/perf/Makefile b/examples/ioat/perf/Makefile index 4dc8da92b..750186d0f 100644 --- a/examples/ioat/perf/Makefile +++ b/examples/ioat/perf/Makefile @@ -38,18 +38,17 @@ APP = perf C_SRCS := perf.c -CFLAGS += -I. $(DPDK_INC) +CFLAGS += -I. $(ENV_CFLAGS) SPDK_LIBS += $(SPDK_ROOT_DIR)/lib/ioat/libspdk_ioat.a \ $(SPDK_ROOT_DIR)/lib/util/libspdk_util.a \ $(SPDK_ROOT_DIR)/lib/log/libspdk_log.a \ - $(SPDK_ROOT_DIR)/lib/env/libspdk_env.a \ -LIBS += $(SPDK_LIBS) $(DPDK_LIB) +LIBS += $(SPDK_LIBS) $(ENV_LINKER_ARGS) all: $(APP) -$(APP): $(OBJS) $(SPDK_LIBS) +$(APP): $(OBJS) $(SPDK_LIBS) $(ENV_LIBS) $(LINK_C) clean: diff --git a/examples/ioat/verify/Makefile b/examples/ioat/verify/Makefile index 5cc3c998b..875b9ee71 100644 --- a/examples/ioat/verify/Makefile +++ b/examples/ioat/verify/Makefile @@ -38,18 +38,17 @@ APP = verify C_SRCS := verify.c -CFLAGS += -I. $(DPDK_INC) +CFLAGS += -I. $(ENV_CFLAGS) SPDK_LIBS += $(SPDK_ROOT_DIR)/lib/ioat/libspdk_ioat.a \ $(SPDK_ROOT_DIR)/lib/util/libspdk_util.a \ $(SPDK_ROOT_DIR)/lib/log/libspdk_log.a \ - $(SPDK_ROOT_DIR)/lib/env/libspdk_env.a \ -LIBS += $(SPDK_LIBS) $(DPDK_LIB) +LIBS += $(SPDK_LIBS) $(ENV_LINKER_ARGS) all: $(APP) -$(APP): $(OBJS) $(SPDK_LIBS) +$(APP): $(OBJS) $(SPDK_LIBS) $(ENV_LIBS) $(LINK_C) clean: diff --git a/examples/nvme/arbitration/Makefile b/examples/nvme/arbitration/Makefile index 2643f1835..6c9771052 100644 --- a/examples/nvme/arbitration/Makefile +++ b/examples/nvme/arbitration/Makefile @@ -38,18 +38,17 @@ APP = arbitration C_SRCS := arbitration.c -CFLAGS += -I. $(DPDK_INC) +CFLAGS += -I. $(ENV_CFLAGS) SPDK_LIBS += $(SPDK_ROOT_DIR)/lib/nvme/libspdk_nvme.a \ $(SPDK_ROOT_DIR)/lib/util/libspdk_util.a \ $(SPDK_ROOT_DIR)/lib/log/libspdk_log.a \ - $(SPDK_ROOT_DIR)/lib/env/libspdk_env.a \ -LIBS += $(SPDK_LIBS) $(DPDK_LIB) +LIBS += $(SPDK_LIBS) $(ENV_LINKER_ARGS) all : $(APP) -$(APP) : $(OBJS) $(SPDK_LIBS) +$(APP) : $(OBJS) $(SPDK_LIBS) $(ENV_LIBS) $(LINK_C) clean : diff --git a/examples/nvme/fio_plugin/Makefile b/examples/nvme/fio_plugin/Makefile index cb6ad04de..4d2bd873a 100644 --- a/examples/nvme/fio_plugin/Makefile +++ b/examples/nvme/fio_plugin/Makefile @@ -40,20 +40,19 @@ APP := fio_plugin C_SRCS := fio_plugin.c -CFLAGS += -I. $(DPDK_INC) -I$(FIO_SOURCE_DIR) +CFLAGS += -I. $(ENV_CFLAGS) -I$(FIO_SOURCE_DIR) LDFLAGS += -shared -rdynamic SPDK_LIBS += $(SPDK_ROOT_DIR)/lib/nvme/libspdk_nvme.a \ $(SPDK_ROOT_DIR)/lib/util/libspdk_util.a \ $(SPDK_ROOT_DIR)/lib/log/libspdk_log.a \ - $(SPDK_ROOT_DIR)/lib/env/libspdk_env.a \ -LIBS += $(SPDK_LIBS) $(DPDK_LIB) +LIBS += $(SPDK_LIBS) $(ENV_LINKER_ARGS) all : $(APP) -$(APP) : $(OBJS) $(SPDK_LIBS) +$(APP) : $(OBJS) $(SPDK_LIBS) $(ENV_LIBS) $(LINK_C) clean : diff --git a/examples/nvme/hello_world/Makefile b/examples/nvme/hello_world/Makefile index 987ce902f..ba9aee622 100644 --- a/examples/nvme/hello_world/Makefile +++ b/examples/nvme/hello_world/Makefile @@ -38,18 +38,17 @@ APP = hello_world C_SRCS := hello_world.c -CFLAGS += -I. $(DPDK_INC) +CFLAGS += -I. $(ENV_CFLAGS) SPDK_LIBS += $(SPDK_ROOT_DIR)/lib/nvme/libspdk_nvme.a \ $(SPDK_ROOT_DIR)/lib/util/libspdk_util.a \ $(SPDK_ROOT_DIR)/lib/log/libspdk_log.a \ - $(SPDK_ROOT_DIR)/lib/env/libspdk_env.a \ -LIBS += $(SPDK_LIBS) $(DPDK_LIB) +LIBS += $(SPDK_LIBS) $(ENV_LINKER_ARGS) all : $(APP) -$(APP) : $(OBJS) $(SPDK_LIBS) +$(APP) : $(OBJS) $(SPDK_LIBS) $(ENV_LIBS) $(LINK_C) clean : diff --git a/examples/nvme/identify/Makefile b/examples/nvme/identify/Makefile index eccbe3d6c..73ed11d8f 100644 --- a/examples/nvme/identify/Makefile +++ b/examples/nvme/identify/Makefile @@ -38,18 +38,17 @@ APP = identify C_SRCS := identify.c -CFLAGS += -I. $(DPDK_INC) +CFLAGS += -I. $(ENV_CFLAGS) SPDK_LIBS += $(SPDK_ROOT_DIR)/lib/nvme/libspdk_nvme.a \ $(SPDK_ROOT_DIR)/lib/util/libspdk_util.a \ $(SPDK_ROOT_DIR)/lib/log/libspdk_log.a \ - $(SPDK_ROOT_DIR)/lib/env/libspdk_env.a \ -LIBS += $(SPDK_LIBS) $(DPDK_LIB) +LIBS += $(SPDK_LIBS) $(ENV_LINKER_ARGS) all : $(APP) -$(APP) : $(OBJS) $(SPDK_LIBS) +$(APP) : $(OBJS) $(SPDK_LIBS) $(ENV_LIBS) $(LINK_C) clean : diff --git a/examples/nvme/nvme_manage/Makefile b/examples/nvme/nvme_manage/Makefile index eaf0efdb2..a8db42b92 100644 --- a/examples/nvme/nvme_manage/Makefile +++ b/examples/nvme/nvme_manage/Makefile @@ -38,18 +38,17 @@ APP = nvme_manage C_SRCS := nvme_manage.c -CFLAGS += -I. $(DPDK_INC) +CFLAGS += -I. $(ENV_CFLAGS) SPDK_LIBS += $(SPDK_ROOT_DIR)/lib/nvme/libspdk_nvme.a \ $(SPDK_ROOT_DIR)/lib/util/libspdk_util.a \ $(SPDK_ROOT_DIR)/lib/log/libspdk_log.a \ - $(SPDK_ROOT_DIR)/lib/env/libspdk_env.a \ -LIBS += $(SPDK_LIBS) $(DPDK_LIB) +LIBS += $(SPDK_LIBS) $(ENV_LINKER_ARGS) all : $(APP) -$(APP) : $(OBJS) $(SPDK_LIBS) +$(APP) : $(OBJS) $(SPDK_LIBS) $(ENV_LIBS) $(LINK_C) clean : diff --git a/examples/nvme/perf/Makefile b/examples/nvme/perf/Makefile index caea7e7ea..6beb98043 100644 --- a/examples/nvme/perf/Makefile +++ b/examples/nvme/perf/Makefile @@ -38,14 +38,13 @@ APP = perf C_SRCS := perf.c -CFLAGS += -I. $(DPDK_INC) +CFLAGS += -I. $(ENV_CFLAGS) SPDK_LIBS += $(SPDK_ROOT_DIR)/lib/nvme/libspdk_nvme.a \ $(SPDK_ROOT_DIR)/lib/util/libspdk_util.a \ $(SPDK_ROOT_DIR)/lib/log/libspdk_log.a \ - $(SPDK_ROOT_DIR)/lib/env/libspdk_env.a \ -LIBS += $(SPDK_LIBS) $(DPDK_LIB) +LIBS += $(SPDK_LIBS) $(ENV_LINKER_ARGS) ifeq ($(OS),Linux) LIBS += -laio @@ -54,7 +53,7 @@ endif all : $(APP) -$(APP) : $(OBJS) $(SPDK_LIBS) +$(APP) : $(OBJS) $(SPDK_LIBS) $(ENV_LIBS) $(LINK_C) clean : diff --git a/examples/nvme/reserve/Makefile b/examples/nvme/reserve/Makefile index 06c1b3de9..89643e927 100644 --- a/examples/nvme/reserve/Makefile +++ b/examples/nvme/reserve/Makefile @@ -38,18 +38,17 @@ APP = reserve C_SRCS := reservation.c -CFLAGS += -I. $(DPDK_INC) +CFLAGS += -I. $(ENV_CFLAGS) SPDK_LIBS += $(SPDK_ROOT_DIR)/lib/nvme/libspdk_nvme.a \ $(SPDK_ROOT_DIR)/lib/util/libspdk_util.a \ $(SPDK_ROOT_DIR)/lib/log/libspdk_log.a \ - $(SPDK_ROOT_DIR)/lib/env/libspdk_env.a \ -LIBS += $(SPDK_LIBS) $(DPDK_LIB) +LIBS += $(SPDK_LIBS) $(ENV_LINKER_ARGS) all : $(APP) -$(APP) : $(OBJS) $(SPDK_LIBS) +$(APP) : $(OBJS) $(SPDK_LIBS) $(ENV_LIBS) $(LINK_C) clean : diff --git a/lib/bdev/Makefile b/lib/bdev/Makefile index a64015e8e..99d155721 100644 --- a/lib/bdev/Makefile +++ b/lib/bdev/Makefile @@ -34,7 +34,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..) include $(SPDK_ROOT_DIR)/mk/spdk.common.mk -CFLAGS += $(DPDK_INC) -I. +CFLAGS += $(ENV_CFLAGS) -I. C_SRCS = bdev.c LIBNAME = bdev diff --git a/lib/bdev/malloc/Makefile b/lib/bdev/malloc/Makefile index 15903be6d..b971e88c0 100644 --- a/lib/bdev/malloc/Makefile +++ b/lib/bdev/malloc/Makefile @@ -34,7 +34,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../../..) include $(SPDK_ROOT_DIR)/mk/spdk.common.mk -CFLAGS += $(DPDK_INC) -I$(SPDK_ROOT_DIR)/lib/bdev/ +CFLAGS += $(ENV_CFLAGS) -I$(SPDK_ROOT_DIR)/lib/bdev/ C_SRCS = blockdev_malloc.c blockdev_malloc_rpc.c LIBNAME = bdev_malloc diff --git a/lib/bdev/nvme/Makefile b/lib/bdev/nvme/Makefile index 5ce8f5a84..bd06f71cd 100644 --- a/lib/bdev/nvme/Makefile +++ b/lib/bdev/nvme/Makefile @@ -34,7 +34,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../../..) include $(SPDK_ROOT_DIR)/mk/spdk.common.mk -CFLAGS += $(DPDK_INC) -I$(SPDK_ROOT_DIR)/lib/bdev/ +CFLAGS += $(ENV_CFLAGS) -I$(SPDK_ROOT_DIR)/lib/bdev/ C_SRCS = blockdev_nvme.c LIBNAME = bdev_nvme diff --git a/lib/copy/Makefile b/lib/copy/Makefile index d357d3d9b..b940502ea 100644 --- a/lib/copy/Makefile +++ b/lib/copy/Makefile @@ -34,7 +34,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..) include $(SPDK_ROOT_DIR)/mk/spdk.common.mk -CFLAGS += $(DPDK_INC) +CFLAGS += $(ENV_CFLAGS) LIBNAME = copy C_SRCS = copy_engine.c diff --git a/lib/copy/ioat/Makefile b/lib/copy/ioat/Makefile index 348122381..f26b26da6 100644 --- a/lib/copy/ioat/Makefile +++ b/lib/copy/ioat/Makefile @@ -34,7 +34,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../../..) include $(SPDK_ROOT_DIR)/mk/spdk.common.mk -CFLAGS += $(DPDK_INC) +CFLAGS += $(ENV_CFLAGS) LIBNAME = copy_ioat C_SRCS = copy_engine_ioat.c diff --git a/lib/env/env.mk b/lib/env/env.mk new file mode 100644 index 000000000..62020ecb3 --- /dev/null +++ b/lib/env/env.mk @@ -0,0 +1,73 @@ +# +# BSD LICENSE +# +# Copyright (c) Intel Corporation. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Intel Corporation nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +# This makefile snippet must define the following flags: +# ENV_CFLAGS +# ENV_CXXFLAGS +# ENV_LIBS +# ENV_LINKER_ARGS + +DPDK_DIR ?= $(CONFIG_DPDK_DIR) + +ifeq ($(DPDK_DIR), ) +ifeq ($(OS),FreeBSD) +export DPDK_ABS_DIR = /usr/local/share/dpdk/x86_64-native-freebsdapp-clang +else +export DPDK_ABS_DIR = /usr/local/share/dpdk/x86_64-native-linuxapp-gcc +endif +else +export DPDK_ABS_DIR = $(abspath $(DPDK_DIR)) +endif + +DPDK_INC = -I$(DPDK_ABS_DIR)/include +DPDK_LIB = $(DPDK_ABS_DIR)/lib/librte_eal.a $(DPDK_ABS_DIR)/lib/librte_mempool.a \ + $(DPDK_ABS_DIR)/lib/librte_ring.a $(DPDK_ABS_DIR)/lib/librte_timer.a + +# librte_malloc was removed after DPDK 2.1. Link this library conditionally based on its +# existence to maintain backward compatibility. +ifneq ($(wildcard $(DPDK_ABS_DIR)/lib/librte_malloc.*),) +DPDK_LIB += $(DPDK_ABS_DIR)/lib/librte_malloc.a +endif + +ifeq ($(OS),Linux) +DPDK_LIB += -ldl +endif +ifeq ($(OS),FreeBSD) +DPDK_LIB += -lexecinfo +endif + +ENV_CFLAGS = $(DPDK_INC) +ENV_CXXFLAGS = $(ENV_CFLAGS) +ENV_LIBS = $(SPDK_ROOT_DIR)/lib/env/libspdk_env.a $(DPDK_LIB) +ENV_LINKER_ARGS = -Wl,--start-group -Wl,--whole-archive $(SPDK_ROOT_DIR)/lib/env/libspdk_env.a $(DPDK_LIB) -Wl,--end-group -Wl,--no-whole-archive + diff --git a/lib/event/Makefile b/lib/event/Makefile index af9a0218b..9606b46b6 100644 --- a/lib/event/Makefile +++ b/lib/event/Makefile @@ -34,7 +34,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..) include $(SPDK_ROOT_DIR)/mk/spdk.common.mk -CFLAGS += $(DPDK_INC) +CFLAGS += $(ENV_CFLAGS) LIBNAME = event C_SRCS = app.c dpdk_init.c reactor.c subsystem.c diff --git a/lib/ioat/Makefile b/lib/ioat/Makefile index ee14992dd..2219e7246 100644 --- a/lib/ioat/Makefile +++ b/lib/ioat/Makefile @@ -34,7 +34,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..) include $(SPDK_ROOT_DIR)/mk/spdk.common.mk -CFLAGS += $(DPDK_INC) -include $(CONFIG_IOAT_IMPL) +CFLAGS += $(ENV_CFLAGS) -include $(CONFIG_IOAT_IMPL) C_SRCS = ioat.c LIBNAME = ioat diff --git a/lib/iscsi/Makefile b/lib/iscsi/Makefile index 4c7f3be75..2b5726064 100644 --- a/lib/iscsi/Makefile +++ b/lib/iscsi/Makefile @@ -34,7 +34,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..) include $(SPDK_ROOT_DIR)/mk/spdk.common.mk -CFLAGS += $(DPDK_INC) -I$(SPDK_ROOT_DIR)/lib +CFLAGS += $(ENV_CFLAGS) -I$(SPDK_ROOT_DIR)/lib C_SRCS = acceptor.c conn.c crc32c.c \ init_grp.c iscsi.c md5.c param.c portal_grp.c \ tgt_node.c iscsi_subsystem.c \ diff --git a/lib/nvme/Makefile b/lib/nvme/Makefile index 4c3a3d609..c88fa5636 100644 --- a/lib/nvme/Makefile +++ b/lib/nvme/Makefile @@ -34,7 +34,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..) include $(SPDK_ROOT_DIR)/mk/spdk.common.mk -CFLAGS += $(DPDK_INC) -include $(CONFIG_NVME_IMPL) +CFLAGS += $(ENV_CFLAGS) -include $(CONFIG_NVME_IMPL) C_SRCS = nvme_ctrlr_cmd.c nvme_ctrlr.c nvme_ns_cmd.c nvme_ns.c nvme_qpair.c nvme.c nvme_intel.c LIBNAME = nvme diff --git a/lib/nvmf/Makefile b/lib/nvmf/Makefile index 84d05c2e0..32082ac8b 100644 --- a/lib/nvmf/Makefile +++ b/lib/nvmf/Makefile @@ -34,7 +34,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..) include $(SPDK_ROOT_DIR)/mk/spdk.common.mk -CFLAGS += $(DPDK_INC) +CFLAGS += $(ENV_CFLAGS) LIBNAME = nvmf C_SRCS = subsystem.c nvmf.c \ diff --git a/lib/rpc/Makefile b/lib/rpc/Makefile index 62315bf80..c9e5ecb69 100644 --- a/lib/rpc/Makefile +++ b/lib/rpc/Makefile @@ -34,7 +34,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..) include $(SPDK_ROOT_DIR)/mk/spdk.common.mk -CFLAGS += $(DPDK_INC) +CFLAGS += $(ENV_CFLAGS) C_SRCS = rpc.c LIBNAME = rpc diff --git a/lib/scsi/Makefile b/lib/scsi/Makefile index 5d79ddc17..c394bf3fa 100644 --- a/lib/scsi/Makefile +++ b/lib/scsi/Makefile @@ -34,7 +34,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..) include $(SPDK_ROOT_DIR)/mk/spdk.common.mk -CFLAGS += $(DPDK_INC) +CFLAGS += $(ENV_CFLAGS) C_SRCS = dev.c lun.c lun_db.c port.c scsi.c scsi_bdev.c scsi_rpc.c task.c LIBNAME = scsi diff --git a/lib/trace/Makefile b/lib/trace/Makefile index 0d401dbf2..1cbdfbad4 100644 --- a/lib/trace/Makefile +++ b/lib/trace/Makefile @@ -34,7 +34,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..) include $(SPDK_ROOT_DIR)/mk/spdk.common.mk -CFLAGS += $(DPDK_INC) +CFLAGS += $(ENV_CFLAGS) C_SRCS = trace.c LIBNAME = trace diff --git a/lib/util/Makefile b/lib/util/Makefile index 32f8a1727..3fadf320f 100644 --- a/lib/util/Makefile +++ b/lib/util/Makefile @@ -34,7 +34,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..) include $(SPDK_ROOT_DIR)/mk/spdk.common.mk -CFLAGS += $(DPDK_INC) +CFLAGS += $(ENV_CFLAGS) C_SRCS = bit_array.c fd.c io_channel.c string.c pci.c LIBNAME = util diff --git a/mk/spdk.common.mk b/mk/spdk.common.mk index e2ab050be..ebbae4880 100644 --- a/mk/spdk.common.mk +++ b/mk/spdk.common.mk @@ -93,8 +93,7 @@ LDFLAGS += --coverage endif endif -CFLAGS += $(COMMON_CFLAGS) -Wno-pointer-sign -Wstrict-prototypes -Wold-style-definition -std=gnu99 -CXXFLAGS += $(COMMON_CFLAGS) -std=c++0x +include $(CONFIG_ENV)/env.mk ifeq ($(CONFIG_ADDRESS_SANITIZER),y) COMMON_CFLAGS += -fsanitize=address @@ -104,6 +103,9 @@ endif COMMON_CFLAGS += -pthread LDFLAGS += -pthread +CFLAGS += $(COMMON_CFLAGS) -Wno-pointer-sign -Wstrict-prototypes -Wold-style-definition -std=gnu99 +CXXFLAGS += $(COMMON_CFLAGS) -std=c++0x + SYS_LIBS += -lrt MAKEFLAGS += --no-print-directory @@ -151,26 +153,3 @@ CLEAN_C=\ $(COMPILE_CXX) %.d: ; - -DPDK_DIR ?= $(CONFIG_DPDK_DIR) -export DPDK_DIR_ABS = $(abspath $(DPDK_DIR)) -DPDK_INC_DIR ?= $(DPDK_DIR_ABS)/include -DPDK_LIB_DIR ?= $(DPDK_DIR_ABS)/lib - -DPDK_INC = -I$(DPDK_INC_DIR) -DPDK_LIB = -L$(DPDK_LIB_DIR) -Wl,--start-group -Wl,--whole-archive \ - -lrte_eal -lrte_mempool -lrte_ring -lrte_timer \ - -Wl,--end-group -Wl,--no-whole-archive -Wl,-rpath=$(DPDK_LIB_DIR) -# librte_malloc was removed after DPDK 2.1. Link this library conditionally based on its -# existence to maintain backward compatibility. -ifneq ($(wildcard $(DPDK_DIR_ABS)/lib/librte_malloc.*),) -DPDK_LIB += -lrte_malloc -endif - -# DPDK requires dl library for dlopen/dlclose on Linux. -ifeq ($(OS),Linux) -DPDK_LIB += -ldl -endif -ifeq ($(OS),FreeBSD) -DPDK_LIB += -lexecinfo -endif diff --git a/test/lib/bdev/bdevio/Makefile b/test/lib/bdev/bdevio/Makefile index 2312e52a8..70530bbd3 100644 --- a/test/lib/bdev/bdevio/Makefile +++ b/test/lib/bdev/bdevio/Makefile @@ -39,7 +39,7 @@ APP = bdevio C_SRCS := bdevio.c -CFLAGS += -I. $(DPDK_INC) +CFLAGS += -I. $(ENV_CFLAGS) SPDK_LIBS += $(SPDK_ROOT_DIR)/lib/bdev/libspdk_bdev.a \ $(SPDK_ROOT_DIR)/lib/copy/libspdk_copy.a \ @@ -48,19 +48,18 @@ SPDK_LIBS += $(SPDK_ROOT_DIR)/lib/bdev/libspdk_bdev.a \ $(SPDK_ROOT_DIR)/lib/log/libspdk_log.a \ $(SPDK_ROOT_DIR)/lib/conf/libspdk_conf.a \ $(SPDK_ROOT_DIR)/lib/util/libspdk_util.a \ - $(SPDK_ROOT_DIR)/lib/env/libspdk_env.a \ $(SPDK_ROOT_DIR)/lib/rpc/libspdk_rpc.a \ $(SPDK_ROOT_DIR)/lib/jsonrpc/libspdk_jsonrpc.a \ - $(SPDK_ROOT_DIR)/lib/json/libspdk_json.a + $(SPDK_ROOT_DIR)/lib/json/libspdk_json.a \ LIBS += $(BLOCKDEV_MODULES_LINKER_ARGS) \ $(COPY_MODULES_LINKER_ARGS) -LIBS += $(SPDK_LIBS) $(DPDK_LIB) -lcunit +LIBS += $(SPDK_LIBS) $(ENV_LINKER_ARGS) -lcunit all : $(APP) -$(APP) : $(OBJS) $(SPDK_LIBS) $(BLOCKDEV_MODULES) $(LINKER_MODULES) +$(APP) : $(OBJS) $(SPDK_LIBS) $(BLOCKDEV_MODULES) $(LINKER_MODULES) $(ENV_LIBS) $(LINK_C) clean : diff --git a/test/lib/bdev/bdevperf/Makefile b/test/lib/bdev/bdevperf/Makefile index 63aae7d0e..cf8c7138e 100644 --- a/test/lib/bdev/bdevperf/Makefile +++ b/test/lib/bdev/bdevperf/Makefile @@ -39,7 +39,7 @@ APP = bdevperf C_SRCS := bdevperf.c -CFLAGS += -I. $(DPDK_INC) +CFLAGS += -I. $(ENV_CFLAGS) SPDK_LIBS += $(SPDK_ROOT_DIR)/lib/bdev/libspdk_bdev.a \ $(SPDK_ROOT_DIR)/lib/copy/libspdk_copy.a \ @@ -48,19 +48,18 @@ SPDK_LIBS += $(SPDK_ROOT_DIR)/lib/bdev/libspdk_bdev.a \ $(SPDK_ROOT_DIR)/lib/log/libspdk_log.a \ $(SPDK_ROOT_DIR)/lib/conf/libspdk_conf.a \ $(SPDK_ROOT_DIR)/lib/util/libspdk_util.a \ - $(SPDK_ROOT_DIR)/lib/env/libspdk_env.a \ $(SPDK_ROOT_DIR)/lib/rpc/libspdk_rpc.a \ $(SPDK_ROOT_DIR)/lib/jsonrpc/libspdk_jsonrpc.a \ - $(SPDK_ROOT_DIR)/lib/json/libspdk_json.a + $(SPDK_ROOT_DIR)/lib/json/libspdk_json.a \ LIBS += $(BLOCKDEV_MODULES_LINKER_ARGS) \ $(COPY_MODULES_LINKER_ARGS) -LIBS += $(SPDK_LIBS) $(DPDK_LIB) +LIBS += $(SPDK_LIBS) $(ENV_LINKER_ARGS) all : $(APP) -$(APP) : $(OBJS) $(SPDK_LIBS) $(BLOCKDEV_MODULES) $(COPY_MODULES) +$(APP) : $(OBJS) $(SPDK_LIBS) $(BLOCKDEV_MODULES) $(COPY_MODULES) $(ENV_LIBS) $(LINK_C) clean : diff --git a/test/lib/env/Makefile b/test/lib/env/Makefile index 6a85970c4..08d489d67 100644 --- a/test/lib/env/Makefile +++ b/test/lib/env/Makefile @@ -38,15 +38,13 @@ APP = vtophys C_SRCS = vtophys.c -CFLAGS += $(DPDK_INC) +CFLAGS += $(ENV_CFLAGS) -SPDK_LIBS += $(SPDK_ROOT_DIR)/lib/env/libspdk_env.a \ - -LIBS += $(SPDK_LIBS) $(DPDK_LIB) +LIBS += $(SPDK_LIBS) $(ENV_LINKER_ARGS) all: $(APP) -$(APP): $(OBJS) $(SPDK_LIBS) +$(APP): $(OBJS) $(SPDK_LIBS) $(ENV_LIBS) $(LINK_C) clean: diff --git a/test/lib/event/event/Makefile b/test/lib/event/event/Makefile index 35287fcc1..93effd852 100644 --- a/test/lib/event/event/Makefile +++ b/test/lib/event/event/Makefile @@ -34,7 +34,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../../../..) include $(SPDK_ROOT_DIR)/mk/spdk.common.mk -CFLAGS += $(DPDK_INC) +CFLAGS += $(ENV_CFLAGS) APP = event C_SRCS := event.c @@ -44,11 +44,11 @@ SPDK_LIBS += $(SPDK_ROOT_DIR)/lib/event/libspdk_event.a \ $(SPDK_ROOT_DIR)/lib/util/libspdk_util.a \ $(SPDK_ROOT_DIR)/lib/log/libspdk_log.a \ -LIBS += $(SPDK_LIBS) $(DPDK_LIB) +LIBS += $(SPDK_LIBS) $(ENV_LINKER_ARGS) all : $(APP) -$(APP) : $(OBJS) $(SPDK_LIBS) +$(APP) : $(OBJS) $(SPDK_LIBS) $(ENV_LIBS) $(LINK_C) clean : diff --git a/test/lib/event/reactor/Makefile b/test/lib/event/reactor/Makefile index c583448da..5e127a179 100644 --- a/test/lib/event/reactor/Makefile +++ b/test/lib/event/reactor/Makefile @@ -34,7 +34,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../../../..) include $(SPDK_ROOT_DIR)/mk/spdk.common.mk -CFLAGS += $(DPDK_INC) +CFLAGS += $(ENV_CFLAGS) APP = reactor C_SRCS := reactor.c @@ -44,11 +44,11 @@ SPDK_LIBS += $(SPDK_ROOT_DIR)/lib/event/libspdk_event.a \ $(SPDK_ROOT_DIR)/lib/util/libspdk_util.a \ $(SPDK_ROOT_DIR)/lib/log/libspdk_log.a \ -LIBS += $(SPDK_LIBS) $(DPDK_LIB) +LIBS += $(SPDK_LIBS) $(ENV_LINKER_ARGS) all : $(APP) -$(APP) : $(OBJS) $(SPDK_LIBS) +$(APP) : $(OBJS) $(SPDK_LIBS) $(ENV_LIBS) $(LINK_C) clean : diff --git a/test/lib/nvme/aer/Makefile b/test/lib/nvme/aer/Makefile index 7e1310a12..86332b828 100644 --- a/test/lib/nvme/aer/Makefile +++ b/test/lib/nvme/aer/Makefile @@ -38,18 +38,17 @@ APP = aer C_SRCS := aer.c -CFLAGS += -I. $(DPDK_INC) +CFLAGS += -I. $(ENV_CFLAGS) SPDK_LIBS += $(SPDK_ROOT_DIR)/lib/nvme/libspdk_nvme.a \ $(SPDK_ROOT_DIR)/lib/util/libspdk_util.a \ $(SPDK_ROOT_DIR)/lib/log/libspdk_log.a \ - $(SPDK_ROOT_DIR)/lib/env/libspdk_env.a \ -LIBS += $(SPDK_LIBS) $(DPDK_LIB) +LIBS += $(SPDK_LIBS) $(ENV_LINKER_ARGS) all : $(APP) -$(APP) : $(OBJS) $(SPDK_LIBS) +$(APP) : $(OBJS) $(SPDK_LIBS) $(ENV_LIBS) $(LINK_C) clean : diff --git a/test/lib/nvme/e2edp/Makefile b/test/lib/nvme/e2edp/Makefile index 15ca95d24..c07407d31 100644 --- a/test/lib/nvme/e2edp/Makefile +++ b/test/lib/nvme/e2edp/Makefile @@ -38,18 +38,17 @@ APP = nvme_dp C_SRCS := nvme_dp.c -CFLAGS += -I. $(DPDK_INC) +CFLAGS += -I. $(ENV_CFLAGS) SPDK_LIBS += $(SPDK_ROOT_DIR)/lib/nvme/libspdk_nvme.a \ $(SPDK_ROOT_DIR)/lib/util/libspdk_util.a \ $(SPDK_ROOT_DIR)/lib/log/libspdk_log.a \ - $(SPDK_ROOT_DIR)/lib/env/libspdk_env.a \ -LIBS += $(SPDK_LIBS) $(DPDK_LIB) +LIBS += $(SPDK_LIBS) $(ENV_LINKER_ARGS) all : $(APP) -$(APP) : $(OBJS) $(SPDK_LIBS) +$(APP) : $(OBJS) $(SPDK_LIBS) $(ENV_LIBS) $(LINK_C) clean : diff --git a/test/lib/nvme/overhead/Makefile b/test/lib/nvme/overhead/Makefile index 8da9b9900..2e5dc5f73 100644 --- a/test/lib/nvme/overhead/Makefile +++ b/test/lib/nvme/overhead/Makefile @@ -38,14 +38,13 @@ APP = overhead C_SRCS := overhead.c -CFLAGS += -I. $(DPDK_INC) +CFLAGS += -I. $(ENV_CFLAGS) SPDK_LIBS += $(SPDK_ROOT_DIR)/lib/nvme/libspdk_nvme.a \ $(SPDK_ROOT_DIR)/lib/util/libspdk_util.a \ $(SPDK_ROOT_DIR)/lib/log/libspdk_log.a \ - $(SPDK_ROOT_DIR)/lib/env/libspdk_env.a \ -LIBS += $(SPDK_LIBS) $(DPDK_LIB) +LIBS += $(SPDK_LIBS) $(ENV_LINKER_ARGS) ifeq ($(OS),Linux) LIBS += -laio @@ -54,7 +53,7 @@ endif all : $(APP) -$(APP) : $(OBJS) $(SPDK_LIBS) +$(APP) : $(OBJS) $(SPDK_LIBS) $(ENV_LIBS) $(LINK_C) clean : diff --git a/test/lib/nvme/reset/Makefile b/test/lib/nvme/reset/Makefile index 0f88d5bbe..95250d258 100644 --- a/test/lib/nvme/reset/Makefile +++ b/test/lib/nvme/reset/Makefile @@ -38,18 +38,17 @@ APP = reset C_SRCS := reset.c -CFLAGS += -I. $(DPDK_INC) +CFLAGS += -I. $(ENV_CFLAGS) SPDK_LIBS += $(SPDK_ROOT_DIR)/lib/nvme/libspdk_nvme.a \ $(SPDK_ROOT_DIR)/lib/util/libspdk_util.a \ $(SPDK_ROOT_DIR)/lib/log/libspdk_log.a \ - $(SPDK_ROOT_DIR)/lib/env/libspdk_env.a \ -LIBS += $(SPDK_LIBS) $(DPDK_LIB) +LIBS += $(SPDK_LIBS) $(ENV_LINKER_ARGS) all : $(APP) -$(APP) : $(OBJS) $(SPDK_LIBS) +$(APP) : $(OBJS) $(SPDK_LIBS) $(ENV_LIBS) $(LINK_C) clean : diff --git a/test/lib/nvme/sgl/Makefile b/test/lib/nvme/sgl/Makefile index 3304cff91..ff6bcff62 100644 --- a/test/lib/nvme/sgl/Makefile +++ b/test/lib/nvme/sgl/Makefile @@ -38,18 +38,17 @@ APP = sgl C_SRCS := nvme_sgl.c -CFLAGS += -I. $(DPDK_INC) +CFLAGS += -I. $(ENV_CFLAGS) SPDK_LIBS += $(SPDK_ROOT_DIR)/lib/nvme/libspdk_nvme.a \ $(SPDK_ROOT_DIR)/lib/util/libspdk_util.a \ $(SPDK_ROOT_DIR)/lib/log/libspdk_log.a \ - $(SPDK_ROOT_DIR)/lib/env/libspdk_env.a \ -LIBS += $(SPDK_LIBS) $(DPDK_LIB) +LIBS += $(SPDK_LIBS) $(ENV_LINKER_ARGS) all : $(APP) -$(APP) : $(OBJS) $(SPDK_LIBS) +$(APP) : $(OBJS) $(SPDK_LIBS) $(ENV_LIBS) $(LINK_C) clean : diff --git a/test/lib/nvmf/nvmf/Makefile b/test/lib/nvmf/nvmf/Makefile index 2582b6332..f952b4c89 100644 --- a/test/lib/nvmf/nvmf/Makefile +++ b/test/lib/nvmf/nvmf/Makefile @@ -33,14 +33,14 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../../../..) -CFLAGS += $(DPDK_INC) +CFLAGS += $(ENV_CFLAGS) SPDK_LIBS += $(SPDK_ROOT_DIR)/lib/log/libspdk_log.a \ $(SPDK_ROOT_DIR)/lib/conf/libspdk_conf.a \ $(SPDK_ROOT_DIR)/lib/util/libspdk_util.a \ $(SPDK_ROOT_DIR)/lib/trace/libspdk_trace.a \ $(SPDK_ROOT_DIR)/lib/event/libspdk_event.a \ -LIBS += $(SPDK_LIBS) $(DPDK_LIB) +LIBS += $(SPDK_LIBS) TEST_FILE = nvmf_ut.c