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 <james.r.harris@intel.com>
Change-Id: If63cbc10ffa18ac6361e4210bd6196ffe88bec43

Reviewed-on: https://review.gerrithub.io/429287
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Lance Hartmann <lance.hartmann@oracle.com>
Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
Reviewed-by: Seth Howell <seth.howell5141@gmail.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Jim Harris 2018-10-12 14:09:41 -07:00 committed by Ben Walker
parent 67a50c7bf0
commit d0a7baa63c
4 changed files with 17 additions and 2 deletions

View File

@ -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)

View File

@ -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

View File

@ -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)

View File

@ -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)