ferrous-serialport 4.0.2

A cross-platform low-level serial port library
Documentation
variables:
    APT_CACHE_DIR: apt-cache
    PKG_CONFIG_ALLOW_CROSS: 1 # Enable cross compilation for pkg_config

cache:
    key: "$CI_JOB_NAME"
    untracked: true
    paths:
    - apt-cache/
    - cargo/
    - target/

stages:
  - build
  - lint

.build_template: &build
    image: "rust:latest"
    stage: build
    before_script:
    - mkdir -pv $APT_CACHE_DIR
    - apt-get -qq update
    - apt-get -o dir::cache::archives="$APT_CACHE_DIR" -qq -y install build-essential curl git pkg-config $EXTRA_PACKAGES
    - export PATH="/root/.cargo/bin:$PATH"
    - rustup target add $TARGET || true # Ignore failures when the target and toolchain are the same
    - cargo update
    script:
    - cargo build --target=$TARGET
    - if [[ -z $DISABLE_EXTRA_BUILDS ]]; then cargo build --examples --target=$TARGET; fi
    - if [[ -z $DISABLE_EXTRA_BUILDS ]]; then cargo build --tests --target=$TARGET; fi
    - if [[ -z $DISABLE_TESTS ]]; then cargo test --no-fail-fast --target=$TARGET; fi

x86_64-unknown-linux-gnu-1.36.0:
    <<: *build
    image: "rust:1.36.0"
    variables:
        EXTRA_PACKAGES: "libudev-dev"
        TARGET: x86_64-unknown-linux-gnu

aarch64-unknown-linux-gnu:
    <<: *build
    variables:
        CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc
        EXTRA_PACKAGES: "libudev-dev gcc-aarch64-linux-gnu libc6-dev-arm64-cross"
        TARGET: aarch64-unknown-linux-gnu
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

arm-unknown-linux-gnueabi:
    <<: *build
    variables:
        CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABI_LINKER: arm-linux-gnueabi-gcc
        EXTRA_PACKAGES: "libudev-dev gcc-arm-linux-gnueabi libc6-dev-armel-cross"
        TARGET: arm-unknown-linux-gnueabi
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

arm-unknown-linux-gnueabihf:
    <<: *build
    variables:
        CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_LINKER: arm-linux-gnueabihf-gcc
        EXTRA_PACKAGES: "libudev-dev gcc-arm-linux-gnueabihf libc6-dev-armel-cross"
        TARGET: arm-unknown-linux-gnueabihf
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

armv5te-unknown-linux-gnueabi:
    <<: *build
    variables:
        CARGO_TARGET_ARMV5TE_UNKNOWN_LINUX_GNUEABI_LINKER: arm-linux-gnueabi-gcc
        EXTRA_PACKAGES: "libudev-dev gcc-arm-linux-gnueabi libc6-dev-armel-cross"
        TARGET: armv5te-unknown-linux-gnueabi
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

armv7-unknown-linux-gnueabihf:
    <<: *build
    variables:
        CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER: arm-linux-gnueabihf-gcc
        EXTRA_PACKAGES: "libudev-dev gcc-arm-linux-gnueabihf libc6-dev-armhf-cross"
        TARGET: armv7-unknown-linux-gnueabihf
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

i586-unknown-linux-gnu:
    <<: *build
    variables:
        EXTRA_PACKAGES: "libudev-dev gcc-multilib"
        TARGET: i586-unknown-linux-gnu
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

i686-unknown-linux-gnu:
    <<: *build
    variables:
        EXTRA_PACKAGES: "libudev-dev gcc-multilib"
        TARGET: i686-unknown-linux-gnu
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

mips-unknown-linux-gnu:
    <<: *build
    variables:
        CARGO_TARGET_MIPS_UNKNOWN_LINUX_GNU_LINKER: mips-linux-gnu-gcc
        EXTRA_PACKAGES: "libudev-dev gcc-mips-linux-gnu libc6-dev-mips-cross"
        TARGET: mips-unknown-linux-gnu
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

mips64-unknown-linux-gnuabi64:
    <<: *build
    variables:
        CARGO_TARGET_MIPS64_UNKNOWN_LINUX_GNUABI64_LINKER: mips64-linux-gnuabi64-gcc
        EXTRA_PACKAGES: "libudev-dev gcc-mips64-linux-gnuabi64 libc6-dev-mips64-cross"
        TARGET: mips64-unknown-linux-gnuabi64
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

mips64el-unknown-linux-gnuabi64:
    <<: *build
    variables:
        CARGO_TARGET_MIPS64EL_UNKNOWN_LINUX_GNUABI64_LINKER: mips64el-linux-gnuabi64-gcc
        EXTRA_PACKAGES: "libudev-dev gcc-mips64el-linux-gnuabi64 libc6-dev-mips64el-cross"
        TARGET: mips64el-unknown-linux-gnuabi64
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

mipsel-unknown-linux-gnu:
    <<: *build
    variables:
        CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_GNU_LINKER: mipsel-linux-gnu-gcc
        EXTRA_PACKAGES: "libudev-dev gcc-mipsel-linux-gnu libc6-dev-mipsel-cross"
        TARGET: mipsel-unknown-linux-gnu
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

powerpc-unknown-linux-gnu:
    <<: *build
    variables:
        CARGO_TARGET_POWERPC_UNKNOWN_LINUX_GNU_LINKER: powerpc-linux-gnu-gcc
        EXTRA_PACKAGES: "libudev-dev gcc-powerpc-linux-gnu libc6-dev-powerpc-cross"
        TARGET: powerpc-unknown-linux-gnu
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

powerpc64-unknown-linux-gnu:
    <<: *build
    variables:
        CARGO_TARGET_POWERPC64_UNKNOWN_LINUX_GNU_LINKER: powerpc64-linux-gnu-gcc
        EXTRA_PACKAGES: "libudev-dev gcc-powerpc64-linux-gnu libc6-dev-ppc64-cross"
        TARGET: powerpc64-unknown-linux-gnu
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

powerpc64le-unknown-linux-gnu:
    <<: *build
    variables:
        CARGO_TARGET_POWERPC64LE_UNKNOWN_LINUX_GNU_LINKER: powerpc64le-linux-gnu-gcc
        EXTRA_PACKAGES: "libudev-dev gcc-powerpc64le-linux-gnu libc6-dev-ppc64el-cross"
        TARGET: powerpc64le-unknown-linux-gnu
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

s390x-unknown-linux-gnu:
    <<: *build
    variables:
        CARGO_TARGET_S390X_UNKNOWN_LINUX_GNU_LINKER: s390x-linux-gnu-gcc
        EXTRA_PACKAGES: "libudev-dev gcc-s390x-linux-gnu libc6-dev-s390x-cross"
        TARGET: s390x-unknown-linux-gnu
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

sparc64-unknown-linux-gnu:
    <<: *build
    variables:
        EXTRA_PACKAGES: libudev-dev
        TARGET: sparc64-unknown-linux-gnu
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

x86_64-unknown-linux-gnu:
    <<: *build
    variables:
        EXTRA_PACKAGES: libudev-dev
        TARGET: x86_64-unknown-linux-gnu

aarch64-linux-android:
    <<: *build
    variables:
        TARGET: aarch64-linux-android
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

arm-linux-androideabi:
    <<: *build
    variables:
        TARGET: arm-linux-androideabi
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

armv7-linux-androideabi:
    <<: *build
    variables:
        TARGET: armv7-linux-androideabi
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

i686-linux-android:
    <<: *build
    variables:
        TARGET: i686-linux-android
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

x86_64-linux-android:
    <<: *build
    variables:
        TARGET: x86_64-linux-android
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

i686-unknown-freebsd:
    <<: *build
    variables:
        TARGET: i686-unknown-freebsd
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

x86_64-unknown-freebsd:
    <<: *build
    variables:
        TARGET: x86_64-unknown-freebsd
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

x86_64-unknown-netbsd:
    <<: *build
    variables:
        TARGET: x86_64-unknown-netbsd
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

arm-unknown-linux-musleabi:
    <<: *build
    variables:
        CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABI_LINKER: arm-linux-gnueabi-gcc
        EXTRA_PACKAGES: "gcc-arm-linux-gnueabi"
        TARGET: arm-unknown-linux-musleabi
        DISABLE_TESTS: 1

armv5te-unknown-linux-musleabi:
    <<: *build
    variables:
        CARGO_TARGET_ARMV5TE_UNKNOWN_LINUX_MUSLEABI_LINKER: arm-linux-gnueabi-gcc
        EXTRA_PACKAGES: "gcc-arm-linux-gnueabi"
        TARGET: armv5te-unknown-linux-musleabi
        DISABLE_TESTS: 1

armv7-unknown-linux-musleabihf:
    <<: *build
    variables:
        CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_LINKER: arm-linux-gnueabihf-gcc
        EXTRA_PACKAGES: "gcc-arm-linux-gnueabihf"
        TARGET: armv7-unknown-linux-musleabihf
        DISABLE_TESTS: 1

aarch64-unknown-linux-musl:
    <<: *build
    variables:
        CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER: aarch64-linux-gnu-gcc
        EXTRA_PACKAGES: "gcc-aarch64-linux-gnu"
        TARGET: aarch64-unknown-linux-musl
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

i586-unknown-linux-musl:
    <<: *build
    variables:
        TARGET: i586-unknown-linux-musl

mips-unknown-linux-musl:
    <<: *build
    variables:
        CARGO_TARGET_MIPS_UNKNOWN_LINUX_MUSL_LINKER: mips-linux-gnu-gcc
        EXTRA_PACKAGES: "gcc-mips-linux-gnu"
        TARGET: mips-unknown-linux-musl
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

mipsel-unknown-linux-musl:
    <<: *build
    variables:
        CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_LINKER: mipsel-linux-gnu-gcc
        EXTRA_PACKAGES: "gcc-mipsel-linux-gnu"
        TARGET: mipsel-unknown-linux-musl
        DISABLE_TESTS: 1
        DISABLE_EXTRA_BUILDS: 1

i686-unknown-linux-musl:
    <<: *build
    variables:
        TARGET: i686-unknown-linux-musl

x86_64-unknown-linux-musl:
    <<: *build
    variables:
        TARGET: x86_64-unknown-linux-musl

rustfmt:
    image: "rust:latest"
    stage: lint
    script:
    - rustup component add rustfmt
    - cargo fmt -- --check

clippy:
    <<: *build
    image: "rust:latest"
    variables:
        EXTRA_PACKAGES: "libudev-dev"
        TARGET: x86_64-unknown-linux-gnu
    stage: lint
    script:
    - rustup component add clippy
    - cargo clippy --all-targets --all-features

minimal-deps:
    <<: *build
    image: "rustlang/rust:nightly"
    variables:
        TARGET: x86_64-unknown-linux-gnu
    stage: lint
    allow_failure: true
    script:
    - cargo generate-lockfile -Z minimal-versions
    - cargo build --verbose