imxrt-hal 0.5.14

Hardware abstraction layer for NXP i.MX RT microcontrollers.
Documentation
name: Check Rust code

on: [push, pull_request]

jobs:
  format:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - name: Install a stable toolchain with rustfmt
      run: rustup toolchain install stable --no-self-update --profile minimal --component rustfmt
    - name: Check formatting
      run: cargo fmt --all -- --check

  # Checks the common HAL for all chips supported by imxrt-ral.
  lint-hal:
    needs: format
    strategy:
      matrix:
        chips:
        - imxrt-ral/imxrt1011
        - imxrt-ral/imxrt1015
        - imxrt-ral/imxrt1021
        - imxrt-ral/imxrt1051
        - imxrt-ral/imxrt1052
        - imxrt-ral/imxrt1061
        - imxrt-ral/imxrt1062
        - imxrt-ral/imxrt1064
        - imxrt-ral/imxrt1176_cm4
        - imxrt-ral/imxrt1176_cm7
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - name: Install a stable toolchain with clippy
      run: rustup toolchain install stable --no-self-update --profile minimal --component clippy
    - name: Lint imxrt-hal
      run: cargo clippy --features=${{ matrix.chips }} --package=imxrt-hal -- -D warnings

  # Indirectly checks & lints the HAL with the HAL's chip feature, and also
  # checks & lints the imxrt-log package.
  lint-log:
    needs: lint-hal
    strategy:
      matrix:
        chips:
        - imxrt-ral/imxrt1011,imxrt1010
        - imxrt-ral/imxrt1021,imxrt1020
        - imxrt-ral/imxrt1061,imxrt1060
        - imxrt-ral/imxrt1062,imxrt1060
        - imxrt-ral/imxrt1064,imxrt1060
        - imxrt-ral/imxrt1176_cm4,imxrt1170
        - imxrt-ral/imxrt1176_cm7,imxrt1170
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - name: Install a stable toolchain with clippy
      run: rustup toolchain install stable --no-self-update --profile minimal --component clippy
    - name: Lint imxrt-log
      run: cargo clippy --features=${{ matrix.chips }} --package=imxrt-log --package=imxrt-hal -- -D warnings
  
  # Lint and build examples for boards.
  examples:
    needs: lint-hal
    strategy:
      matrix:
        config:
        # Boards that support all examples, and should build with additional drivers.
        - --examples --features=board/teensy4,board/lcd1602,board/sai
        - --examples --features=board/imxrt1010evk,board/lcd1602,board/sai
        - --examples --features=board/imxrt1060evk,board/lcd1602
        # SPI examples (might break other examples)
        - --example=rtic_spi_blocking --example=rtic_spi_controller --example=rtic_spi_peripheral --example=rtic_spi --example=async_dma_spi --features=board/teensy4,board/spi
        - --example=rtic_spi_blocking --example=rtic_spi_controller --example=rtic_spi_peripheral --example=rtic_spi --example=async_dma_spi --features=board/imxrt1010evk,board/spi
        - --example=rtic_spi_blocking --example=rtic_spi_controller --example=rtic_spi_peripheral --example=rtic_spi --example=async_dma_spi --features=board/imxrt1060evk,board/spi
        - --example=rtic_spi_blocking --example=rtic_spi_controller --example=rtic_spi_peripheral --example=rtic_spi --example=async_dma_spi --features=board/imxrt1170evk-cm7,board/spi
        # The i.MX RT 1170 EVK (CM7) target is WIP. The list below describes the working examples.
        - --features=board/imxrt1170evk-cm7,board/lcd1602 --example=hal_led
          --example=hal_gpio_input --example=rtic_gpio_input
          --example=hal_uart --example=rtic_uart --example=rtic_dma_uart --example=async_dma_uart
          --example=hal_gpt --example=rtic_gpt
          --example=hal_pit --example=rtic_pit
          --example=hal_logging --example=rtic_logging
          --example=hal_clock_out
          --example=hal_pwm --example=rtic_pwm
          --example=hal_i2c_mpu9250 --example=hal_i2c_lcd1602
          --example=hal_ocotp_fuse
          --example=rtic_usb_serial --example=rtic_usb_test_class --example=rtic_usb_keypress --example=rtic_usb_mouse
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - name: Install a stable toolchain, clippy, for the MCU target
      run: rustup toolchain install stable --no-self-update --profile minimal --component clippy --target thumbv7em-none-eabihf
    - name: Lint board and examples
      run: cargo clippy ${{ matrix.config }} --target=thumbv7em-none-eabihf -- -D warnings
    - name: Build examples
      run: cargo build ${{ matrix.config }} --target=thumbv7em-none-eabihf --release

  # Run unit, integration tests.
  #
  # Select just one compatible RAL feature to pair with the HAL. The goal is to
  # cover all HAL configurations just once. The linting job gives us complete
  # build coverage.
  #
  # This ends up testing imxrt-log multiple times. That's OK.
  tests:
    needs: format
    strategy:
      matrix:
        chips:
        - imxrt-ral/imxrt1011,imxrt1010
        - imxrt-ral/imxrt1021,imxrt1020
        - imxrt-ral/imxrt1062,imxrt1060
        - imxrt-ral/imxrt1176_cm7,imxrt1170
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - name: Install a stable toolchain
      run: rustup toolchain install stable --no-self-update --profile minimal
    - name: Run unit, integration tests
      run: cargo test --features=${{ matrix.chips }} --tests --package=imxrt-hal --package=imxrt-log

  # Ensures that documentation builds, and that links are valid
  docs:
    needs: format
    runs-on: ubuntu-latest
    env:
      RUSTDOCFLAGS: -D warnings
    steps:
    - uses: actions/checkout@v4
    - name: Install a stable toolchain
      run: rustup toolchain install stable --no-self-update --profile minimal
    - name: Run documentation tests
      run: cargo test --features=board/teensy4 --workspace --doc
    - name: Check documentation, doclinks throughout workspace
      run: cargo doc --workspace --no-deps --features=board/teensy4