xref: /aosp_15_r20/external/virglrenderer/perf-testing/Docker/Dockerfile (revision bbecb9d118dfdb95f99bd754f8fa9be01f189df3)
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