• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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