x86_64 0.7.2

Support for x86_64 specific instructions, registers, and structures.
Documentation
# Documentation: https://aka.ms/yaml

trigger:
  batch: true
  branches:
    include:
    - '*'
    exclude:
    - 'staging.tmp'

strategy:
  matrix:
    linux:
      image_name: 'ubuntu-16.04'
      rustup_toolchain: nightly
    mac:
      image_name: 'macos-10.13'
      rustup_toolchain: nightly
    windows:
      image_name: 'vs2017-win2016'
      rustup_toolchain: nightly

pool:
  vmImage: $(image_name)

steps:
- bash: |
    echo "Hello world from $AGENT_NAME running on $AGENT_OS"
    echo "Reason: $BUILD_REASON"
    case "$BUILD_REASON" in
            "Manual") echo "$BUILD_REQUESTEDFOR manually queued the build." ;;
            "PullRequest") echo "This is a CI build for a pull request on $BUILD_REQUESTEDFOR." ;;
            "IndividualCI") echo "This is a CI build for $BUILD_REQUESTEDFOR." ;;
            "BatchedCI") echo "This is a batched CI build for $BUILD_REQUESTEDFOR." ;;
        *) "$BUILD_REASON" ;;
    esac
  displayName: 'Build Info'
  continueOnError: true

- script: |
    set -euxo pipefail
    curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain $RUSTUP_TOOLCHAIN
    echo "##vso[task.setvariable variable=PATH;]$PATH:$HOME/.cargo/bin"
  condition: or(eq( variables['Agent.OS'], 'Linux' ),  eq( variables['Agent.OS'], 'Darwin' ))
  displayName: 'Install Rust (Linux/macOS)'

- script: curl -sSf -o rustup-init.exe https://win.rustup.rs && rustup-init.exe -y --default-toolchain %RUSTUP_TOOLCHAIN%
  condition: eq( variables['Agent.OS'], 'Windows_NT' )
  displayName: 'Install Rust (Windows)'

- script: |
    echo ##vso[task.setvariable variable=PATH;]%PATH%;%USERPROFILE%\.cargo\bin
  condition: eq( variables['Agent.OS'], 'Windows_NT' )
  displayName: 'Add ~/.cargo/bin to PATH (Windows)'

- script: |
    rustc -Vv
    cargo -V
  displayName: 'Print Rust Version'
  continueOnError: true

- script: cargo build
  displayName: 'cargo build'

- script: cargo test
  displayName: 'cargo test'

- script: cargo build --features deny-warnings
  displayName: 'Deny Warnings'

- script: rustup target add i686-unknown-linux-gnu && rustup target add thumbv7em-none-eabihf && rustup component add rust-src
  displayName: 'Install Rustup Targets/Components'

- script: cargo build --target i686-unknown-linux-gnu && cargo build --target thumbv7em-none-eabihf
  displayName: 'Build on non x86_64 platforms'

- script: cargo install cargo-xbuild bootimage --debug
  displayName: 'Install cargo-xbuild and bootimage'

- script: sudo apt update && sudo apt install qemu-system-x86
  condition: eq( variables['Agent.OS'], 'Linux' )
  displayName: 'Install QEMU (Linux)'

- script: |
    set -euxo pipefail
    export HOMEBREW_NO_AUTO_UPDATE=1
    export HOMEBREW_NO_BOTTLE_SOURCE_FALLBACK=1
    export HOMEBREW_NO_INSTALL_CLEANUP=1
    brew install qemu
  condition: eq( variables['Agent.OS'], 'Darwin' )
  displayName: 'Install QEMU (macOS)'

- script: |
    choco install qemu --limit-output --no-progress
    echo ##vso[task.setvariable variable=PATH;]%PATH%;C:\Program Files\qemu
    set PATH=%PATH%;C:\Program Files\qemu
    qemu-system-x86_64 --version
  condition: eq( variables['Agent.OS'], 'Windows_NT' )
  failOnStderr: true
  displayName: 'Install QEMU (Windows)'

- script: rustup component add llvm-tools-preview
  displayName: "Add llvm-tools-preview Rustup Component"

- script: bootimage test --manifest-path testing/Cargo.toml
  displayName: 'Integration Tests'

- script: rustup component add rustfmt
  displayName: 'Install Rustfmt'

- script: cargo fmt -- --check
  displayName: 'Check Formatting'