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

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

language: c

cache:
 - apt

install:
 # install U-Boot build dependencies
 - sudo apt-get install -qq cppcheck sloccount sparse bc libsdl-dev gcc-arm-linux-gnueabi gcc-arm-linux-gnueabihf
 # install latest device tree compiler
 - git clone --depth=1 https://git.kernel.org/pub/scm/utils/dtc/dtc.git /tmp/dtc
 - make -j4 -C /tmp/dtc
 # prepare buildman environment
 - export BUILDMAN_ROOT="root:"
 - export BUILDMAN_MIPS="mips:"
 - export BUILDMAN_PPC="ppc:"
 - echo -e "[toolchain]\\n${BUILDMAN_ROOT} /\n" > ~/.buildman
 - echo -e "${BUILDMAN_MIPS} /opt/eldk-5.4/mips/sysroots/i686-eldk-linux/usr/bin/mips32-linux/" >> ~/.buildman
 - echo -e "${BUILDMAN_PPC} /opt/eldk-5.4/powerpc/sysroots/i686-eldk-linux/usr/bin/powerpc-linux/" >> ~/.buildman
 - export BUILDMAN_ALIAS="x86:"
 - echo -e "[toolchain-alias]\\n${BUILDMAN_ALIAS}  i386" >> ~/.buildman
 - cat ~/.buildman

env:
  global:
    - PATH=/tmp/dtc:$PATH
    - BUILD_DIR=build
    - CROSS_COMPILE=""
    - HOSTCC="cc"
    - HOSTCXX="c++"
    - TEST_CONFIG_CMD=""

before_script:
  # install toolchains based on INSTALL_TOOLCHAIN} variable
  - if [[ "${INSTALL_TOOLCHAIN}" == *ppc* ]]; then wget ftp://ftp.denx.de/pub/eldk/5.4/targets/powerpc/eldk-eglibc-i686-powerpc-toolchain-gmae-5.4.sh ; fi
  - if [[ "${INSTALL_TOOLCHAIN}" == *ppc* ]]; then sh eldk-eglibc-i686-powerpc-toolchain-gmae-5.4.sh -y ; fi
  - if [[ "${INSTALL_TOOLCHAIN}" == *mips* ]]; then wget ftp://ftp.denx.de/pub/eldk/5.4/targets/mips/eldk-eglibc-i686-mips-toolchain-gmae-5.4.sh ; fi
  - if [[ "${INSTALL_TOOLCHAIN}" == *mips* ]]; then sh eldk-eglibc-i686-mips-toolchain-gmae-5.4.sh -y ; fi

script:
 # the execution sequence for each test
 - echo ${TEST_CONFIG_CMD}
 - ${TEST_CONFIG_CMD}
 - echo ${TEST_CMD}
 - ${TEST_CMD}

matrix:
  include:
  # we need to build by vendor due to 50min time limit for builds
  # each env setting here is a dedicated build
    - env:
        - TEST_CMD="./MAKEALL -a arm -v atmel"
          CROSS_COMPILE="arm-linux-gnueabi-"
    - env:
        - TEST_CMD="./MAKEALL -a arm -v denx"
          CROSS_COMPILE="arm-linux-gnueabi-"
    - env:
        - TEST_CMD="./MAKEALL -a arm -v freescale"
          CROSS_COMPILE="arm-linux-gnueabi-"
    - env:
        - TEST_CMD="./MAKEALL -a arm -v siemens"
          CROSS_COMPILE="arm-linux-gnueabi-"
    - env:
        - TEST_CMD="./MAKEALL -a arm -v ti"
          CROSS_COMPILE="arm-linux-gnueabi-"
    - env:
        - TEST_CONFIG_CMD="make sandbox_defconfig"
          TEST_CMD="make -j4"
          HOSTCC  = "gcc"
          HOSTCXX  = "g++"
    - env:
        - TEST_CONFIG_CMD="make sandbox_defconfig"
          TEST_CMD="make -j4"
          HOSTCC  = "clang"
          HOSTCXX  = "clang++"
    - env:
        - TEST_CMD="./MAKEALL -a mips"
          INSTALL_TOOLCHAIN="mips"
          CROSS_COMPILE="/opt/eldk-5.4/mips/sysroots/i686-eldk-linux/usr/bin/mips32-linux/mips-linux-"
    - env:
        - TEST_CMD="tools/buildman/buildman --list-error-boards atmel"
    - env:
        - TEST_CMD="tools/buildman/buildman --list-error-boards denx"
    - env:
        - TEST_CMD="tools/buildman/buildman --list-error-boards freescale arm"
    - env:
        - TEST_CMD="tools/buildman/buildman --list-error-boards siemens"
    - env:
        - TEST_CMD="tools/buildman/buildman --list-error-boards ti"
    - env:
        - TEST_CMD="tools/buildman/buildman mips"
          INSTALL_TOOLCHAIN="mips"
    - env:
        - TEST_CMD="tools/buildman/buildman mpc5xx"
          INSTALL_TOOLCHAIN="ppc"
    - env:
        - TEST_CMD="tools/buildman/buildman mpc8xx"
          INSTALL_TOOLCHAIN="ppc"
    - env:
        - TEST_CMD="tools/buildman/buildman mpc5xxx"
          INSTALL_TOOLCHAIN="ppc"
    - env:
        - TEST_CMD="tools/buildman/buildman mpc512x"
          INSTALL_TOOLCHAIN="ppc"
    - env:
        - TEST_CMD="tools/buildman/buildman mpc8260"
          INSTALL_TOOLCHAIN="ppc"
    - env:
        - TEST_CMD="tools/buildman/buildman mpc83xx"
          INSTALL_TOOLCHAIN="ppc"
    - env:
        - TEST_CMD="tools/buildman/buildman mpc85xx"
          INSTALL_TOOLCHAIN="ppc"
    - env:
        - TEST_CMD="tools/buildman/buildman mpc86xx"
          INSTALL_TOOLCHAIN="ppc"

    - env:
        - TEST_CMD="tools/buildman/buildman --list-error-boards sandbox x86"

    # QA jobs for code analytics
    # static code analysis with cppcheck (we can add --enable=all later)
    - env:
        - TEST_CMD="cppcheck --force --quiet --inline-suppr ."
    # search for TODO within source tree
    - env:
        - TEST_CMD="grep -r TODO ."
    # search for FIXME within source tree
    - env:
        - TEST_CMD="grep -r FIXME ."
    # search for HACK within source tree and ignore HACKKIT board
    - env:
        - TEST_CMD="grep -r HACK . | grep -v HACKKIT"
      script:
        - grep -r HACK . | grep -v HACKKIT
    # some statistics about the code base
    - env:
        - TEST_CMD="sloccount ."

notifications:
  email: false

# TODO make it perfect ;-r
