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