1*44290e13STomasz Zawadzki#!/usr/bin/env bash 2*44290e13STomasz Zawadzki# SPDX-License-Identifier: BSD-3-Clause 3*44290e13STomasz Zawadzki# Copyright (C) 2022 Intel Corporation 4*44290e13STomasz Zawadzki# All rights reserved. 5*44290e13STomasz Zawadzki# 6*44290e13STomasz Zawadzki 7*44290e13STomasz Zawadzkiscriptdir=$(readlink -f "$(dirname "$0")") 8*44290e13STomasz Zawadzkirootdir=$(readlink -f "$scriptdir/../..") 9*44290e13STomasz Zawadzkisource "$rootdir/scripts/common.sh" 10*44290e13STomasz Zawadzki 11*44290e13STomasz Zawadzkiset -e 12*44290e13STomasz Zawadzkishopt -s extglob 13*44290e13STomasz Zawadzki 14*44290e13STomasz Zawadzkimode=${1:-check} # check or fix 15*44290e13STomasz Zawadzki 16*44290e13STomasz Zawadzki# By default verify headers matching the DPDK submodule 17*44290e13STomasz Zawadzkidpdk_dir=${2:-"$rootdir/dpdk"} 18*44290e13STomasz Zawadzkidpdk_ver=$(< "$dpdk_dir/VERSION") 19*44290e13STomasz Zawadzki 20*44290e13STomasz Zawadzkienv_path="$rootdir/lib/env_dpdk" 21*44290e13STomasz Zawadzkitracked_versions=("$env_path/"+([0-9]).+([0-9])/*.h) 22*44290e13STomasz Zawadzkitracked_versions=("${tracked_versions[@]#"$env_path/"}") 23*44290e13STomasz Zawadzkitracked_versions=("${tracked_versions[@]%/*}") 24*44290e13STomasz Zawadzki 25*44290e13STomasz Zawadzki# The DPDK PCI API tracking started with DPDK 22.11, all prior versions will use DPDK 22.07 headers 26*44290e13STomasz Zawadzkitarget_ver="22.07" 27*44290e13STomasz Zawadzkiwhile read -r ver; do 28*44290e13STomasz Zawadzki ge "$dpdk_ver" "$ver" && target_ver=$ver && break 29*44290e13STomasz Zawadzkidone < <(printf "%s\n" "${tracked_versions[@]}" | sort -Vru) 30*44290e13STomasz Zawadzki 31*44290e13STomasz Zawadzkiecho "Checking DPDK PCI API from $dpdk_ver against $target_ver ..." 32*44290e13STomasz Zawadzki 33*44290e13STomasz Zawadzkitarget_headers=("$env_path/$target_ver/"*.h) 34*44290e13STomasz Zawadzkitarget_headers=("${target_headers[@]##*/}") 35*44290e13STomasz Zawadzki 36*44290e13STomasz Zawadzki# The includes should point to headers in SPDK tree rather than system ones. 37*44290e13STomasz Zawadzkiuse_local_includes="-e " 38*44290e13STomasz Zawadzkifor header in "${target_headers[@]}"; do 39*44290e13STomasz Zawadzki use_local_includes+="s/#include <$header>/#include \"$header\"/g;" 40*44290e13STomasz Zawadzkidone 41*44290e13STomasz Zawadzki 42*44290e13STomasz Zawadzkifor header in "${target_headers[@]}"; do 43*44290e13STomasz Zawadzki dpdk_file="$dpdk_dir/$(git -C "$dpdk_dir" ls-files "*/$header")" 44*44290e13STomasz Zawadzki 45*44290e13STomasz Zawadzki # Patch DPDK header with any workarounds necessary 46*44290e13STomasz Zawadzki patch_file="$scriptdir/$target_ver/$header.patch" 47*44290e13STomasz Zawadzki if [[ -s $patch_file ]]; then 48*44290e13STomasz Zawadzki dpdk_header=$(patch -s "$dpdk_file" "$patch_file" -o - | sed "$use_local_includes") 49*44290e13STomasz Zawadzki else 50*44290e13STomasz Zawadzki dpdk_header=$(sed "$use_local_includes" "$dpdk_file") 51*44290e13STomasz Zawadzki fi 52*44290e13STomasz Zawadzki 53*44290e13STomasz Zawadzki spdk_file="$env_path/$target_ver/$header" 54*44290e13STomasz Zawadzki if ! single_diff=$(diff -u "$spdk_file" <(echo "$dpdk_header")); then 55*44290e13STomasz Zawadzki header_diff+="$single_diff\n" 56*44290e13STomasz Zawadzki fi 57*44290e13STomasz Zawadzkidone 58*44290e13STomasz Zawadzki 59*44290e13STomasz Zawadzkiif [[ -z "$header_diff" ]]; then 60*44290e13STomasz Zawadzki echo "No differences in headers found." 61*44290e13STomasz Zawadzki exit 0 62*44290e13STomasz Zawadzkifi 63*44290e13STomasz Zawadzki 64*44290e13STomasz Zawadzkiif [[ "$mode" == "check" ]]; then 65*44290e13STomasz Zawadzki cat <<- CHECK 66*44290e13STomasz Zawadzki $(echo -e "$header_diff") 67*44290e13STomasz Zawadzki 68*44290e13STomasz Zawadzki Differences in DPDK and internal SPDK headers found. 69*44290e13STomasz Zawadzki For changes that do not affect the API, please use 'fix' as \$1 to this script. 70*44290e13STomasz Zawadzki If API was changed, please create "$env_path/$dpdk_ver/" with appropriate headers. 71*44290e13STomasz Zawadzki 72*44290e13STomasz Zawadzki CHECK 73*44290e13STomasz Zawadzkielif [[ "$mode" == "fix" ]]; then 74*44290e13STomasz Zawadzki echo -e "$header_diff" | patch -d "$env_path/$target_ver/" 75*44290e13STomasz Zawadzki echo "Fixed differences between DPDK and internal SPDK headers." 76*44290e13STomasz Zawadzkielse 77*44290e13STomasz Zawadzki echo "Incorrect \$1 passed, please use 'check' or 'fix'." 78*44290e13STomasz Zawadzki exit 1 79*44290e13STomasz Zawadzkifi 80