mirror of
https://chromium.googlesource.com/crosvm/crosvm
synced 2024-12-25 20:45:00 +00:00
b14ce22a1b
Usb emulation depend on libusb. This path install libusb-1.0 to the container. BUG=chromium:831850 TEST=local build docker and run kokoro_simulator.sh Change-Id: I2fa406914bf7cfe9a790ec945e15eb387e964d8e Reviewed-on: https://chromium-review.googlesource.com/1356766 Commit-Ready: Jingkui Wang <jkwang@google.com> Tested-by: Jingkui Wang <jkwang@google.com> Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
107 lines
3.8 KiB
Docker
107 lines
3.8 KiB
Docker
# Copyright 2018 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
FROM debian:stretch
|
|
LABEL description="Test crosvm using a command like the following: \
|
|
docker run --privileged -v /dev/log:/dev/log -v <path to crosvm>:/src:ro <crosvm base image>"
|
|
|
|
RUN apt-get update && apt-get install -y \
|
|
autoconf \
|
|
automake \
|
|
curl \
|
|
gcc \
|
|
g++ \
|
|
git \
|
|
libcap-dev \
|
|
libdrm-dev \
|
|
libegl1-mesa-dev \
|
|
libgl1-mesa-dev \
|
|
libgles1-mesa-dev \
|
|
libgles2-mesa-dev \
|
|
libtool \
|
|
libusb-1.0-0-dev \
|
|
libwayland-dev \
|
|
make \
|
|
nasm \
|
|
ninja-build \
|
|
pkg-config \
|
|
protobuf-compiler \
|
|
python3
|
|
|
|
ENV RUSTUP_HOME=/usr/local/rustup \
|
|
CARGO_HOME=/usr/local/cargo \
|
|
PATH=/usr/local/cargo/bin:$PATH \
|
|
RUST_VERSION=1.30.0
|
|
|
|
# Debian usually has an old rust version in the repository. Instead of using that, we use rustup to
|
|
# pull in a toolchain versions of our choosing.
|
|
RUN curl -LO "https://static.rust-lang.org/rustup/archive/1.14.0/x86_64-unknown-linux-gnu/rustup-init" \
|
|
&& echo "0077ff9c19f722e2be202698c037413099e1188c0c233c12a2297bf18e9ff6e7 *rustup-init" | sha256sum -c - \
|
|
&& chmod +x rustup-init \
|
|
&& ./rustup-init -y --no-modify-path --default-toolchain $RUST_VERSION \
|
|
&& rustup component add rustfmt-preview \
|
|
&& rm rustup-init \
|
|
&& chmod -R a+w $RUSTUP_HOME $CARGO_HOME \
|
|
&& rustup --version \
|
|
&& cargo --version \
|
|
&& rustc --version
|
|
|
|
# Warms up the cargo registry cache for future cargo runs. Cargo will still update the cache using a
|
|
# git pull, but it only needs to download files that were changed since this image was built.
|
|
RUN cargo install thisiznotarealpackage -q || true
|
|
|
|
# Used /scratch for building dependencies which are too new or don't exist on Debian stretch.
|
|
WORKDIR /scratch
|
|
|
|
# minijail does not exist in upstream linux distros.
|
|
RUN git clone https://android.googlesource.com/platform/external/minijail \
|
|
&& cd minijail \
|
|
&& make -j24 \
|
|
&& cp libminijail.so /usr/lib/x86_64-linux-gnu/
|
|
|
|
# The gbm used by upstream linux distros is not compatible with crosvm, which must use Chrome OS's
|
|
# minigbm.
|
|
RUN dpkg --force-depends -r libgbm1
|
|
RUN git clone https://chromium.googlesource.com/chromiumos/platform/minigbm \
|
|
&& cd minigbm \
|
|
&& sed 's/-Wall/-Wno-maybe-uninitialized/g' -i Makefile \
|
|
&& make install -j24
|
|
|
|
# New libepoxy requires newer meson than is in Debian stretch.
|
|
RUN git clone https://github.com/mesonbuild/meson \
|
|
&& cd meson \
|
|
&& git checkout 0a5ff338012a00f32c3aa9d8773835accc3e4e5b \
|
|
&& ln -s $PWD/meson.py /usr/bin/meson
|
|
|
|
# New libepoxy has EGL_KHR_DEBUG entry points needed by crosvm.
|
|
RUN git clone https://github.com/anholt/libepoxy.git \
|
|
&& cd libepoxy \
|
|
&& git checkout 707f50e680ab4f1861b1e54ca6e2907aaca56c12 \
|
|
&& mkdir build \
|
|
&& cd build \
|
|
&& meson \
|
|
&& ninja install
|
|
|
|
# virglrenderer is under heavy development on master and we want the very latest.
|
|
RUN git clone https://gitlab.freedesktop.org/virgl/virglrenderer.git \
|
|
&& cd virglrenderer \
|
|
&& ./autogen.sh \
|
|
&& make install -j24
|
|
|
|
# Reduces image size and prevents accidentally using /scratch files
|
|
RUN rm -r /scratch /usr/bin/meson
|
|
|
|
# The manual installation of shared objects requires an ld.so.cache refresh.
|
|
RUN ldconfig
|
|
|
|
# The /build directory is used so that the bind mounted /src volume does not get scribbled on.
|
|
ENV CARGO_TARGET_DIR=/build
|
|
RUN mkdir -p $CARGO_TARGET_DIR
|
|
WORKDIR /src
|
|
CMD cargo --version && rustc --version && rustfmt --version && \
|
|
echo "Running cargo test" && \
|
|
cargo test --no-fail-fast --all-features --all --exclude aarch64 $TEST_FLAGS -- \
|
|
--test-threads=1 $TEST_RUNNER_FLAGS && \
|
|
echo "Running cargo fmt" && \
|
|
cargo fmt --all -- --check
|