Do not use asm-based 16-byte CAS if compiled with TSan (Linux/x64)
[platform/upstream/libatomic_ops.git] / .travis.yml
1 language: c
2
3 matrix:
4   include:
5   - os: linux
6     compiler: clang
7   - os: linux
8     compiler: gcc
9   - os: osx
10   - os: linux
11     dist: trusty
12     env:
13     - MAKEFILE_TARGET=distcheck
14     - AUTOMAKE_VER=1.15
15     - M4_VER=1.4.18
16     - LIBTOOL_VER=2.4.6
17   - os: linux
18     env:
19     - MAKEFILE_TARGET=dist
20   - os: linux
21     compiler: clang
22     env:
23     - CFLAGS_EXTRA="-O3 -march=native"
24     - CONF_OPTIONS="--enable-assertions"
25   - os: linux
26     compiler: gcc
27     env:
28     - CFLAGS_EXTRA="-O3 -march=native"
29     - CONF_OPTIONS="--enable-assertions"
30   - os: osx
31     env:
32     - CFLAGS_EXTRA="-O3 -march=native"
33     - CONF_OPTIONS="--enable-assertions"
34   - os: linux
35     compiler: clang
36     dist: trusty
37     env:
38     - CFLAGS_EXTRA="-march=native -std=c11"
39   - os: linux
40     compiler: gcc
41     env:
42     - CFLAGS_EXTRA="-march=native -D _FORTIFY_SOURCE=2 -std=c89"
43   - os: linux
44     addons:
45       apt:
46         packages:
47         - gcc-multilib
48     compiler: clang
49     env:
50     - CFLAGS_EXTRA="-m32 -march=native"
51     - CONF_OPTIONS="--enable-assertions"
52   - os: linux
53     addons:
54       apt:
55         packages:
56         - gcc-multilib
57     compiler: clang
58     env:
59     - CFLAGS_EXTRA="-m32 -march=native"
60     - CONF_OPTIONS="--disable-atomic-intrinsics"
61   - os: linux
62     addons:
63       apt:
64         packages:
65         - gcc-multilib
66     compiler: gcc
67     env:
68     - CFLAGS_EXTRA="-m32 -march=native"
69     - CONF_OPTIONS="--enable-assertions"
70   - os: linux
71     addons:
72       apt:
73         packages:
74         - gcc-multilib
75     compiler: gcc
76     env:
77     - CFLAGS_EXTRA="-m32 -march=native"
78     - CONF_OPTIONS="--disable-atomic-intrinsics"
79   - os: osx
80     env:
81     - CFLAGS_EXTRA="-m32 -march=native -D _FORTIFY_SOURCE=2"
82     - CONF_OPTIONS="--enable-assertions"
83   - os: linux
84     compiler: gcc
85     env:
86     - CFLAGS_EXTRA="-D AO_GENERALIZE_ASM_BOOL_CAS -D AO_USE_NANOSLEEP -D AO_USE_NO_SIGNALS"
87     - CONF_OPTIONS="--enable-assertions"
88   - os: linux
89     addons:
90       apt:
91         packages:
92         - clang-4.0
93         sources:
94         - llvm-toolchain-trusty-4.0
95     compiler: clang-4.0
96     dist: trusty
97     env:
98     - CFLAGS_EXTRA="-O3 -march=native -std=c11"
99   - os: linux
100     addons:
101       apt:
102         packages:
103         - clang-4.0
104         - gcc-multilib
105         sources:
106         - llvm-toolchain-trusty-4.0
107     compiler: clang-4.0
108     dist: trusty
109     env:
110     - CFLAGS_EXTRA="-m32 -O3 -march=native"
111   - os: linux
112     addons:
113       apt:
114         packages:
115         - gcc-5
116         sources:
117         - ubuntu-toolchain-r-test
118     compiler: gcc-5
119     dist: trusty
120     env:
121     - CFLAGS_EXTRA="-O3 -march=native"
122   - os: linux
123     addons:
124       apt:
125         packages:
126         - gcc-5
127         - gcc-5-multilib
128         sources:
129         - ubuntu-toolchain-r-test
130     compiler: gcc-5
131     dist: trusty
132     env:
133     - CFLAGS_EXTRA="-m32 -O3 -march=native"
134   - os: linux
135     addons:
136       apt:
137         packages:
138         - gcc-5
139         - gcc-5-multilib
140         sources:
141         - ubuntu-toolchain-r-test
142     compiler: gcc-5
143     dist: trusty
144     env:
145     - CFLAGS_EXTRA="-mx32 -march=native -D _FORTIFY_SOURCE=2"
146     - CONF_OPTIONS="--enable-assertions --enable-shared"
147   - os: linux
148     addons:
149       apt:
150         packages:
151         - gcc-5
152         - gcc-5-multilib
153         sources:
154         - ubuntu-toolchain-r-test
155     compiler: gcc-5
156     dist: trusty
157     env:
158     - CFLAGS_EXTRA="-mx32 -march=native"
159     - CONF_OPTIONS="--disable-atomic-intrinsics --disable-docs"
160   - os: linux
161     compiler: clang
162     env:
163     - CFLAGS_EXTRA="-fsanitize=address -march=native -fno-common -fno-omit-frame-pointer"
164     - TESTS_CUSTOM_RUN=true
165   - os: osx
166     env:
167     - CFLAGS_EXTRA="-fsanitize=address -m32 -fno-omit-frame-pointer"
168   - os: linux
169     compiler: clang
170     env:
171     - CFLAGS_EXTRA="-fsanitize=memory,undefined -march=native -fno-omit-frame-pointer"
172     - TESTS_CUSTOM_RUN=true
173     sudo: required
174   - os: linux
175     compiler: clang
176     env:
177     - CFLAGS_EXTRA="-fsanitize=thread -fno-omit-frame-pointer"
178   - os: linux
179     compiler: clang
180     env:
181     - CONF_OPTIONS="--disable-atomic-intrinsics"
182     - CFLAGS_EXTRA="-march=native"
183   - os: linux
184     addons:
185       apt:
186         packages:
187         - lcov
188     compiler: gcc
189     env:
190     - CONF_OPTIONS="--enable-gcov --enable-shared"
191     - REPORT_COVERAGE=true
192     - CFLAGS_EXTRA="-march=native -D DEBUG_RUN_ONE_TEST -D VERBOSE"
193   - os: linux
194     env:
195     - CPPCHECK_ENABLE="-j16 -q --enable=information,performance,portability,style,warning"
196     - MAKEFILE_TARGET=all
197     sudo: required
198   - os: linux
199     env:
200     - CPPCHECK_ENABLE="-q --enable=unusedFunction -D AO_TEST_EMULATION"
201     - MAKEFILE_TARGET=all
202     sudo: required
203   - os: linux
204     addons:
205       apt:
206         packages:
207         - clang-4.0
208         sources:
209         - llvm-toolchain-trusty-4.0
210     compiler: clang-4.0
211     dist: trusty
212     env:
213     - CSA_CHECK=true
214     - MAKEFILE_TARGET=all
215     - CFLAGS_EXTRA="-D AO_TRACE_MALLOC -D VERBOSE"
216   - os: linux
217     addons:
218       apt:
219         packages:
220         - musl-tools
221     compiler: musl-gcc
222     dist: trusty
223     env:
224     - CFLAGS_EXTRA="-march=native"
225     - CONF_OPTIONS="--enable-assertions"
226   - os: linux
227     addons:
228       apt:
229         packages:
230         - gcc-mingw-w64
231     compiler: x86_64-w64-mingw32-gcc
232     dist: trusty
233     env:
234     - CONF_OPTIONS="--host=x86_64-w64-mingw32 --enable-shared"
235     - MAKEFILE_TARGET=all
236   - os: linux
237     addons:
238       apt:
239         packages:
240         - gcc-multilib
241     env:
242     - CROSS_GCC_VER=4.9.0
243     - NOLIBC_ARCH_ABI=aarch64-linux
244   - os: linux
245     addons:
246       apt:
247         packages:
248         - gcc-multilib
249     env:
250     - CROSS_GCC_VER=4.9.0
251     - NOLIBC_ARCH_ABI=alpha-linux
252   - os: linux
253     addons:
254       apt:
255         packages:
256         - gcc-multilib
257     env:
258     - CROSS_GCC_VER=4.9.0
259     - NOLIBC_ARCH_ABI=arm-unknown-linux-gnueabi
260   - os: linux
261     addons:
262       apt:
263         packages:
264         - gcc-4.6
265         - gcc-multilib
266         sources:
267         - ubuntu-toolchain-r-test
268     compiler: gcc-4.6
269     env:
270     - CROSS_GCC_VER=4.2.4
271     - NOLIBC_ARCH_ABI=avr32-linux
272     - CFLAGS_EXTRA="-fno-strict-aliasing"
273   - os: linux
274     addons:
275       apt:
276         packages:
277         - gcc-4.6
278         - gcc-multilib
279         sources:
280         - ubuntu-toolchain-r-test
281     compiler: gcc-4.6
282     env:
283     - CROSS_GCC_VER=4.6.3
284     - NOLIBC_ARCH_ABI=cris-linux
285   - os: linux
286     addons:
287       apt:
288         packages:
289         - gcc-multilib
290     env:
291     - CROSS_GCC_VER=4.9.0
292     - NOLIBC_ARCH_ABI=hppa-linux
293   - os: linux
294     addons:
295       apt:
296         packages:
297         - gcc-multilib
298     env:
299     - CROSS_GCC_VER=4.9.0
300     - NOLIBC_ARCH_ABI=ia64-linux
301   - os: linux
302     addons:
303       apt:
304         packages:
305         - gcc-multilib
306     env:
307     - CROSS_GCC_VER=4.9.0
308     - NOLIBC_ARCH_ABI=m68k-linux
309   - os: linux
310     addons:
311       apt:
312         packages:
313         - gcc-multilib
314     env:
315     - CROSS_GCC_VER=4.9.0
316     - NOLIBC_ARCH_ABI=mips-linux
317   - os: linux
318     addons:
319       apt:
320         packages:
321         - gcc-multilib
322     env:
323     - CROSS_GCC_VER=4.9.0
324     - NOLIBC_ARCH_ABI=mips64-linux
325   - os: linux
326     addons:
327       apt:
328         packages:
329         - gcc-multilib
330     env:
331     - CROSS_GCC_VER=4.9.0
332     - NOLIBC_ARCH_ABI=powerpc-linux
333   - os: linux
334     addons:
335       apt:
336         packages:
337         - gcc-multilib
338     env:
339     - CROSS_GCC_VER=4.9.0
340     - NOLIBC_ARCH_ABI=powerpc64-linux
341   - os: linux
342     addons:
343       apt:
344         packages:
345         - gcc-multilib
346     env:
347     - CROSS_GCC_VER=4.9.0
348     - NOLIBC_ARCH_ABI=ppc64le-linux
349   - os: linux
350     addons:
351       apt:
352         packages:
353         - gcc-multilib
354     env:
355     - CROSS_GCC_VER=4.9.0
356     - NOLIBC_ARCH_ABI=s390x-linux
357   - os: linux
358     addons:
359       apt:
360         packages:
361         - gcc-4.6
362         - gcc-multilib
363         sources:
364         - ubuntu-toolchain-r-test
365     compiler: gcc-4.6
366     env:
367     - CROSS_GCC_VER=4.6.3
368     - NOLIBC_ARCH_ABI=sh4-linux
369   - os: linux
370     addons:
371       apt:
372         packages:
373         - gcc-multilib
374     env:
375     - CROSS_GCC_VER=4.9.0
376     - NOLIBC_ARCH_ABI=sparc-linux
377     - CFLAGS_EXTRA="-D AO_NO_SPARC_V9"
378   - os: linux
379     addons:
380       apt:
381         packages:
382         - gcc-multilib
383     env:
384     - CROSS_GCC_VER=4.9.0
385     - NOLIBC_ARCH_ABI=sparc64-linux
386   - os: linux
387     addons:
388       apt:
389         packages:
390         - gcc-4.6
391         - gcc-multilib
392         sources:
393         - ubuntu-toolchain-r-test
394     compiler: gcc-4.6
395     env:
396     - CROSS_GCC_VER=4.6.2
397     - NOLIBC_ARCH_ABI=tilegx-linux
398
399 before_install:
400 - if [[ "$CPPCHECK_ENABLE" != "" ]]; then
401     git clone --depth=3 https://github.com/danmar/cppcheck.git
402               ~/cppcheck -b master;
403     make --directory ~/cppcheck -j CXXFLAGS="-O3 -march=native -D NDEBUG";
404   fi
405 - if [[ "$CROSS_GCC_VER" != "" ]]; then
406     BUILD_ARCH=x86_64;
407     TAR_FOLDER_URL=https://www.kernel.org/pub/tools/crosstool/files/bin/$BUILD_ARCH/$CROSS_GCC_VER;
408     TARFILE=$BUILD_ARCH-gcc-$CROSS_GCC_VER-nolibc_$NOLIBC_ARCH_ABI.tar.xz;
409     wget -O - $TAR_FOLDER_URL/$TARFILE | tar xf - --xz --directory ~;
410     CROSS_CC=~/gcc-$CROSS_GCC_VER-nolibc/$NOLIBC_ARCH_ABI/bin/$NOLIBC_ARCH_ABI-gcc;
411     export C_INCLUDE_PATH=/usr/include;
412     MAKEFILE_TARGET=check-nolink;
413   fi
414 - if [[ "$AUTOMAKE_VER" != "" || "$LIBTOOL_VER" != "" || "$M4_VER" != "" ]]; then
415     GNUTOOLS_ROOT=`pwd`/../gnu-tools;
416     export PATH=$GNUTOOLS_ROOT/bin:$PATH;
417   fi
418 - if [[ "$M4_VER" != "" ]]; then
419     M4_XZ_URL=https://ftp.gnu.org/gnu/m4/m4-$M4_VER.tar.xz;
420     wget -O - $M4_XZ_URL | tar xf - --xz --directory ~;
421     (cd ~/m4-$M4_VER && ./configure --prefix=$GNUTOOLS_ROOT && make -j check && make install);
422   fi
423 - if [[ "$LIBTOOL_VER" != "" ]]; then
424     LIBTOOL_XZ_URL=https://ftp.gnu.org/gnu/libtool/libtool-$LIBTOOL_VER.tar.xz;
425     wget -O - $LIBTOOL_XZ_URL | tar xf - --xz --directory ~;
426     (cd ~/libtool-$LIBTOOL_VER && ./configure --prefix=$GNUTOOLS_ROOT && make -j && make install);
427   fi
428 - if [[ "$AUTOMAKE_VER" != "" ]]; then
429     AUTOMAKE_XZ_URL=https://ftp.gnu.org/gnu/automake/automake-$AUTOMAKE_VER.tar.xz;
430     wget -O - $AUTOMAKE_XZ_URL | tar xf - --xz --directory ~;
431     (cd ~/automake-$AUTOMAKE_VER && ./configure --prefix=$GNUTOOLS_ROOT && make -j && make install);
432   fi
433 - if [[ "$MAKEFILE_TARGET" == "dist"* ]]; then
434     autoconf --version;
435     automake --version;
436     m4 --version;
437     libtool --version || true;
438   fi
439 - if [[ "$MAKEFILE_TARGET" == "" ]]; then MAKEFILE_TARGET=check; fi
440
441 install:
442 - "./autogen.sh"
443 - if [[ "$REPORT_COVERAGE" == true ]]; then gem install coveralls-lcov; fi
444
445 script:
446 - ./configure $CONF_OPTIONS --enable-werror
447 - if [[ "$CSA_CHECK" != true && "$CPPCHECK_ENABLE" == "" ]]; then
448     cat src/config.h;
449   fi
450 - if [[ "$CROSS_GCC_VER" != "" ]]; then CC=$CROSS_CC; fi
451 - make -j $MAKEFILE_TARGET CC=$CC CFLAGS_EXTRA="$CFLAGS_EXTRA"
452 - if [ -f tests/test_atomic.log ]; then cat tests/test_atomic*.log; fi
453 - if [[ "$CSA_CHECK" == true ]]; then
454     ${CC} --analyze -Xanalyzer -analyzer-output=text -Werror -I src
455           $CFLAGS_EXTRA tests/*.c src/*.c;
456   fi
457 - if [[ "$CPPCHECK_ENABLE" != "" ]]; then
458     ~/cppcheck/cppcheck -f --error-exitcode=2 -U long -D CPPCHECK -I src
459                         $CPPCHECK_ENABLE tests/*.c src/*.c;
460   fi
461 - if [[ "$TESTS_CUSTOM_RUN" == true ]]; then
462     ASAN_OPTIONS="detect_leaks=1" UBSAN_OPTIONS="halt_on_error=1"
463         make -C tests check-without-test-driver;
464   fi
465
466 after_success:
467 - if [[ "$REPORT_COVERAGE" == true ]]; then
468     lcov --capture --directory src --directory tests --output-file coverage.info;
469     lcov --remove coverage.info '/usr/*' 'tests/*' --output-file coverage.info;
470     lcov --list coverage.info;
471     coveralls-lcov --repo-token ${COVERALLS_TOKEN} coverage.info;
472   fi
473
474 deploy:
475   provider: releases
476   api_key:
477     secure: wDAkRwV0lFrzLqdMhrnzD+fVZDODB32q2riJKXKZ3eC70VdliJzX59G60iJqIdN6YSSGGjpDTcaKTmim/T1zgAW+UIcXvpveX3jtocmsJJemZyFKAT++hHbeakNr4Mhgs0ddv3+JsgX375KOmL+ZkUzW0+5uIf9CXK80kE5v6E6p5LC6+Jg8Tqj2uSmUDfrYCFdIDQ901vAjxdPbFsFL8STy0ahBhUCrTThi9emAMR2vBwxf+0We58la936hMFmXs320ZtYN4fksuxNMgQu/3HL/UZIINT2IXgstWiNoU3yK6Z5IvOKWw0iPLMg7SS6L4WYJTu4Z26YnIlJ8XM3f7hO+c+jdffup59O1oklCl6JwlbqNFWtZhfJ+TW8fX8rpsvZIovBI4oOsZthpMNcvb3ZZ6UczUbhaInCvcYl5aTw/8K63Vh2HhKTFdMYMLn1X+qNIfXyKRL15C8VZOHB3Os14G03FNPlTqFE4IRnU3TyXTKBIwYOXf5Nb7fmOYZ11lHejco3rE0n3MiqIL0QJAAwExozV6Af/aJefyTWqfycgaGEfUzBQQpcMVlrDJg1I+LU7vExYYYYYoVPCKHn3CDsmdftUpJcPeKMHuasrfp54RBnY+B9s+hJQRtA7C70JbtoJpC+nxfwIzprBkdLudD+mI52zgFmU7JC1UeWDBik=
478   file: libatomic_ops-*.tar.gz
479   file_glob: true
480   skip_cleanup: true
481   on:
482     condition: $MAKEFILE_TARGET = distcheck
483     repo: ivmai/libatomic_ops
484     tags: true