xref: /spdk/scripts/pkgdep.sh (revision c6c1234de9e0015e670dd0b51bf6ce39ee0e07bd)
1#!/usr/bin/env bash
2#  SPDX-License-Identifier: BSD-3-Clause
3#  Copyright (C) 2017 Intel Corporation
4#  All rights reserved.
5#  Copyright (c) 2022 Dell Inc, or its subsidiaries.
6#
7# Please run this script as root.
8
9set -e
10
11function usage() {
12	echo ""
13	echo "This script is intended to automate the installation of package dependencies to build SPDK."
14	echo "Please run this script as root user or with sudo -E."
15	echo ""
16	echo "$0"
17	echo "  -h --help"
18	echo "  -a --all"
19	echo "  -d --developer-tools        Install tools for developers (code styling, code coverage, etc.)"
20	echo "  -p --pmem                   Additional dependencies for reduce"
21	echo "  -R --rbd                    Additional dependencies for RBD"
22	echo "  -r --rdma                   Additional dependencies for RDMA transport in NVMe over Fabrics"
23	echo "  -b --docs                   Additional dependencies for building docs"
24	echo "  -u --uring                  Additional dependencies for io_uring"
25	echo "     --uadk                   Additional dependencies for UADK"
26	echo "  -D --daos                   Additional dependencies for DAOS"
27	echo "  -A --avahi                  Additional dependencies for Avahi mDNS Discovery"
28	echo "  -G --golang                 Additional dependencies for go API generation"
29	echo "  -I --idxd                   Additional dependencies for IDXD"
30	echo ""
31	exit 0
32}
33
34function install_all_dependencies() {
35	INSTALL_DEV_TOOLS=true
36	INSTALL_PMEM=true
37	INSTALL_RBD=true
38	INSTALL_RDMA=true
39	INSTALL_DOCS=true
40	INSTALL_LIBURING=true
41	INSTALL_DAOS=true
42	INSTALL_AVAHI=true
43	INSTALL_GOLANG=true
44	INSTALL_IDXD=true
45}
46
47INSTALL_CRYPTO=false
48INSTALL_DEV_TOOLS=false
49INSTALL_PMEM=false
50INSTALL_RBD=false
51INSTALL_RDMA=false
52INSTALL_DOCS=false
53INSTALL_LIBURING=false
54INSTALL_DAOS=false
55INSTALL_AVAHI=false
56INSTALL_GOLANG=false
57INSTALL_IDXD=false
58INSTALL_UADK=false
59
60while getopts 'abdfhipruADGIR-:' optchar; do
61	case "$optchar" in
62		-)
63			case "$OPTARG" in
64				help) usage ;;
65				all) install_all_dependencies ;;
66				developer-tools) INSTALL_DEV_TOOLS=true ;;
67				pmem) INSTALL_PMEM=true ;;
68				rbd) INSTALL_RBD=true ;;
69				rdma) INSTALL_RDMA=true ;;
70				docs) INSTALL_DOCS=true ;;
71				uring) INSTALL_LIBURING=true ;;
72				uadk) INSTALL_UADK=true ;;
73				daos) INSTALL_DAOS=true ;;
74				avahi) INSTALL_AVAHI=true ;;
75				golang) INSTALL_GOLANG=true ;;
76				idxd) INSTALL_IDXD=true ;;
77				*)
78					echo "Invalid argument '$OPTARG'"
79					usage
80					;;
81			esac
82			;;
83		h) usage ;;
84		a) install_all_dependencies ;;
85		d) INSTALL_DEV_TOOLS=true ;;
86		p) INSTALL_PMEM=true ;;
87		R) INSTALL_RBD=true ;;
88		r) INSTALL_RDMA=true ;;
89		b) INSTALL_DOCS=true ;;
90		u) INSTALL_LIBURING=true ;;
91		D) INSTALL_DAOS=true ;;
92		A) INSTALL_AVAHI=true ;;
93		G) INSTALL_GOLANG=true ;;
94		I) INSTALL_IDXD=true ;;
95		*)
96			echo "Invalid argument '$OPTARG'"
97			usage
98			;;
99	esac
100done
101
102trap 'set +e; trap - ERR; echo "Error!"; exit 1;' ERR
103
104scriptsdir=$(readlink -f $(dirname $0))
105rootdir=$(readlink -f $scriptsdir/..)
106source "$rootdir/scripts/common.sh"
107source "$scriptsdir/pkgdep/helpers.sh"
108
109OS=$(uname -s)
110
111if [[ -e /etc/os-release ]]; then
112	source /etc/os-release
113elif [[ $OS == FreeBSD ]]; then
114	ID=freebsd
115else
116	ID=unknown
117fi
118
119ID=${ID,,}
120
121#Link suse related OS to sles
122if [[ $ID == *"suse"* ]]; then
123	ID="sles"
124fi
125
126# Some distros don't provide these paths in their default $PATH setups, nor
127# sudo's secure_path, so add it here. These are needed since gem is most likely
128# to put target bins at these locations.
129export PATH=$PATH:/usr/local/bin:/usr/local/sbin
130
131for id in $ID $ID_LIKE; do
132	if [[ -e $scriptsdir/pkgdep/$id.sh ]]; then
133		source "$scriptsdir/pkgdep/$id.sh"
134		source "$scriptsdir/pkgdep/common.sh"
135		exit 0
136	fi
137done
138
139printf 'Not supported distribution detected (%s), aborting\n' "$ID" >&2
140exit 1
141