forked from p4lang/p4c
-
Notifications
You must be signed in to change notification settings - Fork 0
/
travis-build
134 lines (107 loc) · 3.47 KB
/
travis-build
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#!/bin/bash
# Script for building in a Docker container on Travis.
set -e # Exit on error.
export P4C_PYTHON3="python3" # Python3 is required for p4c to run, P4C_DEPS would otherwise uninstall it
export P4C_DEPS="bison \
build-essential \
cmake \
curl \
flex \
g++ \
libboost-dev \
libboost-graph-dev \
libboost-iostreams1.58-dev \
libfl-dev \
libgc-dev \
libgmp-dev \
pkg-config \
python3-pip \
python3-setuptools \
tcpdump"
export P4C_EBPF_DEPS="libpcap-dev \
libelf-dev \
zlib1g-dev \
llvm \
clang \
net-tools"
export P4C_RUNTIME_DEPS="cpp \
libboost-graph1.58.0 \
libboost-iostreams1.58.0 \
libgc1c2 \
libgmp10 \
libgmpxx4ldbl \
python3"
export P4C_PIP_PACKAGES="ipaddr \
pyroute2 \
ply==3.8 \
scapy==2.4.4"
apt-get update
apt-get install -y --no-install-recommends \
${P4C_DEPS} \
${P4C_PYTHON3} \
${P4C_EBPF_DEPS} \
${P4C_RUNTIME_DEPS} \
git
# we want to use Python as the default so change the symlinks
ln -sf /usr/bin/python3 /usr/bin/python
ln -sf /usr/bin/pip3 /usr/bin/pip
pip3 install wheel
pip3 install $P4C_PIP_PACKAGES
# Build libbpf for eBPF tests.
cd /p4c
backends/ebpf/build_libbpf
cd -
# We also need to build iproute2 from source to support Ubuntu 16.04 eBPF.
cd /tmp
git clone -b v5.0.0 git://git.kernel.org/pub/scm/linux/kernel/git/shemminger/iproute2.git
cd /tmp/iproute2
./configure
make -j `getconf _NPROCESSORS_ONLN` && \
make install
cd /p4c
rm -rf /tmp/pip
# iproute2-end
# ! ------ BEGIN VALIDATION -----------------------------------------------
function build_gauntlet() {
# Also pull Gauntlet for translation validation
git clone -b stable https://github.com/p4gauntlet/gauntlet /gauntlet
cd /gauntlet
git submodule update --init --recursive
cd -
# Symlink the parent p4c repository with Gauntlet
rm -rf /gauntlet/modules/p4c
ln -s /p4c /gauntlet/modules/p4c
# Symlink the toz3 extension for the p4 compiler
mkdir -p /p4c/extensions
ln -sf /gauntlet/modules/toz3 /p4c/extensions/toz3
# Install Gauntlet Python dependencies locally
# Unfortunately we need Python 3.6, which Xenial does not have
add-apt-repository ppa:deadsnakes/ppa
apt update
apt install -y python3.6
# pytest-xdist to parallelize tests
# dataclasses for Python3.6 compatibility
python3.6 -m pip install z3-solver pytest pytest-xdist==1.34.0 dataclasses
}
# These steps are necessary to validate the correct compilation of the P4C test
# suite programs. See also https://github.com/p4gauntlet/gauntlet.
build_gauntlet
# ! ------ END VALIDATION -----------------------------------------------
function build() {
if [ -e build ]; then /bin/rm -rf build; fi
mkdir -p build
cd build
cmake .. '-DCMAKE_CXX_FLAGS:STRING=-O3' "$@"
make
}
build "-DENABLE_UNIFIED_COMPILATION=${ENABLE_UNIFIED_COMPILATION}"
make install
/usr/local/bin/ccache -p -s
if [[ "${IMAGE_TYPE}" == "build" ]] ; then
apt-get purge -y ${P4C_DEPS} git
apt-get autoremove --purge -y
rm -rf /p4c /var/cache/apt/* /var/lib/apt/lists/*
echo 'Build image ready'
elif [[ "${IMAGE_TYPE}" == "test" ]] ; then
echo 'Test image ready'
fi