uboot/.azure-pipelines.yml
<<
>>
Prefs
   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