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