diff --git a/taskcluster/ci/webrender/kind.yml b/taskcluster/ci/webrender/kind.yml index 5878c2b30c63..3e3c6ca73cca 100644 --- a/taskcluster/ci/webrender/kind.yml +++ b/taskcluster/ci/webrender/kind.yml @@ -91,6 +91,68 @@ jobs: files-changed: - 'gfx/wr/**' + wrench-macos-build: + description: Cross compilation of wrench for macOS on Linux + worker-type: aws-provisioner-v1/gecko-{level}-b-linux + worker: + docker-image: {in-tree: webrender} + env: + TOOLTOOL_MANIFEST: "/builds/worker/checkouts/gecko/browser/config/tooltool-manifests/macosx64/cross-releng.manifest" + chain-of-trust: true + artifacts: + - type: file + name: public/build/wrench-macos.tar.bz2 + path: /builds/worker/artifacts/wrench-macos.tar.bz2 + - type: file + name: public/build/wrench-macos-headless.tar.bz2 + path: /builds/worker/artifacts/wrench-macos-headless.tar.bz2 + toolchains: + - linux64-rust-macos + - linux64-cctools-port + - linux64-clang + - linux64-llvm-dsymutil + - wrench-deps + run: + using: run-task + tooltool-downloads: internal + command: '$HOME/checkouts/gecko/taskcluster/scripts/misc/wrench-macos-build.sh' + treeherder: + platform: macosx64-qr/opt + symbol: WR(B) + when: + files-changed: + - 'gfx/wr/**' + - 'taskcluster/scripts/misc/tooltool-download.sh' + - 'taskcluster/scripts/misc/wr-macos-cross-build-setup.sh' + - 'taskcluster/scripts/misc/wrench-macos-build.sh' + + macos-release: + description: Runs release-mode WebRender CI tests on a macOS worker + worker-type: releng-hardware/gecko-t-osx-1010 + worker: + max-run-time: 3600 + env: + MOZ_FETCHES_DIR: 'checkouts/gecko/gfx/wr' + dependencies: + webrender-wrench-macos-build: webrender-wrench-macos-build + fetches: + webrender-wrench-macos-build: + - 'wrench-macos.tar.bz2' + - 'wrench-macos-headless.tar.bz2' + run: + using: run-task + command: >- + cd $GECKO_PATH/gfx/wr && + export WRENCH_HEADLESS_TARGET=$PWD/wrench-macos-headless/ && + export WRENCH_BINARY=$PWD/wrench-macos/bin/wrench && + ci-scripts/macos-release-tests.sh + treeherder: + platform: macosx64-qr/opt + symbol: WR(wrench) + when: + files-changed: + - 'gfx/wr/**' + windows: description: Runs WebRender CI tests on a Windows worker worker-type: aws-provisioner-v1/gecko-t-win10-64 diff --git a/taskcluster/scripts/misc/wr-macos-cross-build-setup.sh b/taskcluster/scripts/misc/wr-macos-cross-build-setup.sh new file mode 100644 index 000000000000..bf39d4492f81 --- /dev/null +++ b/taskcluster/scripts/misc/wr-macos-cross-build-setup.sh @@ -0,0 +1,81 @@ +#!/bin/bash +set -x -e -v + +export WORKSPACE="/builds/worker/workspace" +export TOOLS_DIR="${WORKSPACE}/build/src" +export TARGET_TRIPLE="x86_64-apple-darwin" + +mkdir -p "${TOOLS_DIR}" + +# The tooltool-download script assumes that the gecko checkout is in +# ${WORKSPACE}/build/src and that it can run `./mach` there. This is not +# true when using run-task (which is what this script runs with) so we +# symlink mach to satisfy tooltool-download's assumptions. +ln -s "${GECKO_PATH}/mach" "${TOOLS_DIR}" +source "${GECKO_PATH}/taskcluster/scripts/misc/tooltool-download.sh" + +MACOS_SYSROOT="${TOOLS_DIR}/MacOSX10.11.sdk" +CLANGDIR="${TOOLS_DIR}/clang" + +# Deploy the wrench dependencies +mv ${TOOLS_DIR}/wrench-deps/{vendor,.cargo} "${GECKO_PATH}/gfx/wr/" + +# Building wrench with the `headless` feature also builds the osmesa-src crate, +# which includes building C++ code. We have to do a bunch of shenanigans +# to make this cross-compile properly. + +pushd "${TOOLS_DIR}/cctools/bin" +# Link all the tools from x86_64-darwin11-* to x86_64-apple-darwin-* because +# x86_64-apple-darwin is the Official Rust Triple (TM) and so that's the prefix +# we run configure with, and the toolchain configure/make will look for. +# We can't just rename the files because e.g. the ar tool invokes the ranlib +# tool with the old prefix hard-coded. So we symlink instead. +for TOOL in x86_64-darwin11-*; do + ln -s "${TOOL}" "${TOOL/x86_64-darwin11/${TARGET_TRIPLE}}" +done + +# Add a pkg-config cross-compile wrapper. Without this, the configure script +# will use pkg-config from the host, which will find host libraries that are +# not what we want. This script stolen from +# https://autotools.io/pkgconfig/cross-compiling.html +cat > ${TARGET_TRIPLE}-pkg-config <