# 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