# DESCRIPTION: Travis-CI config
#
# Copyright 2003-2019 by Todd Strader. Verilator is free software; you can
# redistribute it and/or modify it under the terms of either the GNU Lesser
# General Public License Version 3 or the Perl Artistic License Version 2.0.

version: ~> 1.0

os: linux
language: cpp
cache: ccache

env:
  global:
    - VERILATOR_CACHE=$HOME/verilator_cache
    - VERILATOR_ROOT=$PWD
    - VERILATOR_NUM_JOBS=$(echo `nproc` + 1 | bc)
    - VERILATOR_CONFIG_FLAGS="--enable-maintainer-mode --enable-longtests"
    - VERILATOR_AUTHOR_SITE=1
    - OBJCACHE=ccache

cache:
  directories:
    - $VERILATOR_CACHE

before_install:
# Perl modules needed for testing
  - yes yes | sudo cpan -fi Unix::Processors Parallel::Forker Bit::Vector
  - sudo apt-get install gdb gtkwave
before_script:
  - bash -x ci/build_vcddiff.sh
  - bash -x ci/build_verilator.sh
after_script:
  - ccache -s

stages:
  - "Build Verilator"
  - test

jobs:
  include:
    - if: type != cron
      stage: "Build Verilator"
      name: Build Verilator
      compiler: gcc
      script: echo "Done building Verilator"
# Non-cron build will just run on whatever linux flavor we get
    - if: type != cron
      stage: test
      name: Dist test
      compiler: gcc
      script: ci/test.sh dist
    - if: type != cron
      stage: test
      name: Vlt test
      compiler: gcc
      script: ci/test.sh vlt
    - if: type != cron
      stage: test
      name: Vltmt test
      compiler: gcc
      script: ci/test.sh vltmt
# Cron builds try different OS/compiler combinations
    - if: type = cron
      stage: "Build Verilator"
      name: Build xenial gcc Verilator
      os: linux
      dist: xenial
      compiler: gcc
      script: echo "Done building Verilator"
    - if: type = cron
      stage: test
      name: Xenial gcc dist test
      os: linux
      dist: xenial
      compiler: gcc
      script: ci/test.sh dist
    - if: type = cron
      stage: test
      name: Xenial gcc vlt test
      os: linux
      dist: xenial
      compiler: gcc
      script: ci/test.sh vlt
    - if: type = cron
      stage: test
      name: Xenial gcc vltmt test
      os: linux
      dist: xenial
      compiler: gcc
      script: ci/test.sh vltmt
    - if: type = cron
      stage: "Build Verilator"
      name: Build xenial clang Verilator
      os: linux
      dist: xenial
      compiler: clang
      script: echo "Done building Verilator"
    - if: type = cron
      stage: test
      name: Xenial clang dist test
      os: linux
      dist: xenial
      compiler: clang
      script: ci/test.sh dist
    - if: type = cron
      stage: test
      name: Xenial clang vlt test
      os: linux
      dist: xenial
      compiler: clang
      script: ci/test.sh vlt
    - if: type = cron
      stage: test
      name: Xenial clang vltmt test
      os: linux
      dist: xenial
      compiler: clang
      script: ci/test.sh vltmt
#    - if: type = cron
#      stage: "Build Verilator"
#      name: Build OSX gcc Verilator
#      os: osx
#      compiler: gcc
#      script: echo "Done building Verilator"
#    - if: type = cron
#      stage: test
#      name: OSX gcc dist test
#      os: osx
#      compiler: gcc
#      script: ci/test.sh dist
#    - if: type = cron
#      stage: test
#      name: OSX gcc vlt test
#      os: osx
#      compiler: gcc
#      script: ci/test.sh vlt
#    - if: type = cron
#      stage: test
#      name: OSX gcc vltmt test
#      os: osx
#      compiler: gcc
#      script: ci/test.sh vltmt
    - if: type = cron
      stage: "Build Verilator"
      name: Build trusty gcc Verilator
      os: linux
      dist: trusty
      compiler: gcc
      script: echo "Done building Verilator"
    - if: type = cron
      stage: test
      name: Trusty gcc dist test
      os: linux
      dist: trusty
      compiler: gcc
      script: ci/test.sh dist
    - if: type = cron
      stage: test
      name: Trusty gcc vlt test
      os: linux
      dist: trusty
      compiler: gcc
      script: ci/test.sh vlt
    - if: type = cron
      stage: test
      os: linux
      dist: trusty
      name: Trusty gcc vltmt test
      compiler: gcc
      script: ci/test.sh vltmt

notifications:
  email:
    if: repo = verilator/verilator
    recipients:
      - wsnyder@wsnyder.org
      - todd.strader@gmail.com
