From d0a7baa63c79803bef5c76e0af167955e6a715b9 Mon Sep 17 00:00:00 2001 From: Jim Harris Date: Fri, 12 Oct 2018 14:09:41 -0700 Subject: [PATCH] mk: add framework for defining inter-lib dependencies Currently only the iscsi => scsi dependency is defined to demonstrate how the framework behaves. Eventually, lib/Makefile will be populated with more lines of the form: DEPDIRS-iscsi : scsi log conf event This line will ensure that the iscsi subdirectory is built after the specified dependency directories. Then the lib/iscsi/Makefile also defines: DEP_LIBNAMES = scsi log conf event This line adds dependencies from the iscsi.so to the specified libraries. Ideally we could avoid this duplication by passing the DEPDIRS value to the lower level Makefile, but that breaks down when we start considering event/subsystems/* libraries. So for now we'll need to duplicate it. Incidentally, DPDK also duplicates the dependency information like this. While here, remove use of $(MAKESUBDIRFLAGS) in spdk.subdirs.mk - it was no longer used anywhere in the tree. Signed-off-by: Jim Harris Change-Id: If63cbc10ffa18ac6361e4210bd6196ffe88bec43 Reviewed-on: https://review.gerrithub.io/429287 Tested-by: SPDK CI Jenkins Chandler-Test-Pool: SPDK Automated Test System Reviewed-by: Changpeng Liu Reviewed-by: Lance Hartmann Reviewed-by: Darek Stojaczyk Reviewed-by: Seth Howell Reviewed-by: Shuhei Matsumoto Reviewed-by: Ben Walker --- lib/Makefile | 2 ++ lib/iscsi/Makefile | 1 + mk/spdk.lib.mk | 3 ++- mk/spdk.subdirs.mk | 13 ++++++++++++- 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/Makefile b/lib/Makefile index 8de59e3af8..6bf0fe9a8d 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -50,6 +50,8 @@ ifeq ($(abspath $(CONFIG_ENV)),$(SPDK_ROOT_DIR)/lib/$(ENV_NAME)) DIRS-y += $(ENV_NAME) endif +DEPDIRS-iscsi := scsi + .PHONY: all clean $(DIRS-y) all: $(DIRS-y) diff --git a/lib/iscsi/Makefile b/lib/iscsi/Makefile index 624bbf957b..57323a5812 100644 --- a/lib/iscsi/Makefile +++ b/lib/iscsi/Makefile @@ -41,5 +41,6 @@ C_SRCS = acceptor.c conn.c \ iscsi_rpc.c task.c LIBNAME = iscsi LOCAL_SYS_LIBS = -lcrypto +SPDK_DEP_LIBNAMES = scsi include $(SPDK_ROOT_DIR)/mk/spdk.lib.mk diff --git a/mk/spdk.lib.mk b/mk/spdk.lib.mk index 354c3f47ab..9711be6071 100644 --- a/mk/spdk.lib.mk +++ b/mk/spdk.lib.mk @@ -50,6 +50,7 @@ else LOCAL_SYS_LIBS += -lrt endif +SPDK_DEP_LIBS = $(call spdk_lib_list_to_shared_libs,$(SPDK_DEP_LIBNAMES)) .PHONY: all clean $(DIRS-y) @@ -64,7 +65,7 @@ $(SHARED_LINKED_LIB): $(SHARED_REALNAME_LIB) $(SHARED_REALNAME_LIB): $(LIB) $(Q)echo " SO $(notdir $@)"; \ - $(call spdk_build_realname_shared_lib,$^,$(SPDK_MAP_FILE),$(LOCAL_SYS_LIBS)) + $(call spdk_build_realname_shared_lib,$^,$(SPDK_MAP_FILE),$(LOCAL_SYS_LIBS) $(SPDK_DEP_LIBS)) $(LIB): $(OBJS) $(LIB_C) diff --git a/mk/spdk.subdirs.mk b/mk/spdk.subdirs.mk index 6de1e97ef5..9773c4cad6 100644 --- a/mk/spdk.subdirs.mk +++ b/mk/spdk.subdirs.mk @@ -31,7 +31,18 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # +ALL_DEPDIRS := $(patsubst DEPDIRS-%,%,$(filter DEPDIRS-%,$(.VARIABLES))) + +define depdirs_rule +$(DEPDIRS-$(1)): + +$(1): | $(DEPDIRS-$(1)) + +endef + $(DIRS-y) : - $(Q)$(MAKE) -C $@ S=$S$(S:%=/)$@ $(MAKECMDGOALS) $(MAKESUBDIRFLAGS) + $(Q)$(MAKE) -C $@ S=$S$(S:%=/)$@ $(MAKECMDGOALS) + +$(foreach dir,$(ALL_DEPDIRS),$(eval $(call depdirs_rule,$(dir)))) install: all $(DIRS-y)