blob: 60c5e56190cd6368d56bdf1743e3baf85ddde52d [file] [log] [blame]
sudo: false
dist: trusty
language: cpp
jobs:
include:
# Build with clang and run tests on the host system (Ubuntu).
- &test-ubuntu
stage: test
compiler: clang
python: 2.7
node_js: 7
addons:
apt:
sources: ['ubuntu-toolchain-r-test']
packages: ['cmake', 'g++-5']
before_install:
- export CC="${CC_COMPILER}"
- export CXX="${CXX_COMPILER}"
- export ASAN_OPTIONS="symbolize=1"
install:
- pip install --user flake8
before_script:
# Check the style of a subset of Python code until the other code is updated.
- flake8 ./scripts/
- ./check.py --test-waterfall --only-prepare
script:
- cmake . -DCMAKE_C_FLAGS="$COMPILER_FLAGS" -DCMAKE_CXX_FLAGS="$COMPILER_FLAGS"
- make -j2
- ./check.py --test-waterfall
env: |
CC_COMPILER="./test/wasm-install/wasm-install/bin/clang"
CXX_COMPILER="./test/wasm-install/wasm-install/bin/clang++"
- <<: *test-ubuntu
env: |
CC_COMPILER="./test/wasm-install/wasm-install/bin/clang"
CXX_COMPILER="./test/wasm-install/wasm-install/bin/clang++"
COMPILER_FLAGS="-fsanitize=undefined -fno-sanitize-recover=all -fsanitize-blacklist=$(pwd)/ubsan.blacklist"
- <<: *test-ubuntu
env: |
CC_COMPILER="./test/wasm-install/wasm-install/bin/clang"
CXX_COMPILER="./test/wasm-install/wasm-install/bin/clang++"
COMPILER_FLAGS="-fsanitize=address"
- <<: *test-ubuntu
env: |
CC_COMPILER="./test/wasm-install/wasm-install/bin/clang"
CXX_COMPILER="./test/wasm-install/wasm-install/bin/clang++"
COMPILER_FLAGS="-fsanitize=thread"
# Build with gcc 5 and run tests on the host system (Ubuntu).
- <<: *test-ubuntu
compiler: gcc
env: |
CC_COMPILER="gcc-5"
CXX_COMPILER="g++-5"
# Build with gcc 6.3 and run tests on Alpine Linux (inside chroot).
# Note: Alpine uses musl libc.
- &test-alpine
stage: test
sudo: true
language: minimal
compiler: gcc
env: ARCH=x86_64
before_install:
- &download-alpine-script
"wget 'https://raw.githubusercontent.com/alpinelinux/alpine-chroot-install/v0.6.0/alpine-chroot-install' \
&& echo 'a827a4ba3d0817e7c88bae17fe34e50204983d1e alpine-chroot-install' | sha1sum -c || travis_terminate 1"
- &define-alpine-func
alpine() { /alpine/enter-chroot -u "$USER" "$@"; }
install:
- sudo sh alpine-chroot-install -a "$ARCH" -p 'build-base cmake git nodejs python2'
before_script:
- alpine ./check.py --test-waterfall --only-prepare
script:
- alpine cmake .
- alpine make -j2
- alpine ./check.py --test-waterfall
# Build statically linked release binaries with gcc 6.3 on Alpine Linux
# (inside chroot). If building a tagged commit, then deploy release tarball
# to GitHub Releases.
- &build-alpine
<<: *test-alpine
stage: build
env: ARCH=x86_64
before_install:
# XXX: This is ugly hack to skip this job (and all derived) for pull
# requests, run it only on master branch and tags (to cut down build
# time). Replace it after Travis finally implement proper support for
# conditional jobs or stages.
- if [[ "$TRAVIS_PULL_REQUEST" != "false" || ( "$TRAVIS_BRANCH" != "master" && -z "$TRAVIS_TAG" ) ]]; then
travis_terminate 0;
fi
- *download-alpine-script
- *define-alpine-func
# Don't run before_script inherited from *test-alpine.
before_script: skip
script:
- alpine cmake -DCMAKE_BUILD_TYPE=Release
-DCMAKE_VERBOSE_MAKEFILE=ON
-DCMAKE_CXX_FLAGS="-static -no-pie"
-DCMAKE_C_FLAGS="-static -no-pie" .
- alpine make -j2
- alpine find bin/ -type f -perm -u=x -exec strip {} +
- alpine ls -lh bin/
# Check if the built executables are really statically linked.
- if [ -n "$(find bin/ -type f -perm -u=x -exec file {} + | grep -Fvw 'statically linked')" ]; then
file bin/*; false;
fi
before_deploy:
- PKGNAME="binaryen-$TRAVIS_TAG-$ARCH-linux"
- mv bin binaryen-$TRAVIS_TAG
- tar -czf $PKGNAME.tar.gz binaryen-$TRAVIS_TAG
- sha256sum $PKGNAME.tar.gz > $PKGNAME.tar.gz.sha256
deploy:
provider: releases
api_key:
secure: "cu6CD5BaycXdCylvcs+Fho5+OVTkh9mZwH8RTnNpXo9hAQzLJDFgcNBHeXHEHtcp4IWf/YZSMu48UKnpU9sP5iF0AS4rtuEBJk5gOKkgB8GWnuIOePFkfANAZMN+EncuUwhAdN56iOAESXqnlHYgmJjyRVCHOxiezuWTOYui4lxoIAdxvOMJc3E9yfzUq4Epm2GDszSDN7ObmRIJpVgDXD9Sze1Xv4IkbIwc0biCmduGGLp3ow2KM+RZ4tOF0c8P0ki49vOFHr6n2Vmqg0QCiVNd4JJBRBCGn6Tzip2jsTQewnUUvpYCZafLeRV//v//voNA6ZUz91yXR23GIhkfdlyuqnz3/7l335Sa749M1lpYfSRWvwg9mJEqP66mxqTrWzj1xSItr9T+p0WhSmRN/4UEJPuItYPSma6kfv+H7qhLa3ZYKECH8hHW79grYmUWtiX0vQVIgnctJGgboPNLfG/1mNtmCI241wK0S3zvL2okdZH8/PqxfllYHMBTUp9lUrop8eoLKPgHZPm6+V20dgTUgOuGTZzTWwQ7Uk/Pg8JMUgkre5y0eo6pP3z0vDW1NNFNhouJ5oGkAeK/HAznr8Q0zWWF1vGFhoyC8ok/IJ7yKxK9scJVPBDe4oox6tr1zlsxzNEYE0/mY3JjuWV0z8RgjrIAbRe8IpGTkYz5VOM="
file: binaryen-$TRAVIS_TAG-*.tar.gz*
file_glob: true
skip_cleanup: true
on:
tags: true
# Build binaries for other architectures using QEMU user-mode emulation.
# Note: We don't run tests for these architectures, because some fail under
# QEMU/binfmt and it takes too long time (hits time limit on Travis).
- <<: *build-alpine
env: ARCH=x86
- <<: *build-alpine
env: ARCH=aarch64
- <<: *build-alpine
env: ARCH=armhf
- <<: *build-alpine
env: ARCH=ppc64le
notifications:
email: false