From 70e4dbd45bea4db6d3a048e0bbee533cdd59fdbc Mon Sep 17 00:00:00 2001 From: Max Paperno Date: Sat, 21 Jan 2017 11:18:42 -0500 Subject: [PATCH] [TravisCI] Set up for parallel Travis builds and use Qt5.7 (#4263) * [TravisCI] Set up for parallel Travis builds and use Qt5.7 (with option of selecting version). commit-tests.sh script can now optionally build one, all, or sets of targets. * [TravisCI] Move "COMPANION" build to first slot and rename to "DEFAULT". * [TravisCI] Fix "ALL" build flavor, remove TARANIS flavor, rename HORUS to X12, streamline some code, add comments, fix indents. --- .travis.yml | 60 ++++++++++- tools/commit-tests.sh | 226 +++++++++++++++++++++++++----------------- 2 files changed, 192 insertions(+), 94 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7f98d25d9..e947b1240 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,7 @@ sudo: required dist: trusty language: python +compiler: gcc virtualenv: system_site_packages: true @@ -8,18 +9,67 @@ virtualenv: python: - 3.4 +env: + global: + # - QT_BASE=53 + # - QT_BASE=54 + # - QT_BASE=55 + # - QT_BASE=56 + - QT_BASE=57 + #- GCC_ARM=/opt/gcc-arm-none-eabi/bin + - AVR_FLAVORS="AVR9X 9X GRUVIN9X MEGA2560" + matrix: + # + # ALL will build every individual board & DEFAULT, sequentially. + # DEFAULT is "make all" (including Companion & Simulator), with default settings + # + # - FLAVOR=ALL + - FLAVOR=DEFAULT + - FLAVOR=AVR9X + # - FLAVOR=9X + # - FLAVOR=GRUVIN9X + # - FLAVOR=MEGA2560 + - FLAVOR=ARM9X + # - FLAVOR=AR9X + # - FLAVOR=SKY9X + # - FLAVOR=9XRPRO + - FLAVOR=X7 + - FLAVOR=X9 + # - FLAVOR=X9D + # - FLAVOR=X9D+ + # - FLAVOR=X9E + - FLAVOR=X12 + # - FLAVOR=X12Sr10 + # - FLAVOR=X12S + before_install: - sudo add-apt-repository ppa:ubuntu-sdk-team/ppa --yes - sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded --yes - sudo add-apt-repository ppa:ubuntu-toolchain-r/test --yes + - if [ "$QT_BASE" = "53" ]; then sudo add-apt-repository ppa:beineri/opt-qt532-trusty -y; fi + - if [ "$QT_BASE" = "54" ]; then sudo add-apt-repository ppa:beineri/opt-qt542-trusty -y; fi + - if [ "$QT_BASE" = "55" ]; then sudo add-apt-repository ppa:beineri/opt-qt551-trusty -y; fi + - if [ "$QT_BASE" = "56" ]; then sudo add-apt-repository ppa:beineri/opt-qt562-trusty -y; fi + - if [ "$QT_BASE" = "57" ]; then sudo add-apt-repository ppa:beineri/opt-qt571-trusty -y; fi - sudo apt-get update -qq install: - - sudo apt-get --yes --force-yes install qtbase5-dev qtmultimedia5-dev qttools5-dev qttools5-dev-tools python3-pyqt5 curl gcc-arm-none-eabi libmpfr4 libmpc3 libfox-1.6-dev libgtest-dev - - wget --quiet https://launchpad.net/ubuntu/+source/gcc-avr/1:4.9.2+Atmel3.5.0-1/+build/8403710/+files/gcc-avr_4.9.2+Atmel3.5.0-1_amd64.deb - - wget --quiet https://launchpad.net/ubuntu/+source/avr-libc/1:1.8.0+Atmel3.5.0-1/+build/8435473/+files/avr-libc_1.8.0+Atmel3.5.0-1_all.deb - - wget --quiet https://launchpad.net/ubuntu/+source/binutils-avr/2.25+Atmel3.5.0-2/+build/8435474/+files/binutils-avr_2.25+Atmel3.5.0-2_amd64.deb - - sudo dpkg --install gcc-avr_4.9.2+Atmel3.5.0-1_amd64.deb avr-libc_1.8.0+Atmel3.5.0-1_all.deb binutils-avr_2.25+Atmel3.5.0-2_amd64.deb + - sudo apt-get --yes --force-yes install python3-pyqt5 curl libmpfr4 libmpc3 libfox-1.6-dev libgtest-dev + - | + if [[ " ${AVR_FLAVORS} " =~ " ${FLAVOR} " || ${FLAVOR} == "ALL" ]]; then + wget --quiet https://launchpad.net/ubuntu/+source/gcc-avr/1:4.9.2+Atmel3.5.0-1/+build/8403710/+files/gcc-avr_4.9.2+Atmel3.5.0-1_amd64.deb + wget --quiet https://launchpad.net/ubuntu/+source/avr-libc/1:1.8.0+Atmel3.5.0-1/+build/8435473/+files/avr-libc_1.8.0+Atmel3.5.0-1_all.deb + wget --quiet https://launchpad.net/ubuntu/+source/binutils-avr/2.25+Atmel3.5.0-2/+build/8435474/+files/binutils-avr_2.25+Atmel3.5.0-2_amd64.deb + sudo dpkg --install gcc-avr_4.9.2+Atmel3.5.0-1_amd64.deb avr-libc_1.8.0+Atmel3.5.0-1_all.deb binutils-avr_2.25+Atmel3.5.0-2_amd64.deb + fi + if [[ ! " ${AVR_FLAVORS} " =~ " ${FLAVOR} " || ${FLAVOR} == "ALL" ]]; then + sudo apt-get --yes --force-yes install gcc-arm-none-eabi + # Trying to build with gcc-arm 4.7 isn't working because it can't find the compiler, despite adding to PATH (in commit-tests.sh) by defining GCC_ARM above + # - wget --quiet https://launchpad.net/gcc-arm-embedded/4.7/4.7-2013-q3-update/+download/gcc-arm-none-eabi-4_7-2013q3-20130916-linux.tar.bz2 + # - tar xjf gcc-arm-none-eabi-4_7-2013q3-20130916-linux.tar.bz2 + # - mv gcc-arm-none-eabi-4_7-2013q3 /opt/gcc-arm-none-eabi + fi + - sudo apt-get install -qq qt${QT_BASE}base qt${QT_BASE}multimedia qt${QT_BASE}tools; source /opt/qt${QT_BASE}/bin/qt${QT_BASE}-env.sh script: - ./tools/commit-tests.sh diff --git a/tools/commit-tests.sh b/tools/commit-tests.sh index e48bff9b8..8f2eb1c41 100755 --- a/tools/commit-tests.sh +++ b/tools/commit-tests.sh @@ -5,9 +5,12 @@ set -e set -x # Allow variable core usage, default uses two cores, to set 8 cores for example : commit-tests.sh -j8 +: ${CORES:=2} # Default build treats warnings as errors, set -Wno-error to override, e.g.: commit-tests.sh -Wno-error -CORES=2 -WERROR=1 +: ${WERROR:=1} +# A board name to build for, or ALL +: ${FLAVOR:=ALL} + for i in "$@" do case $i in @@ -23,6 +26,10 @@ case $i in WERROR=0 shift ;; + -b*) + FLAVOR="${i#*b}" + shift + ;; esac done @@ -31,110 +38,151 @@ if [ "$(uname)" = "Darwin" ]; then else SCRIPT=$(readlink -f "$0") fi +#export CMAKE_PREFIX_PATH=/opt/qt${QT_BASE} +if [[ ! -z ${GCC_ARM} ]] ; then + export PATH=${GCC_ARM}:$PATH +fi -SRCDIR=$(dirname "$SCRIPT")/.. -COMMON_OPTIONS="-DCMAKE_BUILD_TYPE=Debug -DCMAKE_PREFIX_PATH=/opt/qt55 -DTRACE_SIMPGMSPACE=NO -DVERBOSE_CMAKELISTS=YES -DCMAKE_RULE_MESSAGES=OFF -Wno-dev" +: ${SRCDIR:=$(dirname "$SCRIPT")/..} + +: ${COMMON_OPTIONS:="-DCMAKE_BUILD_TYPE=Debug -DTRACE_SIMPGMSPACE=NO -DVERBOSE_CMAKELISTS=YES -DCMAKE_RULE_MESSAGES=OFF -Wno-dev"} if (( $WERROR )); then COMMON_OPTIONS+=" -DWARNINGS_AS_ERRORS=YES"; fi -FIRMARE_TARGET="firmware-size" + +: ${TEST_OPTIONS:="--gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure"} + +: ${FIRMARE_TARGET:="firmware-size"} mkdir build || true cd build -# OpenTX on 9X stock with FrSky telemetry -rm -rf * -cmake ${COMMON_OPTIONS} -DPCB=9X -DHELI=YES -DTEMPLATES=YES -DTELEMETRY=FRSKY ${SRCDIR} -make -j${CORES} ${FIRMARE_TARGET} -make -j${CORES} simu -make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure +if [[ " 9X AVR9X ALL " =~ " ${FLAVOR} " ]] ; then + # OpenTX on 9X stock with FrSky telemetry + rm -rf * + cmake ${COMMON_OPTIONS} -DPCB=9X -DHELI=YES -DTEMPLATES=YES -DTELEMETRY=FRSKY ${SRCDIR} + make -j${CORES} ${FIRMARE_TARGET} + make -j${CORES} simu + make -j${CORES} gtests ; ./gtests ${TEST_OPTIONS} -# OpenTX on 9X stock with Ardupilot telemetry -rm -rf * -cmake ${COMMON_OPTIONS} -DPCB=9X -DHELI=YES -DTEMPLATES=YES -DTELEMETRY=ARDUPILOT ${SRCDIR} -make -j${CORES} ${FIRMARE_TARGET} + # OpenTX on 9X stock with Ardupilot telemetry + rm -rf * + cmake ${COMMON_OPTIONS} -DPCB=9X -DHELI=YES -DTEMPLATES=YES -DTELEMETRY=ARDUPILOT ${SRCDIR} + make -j${CORES} ${FIRMARE_TARGET} -# OpenTX on 9X stock with JETI telemetry -rm -rf * -cmake ${COMMON_OPTIONS} -DPCB=9X -DHELI=YES -DTEMPLATES=YES -DTELEMETRY=JETI ${SRCDIR} -make -j${CORES} ${FIRMARE_TARGET} + # OpenTX on 9X stock with JETI telemetry + rm -rf * + cmake ${COMMON_OPTIONS} -DPCB=9X -DHELI=YES -DTEMPLATES=YES -DTELEMETRY=JETI ${SRCDIR} + make -j${CORES} ${FIRMARE_TARGET} +fi -# OpenTX on Mega2560 -rm -rf * -cmake ${COMMON_OPTIONS} -DPCB=MEGA2560 -DTEMPLATES=YES -DHELI=YES ${SRCDIR} -make -j${CORES} ${FIRMARE_TARGET} -make -j${CORES} simu -make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure +if [[ " MEGA2560 AVR9X ALL " =~ " ${FLAVOR} " ]] ; then + # OpenTX on Mega2560 + rm -rf * + cmake ${COMMON_OPTIONS} -DPCB=MEGA2560 -DTEMPLATES=YES -DHELI=YES ${SRCDIR} + make -j${CORES} ${FIRMARE_TARGET} + make -j${CORES} simu + make -j${CORES} gtests ; ./gtests ${TEST_OPTIONS} -# OpenTX on Mega2560 with Mavlink telemetry -rm -rf * -cmake ${COMMON_OPTIONS} -DPCB=MEGA2560 -DTELEMETRY=MAVLINK -DHELI=YES -DTEMPLATES=YES -DAUDIO=YES -DVOICE=YES ${SRCDIR} -make -j${CORES} ${FIRMARE_TARGET} -make -j${CORES} simu -make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure + # OpenTX on Mega2560 with Mavlink telemetry + rm -rf * + cmake ${COMMON_OPTIONS} -DPCB=MEGA2560 -DTELEMETRY=MAVLINK -DHELI=YES -DTEMPLATES=YES -DAUDIO=YES -DVOICE=YES ${SRCDIR} + make -j${CORES} ${FIRMARE_TARGET} + make -j${CORES} simu + make -j${CORES} gtests ; ./gtests ${TEST_OPTIONS} +fi -# OpenTX on gruvin9x board -rm -rf * -cmake ${COMMON_OPTIONS} -DPCB=GRUVIN9X -DHELI=YES -DTEMPLATES=YES -DAUDIO=YES -DVOICE=YES ${SRCDIR} -make -j${CORES} ${FIRMARE_TARGET} -make -j${CORES} simu -make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure +if [[ " GRUVIN9X AVR9X ALL " =~ " ${FLAVOR} " ]] ; then + # OpenTX on gruvin9x board + rm -rf * + cmake ${COMMON_OPTIONS} -DPCB=GRUVIN9X -DHELI=YES -DTEMPLATES=YES -DAUDIO=YES -DVOICE=YES ${SRCDIR} + make -j${CORES} ${FIRMARE_TARGET} + make -j${CORES} simu + make -j${CORES} gtests ; ./gtests ${TEST_OPTIONS} +fi -# OpenTX on Sky9x -rm -rf * -cmake ${COMMON_OPTIONS} -DPCB=SKY9X -DHELI=YES ${SRCDIR} -make -j${CORES} ${FIRMARE_TARGET} -make -j${CORES} simu -make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure +if [[ " SKY9X ARM9X ALL " =~ " ${FLAVOR} " ]] ; then + # OpenTX on Sky9x + rm -rf * + cmake ${COMMON_OPTIONS} -DPCB=SKY9X -DHELI=YES ${SRCDIR} + make -j${CORES} ${FIRMARE_TARGET} + make -j${CORES} simu + make -j${CORES} gtests ; ./gtests ${TEST_OPTIONS} +fi -# OpenTX on AR9X -rm -rf * -cmake ${COMMON_OPTIONS} -DPCB=AR9X -DHELI=YES ${SRCDIR} -make -j${CORES} ${FIRMARE_TARGET} -make -j${CORES} simu -make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure +if [[ " AR9X ARM9X ALL " =~ " ${FLAVOR} " ]] ; then + # OpenTX on AR9X + rm -rf * + cmake ${COMMON_OPTIONS} -DPCB=AR9X -DHELI=YES ${SRCDIR} + make -j${CORES} ${FIRMARE_TARGET} + make -j${CORES} simu + make -j${CORES} gtests ; ./gtests ${TEST_OPTIONS} +fi -# OpenTX on X7 -rm -rf * -cmake ${COMMON_OPTIONS} -DPCB=X7 -DHELI=YES ${SRCDIR} -make -j${CORES} ${FIRMARE_TARGET} -make -j${CORES} simu -make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure +if [[ " 9XRPRO ARM9X ALL " =~ " ${FLAVOR} " ]] ; then + # OpenTX on Sky9x + rm -rf * + cmake ${COMMON_OPTIONS} -DPCB=9XRPRO -DHELI=YES ${SRCDIR} + make -j${CORES} ${FIRMARE_TARGET} + make -j${CORES} simu + make -j${CORES} gtests ; ./gtests ${TEST_OPTIONS} +fi -# OpenTX on X9D -rm -rf * -cmake ${COMMON_OPTIONS} -DPCB=X9D -DHELI=YES -DLUA=YES -DGVARS=YES ${SRCDIR} -make -j${CORES} ${FIRMARE_TARGET} -make -j${CORES} simu -make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure +if [[ " X7 ALL " =~ " ${FLAVOR} " ]] ; then + # OpenTX on X7 + rm -rf * + cmake ${COMMON_OPTIONS} -DPCB=X7 -DHELI=YES ${SRCDIR} + make -j${CORES} ${FIRMARE_TARGET} + make -j${CORES} simu + make -j${CORES} gtests ; ./gtests ${TEST_OPTIONS} +fi -# OpenTX on X9D+ -rm -rf * -cmake ${COMMON_OPTIONS} -DPCB=X9D+ -DHELI=YES -DLUA=YES -DGVARS=YES ${SRCDIR} -make -j${CORES} ${FIRMARE_TARGET} -make -j${CORES} simu -make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure +if [[ " X9D X9 ALL " =~ " ${FLAVOR} " ]] ; then + # OpenTX on X9D + rm -rf * + cmake ${COMMON_OPTIONS} -DPCB=X9D -DHELI=YES -DLUA=YES -DGVARS=YES ${SRCDIR} + make -j${CORES} ${FIRMARE_TARGET} + make -j${CORES} simu + make -j${CORES} gtests ; ./gtests ${TEST_OPTIONS} +fi -# OpenTX on Taranis X9E -rm -rf * -cmake ${COMMON_OPTIONS} -DPCB=X9E -DHELI=YES -DLUA=YES -DGVARS=YES -DPPM_UNIT=PERCENT_PREC1 ${SRCDIR} -make -j${CORES} ${FIRMARE_TARGET} -make -j${CORES} simu -make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure +if [[ " X9D+ X9 ALL " =~ " ${FLAVOR} " ]] ; then + # OpenTX on X9D+ + rm -rf * + cmake ${COMMON_OPTIONS} -DPCB=X9D+ -DHELI=YES -DLUA=YES -DGVARS=YES ${SRCDIR} + make -j${CORES} ${FIRMARE_TARGET} + make -j${CORES} simu + make -j${CORES} gtests ; ./gtests ${TEST_OPTIONS} +fi -# OpenTX on Horus beta boards -rm -rf * -cmake ${COMMON_OPTIONS} -DPCB=HORUS -DPCBREV=10 -DHELI=YES -DLUA=YES -DGVARS=YES ${SRCDIR} -make -j${CORES} ${FIRMARE_TARGET} -make -j${CORES} simu -make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure +if [[ " X9E X9 ALL " =~ " ${FLAVOR} " ]] ; then + # OpenTX on Taranis X9E + rm -rf * + cmake ${COMMON_OPTIONS} -DPCB=X9E -DHELI=YES -DLUA=YES -DGVARS=YES -DPPM_UNIT=PERCENT_PREC1 ${SRCDIR} + make -j${CORES} ${FIRMARE_TARGET} + make -j${CORES} simu + make -j${CORES} gtests ; ./gtests ${TEST_OPTIONS} +fi -# OpenTX on Horus -rm -rf * -cmake ${COMMON_OPTIONS} -DPCB=HORUS -DHELI=YES -DLUA=YES -DGVARS=YES ${SRCDIR} -make -j${CORES} ${FIRMARE_TARGET} -make -j${CORES} simu -make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure +if [[ " X12Sr10 X12 ALL " =~ " ${FLAVOR} " ]] ; then + # OpenTX on Horus beta boards + rm -rf * + cmake ${COMMON_OPTIONS} -DPCB=HORUS -DPCBREV=10 -DHELI=YES -DLUA=YES -DGVARS=YES ${SRCDIR} + make -j${CORES} ${FIRMARE_TARGET} + make -j${CORES} simu + make -j${CORES} gtests ; ./gtests ${TEST_OPTIONS} +fi -# Companion -rm -rf * -cmake ${COMMON_OPTIONS} ${SRCDIR} -make -j${CORES} +if [[ " X12S X12 ALL " =~ " ${FLAVOR} " ]] ; then + # OpenTX on Horus + rm -rf * + cmake ${COMMON_OPTIONS} -DPCB=HORUS -DHELI=YES -DLUA=YES -DGVARS=YES ${SRCDIR} + make -j${CORES} ${FIRMARE_TARGET} + make -j${CORES} simu + make -j${CORES} gtests ; ./gtests ${TEST_OPTIONS} +fi + +if [[ " DEFAULT ALL " =~ " ${FLAVOR} " ]] ; then + # Companion + rm -rf * + cmake ${COMMON_OPTIONS} ${SRCDIR} + make -j${CORES} +fi