0 | |
name: cereal linux ci
|
1 | |
on: [push, pull_request]
|
2 | |
|
3 | |
jobs:
|
4 | |
test_cereal_linux:
|
5 | |
runs-on: ubuntu-latest
|
6 | |
container: ${{ matrix.CONTAINER }}
|
7 | |
strategy:
|
8 | |
fail-fast: false
|
9 | |
matrix:
|
10 | |
include:
|
11 | |
- CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DSKIP_PERFORMANCE_COMPARISON=ON'
|
12 | |
COMPILER: 'g++-4.7'
|
13 | |
EXTRA_APT_PACKAGES: 'g++-4.7'
|
14 | |
CONTAINER: ubuntu:16.04
|
15 | |
NAME: ubuntu-16.04-g++4.7
|
16 | |
|
17 | |
- CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DSKIP_PERFORMANCE_COMPARISON=ON'
|
18 | |
COMPILER: 'g++-4.8'
|
19 | |
EXTRA_APT_PACKAGES: 'g++-4.8'
|
20 | |
CONTAINER: ubuntu:16.04
|
21 | |
NAME: ubuntu-16.04-g++4.8
|
22 | |
|
23 | |
- CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DSKIP_PERFORMANCE_COMPARISON=ON'
|
24 | |
COMPILER: 'g++-4.9'
|
25 | |
EXTRA_APT_PACKAGES: 'g++-4.9'
|
26 | |
CONTAINER: ubuntu:16.04
|
27 | |
NAME: ubuntu-16.04-g++4.9
|
28 | |
|
29 | |
- CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON'
|
30 | |
COMPILER: 'g++-5'
|
31 | |
EXTRA_APT_PACKAGES: 'g++-5'
|
32 | |
CONTAINER: ubuntu:16.04
|
33 | |
NAME: ubuntu-16.04-g++4.5
|
34 | |
|
35 | |
- COMPILER: 'g++-5'
|
36 | |
EXTRA_APT_PACKAGES: 'gcc-multilib g++-5-multilib linux-libc-dev'
|
37 | |
CONTAINER: ubuntu:16.04
|
38 | |
NAME: ubuntu-16.04-g++5-multilib
|
39 | |
|
40 | |
- CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON'
|
41 | |
COMPILER: 'g++-6'
|
42 | |
EXTRA_APT_PACKAGES: 'g++-6'
|
43 | |
CONTAINER: ubuntu:16.04
|
44 | |
NAME: ubuntu-16.04-g++6
|
45 | |
|
46 | |
- CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DCMAKE_CXX_STANDARD=17'
|
47 | |
COMPILER: 'g++-7'
|
48 | |
EXTRA_APT_PACKAGES: 'g++-7'
|
49 | |
CONTAINER: ubuntu:16.04
|
50 | |
NAME: ubuntu-16.04-g++7
|
51 | |
|
52 | |
- CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DCMAKE_CXX_STANDARD=17'
|
53 | |
COMPILER: 'g++-8'
|
54 | |
EXTRA_APT_PACKAGES: 'g++-8'
|
55 | |
CONTAINER: ubuntu:16.04
|
56 | |
NAME: ubuntu-16.04-g++8
|
57 | |
|
58 | |
- CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DCMAKE_CXX_STANDARD=17'
|
59 | |
COMPILER: 'g++-9'
|
60 | |
EXTRA_APT_PACKAGES: 'g++-9'
|
61 | |
CONTAINER: ubuntu:20.04
|
62 | |
NAME: ubuntu-20.04-g++9
|
63 | |
|
64 | |
- CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DCMAKE_CXX_STANDARD=17'
|
65 | |
COMPILER: 'g++-10'
|
66 | |
EXTRA_APT_PACKAGES: 'g++-10'
|
67 | |
CONTAINER: ubuntu:20.04
|
68 | |
NAME: ubuntu-20.04-g++10
|
69 | |
|
70 | |
- CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON'
|
71 | |
COMPILER: 'clang++-3.5'
|
72 | |
EXTRA_APT_PACKAGES: 'clang-3.5'
|
73 | |
LLVM_APT_SOURCE: 'deb http://apt.llvm.org/precise/ llvm-toolchain-precise-3.5 main'
|
74 | |
CONTAINER: ubuntu:16.04
|
75 | |
NAME: ubuntu-16.04-clang-3.5
|
76 | |
|
77 | |
- CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON'
|
78 | |
COMPILER: 'clang++-3.6'
|
79 | |
EXTRA_APT_PACKAGES: 'clang-3.6'
|
80 | |
LLVM_APT_SOURCE: 'deb http://apt.llvm.org/precise/ llvm-toolchain-precise-3.6 main'
|
81 | |
CONTAINER: ubuntu:16.04
|
82 | |
NAME: ubuntu-16.04-clang-3.6
|
83 | |
|
84 | |
- CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON'
|
85 | |
COMPILER: 'clang++-3.7'
|
86 | |
EXTRA_APT_PACKAGES: 'clang-3.7'
|
87 | |
LLVM_APT_SOURCE: 'deb http://apt.llvm.org/precise/ llvm-toolchain-precise-3.7 main'
|
88 | |
CONTAINER: ubuntu:16.04
|
89 | |
NAME: ubuntu-16.04-clang-3.7
|
90 | |
|
91 | |
- CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON'
|
92 | |
COMPILER: 'clang++-3.8'
|
93 | |
EXTRA_APT_PACKAGES: 'clang-3.8'
|
94 | |
LLVM_APT_SOURCE: 'deb http://apt.llvm.org/precise/ llvm-toolchain-precise-3.8 main'
|
95 | |
CONTAINER: ubuntu:16.04
|
96 | |
NAME: ubuntu-16.04-clang-3.8
|
97 | |
|
98 | |
- CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON'
|
99 | |
COMPILER: 'clang++-3.9'
|
100 | |
EXTRA_APT_PACKAGES: 'clang-3.9'
|
101 | |
LLVM_APT_SOURCE: 'deb http://apt.llvm.org/precise/ llvm-toolchain-precise-3.9 main'
|
102 | |
CONTAINER: ubuntu:16.04
|
103 | |
NAME: ubuntu-16.04-clang-3.9
|
104 | |
|
105 | |
- CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON'
|
106 | |
COMPILER: 'clang++-4.0'
|
107 | |
EXTRA_APT_PACKAGES: 'clang-4.0 g++-5'
|
108 | |
LLVM_APT_SOURCE: 'deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-4.0 main'
|
109 | |
CONTAINER: ubuntu:16.04
|
110 | |
NAME: ubuntu-16.04-clang-4.0
|
111 | |
|
112 | |
- CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON'
|
113 | |
COMPILER: 'clang++-5.0'
|
114 | |
EXTRA_APT_PACKAGES: 'clang-5.0 g++-7'
|
115 | |
LLVM_APT_SOURCE: 'deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-5.0 main'
|
116 | |
CONTAINER: ubuntu:16.04
|
117 | |
NAME: ubuntu-16.04-clang-5.0
|
118 | |
|
119 | |
- CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DCMAKE_CXX_STANDARD=17'
|
120 | |
COMPILER: 'clang++-5.0'
|
121 | |
EXTRA_APT_PACKAGES: 'clang-5.0 g++-7'
|
122 | |
LLVM_APT_SOURCE: 'deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-5.0 main'
|
123 | |
CONTAINER: ubuntu:16.04
|
124 | |
NAME: ubuntu-16.04-clang-5.0-cpp17
|
125 | |
|
126 | |
- CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DCMAKE_CXX_STANDARD=17'
|
127 | |
COMPILER: 'clang++-7'
|
128 | |
EXTRA_APT_PACKAGES: 'clang-7 g++-7'
|
129 | |
LLVM_APT_SOURCE: 'deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main'
|
130 | |
CONTAINER: ubuntu:16.04
|
131 | |
NAME: ubuntu-16.04-clang-7-cpp17
|
132 | |
|
133 | |
- CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DCMAKE_CXX_STANDARD=17 -DCLANG_USE_LIBCPP=ON -DSKIP_PERFORMANCE_COMPARISON=ON'
|
134 | |
COMPILER: 'clang++-8'
|
135 | |
EXTRA_APT_PACKAGES: 'clang-8 g++-8 libc++-8-dev libc++abi-8-dev'
|
136 | |
LLVM_APT_SOURCE: 'deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-8 main'
|
137 | |
CONTAINER: ubuntu:16.04
|
138 | |
NAME: ubuntu-16.04-clang-8-cpp17
|
139 | |
|
140 | |
- CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DCMAKE_CXX_STANDARD=17'
|
141 | |
COMPILER: 'clang++-9'
|
142 | |
EXTRA_APT_PACKAGES: 'clang-9'
|
143 | |
CONTAINER: ubuntu:20.04
|
144 | |
NAME: ubuntu-20.04-clang-9-cpp17
|
145 | |
|
146 | |
- CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DCMAKE_CXX_STANDARD=17'
|
147 | |
COMPILER: 'clang++-10'
|
148 | |
EXTRA_APT_PACKAGES: 'clang-10'
|
149 | |
CONTAINER: ubuntu:20.04
|
150 | |
NAME: ubuntu-20.04-clang-10-cpp17
|
151 | |
|
152 | |
- CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DCMAKE_CXX_STANDARD=17'
|
153 | |
COMPILER: 'clang++-11'
|
154 | |
EXTRA_APT_PACKAGES: 'clang-11'
|
155 | |
CONTAINER: ubuntu:20.04
|
156 | |
NAME: ubuntu-20.04-clang-11-cpp17
|
157 | |
|
158 | |
- CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DCMAKE_CXX_STANDARD=17'
|
159 | |
COMPILER: 'clang++-12'
|
160 | |
EXTRA_APT_PACKAGES: 'clang-12'
|
161 | |
CONTAINER: ubuntu:20.04
|
162 | |
NAME: ubuntu-20.04-clang-12-cpp17
|
163 | |
name: ${{ matrix.name }}
|
164 | |
|
165 | |
steps:
|
166 | |
- name: Checkout code
|
167 | |
uses: actions/checkout@v2
|
168 | |
|
169 | |
- name: install deps and test
|
170 | |
shell: bash
|
171 | |
env:
|
172 | |
CMAKE_OPTIONS: ${{ matrix.CMAKE_OPTIONS }}
|
173 | |
COMPILER: ${{ matrix.COMPILER }}
|
174 | |
EXTRA_APT_PACKAGES: ${{ matrix.EXTRA_APT_PACKAGES }}
|
175 | |
LLVM_APT_SOURCE: ${{ matrix.LLVM_APT_SOURCE }}
|
176 | |
run: |
|
177 | |
set -ex
|
178 | |
apt-get update -y
|
179 | |
DEBIAN_FRONTEND=noninteractive TZ=America/Los_Angeles apt-get install -y software-properties-common wget python3-pip make apt-transport-https
|
180 | |
|
181 | |
# Add apt repositories for older Ubuntu
|
182 | |
. /etc/os-release
|
183 | |
if [[ "${VERSION_ID}" == "16.04" ]]; then
|
184 | |
add-apt-repository ppa:ubuntu-toolchain-r/test -y
|
185 | |
add-apt-repository ppa:mhier/libboost-latest -y
|
186 | |
fi
|
187 | |
|
188 | |
if [[ "${LLVM_APT_SOURCE}" != "" ]]; then
|
189 | |
wget -qO - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -
|
190 | |
add-apt-repository "${LLVM_APT_SOURCE}"
|
191 | |
fi
|
192 | |
|
193 | |
apt-get update -y
|
194 | |
|
195 | |
# Install apt packages
|
196 | |
apt-get install libboost-serialization-dev libboost-dev ${EXTRA_APT_PACKAGES} -y
|
197 | |
pip3 install cmake
|
198 | |
|
199 | |
# Set compiler and env variables
|
200 | |
export CXX=${COMPILER}
|
201 | |
${CXX} --version
|
202 | |
DEPS_DIR="${PWD}/deps"
|
203 | |
mkdir -p "${DEPS_DIR}"
|
204 | |
pushd "${DEPS_DIR}"
|
205 | |
JOBS=2
|
206 | |
|
207 | |
# Install the right version of libc++
|
208 | |
LLVM_INSTALL=${DEPS_DIR}/llvm/install
|
209 | |
# if in linux and compiler clang and llvm not installed
|
210 | |
if [[ "${CXX}" == "clang"* && -n "$(ls -A ${LLVM_INSTALL})" ]]; then
|
211 | |
if [[ "${CXX}" == "clang++-3.6" ]]; then LLVM_VERSION="3.6.2";
|
212 | |
elif [[ "${CXX}" == "clang++-3.7" ]]; then LLVM_VERSION="3.7.1";
|
213 | |
elif [[ "${CXX}" == "clang++-3.8" ]]; then LLVM_VERSION="3.8.1";
|
214 | |
elif [[ "${CXX}" == "clang++-3.9" ]]; then LLVM_VERSION="3.9.1";
|
215 | |
fi
|
216 | |
LLVM_URL="http://llvm.org/releases/${LLVM_VERSION}/llvm-${LLVM_VERSION}.src.tar.xz"
|
217 | |
LIBCXX_URL="http://llvm.org/releases/${LLVM_VERSION}/libcxx-${LLVM_VERSION}.src.tar.xz"
|
218 | |
LIBCXXABI_URL="http://llvm.org/releases/${LLVM_VERSION}/libcxxabi-${LLVM_VERSION}.src.tar.xz"
|
219 | |
mkdir -p llvm llvm/build llvm/projects/libcxx llvm/projects/libcxxabi
|
220 | |
wget -O - ${LLVM_URL} | tar --strip-components=1 -xJ -C llvm
|
221 | |
wget -O - ${LIBCXX_URL} | tar --strip-components=1 -xJ -C llvm/projects/libcxx
|
222 | |
wget -O - ${LIBCXXABI_URL} | tar --strip-components=1 -xJ -C llvm/projects/libcxxabi
|
223 | |
(cd llvm/build && cmake .. -DCMAKE_INSTALL_PREFIX=${LLVM_INSTALL})
|
224 | |
(cd llvm/build/projects/libcxx && make install -j2)
|
225 | |
(cd llvm/build/projects/libcxxabi && make install -j2)
|
226 | |
export CXXFLAGS="-isystem ${LLVM_INSTALL}/include/c++/v1"
|
227 | |
export LDFLAGS="-L ${LLVM_INSTALL}/lib -l c++ -l c++abi"
|
228 | |
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${LLVM_INSTALL}/lib"
|
229 | |
fi
|
230 | |
|
231 | |
popd
|
232 | |
|
233 | |
# Build cereal and test
|
234 | |
cmake --version
|
235 | |
mkdir build && cd build
|
236 | |
cmake ${CMAKE_OPTIONS} .. && make -j4 VERBOSE=1
|
237 | |
ctest . --output-on-failure
|