xref: /spdk/Makefile (revision 66289a6dbe28217365daa40fd92dcf327871c2e8)
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 -f include/spdk/version.h
89	$(Q)rm -rf build
90
91install: all
92	$(Q)echo "Installed to $(DESTDIR)$(CONFIG_PREFIX)"
93
94uninstall: $(DIRS-y)
95	$(Q)echo "Uninstalled spdk"
96
97ifneq ($(SKIP_DPDK_BUILD),1)
98dpdkdeps $(DPDK_DEPS): $(WPDK)
99dpdkbuild: $(WPDK) $(DPDK_DEPS)
100endif
101
102lib: $(WPDK) $(DPDKBUILD) $(VFIOUSERBUILD) $(XNVMEBUILD) $(ISALBUILD) $(ISALCRYPTOBUILD)
103module: lib
104shared_lib: module
105app: $(LIB)
106test: $(LIB)
107examples: $(LIB)
108pkgdep:
109	sh ./scripts/pkgdep.sh
110
111$(DIRS-y): mk/cc.mk build_dir include/spdk/config.h include/spdk/version.h
112
113mk/cc.mk:
114	$(Q)echo "Please run configure prior to make"
115	false
116
117build_dir: mk/cc.mk
118	$(Q)mkdir -p build/lib/pkgconfig/tmp
119	$(Q)mkdir -p build/bin
120	$(Q)mkdir -p build/fio
121	$(Q)mkdir -p build/examples
122	$(Q)mkdir -p build/include/spdk
123
124include/spdk/config.h: mk/config.mk scripts/genconfig.py
125	$(Q)echo "#ifndef SPDK_CONFIG_H" > $@.tmp; \
126	echo "#define SPDK_CONFIG_H" >> $@.tmp; \
127	scripts/genconfig.py $(MAKEFLAGS) >> $@.tmp; \
128	echo "#endif /* SPDK_CONFIG_H */" >> $@.tmp; \
129	cmp -s $@.tmp $@ || mv $@.tmp $@ ; \
130	rm -f $@.tmp
131
132include/spdk/version.h: include/spdk/version.h.in VERSION
133	$(Q)sed " \
134		s/\$$SPDK_VERSION_MAJOR/$(version_major)/g; \
135		s/\$$SPDK_VERSION_MINOR/$(version_minor)/g; \
136		s/\$$SPDK_VERSION_PATCH/$(version_patch)/g; \
137		s/\$$SPDK_VERSION_SUFFIX/$(version_suffix)/g;" \
138		$@.in > $@
139
140cc_version: mk/cc.mk
141	$(Q)echo "SPDK using CC=$(CC)"; $(CC) -v
142
143cxx_version: mk/cc.mk
144	$(Q)echo "SPDK using CXX=$(CXX)"; $(CXX) -v
145
146.libs_only_other:
147	$(Q)echo -n '$(SYS_LIBS) '
148	$(Q)if [ "$(CONFIG_SHARED)" = "y" ]; then \
149		echo -n '-lspdk '; \
150	fi
151
152.ldflags:
153	$(Q)echo -n '$(LDFLAGS) '
154
155ldflags: .ldflags .libs_only_other
156	$(Q)echo ''
157
158include $(SPDK_ROOT_DIR)/mk/spdk.subdirs.mk
159