1variables: 2 windows_vm: vs2017-win2016 3 ubuntu_vm: ubuntu-18.04 4 macos_vm: macOS-10.15 5 ci_runner_image: trini/u-boot-gitlab-ci-runner:bionic-20200807-02Sep2020 6 # Add '-u 0' options for Azure pipelines, otherwise we get "permission 7 # denied" error when it tries to "useradd -m -u 1001 vsts_azpcontainer", 8 # since our $(ci_runner_image) user is not root. 9 container_option: -u 0 10 work_dir: /u 11 12jobs: 13 - job: tools_only_windows 14 displayName: 'Ensure host tools build for Windows' 15 pool: 16 vmImage: $(windows_vm) 17 steps: 18 - powershell: | 19 (New-Object Net.WebClient).DownloadFile("https://github.com/msys2/msys2-installer/releases/download/2020-07-20/msys2-base-x86_64-20200720.sfx.exe", "sfx.exe") 20 displayName: 'Install MSYS2' 21 - script: | 22 sfx.exe -y -o%CD:~0,2%\ 23 %CD:~0,2%\msys64\usr\bin\bash -lc "pacman --noconfirm -Syyuu" 24 displayName: 'Update MSYS2' 25 - script: | 26 %CD:~0,2%\msys64\usr\bin\bash -lc "pacman --noconfirm --needed -Sy make gcc bison flex diffutils openssl-devel" 27 displayName: 'Install Toolchain' 28 - script: | 29 echo make tools-only_defconfig tools-only NO_SDL=1 > build-tools.sh 30 %CD:~0,2%\msys64\usr\bin\bash -lc "bash build-tools.sh" 31 displayName: 'Build Host Tools' 32 env: 33 # Tell MSYS2 we need a POSIX emulation layer 34 MSYSTEM: MSYS 35 # Tell MSYS2 not to ‘cd’ our startup directory to HOME 36 CHERE_INVOKING: yes 37 38 - job: tools_only_macOS 39 displayName: 'Ensure host tools build for macOS X' 40 pool: 41 vmImage: $(macos_vm) 42 steps: 43 - script: brew install make 44 displayName: Brew install dependencies 45 - script: | 46 gmake tools-only_config tools-only NO_SDL=1 \ 47 HOSTCFLAGS="-I/usr/local/opt/openssl@1.1/include" \ 48 HOSTLDFLAGS="-L/usr/local/opt/openssl@1.1/lib" \ 49 -j$(sysctl -n hw.logicalcpu) 50 displayName: 'Perform tools-only build' 51 52 - job: cppcheck 53 displayName: 'Static code analysis with cppcheck' 54 pool: 55 vmImage: $(ubuntu_vm) 56 container: 57 image: $(ci_runner_image) 58 options: $(container_option) 59 steps: 60 - script: cppcheck -j$(nproc) --force --quiet --inline-suppr . 61 62 - job: htmldocs 63 displayName: 'Build HTML documentation' 64 pool: 65 vmImage: $(ubuntu_vm) 66 container: 67 image: $(ci_runner_image) 68 options: $(container_option) 69 steps: 70 - script: | 71 virtualenv -p /usr/bin/python3 /tmp/venvhtml 72 . /tmp/venvhtml/bin/activate 73 pip install -r doc/sphinx/requirements.txt 74 make htmldocs 75 76 - job: todo 77 displayName: 'Search for TODO within source tree' 78 pool: 79 vmImage: $(ubuntu_vm) 80 container: 81 image: $(ci_runner_image) 82 options: $(container_option) 83 steps: 84 - script: grep -r TODO . 85 - script: grep -r FIXME . 86 - script: grep -r HACK . | grep -v HACKKIT 87 88 - job: sloccount 89 displayName: 'Some statistics about the code base' 90 pool: 91 vmImage: $(ubuntu_vm) 92 container: 93 image: $(ci_runner_image) 94 options: $(container_option) 95 steps: 96 - script: sloccount . 97 98 - job: maintainers 99 displayName: 'Ensure all configs have MAINTAINERS entries' 100 pool: 101 vmImage: $(ubuntu_vm) 102 container: 103 image: $(ci_runner_image) 104 options: $(container_option) 105 steps: 106 - script: | 107 if [ `./tools/genboardscfg.py -f 2>&1 | wc -l` -ne 0 ]; then exit 1; fi 108 109 - job: tools_only 110 displayName: 'Ensure host tools build' 111 pool: 112 vmImage: $(ubuntu_vm) 113 container: 114 image: $(ci_runner_image) 115 options: $(container_option) 116 steps: 117 - script: | 118 make tools-only_config tools-only -j$(nproc) 119 120 - job: envtools 121 displayName: 'Ensure env tools build' 122 pool: 123 vmImage: $(ubuntu_vm) 124 container: 125 image: $(ci_runner_image) 126 options: $(container_option) 127 steps: 128 - script: | 129 make tools-only_config envtools -j$(nproc) 130 131 - job: utils 132 displayName: 'Run binman, buildman, dtoc, Kconfig and patman testsuites' 133 pool: 134 vmImage: $(ubuntu_vm) 135 steps: 136 - script: | 137 cat << EOF > build.sh 138 set -ex 139 cd ${WORK_DIR} 140 EOF 141 cat << "EOF" >> build.sh 142 git config --global user.name "Azure Pipelines" 143 git config --global user.email bmeng.cn@gmail.com 144 export USER=azure 145 virtualenv -p /usr/bin/python3 /tmp/venv 146 . /tmp/venv/bin/activate 147 pip install pyelftools pytest pygit2 148 export UBOOT_TRAVIS_BUILD_DIR=/tmp/sandbox_spl 149 export PYTHONPATH=${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc/pylibfdt 150 export PATH=${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc:${PATH} 151 ./tools/buildman/buildman -T0 -o ${UBOOT_TRAVIS_BUILD_DIR} -w sandbox_spl 152 ./tools/binman/binman --toolpath ${UBOOT_TRAVIS_BUILD_DIR}/tools test 153 ./tools/buildman/buildman -t 154 ./tools/dtoc/dtoc -t 155 ./tools/patman/patman test 156 make O=${UBOOT_TRAVIS_BUILD_DIR} testconfig 157 EOF 158 cat build.sh 159 # We cannot use "container" like other jobs above, as buildman 160 # seems to hang forever with pre-configured "container" environment 161 docker run -v $PWD:$(work_dir) $(ci_runner_image) /bin/bash $(work_dir)/build.sh 162 163 - job: nokia_rx51_test 164 displayName: 'Run tests for Nokia RX-51 (aka N900)' 165 pool: 166 vmImage: $(ubuntu_vm) 167 container: 168 image: $(ci_runner_image) 169 options: $(container_option) 170 steps: 171 - script: | 172 ./tools/buildman/buildman --fetch-arch arm 173 export PATH=~/.buildman-toolchains/gcc-9.2.0-nolibc/arm-linux-gnueabi/bin/:$PATH 174 test/nokia_rx51_test.sh 175 176 - job: test_py 177 displayName: 'test.py' 178 pool: 179 vmImage: $(ubuntu_vm) 180 strategy: 181 matrix: 182 sandbox: 183 TEST_PY_BD: "sandbox" 184 sandbox_clang: 185 TEST_PY_BD: "sandbox" 186 OVERRIDE: "-O clang-10" 187 sandbox_spl: 188 TEST_PY_BD: "sandbox_spl" 189 TEST_PY_TEST_SPEC: "test_ofplatdata or test_handoff or test_spl" 190 sandbox_flattree: 191 TEST_PY_BD: "sandbox_flattree" 192 evb_ast2500: 193 TEST_PY_BD: "evb-ast2500" 194 TEST_PY_ID: "--id qemu" 195 vexpress_ca15_tc2: 196 TEST_PY_BD: "vexpress_ca15_tc2" 197 TEST_PY_ID: "--id qemu" 198 vexpress_ca9x4: 199 TEST_PY_BD: "vexpress_ca9x4" 200 TEST_PY_ID: "--id qemu" 201 integratorcp_cm926ejs: 202 TEST_PY_BD: "integratorcp_cm926ejs" 203 TEST_PY_ID: "--id qemu" 204 TEST_PY_TEST_SPEC: "not sleep" 205 qemu_arm: 206 TEST_PY_BD: "qemu_arm" 207 TEST_PY_TEST_SPEC: "not sleep" 208 qemu_arm64: 209 TEST_PY_BD: "qemu_arm64" 210 TEST_PY_TEST_SPEC: "not sleep" 211 qemu_mips: 212 TEST_PY_BD: "qemu_mips" 213 TEST_PY_TEST_SPEC: "not sleep" 214 qemu_mipsel: 215 TEST_PY_BD: "qemu_mipsel" 216 TEST_PY_TEST_SPEC: "not sleep" 217 qemu_mips64: 218 TEST_PY_BD: "qemu_mips64" 219 TEST_PY_TEST_SPEC: "not sleep" 220 qemu_mips64el: 221 TEST_PY_BD: "qemu_mips64el" 222 TEST_PY_TEST_SPEC: "not sleep" 223 qemu_malta: 224 TEST_PY_BD: "malta" 225 TEST_PY_ID: "--id qemu" 226 TEST_PY_TEST_SPEC: "not sleep and not efi" 227 qemu_maltael: 228 TEST_PY_BD: "maltael" 229 TEST_PY_ID: "--id qemu" 230 TEST_PY_TEST_SPEC: "not sleep and not efi" 231 qemu_malta64: 232 TEST_PY_BD: "malta64" 233 TEST_PY_ID: "--id qemu" 234 TEST_PY_TEST_SPEC: "not sleep and not efi" 235 qemu_malta64el: 236 TEST_PY_BD: "malta64el" 237 TEST_PY_ID: "--id qemu" 238 TEST_PY_TEST_SPEC: "not sleep and not efi" 239 qemu_ppce500: 240 TEST_PY_BD: "qemu-ppce500" 241 TEST_PY_TEST_SPEC: "not sleep" 242 qemu_riscv32: 243 TEST_PY_BD: "qemu-riscv32" 244 TEST_PY_TEST_SPEC: "not sleep" 245 qemu_riscv64: 246 TEST_PY_BD: "qemu-riscv64" 247 TEST_PY_TEST_SPEC: "not sleep" 248 qemu_riscv32_spl: 249 TEST_PY_BD: "qemu-riscv32_spl" 250 TEST_PY_TEST_SPEC: "not sleep" 251 qemu_riscv64_spl: 252 TEST_PY_BD: "qemu-riscv64_spl" 253 TEST_PY_TEST_SPEC: "not sleep" 254 qemu_x86: 255 TEST_PY_BD: "qemu-x86" 256 TEST_PY_TEST_SPEC: "not sleep" 257 qemu_x86_64: 258 TEST_PY_BD: "qemu-x86_64" 259 TEST_PY_TEST_SPEC: "not sleep" 260 r2dplus_i82557c: 261 TEST_PY_BD: "r2dplus" 262 TEST_PY_ID: "--id i82557c_qemu" 263 r2dplus_pcnet: 264 TEST_PY_BD: "r2dplus" 265 TEST_PY_ID: "--id pcnet_qemu" 266 r2dplus_rtl8139: 267 TEST_PY_BD: "r2dplus" 268 TEST_PY_ID: "--id rtl8139_qemu" 269 r2dplus_tulip: 270 TEST_PY_BD: "r2dplus" 271 TEST_PY_ID: "--id tulip_qemu" 272 xilinx_zynq_virt: 273 TEST_PY_BD: "xilinx_zynq_virt" 274 TEST_PY_ID: "--id qemu" 275 TEST_PY_TEST_SPEC: "not sleep" 276 xilinx_versal_virt: 277 TEST_PY_BD: "xilinx_versal_virt" 278 TEST_PY_ID: "--id qemu" 279 TEST_PY_TEST_SPEC: "not sleep" 280 xtfpga: 281 TEST_PY_BD: "xtfpga" 282 TEST_PY_ID: "--id qemu" 283 TEST_PY_TEST_SPEC: "not sleep" 284 steps: 285 - script: | 286 cat << EOF > test.sh 287 set -ex 288 # make environment variables available as tests are running inside a container 289 export WORK_DIR="${WORK_DIR}" 290 export TEST_PY_BD="${TEST_PY_BD}" 291 export TEST_PY_ID="${TEST_PY_ID}" 292 export TEST_PY_TEST_SPEC="${TEST_PY_TEST_SPEC}" 293 export OVERRIDE="${OVERRIDE}" 294 EOF 295 cat << "EOF" >> test.sh 296 # the below corresponds to .gitlab-ci.yml "before_script" 297 cd ${WORK_DIR} 298 git clone --depth=1 https://source.denx.de/u-boot/u-boot-test-hooks /tmp/uboot-test-hooks 299 ln -s travis-ci /tmp/uboot-test-hooks/bin/`hostname` 300 ln -s travis-ci /tmp/uboot-test-hooks/py/`hostname` 301 grub-mkimage --prefix=\"\" -o ~/grub_x86.efi -O i386-efi normal echo lsefimmap lsefi lsefisystab efinet tftp minicmd 302 grub-mkimage --prefix=\"\" -o ~/grub_x64.efi -O x86_64-efi normal echo lsefimmap lsefi lsefisystab efinet tftp minicmd 303 if [[ "${TEST_PY_BD}" == "qemu-riscv32_spl" ]]; then 304 wget -O - https://github.com/riscv/opensbi/releases/download/v0.8/opensbi-0.8-rv-bin.tar.xz | tar -C /tmp -xJ; 305 export OPENSBI=/tmp/opensbi-0.8-rv-bin/share/opensbi/ilp32/generic/firmware/fw_dynamic.bin; 306 fi 307 if [[ "${TEST_PY_BD}" == "qemu-riscv64_spl" ]]; then 308 wget -O - https://github.com/riscv/opensbi/releases/download/v0.8/opensbi-0.8-rv-bin.tar.xz | tar -C /tmp -xJ; 309 export OPENSBI=/tmp/opensbi-0.8-rv-bin/share/opensbi/lp64/generic/firmware/fw_dynamic.bin; 310 fi 311 # the below corresponds to .gitlab-ci.yml "script" 312 cd ${WORK_DIR} 313 export UBOOT_TRAVIS_BUILD_DIR=/tmp/${TEST_PY_BD}; 314 tools/buildman/buildman -o ${UBOOT_TRAVIS_BUILD_DIR} -w -E -W -e --board ${TEST_PY_BD} ${OVERRIDE} 315 cp ~/grub_x86.efi ${UBOOT_TRAVIS_BUILD_DIR}/ 316 cp ~/grub_x64.efi ${UBOOT_TRAVIS_BUILD_DIR}/ 317 cp /opt/grub/grubriscv64.efi ${UBOOT_TRAVIS_BUILD_DIR}/grub_riscv64.efi 318 cp /opt/grub/grubriscv32.efi ${UBOOT_TRAVIS_BUILD_DIR}/grub_riscv32.efi 319 cp /opt/grub/grubaa64.efi ${UBOOT_TRAVIS_BUILD_DIR}/grub_arm64.efi 320 cp /opt/grub/grubarm.efi ${UBOOT_TRAVIS_BUILD_DIR}/grub_arm.efi 321 virtualenv -p /usr/bin/python3 /tmp/venv 322 . /tmp/venv/bin/activate 323 pip install -r test/py/requirements.txt 324 export PATH=/opt/qemu/bin:/tmp/uboot-test-hooks/bin:${PATH}; 325 export PYTHONPATH=/tmp/uboot-test-hooks/py/travis-ci; 326 # "${var:+"-k $var"}" expands to "" if $var is empty, "-k $var" if not 327 ./test/py/test.py -ra --bd ${TEST_PY_BD} ${TEST_PY_ID} ${TEST_PY_TEST_SPEC:+"-k ${TEST_PY_TEST_SPEC}"} --build-dir "$UBOOT_TRAVIS_BUILD_DIR"; 328 # the below corresponds to .gitlab-ci.yml "after_script" 329 rm -rf /tmp/uboot-test-hooks /tmp/venv 330 EOF 331 cat test.sh 332 # make current directory writeable to uboot user inside the container 333 # as sandbox testing need create files like spi flash images, etc. 334 # (TODO: clean up this in the future) 335 chmod 777 . 336 docker run -v $PWD:$(work_dir) $(ci_runner_image) /bin/bash $(work_dir)/test.sh 337 338 - job: build_the_world 339 displayName: 'Build the World' 340 pool: 341 vmImage: $(ubuntu_vm) 342 strategy: 343 # Use almost the same target division in .travis.yml, only merged 344 # 4 small build jobs (arc/microblaze/nds32/xtensa) into one. 345 matrix: 346 arc_microblaze_nds32_xtensa: 347 BUILDMAN: "arc microblaze nds32 xtensa" 348 arm11_arm7_arm920t_arm946es: 349 BUILDMAN: "arm11 arm7 arm920t arm946es" 350 arm926ejs: 351 BUILDMAN: "arm926ejs -x freescale,siemens,at91,kirkwood,spear,omap" 352 at91_non_armv7: 353 BUILDMAN: "at91 -x armv7" 354 at91_non_arm926ejs: 355 BUILDMAN: "at91 -x arm926ejs" 356 boundary_engicam_toradex: 357 BUILDMAN: "boundary engicam toradex" 358 arm_bcm: 359 BUILDMAN: "bcm -x mips" 360 nxp_arm32: 361 BUILDMAN: "freescale -x powerpc,m68k,aarch64,ls101,ls102,ls104,ls108,ls20,lx216" 362 nxp_ls101x: 363 BUILDMAN: "freescale&ls101" 364 nxp_ls102x: 365 BUILDMAN: "freescale&ls102" 366 nxp_ls104x: 367 BUILDMAN: "freescale&ls104" 368 nxp_ls108x: 369 BUILDMAN: "freescale&ls108" 370 nxp_ls20xx: 371 BUILDMAN: "freescale&ls20" 372 nxp_lx216x: 373 BUILDMAN: "freescale&lx216" 374 imx6: 375 BUILDMAN: "mx6 -x boundary,engicam,freescale,technexion,toradex" 376 imx: 377 BUILDMAN: "mx -x mx6,freescale,technexion,toradex" 378 keystone2_keystone3: 379 BUILDMAN: "k2 k3" 380 samsung_socfpga: 381 BUILDMAN: "samsung socfpga" 382 spear: 383 BUILDMAN: "spear" 384 sun4i: 385 BUILDMAN: "sun4i" 386 sun5i: 387 BUILDMAN: "sun5i" 388 sun6i: 389 BUILDMAN: "sun6i" 390 sun7i: 391 BUILDMAN: "sun7i" 392 sun8i_32bit: 393 BUILDMAN: "sun8i&armv7" 394 sun8i_64bit: 395 BUILDMAN: "sun8i&aarch64" 396 sun9i: 397 BUILDMAN: "sun9i" 398 sun50i: 399 BUILDMAN: "sun50i" 400 arm_catch_all: 401 BUILDMAN: "arm -x arm11,arm7,arm9,aarch64,at91,bcm,freescale,kirkwood,mvebu,siemens,tegra,uniphier,mx,samsung,sunxi,am33xx,omap,rk,toradex,socfpga,k2,k3,zynq" 402 sandbox_x86: 403 BUILDMAN: "sandbox x86" 404 technexion: 405 BUILDMAN: "technexion" 406 kirkwood: 407 BUILDMAN: "kirkwood" 408 mvebu: 409 BUILDMAN: "mvebu" 410 m68k: 411 BUILDMAN: "m68k" 412 mips: 413 BUILDMAN: "mips" 414 non_fsl_ppc: 415 BUILDMAN: "powerpc -x freescale" 416 mpc85xx_freescale: 417 BUILDMAN: "mpc85xx&freescale -x t208xrdb -x t4qds -x t102* -x p1_p2_rdb_pc -x p1010rdb -x corenet_ds -x b4860qds -x bsc91*" 418 t208xrdb_corenet_ds: 419 BUILDMAN: "t208xrdb corenet_ds" 420 fsl_ppc: 421 BUILDMAN: "t4qds b4860qds mpc83xx&freescale mpc86xx&freescale" 422 t102x: 423 BUILDMAN: "t102*" 424 p1_p2_rdb_pc: 425 BUILDMAN: "p1_p2_rdb_pc" 426 p1010rdb_bsc91: 427 BUILDMAN: "p1010rdb bsc91" 428 siemens: 429 BUILDMAN: "siemens" 430 tegra: 431 BUILDMAN: "tegra -x toradex" 432 am33xx_no_siemens: 433 BUILDMAN: "am33xx -x siemens" 434 omap: 435 BUILDMAN: "omap" 436 uniphier: 437 BUILDMAN: "uniphier" 438 aarch64_catch_all: 439 BUILDMAN: "aarch64 -x bcm,k3,tegra,ls1,ls2,lx216,mvebu,uniphier,sunxi,samsung,socfpga,rk,versal,zynq" 440 rockchip: 441 BUILDMAN: "rk" 442 sh: 443 BUILDMAN: "sh -x arm" 444 zynq: 445 BUILDMAN: "zynq&armv7" 446 zynqmp_versal: 447 BUILDMAN: "versal|zynqmp&aarch64" 448 riscv: 449 BUILDMAN: "riscv" 450 steps: 451 - script: | 452 cat << EOF > build.sh 453 set -ex 454 cd ${WORK_DIR} 455 # make environment variables available as tests are running inside a container 456 export BUILDMAN="${BUILDMAN}" 457 EOF 458 cat << "EOF" >> build.sh 459 if [[ "${BUILDMAN}" != "" ]]; then 460 ret=0; 461 tools/buildman/buildman -o /tmp -P -E -W ${BUILDMAN} ${OVERRIDE} || ret=$?; 462 if [[ $ret -ne 0 ]]; then 463 tools/buildman/buildman -o /tmp -seP ${BUILDMAN}; 464 exit $ret; 465 fi; 466 fi 467 EOF 468 cat build.sh 469 docker run -v $PWD:$(work_dir) $(ci_runner_image) /bin/bash $(work_dir)/build.sh 470