From 6009fdc7662f00075eeb37e2a5ec385793ab76e8 Mon Sep 17 00:00:00 2001 From: Eric Anholt <eric@anholt.net> Date: Sat, 3 Oct 2020 08:39:12 -0700 Subject: [PATCH] ci: Add support for building rust code, with linting before merge. It's typical in rust code to maintain the standard style, as set by rustfmt. That way, there can be fewer style arguments and nitpicking, since the tool just tells you. --- .gitlab-ci.yml | 35 ++++++++++++++++++++------ .gitlab-ci/build-rust.sh | 20 +++++++++++++++ .gitlab-ci/container/arm_build.sh | 2 ++ .gitlab-ci/container/i386_build.sh | 2 ++ .gitlab-ci/container/ppc64el_build.sh | 2 ++ .gitlab-ci/container/s390x_build.sh | 2 ++ .gitlab-ci/container/x86_build-base.sh | 2 ++ .gitlab-ci/container/x86_build_old.sh | 2 ++ .gitlab-ci/create-cross-file.sh | 17 +++++++++++++ .gitlab-ci/lint-rust.sh | 3 +++ 10 files changed, 79 insertions(+), 8 deletions(-) create mode 100644 .gitlab-ci/build-rust.sh create mode 100755 .gitlab-ci/lint-rust.sh diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f9a457664cb08..5ea28d2311314 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -18,6 +18,7 @@ include: stages: - container+docs - container-2 + - lint - git-archive - deploy - meson-x86_64 @@ -240,7 +241,7 @@ x86_build-base: - .fdo.container-build@debian - .container variables: - FDO_DISTRIBUTION_TAG: &x86_build-base "2020-10-06-clang10-2" + FDO_DISTRIBUTION_TAG: &x86_build-base "2020-10-03-rust" .use-x86_build-base: extends: @@ -258,7 +259,7 @@ x86_build: extends: - .use-x86_build-base variables: - FDO_DISTRIBUTION_TAG: &x86_build "2020-10-09-spvtools-1" + FDO_DISTRIBUTION_TAG: &x86_build "2020-10-03-rust" .use-x86_build: variables: @@ -272,7 +273,7 @@ i386_build: extends: - .use-x86_build-base variables: - FDO_DISTRIBUTION_TAG: &i386_build "2020-10-06-clang10-2" + FDO_DISTRIBUTION_TAG: &i386_build "2020-10-03-rust" .use-i386_build: variables: @@ -286,7 +287,7 @@ ppc64el_build: extends: - .use-x86_build-base variables: - FDO_DISTRIBUTION_TAG: &ppc64el_build "2020-10-06-clang10-2" + FDO_DISTRIBUTION_TAG: &ppc64el_build "2020-10-03-rust" .use-ppc64el_build: variables: @@ -300,7 +301,7 @@ s390x_build: extends: - .use-x86_build-base variables: - FDO_DISTRIBUTION_TAG: &s390x_build "2020-10-06-clang10-2" + FDO_DISTRIBUTION_TAG: &s390x_build "2020-10-03-rust" .use-s390x_build: variables: @@ -313,7 +314,7 @@ s390x_build: x86_test-base: extends: x86_build-base variables: - FDO_DISTRIBUTION_TAG: &x86_test-base "2020-10-06-clang10-2" + FDO_DISTRIBUTION_TAG: &x86_test-base "2020-10-03-rust" .use-x86_test-base: extends: @@ -342,7 +343,7 @@ x86_test-vk: x86_build_old: extends: x86_build-base variables: - FDO_DISTRIBUTION_TAG: &x86_build_old "2020-08-13-gold" + FDO_DISTRIBUTION_TAG: &x86_build_old "2020-10-03-rust" FDO_DISTRIBUTION_VERSION: stretch-slim .use-x86_build_old: @@ -358,7 +359,7 @@ arm_build: - .fdo.container-build@debian@arm64v8 - .container variables: - FDO_DISTRIBUTION_TAG: &arm_build "2020-09-10-libdrm" + FDO_DISTRIBUTION_TAG: &arm_build "2020-10-03-rust" .use-arm_build: variables: @@ -483,6 +484,24 @@ make git archive: # BUILD +lint-rust: + interruptible: true + stage: lint + # Technically we could just use the x86_build-base image, but we don't have a + # handy .use for it (the use under that name is for building container + # images), and the builders will have x86_build around anyway. + extends: + - .use-x86_build + rules: + - changes: + - src/**/*.rs + - .gitlab-ci.yml + - .gitlab-ci/**/* + when: on_success + - when: never + script: + - .gitlab-ci/lint-rust.sh + # Shared between windows and Linux .build-common: extends: .ci-run-policy diff --git a/.gitlab-ci/build-rust.sh b/.gitlab-ci/build-rust.sh new file mode 100644 index 0000000000000..2e96593c60865 --- /dev/null +++ b/.gitlab-ci/build-rust.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# Note that this script is not actually "building" rust, but build- is the +# convention for the shared helpers for putting stuff in our containers. + +set -ex + +# cargo (and rustup) wants to store stuff in $HOME/.cargo, and binaries in +# $HOME/.cargo/bin. Make bin a link to a public bin directory so the commands +# are just available to all build jobs. +mkdir -p $HOME/.cargo +ln -s /usr/local/bin $HOME/.cargo/bin + +# For rust in Mesa, we use rustup to install. It lets us pull rust-related +# tools as binaries, rather than having to cargo build them ourselves. +# +# Pick the rust compiler (1.41) available in Debian stable, and pick a +# specific snapshot from rustup so the compiler doesn't drift on us. +wget https://sh.rustup.rs -O - | \ + sh -s -- -y --default-toolchain 1.41.1-2020-02-27 diff --git a/.gitlab-ci/container/arm_build.sh b/.gitlab-ci/container/arm_build.sh index 29494b381d720..3db5501caae22 100644 --- a/.gitlab-ci/container/arm_build.sh +++ b/.gitlab-ci/container/arm_build.sh @@ -48,6 +48,8 @@ arch=armhf . .gitlab-ci/container/container_pre_build.sh +. .gitlab-ci/build-rust.sh + # dependencies where we want a specific version EXTRA_MESON_ARGS= . .gitlab-ci/build-libdrm.sh diff --git a/.gitlab-ci/container/i386_build.sh b/.gitlab-ci/container/i386_build.sh index 404fe9cac1b43..677e7e9406b8e 100644 --- a/.gitlab-ci/container/i386_build.sh +++ b/.gitlab-ci/container/i386_build.sh @@ -3,3 +3,5 @@ arch=i386 . .gitlab-ci/container/cross_build.sh + +rustup target add i686-unknown-linux-gnu diff --git a/.gitlab-ci/container/ppc64el_build.sh b/.gitlab-ci/container/ppc64el_build.sh index 3519192e8ea5f..32c62c0a25ada 100644 --- a/.gitlab-ci/container/ppc64el_build.sh +++ b/.gitlab-ci/container/ppc64el_build.sh @@ -6,3 +6,5 @@ arch=ppc64el apt-get install -y --no-remove \ libvulkan-dev:$arch + +rustup target add powerpc64le-unknown-linux-gnu diff --git a/.gitlab-ci/container/s390x_build.sh b/.gitlab-ci/container/s390x_build.sh index 38ca850c58273..d8b74697791af 100644 --- a/.gitlab-ci/container/s390x_build.sh +++ b/.gitlab-ci/container/s390x_build.sh @@ -3,3 +3,5 @@ arch=s390x . .gitlab-ci/container/cross_build.sh + +rustup target add s390x-unknown-linux-gnu diff --git a/.gitlab-ci/container/x86_build-base.sh b/.gitlab-ci/container/x86_build-base.sh index f2be201fc37ff..063ffc59a97d3 100644 --- a/.gitlab-ci/container/x86_build-base.sh +++ b/.gitlab-ci/container/x86_build-base.sh @@ -81,6 +81,8 @@ apt-get install -y --no-remove -t buster-backports \ libllvm8 \ meson +. .gitlab-ci/build-rust.sh + # Needed for ci-fairy, this revision is able to upload files to MinIO pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates@6f5af7e5574509726c79109e3c147cee95e81366 diff --git a/.gitlab-ci/container/x86_build_old.sh b/.gitlab-ci/container/x86_build_old.sh index 3343fbb244960..83ff545bd93f2 100644 --- a/.gitlab-ci/container/x86_build_old.sh +++ b/.gitlab-ci/container/x86_build_old.sh @@ -64,6 +64,8 @@ python3 -m pip install meson>=0.52 . .gitlab-ci/container/container_pre_build.sh +. .gitlab-ci/build-rust.sh + ############### Uninstall unused packages . .gitlab-ci/container/container_post_build.sh diff --git a/.gitlab-ci/create-cross-file.sh b/.gitlab-ci/create-cross-file.sh index ba63812ca4183..0330d7b4818c0 100755 --- a/.gitlab-ci/create-cross-file.sh +++ b/.gitlab-ci/create-cross-file.sh @@ -12,6 +12,23 @@ fi # Rely on qemu-user being configured in binfmt_misc on the host sed -i -e '/\[properties\]/a\' -e "needs_exe_wrapper = False" "$cross_file" +# Add a line for rustc, which debcrossgen is missing. +cc=`sed -n 's|c = .\(.*\).|\1|p' < $cross_file` +if [[ "$arch" = "arm64" ]]; then + rust_target=aarch64-unknown-linux-gnu +elif [[ "$arch" = "armhf" ]]; then + rust_target=armv7-unknown-linux-gnueabihf +elif [[ "$arch" = "i386" ]]; then + rust_target=i686-unknown-linux-gnu +elif [[ "$arch" = "ppc64el" ]]; then + rust_target=powerpc64le-unknown-linux-gnu +elif [[ "$arch" = "s390x" ]]; then + rust_target=s390x-unknown-linux-gnu +else + echo "Needs rustc target mapping" +fi +sed -i -e '/\[binaries\]/a\' -e "rust = ['rustc', '--target=$rust_target', '-C', 'linker=$cc']" "$cross_file" + # Set up cmake cross compile toolchain file for dEQP builds toolchain_file="/toolchain-$arch.cmake" if [[ "$arch" = "arm64" ]]; then diff --git a/.gitlab-ci/lint-rust.sh b/.gitlab-ci/lint-rust.sh new file mode 100755 index 0000000000000..9c0ebe1c18b75 --- /dev/null +++ b/.gitlab-ci/lint-rust.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +find . -name '*.rs' | xargs rustfmt --check -- GitLab