aboutsummaryrefslogtreecommitdiff
path: root/.travis.yml
blob: 0ba9a002233fee714ab535965b61f632ab3e1161 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# global options
dist: xenial
language:
  - c
compiler:
  - gcc
cache:
  directories:
    - "${HOME}/persist"
env:
  global:
    - MAKEOPTS="-j4"

# define the successive stages
stages:
  - name: test

# define the jobs for the stages
# order of the jobs has longest running first to optimise total time
jobs:
  include:
    # stm32 port
    - stage: test
      env: NAME="stm32 port build"
      install:
        # need newer gcc version for Cortex-M7 support
        - sudo add-apt-repository -y ppa:team-gcc-arm-embedded/ppa
        - sudo apt-get update -qq || true
        - sudo apt-get install gcc-arm-embedded
        - sudo apt-get install libnewlib-arm-none-eabi
        - arm-none-eabi-gcc --version
      script:
        - make ${MAKEOPTS} -C mpy-cross
        - make ${MAKEOPTS} -C ports/stm32
        - make ${MAKEOPTS} -C ports/stm32 BOARD=PYBV11 MICROPY_PY_WIZNET5K=5200 MICROPY_PY_CC3K=1
        - make ${MAKEOPTS} -C ports/stm32 BOARD=STM32F769DISC
        - make ${MAKEOPTS} -C ports/stm32 BOARD=STM32L476DISC

    # qemu-arm port
    - stage: test
      env: NAME="qemu-arm port build and tests"
      install:
        - sudo apt-get install gcc-arm-none-eabi
        - sudo apt-get install libnewlib-arm-none-eabi
        - sudo apt-get install qemu-system
        - arm-none-eabi-gcc --version
        - qemu-system-arm --version
      script:
        - make ${MAKEOPTS} -C mpy-cross
        - make ${MAKEOPTS} -C ports/qemu-arm -f Makefile.test test
      after_failure:
        - grep "FAIL" ports/qemu-arm/build/console.out

    # unix coverage
    - stage: test
      env: NAME="unix coverage build and tests"
      install:
        - sudo pip install cpp-coveralls
        - gcc --version
        - python3 --version
      script:
        - make ${MAKEOPTS} -C mpy-cross
        - make ${MAKEOPTS} -C ports/unix deplibs
        - make ${MAKEOPTS} -C ports/unix coverage
        # run the main test suite
        - (cd tests && MICROPY_CPYTHON3=python3 MICROPY_MICROPYTHON=../ports/unix/micropython_coverage ./run-tests)
        - (cd tests && MICROPY_CPYTHON3=python3 MICROPY_MICROPYTHON=../ports/unix/micropython_coverage ./run-tests -d thread)
        - (cd tests && MICROPY_CPYTHON3=python3 MICROPY_MICROPYTHON=../ports/unix/micropython_coverage ./run-tests --emit native)
        - (cd tests && MICROPY_CPYTHON3=python3 MICROPY_MICROPYTHON=../ports/unix/micropython_coverage ./run-tests --via-mpy -d basics float micropython)
        - (cd tests && MICROPY_CPYTHON3=python3 MICROPY_MICROPYTHON=../ports/unix/micropython_coverage ./run-tests --via-mpy --emit native -d basics float micropython)
        # test when input script comes from stdin
        - cat tests/basics/0prelim.py | ports/unix/micropython_coverage | grep -q 'abc'
        # run coveralls coverage analysis (try to, even if some builds/tests failed)
        - (cd ports/unix && coveralls --root ../.. --build-root . --gcov $(which gcov) --gcov-options '\-o build-coverage/' --include py --include extmod)
      after_failure:
        - (cd tests && for exp in *.exp; do testbase=$(basename $exp .exp); echo -e "\nFAILURE $testbase"; diff -u $testbase.exp $testbase.out; done)

    # standard unix port
    - stage: test
      env: NAME="unix port build and tests"
      script:
        - make ${MAKEOPTS} -C mpy-cross
        - make ${MAKEOPTS} -C ports/unix deplibs
        - make ${MAKEOPTS} -C ports/unix
        - make ${MAKEOPTS} -C ports/unix test

    # unix nanbox
    - stage: test
      env: NAME="unix nanbox port build and tests"
      install:
        - sudo apt-get install gcc-multilib libffi-dev:i386
      script:
        - make ${MAKEOPTS} -C mpy-cross
        - make ${MAKEOPTS} -C ports/unix deplibs
        - make ${MAKEOPTS} -C ports/unix nanbox
        - (cd tests && MICROPY_CPYTHON3=python3 MICROPY_MICROPYTHON=../ports/unix/micropython_nanbox ./run-tests)

    # unix stackless
    - stage: test
      env: NAME="unix stackless port build and tests"
      script:
        - make ${MAKEOPTS} -C mpy-cross
        - make ${MAKEOPTS} -C ports/unix deplibs
        - make ${MAKEOPTS} -C ports/unix CFLAGS_EXTRA="-DMICROPY_STACKLESS=1 -DMICROPY_STACKLESS_STRICT=1"
        - make ${MAKEOPTS} -C ports/unix test

    # windows port via mingw
    - stage: test
      env: NAME="windows port build via mingw"
      install:
        - sudo apt-get install gcc-mingw-w64
      script:
        - make ${MAKEOPTS} -C mpy-cross
        - make ${MAKEOPTS} -C ports/windows CROSS_COMPILE=i686-w64-mingw32-

    # nrf port
    - stage: test
      env: NAME="nrf port build"
      install:
        - sudo apt-get install gcc-arm-none-eabi
        - sudo apt-get install libnewlib-arm-none-eabi
        - arm-none-eabi-gcc --version
      script:
        - make ${MAKEOPTS} -C ports/nrf

    # bare-arm and minimal ports
    - stage: test
      env: NAME="bare-arm and minimal ports build"
      install:
        - sudo apt-get install gcc-arm-none-eabi
        - sudo apt-get install libnewlib-arm-none-eabi
        - arm-none-eabi-gcc --version
      script:
        - make ${MAKEOPTS} -C ports/bare-arm
        - make ${MAKEOPTS} -C ports/minimal CROSS=1 build/firmware.bin
        - ls -l ports/minimal/build/firmware.bin
        - tools/check_code_size.sh
        - mkdir -p ${HOME}/persist
        # Save new firmware for reference, but only if building a main branch, not a pull request
        - 'if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then cp ports/minimal/build/firmware.bin ${HOME}/persist/; fi'

    # cc3200 port
    - stage: test
      env: NAME="cc3200 port build"
      install:
        - sudo apt-get install gcc-arm-none-eabi
        - sudo apt-get install libnewlib-arm-none-eabi
      script:
        - make ${MAKEOPTS} -C ports/cc3200 BTARGET=application BTYPE=release
        - make ${MAKEOPTS} -C ports/cc3200 BTARGET=bootloader  BTYPE=release

    # teensy port
    - stage: test
      env: NAME="teensy port build"
      install:
        - sudo apt-get install gcc-arm-none-eabi
        - sudo apt-get install libnewlib-arm-none-eabi
      script:
        - make ${MAKEOPTS} -C ports/teensy