1# SPDX-License-Identifier: BSD-3-Clause 2# Copyright (C) 2023 Intel Corporation. 3# Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES 4# All rights reserved. 5# 6 7SPDK_ROOT_DIR := $(abspath $(CURDIR)/..) 8include $(SPDK_ROOT_DIR)/mk/spdk.common.mk 9 10setup_cmd = pip install --prefix=$(CONFIG_PREFIX) 11ifneq ($(DESTDIR),) 12setup_cmd += --root $(DESTDIR) 13endif 14 15pylibdir := $(abspath $(shell python3 -c "import sysconfig; print(sysconfig.get_paths()['purelib'])")) 16ifneq ($(CONFIG_PREFIX),) 17# Consider different scenarios where purelib can be located: 18# 19# - /usr/lib/python*/site-packages 20# - /usr/local/lib/python*/site-packages 21# - /foo/bar/lib/python*/site-packages 22# 23# The latter here can be a result of using interpreter from within a venv 24# located at custom location - see how we handle PEP668 under ubuntu in 25# pkgdep/ubuntu.sh for instance. 26# 27# So the common part here is: 28# *lib/python*/site-packages 29# 30# So we cut the path to get the prefix (whatever it may be) and then we nuke 31# it from the main path. So the corner case would look like so: 32# 33# pylibdir := /foo/bar/lib/python*/site-packages 34# pylibprefix := /foo/bar 35# pylibdir := $(CONFIG_PREFIX)/lib/python*/site-packages 36# 37# FIXME: I couldn't get patsubst to do the heavy lifting here, hence fallback 38# to shell. 39pylibprefix := $(shell a=$(pylibdir); echo $${a%/lib*}) 40pylibdir := $(CONFIG_PREFIX)$(pylibdir:$(pylibprefix)%=%) 41endif 42 43all: spdk/version.py 44 45clean: 46 $(Q)rm -f spdk/version.py 47 48spdk/version.py: $(SPDK_ROOT_DIR)/VERSION 49 $(Q)printf "__version__ = '%d.%d%s'\n" \ 50 $(version_major) $(version_minor) \ 51 $(shell echo -n \"$(version_suffix)\" | sed 's/-pre/rc0/g' | tr -d -) > spdk/version.py 52 53install: rpc spdkcli 54 $(Q)$(setup_cmd) $(SPDK_ROOT_DIR)/python 55 rm -rf $(SPDK_ROOT_DIR)/python/spdk.egg-info 56 57$(SPDK_ROOT_DIR)/build/bin/spdk_rpc: 58 cp $(SPDK_ROOT_DIR)/scripts/rpc.py $(SPDK_ROOT_DIR)/build/bin/spdk_rpc 59 chmod +x $(SPDK_ROOT_DIR)/build/bin/spdk_rpc 60 61$(SPDK_ROOT_DIR)/build/bin/spdk_cli: 62 cp $(SPDK_ROOT_DIR)/scripts/spdkcli.py $(SPDK_ROOT_DIR)/build/bin/spdk_cli 63 chmod +x $(SPDK_ROOT_DIR)/build/bin/spdk_cli 64 65rpc: $(SPDK_ROOT_DIR)/build/bin/spdk_rpc 66 $(INSTALL_APP) 67 68spdkcli: $(SPDK_ROOT_DIR)/build/bin/spdk_cli 69 $(INSTALL_APP) 70 71uninstall: 72 $(Q)rm -rf $(DESTDIR)/$(pylibdir)/spdk* 73 $(Q)rm -f $(DESTDIR)/$(bindir)/spdk_rpc 74 $(Q)rm -f $(DESTDIR)/$(bindir)/spdk_cli 75 76.PHONY: all clean install uninstall 77