crosvm/ci/build_environment/Makefile
Dennis Kempin 42b825f740 Switch to submodules based workflow
Instead of requiring crosvm to be checked out via the chromeos manifest
to access dependencies in the ChromeOS monorepo, this change adds
git submodules to third_party/.

The CI scripts and Cargo.toml are updated to use the new paths.

BUG=b:194336213
TEST=git clone --recursive https://chromium.googlesource.com/chromiumos/platform/crosvm
     cd crosvm
     cargo test
     ./test_all
     ./ci/kokoro/simulate_all

Change-Id: I9859d18176e21909ac3a140976fbd67cc14129bb
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3049003
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Dennis Kempin <denniskempin@google.com>
Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>
2021-08-05 18:32:32 +00:00

100 lines
2.7 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 native third
# party dependencies required by crosvm.
#
# Setting TARGET_ARCH=aarch64 enables cross-compilation for aarch64.
SRC ?= /workspace/src/crosvm
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)/tpm2-sys/libtpm2 \
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)/third_party/minijail \
OUT=$(BUILD)/minijail \
CROSS_COMPILE=$(CROSS_COMPILE)
minigbm:
mkdir -p $(BUILD)/minigbm
$(MAKE) -C $(SRC)/third_party/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)/third_party/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)/third_party/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