xref: /spdk/mk/spdk.lib.mk (revision d736ac405b48421622156946b287ef9ddce743ec)
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