blob: 1a94debec601eb80e5c43692d39ea03c20b68f39 [file] [log] [blame]
sudo: false
dist: trusty
language: cpp
stages:
- name: test
- name: build
# Don't run build stage for pull requests and other branches than master
# to save time and resources.
if: type != pull_request AND (branch = master OR tag IS present)
DEPLOY_TO_GITHUB: &DEPLOY_TO_GITHUB
before_deploy:
- PKGNAME="binaryen-$TRAVIS_TAG-$ARCH"
- mv bin binaryen-$TRAVIS_TAG
- tar -czf $PKGNAME.tar.gz binaryen-$TRAVIS_TAG
- shasum -a 256 $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
jobs:
include:
# OSX Binary
- env: JOB=dist-osx MACOSX_DEPLOYMENT_TARGET=10.9 ARCH=x86_64-apple-darwin
os: osx
stage: build
script:
- cmake . && make
<<: *DEPLOY_TO_GITHUB
# Build with clang and run tests on the host system (Ubuntu).
- &test-ubuntu
stage: test
compiler: clang
python:
- 2.7
- 3.6
addons:
apt:
sources: ['ubuntu-toolchain-r-test']
packages: ['cmake', 'g++-5']
before_install:
- export ASAN_OPTIONS="symbolize=1"
install:
- nvm install 10
- nvm use 10
- pip install --user flake8==3.4.1
# get jsvu in order to get more js engines
- npm install jsvu -g
- export PATH="${HOME}/.jsvu:${PATH}"
- jsvu --os=linux64 --engines=spidermonkey
script:
- set -o errexit
- flake8
# ensure generated parser is up to date
- ./scripts/gen-s-parser.py | diff src/gen-s-parser.inc -
- BUILD_SUBDIR=${BUILD_SUBDIR:-.}
- mkdir -p ${BUILD_SUBDIR} && cd ${BUILD_SUBDIR}
- cmake ${TRAVIS_BUILD_DIR} -DCMAKE_C_FLAGS="$COMPILER_FLAGS" -DCMAKE_CXX_FLAGS="$COMPILER_FLAGS" -DCMAKE_INSTALL_PREFIX=install
- make -j2 install
- cd ${TRAVIS_BUILD_DIR}
- ./check.py --binaryen-bin=${BUILD_SUBDIR}/install/bin
- <<: *test-ubuntu
env: |
BUILD_SUBDIR=out
- <<: *test-ubuntu
env: |
COMPILER_FLAGS="-fsanitize=undefined -fno-sanitize-recover=all -fsanitize-blacklist=$(pwd)/ubsan.blacklist"
# FIXME we currently must disable LSAN entirely, see #1351
#- <<: *test-ubuntu
# env: |
# COMPILER_FLAGS="-fsanitize=address"
- <<: *test-ubuntu
env: |
COMPILER_FLAGS="-fsanitize=thread"
# Build with gcc 5 and run tests on the host system (Ubuntu).
- <<: *test-ubuntu
compiler: gcc
env: |
CC="gcc-5"
CXX="g++-5"
# Build the .js outputs using emcc
- &test-emcc
stage: test
compiler: clang
python: 2.7
language: node_js
sudo: required
services:
- docker
before_install:
- docker run -dit --name emscripten -v $(pwd):/src trzeci/emscripten:sdk-incoming-64bit bash
script:
# run binaryen.js tests before and after building, so we see if the bundled
# version is good too
- docker exec -it emscripten bash ./travis-emcc-tests.sh
# 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:
- docker run -w /src -dit --name alpine -v $(pwd):/src node:10-alpine
- alpine() { docker exec -it alpine "$@"; }
install:
- alpine apk update
- alpine apk add build-base cmake git python2
script:
- alpine cmake .
- alpine make -j2
- alpine ./check.py
# 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-linux
# 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
<<: *DEPLOY_TO_GITHUB
# 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).
# Note: We had to remove ppc64le, because it takes more than 50 minutes
# (Travis limit) to build. :(
- <<: *build-alpine
env: ARCH=x86-linux
- <<: *build-alpine
env: ARCH=aarch64-linux
- <<: *build-alpine
env: ARCH=armhf-linux
notifications:
email: false