xref: /spdk/Makefile (revision bf94bb78c431afe6f9095bb19914cb42b136b07d)
1#  SPDX-License-Identifier: BSD-3-Clause
2#  Copyright (C) 2015 Intel Corporation.
3#  Copyright (c) 2020, Mellanox Corporation.
4#  Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES
5#  All rights reserved.
6#
7
8S :=
9
10SPDK_ROOT_DIR := $(CURDIR)
11include $(SPDK_ROOT_DIR)/mk/spdk.common.mk
12
13DIRS-y += lib
14DIRS-y += module
15DIRS-$(CONFIG_SHARED) += shared_lib
16DIRS-y += include
17DIRS-$(CONFIG_EXAMPLES) += examples
18DIRS-$(CONFIG_APPS) += app
19DIRS-y += test
20DIRS-$(CONFIG_IPSEC_MB) += ipsecbuild
21DIRS-$(CONFIG_ISAL) += isalbuild
22DIRS-$(CONFIG_ISAL_CRYPTO) += isalcryptobuild
23DIRS-$(CONFIG_VFIO_USER) += vfiouserbuild
24DIRS-$(CONFIG_SMA) += proto
25DIRS-$(CONFIG_XNVME) += xnvmebuild
26
27.PHONY: all clean $(DIRS-y) include/spdk/config.h mk/config.mk \
28	cc_version cxx_version .libs_only_other .ldflags ldflags install \
29	uninstall
30
31# Workaround for ninja. See dpdkbuild/Makefile
32export MAKE_PID := $(shell echo $$PPID)
33
34ifeq ($(SPDK_ROOT_DIR)/lib/env_dpdk,$(CONFIG_ENV))
35ifeq ($(CURDIR)/dpdk/build,$(CONFIG_DPDK_DIR))
36ifneq ($(SKIP_DPDK_BUILD),1)
37ifneq ($(CONFIG_DPDK_PKG_CONFIG),y)
38DPDKBUILD = dpdkbuild
39DIRS-y += dpdkbuild
40endif
41endif
42endif
43endif
44
45ifeq ($(OS),Windows)
46ifeq ($(CURDIR)/wpdk/build,$(CONFIG_WPDK_DIR))
47WPDK = wpdk
48DIRS-y += wpdk
49endif
50endif
51
52ifeq ($(CONFIG_SHARED),y)
53LIB = shared_lib
54else
55LIB = module
56endif
57
58ifeq ($(CONFIG_IPSEC_MB),y)
59LIB += ipsecbuild
60DPDK_DEPS += ipsecbuild
61endif
62
63ifeq ($(CONFIG_ISAL),y)
64ISALBUILD = isalbuild
65LIB += isalbuild
66DPDK_DEPS += isalbuild
67ifeq ($(CONFIG_ISAL_CRYPTO),y)
68ISALCRYPTOBUILD = isalcryptobuild
69LIB += isalcryptobuild
70endif
71endif
72
73ifeq ($(CONFIG_VFIO_USER),y)
74VFIOUSERBUILD = vfiouserbuild
75LIB += vfiouserbuild
76endif
77
78ifeq ($(CONFIG_XNVME),y)
79XNVMEBUILD = xnvmebuild
80LIB += xnvmebuild
81endif
82
83all: mk/cc.mk $(DIRS-y)
84clean: $(DIRS-y)
85	$(Q)rm -f include/spdk/config.h
86	$(Q)rm -rf build
87
88install: all
89	$(Q)echo "Installed to $(DESTDIR)$(CONFIG_PREFIX)"
90
91uninstall: $(DIRS-y)
92	$(Q)echo "Uninstalled spdk"
93
94ifneq ($(SKIP_DPDK_BUILD),1)
95dpdkdeps $(DPDK_DEPS): $(WPDK)
96dpdkbuild: $(WPDK) $(DPDK_DEPS)
97endif
98
99lib: $(WPDK) $(DPDKBUILD) $(VFIOUSERBUILD) $(XNVMEBUILD) $(ISALBUILD) $(ISALCRYPTOBUILD)
100module: lib
101shared_lib: module
102app: $(LIB)
103test: $(LIB)
104examples: $(LIB)
105pkgdep:
106	sh ./scripts/pkgdep.sh
107
108$(DIRS-y): mk/cc.mk build_dir include/spdk/config.h
109
110mk/cc.mk:
111	$(Q)echo "Please run configure prior to make"
112	false
113
114build_dir: mk/cc.mk
115	$(Q)mkdir -p build/lib/pkgconfig/tmp
116	$(Q)mkdir -p build/bin
117	$(Q)mkdir -p build/fio
118	$(Q)mkdir -p build/examples
119	$(Q)mkdir -p build/include/spdk
120
121include/spdk/config.h: mk/config.mk scripts/genconfig.py
122	$(Q)echo "#ifndef SPDK_CONFIG_H" > $@.tmp; \
123	echo "#define SPDK_CONFIG_H" >> $@.tmp; \
124	scripts/genconfig.py $(MAKEFLAGS) >> $@.tmp; \
125	echo "#endif /* SPDK_CONFIG_H */" >> $@.tmp; \
126	cmp -s $@.tmp $@ || mv $@.tmp $@ ; \
127	rm -f $@.tmp
128
129cc_version: mk/cc.mk
130	$(Q)echo "SPDK using CC=$(CC)"; $(CC) -v
131
132cxx_version: mk/cc.mk
133	$(Q)echo "SPDK using CXX=$(CXX)"; $(CXX) -v
134
135.libs_only_other:
136	$(Q)echo -n '$(SYS_LIBS) '
137	$(Q)if [ "$(CONFIG_SHARED)" = "y" ]; then \
138		echo -n '-lspdk '; \
139	fi
140
141.ldflags:
142	$(Q)echo -n '$(LDFLAGS) '
143
144ldflags: .ldflags .libs_only_other
145	$(Q)echo ''
146
147include $(SPDK_ROOT_DIR)/mk/spdk.subdirs.mk
148