1#!/bin/sh -xe 2 3on_error() { 4 if [ $? = 0 ]; then 5 exit 6 fi 7 FILES_TO_PRINT="build/meson-logs/testlog.txt" 8 FILES_TO_PRINT="$FILES_TO_PRINT build/.ninja_log" 9 FILES_TO_PRINT="$FILES_TO_PRINT build/meson-logs/meson-log.txt" 10 FILES_TO_PRINT="$FILES_TO_PRINT build/gdb.log" 11 12 for pr_file in $FILES_TO_PRINT; do 13 if [ -e "$pr_file" ]; then 14 cat "$pr_file" 15 fi 16 done 17} 18# We capture the error logs as artifacts in Github Actions, no need to dump 19# them via a EXIT handler. 20[ -n "$GITHUB_WORKFLOW" ] || trap on_error EXIT 21 22install_libabigail() { 23 version=$1 24 instdir=$2 25 26 wget -q "http://mirrors.kernel.org/sourceware/libabigail/${version}.tar.gz" 27 tar -xf ${version}.tar.gz 28 cd $version && autoreconf -vfi && cd - 29 mkdir $version/build 30 cd $version/build && ../configure --prefix=$instdir && cd - 31 make -C $version/build all install 32 rm -rf $version 33 rm ${version}.tar.gz 34} 35 36configure_coredump() { 37 # No point in configuring coredump without gdb 38 which gdb >/dev/null || return 0 39 ulimit -c unlimited 40 sudo sysctl -w kernel.core_pattern=/tmp/dpdk-core.%e.%p 41} 42 43catch_coredump() { 44 ls /tmp/dpdk-core.*.* 2>/dev/null || return 0 45 for core in /tmp/dpdk-core.*.*; do 46 binary=$(sudo readelf -n $core |grep $(pwd)/build/ 2>/dev/null |head -n1) 47 [ -x $binary ] || binary= 48 sudo gdb $binary -c $core \ 49 -ex 'info threads' \ 50 -ex 'thread apply all bt full' \ 51 -ex 'quit' 52 done |tee -a build/gdb.log 53 return 1 54} 55 56if [ "$AARCH64" = "true" ]; then 57 # Note: common/cnxk is disabled for Ubuntu 18.04 58 # https://bugs.dpdk.org/show_bug.cgi?id=697 59 OPTS="$OPTS -Ddisable_drivers=common/cnxk" 60 if [ "${CC%%clang}" != "$CC" ]; then 61 OPTS="$OPTS --cross-file config/arm/arm64_armv8_linux_clang_ubuntu1804" 62 else 63 OPTS="$OPTS --cross-file config/arm/arm64_armv8_linux_gcc" 64 fi 65fi 66 67if [ "$PPC64LE" = "true" ]; then 68 OPTS="$OPTS --cross-file config/ppc/ppc64le-power8-linux-gcc-ubuntu1804" 69fi 70 71if [ "$BUILD_DOCS" = "true" ]; then 72 OPTS="$OPTS -Denable_docs=true" 73fi 74 75if [ "$BUILD_32BIT" = "true" ]; then 76 OPTS="$OPTS -Dc_args=-m32 -Dc_link_args=-m32" 77 export PKG_CONFIG_LIBDIR="/usr/lib32/pkgconfig" 78fi 79 80if [ "$DEF_LIB" = "static" ]; then 81 OPTS="$OPTS -Dexamples=l2fwd,l3fwd" 82else 83 OPTS="$OPTS -Dexamples=all" 84fi 85 86OPTS="$OPTS -Dplatform=generic" 87OPTS="$OPTS --default-library=$DEF_LIB" 88OPTS="$OPTS --buildtype=debugoptimized" 89OPTS="$OPTS -Dcheck_includes=true" 90if [ "$MINI" = "true" ]; then 91 OPTS="$OPTS -Denable_drivers=bus/vdev,mempool/ring,net/null" 92 OPTS="$OPTS -Ddisable_libs=*" 93fi 94meson build --werror $OPTS 95ninja -C build 96 97if [ "$AARCH64" != "true" ] && [ "$PPC64LE" != "true" ]; then 98 failed= 99 configure_coredump 100 devtools/test-null.sh || failed="true" 101 catch_coredump 102 [ "$failed" != "true" ] 103fi 104 105if [ "$ABI_CHECKS" = "true" ]; then 106 LIBABIGAIL_VERSION=${LIBABIGAIL_VERSION:-libabigail-1.6} 107 108 if [ "$(cat libabigail/VERSION 2>/dev/null)" != "$LIBABIGAIL_VERSION" ]; then 109 rm -rf libabigail 110 # if we change libabigail, invalidate existing abi cache 111 rm -rf reference 112 fi 113 114 if [ ! -d libabigail ]; then 115 install_libabigail $LIBABIGAIL_VERSION $(pwd)/libabigail 116 echo $LIBABIGAIL_VERSION > libabigail/VERSION 117 fi 118 119 export PATH=$(pwd)/libabigail/bin:$PATH 120 121 REF_GIT_REPO=${REF_GIT_REPO:-https://dpdk.org/git/dpdk} 122 REF_GIT_TAG=${REF_GIT_TAG:-v19.11} 123 124 if [ "$(cat reference/VERSION 2>/dev/null)" != "$REF_GIT_TAG" ]; then 125 rm -rf reference 126 fi 127 128 if [ ! -d reference ]; then 129 refsrcdir=$(readlink -f $(pwd)/../dpdk-$REF_GIT_TAG) 130 git clone --single-branch -b $REF_GIT_TAG $REF_GIT_REPO $refsrcdir 131 meson $OPTS -Dexamples= $refsrcdir $refsrcdir/build 132 ninja -C $refsrcdir/build 133 DESTDIR=$(pwd)/reference ninja -C $refsrcdir/build install 134 devtools/gen-abi.sh reference 135 find reference/usr/local -name '*.a' -delete 136 rm -rf reference/usr/local/bin 137 rm -rf reference/usr/local/share 138 echo $REF_GIT_TAG > reference/VERSION 139 fi 140 141 DESTDIR=$(pwd)/install ninja -C build install 142 devtools/gen-abi.sh install 143 devtools/check-abi.sh reference install ${ABI_CHECKS_WARN_ONLY:-} 144fi 145 146if [ "$RUN_TESTS" = "true" ]; then 147 failed= 148 configure_coredump 149 sudo meson test -C build --suite fast-tests -t 3 || failed="true" 150 catch_coredump 151 [ "$failed" != "true" ] 152fi 153