aboutsummaryrefslogtreecommitdiff
path: root/.azure-pipelines.yml
blob: 9108070081af3930a73282274cbec59cf9c6f097 (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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
jobs:
  - job: code_style
    displayName: 'Check code style'
    pool:
      vmImage: ubuntu-18.04
    container:
      image: jforissier/optee_os_ci
    steps:
      - script: |
          set -e
          pushd .
          mkdir -p /tmp/linux/scripts
          cd /tmp/linux/scripts
          wget --quiet https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/plain/scripts/checkpatch.pl
          chmod +x checkpatch.pl
          wget --quiet https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/plain/scripts/spelling.txt
          echo "invalid.struct.name" >const_structs.checkpatch
          export PATH=/tmp/linux/scripts:$PATH
          popd
          source scripts/checkpatch_inc.sh
          function _do() { echo '>>' $*; $*; }
          # Run checkpatch.pl:
          # - on the tip of the branch only if we're not in a pull request
          # - otherwise:
          #   * on each commit in the development branch that is not in the target (merge to) branch
          #   * on the global diff if the PR contains more than one commit (useful to check if fixup
          #     commits do solve previous checkpatch errors)
          if [ "${SYSTEM_PULLREQUEST_PULLREQUESTID}" == "" ]; then \
            _do checkpatch HEAD || failed=1; \
          else \
            for c in $(git rev-list HEAD^1..HEAD^2); do \
              _do checkpatch $c || failed=1; \
            done; \
            if [ "$(git rev-list --count HEAD^1..HEAD^2)" -gt 1 ]; then \
              _do checkdiff $(git rev-parse HEAD^1) $(git rev-parse HEAD^2) || failed=1; \
            fi; \
          fi
          [ -z "$failed" ]
        displayName: 'Run checkpatch'
      - script: |
          sudo -E bash -c "apt update -qq -y && apt install -qq -y pycodestyle"
          pycodestyle scripts/*.py core/arch/arm/plat-stm32mp1/scripts/stm32image.py
        displayName: 'Run pycodestyle'
        condition: succeededOrFailed()  # Run this 'script' even if previous ones failed
  - job: build_all
    displayName: 'Build all'
    pool:
      vmImage: ubuntu-18.04
    container:
      image: jforissier/optee_os_ci
    steps:
      - task: InstallSSHKey@0
        displayName: 'Install SSH key for build cache'
        inputs:
          hostname: 'cache.forissier.org'
          knownHostEntry: 'cache.forissier.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDhjh94ShHh6M19+0NBjgX8ZUiZINQS60GmQjzLfivljvAxBtheCDlDqK5NLIoXn4HE2FxkNTMqmJ+D0p7eQAy81OyYVtvTrJm4B4dk60wMDzQgUK2Cikl2YWNTuxeHpwvpEXP0EK/AHjX1z+98Us9XP6bMr7n1nN6WM8JEdOKpMgl7O9uK3jqYJHo9k+ldkAR4yX8jYgxothu9qkeu2X8tbaP3rjaLlDEsi90AOZb0VJxVmTRWFjh3DBcbbeiurTQndKrQff6T5SkbK2vjKP7ipFAKfAYK6SDOxsZ6c5KB8/5aMHXnble9aL2tDV2CArlbKlTySM9ozcN274gK8n2at8lKfDgzK1yzCehVk6KQk+EERNqxFESpoFgq28DLGqxcPQW27nD7jqFSxPSHGll3ePTF49e8/sNi6vRD3dvmgGMMZWmdI8QwfR83ELN+jcwb3sCNhUh/kK4ETfDMV3N5kRhSGcJK84Lzb4s85afacGxXRu/9HhiEe7wl+LWv5Es='
          sshPublicKey: 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDHVf1VsKwFAc1574TJfQK1v7ugPoYIpASm3UqB8HUQHVl353zH/veEL2xer1g4GSj27LIh0wszGqu6wMIWGNxb1iEozhLBABnavAht9mSYWkeOfzWb8f8c4EgLyK5gWhT049+A1iI8tu9DjHjgGD6JeyYyUXGHwC0cexqu6QJszWuXi2a0arCeM2Dbo/bjTJ4HdKEJBaxHpaO0JbbNmJrKwlAySHKdWtQ7uowKQgdD6BZcjV4n++pj4WfMMUVgBfaw7m3S6DP7I+yAWH4U3mLpf6Yq54rYYCewjLtQHj9H5xAPAi7Yk7b4+DJgeOY8CQ3zSdsnrHf69905ShVy9fUbylilgqdZEiRwxCaQ7Felh9cH9OBmP1DtEDpL1FSj5lj9o7fSNCJ22F8vYKf7hQRK68vjJW16rB1iPh63fHSIdEQV4pobxjhoOctckxI7svHT6u7pf6tP4BW9wu8i4utQq5XaF1HN2DWcKSP8I+R3668/p/kHfAvJQZaHsbFmB+s= jerome@azure-pipelines'
          sshKeySecureFile: 'ssh_rsa_build-cache'
      - script: |
          set -e -v
          export LC_ALL=C
          export PATH=/usr/local/bin:$PATH  # clang
          export CROSS_COMPILE32="ccache arm-linux-gnueabihf-"
          export CROSS_COMPILE64="ccache aarch64-linux-gnu-"
          export CFG_DEBUG_INFO=n
          export CFG_WERROR=y
          export START=$(date +%s)
          export PROJ=$(System.CollectionId)-$(System.TeamProject) # $ORG_NAME-$REPO_NAME
          export SCP_OPT="-o ConnectTimeout=10 -o StrictHostKeyChecking=no"

          function download_cache() { ssh $SCP_OPT optee_os_ci@cache.forissier.org "cat ccache-$PROJ.tar.gz" | tar zx -C $HOME || echo Nevermind; }
          function upload_cache() { if [ ! -e .uploaded ]; then echo Uploading cache && tar c -C $HOME .ccache | gzip -1 | ssh $SCP_OPT optee_os_ci@cache.forissier.org "cat >ccache-$PROJ.tar.gz" && touch .uploaded || echo Nevermind; fi; }
          function check_upload_cache() { NOW=$(date +%s); if [ $(expr $NOW - $START) -gt 3000 ]; then upload_cache; fi; }
          function _make() { make -j$(getconf _NPROCESSORS_ONLN) -s O=out $* && check_upload_cache; }
          function download_plug_and_trust() { mkdir -p $HOME/se050 && curl -L https://github.com/foundriesio/plug-and-trust/releases/download/v0.0.4/se050-0.0.4.tar.bz2 | tar jxf - --strip-components=1 -C $HOME/se050 || (rm -rf $HOME/se050; echo Nervermind); }

          download_cache
          ccache -s
          download_plug_and_trust

          _make
          _make COMPILER=clang
          _make CFG_TEE_CORE_LOG_LEVEL=4 CFG_TEE_CORE_DEBUG=y CFG_TEE_TA_LOG_LEVEL=4 CFG_CC_OPT_LEVEL=0 CFG_DEBUG_INFO=y
          _make CFG_TEE_CORE_LOG_LEVEL=0 CFG_TEE_CORE_DEBUG=n CFG_TEE_TA_LOG_LEVEL=0 CFG_DEBUG_INFO=n CFG_ENABLE_EMBEDDED_TESTS=n
          _make CFG_TEE_CORE_MALLOC_DEBUG=y CFG_CORE_DEBUG_CHECK_STACKS=y
          _make CFG_CORE_SANITIZE_UNDEFINED=y
          _make CFG_CORE_SANITIZE_KADDRESS=y
          _make CFG_LOCKDEP=y
          _make CFG_CRYPTO=n
          _make CFG_CRYPTO_{AES,DES}=n
          _make CFG_CRYPTO_{DSA,RSA,DH}=n
          _make CFG_CRYPTO_{DSA,RSA,DH,ECC}=n
          _make CFG_CRYPTO_{H,C,CBC_}MAC=n
          _make CFG_CRYPTO_{G,C}CM=n
          _make CFG_CRYPTO_{MD5,SHA{1,224,256,384,512,512_256}}=n
          _make CFG_WITH_PAGER=y out/core/tee{,-pager,-pageable}.bin
          _make CFG_WITH_PAGER=y CFG_CRYPTOLIB_NAME=mbedtls CFG_CRYPTOLIB_DIR=lib/libmbedtls
          _make CFG_WITH_PAGER=y CFG_WITH_LPAE=y
          _make CFG_WITH_LPAE=y
          _make CFG_RPMB_FS=y
          _make CFG_RPMB_FS=y CFG_RPMB_TESTKEY=y
          _make CFG_REE_FS=n CFG_RPMB_FS=y
          _make CFG_WITH_PAGER=y CFG_WITH_LPAE=y CFG_RPMB_FS=y CFG_DT=y CFG_TEE_CORE_LOG_LEVEL=1 CFG_TEE_CORE_DEBUG=y CFG_CC_OPT_LEVEL=0 CFG_DEBUG_INFO=y
          _make CFG_WITH_PAGER=y CFG_WITH_LPAE=y CFG_RPMB_FS=y CFG_DT=y CFG_TEE_CORE_LOG_LEVEL=0 CFG_TEE_CORE_DEBUG=n DEBUG=0
          _make CFG_BUILT_IN_ARGS=y CFG_PAGEABLE_ADDR=0 CFG_NS_ENTRY_ADDR=0 CFG_DT_ADDR=0 CFG_DT=y
          _make CFG_FTRACE_SUPPORT=y CFG_ULIBS_MCOUNT=y CFG_ULIBS_SHARED=y
          _make CFG_TA_GPROF_SUPPORT=y CFG_FTRACE_SUPPORT=y CFG_SYSCALL_FTRACE=y CFG_ULIBS_MCOUNT=y
          _make CFG_SECURE_DATA_PATH=y
          _make CFG_REE_FS_TA_BUFFERED=y
          _make CFG_WITH_USER_TA=n
          _make PLATFORM=vexpress-qemu_armv8a
          _make PLATFORM=vexpress-qemu_armv8a COMPILER=clang
          _make PLATFORM=vexpress-qemu_armv8a CFG_TEE_CORE_LOG_LEVEL=0 CFG_TEE_CORE_DEBUG=n CFG_TEE_TA_LOG_LEVEL=0 CFG_DEBUG_INFO=n
          _make PLATFORM=vexpress-qemu_armv8a CFG_WITH_PAGER=y
          _make PLATFORM=vexpress-qemu_armv8a CFG_FTRACE_SUPPORT=y CFG_ULIBS_MCOUNT=y CFG_ULIBS_SHARED=y
          _make PLATFORM=vexpress-qemu_armv8a CFG_TA_GPROF_SUPPORT=y CFG_FTRACE_SUPPORT=y CFG_SYSCALL_FTRACE=y CFG_ULIBS_MCOUNT=y
          _make PLATFORM=vexpress-qemu_armv8a CFG_VIRTUALIZATION=y
          _make PLATFORM=vexpress-qemu_armv8a CFG_CORE_SEL1_SPMC=y
          dd if=/dev/urandom of=BL32_AP_MM.fd bs=2621440 count=1 && _make PLATFORM=vexpress-qemu_armv8a CFG_STMM_PATH=BL32_AP_MM.fd CFG_RPMB_FS=y CFG_CORE_HEAP_SIZE=524288 CFG_TEE_RAM_VA_SIZE=0x00400000
          _make PLATFORM=stm-b2260
          _make PLATFORM=stm-cannes
          _make PLATFORM=stm32mp1
          _make PLATFORM=stm32mp1-157C_DK2
          _make PLATFORM=vexpress-fvp
          _make PLATFORM=vexpress-fvp CFG_ARM64_core=y
          _make PLATFORM=vexpress-juno
          _make PLATFORM=vexpress-juno CFG_ARM64_core=y
          _make PLATFORM=hikey
          _make PLATFORM=hikey CFG_ARM64_core=y
          _make PLATFORM=mediatek-mt8173
          _make PLATFORM=mediatek-mt8175
          _make PLATFORM=mediatek-mt8183
          _make PLATFORM=mediatek-mt8516
          _make PLATFORM=imx-mx6ulevk
          _make PLATFORM=imx-mx6ulevk CFG_NXP_CAAM=y CFG_CRYPTO_DRIVER=y
          _make PLATFORM=imx-mx6ul9x9evk
          _make PLATFORM=imx-mx6ullevk CFG_WITH_SOFTWARE_PRNG=n CFG_IMX_RNGB=y
          if [ -d $HOME/se050 ]; then _make PLATFORM=imx-mx6ullevk CFG_NXP_SE05X=y CFG_IMX_I2C=y CFG_STACK_{THREAD,TMP}_EXTRA=8192 CFG_CRYPTO_DRV_{CIPHER,ACIPHER}=y CFG_WITH_SOFTWARE_PRNG=n CFG_NXP_SE05X_{DIEID,RNG,RSA,ECC,CTR}_DRV=y CFG_NXP_SE05X_PLUG_AND_TRUST_LIB=$HOME/se050/buildarm/libse050.a CFG_NXP_SE05X_PLUG_AND_TRUST=$HOME/se050; fi
          _make PLATFORM=imx-mx6ulzevk
          _make PLATFORM=imx-mx6slevk
          _make PLATFORM=imx-mx6sllevk
          _make PLATFORM=imx-mx6sxsabreauto
          _make PLATFORM=imx-mx6sxsabresd
          _make PLATFORM=imx-mx6sxsabresd CFG_NXP_CAAM=y CFG_CRYPTO_DRIVER=y
          _make PLATFORM=imx-mx6solosabresd
          _make PLATFORM=imx-mx6solosabreauto
          _make PLATFORM=imx-mx6sxsabreauto
          _make PLATFORM=imx-mx6qsabrelite
          _make PLATFORM=imx-mx6qsabresd
          _make PLATFORM=imx-mx6qsabresd CFG_RPMB_FS=y
          _make PLATFORM=imx-mx6qsabreauto
          _make PLATFORM=imx-mx6qsabreauto CFG_NXP_CAAM=y CFG_CRYPTO_DRIVER=y
          _make PLATFORM=imx-mx6qpsabreauto
          _make PLATFORM=imx-mx6qpsabresd
          _make PLATFORM=imx-mx6dlsabresd
          _make PLATFORM=imx-mx6dlsabreauto
          _make PLATFORM=imx-mx6dapalis
          _make PLATFORM=imx-mx6qapalis
          _make PLATFORM=imx-mx7dsabresd
          _make PLATFORM=imx-mx7dsabresd CFG_NXP_CAAM=y CFG_CRYPTO_DRIVER=y
          _make PLATFORM=imx-mx7ulpevk
          _make PLATFORM=imx-mx8mmevk
          _make PLATFORM=imx-mx8mmevk CFG_NXP_CAAM=y CFG_CRYPTO_DRIVER=y
          if [ -d $HOME/se050 ]; then _make PLATFORM=imx-mx8mmevk CFG_NXP_CAAM=y CFG_NXP_CAAM_RNG_DRV=y CFG_NXP_SE05X=y CFG_IMX_I2C=y CFG_STACK_{THREAD,TMP}_EXTRA=8192 CFG_CRYPTO_DRV_{CIPHER,ACIPHER}=y CFG_NXP_SE05X_RNG_DRV=n CFG_WITH_SOFTWARE_PRNG=n CFG_NXP_SE05X_{DIEID,RSA,ECC,CTR}_DRV=y CFG_NXP_SE05X_PLUG_AND_TRUST_LIB=$HOME/se050/build/libse050.a CFG_NXP_SE05X_PLUG_AND_TRUST=$HOME/se050 ; fi
          _make PLATFORM=imx-mx8mnevk
          _make PLATFORM=imx-mx8mqevk
          _make PLATFORM=imx-mx8mpevk
          _make PLATFORM=imx-mx8qxpmek
          _make PLATFORM=imx-mx8qmmek
          _make PLATFORM=k3-j721e
          _make PLATFORM=k3-j721e CFG_ARM64_core=y
          _make PLATFORM=k3-am65x
          _make PLATFORM=k3-am65x CFG_ARM64_core=y
          _make PLATFORM=ti-dra7xx out/core/tee{,-pager,-pageable}.bin
          _make PLATFORM=ti-am57xx
          _make PLATFORM=ti-am43xx
          _make PLATFORM=sprd-sc9860
          _make PLATFORM=sprd-sc9860 CFG_ARM64_core=y
          _make PLATFORM=ls-ls1021atwr
          _make PLATFORM=ls-ls1021aqds
          _make PLATFORM=ls-ls1043ardb
          _make PLATFORM=ls-ls1046ardb
          _make PLATFORM=ls-ls1012ardb
          _make PLATFORM=ls-ls1012afrwy
          _make PLATFORM=ls-ls1028ardb
          _make PLATFORM=ls-ls1088ardb
          _make PLATFORM=ls-ls2088ardb
          _make PLATFORM=ls-lx2160ardb
          _make PLATFORM=ls-lx2160aqds
          _make PLATFORM=zynq7k-zc702
          _make PLATFORM=zynqmp-zcu102
          _make PLATFORM=zynqmp-zcu102 CFG_ARM64_core=y
          _make PLATFORM=d02
          _make PLATFORM=d02 CFG_ARM64_core=y
          _make PLATFORM=rcar
          _make PLATFORM=rzg
          _make PLATFORM=rzg CFG_ARM64_core=y
          _make PLATFORM=rpi3
          _make PLATFORM=rpi3 CFG_ARM64_core=y
          _make PLATFORM=hikey-hikey960
          _make PLATFORM=hikey-hikey960 COMPILER=clang
          _make PLATFORM=hikey-hikey960 CFG_ARM64_core=y
          _make PLATFORM=hikey-hikey960 CFG_ARM64_core=y COMPILER=clang
          _make PLATFORM=hikey-hikey960 CFG_SECURE_DATA_PATH=n
          _make PLATFORM=poplar
          _make PLATFORM=poplar CFG_ARM64_core=y
          _make PLATFORM=rockchip-rk322x
          _make PLATFORM=sam
          _make PLATFORM=marvell-armada7k8k
          _make PLATFORM=marvell-armada3700
          _make PLATFORM=marvell-otx2t96
          _make PLATFORM=marvell-otx2f95
          _make PLATFORM=marvell-otx2t98
          _make PLATFORM=synquacer
          _make PLATFORM=sunxi-bpi_zero
          _make PLATFORM=sunxi-sun50i_a64
          _make PLATFORM=bcm-ns3 CFG_ARM64_core=y
          _make PLATFORM=hisilicon-hi3519av100_demo
          _make PLATFORM=amlogic
          _make PLATFORM=rzn1

          upload_cache

  - job: QEMUv8_check
    displayName: 'Run regression tests (xtest) in QEMUv8'
    pool:
      vmImage: ubuntu-18.04
    container:
      image: jforissier/optee_os_ci:qemuv8_check
    steps:
      - script: |
          set -e -v
          export LC_ALL=C
          # Azure CI sets ${SYSTEM} to "build" which prevents OpenSSL from building due to:
          # https://github.com/openssl/openssl/blob/OpenSSL_1_1_1l/config#L56
          unset SYSTEM
          WD=$(pwd)
          sudo -E bash -c "cd /root/optee_repo_qemu_v8/.repo/repo && git pull"
          sudo -E bash -c "cd /root/optee_repo_qemu_v8 && repo sync -j 10"
          sudo mv /root/optee_repo_qemu_v8/optee_os /root/optee_repo_qemu_v8/optee_os_old
          sudo ln -s ${WD} /root/optee_repo_qemu_v8/optee_os

          sudo -E make -C /root/optee_repo_qemu_v8/build -j$(getconf _NPROCESSORS_ONLN) CFG_TEE_CORE_LOG_LEVEL=0 check

          sudo -E rm -rf /root/optee_repo_qemu_v8/out-br/build/optee_test*
          sudo -E make -C /root/optee_repo_qemu_v8/build arm-tf-clean
          sudo -E make -C /root/optee_repo_qemu_v8/build -j$(getconf _NPROCESSORS_ONLN) CFG_TEE_CORE_LOG_LEVEL=0 check XEN_BOOT=y

  - job: QEMUv8_build_Rust
    displayName: 'Run regression tests (Rust) in QEMUv8'
    pool:
      vmImage: ubuntu-18.04
    container:
      image: jforissier/optee_os_ci:qemuv8_check
    steps:
      - script: |
          set -e -v
          export HOME=/root
          export LC_ALL=C
          # Azure CI sets ${SYSTEM} to "build" which prevents OpenSSL from building due to:
          # https://github.com/openssl/openssl/blob/OpenSSL_1_1_1l/config#L56
          unset SYSTEM
          WD=$(pwd)
          sudo -E bash -c "cd /root/optee_repo_qemu_v8/.repo/repo && git pull"
          sudo -E bash -c "cd /root/optee_repo_qemu_v8 && repo sync -j 10"
          sudo mv /root/optee_repo_qemu_v8/optee_os /root/optee_repo_qemu_v8/optee_os_old
          sudo ln -s ${WD} /root/optee_repo_qemu_v8/optee_os

          sudo -E bash -c "make -C /root/optee_repo_qemu_v8/build -j$(getconf _NPROCESSORS_ONLN) CFG_TEE_CORE_LOG_LEVEL=0 OPTEE_RUST_ENABLE=y check-rust"