xref: /spdk/python/Makefile (revision 66289a6dbe28217365daa40fd92dcf327871c2e8)
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