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