1# Copyright 2021 The Chromium OS Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4# 5# This makefile is run by the ./ci/crosvm_* containers to build ChromiumOS 6# dependencies required by crosvm. 7# 8# Setting TARGET_ARCH=aarch64 enables cross-compilation for aarch64. 9 10SRC ?= /workspace/src 11BUILD ?= /workspace/scratch/build 12LIB ?= /workspace/scratch/lib 13TARGET_ARCH ?= 14 15MAKEFILE_DIR := $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST)))) 16 17ifeq ($(TARGET_ARCH),aarch64) 18CROSS_COMPILE = aarch64-linux-gnu- 19MESON_ARGS = --cross-file $(BUILD)/meson-cross 20else 21CROSS_COMPILE = 22MESON_ARGS = 23endif 24 25 26all: $(LIB) tpm2 minijail minigbm virglrenderer 27 ldconfig $(LIB) 28 29clean: 30 rm -rf $(BUILD) $(LIB) 31 32# Targets to build the needed chromiumos projects. 33# 34# These are phony targets so that we can delegate the dirty-check to the 35# underlying build system for each library. 36 37tpm2: 38 mkdir -p $(BUILD)/tpm2 39 $(MAKE) -C $(SRC)/third_party/tpm2 \ 40 obj=$(BUILD)/tpm2 \ 41 AR=$(CROSS_COMPILE)ar \ 42 CC=$(CROSS_COMPILE)gcc \ 43 OBJCOPY=$(CROSS_COMPILE)objcopy V=1 44 45minijail: 46 mkdir -p $(BUILD)/minijail 47 $(MAKE) -C $(SRC)/aosp/external/minijail \ 48 OUT=$(BUILD)/minijail \ 49 CROSS_COMPILE=$(CROSS_COMPILE) 50 51minigbm: 52 mkdir -p $(BUILD)/minigbm 53 $(MAKE) -C $(SRC)/platform/minigbm \ 54 OUT=$(BUILD)/minigbm \ 55 CROSS_COMPILE=$(CROSS_COMPILE) 56 57virglrenderer: minigbm $(BUILD)/meson-cross 58 meson setup \ 59 $(BUILD)/virglrenderer \ 60 $(SRC)/third_party/virglrenderer \ 61 $(MESON_ARGS) 62 63 CPATH=$(SRC)/platform/minigbm \ 64 meson compile -C $(BUILD)/virglrenderer 65 66 67# File needed by meson for cross-compilation. 68$(BUILD)/meson-cross: 69ifeq ($(TARGET_ARCH),aarch64) 70 mkdir -p $(BUILD) 71 /usr/share/meson/debcrossgen --arch arm64 -o $@ 72else 73 mkdir -p $(BUILD) 74 touch $@ 75endif 76 77# Sets up the $(LIB) directory with links to the generated binaries in $(BUILD). 78$(LIB): 79 mkdir -p $(LIB) $(LIB)/pkgconfig 80 81 # tpm2 82 ln -sf $(BUILD)/tpm2/libtpm2.a $(LIB)/libtpm2.a 83 ln -sf $(MAKEFILE_DIR)/pkgconfig/libtpm2.pc $(LIB)/pkgconfig/ 84 85 # minijail 86 ln -sf $(BUILD)/minijail/libminijail.so $(LIB) 87 ln -sf $(LIB)/libminijail.so $(LIB)/libminijail.so.1 88 ln -sf $(MAKEFILE_DIR)/pkgconfig/libminijail.pc $(LIB)/pkgconfig/ 89 90 # minigbm 91 ln -sf $(BUILD)/minigbm/libminigbm.so.1.0.0 $(LIB)/libgbm.so 92 ln -sf $(LIB)/libgbm.so $(LIB)/libgbm.so.1 93 ln -sf $(SRC)/platform/minigbm/gbm.pc $(LIB)/pkgconfig/ 94 95 # virglrenderer 96 ln -sf $(BUILD)/virglrenderer/src/libvirglrenderer.so $(LIB) 97 ln -sf $(LIB)/libvirglrenderer.so $(LIB)/libvirglrenderer.so.1 98 ln -sf $(BUILD)/virglrenderer/virglrenderer.pc $(LIB)/pkgconfig/ 99 100.PHONY: all clean tpm2 minijail sysroot minigbm virglrenderer 101