xref: /spdk/scripts/pkgdep.sh (revision 6fac5aab5832d709761d179d82103f29c33031ed)
159caaa97SVitaliy Mysak#!/usr/bin/env bash
2eb53c232Spaul luse#  SPDX-License-Identifier: BSD-3-Clause
3eb53c232Spaul luse#  Copyright (C) 2017 Intel Corporation
4eb53c232Spaul luse#  All rights reserved.
534bc24f1SJim Harris#  Copyright (c) 2022 Dell Inc, or its subsidiaries.
6eb53c232Spaul luse#
793533c20SHailiang Wang# Please run this script as root.
893533c20SHailiang Wang
993fb58f2SPawel Wodkowskiset -e
109ba446a2SEd rodriguez
11844c8ec3SMichal Bergerfunction usage() {
129ba446a2SEd rodriguez	echo ""
139ba446a2SEd rodriguez	echo "This script is intended to automate the installation of package dependencies to build SPDK."
14a805c7deSKarol Latecki	echo "Please run this script as root user or with sudo -E."
159ba446a2SEd rodriguez	echo ""
169ba446a2SEd rodriguez	echo "$0"
179ba446a2SEd rodriguez	echo "  -h --help"
189ebbf3acSMaciej Wawryk	echo "  -a --all"
199ebbf3acSMaciej Wawryk	echo "  -d --developer-tools        Install tools for developers (code styling, code coverage, etc.)"
20b42295dbSMarcin Spiewak	echo "  -p --pmem                   Additional dependencies for reduce"
218a5d487dSMykola Golub	echo "  -R --rbd                    Additional dependencies for RBD"
22fe5954c6SMaciej Wawryk	echo "  -r --rdma                   Additional dependencies for RDMA transport in NVMe over Fabrics"
23e5a5eaa6SMaciej Wawryk	echo "  -b --docs                   Additional dependencies for building docs"
2473039182SMaciej Wawryk	echo "  -u --uring                  Additional dependencies for io_uring"
2513603217SZhangfei Gao	echo "     --uadk                   Additional dependencies for UADK"
26777afdf8SKarol Latecki	echo "  -D --daos                   Additional dependencies for DAOS"
2734bc24f1SJim Harris	echo "  -A --avahi                  Additional dependencies for Avahi mDNS Discovery"
288d5980a8SKarol Latecki	echo "  -G --golang                 Additional dependencies for go API generation"
2944dcf4fbSTomasz Zawadzki	echo "  -I --idxd                   Additional dependencies for IDXD"
30*6fac5aabSYankun Li	echo "  -l --lz4                    Additional dependencies for lz4"
319ba446a2SEd rodriguez	echo ""
329ba446a2SEd rodriguez	exit 0
339ba446a2SEd rodriguez}
349ba446a2SEd rodriguez
35844c8ec3SMichal Bergerfunction install_all_dependencies() {
369ebbf3acSMaciej Wawryk	INSTALL_DEV_TOOLS=true
37f035937dSMaciej Wawryk	INSTALL_PMEM=true
388a5d487dSMykola Golub	INSTALL_RBD=true
39fe5954c6SMaciej Wawryk	INSTALL_RDMA=true
40e5a5eaa6SMaciej Wawryk	INSTALL_DOCS=true
41817d077aSMaciej Wawryk	INSTALL_LIBURING=true
42777afdf8SKarol Latecki	INSTALL_DAOS=true
4334bc24f1SJim Harris	INSTALL_AVAHI=true
448d5980a8SKarol Latecki	INSTALL_GOLANG=true
4544dcf4fbSTomasz Zawadzki	INSTALL_IDXD=true
46*6fac5aabSYankun Li	INSTALL_LZ4=true
479ebbf3acSMaciej Wawryk}
489ba446a2SEd rodriguez
499ebbf3acSMaciej WawrykINSTALL_CRYPTO=false
509ebbf3acSMaciej WawrykINSTALL_DEV_TOOLS=false
51f035937dSMaciej WawrykINSTALL_PMEM=false
528a5d487dSMykola GolubINSTALL_RBD=false
53fe5954c6SMaciej WawrykINSTALL_RDMA=false
54e5a5eaa6SMaciej WawrykINSTALL_DOCS=false
5573039182SMaciej WawrykINSTALL_LIBURING=false
56777afdf8SKarol LateckiINSTALL_DAOS=false
5734bc24f1SJim HarrisINSTALL_AVAHI=false
58c2349da2SAntti KervinenINSTALL_GOLANG=false
5944dcf4fbSTomasz ZawadzkiINSTALL_IDXD=false
6013603217SZhangfei GaoINSTALL_UADK=false
61*6fac5aabSYankun LiINSTALL_LZ4=false
629ebbf3acSMaciej Wawryk
63*6fac5aabSYankun Liwhile getopts 'abdfhilpruADGIR-:' optchar; do
649ba446a2SEd rodriguez	case "$optchar" in
659ba446a2SEd rodriguez		-)
669ba446a2SEd rodriguez			case "$OPTARG" in
679ba446a2SEd rodriguez				help) usage ;;
689ebbf3acSMaciej Wawryk				all) install_all_dependencies ;;
699ebbf3acSMaciej Wawryk				developer-tools) INSTALL_DEV_TOOLS=true ;;
70f035937dSMaciej Wawryk				pmem) INSTALL_PMEM=true ;;
718a5d487dSMykola Golub				rbd) INSTALL_RBD=true ;;
72fe5954c6SMaciej Wawryk				rdma) INSTALL_RDMA=true ;;
73e5a5eaa6SMaciej Wawryk				docs) INSTALL_DOCS=true ;;
7473039182SMaciej Wawryk				uring) INSTALL_LIBURING=true ;;
7513603217SZhangfei Gao				uadk) INSTALL_UADK=true ;;
76777afdf8SKarol Latecki				daos) INSTALL_DAOS=true ;;
7734bc24f1SJim Harris				avahi) INSTALL_AVAHI=true ;;
78c2349da2SAntti Kervinen				golang) INSTALL_GOLANG=true ;;
7944dcf4fbSTomasz Zawadzki				idxd) INSTALL_IDXD=true ;;
80*6fac5aabSYankun Li				lz4) INSTALL_LZ4=true ;;
81844c8ec3SMichal Berger				*)
82844c8ec3SMichal Berger					echo "Invalid argument '$OPTARG'"
83844c8ec3SMichal Berger					usage
84844c8ec3SMichal Berger					;;
859ba446a2SEd rodriguez			esac
869ba446a2SEd rodriguez			;;
879ba446a2SEd rodriguez		h) usage ;;
889ebbf3acSMaciej Wawryk		a) install_all_dependencies ;;
899ebbf3acSMaciej Wawryk		d) INSTALL_DEV_TOOLS=true ;;
90f035937dSMaciej Wawryk		p) INSTALL_PMEM=true ;;
918a5d487dSMykola Golub		R) INSTALL_RBD=true ;;
92fe5954c6SMaciej Wawryk		r) INSTALL_RDMA=true ;;
93e5a5eaa6SMaciej Wawryk		b) INSTALL_DOCS=true ;;
9473039182SMaciej Wawryk		u) INSTALL_LIBURING=true ;;
95777afdf8SKarol Latecki		D) INSTALL_DAOS=true ;;
9634bc24f1SJim Harris		A) INSTALL_AVAHI=true ;;
97c2349da2SAntti Kervinen		G) INSTALL_GOLANG=true ;;
9844dcf4fbSTomasz Zawadzki		I) INSTALL_IDXD=true ;;
99*6fac5aabSYankun Li		l) INSTALL_LZ4=true ;;
100844c8ec3SMichal Berger		*)
101844c8ec3SMichal Berger			echo "Invalid argument '$OPTARG'"
102844c8ec3SMichal Berger			usage
103844c8ec3SMichal Berger			;;
1049ba446a2SEd rodriguez	esac
1059ba446a2SEd rodriguezdone
1069ba446a2SEd rodriguez
10793fb58f2SPawel Wodkowskitrap 'set +e; trap - ERR; echo "Error!"; exit 1;' ERR
10893533c20SHailiang Wang
1090fb1e1c5SPaul Lusescriptsdir=$(readlink -f $(dirname $0))
1100fb1e1c5SPaul Luserootdir=$(readlink -f $scriptsdir/..)
111deea9d10SMichal Bergersource "$rootdir/scripts/common.sh"
112bfb76280SMichal Bergersource "$scriptsdir/pkgdep/helpers.sh"
1130fb1e1c5SPaul Luse
114f385076aSMichal BergerOS=$(uname -s)
115f385076aSMichal Berger
116f385076aSMichal Bergerif [[ -e /etc/os-release ]]; then
117f385076aSMichal Berger	source /etc/os-release
1180b6a29d4SMichal Bergerelif [[ $OS == FreeBSD ]]; then
1190b6a29d4SMichal Berger	ID=freebsd
1200b6a29d4SMichal Bergerelse
1210b6a29d4SMichal Berger	ID=unknown
1229ebbf3acSMaciej Wawrykfi
1239ebbf3acSMaciej Wawryk
1240b6a29d4SMichal BergerID=${ID,,}
1259ebbf3acSMaciej Wawryk
1260b09b651Syidong0635#Link suse related OS to sles
1270b6a29d4SMichal Bergerif [[ $ID == *"suse"* ]]; then
1280b09b651Syidong0635	ID="sles"
1290b09b651Syidong0635fi
1300b09b651Syidong0635
1313a0fa0fbSMichal Berger# Some distros don't provide these paths in their default $PATH setups, nor
1323a0fa0fbSMichal Berger# sudo's secure_path, so add it here. These are needed since gem is most likely
1333a0fa0fbSMichal Berger# to put target bins at these locations.
1343a0fa0fbSMichal Bergerexport PATH=$PATH:/usr/local/bin:/usr/local/sbin
1353a0fa0fbSMichal Berger
136f0b05dd3SJohn Levonfor id in $ID $ID_LIKE; do
137f0b05dd3SJohn Levon	if [[ -e $scriptsdir/pkgdep/$id.sh ]]; then
138f0b05dd3SJohn Levon		source "$scriptsdir/pkgdep/$id.sh"
13920708f35SMichal Berger		source "$scriptsdir/pkgdep/common.sh"
140f0b05dd3SJohn Levon		exit 0
14193533c20SHailiang Wang	fi
142f0b05dd3SJohn Levondone
143f0b05dd3SJohn Levon
1440b6a29d4SMichal Bergerprintf 'Not supported distribution detected (%s), aborting\n' "$ID" >&2
145f0b05dd3SJohn Levonexit 1
146