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