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:focal-20210723-30Sep2021
   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/2021-06-04/msys2-base-x86_64-20210604.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 -r test/py/requirements.txt
 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 --board 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-12"
 187        sandbox_spl:
 188          TEST_PY_BD: "sandbox_spl"
 189          TEST_PY_TEST_SPEC: "test_ofplatdata or test_handoff or test_spl"
 190        sandbox_noinst:
 191          TEST_PY_BD: "sandbox_noinst"
 192          TEST_PY_TEST_SPEC: "test_ofplatdata or test_handoff or test_spl"
 193        sandbox_flattree:
 194          TEST_PY_BD: "sandbox_flattree"
 195        evb_ast2500:
 196          TEST_PY_BD: "evb-ast2500"
 197          TEST_PY_ID: "--id qemu"
 198        integratorcp_cm926ejs:
 199          TEST_PY_BD: "integratorcp_cm926ejs"
 200          TEST_PY_ID: "--id qemu"
 201          TEST_PY_TEST_SPEC: "not sleep"
 202        qemu_arm:
 203          TEST_PY_BD: "qemu_arm"
 204          TEST_PY_TEST_SPEC: "not sleep"
 205        qemu_arm64:
 206          TEST_PY_BD: "qemu_arm64"
 207          TEST_PY_TEST_SPEC: "not sleep"
 208        qemu_malta:
 209          TEST_PY_BD: "malta"
 210          TEST_PY_ID: "--id qemu"
 211          TEST_PY_TEST_SPEC: "not sleep and not efi"
 212        qemu_maltael:
 213          TEST_PY_BD: "maltael"
 214          TEST_PY_ID: "--id qemu"
 215          TEST_PY_TEST_SPEC: "not sleep and not efi"
 216        qemu_malta64:
 217          TEST_PY_BD: "malta64"
 218          TEST_PY_ID: "--id qemu"
 219          TEST_PY_TEST_SPEC: "not sleep and not efi"
 220        qemu_malta64el:
 221          TEST_PY_BD: "malta64el"
 222          TEST_PY_ID: "--id qemu"
 223          TEST_PY_TEST_SPEC: "not sleep and not efi"
 224        qemu_ppce500:
 225          TEST_PY_BD: "qemu-ppce500"
 226          TEST_PY_TEST_SPEC: "not sleep"
 227        qemu_riscv32:
 228          TEST_PY_BD: "qemu-riscv32"
 229          TEST_PY_TEST_SPEC: "not sleep"
 230        qemu_riscv64:
 231          TEST_PY_BD: "qemu-riscv64"
 232          TEST_PY_TEST_SPEC: "not sleep"
 233        qemu_riscv32_spl:
 234          TEST_PY_BD: "qemu-riscv32_spl"
 235          TEST_PY_TEST_SPEC: "not sleep"
 236        qemu_riscv64_spl:
 237          TEST_PY_BD: "qemu-riscv64_spl"
 238          TEST_PY_TEST_SPEC: "not sleep"
 239        qemu_x86:
 240          TEST_PY_BD: "qemu-x86"
 241          TEST_PY_TEST_SPEC: "not sleep"
 242        qemu_x86_64:
 243          TEST_PY_BD: "qemu-x86_64"
 244          TEST_PY_TEST_SPEC: "not sleep"
 245        r2dplus_i82557c:
 246          TEST_PY_BD: "r2dplus"
 247          TEST_PY_ID: "--id i82557c_qemu"
 248        r2dplus_pcnet:
 249          TEST_PY_BD: "r2dplus"
 250          TEST_PY_ID: "--id pcnet_qemu"
 251        r2dplus_rtl8139:
 252          TEST_PY_BD: "r2dplus"
 253          TEST_PY_ID: "--id rtl8139_qemu"
 254        r2dplus_tulip:
 255          TEST_PY_BD: "r2dplus"
 256          TEST_PY_ID: "--id tulip_qemu"
 257        xilinx_zynq_virt:
 258          TEST_PY_BD: "xilinx_zynq_virt"
 259          TEST_PY_ID: "--id qemu"
 260          TEST_PY_TEST_SPEC: "not sleep"
 261        xilinx_versal_virt:
 262          TEST_PY_BD: "xilinx_versal_virt"
 263          TEST_PY_ID: "--id qemu"
 264          TEST_PY_TEST_SPEC: "not sleep"
 265        xtfpga:
 266          TEST_PY_BD: "xtfpga"
 267          TEST_PY_ID: "--id qemu"
 268          TEST_PY_TEST_SPEC: "not sleep"
 269    steps:
 270      - script: |
 271          cat << EOF > test.sh
 272          set -ex
 273          # make environment variables available as tests are running inside a container
 274          export WORK_DIR="${WORK_DIR}"
 275          export TEST_PY_BD="${TEST_PY_BD}"
 276          export TEST_PY_ID="${TEST_PY_ID}"
 277          export TEST_PY_TEST_SPEC="${TEST_PY_TEST_SPEC}"
 278          export OVERRIDE="${OVERRIDE}"
 279          EOF
 280          cat << "EOF" >> test.sh
 281          # the below corresponds to .gitlab-ci.yml "before_script"
 282          cd ${WORK_DIR}
 283          git clone --depth=1 https://source.denx.de/u-boot/u-boot-test-hooks /tmp/uboot-test-hooks
 284          ln -s travis-ci /tmp/uboot-test-hooks/bin/`hostname`
 285          ln -s travis-ci /tmp/uboot-test-hooks/py/`hostname`
 286          grub-mkimage --prefix=\"\" -o ~/grub_x86.efi -O i386-efi normal  echo lsefimmap lsefi lsefisystab efinet tftp minicmd
 287          grub-mkimage --prefix=\"\" -o ~/grub_x64.efi -O x86_64-efi normal  echo lsefimmap lsefi lsefisystab efinet tftp minicmd
 288          if [[ "${TEST_PY_BD}" == "qemu-riscv32_spl" ]]; then
 289              wget -O - https://github.com/riscv/opensbi/releases/download/v0.9/opensbi-0.9-rv-bin.tar.xz | tar -C /tmp -xJ;
 290              export OPENSBI=/tmp/opensbi-0.9-rv-bin/share/opensbi/ilp32/generic/firmware/fw_dynamic.bin;
 291          fi
 292          if [[ "${TEST_PY_BD}" == "qemu-riscv64_spl" ]]; then
 293              wget -O - https://github.com/riscv/opensbi/releases/download/v0.9/opensbi-0.9-rv-bin.tar.xz | tar -C /tmp -xJ;
 294              export OPENSBI=/tmp/opensbi-0.9-rv-bin/share/opensbi/lp64/generic/firmware/fw_dynamic.bin;
 295          fi
 296          # the below corresponds to .gitlab-ci.yml "script"
 297          cd ${WORK_DIR}
 298          export UBOOT_TRAVIS_BUILD_DIR=/tmp/${TEST_PY_BD};
 299          tools/buildman/buildman -o ${UBOOT_TRAVIS_BUILD_DIR} -w -E -W -e --board ${TEST_PY_BD} ${OVERRIDE}
 300          cp ~/grub_x86.efi ${UBOOT_TRAVIS_BUILD_DIR}/
 301          cp ~/grub_x64.efi ${UBOOT_TRAVIS_BUILD_DIR}/
 302          cp /opt/grub/grubriscv64.efi ${UBOOT_TRAVIS_BUILD_DIR}/grub_riscv64.efi
 303          cp /opt/grub/grubaa64.efi ${UBOOT_TRAVIS_BUILD_DIR}/grub_arm64.efi
 304          cp /opt/grub/grubarm.efi ${UBOOT_TRAVIS_BUILD_DIR}/grub_arm.efi
 305          virtualenv -p /usr/bin/python3 /tmp/venv
 306          . /tmp/venv/bin/activate
 307          pip install -r test/py/requirements.txt
 308          export PATH=/opt/qemu/bin:/tmp/uboot-test-hooks/bin:${PATH};
 309          export PYTHONPATH=/tmp/uboot-test-hooks/py/travis-ci;
 310          # "${var:+"-k $var"}" expands to "" if $var is empty, "-k $var" if not
 311          ./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";
 312          # the below corresponds to .gitlab-ci.yml "after_script"
 313          rm -rf /tmp/uboot-test-hooks /tmp/venv
 314          EOF
 315          cat test.sh
 316          # make current directory writeable to uboot user inside the container
 317          # as sandbox testing need create files like spi flash images, etc.
 318          # (TODO: clean up this in the future)
 319          chmod 777 .
 320          # Filesystem tests need extra docker args to run
 321          set --
 322          if [[ "${TEST_PY_BD}" == "sandbox" ]]; then
 323              # mount -o loop needs the loop devices
 324              if modprobe loop; then
 325                  for d in $(find /dev -maxdepth 1 -name 'loop*'); do
 326                      set -- "$@" --device $d:$d
 327                  done
 328              fi
 329              # Needed for mount syscall (for guestmount as well)
 330              set -- "$@" --cap-add SYS_ADMIN
 331              # Default apparmor profile denies mounts
 332              set -- "$@" --security-opt apparmor=unconfined
 333          fi
 334          # Some tests using libguestfs-tools need the fuse device to run
 335          docker run "$@" --device /dev/fuse:/dev/fuse -v $PWD:$(work_dir) $(ci_runner_image) /bin/bash $(work_dir)/test.sh
 336
 337  - job: build_the_world
 338    displayName: 'Build the World'
 339    pool:
 340      vmImage: $(ubuntu_vm)
 341    strategy:
 342      # Use almost the same target division in .travis.yml, only merged
 343      # 4 small build jobs (arc/microblaze/nds32/xtensa) into one.
 344      matrix:
 345        arc_microblaze_nds32_xtensa:
 346          BUILDMAN: "arc microblaze nds32 xtensa"
 347        arm11_arm7_arm920t_arm946es:
 348          BUILDMAN: "arm11 arm7 arm920t arm946es"
 349        arm926ejs:
 350          BUILDMAN: "arm926ejs -x freescale,siemens,at91,kirkwood,omap"
 351        at91_non_armv7:
 352          BUILDMAN: "at91 -x armv7"
 353        at91_non_arm926ejs:
 354          BUILDMAN: "at91 -x arm926ejs"
 355        boundary_engicam_toradex:
 356          BUILDMAN: "boundary engicam toradex"
 357        arm_bcm:
 358          BUILDMAN: "bcm -x mips"
 359        nxp_arm32:
 360          BUILDMAN: "freescale -x powerpc,m68k,aarch64,ls101,ls102,ls104,ls108,ls20,lx216"
 361        nxp_ls101x:
 362          BUILDMAN: "freescale&ls101"
 363        nxp_ls102x:
 364          BUILDMAN: "freescale&ls102"
 365        nxp_ls104x:
 366          BUILDMAN: "freescale&ls104"
 367        nxp_ls108x:
 368          BUILDMAN: "freescale&ls108"
 369        nxp_ls20xx:
 370          BUILDMAN: "freescale&ls20"
 371        nxp_lx216x:
 372          BUILDMAN: "freescale&lx216"
 373        imx6:
 374          BUILDMAN: "mx6 -x boundary,engicam,freescale,technexion,toradex"
 375        imx:
 376          BUILDMAN: "mx -x mx6,freescale,technexion,toradex"
 377        imx8:
 378          BUILDMAN: "imx8"
 379        keystone2_keystone3:
 380          BUILDMAN: "k2 k3"
 381        samsung_socfpga:
 382          BUILDMAN: "samsung socfpga"
 383        sun4i:
 384          BUILDMAN: "sun4i"
 385        sun5i:
 386          BUILDMAN: "sun5i"
 387        sun6i:
 388          BUILDMAN: "sun6i"
 389        sun7i:
 390          BUILDMAN: "sun7i"
 391        sun8i_32bit:
 392          BUILDMAN: "sun8i&armv7"
 393        sun8i_64bit:
 394          BUILDMAN: "sun8i&aarch64"
 395        sun9i:
 396          BUILDMAN: "sun9i"
 397        sun50i:
 398          BUILDMAN: "sun50i"
 399        arm_catch_all:
 400          BUILDMAN: "arm -x arm11,arm7,arm9,aarch64,at91,bcm,freescale,kirkwood,mvebu,renesas,siemens,tegra,uniphier,mx,samsung,sunxi,am33xx,omap,rk,toradex,socfpga,k2,k3,zynq"
 401        sandbox_x86:
 402          BUILDMAN: "sandbox x86"
 403        technexion:
 404          BUILDMAN: "technexion"
 405        kirkwood:
 406          BUILDMAN: "kirkwood"
 407        mvebu:
 408          BUILDMAN: "mvebu"
 409        m68k:
 410          BUILDMAN: "m68k"
 411        mips:
 412          BUILDMAN: "mips"
 413        non_fsl_ppc:
 414          BUILDMAN: "powerpc -x freescale"
 415        mpc85xx_freescale:
 416          BUILDMAN: "mpc85xx&freescale -x t208xrdb -x t102* -x p1_p2_rdb_pc -x p1010rdb -x corenet_ds -x bsc91*"
 417        t208xrdb_corenet_ds:
 418          BUILDMAN: "t208xrdb corenet_ds"
 419        fsl_ppc:
 420          BUILDMAN: "mpc83xx&freescale"
 421        t102x:
 422          BUILDMAN: "t102*"
 423        p1_p2_rdb_pc:
 424          BUILDMAN: "p1_p2_rdb_pc"
 425        p1010rdb_bsc91:
 426          BUILDMAN: "p1010rdb bsc91"
 427        siemens:
 428          BUILDMAN: "siemens"
 429        tegra:
 430          BUILDMAN: "tegra -x toradex"
 431        am33xx_no_siemens:
 432          BUILDMAN: "am33xx -x siemens"
 433        omap:
 434          BUILDMAN: "omap"
 435        uniphier:
 436          BUILDMAN: "uniphier"
 437        aarch64_catch_all:
 438          BUILDMAN: "aarch64 -x bcm,imx8,k3,tegra,ls1,ls2,lx216,mvebu,uniphier,renesas,sunxi,samsung,socfpga,rk,versal,zynq"
 439        rockchip:
 440          BUILDMAN: "rk"
 441        renesas:
 442          BUILDMAN: "renesas"
 443        zynq:
 444          BUILDMAN: "zynq&armv7"
 445        zynqmp_versal:
 446          BUILDMAN: "versal|zynqmp&aarch64"
 447        riscv:
 448          BUILDMAN: "riscv"
 449    steps:
 450      - script: |
 451          cat << EOF > build.sh
 452          set -ex
 453          cd ${WORK_DIR}
 454          # make environment variables available as tests are running inside a container
 455          export BUILDMAN="${BUILDMAN}"
 456          EOF
 457          cat << "EOF" >> build.sh
 458          if [[ "${BUILDMAN}" != "" ]]; then
 459              ret=0;
 460              tools/buildman/buildman -o /tmp -P -E -W ${BUILDMAN} ${OVERRIDE} || ret=$?;
 461              if [[ $ret -ne 0 ]]; then
 462                  tools/buildman/buildman -o /tmp -seP ${BUILDMAN};
 463                  exit $ret;
 464              fi;
 465          fi
 466          EOF
 467          cat build.sh
 468          docker run -v $PWD:$(work_dir) $(ci_runner_image) /bin/bash $(work_dir)/build.sh
 469