KERNELSRC=""
CFLAGS="-Werror"
+EXTRA_OPTS=""
function install_kernel()
{
- wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.16.2.tar.gz
- tar xzvf linux-3.16.2.tar.gz > /dev/null
- cd linux-3.16.2
+ if [[ "$1" =~ ^3.* ]]; then
+ PREFIX="v3.x"
+ else
+ PREFIX="v2.6/longterm/v2.6.32"
+ fi
+
+ wget https://www.kernel.org/pub/linux/kernel/${PREFIX}/linux-${1}.tar.gz
+ tar xzvf linux-${1}.tar.gz > /dev/null
+ cd linux-${1}
make allmodconfig
- make net/openvswitch/
+
+ # Older kernels do not include openvswitch
+ if [ -d "net/openvswitch" ]; then
+ make net/openvswitch/
+ else
+ make net/bridge/
+ fi
+
KERNELSRC=$(pwd)
+ if [ ! "$DPDK" ]; then
+ EXTRA_OPTS="--with-linux=$(pwd)"
+ fi
echo "Installed kernel source in $(pwd)"
cd ..
}
cd dpdk-1.7.1
find ./ -type f | xargs sed -i 's/max-inline-insns-single=100/max-inline-insns-single=400/'
sed -ri 's,(CONFIG_RTE_BUILD_COMBINE_LIBS=).*,\1y,' config/common_linuxapp
+ sed -ri '/CONFIG_RTE_LIBNAME/a CONFIG_RTE_BUILD_FPIC=y' config/common_linuxapp
+ sed -ri '/EXECENV_CFLAGS = -pthread -fPIC/{s/$/\nelse ifeq ($(CONFIG_RTE_BUILD_FPIC),y)/;s/$/\nEXECENV_CFLAGS = -pthread -fPIC/}' mk/exec-env/linuxapp/rte.vars.mk
make config CC=gcc T=x86_64-native-linuxapp-gcc
make CC=gcc RTE_KERNELDIR=$KERNELSRC
echo "Installed DPDK source in $(pwd)"
}
if [ "$KERNEL" ] || [ "$DPDK" ]; then
- install_kernel
+ install_kernel $KERNEL
fi
-[ "$DPDK" ] && {
+if [ "$DPDK" ]; then
install_dpdk
# Disregard bad function cassts until DPDK is fixed
CFLAGS="$CFLAGS -Wno-error=bad-function-cast -Wno-error=cast-align"
-}
+elif [ $CC != "clang" ]; then
+ # DPDK headers currently trigger sparse errors
+ CFLAGS="$CFLAGS -Wsparse-error"
+fi
-configure_ovs $*
+configure_ovs $EXTRA_OPTS $*
+# Only build datapath if we are testing kernel w/o running testsuite
+if [ $KERNEL ] && [ ! "$TESTSUITE" ] && [ ! "$DPDK" ]; then
+ cd datapath
+fi
if [ $CC = "clang" ]; then
make CFLAGS="$CFLAGS -Wno-error=unused-command-line-argument"
make CFLAGS="$CFLAGS" C=1
fi
-if [ $TESTSUITE ]; then
+if [ $TESTSUITE ] && [ $CC != "clang" ]; then
if ! make distcheck; then
# testsuite.log is necessary for debugging.
cat */_build/tests/testsuite.log