diff options
Diffstat (limited to 'src/spdk/mk')
-rw-r--r-- | src/spdk/mk/nvme.libtest.mk | 60 | ||||
-rw-r--r-- | src/spdk/mk/spdk.app.mk | 75 | ||||
-rw-r--r-- | src/spdk/mk/spdk.common.mk | 305 | ||||
-rw-r--r-- | src/spdk/mk/spdk.deps.mk | 36 | ||||
-rw-r--r-- | src/spdk/mk/spdk.lib.mk | 80 | ||||
-rw-r--r-- | src/spdk/mk/spdk.mock.unittest.mk | 37 | ||||
-rw-r--r-- | src/spdk/mk/spdk.modules.mk | 115 | ||||
-rw-r--r-- | src/spdk/mk/spdk.subdirs.mk | 37 | ||||
-rw-r--r-- | src/spdk/mk/spdk.unittest.mk | 58 |
9 files changed, 803 insertions, 0 deletions
diff --git a/src/spdk/mk/nvme.libtest.mk b/src/spdk/mk/nvme.libtest.mk new file mode 100644 index 00000000..22cf38fa --- /dev/null +++ b/src/spdk/mk/nvme.libtest.mk @@ -0,0 +1,60 @@ +# +# 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. +# + +NVME_DIR := $(SPDK_ROOT_DIR)/lib/nvme + +include $(SPDK_ROOT_DIR)/mk/spdk.common.mk +include $(SPDK_ROOT_DIR)/mk/spdk.app.mk +include $(SPDK_ROOT_DIR)/mk/spdk.modules.mk + +C_SRCS = $(APP:%=%.c) + +SPDK_LIB_LIST = nvme thread util log + +LIBS += $(SOCK_MODULES_LINKER_ARGS) +LIBS += $(SPDK_LIB_LINKER_ARGS) $(ENV_LINKER_ARGS) + +ifeq ($(CONFIG_RDMA),y) +SYS_LIBS += -libverbs -lrdmacm +endif + +all: $(APP) + @: + +$(APP) : $(OBJS) $(SOCK_MODULES_FILES) $(SPDK_LIB_FILES) $(ENV_LIBS) + $(LINK_C) + +clean: + $(CLEAN_C) $(APP) + +include $(SPDK_ROOT_DIR)/mk/spdk.deps.mk diff --git a/src/spdk/mk/spdk.app.mk b/src/spdk/mk/spdk.app.mk new file mode 100644 index 00000000..92a2ce10 --- /dev/null +++ b/src/spdk/mk/spdk.app.mk @@ -0,0 +1,75 @@ +# +# 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. +# + +# Event subsystems only export constructor functions, so wrap these +# in whole-archive linker args +SPDK_FILTER_LIB_LIST = $(filter event_%,$(SPDK_LIB_LIST)) + +# RPC libraries only export constructor functions, so these need to be treated +# separately and wrapped in whole-archive linker args +SPDK_FILTER_LIB_LIST += $(filter %_rpc,$(SPDK_LIB_LIST)) + +# Currently some libraries contain their respective RPC methods +# rather than breaking them out into separate libraries. So we must also include +# these directories in the RPC library list. +SPDK_FILTER_LIB_LIST += $(filter iscsi,$(SPDK_LIB_LIST)) +SPDK_FILTER_LIB_LIST += $(filter nbd,$(SPDK_LIB_LIST)) +SPDK_FILTER_LIB_LIST += $(filter net,$(SPDK_LIB_LIST)) +SPDK_FILTER_LIB_LIST += $(filter vhost,$(SPDK_LIB_LIST)) +SPDK_FILTER_LIB_LIST += $(filter scsi,$(SPDK_LIB_LIST)) + +# The unit test mock wrappers need to be wrapped in whole-archive so they don't get +# automatically removed with LTO. +SPDK_FILTER_LIB_LIST += $(filter spdk_mock,$(SPDK_LIB_LIST)) + +SPDK_WHOLE_ARCHIVE_LIB_LIST = $(SPDK_FILTER_LIB_LIST) +SPDK_REMAINING_LIB_LIST = $(filter-out $(SPDK_WHOLE_ARCHIVE_LIB_LIST),$(SPDK_LIB_LIST)) + +SPDK_LIB_FILES = $(call spdk_lib_list_to_static_libs,$(SPDK_LIB_LIST)) +SPDK_LIB_LINKER_ARGS = \ + -L$(SPDK_ROOT_DIR)/build/lib \ + -Wl,--whole-archive \ + $(SPDK_WHOLE_ARCHIVE_LIB_LIST:%=-lspdk_%) \ + -Wl,--no-whole-archive \ + $(SPDK_REMAINING_LIB_LIST:%=-lspdk_%) + +# This is primarily used for unit tests to ensure they link when shared library +# build is enabled. Shared libraries can't get their mock implementation from +# the unit test file. +SPDK_STATIC_LIB_LINKER_ARGS = \ + -Wl,--whole-archive \ + $(SPDK_WHOLE_ARCHIVE_LIB_LIST:%=$(SPDK_ROOT_DIR)/build/lib/libspdk_%.a) \ + -Wl,--no-whole-archive \ + $(SPDK_REMAINING_LIB_LIST:%=$(SPDK_ROOT_DIR)/build/lib/libspdk_%.a) + +install: all diff --git a/src/spdk/mk/spdk.common.mk b/src/spdk/mk/spdk.common.mk new file mode 100644 index 00000000..acb73d96 --- /dev/null +++ b/src/spdk/mk/spdk.common.mk @@ -0,0 +1,305 @@ +# +# BSD LICENSE +# +# Copyright (c) Intel Corporation. +# Copyright (c) 2017, IBM 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. +# + +ifneq ($(MAKECMDGOALS),clean) +ifeq ($(wildcard $(SPDK_ROOT_DIR)/mk/config.mk),) +$(error mk/config.mk: file not found. Please run configure before 'make $(filter-out clean,$(MAKECMDGOALS))') +endif +endif + +include $(SPDK_ROOT_DIR)/mk/config.mk + +-include $(SPDK_ROOT_DIR)/mk/cc.mk + +ifneq ($(V),1) +Q ?= @ +endif +S ?= $(notdir $(CURDIR)) + +DESTDIR?= + +ifneq ($(prefix),) +CONFIG_PREFIX=$(prefix) +endif + +bindir?=$(CONFIG_PREFIX)/bin +libdir?=$(CONFIG_PREFIX)/lib +includedir?=$(CONFIG_PREFIX)/include + +ifeq ($(MAKECMDGOALS),) +MAKECMDGOALS=$(.DEFAULT_GOAL) +endif + +TARGET_TRIPLET := $(shell $(CC) -dumpmachine) +TARGET_TRIPLET_WORDS := $(subst -, ,$(TARGET_TRIPLET)) + +ifneq ($(filter linux%,$(TARGET_TRIPLET_WORDS)),) +OS = Linux +endif +ifneq ($(filter freebsd%,$(TARGET_TRIPLET_WORDS)),) +OS = FreeBSD +endif + +TARGET_MACHINE := $(firstword $(TARGET_TRIPLET_WORDS)) + +COMMON_CFLAGS = -g $(C_OPT) -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wmissing-declarations -fno-strict-aliasing -I$(SPDK_ROOT_DIR)/include + +ifneq ($(filter powerpc%,$(TARGET_MACHINE)),) +COMMON_CFLAGS += -mcpu=native +endif +ifeq ($(TARGET_MACHINE),x86_64) +COMMON_CFLAGS += -march=core2 +endif + +ifeq ($(CONFIG_WERROR), y) +COMMON_CFLAGS += -Werror +endif + +ifeq ($(CONFIG_LTO),y) +COMMON_CFLAGS += -flto +LDFLAGS += -flto +endif + +COMMON_CFLAGS += -Wformat -Wformat-security + +COMMON_CFLAGS += -D_GNU_SOURCE + +# Always build PIC code so that objects can be used in shared libs and position-independent executables +COMMON_CFLAGS += -fPIC + +# Enable stack buffer overflow checking +COMMON_CFLAGS += -fstack-protector + +# Prevent accidental multiple definitions of global variables +COMMON_CFLAGS += -fno-common + +# Enable full RELRO - no lazy relocation (resolve everything at load time). +# This allows the GOT to be made read-only early in the loading process. +LDFLAGS += -Wl,-z,relro,-z,now + +# Make the stack non-executable. +# This is the default in most environments, but it doesn't hurt to set it explicitly. +LDFLAGS += -Wl,-z,noexecstack + +ifeq ($(OS),FreeBSD) +SYS_LIBS += -L/usr/local/lib +COMMON_CFLAGS += -I/usr/local/include +endif + +# Attach only if PMDK lib specified with configure +ifneq ($(CONFIG_PMDK_DIR),) +LIBS += -L$(CONFIG_PMDK_DIR)/src/nondebug +COMMON_CFLAGS += -I$(CONFIG_PMDK_DIR)/src/include +endif + +ifneq ($(CONFIG_VPP_DIR),) +LIBS += -L$(CONFIG_VPP_DIR)/lib64 +COMMON_CFLAGS += -I$(CONFIG_VPP_DIR)/include +endif + +ifeq ($(CONFIG_RDMA),y) +SYS_LIBS += -libverbs -lrdmacm +endif + +#Attach only if FreeBSD and RDMA is specified with configure +ifeq ($(OS),FreeBSD) +ifeq ($(CONFIG_RDMA),y) +# Mellanox - MLX4 HBA Userspace Library +ifneq ("$(wildcard /usr/lib/libmlx4.*)","") +SYS_LIBS += -lmlx4 +endif +# Mellanox - MLX5 HBA Userspace Library +ifneq ("$(wildcard /usr/lib/libmlx5.*)","") +SYS_LIBS += -lmlx5 +endif +# Chelsio HBA Userspace Library +ifneq ("$(wildcard /usr/lib/libcxgb4.*)","") +SYS_LIBS += -lcxgb4 +endif +endif +endif + +ifeq ($(CONFIG_DEBUG), y) +COMMON_CFLAGS += -DDEBUG -O0 -fno-omit-frame-pointer +else +COMMON_CFLAGS += -DNDEBUG -O2 +# Enable _FORTIFY_SOURCE checks - these only work when optimizations are enabled. +COMMON_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 +endif + +ifeq ($(CONFIG_COVERAGE), y) +COMMON_CFLAGS += -fprofile-arcs -ftest-coverage +LDFLAGS += -fprofile-arcs -ftest-coverage +ifeq ($(OS),FreeBSD) +LDFLAGS += --coverage +endif +endif + +include $(CONFIG_ENV)/env.mk + +ifeq ($(CONFIG_ASAN),y) +COMMON_CFLAGS += -fsanitize=address +LDFLAGS += -fsanitize=address +endif + +ifeq ($(CONFIG_UBSAN),y) +COMMON_CFLAGS += -fsanitize=undefined +LDFLAGS += -fsanitize=undefined +endif + +ifeq ($(CONFIG_TSAN),y) +COMMON_CFLAGS += -fsanitize=thread +LDFLAGS += -fsanitize=thread +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 +SYS_LIBS += -luuid +SYS_LIBS += -lcrypto +ifeq ($(CONFIG_LOG_BACKTRACE),y) +SYS_LIBS += -lunwind +endif + +MAKEFLAGS += --no-print-directory + +C_SRCS += $(C_SRCS-y) +CXX_SRCS += $(CXX_SRCS-y) + +OBJS = $(C_SRCS:.c=.o) $(CXX_SRCS:.cpp=.o) + +DEPFLAGS = -MMD -MP -MF $*.d.tmp + +# Compile first input $< (.c) into $@ (.o) +COMPILE_C=\ + $(Q)echo " CC $S/$@"; \ + $(CC) -o $@ $(DEPFLAGS) $(CFLAGS) -c $< && \ + mv -f $*.d.tmp $*.d && touch -c $@ + +COMPILE_CXX=\ + $(Q)echo " CXX $S/$@"; \ + $(CXX) -o $@ $(DEPFLAGS) $(CXXFLAGS) -c $< && \ + mv -f $*.d.tmp $*.d && touch -c $@ + +# Link $(OBJS) and $(LIBS) into $@ (app) +LINK_C=\ + $(Q)echo " LINK $S/$@"; \ + $(CC) -o $@ $(CPPFLAGS) $(LDFLAGS) $(OBJS) $(LIBS) $(SYS_LIBS) + +LINK_CXX=\ + $(Q)echo " LINK $S/$@"; \ + $(CXX) -o $@ $(CPPFLAGS) $(LDFLAGS) $(OBJS) $(LIBS) $(SYS_LIBS) + +# +# Variables to use for versioning shared libs +# +SO_VER := 1 +SO_MINOR := 0 +SO_SUFFIX_ALL := $(SO_VER).$(SO_MINOR) + +# Provide function to ease build of a shared lib +define spdk_build_realname_shared_lib + $(CC) -o $@ -shared $(CPPFLAGS) $(LDFLAGS) \ + -Wl,--soname,$(patsubst %.so.$(SO_SUFFIX_ALL),%.so.$(SO_VER),$(notdir $@)) \ + -Wl,--whole-archive $(1) -Wl,--no-whole-archive \ + -Wl,--version-script=$(2) \ + $(3) +endef + +BUILD_LINKERNAME_LIB=\ + ln -sf $(notdir $<) $@ + +# Archive $(OBJS) into $@ (.a) +LIB_C=\ + $(Q)echo " LIB $(notdir $@)"; \ + rm -f $@; \ + $(CCAR) crDs $@ $(OBJS) + +# Clean up generated files listed as arguments plus a default list +CLEAN_C=\ + $(Q)rm -f *.a *.o *.d *.d.tmp *.gcno *.gcda + +# Install a library +INSTALL_LIB=\ + $(Q)echo " INSTALL $(DESTDIR)$(libdir)/$(notdir $(LIB))"; \ + install -d -m 755 "$(DESTDIR)$(libdir)"; \ + install -m 644 "$(LIB)" "$(DESTDIR)$(libdir)/" + +ifeq ($(OS),FreeBSD) +INSTALL_REL_SYMLINK := install -l rs +else +INSTALL_REL_SYMLINK := ln -sf -r +endif + +define spdk_install_lib_symlink + $(INSTALL_REL_SYMLINK) $(DESTDIR)$(libdir)/$(1) $(DESTDIR)$(libdir)/$(2) +endef + +INSTALL_SHARED_LIB=\ + $(Q)echo " INSTALL $(DESTDIR)$(libdir)/$(notdir $(SHARED_LINKED_LIB))"; \ + install -d -m 755 "$(DESTDIR)$(libdir)"; \ + install -m 755 "$(SHARED_REALNAME_LIB)" "$(DESTDIR)$(libdir)/"; \ + $(call spdk_install_lib_symlink,$(notdir $(SHARED_REALNAME_LIB)),$(notdir $(SHARED_LINKED_LIB))); + +# Install an app binary +INSTALL_APP=\ + $(Q)echo " INSTALL $(DESTDIR)$(bindir)/$(APP)"; \ + install -d -m 755 "$(DESTDIR)$(bindir)"; \ + install -m 755 "$(APP)" "$(DESTDIR)$(bindir)/" + +# Install a header +INSTALL_HEADER=\ + $(Q)echo " INSTALL $@"; \ + install -d -m 755 "$(DESTDIR)$(includedir)/$(dir $(patsubst $(DESTDIR)$(includedir)/%,%,$@))"; \ + install -m 644 "$(patsubst $(DESTDIR)$(includedir)/%,%,$@)" "$(DESTDIR)$(includedir)/$(dir $(patsubst $(DESTDIR)$(includedir)/%,%,$@))/" + +%.o: %.c %.d $(MAKEFILE_LIST) + $(COMPILE_C) + +%.o: %.cpp %.d $(MAKEFILE_LIST) + $(COMPILE_CXX) + +%.d: ; + +define spdk_lib_list_to_static_libs +$(1:%=$(SPDK_ROOT_DIR)/build/lib/libspdk_%.a) +endef + +define spdk_lib_list_to_shared_libs +$(1:%=$(SPDK_ROOT_DIR)/build/lib/libspdk_%.so) +endef diff --git a/src/spdk/mk/spdk.deps.mk b/src/spdk/mk/spdk.deps.mk new file mode 100644 index 00000000..aef9792f --- /dev/null +++ b/src/spdk/mk/spdk.deps.mk @@ -0,0 +1,36 @@ +# +# 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. +# + +.PRECIOUS: $(OBJS) + +-include $(OBJS:.o=.d) diff --git a/src/spdk/mk/spdk.lib.mk b/src/spdk/mk/spdk.lib.mk new file mode 100644 index 00000000..354c3f47 --- /dev/null +++ b/src/spdk/mk/spdk.lib.mk @@ -0,0 +1,80 @@ +# +# 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. +# + +include $(SPDK_ROOT_DIR)/mk/spdk.common.mk + +SPDK_MAP_FILE = $(SPDK_ROOT_DIR)/shared_lib/spdk.map +LIB := $(call spdk_lib_list_to_static_libs,$(LIBNAME)) +SHARED_LINKED_LIB := $(subst .a,.so,$(LIB)) +SHARED_REALNAME_LIB := $(subst .so,.so.$(SO_SUFFIX_ALL),$(SHARED_LINKED_LIB)) + +ifeq ($(CONFIG_SHARED),y) +DEP := $(SHARED_LINKED_LIB) +else +DEP := $(LIB) +endif + +ifeq ($(OS),FreeBSD) +LOCAL_SYS_LIBS += -L/usr/local/lib -lrt +else +LOCAL_SYS_LIBS += -lrt +endif + + +.PHONY: all clean $(DIRS-y) + +all: $(DEP) $(DIRS-y) + @: + +clean: $(DIRS-y) + $(CLEAN_C) $(LIB) $(SHARED_LINKED_LIB) $(SHARED_REALNAME_LIB) + +$(SHARED_LINKED_LIB): $(SHARED_REALNAME_LIB) + $(Q)echo " SYMLINK $(notdir $@)"; $(BUILD_LINKERNAME_LIB) + +$(SHARED_REALNAME_LIB): $(LIB) + $(Q)echo " SO $(notdir $@)"; \ + $(call spdk_build_realname_shared_lib,$^,$(SPDK_MAP_FILE),$(LOCAL_SYS_LIBS)) + +$(LIB): $(OBJS) + $(LIB_C) + +install: all + $(INSTALL_LIB) +ifeq ($(CONFIG_SHARED),y) + $(INSTALL_SHARED_LIB) +endif + +include $(SPDK_ROOT_DIR)/mk/spdk.deps.mk + +include $(SPDK_ROOT_DIR)/mk/spdk.subdirs.mk diff --git a/src/spdk/mk/spdk.mock.unittest.mk b/src/spdk/mk/spdk.mock.unittest.mk new file mode 100644 index 00000000..dff2c969 --- /dev/null +++ b/src/spdk/mk/spdk.mock.unittest.mk @@ -0,0 +1,37 @@ +# +# 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. +# +LDFLAGS += \ + -Wl,--wrap,calloc \ + -Wl,--wrap,pthread_mutexattr_init \ + -Wl,--wrap,pthread_mutex_init \ + -Wl,--wrap,pthread_self diff --git a/src/spdk/mk/spdk.modules.mk b/src/spdk/mk/spdk.modules.mk new file mode 100644 index 00000000..77bcca0a --- /dev/null +++ b/src/spdk/mk/spdk.modules.mk @@ -0,0 +1,115 @@ +# +# 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. +# + +LVOL_MODULES_LIST = vbdev_lvol +# Modules below are added as dependency for vbdev_lvol +LVOL_MODULES_LIST += blob blob_bdev lvol + +BLOCKDEV_MODULES_LIST = $(LVOL_MODULES_LIST) +BLOCKDEV_MODULES_LIST += bdev_malloc bdev_null bdev_nvme nvme vbdev_passthru vbdev_error vbdev_gpt vbdev_split +BLOCKDEV_MODULES_LIST += vbdev_raid + +ifeq ($(CONFIG_CRYPTO),y) +BLOCKDEV_MODULES_LIST += vbdev_crypto +endif + +ifeq ($(CONFIG_RDMA),y) +BLOCKDEV_MODULES_DEPS += -libverbs -lrdmacm +endif + +ifeq ($(OS),Linux) +BLOCKDEV_MODULES_LIST += bdev_aio +BLOCKDEV_MODULES_DEPS += -laio +ifeq ($(CONFIG_VIRTIO),y) +BLOCKDEV_MODULES_LIST += bdev_virtio virtio +endif +ifeq ($(CONFIG_ISCSI_INITIATOR),y) +BLOCKDEV_MODULES_LIST += bdev_iscsi +# Fedora installs libiscsi to /usr/lib64/iscsi for some reason. +BLOCKDEV_MODULES_DEPS += -L/usr/lib64/iscsi -liscsi +endif +endif + +ifeq ($(CONFIG_RBD),y) +BLOCKDEV_MODULES_LIST += bdev_rbd +BLOCKDEV_MODULES_DEPS += -lrados -lrbd +endif + +ifeq ($(CONFIG_PMDK),y) +BLOCKDEV_MODULES_LIST += bdev_pmem +BLOCKDEV_MODULES_DEPS += -lpmemblk +endif + +SOCK_MODULES_LIST = sock +SOCK_MODULES_LIST += sock_posix + +ifeq ($(CONFIG_VPP),y) +ifneq ($(CONFIG_VPP_DIR),) +SOCK_MODULES_DEPS = -l:libvppinfra.a -l:libsvm.a -l:libvapiclient.a +SOCK_MODULES_DEPS += -l:libvppcom.a -l:libvlibmemoryclient.a +else +SOCK_MODULES_DEPS = -lvppcom +endif +SOCK_MODULES_LIST += sock_vpp +endif + +COPY_MODULES_LIST = copy_ioat ioat + +BLOCKDEV_MODULES_LINKER_ARGS = -Wl,--whole-archive \ + $(BLOCKDEV_MODULES_LIST:%=-lspdk_%) \ + -Wl,--no-whole-archive \ + $(BLOCKDEV_MODULES_DEPS) + +BLOCKDEV_MODULES_FILES = $(call spdk_lib_list_to_static_libs,$(BLOCKDEV_MODULES_LIST)) + +BLOCKDEV_NO_LVOL_MODULES_LIST = $(filter-out $(LVOL_MODULES_LIST),$(BLOCKDEV_MODULES_LIST)) +BLOCKDEV_NO_LVOL_MODULES_LINKER_ARGS = -Wl,--whole-archive \ + $(BLOCKDEV_NO_LVOL_MODULES_LIST:%=-lspdk_%) \ + -Wl,--no-whole-archive \ + $(BLOCKDEV_MODULES_DEPS) + +BLOCKDEV_NO_LVOL_MODULES_FILES = $(call spdk_lib_list_to_static_libs,$(BLOCKDEV_NO_LVOL_MODULES_LIST)) + +COPY_MODULES_LINKER_ARGS = -Wl,--whole-archive \ + $(COPY_MODULES_LIST:%=-lspdk_%) \ + -Wl,--no-whole-archive \ + $(COPY_MODULES_DEPS) + +COPY_MODULES_FILES = $(call spdk_lib_list_to_static_libs,$(COPY_MODULES_LIST)) + +SOCK_MODULES_LINKER_ARGS = -Wl,--whole-archive \ + $(SOCK_MODULES_LIST:%=-lspdk_%) \ + $(SOCK_MODULES_DEPS) \ + -Wl,--no-whole-archive + +SOCK_MODULES_FILES = $(call spdk_lib_list_to_static_libs,$(SOCK_MODULES_LIST)) diff --git a/src/spdk/mk/spdk.subdirs.mk b/src/spdk/mk/spdk.subdirs.mk new file mode 100644 index 00000000..6de1e97e --- /dev/null +++ b/src/spdk/mk/spdk.subdirs.mk @@ -0,0 +1,37 @@ +# +# 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. +# + +$(DIRS-y) : + $(Q)$(MAKE) -C $@ S=$S$(S:%=/)$@ $(MAKECMDGOALS) $(MAKESUBDIRFLAGS) + +install: all $(DIRS-y) diff --git a/src/spdk/mk/spdk.unittest.mk b/src/spdk/mk/spdk.unittest.mk new file mode 100644 index 00000000..594f6d56 --- /dev/null +++ b/src/spdk/mk/spdk.unittest.mk @@ -0,0 +1,58 @@ +# +# 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. +# + +include $(SPDK_ROOT_DIR)/mk/spdk.common.mk +include $(SPDK_ROOT_DIR)/mk/spdk.app.mk +include $(SPDK_ROOT_DIR)/mk/spdk.mock.unittest.mk + +C_SRCS = $(TEST_FILE) + +CFLAGS += -I$(SPDK_ROOT_DIR)/lib +CFLAGS += -I$(SPDK_ROOT_DIR)/test + +SPDK_LIB_LIST += thread util log spdk_mock sock + +LIBS += -lcunit $(SPDK_STATIC_LIB_LINKER_ARGS) + +APP = $(TEST_FILE:.c=) + +all: $(APP) + @: + +$(APP) : $(OBJS) $(SPDK_LIB_FILES) $(ADDITIONAL_LIBS) + $(LINK_C) + +clean: + $(CLEAN_C) $(APP) + +include $(SPDK_ROOT_DIR)/mk/spdk.deps.mk |