1*bbecb9d1SAndroid Build Coastguard Worker# Copyright 2018 The Chromium OS Authors. All rights reserved. 2*bbecb9d1SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*bbecb9d1SAndroid Build Coastguard Worker# found in the LICENSE file. 4*bbecb9d1SAndroid Build Coastguard Worker 5*bbecb9d1SAndroid Build Coastguard WorkerFROM debian:bullseye 6*bbecb9d1SAndroid Build Coastguard WorkerLABEL description="Test crosvm using a command like the following: \ 7*bbecb9d1SAndroid Build Coastguard Workerdocker run --privileged -v /dev/log:/dev/log -v <path to crosvm>:/platform/crosvm:ro <crosvm base image>" 8*bbecb9d1SAndroid Build Coastguard Worker 9*bbecb9d1SAndroid Build Coastguard Worker# should be set to the ID/GROUP_ID of the user running the docker image 10*bbecb9d1SAndroid Build Coastguard WorkerARG USER_ID 11*bbecb9d1SAndroid Build Coastguard WorkerARG GROUP_ID 12*bbecb9d1SAndroid Build Coastguard Worker 13*bbecb9d1SAndroid Build Coastguard WorkerRUN apt-get update && \ 14*bbecb9d1SAndroid Build Coastguard Worker apt-get install -y --no-install-recommends ca-certificates gnupg wget && \ 15*bbecb9d1SAndroid Build Coastguard Worker echo 'deb-src https://deb.debian.org/debian bullseye main' >> /etc/apt/sources.list && \ 16*bbecb9d1SAndroid Build Coastguard Worker cat /etc/apt/sources.list && \ 17*bbecb9d1SAndroid Build Coastguard Worker apt-get update && \ 18*bbecb9d1SAndroid Build Coastguard Worker apt-get build-dep -y mesa && \ 19*bbecb9d1SAndroid Build Coastguard Worker apt-get install -y --no-install-recommends ca-certificates \ 20*bbecb9d1SAndroid Build Coastguard Worker python3-setuptools \ 21*bbecb9d1SAndroid Build Coastguard Worker llvm-dev \ 22*bbecb9d1SAndroid Build Coastguard Worker libxcb-shm0-dev \ 23*bbecb9d1SAndroid Build Coastguard Worker libelf-dev \ 24*bbecb9d1SAndroid Build Coastguard Worker cmake \ 25*bbecb9d1SAndroid Build Coastguard Worker chrony \ 26*bbecb9d1SAndroid Build Coastguard Worker bc \ 27*bbecb9d1SAndroid Build Coastguard Worker flex \ 28*bbecb9d1SAndroid Build Coastguard Worker bison \ 29*bbecb9d1SAndroid Build Coastguard Worker debootstrap \ 30*bbecb9d1SAndroid Build Coastguard Worker cpio \ 31*bbecb9d1SAndroid Build Coastguard Worker xz-utils \ 32*bbecb9d1SAndroid Build Coastguard Worker libegl1-mesa-dev \ 33*bbecb9d1SAndroid Build Coastguard Worker autoconf \ 34*bbecb9d1SAndroid Build Coastguard Worker automake \ 35*bbecb9d1SAndroid Build Coastguard Worker curl \ 36*bbecb9d1SAndroid Build Coastguard Worker g++ \ 37*bbecb9d1SAndroid Build Coastguard Worker gcc \ 38*bbecb9d1SAndroid Build Coastguard Worker gdb \ 39*bbecb9d1SAndroid Build Coastguard Worker git \ 40*bbecb9d1SAndroid Build Coastguard Worker kmod \ 41*bbecb9d1SAndroid Build Coastguard Worker libcap-dev \ 42*bbecb9d1SAndroid Build Coastguard Worker libdbus-1-dev \ 43*bbecb9d1SAndroid Build Coastguard Worker libegl1-mesa-dev \ 44*bbecb9d1SAndroid Build Coastguard Worker libepoxy-dev \ 45*bbecb9d1SAndroid Build Coastguard Worker libfdt-dev \ 46*bbecb9d1SAndroid Build Coastguard Worker libgl1-mesa-dev \ 47*bbecb9d1SAndroid Build Coastguard Worker libgles2-mesa-dev \ 48*bbecb9d1SAndroid Build Coastguard Worker libpciaccess-dev \ 49*bbecb9d1SAndroid Build Coastguard Worker libssl-dev \ 50*bbecb9d1SAndroid Build Coastguard Worker libtool \ 51*bbecb9d1SAndroid Build Coastguard Worker libusb-1.0-0-dev \ 52*bbecb9d1SAndroid Build Coastguard Worker libwayland-dev \ 53*bbecb9d1SAndroid Build Coastguard Worker make \ 54*bbecb9d1SAndroid Build Coastguard Worker nasm \ 55*bbecb9d1SAndroid Build Coastguard Worker ninja-build \ 56*bbecb9d1SAndroid Build Coastguard Worker pkg-config \ 57*bbecb9d1SAndroid Build Coastguard Worker protobuf-compiler \ 58*bbecb9d1SAndroid Build Coastguard Worker python \ 59*bbecb9d1SAndroid Build Coastguard Worker libtinfo5 \ 60*bbecb9d1SAndroid Build Coastguard Worker python3-protobuf \ 61*bbecb9d1SAndroid Build Coastguard Worker clang \ 62*bbecb9d1SAndroid Build Coastguard Worker iptables \ 63*bbecb9d1SAndroid Build Coastguard Worker libunwind-dev \ 64*bbecb9d1SAndroid Build Coastguard Worker libprotobuf-dev \ 65*bbecb9d1SAndroid Build Coastguard Worker protobuf-compiler \ 66*bbecb9d1SAndroid Build Coastguard Worker libprotoc-dev \ 67*bbecb9d1SAndroid Build Coastguard Worker libdw-dev \ 68*bbecb9d1SAndroid Build Coastguard Worker libprotobuf-dev \ 69*bbecb9d1SAndroid Build Coastguard Worker libdocopt-dev \ 70*bbecb9d1SAndroid Build Coastguard Worker && \ 71*bbecb9d1SAndroid Build Coastguard Worker apt-get -y build-dep intel-gpu-tools 72*bbecb9d1SAndroid Build Coastguard Worker 73*bbecb9d1SAndroid Build Coastguard WorkerENV RUSTUP_HOME=/usr/local/rustup \ 74*bbecb9d1SAndroid Build Coastguard Worker CARGO_HOME=/usr/local/cargo \ 75*bbecb9d1SAndroid Build Coastguard Worker PATH=/usr/local/cargo/bin:$PATH \ 76*bbecb9d1SAndroid Build Coastguard Worker RUST_VERSION=1.45.2 \ 77*bbecb9d1SAndroid Build Coastguard Worker RUSTFLAGS='--cfg hermetic' 78*bbecb9d1SAndroid Build Coastguard Worker 79*bbecb9d1SAndroid Build Coastguard Worker# Debian usually has an old rust version in the repository. Instead of using that, we use rustup to 80*bbecb9d1SAndroid Build Coastguard Worker# pull in a toolchain versions of our choosing. 81*bbecb9d1SAndroid Build Coastguard WorkerRUN curl -LO "https://static.rust-lang.org/rustup/archive/1.22.1/x86_64-unknown-linux-gnu/rustup-init" \ 82*bbecb9d1SAndroid Build Coastguard Worker && echo "49c96f3f74be82f4752b8bffcf81961dea5e6e94ce1ccba94435f12e871c3bdb *rustup-init" | sha256sum -c - \ 83*bbecb9d1SAndroid Build Coastguard Worker && chmod +x rustup-init \ 84*bbecb9d1SAndroid Build Coastguard Worker && ./rustup-init -y --no-modify-path --default-toolchain $RUST_VERSION \ 85*bbecb9d1SAndroid Build Coastguard Worker && rm rustup-init \ 86*bbecb9d1SAndroid Build Coastguard Worker && chmod -R a+w $RUSTUP_HOME $CARGO_HOME \ 87*bbecb9d1SAndroid Build Coastguard Worker && rustup --version \ 88*bbecb9d1SAndroid Build Coastguard Worker && cargo --version \ 89*bbecb9d1SAndroid Build Coastguard Worker && rustc --version 90*bbecb9d1SAndroid Build Coastguard Worker 91*bbecb9d1SAndroid Build Coastguard Worker# Set the default toolchain to 'stable' to match the one that bin/smoke_test 92*bbecb9d1SAndroid Build Coastguard Worker# uses. This allows kokoro runs to avoid re-downloading the toolchain as long 93*bbecb9d1SAndroid Build Coastguard Worker# as the version matches RUST_VERSION. 94*bbecb9d1SAndroid Build Coastguard WorkerRUN rustup default stable 95*bbecb9d1SAndroid Build Coastguard Worker 96*bbecb9d1SAndroid Build Coastguard Worker# Warms up the cargo registry cache for future cargo runs. Cargo will still update the cache using a 97*bbecb9d1SAndroid Build Coastguard Worker# git pull, but it only needs to download files that were changed since this image was built. 98*bbecb9d1SAndroid Build Coastguard WorkerRUN cargo install thisiznotarealpackage -q || true 99*bbecb9d1SAndroid Build Coastguard Worker 100*bbecb9d1SAndroid Build Coastguard Worker# Used /scratch for building dependencies which are too new or don't exist on Debian stretch. 101*bbecb9d1SAndroid Build Coastguard WorkerWORKDIR /scratch 102*bbecb9d1SAndroid Build Coastguard Worker 103*bbecb9d1SAndroid Build Coastguard Worker# Suppress warnings about detached HEAD, which will happen a lot and is meaningless in this context. 104*bbecb9d1SAndroid Build Coastguard WorkerRUN git config --global advice.detachedHead false 105*bbecb9d1SAndroid Build Coastguard Worker 106*bbecb9d1SAndroid Build Coastguard Worker# New libepoxy and libdrm-dev requires newer meson than is in Debian stretch. 107*bbecb9d1SAndroid Build Coastguard WorkerARG MESON_COMMIT=master 108*bbecb9d1SAndroid Build Coastguard WorkerRUN git clone https://github.com/mesonbuild/meson /meson \ 109*bbecb9d1SAndroid Build Coastguard Worker && cd /meson \ 110*bbecb9d1SAndroid Build Coastguard Worker && git checkout $MESON_COMMIT \ 111*bbecb9d1SAndroid Build Coastguard Worker && rm -f /usr/bin/meson \ 112*bbecb9d1SAndroid Build Coastguard Worker && ln -s $PWD/meson.py /usr/bin/meson 113*bbecb9d1SAndroid Build Coastguard Worker 114*bbecb9d1SAndroid Build Coastguard Worker# The libdrm-dev in distro can be too old to build minigbm, 115*bbecb9d1SAndroid Build Coastguard Worker# so we build it from upstream. 116*bbecb9d1SAndroid Build Coastguard WorkerARG DRM_COMMIT=master 117*bbecb9d1SAndroid Build Coastguard WorkerRUN git clone https://gitlab.freedesktop.org/mesa/drm.git/ \ 118*bbecb9d1SAndroid Build Coastguard Worker && cd drm \ 119*bbecb9d1SAndroid Build Coastguard Worker && git checkout $DRM_COMMIT \ 120*bbecb9d1SAndroid Build Coastguard Worker && meson build -Dlibdir=lib \ 121*bbecb9d1SAndroid Build Coastguard Worker && ninja -C build/ install 122*bbecb9d1SAndroid Build Coastguard Worker 123*bbecb9d1SAndroid Build Coastguard Worker# The gbm used by upstream linux distros is not compatible with crosvm, which must use Chrome OS's 124*bbecb9d1SAndroid Build Coastguard Worker# minigbm. 125*bbecb9d1SAndroid Build Coastguard WorkerRUN git clone https://chromium.googlesource.com/chromiumos/platform/minigbm \ 126*bbecb9d1SAndroid Build Coastguard Worker && cd minigbm \ 127*bbecb9d1SAndroid Build Coastguard Worker && sed 's/-Wall/-Wno-maybe-uninitialized/g' -i Makefile \ 128*bbecb9d1SAndroid Build Coastguard Worker && make CPPFLAGS="-DDRV_I915" DRV_I915=1 install -j$(nproc) 129*bbecb9d1SAndroid Build Coastguard Worker 130*bbecb9d1SAndroid Build Coastguard WorkerRUN git clone https://gitlab.freedesktop.org/virgl/virglrenderer.git \ 131*bbecb9d1SAndroid Build Coastguard Worker && cd virglrenderer \ 132*bbecb9d1SAndroid Build Coastguard Worker && mkdir -p build \ 133*bbecb9d1SAndroid Build Coastguard Worker && meson build/ -Dprefix=/usr/local -Dlibdir=lib \ 134*bbecb9d1SAndroid Build Coastguard Worker && ninja -C build/ install 135*bbecb9d1SAndroid Build Coastguard Worker 136*bbecb9d1SAndroid Build Coastguard Worker# Install libtpm2 so that tpm2-sys/build.rs does not try to build it in place in 137*bbecb9d1SAndroid Build Coastguard Worker# the read-only source directory. 138*bbecb9d1SAndroid Build Coastguard WorkerARG TPM2_COMMIT=073dc25aa4dda42475a7a5a140399fc5db61b20f 139*bbecb9d1SAndroid Build Coastguard WorkerRUN git clone https://chromium.googlesource.com/chromiumos/third_party/tpm2 \ 140*bbecb9d1SAndroid Build Coastguard Worker && cd tpm2 \ 141*bbecb9d1SAndroid Build Coastguard Worker && git checkout $TPM2_COMMIT \ 142*bbecb9d1SAndroid Build Coastguard Worker && make -j$(nproc) \ 143*bbecb9d1SAndroid Build Coastguard Worker && cp build/libtpm2.a /lib 144*bbecb9d1SAndroid Build Coastguard Worker 145*bbecb9d1SAndroid Build Coastguard Worker# PUll down platform2 repositroy and install librendernodehost. 146*bbecb9d1SAndroid Build Coastguard Worker# Note that we clone the repository outside of /scratch not to be removed 147*bbecb9d1SAndroid Build Coastguard Worker# because crosvm depends on libvda. 148*bbecb9d1SAndroid Build Coastguard WorkerENV PLATFORM2_ROOT=/platform2 149*bbecb9d1SAndroid Build Coastguard WorkerARG PLATFORM2_COMMIT=2dce812fc9091e41a33094929610199468ee322b 150*bbecb9d1SAndroid Build Coastguard WorkerRUN git clone https://chromium.googlesource.com/chromiumos/platform2 $PLATFORM2_ROOT \ 151*bbecb9d1SAndroid Build Coastguard Worker && cd $PLATFORM2_ROOT \ 152*bbecb9d1SAndroid Build Coastguard Worker && git checkout $PLATFORM2_COMMIT 153*bbecb9d1SAndroid Build Coastguard Worker 154*bbecb9d1SAndroid Build Coastguard Worker# Set up sysroot from which system_api proto files are built. 155*bbecb9d1SAndroid Build Coastguard WorkerENV SYSROOT=/sysroot 156*bbecb9d1SAndroid Build Coastguard WorkerRUN mkdir -p $SYSROOT/usr/include/chromeos/dbus/trunks \ 157*bbecb9d1SAndroid Build Coastguard Worker && cp $PLATFORM2_ROOT/trunks/interface.proto \ 158*bbecb9d1SAndroid Build Coastguard Worker $SYSROOT/usr/include/chromeos/dbus/trunks 159*bbecb9d1SAndroid Build Coastguard Worker# Copy it under rustc's sysroot as well for cargo clippy. 160*bbecb9d1SAndroid Build Coastguard WorkerRUN export RUST_SYSROOT=$(rustc --print sysroot); echo $RUST_SYSROOT 161*bbecb9d1SAndroid Build Coastguard WorkerRUN mkdir -p $RUST_SYSROOT/usr/include/chromeos/dbus/trunks \ 162*bbecb9d1SAndroid Build Coastguard Worker && cp $PLATFORM2_ROOT/trunks/interface.proto \ 163*bbecb9d1SAndroid Build Coastguard Worker $RUST_SYSROOT/usr/include/chromeos/dbus/trunks 164*bbecb9d1SAndroid Build Coastguard Worker 165*bbecb9d1SAndroid Build Coastguard Worker# Reduces image size and prevents accidentally using /scratch files 166*bbecb9d1SAndroid Build Coastguard WorkerRUN rm -r /scratch 167*bbecb9d1SAndroid Build Coastguard WorkerWORKDIR / 168*bbecb9d1SAndroid Build Coastguard Worker 169*bbecb9d1SAndroid Build Coastguard Worker# The manual installation of shared objects requires an ld.so.cache refresh. 170*bbecb9d1SAndroid Build Coastguard WorkerRUN ldconfig 171*bbecb9d1SAndroid Build Coastguard Worker 172*bbecb9d1SAndroid Build Coastguard Worker# Pull down repositories that crosvm depends on to cros checkout-like locations. 173*bbecb9d1SAndroid Build Coastguard WorkerENV CROS_ROOT=/ 174*bbecb9d1SAndroid Build Coastguard WorkerENV THIRD_PARTY_ROOT=$CROS_ROOT/third_party 175*bbecb9d1SAndroid Build Coastguard WorkerRUN mkdir -p $THIRD_PARTY_ROOT 176*bbecb9d1SAndroid Build Coastguard WorkerENV PLATFORM_ROOT=$CROS_ROOT/platform 177*bbecb9d1SAndroid Build Coastguard WorkerRUN mkdir -p $PLATFORM_ROOT 178*bbecb9d1SAndroid Build Coastguard WorkerENV AOSP_EXTERNAL_ROOT=$CROS_ROOT/aosp/external 179*bbecb9d1SAndroid Build Coastguard WorkerRUN mkdir -p $AOSP_EXTERNAL_ROOT 180*bbecb9d1SAndroid Build Coastguard Worker 181*bbecb9d1SAndroid Build Coastguard Worker# minijail does not exist in upstream linux distros. 182*bbecb9d1SAndroid Build Coastguard WorkerARG MINIJAIL_COMMIT=5f9e3001c61626d2863dad91248ba8496c3ef511 183*bbecb9d1SAndroid Build Coastguard WorkerRUN git clone https://android.googlesource.com/platform/external/minijail $AOSP_EXTERNAL_ROOT/minijail \ 184*bbecb9d1SAndroid Build Coastguard Worker && cd $AOSP_EXTERNAL_ROOT/minijail \ 185*bbecb9d1SAndroid Build Coastguard Worker && git checkout $MINIJAIL_COMMIT \ 186*bbecb9d1SAndroid Build Coastguard Worker && make -j$(nproc) \ 187*bbecb9d1SAndroid Build Coastguard Worker && cp libminijail.so /usr/lib/x86_64-linux-gnu/ 188*bbecb9d1SAndroid Build Coastguard Worker 189*bbecb9d1SAndroid Build Coastguard Worker# Pull the cras library for audio access. 190*bbecb9d1SAndroid Build Coastguard WorkerARG ADHD_COMMIT=5068bdd18b51de8f2d5bcff754cdecda80de8f44 191*bbecb9d1SAndroid Build Coastguard WorkerRUN git clone https://chromium.googlesource.com/chromiumos/third_party/adhd $THIRD_PARTY_ROOT/adhd \ 192*bbecb9d1SAndroid Build Coastguard Worker && cd $THIRD_PARTY_ROOT/adhd \ 193*bbecb9d1SAndroid Build Coastguard Worker && git checkout $ADHD_COMMIT 194*bbecb9d1SAndroid Build Coastguard Worker 195*bbecb9d1SAndroid Build Coastguard WorkerARG VPERFETTO_COMMIT=3ce4813ae114e5f2e6e0b3f29517a88246c00363 196*bbecb9d1SAndroid Build Coastguard WorkerRUN git clone https://github.com/741g/vperfetto.git && \ 197*bbecb9d1SAndroid Build Coastguard Worker cd vperfetto && \ 198*bbecb9d1SAndroid Build Coastguard Worker git checkout $VPERFETTO_COMMIT && \ 199*bbecb9d1SAndroid Build Coastguard Worker cmake -G Ninja -B_build -DOPTION_BUILD_TESTS=FALSE && \ 200*bbecb9d1SAndroid Build Coastguard Worker ninja -C _build install 201*bbecb9d1SAndroid Build Coastguard Worker 202*bbecb9d1SAndroid Build Coastguard WorkerARG CROSVM_COMMIT=3f9373f474a295df0f8a38592472ae59adc98e29 203*bbecb9d1SAndroid Build Coastguard WorkerRUN mkdir -p /platform/ \ 204*bbecb9d1SAndroid Build Coastguard Worker && cd /platform \ 205*bbecb9d1SAndroid Build Coastguard Worker && git clone --single-branch -b perfetto https://gitlab.freedesktop.org/tomeu/crosvm.git \ 206*bbecb9d1SAndroid Build Coastguard Worker && cd crosvm \ 207*bbecb9d1SAndroid Build Coastguard Worker && cargo install --locked --debug --features 'default-no-sandbox wl-dmabuf gpu x virtio-gpu-next' --path . --root /usr/local 208*bbecb9d1SAndroid Build Coastguard Worker 209*bbecb9d1SAndroid Build Coastguard WorkerRUN export uid=$USER_ID gid=$GROUP_ID && \ 210*bbecb9d1SAndroid Build Coastguard Worker mkdir -p /home/chronos && \ 211*bbecb9d1SAndroid Build Coastguard Worker echo "chronos:x:${uid}:${gid}:Developer,,,:/home/chronos:/bin/bash" >> /etc/passwd && \ 212*bbecb9d1SAndroid Build Coastguard Worker echo "chronos:x:${uid}:" >> /etc/group && \ 213*bbecb9d1SAndroid Build Coastguard Worker chown ${uid}:${gid} -R /home/chronos 214*bbecb9d1SAndroid Build Coastguard Worker 215*bbecb9d1SAndroid Build Coastguard Worker 216*bbecb9d1SAndroid Build Coastguard Worker#crony didn't install cleanly when using --include, so we add it by using an extra apt install 217*bbecb9d1SAndroid Build Coastguard Worker 218*bbecb9d1SAndroid Build Coastguard WorkerENV EXTRA_PACKAGES="sudo,strace,libxcb-dri2-0,libxcb-dri3-0,libx11-xcb1,libxcb-xfixes0,libxcb-present0,libxcb-sync1,libxshmfence1,libx11-6,sysvinit-core,libwayland-client0,libwayland-server0,time,inetutils-ping,dnsutils,libpng16-16,libprocps8,valgrind,libsensors5,python3,wget,gnupg,ca-certificates,llvm-dev,chrony" 219*bbecb9d1SAndroid Build Coastguard Worker 220*bbecb9d1SAndroid Build Coastguard WorkerRUN ulimit -n 1024 && \ 221*bbecb9d1SAndroid Build Coastguard Worker debootstrap --variant=minbase --components main,contrib,non-free --include=$EXTRA_PACKAGES bullseye /rootfs http://deb.debian.org/debian && \ 222*bbecb9d1SAndroid Build Coastguard Worker chroot /rootfs /bin/bash -c "apt install -yy gdb" && \ 223*bbecb9d1SAndroid Build Coastguard Worker chroot /rootfs /bin/bash -c "dpkg-query -Wf '\${Installed-Size}\t\${Package}\n' | sort -n " && \ 224*bbecb9d1SAndroid Build Coastguard Worker chroot /rootfs /bin/bash -c "useradd -u 1001 -r -d / -s /sbin/nologin -c 'crossvm image user' perfetto" 225*bbecb9d1SAndroid Build Coastguard Worker 226*bbecb9d1SAndroid Build Coastguard WorkerCOPY perf-testing/Docker/init.sh /rootfs/. 227*bbecb9d1SAndroid Build Coastguard Worker 228*bbecb9d1SAndroid Build Coastguard WorkerRUN cd /rootfs && \ 229*bbecb9d1SAndroid Build Coastguard Worker find -H | cpio -H newc -o | xz --check=crc32 -T4 - > /rootfs.cpio.gz 230*bbecb9d1SAndroid Build Coastguard Worker 231*bbecb9d1SAndroid Build Coastguard WorkerCOPY perf-testing/Docker/x86_64.config /tmp/. 232*bbecb9d1SAndroid Build Coastguard WorkerRUN mkdir -p kernel && \ 233*bbecb9d1SAndroid Build Coastguard Worker wget -O- https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.10.16.tar.xz | tar -xJ --strip-components=1 -C kernel && \ 234*bbecb9d1SAndroid Build Coastguard Worker cd kernel && \ 235*bbecb9d1SAndroid Build Coastguard Worker ./scripts/kconfig/merge_config.sh arch/x86/configs/x86_64_defconfig /tmp/x86_64.config && \ 236*bbecb9d1SAndroid Build Coastguard Worker make -j12 vmlinux && \ 237*bbecb9d1SAndroid Build Coastguard Worker cp vmlinux /. && \ 238*bbecb9d1SAndroid Build Coastguard Worker cd .. && \ 239*bbecb9d1SAndroid Build Coastguard Worker rm -rf kernel 240*bbecb9d1SAndroid Build Coastguard Worker 241*bbecb9d1SAndroid Build Coastguard Worker# Need an unreleased version of Waffle for surfaceless support in apitrace 242*bbecb9d1SAndroid Build Coastguard Worker# Replace this build with the Debian package once that's possible 243*bbecb9d1SAndroid Build Coastguard WorkerENV WAFFLE_VERSION="b6d94483694b6889a8567b6bd748f7baad527df4" 244*bbecb9d1SAndroid Build Coastguard WorkerRUN git clone https://gitlab.freedesktop.org/mesa/waffle.git --single-branch --no-checkout /waffle && \ 245*bbecb9d1SAndroid Build Coastguard Worker cd /waffle && \ 246*bbecb9d1SAndroid Build Coastguard Worker git checkout "$WAFFLE_VERSION" && \ 247*bbecb9d1SAndroid Build Coastguard Worker cmake -B_build -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=Debug -Dwaffle_has_surfaceless_egl=1 . && \ 248*bbecb9d1SAndroid Build Coastguard Worker make -j12 -C _build install && \ 249*bbecb9d1SAndroid Build Coastguard Worker mkdir -p build/lib build/bin && \ 250*bbecb9d1SAndroid Build Coastguard Worker cp _build/lib/libwaffle-1.so build/lib/libwaffle-1.so.0 && \ 251*bbecb9d1SAndroid Build Coastguard Worker cp _build/bin/wflinfo build/bin/wflinfo 252*bbecb9d1SAndroid Build Coastguard Worker 253*bbecb9d1SAndroid Build Coastguard WorkerENV APITRACE_VERSION="perfetto" 254*bbecb9d1SAndroid Build Coastguard WorkerRUN git clone https://gitlab.freedesktop.org/tomeu/apitrace.git --single-branch -b perfetto --no-checkout /apitrace && \ 255*bbecb9d1SAndroid Build Coastguard Worker cd /apitrace && \ 256*bbecb9d1SAndroid Build Coastguard Worker git checkout "$APITRACE_VERSION" && \ 257*bbecb9d1SAndroid Build Coastguard Worker cmake -G Ninja -B_build -H. -DCMAKE_BUILD_TYPE=Debug -DENABLE_GUI=False -DENABLE_WAFFLE=on -DWaffle_DIR=/usr/local/lib/cmake/Waffle/ && \ 258*bbecb9d1SAndroid Build Coastguard Worker ninja -C _build && \ 259*bbecb9d1SAndroid Build Coastguard Worker mkdir build && \ 260*bbecb9d1SAndroid Build Coastguard Worker cp _build/apitrace build && \ 261*bbecb9d1SAndroid Build Coastguard Worker cp _build/eglretrace build 262*bbecb9d1SAndroid Build Coastguard Worker 263*bbecb9d1SAndroid Build Coastguard WorkerENV GN_ARGS="is_debug=false use_custom_libcxx=false" 264*bbecb9d1SAndroid Build Coastguard WorkerENV CFG=linux_trusty-gcc7-x86_64-release 265*bbecb9d1SAndroid Build Coastguard WorkerRUN git clone https://android.googlesource.com/platform/external/perfetto && \ 266*bbecb9d1SAndroid Build Coastguard Worker cd perfetto && \ 267*bbecb9d1SAndroid Build Coastguard Worker git checkout v12.1 && \ 268*bbecb9d1SAndroid Build Coastguard Worker python3 tools/install-build-deps && \ 269*bbecb9d1SAndroid Build Coastguard Worker python3 tools/install-build-deps --ui && \ 270*bbecb9d1SAndroid Build Coastguard Worker tools/gn gen out/dist --args="${GN_ARGS}" --check && \ 271*bbecb9d1SAndroid Build Coastguard Worker tools/ninja -C out/dist traced traced_probes perfetto trace_to_text ui trace_processor_shell && \ 272*bbecb9d1SAndroid Build Coastguard Worker mkdir -p /usr/local/lib/python3.7/site-packages && \ 273*bbecb9d1SAndroid Build Coastguard Worker protoc --python_out=/usr/local/lib/python3.7/site-packages protos/perfetto/trace/perfetto_trace.proto && \ 274*bbecb9d1SAndroid Build Coastguard Worker tools/gen_amalgamated --gn_args 'target_os="linux" is_debug=false' 275*bbecb9d1SAndroid Build Coastguard Worker 276*bbecb9d1SAndroid Build Coastguard WorkerRUN mkdir -p /traces-db && chown chronos:chronos /traces-db && mkdir -p /wd && chown -R chronos:chronos /wd 277*bbecb9d1SAndroid Build Coastguard Worker 278*bbecb9d1SAndroid Build Coastguard WorkerENV IGT_GPU_TOOLS_VERSION="igt-gpu-tools-1.25" 279*bbecb9d1SAndroid Build Coastguard WorkerRUN git clone --single-branch -b master https://gitlab.freedesktop.org/drm/igt-gpu-tools.git && \ 280*bbecb9d1SAndroid Build Coastguard Worker cd igt-gpu-tools && \ 281*bbecb9d1SAndroid Build Coastguard Worker git checkout "$IGT_GPU_TOOLS_VERSION" && \ 282*bbecb9d1SAndroid Build Coastguard Worker meson build -Doverlay=disabled -Dchamelium=disabled -Dvalgrind=disabled -Dman=disabled -Ddocs=disabled -Dtests=disabled -Drunner=disabled && \ 283*bbecb9d1SAndroid Build Coastguard Worker ninja -C build install 284*bbecb9d1SAndroid Build Coastguard Worker 285*bbecb9d1SAndroid Build Coastguard WorkerENV GFX_PPS_VERSION="v0.3.0" 286*bbecb9d1SAndroid Build Coastguard WorkerRUN git clone --single-branch -b master https://gitlab.freedesktop.org/Fahien/gfx-pps.git && \ 287*bbecb9d1SAndroid Build Coastguard Worker cd gfx-pps && \ 288*bbecb9d1SAndroid Build Coastguard Worker git checkout "$GFX_PPS_VERSION" && \ 289*bbecb9d1SAndroid Build Coastguard Worker meson build -Dtest=false -Dbuildtype=debugoptimized && \ 290*bbecb9d1SAndroid Build Coastguard Worker ninja -C build 291*bbecb9d1SAndroid Build Coastguard Worker 292*bbecb9d1SAndroid Build Coastguard WorkerCOPY perf-testing/Docker/run_traces.sh /usr/local/. 293*bbecb9d1SAndroid Build Coastguard WorkerCOPY perf-testing/Docker/run_perfetto_ui.sh /usr/local/. 294*bbecb9d1SAndroid Build Coastguard WorkerCOPY perf-testing/Docker/run.sh /usr/local/. 295*bbecb9d1SAndroid Build Coastguard WorkerCOPY perf-testing/Docker/perfetto-guest.cfg /usr/local/. 296*bbecb9d1SAndroid Build Coastguard WorkerCOPY perf-testing/Docker/perfetto-host.cfg /usr/local/. 297*bbecb9d1SAndroid Build Coastguard WorkerCOPY perf-testing/Docker/merge_traces.py /usr/local/. 298*bbecb9d1SAndroid Build Coastguard Worker 299*bbecb9d1SAndroid Build Coastguard WorkerENTRYPOINT ["/usr/local/run.sh"] 300