# Copyright 2021 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. # # Docker container that cross-compiles crosvm for aarch64. # Build-argument of the image tag of dependencies to use. Set to the same # version as `ci/image_tag` ARG TAG # Stage containing VM data to be used later. # (COPY --from does not allow the use of ARGs) FROM gcr.io/crosvm-packages/crosvm_test_vm_arm64:${TAG} as vm # Main stage FROM gcr.io/crosvm-packages/crosvm_base:${TAG} # Add repositories for arm64 packages RUN dpkg --add-architecture arm64 # Install cross-compilation and VM tooling RUN apt-get update && apt-get install --yes --no-install-recommends \ dpkg-dev \ g++-aarch64-linux-gnu \ gcc-aarch64-linux-gnu \ ipxe-qemu \ qemu-efi-aarch64 \ qemu-system-aarch64 \ qemu-user-static RUN apt-get install --yes --no-install-recommends -o APT::Immediate-Configure=false \ libcap-dev:arm64 \ libdbus-1-dev:arm64 \ libdrm-dev:arm64 \ libepoxy-dev:arm64 \ libssl-dev:arm64 \ libwayland-dev:arm64 RUN apt-get install --yes -t testing --no-install-recommends \ libdrm-dev:arm64 \ libepoxy-dev:arm64 # Setup rust for cross-compilation RUN rustup target add aarch64-unknown-linux-gnu ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc \ CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc \ CXX_aarch64_unknown_linux_gnu=aarch64-linux-gnu-g++ \ CARGO_BUILD_TARGET=aarch64-unknown-linux-gnu \ PKG_CONFIG=aarch64-linux-gnu-pkg-config \ PKG_CONFIG_PATH=/workspace/scratch/lib/pkgconfig # Allow GCC/Rust to find packages and libraries stored on the scratch volume. We # have to link to a known search path since LIBRARY_PATH is not used by # cross-compile GCC. RUN ln -s /workspace/scratch/lib/ /usr/local/lib/aarch64-linux-gnu # Hack: For some reason the libgcc-10-dev-arm64-cross package does not install # this link correctly. RUN cd /usr/aarch64-linux-gnu/lib && ln -s libgcc_s.so.1 libgcc_s.so # Allow qemu-aarch64-static to find aarch64 libraries ENV QEMU_LD_PREFIX=/usr/aarch64-linux-gnu # Include test VM inside this container COPY --from=vm \ /workspace/vm/* \ /workspace/vm/ COPY --from=vm \ /root/.ssh /root/.ssh # Setup entrypoint and interactive shell WORKDIR /workspace/src/platform/crosvm COPY bashrc /root/.bashrc COPY entrypoint /workspace ENTRYPOINT ["/workspace/entrypoint"]