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-y += python 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) 62LIB += isalbuild 63DPDK_DEPS += isalbuild 64endif 65 66ifeq ($(CONFIG_VFIO_USER),y) 67VFIOUSERBUILD = vfiouserbuild 68LIB += vfiouserbuild 69endif 70 71ifeq ($(CONFIG_XNVME),y) 72XNVMEBUILD = xnvmebuild 73LIB += xnvmebuild 74endif 75 76all: mk/cc.mk $(DIRS-y) 77clean: $(DIRS-y) 78 $(Q)rm -f include/spdk/config.h 79 $(Q)rm -rf build 80 81install: all 82 $(Q)echo "Installed to $(DESTDIR)$(CONFIG_PREFIX)" 83 84uninstall: $(DIRS-y) 85 $(Q)echo "Uninstalled spdk" 86 87ifneq ($(SKIP_DPDK_BUILD),1) 88dpdkdeps $(DPDK_DEPS): $(WPDK) 89dpdkbuild: $(WPDK) $(DPDK_DEPS) 90endif 91 92lib: $(WPDK) $(DPDKBUILD) $(VFIOUSERBUILD) $(XNVMEBUILD) 93module: lib 94shared_lib: module 95app: $(LIB) 96test: $(LIB) 97examples: $(LIB) 98pkgdep: 99 sh ./scripts/pkgdep.sh 100 101$(DIRS-y): mk/cc.mk build_dir include/spdk/config.h 102 103mk/cc.mk: 104 $(Q)echo "Please run configure prior to make" 105 false 106 107build_dir: mk/cc.mk 108 $(Q)mkdir -p build/lib/pkgconfig/tmp 109 $(Q)mkdir -p build/bin 110 $(Q)mkdir -p build/fio 111 $(Q)mkdir -p build/examples 112 $(Q)mkdir -p build/include/spdk 113 114include/spdk/config.h: mk/config.mk scripts/genconfig.py 115 $(Q)echo "#ifndef SPDK_CONFIG_H" > $@.tmp; \ 116 echo "#define SPDK_CONFIG_H" >> $@.tmp; \ 117 scripts/genconfig.py $(MAKEFLAGS) >> $@.tmp; \ 118 echo "#endif /* SPDK_CONFIG_H */" >> $@.tmp; \ 119 cmp -s $@.tmp $@ || mv $@.tmp $@ ; \ 120 rm -f $@.tmp 121 122cc_version: mk/cc.mk 123 $(Q)echo "SPDK using CC=$(CC)"; $(CC) -v 124 125cxx_version: mk/cc.mk 126 $(Q)echo "SPDK using CXX=$(CXX)"; $(CXX) -v 127 128.libs_only_other: 129 $(Q)echo -n '$(SYS_LIBS) ' 130 $(Q)if [ "$(CONFIG_SHARED)" = "y" ]; then \ 131 echo -n '-lspdk '; \ 132 fi 133 134.ldflags: 135 $(Q)echo -n '$(LDFLAGS) ' 136 137ldflags: .ldflags .libs_only_other 138 $(Q)echo '' 139 140include $(SPDK_ROOT_DIR)/mk/spdk.subdirs.mk 141