parameters:
  cmd: test
  rust_version: stable

jobs:
- job: ${{ parameters.name }}
  displayName: Cross
  strategy:
    matrix:
      i686:
        vmImage: ubuntu-16.04
        target: i686-unknown-linux-gnu
      armv7:
        vmImage: ubuntu-16.04
        target: armv7-unknown-linux-gnueabihf
      powerpc:
        vmImage: ubuntu-16.04
        target: powerpc-unknown-linux-gnu
      powerpc64:
        vmImage: ubuntu-16.04
        target: powerpc64-unknown-linux-gnu
      wasm:
        vmImage: ubuntu-16.04
        target: wasm32-unknown-unknown
  pool:
    vmImage: $(vmImage)

  steps:
    - template: azure-install-rust.yml
      parameters:
        rust_version: ${{parameters.rust_version}}

    # FIXME(taiki-e): When https://github.com/rust-embedded/cross/pull/169 is
    # merged, switch to the installation from crates.io.
    # See https://nbsoftsolutions.com/blog/azure-pipelines-for-rust-projects#workaround-cross-compilation
    # for the current script.
    - script: |
        git clone https://github.com/rust-embedded/cross.git
        cd cross
        git reset --hard fb1cb1d7288151f4349f1cb4c990e0e2281764da #Is broken after this commit (images are not uploaded to new docker hub)
        git apply ../ci/cross-patch
        cargo install --path .
        rm -rf cross
      displayName: Install cross
      condition: not(eq(variables['target'], 'wasm32-unknown-unknown'))

    - script: cross ${{ parameters.cmd }} --target $(target)
      displayName: cross ${{ parameters.cmd }} --target $(target)
      condition: not(eq(variables['target'], 'wasm32-unknown-unknown'))

    # WASM support
    - script: |
        rustup target add $(target)
        cargo build --target $(target)
      displayName: cargo build --target $(target)
      condition: eq(variables['target'], 'wasm32-unknown-unknown')
