0001
0002
0003
0004 case $1 in
0005 -h|--help)
0006 echo -e "$0 [-j <n>]"
0007 echo -e "\tTest the different ways of building bpftool."
0008 echo -e ""
0009 echo -e "\tOptions:"
0010 echo -e "\t\t-j <n>:\tPass -j flag to 'make'."
0011 exit 0
0012 ;;
0013 esac
0014
0015 J=$*
0016
0017
0018
0019 SCRIPT_REL_PATH=$(realpath --relative-to=$PWD $0)
0020 SCRIPT_REL_DIR=$(dirname $SCRIPT_REL_PATH)
0021 KDIR_ROOT_DIR=$(realpath $PWD/$SCRIPT_REL_DIR/../../../../)
0022 cd $KDIR_ROOT_DIR
0023 if [ ! -e tools/bpf/bpftool/Makefile ]; then
0024 echo -e "skip: bpftool files not found!\n"
0025 exit 4
0026 fi
0027
0028 ERROR=0
0029 TMPDIR=
0030
0031
0032 return_value() {
0033 if [ -d "$TMPDIR" ] ; then
0034 rm -rf -- $TMPDIR
0035 fi
0036 exit $ERROR
0037 }
0038 trap return_value EXIT
0039
0040 check() {
0041 local dir=$(realpath $1)
0042
0043 echo -n "binary: "
0044
0045 find $dir -type f -executable -name bpftool -print -exec false {} + && \
0046 ERROR=1 && printf "FAILURE: Did not find bpftool\n"
0047 }
0048
0049 make_and_clean() {
0050 echo -e "\$PWD: $PWD"
0051 echo -e "command: make -s $* >/dev/null"
0052 make $J -s $* >/dev/null
0053 if [ $? -ne 0 ] ; then
0054 ERROR=1
0055 fi
0056 if [ $
0057 check ${@: -1}
0058 else
0059 check .
0060 fi
0061 (
0062 if [ $
0063 cd ${@: -1}
0064 fi
0065 make -s clean
0066 )
0067 echo
0068 }
0069
0070 make_with_tmpdir() {
0071 local ARGS
0072
0073 TMPDIR=$(mktemp -d)
0074 if [ $
0075 ARGS=${@:1:(($
0076 fi
0077 echo -e "\$PWD: $PWD"
0078 echo -e "command: make -s $ARGS ${@: -1}=$TMPDIR/ >/dev/null"
0079 make $J -s $ARGS ${@: -1}=$TMPDIR/ >/dev/null
0080 if [ $? -ne 0 ] ; then
0081 ERROR=1
0082 fi
0083 check $TMPDIR
0084 rm -rf -- $TMPDIR
0085 echo
0086 }
0087
0088 echo "Trying to build bpftool"
0089 echo -e "... through kbuild\n"
0090
0091 if [ -f ".config" ] ; then
0092 make_and_clean tools/bpf
0093
0094
0095
0096 make -C tools/bpf/runqslower OUTPUT=${KDIR_ROOT_DIR}/tools/bpf/runqslower/ clean
0097
0098
0099
0100
0101
0102 echo -e "skip: make tools/bpf OUTPUT=<dir> (not supported)\n"
0103
0104 make_with_tmpdir tools/bpf O
0105 else
0106 echo -e "skip: make tools/bpf (no .config found)\n"
0107 echo -e "skip: make tools/bpf OUTPUT=<dir> (not supported)\n"
0108 echo -e "skip: make tools/bpf O=<dir> (no .config found)\n"
0109 fi
0110
0111 echo -e "... from kernel source tree\n"
0112
0113 make_and_clean -C tools/bpf/bpftool
0114
0115 make_with_tmpdir -C tools/bpf/bpftool OUTPUT
0116
0117 make_with_tmpdir -C tools/bpf/bpftool O
0118
0119 echo -e "... from tools/\n"
0120 cd tools/
0121
0122 make_and_clean bpf
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140 echo -e "skip: make bpf OUTPUT=<dir> (not supported)\n"
0141
0142 make_with_tmpdir bpf O
0143
0144 echo -e "... from bpftool's dir\n"
0145 cd bpf/bpftool
0146
0147 make_and_clean
0148
0149 make_with_tmpdir OUTPUT
0150
0151 make_with_tmpdir O