From c779298802acfbda92794c519423e0d04208f327 Mon Sep 17 00:00:00 2001 From: Seth Howell Date: Wed, 19 Sep 2018 10:11:18 -0700 Subject: [PATCH] Make: Build shared libs while building static libs This will allow us to specify more granular system dependencies for each .so file. Change-Id: I759876e09ffb36380a503962b4be8fc9d7c71b63 Signed-off-by: Seth Howell Reviewed-on: https://review.gerrithub.io/426129 Tested-by: SPDK CI Jenkins Chandler-Test-Pool: SPDK Automated Test System Reviewed-by: Lance Hartmann Reviewed-by: Ben Walker Reviewed-by: Jim Harris --- mk/spdk.common.mk | 18 ++++------- mk/spdk.lib.mk | 23 ++++++++++++-- shared_lib/Makefile | 76 +++++++-------------------------------------- 3 files changed, 39 insertions(+), 78 deletions(-) diff --git a/mk/spdk.common.mk b/mk/spdk.common.mk index 5d62b19f4..0a1ab73c9 100644 --- a/mk/spdk.common.mk +++ b/mk/spdk.common.mk @@ -262,20 +262,14 @@ INSTALL_REL_SYMLINK := ln -sf -r endif define spdk_install_lib_symlink - $(INSTALL_REL_SYMLINK) $(DESTDIR)$(libdir)/$(1).$(SO_SUFFIX_ALL) $(DESTDIR)$(libdir)/$(1) + $(INSTALL_REL_SYMLINK) $(DESTDIR)$(libdir)/$(1) $(DESTDIR)$(libdir)/$(2) endef -# Install shared library(s) -define spdk_install_shared_libs - $(Q)echo " INSTALL $(DESTDIR)$(libdir)/$(notdir $(1))" - install -d -m 755 $(DESTDIR)$(libdir) - @for l in $(1); do \ - bln=$${l##*/}; \ - rn=$$l.$(SO_SUFFIX_ALL); \ - install -m 755 $$rn $(DESTDIR)$(libdir)/; \ - $(call spdk_install_lib_symlink,$$bln); \ - done -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=\ diff --git a/mk/spdk.lib.mk b/mk/spdk.lib.mk index 7a2c41cfc..7f0bee68f 100644 --- a/mk/spdk.lib.mk +++ b/mk/spdk.lib.mk @@ -33,21 +33,40 @@ include $(SPDK_ROOT_DIR)/mk/spdk.common.mk +SPDK_MAP_FILE = $(SPDK_ROOT_DIR)/shared_lib/spdk.map LIB := $(call spdk_lib_list_to_files,$(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 .PHONY: all clean $(DIRS-y) -all: $(LIB) $(DIRS-y) +all: $(DEP) $(DIRS-y) @: clean: $(DIRS-y) - $(CLEAN_C) $(LIB) + $(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)) $(LIB): $(OBJS) $(LIB_C) install: all $(INSTALL_LIB) +ifeq ($(CONFIG_SHARED),y) + $(INSTALL_SHARED_LIB) +endif include $(SPDK_ROOT_DIR)/mk/spdk.deps.mk diff --git a/shared_lib/Makefile b/shared_lib/Makefile index b90b87c8b..a63c64a13 100644 --- a/shared_lib/Makefile +++ b/shared_lib/Makefile @@ -37,81 +37,29 @@ include $(SPDK_ROOT_DIR)/mk/spdk.app.mk include $(SPDK_ROOT_DIR)/mk/spdk.modules.mk # Build combined libspdk.so shared library -COMBINED_LINKERNAME_LIB = $(SPDK_ROOT_DIR)/build/lib/libspdk.so -COMBINED_SHARED_LIB = $(COMBINED_LINKERNAME_LIB).$(SO_SUFFIX_ALL) +SHARED_LINKED_LIB := $(SPDK_ROOT_DIR)/build/lib/libspdk.so +SHARED_REALNAME_LIB := $(SHARED_LINKED_LIB).$(SO_SUFFIX_ALL) +IGNORED_LIBS := libspdk.so +IGNORED_LIBS += libspdk_spdk_mock.so +IGNORED_LIBS += libspdk_env_dpdk.so -SPDK_LIB_LIST += app_rpc -SPDK_LIB_LIST += bdev -SPDK_LIB_LIST += bdev_rpc -SPDK_LIB_LIST += blobfs -SPDK_LIB_LIST += conf -SPDK_LIB_LIST += copy -SPDK_LIB_LIST += event -SPDK_LIB_LIST += event_bdev -SPDK_LIB_LIST += event_copy -SPDK_LIB_LIST += event_iscsi -SPDK_LIB_LIST += event_net -SPDK_LIB_LIST += event_nvmf -SPDK_LIB_LIST += event_scsi -SPDK_LIB_LIST += iscsi -SPDK_LIB_LIST += json -SPDK_LIB_LIST += jsonrpc -SPDK_LIB_LIST += log -SPDK_LIB_LIST += log_rpc -SPDK_LIB_LIST += net -SPDK_LIB_LIST += nvmf -SPDK_LIB_LIST += rpc -SPDK_LIB_LIST += scsi -SPDK_LIB_LIST += thread -SPDK_LIB_LIST += trace -SPDK_LIB_LIST += util +SPDK_SHARED_LIBS := $(filter-out $(IGNORED_LIBS), $(sort $(notdir $(wildcard $(SPDK_ROOT_DIR)/build/lib/*.so)))) -ifeq ($(OS),Linux) -SPDK_LIB_LIST += event_nbd -SPDK_LIB_LIST += nbd - -ifeq ($(CONFIG_VHOST),y) -SPDK_LIB_LIST += event_vhost -SPDK_LIB_LIST += rte_vhost -SPDK_LIB_LIST += vhost -endif - -endif - -LIBS += $(BLOCKDEV_MODULES_LINKER_ARGS) -LIBS += $(COPY_MODULES_LINKER_ARGS) -LIBS += $(SOCK_MODULES_LINKER_ARGS) -LIBS += $(SPDK_LIB_LINKER_ARGS) -LIBS += $(ENV_LINKER_ARGS) - -SEP_LINKERNAME_LIBS := $(patsubst %.a,%.so,$(SPDK_LIB_FILES) $(BLOCKDEV_MODULES_FILES) $(COPY_MODULES_FILES) $(SOCK_MODULES_FILES)) -SEP_REALNAME_LIBS := $(patsubst %.so,%.so.$(SO_SUFFIX_ALL),$(SEP_LINKERNAME_LIBS)) - -comma := , - -$(COMBINED_SHARED_LIB): $(SPDK_LIB_FILES) $(SPDK_WHOLE_LIBS) $(BLOCKDEV_MODULES_FILES) $(COPY_MODULES_FILES) $(SOCK_MODULES_FILES) $(LINKER_MODULES) $(ENV_LIBS) $(MAKEFILE_LIST) spdk.map +$(SHARED_REALNAME_LIB): $(Q)echo " SO $(notdir $@)"; \ - rm -f $@; \ - $(call spdk_build_realname_shared_lib,$(filter-out -Wl$(comma)--no-whole-archive,$(LIBS)),spdk.map,$(SYS_LIBS)) + echo "GROUP ( $(SPDK_SHARED_LIBS) )" > $(SHARED_REALNAME_LIB) -$(COMBINED_LINKERNAME_LIB) : %.so : %.so.$(SO_SUFFIX_ALL) - $(Q)echo " SYMLINK $(notdir $@)"; $(BUILD_LINKERNAME_LIB) - -$(SEP_REALNAME_LIBS) : %.so.$(SO_SUFFIX_ALL) : %.a spdk.map - $(Q)echo " SO $(notdir $@)"; \ - $(call spdk_build_realname_shared_lib,$(filter %.a,$^),spdk.map) - -$(SEP_LINKERNAME_LIBS) : %.so : %.so.$(SO_SUFFIX_ALL) +$(SHARED_LINKED_LIB) : $(SHARED_REALNAME_LIB) $(Q)echo " SYMLINK $(notdir $@)"; $(BUILD_LINKERNAME_LIB) .PHONY: all clean $(DIRS-y) -all: $(COMBINED_SHARED_LIB) $(COMBINED_LINKERNAME_LIB) $(SEP_REALNAME_LIBS) $(SEP_LINKERNAME_LIBS) +all: $(SHARED_LINKED_LIB) clean: - $(CLEAN_C) $(COMBINED_SHARED_LIB) $(COMBINED_LINKERNAME_LIB) $(SEP_REALNAME_LIBS) $(SEP_LINKERNAME_LIBS) + $(CLEAN_C) $(SHARED_REALNAME_LIB) $(SHARED_LINKED_LIB) install: - $(call spdk_install_shared_libs, $(COMBINED_LINKERNAME_LIB) $(SEP_LINKERNAME_LIBS)) + $(INSTALL_SHARED_LIB) include $(SPDK_ROOT_DIR)/mk/spdk.subdirs.mk