1# SPDX-License-Identifier: BSD-3-Clause 2# Copyright (C) 2015 Intel Corporation. 3# All rights reserved. 4# 5 6include $(SPDK_ROOT_DIR)/mk/spdk.common.mk 7include $(SPDK_ROOT_DIR)/mk/spdk.lib_deps.mk 8include $(SPDK_ROOT_DIR)/mk/spdk.modules.mk 9 10ifeq ($(SPDK_MAP_FILE),) 11$(error SPDK_MAP_FILE is not set for lib $(LIBNAME)) 12endif 13 14ifeq ($(SO_VER),) 15$(error SO major version is not set for lib $(LIBNAME)) 16endif 17 18ifeq ($(SO_MINOR),) 19$(error SO minor version is not set for lib $(LIBNAME)) 20endif 21 22 23SO_SUFFIX := $(SO_VER).$(SO_MINOR) 24LIB := $(call spdk_lib_list_to_static_libs,$(LIBNAME)) 25SHARED_LINKED_LIB := $(LIB:.a=.so) 26SHARED_REALNAME_LIB := $(SHARED_LINKED_LIB:.so=.so.$(SO_SUFFIX)) 27 28PKGCONFIG = $(call pkgconfig_filename,spdk_$(LIBNAME)) 29PKGCONFIG_INST = $(call pkgconfig_filename,tmp/spdk_$(LIBNAME)) 30 31ifeq ($(CONFIG_SHARED),y) 32DEP := $(SHARED_LINKED_LIB) 33else 34DEP := $(LIB) 35endif 36 37DEP += $(PKGCONFIG) ${PKGCONFIG_INST} 38 39ifeq ($(OS),FreeBSD) 40LOCAL_SYS_LIBS += -L/usr/local/lib 41endif 42 43define subdirs_rule 44$(1): $(2) 45 @+$(Q)$(MAKE) -C $(1) S=$S$(S:%=/)$@ $(MAKECMDGOALS) 46endef 47 48$(foreach dir,$(DIRS-y),$(eval $(call subdirs_rule,$(dir),$(DEP)))) 49 50ifneq ($(DIRS-y),) 51BUILD_DEP := $(DIRS-y) 52else 53BUILD_DEP := $(DEP) 54endif 55 56SPDK_DEP_LIBS = $(call spdk_lib_list_to_shared_libs,$(DEPDIRS-$(LIBNAME))) 57 58ifeq ($(CXX_SRCS),) 59COMPILER=$(CC) 60else 61COMPILER=$(CXX) 62endif 63 64MODULES-bdev = spdk_bdev_modules 65MODULES-sock = spdk_sock_modules 66MODULES-accel = spdk_accel_modules 67MODULES-scheduler = spdk_scheduler_modules 68ifeq ($(SPDK_ROOT_DIR)/lib/env_dpdk,$(CONFIG_ENV)) 69MODULES-event = spdk_env_dpdk_rpc 70endif 71 72.PHONY: all clean $(DIRS-y) 73 74all: $(BUILD_DEP) 75 @: 76 77clean: $(DIRS-y) 78 $(CLEAN_C) $(LIB) $(SHARED_LINKED_LIB) $(SHARED_REALNAME_LIB) 79 80$(SHARED_LINKED_LIB): $(SHARED_REALNAME_LIB) 81 $(Q)echo " SYMLINK $(notdir $@)"; $(BUILD_LINKERNAME_LIB) 82 83$(SHARED_REALNAME_LIB): $(LIB) 84 $(Q)echo " SO $(notdir $@)"; \ 85 $(call spdk_build_realname_shared_lib,$(COMPILER),$^,$(SPDK_MAP_FILE),$(LOCAL_SYS_LIBS),$(SPDK_DEP_LIBS)) 86 87define pkgconfig_create 88 $(Q)$(SPDK_ROOT_DIR)/scripts/pc.sh $(1) $(2) $(LIBNAME) $(SO_SUFFIX) \ 89 "$(DEPDIRS-$(LIBNAME):%=spdk_%) $(MODULES-$(LIBNAME))" \ 90 "" > $@ 91endef 92 93$(PKGCONFIG): $(LIB) 94 $(call pkgconfig_create,$(SPDK_ROOT_DIR)/build "") 95 96$(PKGCONFIG_INST): $(LIB) 97 $(call pkgconfig_create,$(CONFIG_PREFIX),$(libdir)) 98 99$(LIB): $(OBJS) 100 $(LIB_C) 101 102install: all 103 $(INSTALL_LIB) 104 @$(call pkgconfig_install,$(PKGCONFIG_INST)) 105ifeq ($(CONFIG_SHARED),y) 106 $(INSTALL_SHARED_LIB) 107endif 108 109uninstall: $(DIRS-y) 110 $(UNINSTALL_LIB) 111 @$(call pkgconfig_uninstall,$(PKGCONFIG_INST)) 112ifeq ($(CONFIG_SHARED),y) 113 $(UNINSTALL_SHARED_LIB) 114endif 115 116include $(SPDK_ROOT_DIR)/mk/spdk.deps.mk 117