xref: /spdk/scripts/pkgdep.sh (revision a4009e7ad3d0aa0cfda4ce321e22161cbd1a26dc)
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 "  -f --fuse                   Additional dependencies for FUSE and NVMe-CUSE"
22	echo "  -R --rbd                    Additional dependencies for RBD"
23	echo "  -r --rdma                   Additional dependencies for RDMA transport in NVMe over Fabrics"
24	echo "  -b --docs                   Additional dependencies for building docs"
25	echo "  -u --uring                  Additional dependencies for io_uring"
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 (excluded from --all)"
29	echo ""
30	exit 0
31}
32
33function install_all_dependencies() {
34	INSTALL_DEV_TOOLS=true
35	INSTALL_PMEM=true
36	INSTALL_FUSE=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}
44
45INSTALL_CRYPTO=false
46INSTALL_DEV_TOOLS=false
47INSTALL_PMEM=false
48INSTALL_FUSE=false
49INSTALL_RBD=false
50INSTALL_RDMA=false
51INSTALL_DOCS=false
52INSTALL_LIBURING=false
53INSTALL_DAOS=false
54INSTALL_AVAHI=false
55INSTALL_GOLANG=false
56
57while getopts 'abdfhipruADGR-:' optchar; do
58	case "$optchar" in
59		-)
60			case "$OPTARG" in
61				help) usage ;;
62				all) install_all_dependencies ;;
63				developer-tools) INSTALL_DEV_TOOLS=true ;;
64				pmem) INSTALL_PMEM=true ;;
65				fuse) INSTALL_FUSE=true ;;
66				rbd) INSTALL_RBD=true ;;
67				rdma) INSTALL_RDMA=true ;;
68				docs) INSTALL_DOCS=true ;;
69				uring) INSTALL_LIBURING=true ;;
70				daos) INSTALL_DAOS=true ;;
71				avahi) INSTALL_AVAHI=true ;;
72				golang) INSTALL_GOLANG=true ;;
73				*)
74					echo "Invalid argument '$OPTARG'"
75					usage
76					;;
77			esac
78			;;
79		h) usage ;;
80		a) install_all_dependencies ;;
81		d) INSTALL_DEV_TOOLS=true ;;
82		p) INSTALL_PMEM=true ;;
83		f) INSTALL_FUSE=true ;;
84		R) INSTALL_RBD=true ;;
85		r) INSTALL_RDMA=true ;;
86		b) INSTALL_DOCS=true ;;
87		u) INSTALL_LIBURING=true ;;
88		D) INSTALL_DAOS=true ;;
89		A) INSTALL_AVAHI=true ;;
90		G) INSTALL_GOLANG=true ;;
91		*)
92			echo "Invalid argument '$OPTARG'"
93			usage
94			;;
95	esac
96done
97
98trap 'set +e; trap - ERR; echo "Error!"; exit 1;' ERR
99
100scriptsdir=$(readlink -f $(dirname $0))
101rootdir=$(readlink -f $scriptsdir/..)
102source "$rootdir/scripts/common.sh"
103
104OS=$(uname -s)
105
106if [[ -e /etc/os-release ]]; then
107	source /etc/os-release
108elif [[ $OS == FreeBSD ]]; then
109	ID=freebsd
110else
111	ID=unknown
112fi
113
114ID=${ID,,}
115
116#Link suse related OS to sles
117if [[ $ID == *"suse"* ]]; then
118	ID="sles"
119fi
120
121# Some distros don't provide these paths in their default $PATH setups, nor
122# sudo's secure_path, so add it here. These are needed since gem is most likely
123# to put target bins at these locations.
124export PATH=$PATH:/usr/local/bin:/usr/local/sbin
125
126for id in $ID $ID_LIKE; do
127	if [[ -e $scriptsdir/pkgdep/$id.sh ]]; then
128		source "$scriptsdir/pkgdep/$id.sh"
129		source "$scriptsdir/pkgdep/common.sh"
130		exit 0
131	fi
132done
133
134printf 'Not supported distribution detected (%s), aborting\n' "$ID" >&2
135exit 1
136