]> git.proxmox.com Git - mirror_ovs.git/blob - .travis/linux-build.sh
Python3 compatibility: fix integer problems
[mirror_ovs.git] / .travis / linux-build.sh
1 #!/bin/bash
2
3 set -o errexit
4
5 KERNELSRC=""
6 CFLAGS="-Werror"
7 SPARSE_FLAGS=""
8 EXTRA_OPTS=""
9
10 function install_kernel()
11 {
12 if [[ "$1" =~ ^4.* ]]; then
13 PREFIX="v4.x"
14 elif [[ "$1" =~ ^3.* ]]; then
15 PREFIX="v3.x"
16 else
17 PREFIX="v2.6/longterm/v2.6.32"
18 fi
19
20 wget https://www.kernel.org/pub/linux/kernel/${PREFIX}/linux-${1}.tar.gz
21 tar xzvf linux-${1}.tar.gz > /dev/null
22 cd linux-${1}
23 make allmodconfig
24
25 # Cannot use CONFIG_KCOV: -fsanitize-coverage=trace-pc is not supported by compiler
26 sed -i 's/CONFIG_KCOV=y/CONFIG_KCOV=n/' .config
27
28 # stack validation depends on tools/objtool, but objtool does not compile on travis.
29 # It is giving following error.
30 # >>> GEN arch/x86/insn/inat-tables.c
31 # >>> Semantic error at 40: Unknown imm opnd: AL
32 # So for now disable stack-validation for the build.
33
34 sed -i 's/CONFIG_STACK_VALIDATION=y/CONFIG_STACK_VALIDATION=n/' .config
35 make oldconfig
36
37 # Older kernels do not include openvswitch
38 if [ -d "net/openvswitch" ]; then
39 make net/openvswitch/
40 else
41 make net/bridge/
42 fi
43
44 KERNELSRC=$(pwd)
45 if [ ! "$DPDK" ]; then
46 EXTRA_OPTS="--with-linux=$(pwd)"
47 fi
48 echo "Installed kernel source in $(pwd)"
49 cd ..
50 }
51
52 function install_dpdk()
53 {
54 if [ -n "$DPDK_GIT" ]; then
55 git clone $DPDK_GIT dpdk-stable-$1
56 cd dpdk-stable-$1
57 git checkout tags/v$1
58 else
59 wget http://fast.dpdk.org/rel/dpdk-$1.tar.gz
60 tar xzvf dpdk-$1.tar.gz > /dev/null
61 cd dpdk-stable-$1
62 fi
63 find ./ -type f | xargs sed -i 's/max-inline-insns-single=100/max-inline-insns-single=400/'
64 echo 'CONFIG_RTE_BUILD_FPIC=y' >>config/common_linuxapp
65 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
66 make config CC=gcc T=x86_64-native-linuxapp-gcc
67 make CC=gcc RTE_KERNELDIR=$KERNELSRC
68 echo "Installed DPDK source in $(pwd)"
69 cd ..
70 }
71
72 function configure_ovs()
73 {
74 ./boot.sh && ./configure $*
75 }
76
77 if [ "$KERNEL" ] || [ "$DPDK" ]; then
78 install_kernel $KERNEL
79 fi
80
81 if [ "$DPDK" ]; then
82 if [ -z "$DPDK_VER" ]; then
83 DPDK_VER="16.11.2"
84 fi
85 install_dpdk $DPDK_VER
86 if [ "$CC" = "clang" ]; then
87 # Disregard cast alignment errors until DPDK is fixed
88 CFLAGS="$CFLAGS -Wno-cast-align"
89 fi
90 EXTRA_OPTS="$EXTRA_OPTS --with-dpdk=./dpdk-stable-$DPDK_VER/build"
91 elif [ "$CC" != "clang" ]; then
92 # DPDK headers currently trigger sparse errors
93 SPARSE_FLAGS="$SPARSE_FLAGS -Wsparse-error"
94 fi
95
96 configure_ovs $EXTRA_OPTS $*
97
98 # Only build datapath if we are testing kernel w/o running testsuite
99 if [ "$KERNEL" ] && [ ! "$TESTSUITE" ] && [ ! "$DPDK" ]; then
100 cd datapath
101 fi
102
103 if [ "$CC" = "clang" ]; then
104 make CFLAGS="$CFLAGS -Wno-error=unused-command-line-argument"
105 elif [[ $BUILD_ENV =~ "-m32" ]]; then
106 # Disable sparse for 32bit builds on 64bit machine
107 make CFLAGS="$CFLAGS $BUILD_ENV"
108 else
109 make CFLAGS="$CFLAGS $BUILD_ENV $SPARSE_FLAGS" C=1
110 fi
111
112 if [ "$TESTSUITE" ] && [ "$CC" != "clang" ]; then
113 if ! make distcheck RECHECK=yes; then
114 # testsuite.log is necessary for debugging.
115 cat */_build/tests/testsuite.log
116 exit 1
117 fi
118 fi
119
120 exit 0