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