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