crosvm/ci/build_environment/Makefile
Dennis Kempin aa0717443e Add VM to builders
The VM allows both the x86 and aarch64 builders to run tests which
require access to kernel devices that docker would prevent us
from accessing.
The VM is automatically started in the endpoint script, and the
environment is set up to execute `cargo test` binaries inside the VM.

This allows for convenient interactive usage.
The VM is also integrated into the run_tests scripts, executing tests
that do not require special privileges first, while the VM is still
booting up, then execuing the remaining tests in the VM.

BUG=b:177228167,b:177951276
TEST=These test calls pass:
./ci/builder --vm ./run_tests
./ci/aarch64_builder --vm ./run_tests
./run_tests

Change-Id: I20bf2cd848e944d411b97f1f8356279e312d8583
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/2642766
Tested-by: Dennis Kempin <denniskempin@google.com>
Commit-Queue: Dennis Kempin <denniskempin@google.com>
Reviewed-by: Zach Reizner <zachr@chromium.org>
2021-02-05 03:01:53 +00:00

100 lines
2.6 KiB
Makefile

# 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.
#
# This makefile is run by the ./ci/crosvm_* containers to build ChromiumOS
# dependencies required by crosvm.
#
# Setting TARGET_ARCH=aarch64 enables cross-compilation for aarch64.
SRC ?= /workspace/src
BUILD ?= /workspace/scratch/build
LIB ?= /workspace/scratch/lib
TARGET_ARCH ?=
MAKEFILE_DIR := $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
ifeq ($(TARGET_ARCH),aarch64)
CROSS_COMPILE = aarch64-linux-gnu-
MESON_ARGS = --cross-file $(BUILD)/meson-cross
else
CROSS_COMPILE =
MESON_ARGS =
endif
all: $(LIB) tpm2 minijail minigbm virglrenderer
ldconfig $(LIB)
clean:
rm -rf $(BUILD) $(LIB)
# Targets to build the needed chromiumos projects.
#
# These are phony targets so that we can delegate the dirty-check to the
# underlying build system for each library.
tpm2:
mkdir -p $(BUILD)/tpm2
$(MAKE) -C $(SRC)/third_party/tpm2 \
obj=$(BUILD)/tpm2 \
AR=$(CROSS_COMPILE)ar \
CC=$(CROSS_COMPILE)gcc \
OBJCOPY=$(CROSS_COMPILE)objcopy V=1
minijail:
mkdir -p $(BUILD)/minijail
$(MAKE) -C $(SRC)/aosp/external/minijail \
OUT=$(BUILD)/minijail \
CROSS_COMPILE=$(CROSS_COMPILE)
minigbm:
mkdir -p $(BUILD)/minigbm
$(MAKE) -C $(SRC)/platform/minigbm \
OUT=$(BUILD)/minigbm \
CROSS_COMPILE=$(CROSS_COMPILE)
virglrenderer: minigbm $(BUILD)/meson-cross
meson setup \
$(BUILD)/virglrenderer \
$(SRC)/third_party/virglrenderer \
$(MESON_ARGS)
CPATH=$(SRC)/platform/minigbm \
meson compile -C $(BUILD)/virglrenderer
# File needed by meson for cross-compilation.
$(BUILD)/meson-cross:
ifeq ($(TARGET_ARCH),aarch64)
mkdir -p $(BUILD)
/usr/share/meson/debcrossgen --arch arm64 -o $@
else
mkdir -p $(BUILD)
touch $@
endif
# Sets up the $(LIB) directory with links to the generated binaries in $(BUILD).
$(LIB):
mkdir -p $(LIB) $(LIB)/pkgconfig
# tpm2
ln -sf $(BUILD)/tpm2/libtpm2.a $(LIB)/libtpm2.a
ln -sf $(MAKEFILE_DIR)/pkgconfig/libtpm2.pc $(LIB)/pkgconfig/
# minijail
ln -sf $(BUILD)/minijail/libminijail.so $(LIB)
ln -sf $(LIB)/libminijail.so $(LIB)/libminijail.so.1
ln -sf $(MAKEFILE_DIR)/pkgconfig/libminijail.pc $(LIB)/pkgconfig/
# minigbm
ln -sf $(BUILD)/minigbm/libminigbm.so.1.0.0 $(LIB)/libgbm.so
ln -sf $(LIB)/libgbm.so $(LIB)/libgbm.so.1
ln -sf $(SRC)/platform/minigbm/gbm.pc $(LIB)/pkgconfig/
# virglrenderer
ln -sf $(BUILD)/virglrenderer/src/libvirglrenderer.so $(LIB)
ln -sf $(LIB)/libvirglrenderer.so $(LIB)/libvirglrenderer.so.1
ln -sf $(BUILD)/virglrenderer/virglrenderer.pc $(LIB)/pkgconfig/
.PHONY: all clean tpm2 minijail sysroot minigbm virglrenderer