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