# Copyright Roger Meier <r.meier@siemens.com>
# SPDX-License-Identifier:	GPL-2.0+

# build U-Boot on Travis CI - https://travis-ci.org/

sudo: required
dist: trusty

language: c

addons:
  apt:
    sources:
    - sourceline: 'ppa:gns3/qemu'
    packages:
    - cppcheck
    - sloccount
    - sparse
    - bc
    - build-essential
    - libsdl1.2-dev
    - python
    - python-virtualenv
    - qemu-system-arm
    - qemu-system-mips
    - qemu-system-ppc
    - qemu-system-x86
    - gcc-powerpc-linux-gnu
    - gcc-arm-linux-gnueabihf
    - iasl

install:
 # install latest device tree compiler
 - git clone --depth=1 git://git.kernel.org/pub/scm/utils/dtc/dtc.git /tmp/dtc
 - make -j4 -C /tmp/dtc
 # Clone uboot-test-hooks
 - git clone --depth=1 git://github.com/swarren/uboot-test-hooks.git /tmp/uboot-test-hooks
 - ln -s travis-ci /tmp/uboot-test-hooks/bin/`hostname`
 - ln -s travis-ci /tmp/uboot-test-hooks/py/`hostname`
 # prepare buildman environment
 - export BUILDMAN_ROOT="root:"
 - echo -e "[toolchain]\n${BUILDMAN_ROOT} /usr" > ~/.buildman
 - echo -e "\n[toolchain-alias]\nblackfin = bfin\nsh = sh4\nopenrisc = or32" >> ~/.buildman
 - cat ~/.buildman
 - virtualenv /tmp/venv
 - . /tmp/venv/bin/activate
 - pip install pytest

env:
  global:
    - PATH=/tmp/dtc:/tmp/uboot-test-hooks/bin:$PATH
    - BUILD_DIR=build
    - HOSTCC="cc"
    - HOSTCXX="c++"

before_script:
  # install toolchains based on TOOLCHAIN} variable
  - if [[ "${TOOLCHAIN}" == *aarch64* ]]; then ./tools/buildman/buildman --fetch-arch aarch64 ; fi
  - if [[ "${TOOLCHAIN}" == *avr32* ]]; then ./tools/buildman/buildman --fetch-arch avr32 ; fi
  - if [[ "${TOOLCHAIN}" == *bfin* ]]; then ./tools/buildman/buildman --fetch-arch bfin ; fi
  - if [[ "${TOOLCHAIN}" == *m68k* ]]; then ./tools/buildman/buildman --fetch-arch m68k ; fi
  - if [[ "${TOOLCHAIN}" == *microblaze* ]]; then ./tools/buildman/buildman --fetch-arch microblaze ; fi
  - if [[ "${TOOLCHAIN}" == *mips* ]]; then ./tools/buildman/buildman --fetch-arch mips ; fi
  - if [[ "${TOOLCHAIN}" == *or32* ]]; then ./tools/buildman/buildman --fetch-arch or32 ; fi
  - if [[ "${TOOLCHAIN}" == *sh4* ]]; then ./tools/buildman/buildman --fetch-arch sh4 ; fi
  - if [[ "${TOOLCHAIN}" == *x86_64* ]]; then ./tools/buildman/buildman --fetch-arch x86_64 ; fi
  - if [[ "${TOOLCHAIN}" == *xtensa* ]]; then ./tools/buildman/buildman --fetch-arch xtensa ; fi

script:
 # Exit code 129 means warnings only.
 - if [[ "${BUILDMAN}" != "" ]]; then
     set +e;
     tools/buildman/buildman ${BUILDMAN};
     if [[ "$?" == "0" || "$?" == "129" ]]; then
       exit 0;
     else
       exit $?;
     fi
   fi

matrix:
  include:
  # we need to build by vendor due to 50min time limit for builds
  # each env setting here is a dedicated build
    - env:
        - BUILDMAN="arm1136"
    - env:
        - BUILDMAN="arm1136"
    - env:
        - BUILDMAN="arm1176"
    - env:
        - BUILDMAN="arm720t"
    - env:
        - BUILDMAN="arm920t"
    - env:
        - BUILDMAN="atmel -x avr32"
    - env:
        - BUILDMAN="avr32"
          TOOLCHAIN="avr32"
    - env:
        - BUILDMAN="davinci"
    - env:
        - BUILDMAN="denx"
    - env:
        - BUILDMAN="freescale -x powerpc,m68k,aarch64"
    - env:
        - BUILDMAN="sandbox x86"
          TOOLCHAIN="x86_64"
      script:
        - export BUILDMAN_X86="x86:";
          echo -e "\n[toolchain-prefix]\n${BUILDMAN_X86} ${HOME}/.buildman-toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin/x86_64-linux-" >> ~/.buildman
    - env:
        - BUILDMAN="kirkwood"
    - env:
        - BUILDMAN="m68k"
          TOOLCHAIN="m68k"
    - env:
        - BUILDMAN="microblaze"
          TOOLCHAIN="microblaze"
    - env:
        - BUILDMAN="mips"
          TOOLCHAIN="mips"
    - env:
        - BUILDMAN="mpc512x"
    - env:
        - BUILDMAN="mpc5xx"
    - env:
        - BUILDMAN="mpc5xxx"
    - env:
        - BUILDMAN="mpc8260"
    - env:
        - BUILDMAN="mpc83xx"
    - env:
        - BUILDMAN="mpc85xx -x freescale"
    - env:
        - BUILDMAN="mpc85xx -x t208xrdb -x t4qds -x t102* -x p1_p2_rdb_pc -x p1010rdb -x corenet_ds -x b4860qds -x sbc8548 -x bsc91*"
    - env:
        - BUILDMAN="t208xrdb t4qds t102*"
    - env:
        - BUILDMAN="p1_p2_rdb_pc p1010rdb"
    - env:
        - BUILDMAN="corenet_ds b4860qds sbc8548 bsc91*"
    - env:
        - BUILDMAN="mpc86xx"
    - env:
        - BUILDMAN="mpc8xx"
    - env:
        - BUILDMAN="siemens"
    - env:
        - BUILDMAN="ti"
    - env:
        - BUILDMAN="aarch64"
          TOOLCHAIN="aarch64"
    - env:
        - BUILDMAN="sh4"
          TOOLCHAIN="sh4"
    - env:
        - BUILDMAN="xtensa"
          TOOLCHAIN="xtensa"

    # QA jobs for code analytics
    # static code analysis with cppcheck (we can add --enable=all later)
    - script:
        - cppcheck --force --quiet --inline-suppr .
    # search for TODO within source tree
    - script:
        - grep -r TODO .
    # search for FIXME within source tree
    - script:
        - grep -r FIXME .
    # search for HACK within source tree and ignore HACKKIT board
      script:
        - grep -r HACK . | grep -v HACKKIT
    # some statistics about the code base
    - script:
        - sloccount .
    # test/py
    - script:
        - ./test/py/test.py --bd sandbox --build
    - env:
        - CROSS_COMPILE="/usr/bin/arm-linux-gnueabihf-"
      script:
        - ./test/py/test.py --bd vexpress_ca15_tc2 --id qemu --build;
          ./test/py/test.py --bd vexpress_ca9x4 --id qemu --build;
          ./test/py/test.py --bd integratorcp_cm926ejs --id qemu --build;
    - env:
        - TOOLCHAIN="mips"
          CROSS_COMPILE="${HOME}/.buildman-toolchains/gcc-4.9.0-nolibc/mips-linux/bin/mips-linux-"
      script:
        - ./test/py/test.py --bd qemu_mips --build -k 'not sleep';
          ./test/py/test.py --bd qemu_mipsel --build -k 'not sleep';
          ./test/py/test.py --bd qemu_mips64 --build -k 'not sleep';
          ./test/py/test.py --bd qemu_mips64el --build -k 'not sleep';
    - env:
        - CROSS_COMPILE="/usr/bin/powerpc-linux-gnu-"
      script:
        - ./test/py/test.py --bd qemu-ppce500 --build -k 'not sleep'
    - env:
        - TOOLCHAIN="x86_64"
          BUILD_ROM=yes
          CROSS_COMPILE="${HOME}/.buildman-toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin/x86_64-linux-"
      script:
        - ./test/py/test.py --bd qemu-x86 --build -k 'not sleep'

# TODO make it perfect ;-r
