The NVMf target is being refactored to split the RDMA transport-specific code into its own file. Once this is complete, we should be able to plug in other transports and build the NVMf target without any RDMA dependency if desired. To enable this, change the CONFIG option to RDMA; it still controls whether the whole NVMf target is built for now, but once the RDMA dependency is actually made optional, we will be able to build the generic NVMf target code without libibverbs installed. Change-Id: I8cd90a9aaa85dcefcc9b0f8f2e7b6af21958b2a8 Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
115 lines
2.3 KiB
Bash
Executable File
115 lines
2.3 KiB
Bash
Executable File
set -xe
|
|
ulimit -c unlimited
|
|
|
|
export RUN_NIGHTLY=0
|
|
|
|
MAKECONFIG='CONFIG_DEBUG=y CONFIG_WERROR=y'
|
|
|
|
case `uname` in
|
|
FreeBSD)
|
|
DPDK_DIR=/usr/local/share/dpdk/x86_64-native-bsdapp-clang
|
|
MAKE=gmake
|
|
MAKEFLAGS=${MAKEFLAGS:--j$(sysctl -a | egrep -i 'hw.ncpu' | awk '{print $2}')}
|
|
;;
|
|
Linux)
|
|
DPDK_DIR=/usr/local/share/dpdk/x86_64-native-linuxapp-gcc
|
|
MAKE=make
|
|
MAKEFLAGS=${MAKEFLAGS:--j$(nproc)}
|
|
MAKECONFIG="$MAKECONFIG CONFIG_COVERAGE=y"
|
|
;;
|
|
*)
|
|
echo "Unknown OS in $0"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
if [ -f /usr/include/infiniband/verbs.h ]; then
|
|
MAKECONFIG="$MAKECONFIG CONFIG_RDMA=y"
|
|
fi
|
|
|
|
if [ -z "$output_dir" ]; then
|
|
if [ -z "$rootdir" ] || [ ! -d "$rootdir/../output" ]; then
|
|
output_dir=.
|
|
else
|
|
output_dir=$rootdir/../output
|
|
fi
|
|
export output_dir
|
|
fi
|
|
|
|
if hash valgrind &> /dev/null; then
|
|
valgrind='valgrind --leak-check=full --error-exitcode=2'
|
|
else
|
|
valgrind=''
|
|
fi
|
|
|
|
function timing() {
|
|
direction="$1"
|
|
testname="$2"
|
|
|
|
now=$(date +%s)
|
|
|
|
if [ "$direction" = "enter" ]; then
|
|
export timing_stack="${timing_stack};${now}"
|
|
export test_stack="${test_stack};${testname}"
|
|
else
|
|
child_time=$(grep "^${test_stack:1};" $output_dir/timing.txt | awk '{s+=$2} END {print s}')
|
|
|
|
start_time=$(echo "$timing_stack" | sed -e 's@^.*;@@')
|
|
timing_stack=$(echo "$timing_stack" | sed -e 's@;[^;]*$@@')
|
|
|
|
elapsed=$((now - start_time - child_time))
|
|
echo "${test_stack:1} $elapsed" >> $output_dir/timing.txt
|
|
|
|
test_stack=$(echo "$test_stack" | sed -e 's@;[^;]*$@@')
|
|
fi
|
|
}
|
|
|
|
function timing_enter() {
|
|
timing "enter" "$1"
|
|
}
|
|
|
|
function timing_exit() {
|
|
timing "exit" "$1"
|
|
}
|
|
|
|
function timing_finish() {
|
|
flamegraph='/usr/local/FlameGraph/flamegraph.pl'
|
|
if [ -x "$flamegraph" ]; then
|
|
"$flamegraph" \
|
|
--title 'Build Timing' \
|
|
--nametype 'Step:' \
|
|
--countname seconds \
|
|
$output_dir/timing.txt \
|
|
>$output_dir/timing.svg
|
|
fi
|
|
}
|
|
|
|
function process_core() {
|
|
ret=0
|
|
for core in $(find . -type f -name 'core*'); do
|
|
exe=$(eu-readelf -n "$core" | grep psargs | sed "s/.*psargs: \([^ \'\" ]*\).*/\1/")
|
|
echo "exe for $core is $exe"
|
|
if [[ ! -z "$exe" ]]; then
|
|
if hash gdb; then
|
|
gdb -batch -ex "bt" $exe $core
|
|
fi
|
|
cp $exe $output_dir
|
|
fi
|
|
mv $core $output_dir
|
|
chmod a+r $output_dir/$core
|
|
ret=1
|
|
done
|
|
return $ret
|
|
}
|
|
|
|
function killprocess() {
|
|
# $1 = process pid
|
|
if [ -z "$1" ]; then
|
|
exit 1
|
|
fi
|
|
|
|
echo "killing process with pid $1"
|
|
kill $1
|
|
wait $1 || true
|
|
}
|