1# SPDX-License-Identifier: BSD-3-Clause 2# Copyright (c) Intel Corporation. 3# Copyright (c) 2020, Mellanox Corporation. 4# All rights reserved. 5# 6 7S := 8 9SPDK_ROOT_DIR := $(CURDIR) 10include $(SPDK_ROOT_DIR)/mk/spdk.common.mk 11 12DIRS-y += lib 13DIRS-y += module 14DIRS-$(CONFIG_SHARED) += shared_lib 15DIRS-y += include 16DIRS-$(CONFIG_EXAMPLES) += examples 17DIRS-$(CONFIG_APPS) += app 18DIRS-y += test 19DIRS-$(CONFIG_IPSEC_MB) += ipsecbuild 20DIRS-$(CONFIG_ISAL) += isalbuild 21DIRS-$(CONFIG_VFIO_USER) += vfiouserbuild 22DIRS-$(CONFIG_SMA) += proto 23DIRS-$(CONFIG_XNVME) += xnvmebuild 24 25.PHONY: all clean $(DIRS-y) include/spdk/config.h mk/config.mk \ 26 cc_version cxx_version .libs_only_other .ldflags ldflags install \ 27 uninstall 28 29# Workaround for ninja. See dpdkbuild/Makefile 30export MAKE_PID := $(shell echo $$PPID) 31 32ifeq ($(SPDK_ROOT_DIR)/lib/env_dpdk,$(CONFIG_ENV)) 33ifeq ($(CURDIR)/dpdk/build,$(CONFIG_DPDK_DIR)) 34ifneq ($(SKIP_DPDK_BUILD),1) 35ifneq ($(CONFIG_DPDK_PKG_CONFIG),y) 36DPDKBUILD = dpdkbuild 37DIRS-y += dpdkbuild 38endif 39endif 40endif 41endif 42 43ifeq ($(OS),Windows) 44ifeq ($(CURDIR)/wpdk/build,$(CONFIG_WPDK_DIR)) 45WPDK = wpdk 46DIRS-y += wpdk 47endif 48endif 49 50ifeq ($(CONFIG_SHARED),y) 51LIB = shared_lib 52else 53LIB = module 54endif 55 56ifeq ($(CONFIG_IPSEC_MB),y) 57LIB += ipsecbuild 58DPDK_DEPS += ipsecbuild 59endif 60 61ifeq ($(CONFIG_ISAL),y) 62ISALBUILD = isalbuild 63LIB += isalbuild 64DPDK_DEPS += isalbuild 65endif 66 67ifeq ($(CONFIG_VFIO_USER),y) 68VFIOUSERBUILD = vfiouserbuild 69LIB += vfiouserbuild 70endif 71 72ifeq ($(CONFIG_XNVME),y) 73XNVMEBUILD = xnvmebuild 74LIB += xnvmebuild 75endif 76 77all: mk/cc.mk $(DIRS-y) 78clean: $(DIRS-y) 79 $(Q)rm -f include/spdk/config.h 80 $(Q)rm -rf build 81 82install: all 83 $(Q)echo "Installed to $(DESTDIR)$(CONFIG_PREFIX)" 84 85uninstall: $(DIRS-y) 86 $(Q)echo "Uninstalled spdk" 87 88ifneq ($(SKIP_DPDK_BUILD),1) 89dpdkdeps $(DPDK_DEPS): $(WPDK) 90dpdkbuild: $(WPDK) $(DPDK_DEPS) 91endif 92 93lib: $(WPDK) $(DPDKBUILD) $(VFIOUSERBUILD) $(XNVMEBUILD) $(ISALBUILD) 94module: lib 95shared_lib: module 96app: $(LIB) 97test: $(LIB) 98examples: $(LIB) 99pkgdep: 100 sh ./scripts/pkgdep.sh 101 102$(DIRS-y): mk/cc.mk build_dir include/spdk/config.h 103 104mk/cc.mk: 105 $(Q)echo "Please run configure prior to make" 106 false 107 108build_dir: mk/cc.mk 109 $(Q)mkdir -p build/lib/pkgconfig/tmp 110 $(Q)mkdir -p build/bin 111 $(Q)mkdir -p build/fio 112 $(Q)mkdir -p build/examples 113 $(Q)mkdir -p build/include/spdk 114 115include/spdk/config.h: mk/config.mk scripts/genconfig.py 116 $(Q)echo "#ifndef SPDK_CONFIG_H" > $@.tmp; \ 117 echo "#define SPDK_CONFIG_H" >> $@.tmp; \ 118 scripts/genconfig.py $(MAKEFLAGS) >> $@.tmp; \ 119 echo "#endif /* SPDK_CONFIG_H */" >> $@.tmp; \ 120 cmp -s $@.tmp $@ || mv $@.tmp $@ ; \ 121 rm -f $@.tmp 122 123cc_version: mk/cc.mk 124 $(Q)echo "SPDK using CC=$(CC)"; $(CC) -v 125 126cxx_version: mk/cc.mk 127 $(Q)echo "SPDK using CXX=$(CXX)"; $(CXX) -v 128 129.libs_only_other: 130 $(Q)echo -n '$(SYS_LIBS) ' 131 $(Q)if [ "$(CONFIG_SHARED)" = "y" ]; then \ 132 echo -n '-lspdk '; \ 133 fi 134 135.ldflags: 136 $(Q)echo -n '$(LDFLAGS) ' 137 138ldflags: .ldflags .libs_only_other 139 $(Q)echo '' 140 141include $(SPDK_ROOT_DIR)/mk/spdk.subdirs.mk 142