118bc2f70SMichal Bergerfunction install_qat() { 27493be13SKarol Latecki if ! hash yasm; then 37493be13SKarol Latecki install yasm 47493be13SKarol Latecki fi 57493be13SKarol Latecki 64d8ce959SMichal Berger install libnl3 libnl3-devel || install libnl-3-200 libnl-3-dev libnl-genl-3-dev 715d11190SMichal Berger 80146f2eeSMichal Berger in_syms() { 90146f2eeSMichal Berger local syms 100146f2eeSMichal Berger if [[ -e /proc/kallsyms ]]; then 110146f2eeSMichal Berger syms=/proc/kallsyms 12f4e0fc09SMichal Berger elif [[ -e /boot/System.map-$kernel_ver ]]; then 13f4e0fc09SMichal Berger syms=/boot/System.map-$kernel_ver 140146f2eeSMichal Berger else 150146f2eeSMichal Berger return 0 160146f2eeSMichal Berger fi 170146f2eeSMichal Berger 180146f2eeSMichal Berger grep -q "$1" "$syms" 190146f2eeSMichal Berger } 200146f2eeSMichal Berger 210bec3c3cSMichal Berger if [[ -e /sys/module/qat_c62x ]]; then 220bec3c3cSMichal Berger sudo modprobe -r qat_c62x || : 230bec3c3cSMichal Berger fi 2470dfde6fSMichal Berger if [[ -d $GIT_REPOS/QAT ]]; then 2570dfde6fSMichal Berger sudo rm -rf "$GIT_REPOS/QAT" 2618bc2f70SMichal Berger fi 2718bc2f70SMichal Berger 2835599b77SMaciej Wawryk mkdir "$GIT_REPOS/QAT" 2918bc2f70SMichal Berger 3070dfde6fSMichal Berger tar -C "$GIT_REPOS/QAT" -xzof - < <(wget -O- "$DRIVER_LOCATION_QAT") 3118bc2f70SMichal Berger 321073b6b1SMichal Berger patch --dir="$GIT_REPOS/QAT" -p1 \ 331073b6b1SMichal Berger < "$rootdir/test/common/config/pkgdep/patches/qat/0001-old-style-declaration.patch" 341073b6b1SMichal Berger patch --dir="$GIT_REPOS/QAT" -p1 \ 351073b6b1SMichal Berger < "$rootdir/test/common/config/pkgdep/patches/qat/0001-empty-body.patch" 361073b6b1SMichal Berger 37daa9779cSMichal Berger (cd "$GIT_REPOS/QAT" && sudo ./configure --enable-icp-sriov=host && sudo make install) 3818bc2f70SMichal Berger 39a44d0614SMichal Berger if ! sudo service qat_service start; then 4018bc2f70SMichal Berger echo "failed to start the qat service. Something may be wrong with your device or package." 4118bc2f70SMichal Berger fi 4218bc2f70SMichal Berger} 4318bc2f70SMichal Berger 4418bc2f70SMichal Bergerfunction install_rocksdb() { 4518bc2f70SMichal Berger # Rocksdb is installed for use with the blobfs tests. 4618bc2f70SMichal Berger if [ ! -d /usr/src/rocksdb ]; then 4770dfde6fSMichal Berger git clone "${GIT_REPO_ROCKSDB}" "$GIT_REPOS/rocksdb" 48fa678934SMaciej Szwed git -C "$GIT_REPOS/rocksdb" checkout 6.15.fb 4970dfde6fSMichal Berger sudo mv "$GIT_REPOS/rocksdb" /usr/src/ 5018bc2f70SMichal Berger else 510306fa3aSTomasz Zawadzki sudo git -C /usr/src/rocksdb checkout spdk-v8.1.1 5218bc2f70SMichal Berger echo "rocksdb already in /usr/src. Not checking out again" 5318bc2f70SMichal Berger fi 5418bc2f70SMichal Berger} 5518bc2f70SMichal Berger 569aff18edSMichal Bergerfunction install_ittapi() { 579aff18edSMichal Berger # Install Intel Instrumentation and Trace API 589aff18edSMichal Berger local ittapi_version=v3.24.5 ittapi_dir=/usr/src/ittapi 599aff18edSMichal Berger 609aff18edSMichal Berger rm -rf "$ittapi_dir" 619aff18edSMichal Berger git clone "${GIT_REPO_ITTAPI}" --branch "$ittapi_version" "$GIT_REPOS/ittapi" 629aff18edSMichal Berger make -C "$GIT_REPOS/ittapi/src/ittnotify_refcol" 639aff18edSMichal Berger 649aff18edSMichal Berger mv "$GIT_REPOS/ittapi" "$ittapi_dir" 659aff18edSMichal Berger ln -s . "$ittapi_dir/sdk" 669aff18edSMichal Berger} 679aff18edSMichal Berger 6818bc2f70SMichal Bergerfunction install_fio() { 6918bc2f70SMichal Berger # This version of fio is installed in /usr/src/fio to enable 7018bc2f70SMichal Berger # building the spdk fio plugin. 71b40f4d93SMichal Berger local fio_version="fio-3.35" 7218bc2f70SMichal Berger 7318bc2f70SMichal Berger if [ ! -d /usr/src/fio ]; then 7418bc2f70SMichal Berger if [ ! -d fio ]; then 7570dfde6fSMichal Berger git clone "${GIT_REPO_FIO}" "$GIT_REPOS/fio" 7670dfde6fSMichal Berger sudo mv "$GIT_REPOS/fio" /usr/src/ 7718bc2f70SMichal Berger else 7870dfde6fSMichal Berger sudo mv "$GIT_REPOS/fio" /usr/src/ 7918bc2f70SMichal Berger fi 8018bc2f70SMichal Berger ( 8118bc2f70SMichal Berger git -C /usr/src/fio checkout master \ 8218bc2f70SMichal Berger && git -C /usr/src/fio pull \ 8318bc2f70SMichal Berger && git -C /usr/src/fio checkout $fio_version \ 8418bc2f70SMichal Berger && if [ $OSID == 'freebsd' ]; then 8518bc2f70SMichal Berger gmake -C /usr/src/fio -j${jobs} \ 8618bc2f70SMichal Berger && sudo gmake -C /usr/src/fio install 8718bc2f70SMichal Berger else 8818bc2f70SMichal Berger make -C /usr/src/fio -j${jobs} \ 8918bc2f70SMichal Berger && sudo make -C /usr/src/fio install 9018bc2f70SMichal Berger fi 9118bc2f70SMichal Berger ) 9218bc2f70SMichal Berger else 9318bc2f70SMichal Berger echo "fio already in /usr/src/fio. Not installing" 9418bc2f70SMichal Berger fi 9518bc2f70SMichal Berger} 9618bc2f70SMichal Berger 9718bc2f70SMichal Bergerfunction install_flamegraph() { 9818bc2f70SMichal Berger # Flamegraph is used when printing out timing graphs for the tests. 9918bc2f70SMichal Berger if [ ! -d /usr/local/FlameGraph ]; then 10070dfde6fSMichal Berger git clone "${GIT_REPO_FLAMEGRAPH}" "$GIT_REPOS/FlameGraph" 10118bc2f70SMichal Berger mkdir -p /usr/local 10270dfde6fSMichal Berger sudo mv "$GIT_REPOS/FlameGraph" /usr/local/FlameGraph 10318bc2f70SMichal Berger else 10418bc2f70SMichal Berger echo "flamegraph already installed. Skipping" 10518bc2f70SMichal Berger fi 10618bc2f70SMichal Berger} 10718bc2f70SMichal Berger 108253c1785SKarol Lateckifunction _install_qemu() { 109253c1785SKarol Latecki local repo=$1 110253c1785SKarol Latecki local branch=$2 1113124e715SMichal Berger local prefix=${3:-} 11242f99be2SMichal Berger local name=${4:-} 11318bc2f70SMichal Berger 11470dfde6fSMichal Berger mkdir -p "$GIT_REPOS/qemu" 1153124e715SMichal Berger 1163124e715SMichal Berger local repo_dir=$GIT_REPOS/qemu/$branch 1173124e715SMichal Berger if [[ -n $prefix ]]; then 1183124e715SMichal Berger repo_dir=$GIT_REPOS/qemu/$prefix-$branch 1193124e715SMichal Berger fi 1203124e715SMichal Berger 1213124e715SMichal Berger if [[ ! -d $repo_dir ]]; then 1223124e715SMichal Berger git clone "$repo" -b "$branch" "$repo_dir" 12318bc2f70SMichal Berger else 12418bc2f70SMichal Berger echo "qemu already checked out. Skipping" 12518bc2f70SMichal Berger fi 12618bc2f70SMichal Berger 1273124e715SMichal Berger declare -a opt_params=("--prefix=/usr/local/qemu/${repo_dir##*/}") 128ed3cd2b9SMichal Berger declare -a extra_cflags=() 129ed3cd2b9SMichal Berger 130ed3cd2b9SMichal Berger opt_params+=("--disable-docs") 13118bc2f70SMichal Berger if ((gcc_version >= 9)); then 13218bc2f70SMichal Berger opt_params+=("--disable-glusterfs") 13318bc2f70SMichal Berger fi 13418bc2f70SMichal Berger 135ea98ada0SKamil Godzwon extra_cflags+=("-Wno-error") 136aa303d87SMichal Berger 13718bc2f70SMichal Berger # Most tsocks proxies rely on a configuration file in /etc/tsocks.conf. 13818bc2f70SMichal Berger # If using tsocks, please make sure to complete this config before trying to build qemu. 1394892b935SMichal Berger if [[ $INSTALL_TSOCKS == true && $NO_TSOCKS != true ]]; then 14018bc2f70SMichal Berger if hash tsocks 2> /dev/null; then 14118bc2f70SMichal Berger opt_params+=("--with-git='tsocks git'") 14218bc2f70SMichal Berger fi 14318bc2f70SMichal Berger fi 144ed3cd2b9SMichal Berger opt_params+=("--extra-cflags=${extra_cflags[*]}") 14518bc2f70SMichal Berger 146eb4b7991SMichal Berger if [[ $prefix == vanilla ]]; then 147eb4b7991SMichal Berger # Latest qemu seems to take sysconfdir from the prefix and instead of checking /etc 148eb4b7991SMichal Berger # it looks under /usr/local/qemu/vanilla*/bin/../etc which is a bit peculiar. Fix it. 149eb4b7991SMichal Berger opt_params+=("--sysconfdir=/etc/") 150eb4b7991SMichal Berger fi 151eb4b7991SMichal Berger 15218bc2f70SMichal Berger # The qemu configure script places several output files in the CWD. 1533124e715SMichal Berger (cd "$repo_dir" && ./configure "${opt_params[@]}" --target-list="x86_64-softmmu" --enable-kvm --enable-linux-aio --enable-numa) 15418bc2f70SMichal Berger 1553124e715SMichal Berger make -C "$repo_dir" -j${jobs} 1563124e715SMichal Berger sudo make -C "$repo_dir" install 15742f99be2SMichal Berger 15842f99be2SMichal Berger # Add a symlink to point at a latest build - this is useful to easily track QEMU flavors for which 15942f99be2SMichal Berger # branches change quite often (e.g. vfio-user's). 16042f99be2SMichal Berger [[ -n $name ]] || return 0 16142f99be2SMichal Berger [[ -L /usr/local/qemu/$name-latest ]] && sudo rm "/usr/local/qemu/$name-latest" 16242f99be2SMichal Berger sudo ln -s "/usr/local/qemu/${repo_dir##*/}" "/usr/local/qemu/$name-latest" 163253c1785SKarol Latecki} 164253c1785SKarol Latecki 165253c1785SKarol Lateckifunction install_qemu() { 16618ee5d7bSMichal Berger # Four versions of QEMU are used in the tests, three are installed 16718ee5d7bSMichal Berger # directly from the source. Each QEMU is dedicated for different 16818ee5d7bSMichal Berger # use-cases: 16918ee5d7bSMichal Berger # - Packed QEMU: version provided by given distro. Used to boot VMs 17018ee5d7bSMichal Berger # from within vhost tests. 17118ee5d7bSMichal Berger # - vfio-user QEMU: A special fork to test libvfio-user components. 172ca256d3bSMichal Berger # - Vanilla QEMU: Used by the CI to boot the testing VMs. 173253c1785SKarol Latecki 17442f99be2SMichal Berger _install_qemu $GIT_REPO_QEMU_VFIO $VFIO_QEMU_BRANCH "" vfio-user 17542f99be2SMichal Berger _install_qemu "$GIT_REPO_QEMU" "$VANILLA_QEMU_BRANCH" vanilla vanilla 17618bc2f70SMichal Berger} 17718bc2f70SMichal Berger 17818bc2f70SMichal Bergerfunction install_nvmecli() { 179ba7fd26cSKarol Latecki # nvme-cli >1.11.1 should be used. 1803a52bbbeSMichal Berger rm -rf "$GIT_REPOS/nvme-cli-cuse" 18170dfde6fSMichal Berger git clone "https://github.com/linux-nvme/nvme-cli.git" "$GIT_REPOS/nvme-cli-cuse" 182d6b4caf5SMichal Berger git -C "$GIT_REPOS/nvme-cli-cuse" checkout v2.5 1838f4be72eSKarol Latecki 184d6b4caf5SMichal Berger meson setup --force-fallback-for=libnvme \ 185d6b4caf5SMichal Berger "$GIT_REPOS/nvme-cli-cuse/.build" \ 186d6b4caf5SMichal Berger "$GIT_REPOS/nvme-cli-cuse" 187d6b4caf5SMichal Berger meson compile -C "$GIT_REPOS/nvme-cli-cuse/.build" 1888f4be72eSKarol Latecki 1893a52bbbeSMichal Berger rm -rf /usr/local/src/nvme-cli 1903a52bbbeSMichal Berger mv "$GIT_REPOS/nvme-cli-cuse" /usr/local/src/nvme-cli 1913a52bbbeSMichal Berger 192261384feSMichal Berger # Make sure binary is available for the cuse tests 193261384feSMichal Berger if [[ -e /usr/local/src/nvme-cli/.build/nvme ]]; then 194261384feSMichal Berger sudo ln -s .build/nvme /usr/local/src/nvme-cli/ 195261384feSMichal Berger fi 19618bc2f70SMichal Berger} 19718bc2f70SMichal Berger 198c2fdd754SSebastian Brzezinka# This function install version of nvme-cli, that support listing spdk nvme 199c2fdd754SSebastian Brzezinka# devices, should be remove after changes present in nvme-cli upstream. 200c2fdd754SSebastian Brzezinkafunction install_nvmecli_plugin() { 201c2fdd754SSebastian Brzezinka rm -rf "$GIT_REPOS/nvme-cli-plugin" 202c2fdd754SSebastian Brzezinka 203c2fdd754SSebastian Brzezinka git clone $GIT_REPO_NVME_CLI "$GIT_REPOS/nvme-cli-plugin" 204c2fdd754SSebastian Brzezinka git -C "$GIT_REPOS/nvme-cli-plugin" fetch $GIT_REPO_NVME_CLI refs/changes/95/16795/12 205c2fdd754SSebastian Brzezinka git -C "$GIT_REPOS/nvme-cli-plugin" checkout FETCH_HEAD 206c2fdd754SSebastian Brzezinka 207b1d3b8c0SMichal Berger meson setup --force-fallback-for=libnvme,json-c \ 208c2fdd754SSebastian Brzezinka "$GIT_REPOS/nvme-cli-plugin/.build" \ 209c2fdd754SSebastian Brzezinka "$GIT_REPOS/nvme-cli-plugin" 210c2fdd754SSebastian Brzezinka meson compile -C "$GIT_REPOS/nvme-cli-plugin/.build" 211c2fdd754SSebastian Brzezinka 212c2fdd754SSebastian Brzezinka rm -rf /usr/local/src/nvme-cli-plugin 213c2fdd754SSebastian Brzezinka mv "$GIT_REPOS/nvme-cli-plugin" /usr/local/src/nvme-cli-plugin 214c2fdd754SSebastian Brzezinka 215c2fdd754SSebastian Brzezinka # Make sure binary is available for the plugin tests 216c2fdd754SSebastian Brzezinka if [[ -e /usr/local/src/nvme-cli-plugin/.build/nvme ]]; then 217c2fdd754SSebastian Brzezinka sudo ln -s .build/nvme /usr/local/src/nvme-cli-plugin/ 218c2fdd754SSebastian Brzezinka fi 219c2fdd754SSebastian Brzezinka} 220c2fdd754SSebastian Brzezinka 22118bc2f70SMichal Bergerfunction install_libiscsi() { 22218bc2f70SMichal Berger # We currently don't make any changes to the libiscsi repository for our tests, but it is possible that we will need 22318bc2f70SMichal Berger # to later. Cloning from git is just future proofing the machines. 22470dfde6fSMichal Berger if [[ ! -d $GIT_REPOS/libiscsi ]]; then 22570dfde6fSMichal Berger git clone "${GIT_REPO_LIBISCSI}" "$GIT_REPOS/libiscsi" 22618bc2f70SMichal Berger else 22718bc2f70SMichal Berger echo "libiscsi already checked out. Skipping" 22818bc2f70SMichal Berger fi 22970dfde6fSMichal Berger (cd "$GIT_REPOS/libiscsi" && ./autogen.sh && ./configure --prefix=/usr/local/libiscsi) 2304301477cSMichal Berger make -C "$GIT_REPOS/libiscsi" -j${jobs} WARN_CFLAGS= 23170dfde6fSMichal Berger sudo make -C "$GIT_REPOS/libiscsi" install 23218bc2f70SMichal Berger} 23318bc2f70SMichal Berger 23418bc2f70SMichal Bergerfunction install_git() { 235f62834a6SMichal Berger if type -P git; then 236dec533bfSMichal Berger if ge "$(git --version | awk '{print $3}')" "$GIT_VERSION"; then 237f62834a6SMichal Berger return 0 238dec533bfSMichal Berger fi 239f62834a6SMichal Berger fi >/dev/null 240f62834a6SMichal Berger 24118bc2f70SMichal Berger install zlib-devel curl-devel 24270dfde6fSMichal Berger tar -C "$GIT_REPOS" -xzof <(wget -qO- "$GIT_REPO_GIT") 24370dfde6fSMichal Berger (cd "$GIT_REPOS/git-$GIT_VERSION" \ 24418bc2f70SMichal Berger && make configure \ 245ea91da8dSMichal Berger && ./configure \ 24618bc2f70SMichal Berger && sudo make -j${jobs} install) 24718bc2f70SMichal Berger} 24818bc2f70SMichal Berger 249a66c52fdSMichal Bergerfunction install_extra_pkgs() { 250a66c52fdSMichal Berger if [[ $INSTALL_QAT == true ]]; then 251b4fc019bSMichal Berger install libudev-devel || install libudev-dev || : 252a66c52fdSMichal Berger fi 253a66c52fdSMichal Berger 254a66c52fdSMichal Berger if [[ $INSTALL_QEMU == true ]]; then 255a66c52fdSMichal Berger install qemu-system-x86 qemu-img \ 256a66c52fdSMichal Berger || install qemu-system-x86 qemu-utils \ 257941cf96dSJaroslaw Chachulski || install qemu 258941cf96dSJaroslaw Chachulski 259941cf96dSJaroslaw Chachulski # Install extra dependency which was removed from Qemu 7.2 source tree 260941cf96dSJaroslaw Chachulski install libslirp-devel \ 261941cf96dSJaroslaw Chachulski || install libslirp-dev 262941cf96dSJaroslaw Chachulski fi || : 263a66c52fdSMichal Berger} 264a66c52fdSMichal Berger 2652188940eSPawel Piatekfunction install_vagrant() { 2662188940eSPawel Piatek local vagrant_version="2.2.7" 2672188940eSPawel Piatek local vagrant_installer="vagrant_${vagrant_version}_x86_64.deb" 2682188940eSPawel Piatek local vagrant_plugins=(vagrant-libvirt vagrant-sshfs vagrant-cachier vagrant-proxyconf) 2692188940eSPawel Piatek 2702188940eSPawel Piatek if [[ $OSID != ubuntu ]]; then 271b85b7e2bSMichal Berger echo "Currently, Vagrant installation is supported only on ubuntu" 272b85b7e2bSMichal Berger return 0 2732188940eSPawel Piatek fi 2742188940eSPawel Piatek 2758ea52a41SPawel Piatek # Install vagrant and it's plugins dependencies 2768ea52a41SPawel Piatek # function should be defined in pkgdep/$package_manager file 2778ea52a41SPawel Piatek install_vagrant_dependencies 2788ea52a41SPawel Piatek 2792188940eSPawel Piatek # Download and install vagrant 2802188940eSPawel Piatek if hash vagrant &> /dev/null; then 2812188940eSPawel Piatek echo "Vagrant is already installed" 2822188940eSPawel Piatek else 2832188940eSPawel Piatek wget "https://releases.hashicorp.com/vagrant/${vagrant_version}/${vagrant_installer}" 2842188940eSPawel Piatek sudo dpkg -i "${vagrant_installer}" 2852188940eSPawel Piatek fi 2862188940eSPawel Piatek vagrant --version 2872188940eSPawel Piatek 2882188940eSPawel Piatek # Install vagrant plugins 2892188940eSPawel Piatek local vagrant_plugin_list 2902188940eSPawel Piatek vagrant_plugin_list=$(vagrant plugin list) 2912188940eSPawel Piatek 2922188940eSPawel Piatek local plugin 2932188940eSPawel Piatek for plugin in "${vagrant_plugins[@]}"; do 2942188940eSPawel Piatek if grep -Fq "$plugin" <<< "$vagrant_plugin_list"; then 2952188940eSPawel Piatek echo "$plugin already installed" 2962188940eSPawel Piatek else 2972188940eSPawel Piatek vagrant plugin install "$plugin" 2982188940eSPawel Piatek fi 2992188940eSPawel Piatek done 3002188940eSPawel Piatek} 3012188940eSPawel Piatek 3021b2eb024SKarol Lateckifunction install_igb_uio() { 3031b2eb024SKarol Latecki git clone "${GIT_REPO_DPDK_KMODS}" "$GIT_REPOS/dpdk-kmods" 3042c65d556SMichal Berger 3051b2eb024SKarol Latecki (cd "$GIT_REPOS/dpdk-kmods/linux/igb_uio" && make -j ${jobs}) 3061b2eb024SKarol Latecki sudo mkdir -p "/lib/modules/$(uname -r)/extra/dpdk" 3071b2eb024SKarol Latecki sudo cp "$GIT_REPOS/dpdk-kmods/linux/igb_uio/igb_uio.ko" "/lib/modules/$(uname -r)/extra/dpdk" 3081b2eb024SKarol Latecki sudo depmod 3091b2eb024SKarol Latecki} 3101b2eb024SKarol Latecki 31147508028SMichal Bergerfunction install_irdma() { 3127939c642SMichal Berger local RDMA_CORE_VERSION=51.0 31347508028SMichal Berger local RDMA_CORE=https://github.com/linux-rdma/rdma-core/releases/download/v$RDMA_CORE_VERSION/rdma-core-$RDMA_CORE_VERSION.tar.gz 31466bb5d46SMichal Berger local packages=() hint="" 31547508028SMichal Berger 31666bb5d46SMichal Berger case "$ID" in 31766bb5d46SMichal Berger fedora) 31866bb5d46SMichal Berger install \ 31966bb5d46SMichal Berger ninja-build \ 32066bb5d46SMichal Berger pandoc \ 32166bb5d46SMichal Berger perl-generators \ 32266bb5d46SMichal Berger valgrind-devel \ 32366bb5d46SMichal Berger python-docutils \ 32466bb5d46SMichal Berger libnl3 \ 32566bb5d46SMichal Berger libnl3-devel \ 32666bb5d46SMichal Berger python3-Cython 32766bb5d46SMichal Berger ;; 32866bb5d46SMichal Berger debian | ubuntu) 32966bb5d46SMichal Berger install \ 33066bb5d46SMichal Berger debhelper \ 33166bb5d46SMichal Berger dh-python \ 33266bb5d46SMichal Berger python3-docutils 33366bb5d46SMichal Berger ;; 33466bb5d46SMichal Berger *) 33566bb5d46SMichal Berger echo "irdma installation not supported under $ID" >&2 33647508028SMichal Berger return 0 33766bb5d46SMichal Berger ;; 33866bb5d46SMichal Berger esac 33947508028SMichal Berger 34047508028SMichal Berger rm -rf "$GIT_REPOS/irdma-$IRDMA_VERSION" 34147508028SMichal Berger rm -rf "$GIT_REPOS/rdma-core-$RDMA_CORE_VERSION" 34247508028SMichal Berger 34347508028SMichal Berger curl -L -o- "$IRDMA_DRIVER" | tar -C "$GIT_REPOS" -xzf - 3441c5a5ee6SMichal Berger 3451c5a5ee6SMichal Berger if ge "$kernel_ver" 6.10; then 3461c5a5ee6SMichal Berger patch --dir="$GIT_REPOS/irdma-$IRDMA_VERSION" -p1 \ 3471c5a5ee6SMichal Berger < "$rootdir/test/common/config/pkgdep/patches/irdma/0001-ip_route_output.patch" 3481c5a5ee6SMichal Berger fi 3491c5a5ee6SMichal Berger 350b8390354SMichal Berger if ge "$kernel_ver" 6.11; then 351b8390354SMichal Berger patch --dir="$GIT_REPOS/irdma-$IRDMA_VERSION" -p1 \ 352b8390354SMichal Berger < "$rootdir/test/common/config/pkgdep/patches/irdma/0001-uverbs_attr.patch" 353b8390354SMichal Berger fi 354b8390354SMichal Berger 35547508028SMichal Berger [[ -e $GIT_REPOS/irdma-$IRDMA_VERSION/build.sh ]] 35647508028SMichal Berger 35747508028SMichal Berger ( 35847508028SMichal Berger cd "$GIT_REPOS/irdma-$IRDMA_VERSION" 35919d1b5f9SKarol Latecki sed -i "s/IRDMA_FLUSH_DELAY_MS 1500/IRDMA_FLUSH_DELAY_MS 50/" \ 36019d1b5f9SKarol Latecki "$GIT_REPOS/irdma-$IRDMA_VERSION/src/irdma/verbs.h" 36147508028SMichal Berger "$GIT_REPOS/irdma-$IRDMA_VERSION/build.sh" 36247508028SMichal Berger ) 36347508028SMichal Berger 36447508028SMichal Berger # Fetch and build the rdma-core irdma depends on 36547508028SMichal Berger curl -L -o- "$RDMA_CORE" | tar -C "$GIT_REPOS" -xzf - 36647508028SMichal Berger [[ -e $GIT_REPOS/irdma-$IRDMA_VERSION/libirdma-$RDMA_CORE_VERSION.patch ]] 36747508028SMichal Berger 36847508028SMichal Berger patch --dir="$GIT_REPOS/rdma-core-$RDMA_CORE_VERSION" -p2 \ 36947508028SMichal Berger < "$GIT_REPOS/irdma-$IRDMA_VERSION/libirdma-$RDMA_CORE_VERSION.patch" 37047508028SMichal Berger 37166bb5d46SMichal Berger case "$ID" in 37266bb5d46SMichal Berger fedora) 37347508028SMichal Berger [[ -e $GIT_REPOS/rdma-core-$RDMA_CORE_VERSION/redhat/rdma-core.spec ]] 37466bb5d46SMichal Berger # Note that paths and the name of the package are hardcoded into .spec, hence they need 37566bb5d46SMichal Berger # to stay like this. 37647508028SMichal Berger mkdir -p "$HOME/rpmbuild/"{SOURCES,SPECS} 37747508028SMichal Berger cp "$GIT_REPOS/rdma-core-$RDMA_CORE_VERSION/redhat/rdma-core.spec" "$HOME/rpmbuild/SPECS" 37847508028SMichal Berger 37947508028SMichal Berger # Re-package the source 38066bb5d46SMichal Berger tar -czf "$HOME/rpmbuild/SOURCES/rdma-core-$RDMA_CORE_VERSION.tar.gz" \ 38166bb5d46SMichal Berger -C "$GIT_REPOS" "rdma-core-$RDMA_CORE_VERSION" 38247508028SMichal Berger 38347508028SMichal Berger # Build the rpms 38447508028SMichal Berger ( 38547508028SMichal Berger cd "$HOME/rpmbuild/SPECS" 38647508028SMichal Berger # Make sure stock ninja-build is used 38747508028SMichal Berger PATH="/usr/bin:$PATH" rpmbuild -ba rdma-core.spec 38847508028SMichal Berger ) 38947508028SMichal Berger 39066bb5d46SMichal Berger packages=("$HOME/rpmbuild/RPMS/x86_64/"*.rpm) 39166bb5d46SMichal Berger hint="$package_manager install [--allowerasing] $HOME/rpmbuild/RPMS/x86_64/*.rpm" 39266bb5d46SMichal Berger ;; 39366bb5d46SMichal Berger debian | ubuntu) 39466bb5d46SMichal Berger [[ -e $GIT_REPOS/rdma-core-$RDMA_CORE_VERSION/debian/control ]] 39547508028SMichal Berger 39666bb5d46SMichal Berger # Build the debs 39766bb5d46SMichal Berger ( 39866bb5d46SMichal Berger cd "$GIT_REPOS/rdma-core-$RDMA_CORE_VERSION" 39966bb5d46SMichal Berger dh clean --with python3,systemd --builddirectory=build-deb 40066bb5d46SMichal Berger dh build --with systemd --builddirectory=build-deb 40166bb5d46SMichal Berger dh binary --with systemd --builddirectory=build-deb 40266bb5d46SMichal Berger ) 40366bb5d46SMichal Berger 40466bb5d46SMichal Berger packages=("$GIT_REPOS/"*.deb) 40566bb5d46SMichal Berger hint="dpkg --install $GIT_REPOS/*.deb" 40666bb5d46SMichal Berger ;; 40766bb5d46SMichal Berger esac 40866bb5d46SMichal Berger 40966bb5d46SMichal Berger ((${#packages[@]} > 0)) || return 1 41047508028SMichal Berger 41147508028SMichal Berger cat <<-EOF 41247508028SMichal Berger 41347508028SMichal Berger INFO: rdma-core-$RDMA_CORE_VERSION was successfully built, following packages are 41447508028SMichal Berger available for installation: 41547508028SMichal Berger 41666bb5d46SMichal Berger $(printf ' - %s\n' "${packages[@]##*/}") 41747508028SMichal Berger 41847508028SMichal Berger Note that installing the above packages may raise conflicts with their 41947508028SMichal Berger potentially newer versions already installed on the system. Dependent 42047508028SMichal Berger packages may be uninstalled during the process as well. Please, run the 42147508028SMichal Berger following command to finish the installation: 42247508028SMichal Berger 42366bb5d46SMichal Berger $hint 42447508028SMichal Berger EOF 42547508028SMichal Berger} 42647508028SMichal Berger 427d511348aSMichal Bergerfunction install_ice() { 428d511348aSMichal Berger rm -rf "$GIT_REPOS/ice-$ICE_VERSION" 429d511348aSMichal Berger 430d511348aSMichal Berger curl -L -o- "$ICE_DRIVER" | tar -C "$GIT_REPOS" -xzf - 4313bcff0b2SMichal Berger 43292b7734cSMichal Berger if ge "$kernel_ver" 6.10; then 43392b7734cSMichal Berger patch --dir="$GIT_REPOS/ice-$ICE_VERSION" -p1 \ 43492b7734cSMichal Berger < "$rootdir/test/common/config/pkgdep/patches/ice/0001-__assign_str.patch" 43592b7734cSMichal Berger patch --dir="$GIT_REPOS/ice-$ICE_VERSION" -p1 \ 43692b7734cSMichal Berger < "$rootdir/test/common/config/pkgdep/patches/ice/0001-napi_alloc_skb.patch" 43792b7734cSMichal Berger patch --dir="$GIT_REPOS/ice-$ICE_VERSION" -p1 \ 43892b7734cSMichal Berger < "$rootdir/test/common/config/pkgdep/patches/ice/0001-devlink_param.patch" 43992b7734cSMichal Berger patch --dir="$GIT_REPOS/ice-$ICE_VERSION" -p1 \ 44092b7734cSMichal Berger < "$rootdir/test/common/config/pkgdep/patches/ice/0001-xsk_buff_dma.patch" 44192b7734cSMichal Berger fi 44292b7734cSMichal Berger 443*f417ec25SMichal Berger if ge "$kernel_ver" 6.11; then 444*f417ec25SMichal Berger patch --dir="$GIT_REPOS/ice-$ICE_VERSION" -p1 \ 445*f417ec25SMichal Berger < "$rootdir/test/common/config/pkgdep/patches/ice/0001-kernel_ethtool_ts_info.patch" 446*f417ec25SMichal Berger patch --dir="$GIT_REPOS/ice-$ICE_VERSION" -p1 \ 447*f417ec25SMichal Berger < "$rootdir/test/common/config/pkgdep/patches/ice/0001-ptp.patch" 448*f417ec25SMichal Berger fi 449*f417ec25SMichal Berger 450d511348aSMichal Berger ( 451d511348aSMichal Berger cd "$GIT_REPOS/ice-$ICE_VERSION/src" 452a26d6028Swawryk sudo make -j"$(nproc)" install 453d511348aSMichal Berger ) 454d511348aSMichal Berger} 455d511348aSMichal Berger 45680c271ffSMichal Bergerfunction install_libbpf() { 45780c271ffSMichal Berger local libbpf_version=v1.4.5 45860305d01SMichal Berger 45980c271ffSMichal Berger rm -rf "$GIT_REPOS/libbpf" 46080c271ffSMichal Berger git clone "$GIT_REPO_LIBBPF" --branch "$libbpf_version" "$GIT_REPOS/libbpf" 46180c271ffSMichal Berger 46280c271ffSMichal Berger make -C "$GIT_REPOS/libbpf/src" -j install 46380c271ffSMichal Berger # install target doesn't include the kernel header files 46480c271ffSMichal Berger make -C "$GIT_REPOS/libbpf/src" install_uapi_headers 46580c271ffSMichal Berger} 46680c271ffSMichal Berger 46780c271ffSMichal Bergerfunction install_bpftrace() { 46880c271ffSMichal Berger local deps_fedora=() deps_ubuntu=() bcc_rev 46980c271ffSMichal Berger 47080c271ffSMichal Berger deps_fedora+=(cereal-devel) 47180c271ffSMichal Berger deps_fedora+=(clang-devel) 47280c271ffSMichal Berger deps_fedora+=(dwarves) 47380c271ffSMichal Berger deps_fedora+=(gmock-devel) 47480c271ffSMichal Berger deps_fedora+=(gtest-devel) 47580c271ffSMichal Berger deps_fedora+=(llvm-devel) 47680c271ffSMichal Berger deps_fedora+=(bcc-devel) 47780c271ffSMichal Berger deps_fedora+=(libbpf-devel) 47880c271ffSMichal Berger 47980c271ffSMichal Berger deps_ubuntu+=(libcereal-dev) 48080c271ffSMichal Berger deps_ubuntu+=(libclang-dev) 48180c271ffSMichal Berger deps_ubuntu+=(llvm-dev) 48280c271ffSMichal Berger # Under jammy (2204) the libbpf version is not compatible with the version of 48380c271ffSMichal Berger # bpftrace that we are using. Instead, we are going to provide our own build 48480c271ffSMichal Berger # of libbpf, including both up-to-date bpf.h and linux/bpf.h. 48580c271ffSMichal Berger [[ $VERSION_CODENAME == jammy ]] || deps_ubuntu+=(libbpf-dev) 48680c271ffSMichal Berger deps_ubuntu+=(libbpfcc-dev) 48780c271ffSMichal Berger deps_ubuntu+=(libelf-dev) 48880c271ffSMichal Berger deps_ubuntu+=(binutils-dev) 48980c271ffSMichal Berger 49080c271ffSMichal Berger local -n deps="deps_$ID" 49180c271ffSMichal Berger 49280c271ffSMichal Berger ((${#deps[@]} > 0)) || return 1 49380c271ffSMichal Berger 49480c271ffSMichal Berger deps+=(clang cmake) 49560305d01SMichal Berger 49660305d01SMichal Berger install "${deps[@]}" 49760305d01SMichal Berger 49880c271ffSMichal Berger if [[ $VERSION_CODENAME == jammy ]]; then 49980c271ffSMichal Berger install_libbpf 50080c271ffSMichal Berger fi 50180c271ffSMichal Berger 50272c4255eSKamil Godzwon rm -rf $GIT_REPOS/bpftrace 50372c4255eSKamil Godzwon 504c2e1dac9SMichal Berger git clone "$GIT_REPO_BPFTRACE" "$GIT_REPOS/bpftrace" 505866007aeSKamil Godzwon git -C $GIT_REPOS/bpftrace checkout $BPFTRACE_VERSION 506866007aeSKamil Godzwon 507945468caSMichal Berger mkdir -p "$GIT_REPOS/bpftrace/build" 50860305d01SMichal Berger cmake \ 50960305d01SMichal Berger -DCMAKE_BUILD_TYPE=Release \ 510945468caSMichal Berger -DBUILD_TESTING=OFF \ 51160305d01SMichal Berger -B "$GIT_REPOS/bpftrace/build" \ 51260305d01SMichal Berger -S "$GIT_REPOS/bpftrace" 51360305d01SMichal Berger 51472c4255eSKamil Godzwon make -C $GIT_REPOS/bpftrace/build -j$(nproc) 515866007aeSKamil Godzwon sudo make -C $GIT_REPOS/bpftrace/build install 51672c4255eSKamil Godzwon} 51772c4255eSKamil Godzwon 518713dbcddSMichal Bergerfunction install_doxygen() { 519713dbcddSMichal Berger # Stable, 1.10 commit that works for our docs 520713dbcddSMichal Berger local release=78422d3905e57acebf0374feefafa6578dbe86aa 521713dbcddSMichal Berger 522713dbcddSMichal Berger rm -rf "$GIT_REPOS/doxygen" 523713dbcddSMichal Berger 524713dbcddSMichal Berger git clone "$GIT_REPO_DOXYGEN" "$GIT_REPOS/doxygen" 525713dbcddSMichal Berger git -C "$GIT_REPOS/doxygen" checkout "$release" 526713dbcddSMichal Berger 527713dbcddSMichal Berger mkdir -p "$GIT_REPOS/doxygen/build" 528713dbcddSMichal Berger 529713dbcddSMichal Berger cmake -G "Unix Makefiles" \ 530713dbcddSMichal Berger -B "$GIT_REPOS/doxygen/build" \ 531713dbcddSMichal Berger -S "$GIT_REPOS/doxygen" 532713dbcddSMichal Berger 533713dbcddSMichal Berger # This build is quite heavy, so let's not go crazy with -j here 534713dbcddSMichal Berger make -C "$GIT_REPOS/doxygen/build" -j$(($(nproc) / 2)) 535713dbcddSMichal Berger make -C "$GIT_REPOS/doxygen/build" install 536713dbcddSMichal Berger} 537713dbcddSMichal Berger 5380081cfeaSMichal Bergerfunction install_sources() { 53918bc2f70SMichal Berger if [[ $ID == centos ]] && (( VERSION_ID == 7 )); then 54018bc2f70SMichal Berger # install proper version of the git first 54118bc2f70SMichal Berger install_git 54218bc2f70SMichal Berger fi 54318bc2f70SMichal Berger 54418bc2f70SMichal Berger IFS="," read -ra conf_env <<< "$CONF" 54518bc2f70SMichal Berger for conf in "${conf_env[@]}"; do 54618bc2f70SMichal Berger export "INSTALL_${conf^^}=true" 54718bc2f70SMichal Berger done 54818bc2f70SMichal Berger 549d8956215SMichal Berger if [[ $OSID == freebsd ]]; then 55018bc2f70SMichal Berger jobs=$(($(sysctl -n hw.ncpu) * 2)) 55118bc2f70SMichal Berger else 55218bc2f70SMichal Berger jobs=$(($(nproc) * 2)) 55318bc2f70SMichal Berger sources+=( 55447508028SMichal Berger install_irdma 55518bc2f70SMichal Berger install_libiscsi 55618bc2f70SMichal Berger install_nvmecli 557c2fdd754SSebastian Brzezinka install_nvmecli_plugin 55818bc2f70SMichal Berger install_qat 55918bc2f70SMichal Berger install_rocksdb 56018bc2f70SMichal Berger install_qemu 5611b2eb024SKarol Latecki install_igb_uio 562d511348aSMichal Berger install_ice 563f5e5041dSMichal Berger install_bpftrace 564713dbcddSMichal Berger install_doxygen 56518bc2f70SMichal Berger ) 5664a50398cSMichal Berger install_extra_pkgs 56718bc2f70SMichal Berger fi 56818bc2f70SMichal Berger sources+=(install_fio) 569a504b006SMichal Berger sources+=(install_flamegraph) 5702188940eSPawel Piatek sources+=(install_vagrant) 5719aff18edSMichal Berger sources+=(install_ittapi) 57218bc2f70SMichal Berger 57318bc2f70SMichal Berger sudo mkdir -p /usr/{,local}/src 57470dfde6fSMichal Berger sudo mkdir -p "$GIT_REPOS" 57518bc2f70SMichal Berger 57618bc2f70SMichal Berger for source in "${sources[@]}"; do 57718bc2f70SMichal Berger source_conf=${source^^} 57818bc2f70SMichal Berger if [[ ${!source_conf} == true ]]; then 579c9b46ba9SMichal Berger "$source" 58018bc2f70SMichal Berger fi 58118bc2f70SMichal Berger done 5820081cfeaSMichal Berger} 5830081cfeaSMichal Berger 5840081cfeaSMichal BergerGIT_VERSION=2.25.1 5857939c642SMichal BergerIRDMA_VERSION=1.14.31 58667c18052SMichal BergerICE_VERSION=1.14.9 58772c4255eSKamil Godzwon 588f09c7da5SMichal BergerBPFTRACE_VERSION=${BPFTRACE_VERSION:-f7bdfb44} 589b1d3ea0cSKarol LateckiVFIO_QEMU_BRANCH=${VFIO_QEMU_BRANCH:-vfio-user-p3.0} 5908b8a7a80SMichal BergerVANILLA_QEMU_BRANCH=${VANILLA_QEMU_BRANCH:-v8.0.0} 5916b6c9db6SMichal Berger 5920081cfeaSMichal Berger: ${GIT_REPO_ROCKSDB=https://review.spdk.io/spdk/rocksdb} 5930081cfeaSMichal Bergerexport GIT_REPO_ROCKSDB 5940081cfeaSMichal Berger: ${GIT_REPO_FIO=https://github.com/axboe/fio.git} 5950081cfeaSMichal Bergerexport GIT_REPO_FIO 5960081cfeaSMichal Berger: ${GIT_REPO_FLAMEGRAPH=https://github.com/brendangregg/FlameGraph.git} 5970081cfeaSMichal Bergerexport GIT_REPO_FLAMEGRAPH 59818ee5d7bSMichal Berger: ${GIT_REPO_QEMU=https://github.com/qemu/qemu} 5990081cfeaSMichal Bergerexport GIT_REPO_QEMU 60022d7d62eSMichal Berger: ${GIT_REPO_QEMU_VFIO=https://github.com/oracle/qemu} 601253c1785SKarol Lateckiexport GIT_REPO_QEMU_VFIO 6020081cfeaSMichal Berger: ${GIT_REPO_LIBISCSI=https://github.com/sahlberg/libiscsi} 6030081cfeaSMichal Bergerexport GIT_REPO_LIBISCSI 60482c8059aSMichal Berger: ${DRIVER_LOCATION_QAT=https://downloadmirror.intel.com/828487/QAT.L.4.26.0-00008.tar.gz} 6050081cfeaSMichal Bergerexport DRIVER_LOCATION_QAT 6060081cfeaSMichal Berger: ${GIT_REPO_GIT=https://github.com/git/git/archive/v${GIT_VERSION}.tar.gz} 6070081cfeaSMichal Bergerexport GIT_REPO_GIT 6080081cfeaSMichal Berger: ${GIT_REPO_DPDK_KMODS=http://dpdk.org/git/dpdk-kmods} 6090081cfeaSMichal Bergerexport GIT_REPO_DPDK_KMODS 6107939c642SMichal Berger: ${IRDMA_DRIVER=https://downloadmirror.intel.com/823677/irdma-$IRDMA_VERSION.tgz} 6110081cfeaSMichal Bergerexport IRDMA_DRIVER 612ce2a2aedSMichal Berger: ${ICE_DRIVER="https://sourceforge.net/projects/e1000/files/ice%20stable/$ICE_VERSION/ice-$ICE_VERSION.tar.gz"} 6130081cfeaSMichal Bergerexport ICE_DRIVER 61472c4255eSKamil Godzwon: ${GIT_REPO_BCC=https://github.com/iovisor/bcc.git} 61572c4255eSKamil Godzwonexport GIT_REPO_BCC 61672c4255eSKamil Godzwon: ${GIT_REPO_BPFTRACE=https://github.com/iovisor/bpftrace.git} 61772c4255eSKamil Godzwonexport GIT_REPO_BPFTRACE 618c2fdd754SSebastian Brzezinka: ${GIT_REPO_NVME_CLI=https://review.spdk.io/gerrit/spdk/nvme-cli} 619c2fdd754SSebastian Brzezinkaexport GIT_REPO_NVME_CLI 6209aff18edSMichal Berger: ${GIT_REPO_ITTAPI=https://github.com/intel/ittapi.git} 6219aff18edSMichal Bergerexport GIT_REPO_ITTAPI 622713dbcddSMichal Berger: ${GIT_REPO_DOXYGEN="https://github.com/doxygen/doxygen"} 623713dbcddSMichal Bergerexport GIT_REPO_DOXYGEN 62480c271ffSMichal Berger: ${GIT_REPO_LIBBPF="https://github.com/libbpf/libbpf"} 62580c271ffSMichal Bergerexport GIT_REPO_LIBBPF 62672c4255eSKamil Godzwon 6270081cfeaSMichal BergerGIT_REPOS=${GIT_REPOS:-$HOME} 6280081cfeaSMichal Berger 6290081cfeaSMichal Bergergcc_version=$(gcc -dumpversion) gcc_version=${gcc_version%%.*} 630f4e0fc09SMichal Bergerif [[ -e /proc/sys/kernel/osrelease ]]; then 631f4e0fc09SMichal Berger kernel_ver=$(< /proc/sys/kernel/osrelease) 632f4e0fc09SMichal Bergerfi 633