xref: /aosp_15_r20/external/vboot_reference/Makefile (revision 8617a60d3594060b7ecbd21bc622a7c14f3cf2bc)
1*8617a60dSAndroid Build Coastguard Worker# Copyright 2013 The ChromiumOS Authors
2*8617a60dSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
3*8617a60dSAndroid Build Coastguard Worker# found in the LICENSE file.
4*8617a60dSAndroid Build Coastguard Worker
5*8617a60dSAndroid Build Coastguard Worker# This Makefile normally builds in a 'build' subdir, but use
6*8617a60dSAndroid Build Coastguard Worker#
7*8617a60dSAndroid Build Coastguard Worker#    make BUILD=<dir>
8*8617a60dSAndroid Build Coastguard Worker#
9*8617a60dSAndroid Build Coastguard Worker# to put the output somewhere else.
10*8617a60dSAndroid Build Coastguard Worker
11*8617a60dSAndroid Build Coastguard Worker##############################################################################
12*8617a60dSAndroid Build Coastguard Worker# Make variables come in two flavors, immediate or deferred.
13*8617a60dSAndroid Build Coastguard Worker#
14*8617a60dSAndroid Build Coastguard Worker#   Variable definitions are parsed like this:
15*8617a60dSAndroid Build Coastguard Worker#
16*8617a60dSAndroid Build Coastguard Worker#        IMMEDIATE = DEFERRED
17*8617a60dSAndroid Build Coastguard Worker#    or
18*8617a60dSAndroid Build Coastguard Worker#        IMMEDIATE := IMMEDIATE
19*8617a60dSAndroid Build Coastguard Worker#
20*8617a60dSAndroid Build Coastguard Worker#   Rules are parsed this way:
21*8617a60dSAndroid Build Coastguard Worker#
22*8617a60dSAndroid Build Coastguard Worker#        IMMEDIATE : IMMEDIATE
23*8617a60dSAndroid Build Coastguard Worker#           DEFERRED
24*8617a60dSAndroid Build Coastguard Worker#
25*8617a60dSAndroid Build Coastguard Worker# So you can assign variables in any order if they're only to be used in
26*8617a60dSAndroid Build Coastguard Worker# actions, but if you use a variable in either the target or prerequisite of a
27*8617a60dSAndroid Build Coastguard Worker# rule, the rule will be constructed using only the top-down, immediate value.
28*8617a60dSAndroid Build Coastguard Worker#
29*8617a60dSAndroid Build Coastguard Worker# So we'll try to define all the variables first. Then the rules.
30*8617a60dSAndroid Build Coastguard Worker#
31*8617a60dSAndroid Build Coastguard Worker
32*8617a60dSAndroid Build Coastguard Worker##############################################################################
33*8617a60dSAndroid Build Coastguard Worker# Configuration variables come first.
34*8617a60dSAndroid Build Coastguard Worker#
35*8617a60dSAndroid Build Coastguard Worker# Our convention is that we only use := for variables that will never be
36*8617a60dSAndroid Build Coastguard Worker# changed or appended. They must be defined before being used anywhere.
37*8617a60dSAndroid Build Coastguard Worker
38*8617a60dSAndroid Build Coastguard Worker# We should only run pwd once, not every time we refer to ${BUILD}.
39*8617a60dSAndroid Build Coastguard WorkerSRCDIR := $(shell pwd)
40*8617a60dSAndroid Build Coastguard WorkerBUILD = ${SRCDIR}/build
41*8617a60dSAndroid Build Coastguard Workerexport BUILD
42*8617a60dSAndroid Build Coastguard Worker
43*8617a60dSAndroid Build Coastguard Worker# Stuff for 'make install'
44*8617a60dSAndroid Build Coastguard WorkerINSTALL = install
45*8617a60dSAndroid Build Coastguard WorkerDESTDIR = /
46*8617a60dSAndroid Build Coastguard WorkerLIBDIR ?= lib
47*8617a60dSAndroid Build Coastguard Worker
48*8617a60dSAndroid Build Coastguard Worker# Default values
49*8617a60dSAndroid Build Coastguard WorkerDEV_DEBUG_FORCE=
50*8617a60dSAndroid Build Coastguard Worker
51*8617a60dSAndroid Build Coastguard Worker# Where exactly do the pieces go?
52*8617a60dSAndroid Build Coastguard Worker#  UB_DIR = utility binary directory
53*8617a60dSAndroid Build Coastguard Worker#  ULP_DIR = pkgconfig directory, usually /usr/lib/pkgconfig
54*8617a60dSAndroid Build Coastguard Worker#  UI_DIR = include directory for library headers
55*8617a60dSAndroid Build Coastguard Worker#  US_DIR = shared data directory (for static content like devkeys)
56*8617a60dSAndroid Build Coastguard Worker#  DF_DIR = utility defaults directory
57*8617a60dSAndroid Build Coastguard Worker#  VB_DIR = vboot binary directory for dev-mode-only scripts
58*8617a60dSAndroid Build Coastguard Worker#  DUT_TEST_DIR = vboot dut tests binary directory
59*8617a60dSAndroid Build Coastguard WorkerUB_DIR=${DESTDIR}/usr/bin
60*8617a60dSAndroid Build Coastguard WorkerUL_DIR=${DESTDIR}/usr/${LIBDIR}
61*8617a60dSAndroid Build Coastguard WorkerULP_DIR=${UL_DIR}/pkgconfig
62*8617a60dSAndroid Build Coastguard WorkerUI_DIR=${DESTDIR}/usr/include/vboot
63*8617a60dSAndroid Build Coastguard WorkerUS_DIR=${DESTDIR}/usr/share/vboot
64*8617a60dSAndroid Build Coastguard WorkerDF_DIR=${DESTDIR}/etc/default
65*8617a60dSAndroid Build Coastguard WorkerVB_DIR=${US_DIR}/bin
66*8617a60dSAndroid Build Coastguard WorkerDUT_TEST_DIR=${US_DIR}/tests
67*8617a60dSAndroid Build Coastguard Worker
68*8617a60dSAndroid Build Coastguard Worker# Where to install the (exportable) executables for testing?
69*8617a60dSAndroid Build Coastguard WorkerTEST_INSTALL_DIR = ${BUILD}/install_for_test
70*8617a60dSAndroid Build Coastguard Worker
71*8617a60dSAndroid Build Coastguard Worker# Set when installing into the SDK instead of building for a board sysroot.
72*8617a60dSAndroid Build Coastguard WorkerSDK_BUILD ?=
73*8617a60dSAndroid Build Coastguard Worker
74*8617a60dSAndroid Build Coastguard Worker# Verbose? Use V=1
75*8617a60dSAndroid Build Coastguard Workerifeq ($(filter-out 0,${V}),)
76*8617a60dSAndroid Build Coastguard WorkerQ := @
77*8617a60dSAndroid Build Coastguard Workerendif
78*8617a60dSAndroid Build Coastguard Worker
79*8617a60dSAndroid Build Coastguard Worker# Quiet? Use QUIET=1
80*8617a60dSAndroid Build Coastguard Workerifeq ($(filter-out 0,${QUIET}),)
81*8617a60dSAndroid Build Coastguard WorkerPRINTF := printf
82*8617a60dSAndroid Build Coastguard Workerelse
83*8617a60dSAndroid Build Coastguard WorkerPRINTF := :
84*8617a60dSAndroid Build Coastguard Workerendif
85*8617a60dSAndroid Build Coastguard Worker
86*8617a60dSAndroid Build Coastguard Worker# ARCH and/or FIRMWARE_ARCH are defined by the ChromiumOS ebuild.
87*8617a60dSAndroid Build Coastguard Worker# Pick a valid target architecture if none is defined.
88*8617a60dSAndroid Build Coastguard Workerifeq (${ARCH},)
89*8617a60dSAndroid Build Coastguard Worker  ARCH := $(shell uname -m)
90*8617a60dSAndroid Build Coastguard Workerendif
91*8617a60dSAndroid Build Coastguard Worker
92*8617a60dSAndroid Build Coastguard Workerifeq (${ARCH},armv7l)
93*8617a60dSAndroid Build Coastguard Worker  override ARCH := arm
94*8617a60dSAndroid Build Coastguard Workerelse ifeq (${ARCH},aarch64)
95*8617a60dSAndroid Build Coastguard Worker  override ARCH := arm64
96*8617a60dSAndroid Build Coastguard Workerelse ifeq (${ARCH},i386)
97*8617a60dSAndroid Build Coastguard Worker  override ARCH := x86
98*8617a60dSAndroid Build Coastguard Workerelse ifeq (${ARCH},i686)
99*8617a60dSAndroid Build Coastguard Worker  override ARCH := x86
100*8617a60dSAndroid Build Coastguard Workerelse ifeq (${ARCH},amd64)
101*8617a60dSAndroid Build Coastguard Worker  override ARCH := x86_64
102*8617a60dSAndroid Build Coastguard Workerendif
103*8617a60dSAndroid Build Coastguard Worker
104*8617a60dSAndroid Build Coastguard Workerifneq (,$(filter arm arm64,${ARCH}))
105*8617a60dSAndroid Build Coastguard Worker	ARCH_DIR := arm
106*8617a60dSAndroid Build Coastguard Workerelse ifneq (,$(filter x86 x86_64,${ARCH}))
107*8617a60dSAndroid Build Coastguard Worker	ARCH_DIR := x86
108*8617a60dSAndroid Build Coastguard Workerelse
109*8617a60dSAndroid Build Coastguard Worker	ARCH_DIR := stub
110*8617a60dSAndroid Build Coastguard Workerendif
111*8617a60dSAndroid Build Coastguard Worker
112*8617a60dSAndroid Build Coastguard Worker# Provide default CC and CFLAGS for firmware builds; if you have any -D flags,
113*8617a60dSAndroid Build Coastguard Worker# please add them after this point (e.g., -DVBOOT_DEBUG).
114*8617a60dSAndroid Build Coastguard WorkerDEBUG_FLAGS := $(if $(filter-out 0,${DEBUG}),-g -Og,-g -Os)
115*8617a60dSAndroid Build Coastguard WorkerWERROR := -Werror
116*8617a60dSAndroid Build Coastguard WorkerFIRMWARE_FLAGS := -nostdinc -ffreestanding -fno-builtin -fno-stack-protector
117*8617a60dSAndroid Build Coastguard WorkerCOMMON_FLAGS := -pipe ${WERROR} -Wall -Wstrict-prototypes -Wtype-limits \
118*8617a60dSAndroid Build Coastguard Worker	-Wundef -Wmissing-prototypes -Wno-trigraphs -Wredundant-decls -Wshadow \
119*8617a60dSAndroid Build Coastguard Worker	-Wwrite-strings -Wstrict-aliasing -Wdate-time \
120*8617a60dSAndroid Build Coastguard Worker	-Wint-conversion -ffunction-sections -fdata-sections \
121*8617a60dSAndroid Build Coastguard Worker	-Wformat -Wno-format-security -std=gnu11 ${DEBUG_FLAGS} ${CPPFLAGS}
122*8617a60dSAndroid Build Coastguard Worker
123*8617a60dSAndroid Build Coastguard Worker# test_ccflag
124*8617a60dSAndroid Build Coastguard Worker# $(1): compiler flags to test
125*8617a60dSAndroid Build Coastguard Worker# $(2): code to insert into test snippet
126*8617a60dSAndroid Build Coastguard Worker# returns: $(1) if compiler was successful, empty string otherwise
127*8617a60dSAndroid Build Coastguard Workertest_ccflag = $(shell \
128*8617a60dSAndroid Build Coastguard Worker	printf "$(2)\nvoid _start(void) {}\n" | \
129*8617a60dSAndroid Build Coastguard Worker	$(CC) -nostdlib -Werror $(1) -xc -c - -o /dev/null \
130*8617a60dSAndroid Build Coastguard Worker	>/dev/null 2>&1 && echo "$(1)")
131*8617a60dSAndroid Build Coastguard Worker
132*8617a60dSAndroid Build Coastguard WorkerCOMMON_FLAGS += $(call test_ccflag,-Wimplicit-fallthrough)
133*8617a60dSAndroid Build Coastguard WorkerCOMMON_FLAGS += $(call test_ccflag,-Wno-address-of-packed-member)
134*8617a60dSAndroid Build Coastguard WorkerCOMMON_FLAGS += $(call test_ccflag,-Wno-unknown-warning)
135*8617a60dSAndroid Build Coastguard WorkerCOMMON_FLAGS += $(call test_ccflag,-Wincompatible-function-pointer-types)
136*8617a60dSAndroid Build Coastguard Worker
137*8617a60dSAndroid Build Coastguard WorkerTEST_FLAGS := $(call test_ccflag,-Wno-address-of-packed-member)
138*8617a60dSAndroid Build Coastguard Worker
139*8617a60dSAndroid Build Coastguard Worker# FIRMWARE_ARCH is only defined by the ChromiumOS ebuild if compiling
140*8617a60dSAndroid Build Coastguard Worker# for a firmware target (coreboot or depthcharge). It must map to the same
141*8617a60dSAndroid Build Coastguard Worker# consistent set of architectures as the host.
142*8617a60dSAndroid Build Coastguard Workerifeq (${FIRMWARE_ARCH},i386)
143*8617a60dSAndroid Build Coastguard Worker  override FIRMWARE_ARCH := x86
144*8617a60dSAndroid Build Coastguard Workerelse ifeq (${FIRMWARE_ARCH},amd64)
145*8617a60dSAndroid Build Coastguard Worker  override FIRMWARE_ARCH := x86_64
146*8617a60dSAndroid Build Coastguard Workerelse ifneq ($(filter arm64 armv7 armv8 armv8_64,${FIRMWARE_ARCH}),)
147*8617a60dSAndroid Build Coastguard Worker  override FIRMWARE_ARCH := arm
148*8617a60dSAndroid Build Coastguard Workerendif
149*8617a60dSAndroid Build Coastguard Worker
150*8617a60dSAndroid Build Coastguard Workerifeq (${FIRMWARE_ARCH},arm)
151*8617a60dSAndroid Build Coastguard WorkerCC ?= armv7a-cros-linux-gnueabihf-gcc
152*8617a60dSAndroid Build Coastguard WorkerCFLAGS ?= -march=armv5 -fno-common -ffixed-r8 -mfloat-abi=hard -marm
153*8617a60dSAndroid Build Coastguard Worker	-mabi=aapcs-linux -mno-thumb-interwork ${FIRMWARE_FLAGS} ${COMMON_FLAGS}
154*8617a60dSAndroid Build Coastguard Workerelse ifeq (${FIRMWARE_ARCH},x86)
155*8617a60dSAndroid Build Coastguard WorkerCC ?= i686-pc-linux-gnu-gcc
156*8617a60dSAndroid Build Coastguard Worker# Drop -march=i386 to permit use of SSE instructions
157*8617a60dSAndroid Build Coastguard WorkerCFLAGS ?= -fvisibility=hidden -fomit-frame-pointer \
158*8617a60dSAndroid Build Coastguard Worker	-fno-toplevel-reorder -fno-dwarf2-cfi-asm -mpreferred-stack-boundary=2 \
159*8617a60dSAndroid Build Coastguard Worker	${FIRMWARE_FLAGS} ${COMMON_FLAGS}
160*8617a60dSAndroid Build Coastguard Workerelse ifeq (${FIRMWARE_ARCH},x86_64)
161*8617a60dSAndroid Build Coastguard WorkerCFLAGS ?= ${FIRMWARE_FLAGS} ${COMMON_FLAGS} -fvisibility=hidden \
162*8617a60dSAndroid Build Coastguard Worker	-fomit-frame-pointer
163*8617a60dSAndroid Build Coastguard Workerelse ifeq (${FIRMWARE_ARCH},mock)
164*8617a60dSAndroid Build Coastguard WorkerFIRMWARE_STUB := 1
165*8617a60dSAndroid Build Coastguard WorkerCFLAGS += ${TEST_FLAGS}
166*8617a60dSAndroid Build Coastguard Workerelse ifneq (${FIRMWARE_ARCH},)
167*8617a60dSAndroid Build Coastguard Worker$(error Unexpected FIRMWARE_ARCH ${FIRMWARE_ARCH})
168*8617a60dSAndroid Build Coastguard Workerelse
169*8617a60dSAndroid Build Coastguard Worker# FIRMWARE_ARCH not defined; assuming local compile.
170*8617a60dSAndroid Build Coastguard WorkerFIRMWARE_STUB := 1
171*8617a60dSAndroid Build Coastguard WorkerCC ?= gcc
172*8617a60dSAndroid Build Coastguard WorkerCFLAGS += -DCHROMEOS_ENVIRONMENT ${COMMON_FLAGS}
173*8617a60dSAndroid Build Coastguard Workerendif
174*8617a60dSAndroid Build Coastguard Worker
175*8617a60dSAndroid Build Coastguard Worker# Needs -Wl because LD is actually set to CC by default.
176*8617a60dSAndroid Build Coastguard WorkerLDFLAGS += -Wl,--gc-sections
177*8617a60dSAndroid Build Coastguard Worker
178*8617a60dSAndroid Build Coastguard Workerifneq ($(filter-out 0,${DEBUG})$(filter-out 0,${TEST_PRINT}),)
179*8617a60dSAndroid Build Coastguard WorkerCFLAGS += -DVBOOT_DEBUG
180*8617a60dSAndroid Build Coastguard Workerendif
181*8617a60dSAndroid Build Coastguard Worker
182*8617a60dSAndroid Build Coastguard Workerifneq ($(filter-out 0,${NDEBUG}),)
183*8617a60dSAndroid Build Coastguard WorkerCFLAGS += -DNDEBUG
184*8617a60dSAndroid Build Coastguard Workerendif
185*8617a60dSAndroid Build Coastguard Worker
186*8617a60dSAndroid Build Coastguard Workerifneq ($(filter-out 0,${TPM2_MODE}),)
187*8617a60dSAndroid Build Coastguard WorkerCFLAGS += -DTPM2_MODE
188*8617a60dSAndroid Build Coastguard Workerendif
189*8617a60dSAndroid Build Coastguard Worker
190*8617a60dSAndroid Build Coastguard Worker# Support devices with GPT in SPI-NOR (for nand device)
191*8617a60dSAndroid Build Coastguard Worker# TODO(b:184812319): Consider removing this code if nobody uses it.
192*8617a60dSAndroid Build Coastguard Workerifneq ($(filter-out 0,${GPT_SPI_NOR}),)
193*8617a60dSAndroid Build Coastguard WorkerCFLAGS += -DGPT_SPI_NOR
194*8617a60dSAndroid Build Coastguard Workerendif
195*8617a60dSAndroid Build Coastguard Worker
196*8617a60dSAndroid Build Coastguard Worker# Enable EC early firmware selection.
197*8617a60dSAndroid Build Coastguard Workerifneq ($(filter-out 0,${EC_EFS}),)
198*8617a60dSAndroid Build Coastguard WorkerCFLAGS += -DEC_EFS=1
199*8617a60dSAndroid Build Coastguard Workerelse
200*8617a60dSAndroid Build Coastguard WorkerCFLAGS += -DEC_EFS=0
201*8617a60dSAndroid Build Coastguard Workerendif
202*8617a60dSAndroid Build Coastguard Worker
203*8617a60dSAndroid Build Coastguard Worker# Some tests need to be disabled when using mocked_secdata_tpm.
204*8617a60dSAndroid Build Coastguard Workerifneq ($(filter-out 0,${MOCK_TPM}),)
205*8617a60dSAndroid Build Coastguard WorkerCFLAGS += -DMOCK_TPM
206*8617a60dSAndroid Build Coastguard Workerendif
207*8617a60dSAndroid Build Coastguard Worker
208*8617a60dSAndroid Build Coastguard Worker# EXTERNAL_TPM_CLEAR_REQUEST indicates whether we want to use the external
209*8617a60dSAndroid Build Coastguard Worker# tpm_clear_request tool or not.
210*8617a60dSAndroid Build Coastguard Workerifneq ($(filter-out 0,${EXTERNAL_TPM_CLEAR_REQUEST}),)
211*8617a60dSAndroid Build Coastguard WorkerCFLAGS += -DEXTERNAL_TPM_CLEAR_REQUEST=1
212*8617a60dSAndroid Build Coastguard Workerelse
213*8617a60dSAndroid Build Coastguard WorkerCFLAGS += -DEXTERNAL_TPM_CLEAR_REQUEST=0
214*8617a60dSAndroid Build Coastguard Workerendif
215*8617a60dSAndroid Build Coastguard Worker
216*8617a60dSAndroid Build Coastguard Worker# Configurable temporary directory for host tools
217*8617a60dSAndroid Build Coastguard WorkerVBOOT_TMP_DIR := /tmp
218*8617a60dSAndroid Build Coastguard WorkerCFLAGS += -DVBOOT_TMP_DIR=\"${VBOOT_TMP_DIR}\"
219*8617a60dSAndroid Build Coastguard Worker
220*8617a60dSAndroid Build Coastguard Worker# Directory used by crossystem to create a lock file
221*8617a60dSAndroid Build Coastguard WorkerCROSSYSTEM_LOCK_DIR := /run/lock
222*8617a60dSAndroid Build Coastguard WorkerCFLAGS += -DCROSSYSTEM_LOCK_DIR=\"${CROSSYSTEM_LOCK_DIR}\"
223*8617a60dSAndroid Build Coastguard Worker
224*8617a60dSAndroid Build Coastguard Worker# NOTE: We don't use these files but they are useful for other packages to
225*8617a60dSAndroid Build Coastguard Worker# query about required compiling/linking flags.
226*8617a60dSAndroid Build Coastguard WorkerPC_IN_FILES = vboot_host.pc.in
227*8617a60dSAndroid Build Coastguard Worker
228*8617a60dSAndroid Build Coastguard Worker# Create / use dependency files
229*8617a60dSAndroid Build Coastguard WorkerCFLAGS += -MMD -MF $@.d
230*8617a60dSAndroid Build Coastguard Worker
231*8617a60dSAndroid Build Coastguard Workerifeq (${FIRMWARE_ARCH},)
232*8617a60dSAndroid Build Coastguard Worker# Creates position independent code for non firmware target.
233*8617a60dSAndroid Build Coastguard WorkerCFLAGS += -fPIC
234*8617a60dSAndroid Build Coastguard Workerendif
235*8617a60dSAndroid Build Coastguard Worker
236*8617a60dSAndroid Build Coastguard WorkerCFLAGS += -D_GNU_SOURCE
237*8617a60dSAndroid Build Coastguard Worker
238*8617a60dSAndroid Build Coastguard Worker# This is required to access large disks and files on 32-bit systems,
239*8617a60dSAndroid Build Coastguard Worker# but if the environment doesn't support it, at least compile support
240*8617a60dSAndroid Build Coastguard Worker# for what is possible.
241*8617a60dSAndroid Build Coastguard Worker# Pass through cflags_use_64bits to evaluate it only once, here.
242*8617a60dSAndroid Build Coastguard WorkerHASH_CONST := \#
243*8617a60dSAndroid Build Coastguard Workercflags_use_64bits := $(call test_ccflag,$\
244*8617a60dSAndroid Build Coastguard Worker		     -D_FILE_OFFSET_BITS=64,$\
245*8617a60dSAndroid Build Coastguard Worker		     ${HASH_CONST}include <fts.h>)
246*8617a60dSAndroid Build Coastguard WorkerCFLAGS += $(cflags_use_64bits)
247*8617a60dSAndroid Build Coastguard Worker
248*8617a60dSAndroid Build Coastguard Worker# Code coverage
249*8617a60dSAndroid Build Coastguard Workerifneq ($(filter-out 0,${COV}),)
250*8617a60dSAndroid Build Coastguard Worker  COV_FLAGS = -Og --coverage -DCOVERAGE
251*8617a60dSAndroid Build Coastguard Worker  CFLAGS += ${COV_FLAGS}
252*8617a60dSAndroid Build Coastguard Worker  LDFLAGS += ${COV_FLAGS}
253*8617a60dSAndroid Build Coastguard Worker  COV_INFO = ${BUILD}/coverage.info
254*8617a60dSAndroid Build Coastguard Workerendif
255*8617a60dSAndroid Build Coastguard Worker
256*8617a60dSAndroid Build Coastguard Workerifdef HAVE_MACOS
257*8617a60dSAndroid Build Coastguard Worker  CFLAGS += -DHAVE_MACOS -Wno-deprecated-declarations
258*8617a60dSAndroid Build Coastguard Workerendif
259*8617a60dSAndroid Build Coastguard Worker
260*8617a60dSAndroid Build Coastguard Worker# Musl doesn't have execinfo.h.
261*8617a60dSAndroid Build Coastguard Workerifndef HAVE_MUSL
262*8617a60dSAndroid Build Coastguard Worker  CFLAGS += -DHAVE_EXECINFO_H
263*8617a60dSAndroid Build Coastguard Workerendif
264*8617a60dSAndroid Build Coastguard Worker
265*8617a60dSAndroid Build Coastguard Worker# And a few more default utilities
266*8617a60dSAndroid Build Coastguard WorkerLD = ${CC}
267*8617a60dSAndroid Build Coastguard WorkerCXX ?= g++
268*8617a60dSAndroid Build Coastguard WorkerPKG_CONFIG ?= pkg-config
269*8617a60dSAndroid Build Coastguard Worker
270*8617a60dSAndroid Build Coastguard Worker# Static?
271*8617a60dSAndroid Build Coastguard Workerifneq ($(filter-out 0,${STATIC}),)
272*8617a60dSAndroid Build Coastguard WorkerLDFLAGS += -static
273*8617a60dSAndroid Build Coastguard WorkerPKG_CONFIG += --static
274*8617a60dSAndroid Build Coastguard Workerendif
275*8617a60dSAndroid Build Coastguard Worker
276*8617a60dSAndroid Build Coastguard Workerifneq (${FUZZ_FLAGS},)
277*8617a60dSAndroid Build Coastguard WorkerCFLAGS += ${FUZZ_FLAGS}
278*8617a60dSAndroid Build Coastguard Workerendif
279*8617a60dSAndroid Build Coastguard Worker
280*8617a60dSAndroid Build Coastguard Worker# Optional Libraries
281*8617a60dSAndroid Build Coastguard WorkerLIBZIP_VERSION := $(shell ${PKG_CONFIG} --modversion libzip 2>/dev/null)
282*8617a60dSAndroid Build Coastguard WorkerHAVE_LIBZIP := $(if ${LIBZIP_VERSION},1)
283*8617a60dSAndroid Build Coastguard Workerifneq ($(filter-out 0,${HAVE_LIBZIP}),)
284*8617a60dSAndroid Build Coastguard Worker  CFLAGS += -DHAVE_LIBZIP $(shell ${PKG_CONFIG} --cflags libzip)
285*8617a60dSAndroid Build Coastguard Worker  LIBZIP_LIBS := $(shell ${PKG_CONFIG} --libs libzip)
286*8617a60dSAndroid Build Coastguard Workerendif
287*8617a60dSAndroid Build Coastguard Worker
288*8617a60dSAndroid Build Coastguard WorkerLIBARCHIVE_VERSION := $(shell ${PKG_CONFIG} --modversion libarchive 2>/dev/null)
289*8617a60dSAndroid Build Coastguard WorkerHAVE_LIBARCHIVE := $(if ${LIBARCHIVE_VERSION},1)
290*8617a60dSAndroid Build Coastguard Workerifneq ($(filter-out 0,${HAVE_LIBARCHIVE}),)
291*8617a60dSAndroid Build Coastguard Worker  CFLAGS += -DHAVE_LIBARCHIVE $(shell ${PKG_CONFIG} --cflags libarchive)
292*8617a60dSAndroid Build Coastguard Worker  LIBARCHIVE_LIBS := $(shell ${PKG_CONFIG} --libs libarchive)
293*8617a60dSAndroid Build Coastguard Workerendif
294*8617a60dSAndroid Build Coastguard Worker
295*8617a60dSAndroid Build Coastguard WorkerHAVE_CROSID := $(shell ${PKG_CONFIG} --exists crosid && echo 1)
296*8617a60dSAndroid Build Coastguard Workerifeq ($(HAVE_CROSID),1)
297*8617a60dSAndroid Build Coastguard Worker  CFLAGS += -DHAVE_CROSID $(shell ${PKG_CONFIG} --cflags crosid)
298*8617a60dSAndroid Build Coastguard Worker  CROSID_LIBS := $(shell ${PKG_CONFIG} --libs crosid)
299*8617a60dSAndroid Build Coastguard Workerendif
300*8617a60dSAndroid Build Coastguard Worker
301*8617a60dSAndroid Build Coastguard WorkerHAVE_NSS := $(shell ${PKG_CONFIG} --exists nss && echo 1)
302*8617a60dSAndroid Build Coastguard Workerifeq ($(HAVE_NSS),1)
303*8617a60dSAndroid Build Coastguard Worker  CFLAGS += -DHAVE_NSS $(shell ${PKG_CONFIG} --cflags nss)
304*8617a60dSAndroid Build Coastguard Worker  # The LIBS is not needed because we only use the header.
305*8617a60dSAndroid Build Coastguard Workerelse
306*8617a60dSAndroid Build Coastguard Worker  $(warning Missing NSS. PKCS11 signing not supported. Install libnss3 to enable this feature.)
307*8617a60dSAndroid Build Coastguard Workerendif
308*8617a60dSAndroid Build Coastguard Worker
309*8617a60dSAndroid Build Coastguard Worker# Get major version of openssl (e.g. version 3.0.5 -> "3")
310*8617a60dSAndroid Build Coastguard WorkerOPENSSL_VERSION := $(shell ${PKG_CONFIG} --modversion openssl | cut -d. -f1)
311*8617a60dSAndroid Build Coastguard Worker
312*8617a60dSAndroid Build Coastguard Worker# A test wrapper can be specified. Tests are run inside the wrapper eg:
313*8617a60dSAndroid Build Coastguard Worker# make RUNTEST=env runtests
314*8617a60dSAndroid Build Coastguard WorkerRUNTEST =
315*8617a60dSAndroid Build Coastguard Worker# The Path to the $BUILD inside the runtest wrapper, used by the test scripts.
316*8617a60dSAndroid Build Coastguard Worker# The top of the chroot for RUNTEST must be passed in via the SYSROOT
317*8617a60dSAndroid Build Coastguard Worker# environment variable.  In the ChromiumOS chroot, this is done automatically by
318*8617a60dSAndroid Build Coastguard Worker# the ebuild.
319*8617a60dSAndroid Build Coastguard Workerexport BUILD_RUN = $(subst ${SYSROOT},,${BUILD})
320*8617a60dSAndroid Build Coastguard Worker# Path to the $SRCDIR inside the wrapper, the test scripts rederive this.
321*8617a60dSAndroid Build Coastguard WorkerSRC_RUN = $(subst ${SYSROOT},,${SRCDIR})
322*8617a60dSAndroid Build Coastguard Worker
323*8617a60dSAndroid Build Coastguard Worker##############################################################################
324*8617a60dSAndroid Build Coastguard Worker# The default target is here, to allow dependencies to be expressed below
325*8617a60dSAndroid Build Coastguard Worker# without accidentally changing the default target.
326*8617a60dSAndroid Build Coastguard Worker
327*8617a60dSAndroid Build Coastguard Worker# Default target.
328*8617a60dSAndroid Build Coastguard Worker.PHONY: all
329*8617a60dSAndroid Build Coastguard Workerall: fwlib futil utillib hostlib cgpt tlcl util_files \
330*8617a60dSAndroid Build Coastguard Worker	$(if $(filter x86_64,${ARCH}),$(if $(filter clang,${CC}),fuzzers)) \
331*8617a60dSAndroid Build Coastguard Worker	$(if $(filter-out 0,${COV}),coverage)
332*8617a60dSAndroid Build Coastguard Worker
333*8617a60dSAndroid Build Coastguard Worker##############################################################################
334*8617a60dSAndroid Build Coastguard Worker# Now we need to describe everything we might want or need to build
335*8617a60dSAndroid Build Coastguard Worker
336*8617a60dSAndroid Build Coastguard Worker# Everything wants these headers.
337*8617a60dSAndroid Build Coastguard WorkerINCLUDES += \
338*8617a60dSAndroid Build Coastguard Worker	-Ifirmware/include \
339*8617a60dSAndroid Build Coastguard Worker	-Ifirmware/lib/include \
340*8617a60dSAndroid Build Coastguard Worker	-Ifirmware/lib/cgptlib/include \
341*8617a60dSAndroid Build Coastguard Worker	-Ifirmware/lib/tpm_lite/include \
342*8617a60dSAndroid Build Coastguard Worker	-Ifirmware/2lib/include
343*8617a60dSAndroid Build Coastguard Worker
344*8617a60dSAndroid Build Coastguard Worker# If we're not building for a specific target, just stub out things like the
345*8617a60dSAndroid Build Coastguard Worker# TPM commands and various external functions that are provided by the BIOS.
346*8617a60dSAndroid Build Coastguard Workerifneq (${FIRMWARE_STUB},)
347*8617a60dSAndroid Build Coastguard WorkerINCLUDES += -Ihost/include -Ihost/lib/include
348*8617a60dSAndroid Build Coastguard WorkerINCLUDES += -Ihost/lib21/include
349*8617a60dSAndroid Build Coastguard Workerifeq ($(shell uname -s), OpenBSD)
350*8617a60dSAndroid Build Coastguard WorkerINCLUDES += -I/usr/local/include
351*8617a60dSAndroid Build Coastguard Workerendif
352*8617a60dSAndroid Build Coastguard Workerendif
353*8617a60dSAndroid Build Coastguard Worker
354*8617a60dSAndroid Build Coastguard Worker# Firmware library, used by the other firmware components (depthcharge,
355*8617a60dSAndroid Build Coastguard Worker# coreboot, etc.). It doesn't need exporting to some other place; they'll build
356*8617a60dSAndroid Build Coastguard Worker# this source tree locally and link to it directly.
357*8617a60dSAndroid Build Coastguard WorkerFWLIB = ${BUILD}/vboot_fw.a
358*8617a60dSAndroid Build Coastguard Worker
359*8617a60dSAndroid Build Coastguard Worker# Separate TPM lightweight command library (TLCL)
360*8617a60dSAndroid Build Coastguard WorkerTLCL = ${BUILD}/tlcl.a
361*8617a60dSAndroid Build Coastguard Worker
362*8617a60dSAndroid Build Coastguard WorkerFWLIB_SRCS = \
363*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2api.c \
364*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2auxfw_sync.c \
365*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2common.c \
366*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2context.c \
367*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2crc8.c \
368*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2crypto.c \
369*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2ec_sync.c \
370*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2firmware.c \
371*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2gbb.c \
372*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2hmac.c \
373*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2kernel.c \
374*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2load_kernel.c \
375*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2misc.c \
376*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2nvstorage.c \
377*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2packed_key.c \
378*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2recovery_reasons.c \
379*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2rsa.c \
380*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2secdata_firmware.c \
381*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2secdata_fwmp.c \
382*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2secdata_kernel.c \
383*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2sha1.c \
384*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2sha256.c \
385*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2sha512.c \
386*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2sha_utility.c \
387*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2struct.c \
388*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2stub_hwcrypto.c \
389*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2tpm_bootmode.c \
390*8617a60dSAndroid Build Coastguard Worker	firmware/lib/cgptlib/cgptlib.c \
391*8617a60dSAndroid Build Coastguard Worker	firmware/lib/cgptlib/cgptlib_internal.c \
392*8617a60dSAndroid Build Coastguard Worker	firmware/lib/cgptlib/crc32.c \
393*8617a60dSAndroid Build Coastguard Worker	firmware/lib/gpt_misc.c \
394*8617a60dSAndroid Build Coastguard Worker	firmware/lib20/api_kernel.c \
395*8617a60dSAndroid Build Coastguard Worker	firmware/lib20/kernel.c
396*8617a60dSAndroid Build Coastguard Worker
397*8617a60dSAndroid Build Coastguard Worker# TPM lightweight command library
398*8617a60dSAndroid Build Coastguard Workerifeq ($(filter-out 0,${TPM2_MODE}),)
399*8617a60dSAndroid Build Coastguard WorkerTLCL_SRCS = \
400*8617a60dSAndroid Build Coastguard Worker	firmware/lib/tpm_lite/tlcl.c
401*8617a60dSAndroid Build Coastguard Workerelse
402*8617a60dSAndroid Build Coastguard Worker# TODO(apronin): tests for TPM2 case?
403*8617a60dSAndroid Build Coastguard WorkerTLCL_SRCS = \
404*8617a60dSAndroid Build Coastguard Worker	firmware/lib/tpm2_lite/tlcl.c \
405*8617a60dSAndroid Build Coastguard Worker	firmware/lib/tpm2_lite/marshaling.c
406*8617a60dSAndroid Build Coastguard Workerendif
407*8617a60dSAndroid Build Coastguard Worker
408*8617a60dSAndroid Build Coastguard Worker# Support real TPM unless MOCK_TPM is set
409*8617a60dSAndroid Build Coastguard Workerifneq ($(filter-out 0,${MOCK_TPM}),)
410*8617a60dSAndroid Build Coastguard WorkerFWLIB_SRCS += \
411*8617a60dSAndroid Build Coastguard Worker	firmware/lib/tpm_lite/mocked_tlcl.c
412*8617a60dSAndroid Build Coastguard Workerendif
413*8617a60dSAndroid Build Coastguard Worker
414*8617a60dSAndroid Build Coastguard Workerifneq ($(filter-out 0,${X86_SHA_EXT}),)
415*8617a60dSAndroid Build Coastguard WorkerCFLAGS += -DX86_SHA_EXT
416*8617a60dSAndroid Build Coastguard WorkerFWLIB_SRCS += \
417*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2hwcrypto.c \
418*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2sha256_x86.c
419*8617a60dSAndroid Build Coastguard Workerendif
420*8617a60dSAndroid Build Coastguard Worker
421*8617a60dSAndroid Build Coastguard Workerifneq ($(filter-out 0,${ARMV8_CRYPTO_EXT}),)
422*8617a60dSAndroid Build Coastguard WorkerCFLAGS += -DARMV8_CRYPTO_EXT
423*8617a60dSAndroid Build Coastguard WorkerFWLIB_SRCS += \
424*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2hwcrypto.c \
425*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2sha256_arm.c
426*8617a60dSAndroid Build Coastguard WorkerFWLIB_ASMS += \
427*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/sha256_armv8a_ce_a64.S
428*8617a60dSAndroid Build Coastguard Workerendif
429*8617a60dSAndroid Build Coastguard Worker
430*8617a60dSAndroid Build Coastguard Workerifneq ($(filter-out 0,${ARM64_RSA_ACCELERATION}),)
431*8617a60dSAndroid Build Coastguard WorkerCFLAGS += -DARM64_RSA_ACCELERATION
432*8617a60dSAndroid Build Coastguard WorkerFWLIB_SRCS += \
433*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2modpow_neon.c
434*8617a60dSAndroid Build Coastguard Workerendif
435*8617a60dSAndroid Build Coastguard Worker
436*8617a60dSAndroid Build Coastguard Workerifneq ($(filter-out 0,${VB2_X86_RSA_ACCELERATION}),)
437*8617a60dSAndroid Build Coastguard WorkerCFLAGS += -DVB2_X86_RSA_ACCELERATION
438*8617a60dSAndroid Build Coastguard WorkerFWLIB_SRCS += \
439*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2modpow_sse2.c
440*8617a60dSAndroid Build Coastguard Workerendif
441*8617a60dSAndroid Build Coastguard Worker
442*8617a60dSAndroid Build Coastguard Workerifneq (,$(filter arm64 x86 x86_64,${ARCH}))
443*8617a60dSAndroid Build Coastguard WorkerENABLE_HWCRYPTO_RSA_TESTS := 1
444*8617a60dSAndroid Build Coastguard Workerendif
445*8617a60dSAndroid Build Coastguard Worker
446*8617a60dSAndroid Build Coastguard Worker# Even if X86_SHA_EXT is 0 we need cflags since this will be compiled for tests
447*8617a60dSAndroid Build Coastguard Worker${BUILD}/firmware/2lib/2sha256_x86.o: CFLAGS += -mssse3 -mno-avx -msha
448*8617a60dSAndroid Build Coastguard Worker
449*8617a60dSAndroid Build Coastguard Worker${BUILD}/firmware/2lib/2modpow_sse2.o: CFLAGS += -msse2 -mno-avx
450*8617a60dSAndroid Build Coastguard Worker
451*8617a60dSAndroid Build Coastguard Workerifneq (${FIRMWARE_STUB},)
452*8617a60dSAndroid Build Coastguard Worker# Include BIOS stubs in the firmware library when compiling for host
453*8617a60dSAndroid Build Coastguard Worker# TODO: split out other stub funcs too
454*8617a60dSAndroid Build Coastguard WorkerFWLIB_SRCS += \
455*8617a60dSAndroid Build Coastguard Worker	firmware/stub/tpm_lite_stub.c \
456*8617a60dSAndroid Build Coastguard Worker	firmware/stub/vboot_api_stub_disk.c \
457*8617a60dSAndroid Build Coastguard Worker	firmware/stub/vboot_api_stub_stream.c \
458*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2stub.c
459*8617a60dSAndroid Build Coastguard Workerendif
460*8617a60dSAndroid Build Coastguard Worker
461*8617a60dSAndroid Build Coastguard WorkerFWLIB_OBJS = ${FWLIB_SRCS:%.c=${BUILD}/%.o} ${FWLIB_ASMS:%.S=${BUILD}/%.o}
462*8617a60dSAndroid Build Coastguard WorkerTLCL_OBJS = ${TLCL_SRCS:%.c=${BUILD}/%.o}
463*8617a60dSAndroid Build Coastguard WorkerALL_OBJS += ${FWLIB_OBJS} ${TLCL_OBJS}
464*8617a60dSAndroid Build Coastguard Worker
465*8617a60dSAndroid Build Coastguard Worker# Maintain behaviour of default on.
466*8617a60dSAndroid Build Coastguard WorkerUSE_FLASHROM ?= 1
467*8617a60dSAndroid Build Coastguard Worker
468*8617a60dSAndroid Build Coastguard Workerifneq ($(filter-out 0,${USE_FLASHROM}),)
469*8617a60dSAndroid Build Coastguard Worker$(info building with libflashrom support)
470*8617a60dSAndroid Build Coastguard WorkerFLASHROM_LIBS := $(shell ${PKG_CONFIG} --libs flashrom)
471*8617a60dSAndroid Build Coastguard WorkerCOMMONLIB_SRCS += \
472*8617a60dSAndroid Build Coastguard Worker	host/lib/flashrom.c \
473*8617a60dSAndroid Build Coastguard Worker	host/lib/flashrom_drv.c
474*8617a60dSAndroid Build Coastguard WorkerCFLAGS += -DUSE_FLASHROM
475*8617a60dSAndroid Build Coastguard Workerendif
476*8617a60dSAndroid Build Coastguard WorkerCOMMONLIB_SRCS += \
477*8617a60dSAndroid Build Coastguard Worker	host/lib/subprocess.c \
478*8617a60dSAndroid Build Coastguard Worker	host/lib/cbfstool.c
479*8617a60dSAndroid Build Coastguard Worker
480*8617a60dSAndroid Build Coastguard Worker# Intermediate library for the vboot_reference utilities to link against.
481*8617a60dSAndroid Build Coastguard WorkerUTILLIB = ${BUILD}/libvboot_util.a
482*8617a60dSAndroid Build Coastguard Worker
483*8617a60dSAndroid Build Coastguard Worker# Avoid build failures outside the chroot on Ubuntu 2022.04
484*8617a60dSAndroid Build Coastguard Worker# e.g.:
485*8617a60dSAndroid Build Coastguard Worker# host/lib/host_key2.c:103:17: error: ‘RSA_free’ is deprecated: Since OpenSSL 3.0
486*8617a60dSAndroid Build Coastguard Worker# [-Werror=deprecated-declarations]
487*8617a60dSAndroid Build Coastguard Workerifeq ($(OPENSSL_VERSION),3)
488*8617a60dSAndroid Build Coastguard Worker${UTILLIB}: CFLAGS += -Wno-error=deprecated-declarations
489*8617a60dSAndroid Build Coastguard Workerendif
490*8617a60dSAndroid Build Coastguard Worker
491*8617a60dSAndroid Build Coastguard WorkerUTILLIB_SRCS = \
492*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_add.c \
493*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_boot.c \
494*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_common.c \
495*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_create.c \
496*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_edit.c \
497*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_prioritize.c \
498*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_repair.c \
499*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_show.c \
500*8617a60dSAndroid Build Coastguard Worker	futility/dump_kernel_config_lib.c \
501*8617a60dSAndroid Build Coastguard Worker	host/arch/${ARCH_DIR}/lib/crossystem_arch.c \
502*8617a60dSAndroid Build Coastguard Worker	host/lib/chromeos_config.c \
503*8617a60dSAndroid Build Coastguard Worker	host/lib/crossystem.c \
504*8617a60dSAndroid Build Coastguard Worker	host/lib/crypto.c \
505*8617a60dSAndroid Build Coastguard Worker	host/lib/file_keys.c \
506*8617a60dSAndroid Build Coastguard Worker	$(COMMONLIB_SRCS) \
507*8617a60dSAndroid Build Coastguard Worker	host/lib/fmap.c \
508*8617a60dSAndroid Build Coastguard Worker	host/lib/host_common.c \
509*8617a60dSAndroid Build Coastguard Worker	host/lib/host_key2.c \
510*8617a60dSAndroid Build Coastguard Worker	host/lib/host_keyblock.c \
511*8617a60dSAndroid Build Coastguard Worker	host/lib/host_misc.c \
512*8617a60dSAndroid Build Coastguard Worker	host/lib/host_signature.c \
513*8617a60dSAndroid Build Coastguard Worker	host/lib/host_signature2.c \
514*8617a60dSAndroid Build Coastguard Worker	host/lib/signature_digest.c \
515*8617a60dSAndroid Build Coastguard Worker	host/lib/util_misc.c \
516*8617a60dSAndroid Build Coastguard Worker	host/lib21/host_common.c \
517*8617a60dSAndroid Build Coastguard Worker	host/lib21/host_key.c \
518*8617a60dSAndroid Build Coastguard Worker	host/lib21/host_misc.c \
519*8617a60dSAndroid Build Coastguard Worker	host/lib21/host_signature.c
520*8617a60dSAndroid Build Coastguard Worker
521*8617a60dSAndroid Build Coastguard Workerifeq ($(HAVE_NSS),1)
522*8617a60dSAndroid Build Coastguard WorkerUTILLIB_SRCS += \
523*8617a60dSAndroid Build Coastguard Worker	host/lib/host_p11.c
524*8617a60dSAndroid Build Coastguard Workerelse
525*8617a60dSAndroid Build Coastguard WorkerUTILLIB_SRCS += \
526*8617a60dSAndroid Build Coastguard Worker	host/lib/host_p11_stub.c
527*8617a60dSAndroid Build Coastguard Workerendif
528*8617a60dSAndroid Build Coastguard Worker
529*8617a60dSAndroid Build Coastguard WorkerUTILLIB_OBJS = ${UTILLIB_SRCS:%.c=${BUILD}/%.o}
530*8617a60dSAndroid Build Coastguard WorkerALL_OBJS += ${UTILLIB_OBJS}
531*8617a60dSAndroid Build Coastguard Worker
532*8617a60dSAndroid Build Coastguard Worker# Externally exported library for some target userspace apps to link with
533*8617a60dSAndroid Build Coastguard Worker# (cryptohome, updater, etc.)
534*8617a60dSAndroid Build Coastguard WorkerHOSTLIB = ${BUILD}/libvboot_host.so
535*8617a60dSAndroid Build Coastguard WorkerHOSTLIB_STATIC = ${BUILD}/libvboot_host.a
536*8617a60dSAndroid Build Coastguard Worker
537*8617a60dSAndroid Build Coastguard Worker# For testing purposes files contianing some libvboot_host symbols.
538*8617a60dSAndroid Build Coastguard WorkerHOSTLIB_DEF = ${BUILD}/tests/libvboot_host_def.txt
539*8617a60dSAndroid Build Coastguard WorkerHOSTLIB_UNDEF = ${BUILD}/tests/libvboot_host_undef.txt
540*8617a60dSAndroid Build Coastguard Worker
541*8617a60dSAndroid Build Coastguard WorkerHOSTLIB_SRCS = \
542*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_add.c \
543*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_boot.c \
544*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_common.c \
545*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_create.c \
546*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_edit.c \
547*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_find.c \
548*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_prioritize.c \
549*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_repair.c \
550*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_show.c \
551*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2common.c \
552*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2context.c \
553*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2crc8.c \
554*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2crypto.c \
555*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2hmac.c \
556*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2nvstorage.c \
557*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2recovery_reasons.c \
558*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2rsa.c \
559*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2sha1.c \
560*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2sha256.c \
561*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2sha512.c \
562*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2sha_utility.c \
563*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2struct.c \
564*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2stub.c \
565*8617a60dSAndroid Build Coastguard Worker	firmware/2lib/2stub_hwcrypto.c \
566*8617a60dSAndroid Build Coastguard Worker	firmware/lib/cgptlib/cgptlib_internal.c \
567*8617a60dSAndroid Build Coastguard Worker	firmware/lib/cgptlib/crc32.c \
568*8617a60dSAndroid Build Coastguard Worker	firmware/lib/gpt_misc.c \
569*8617a60dSAndroid Build Coastguard Worker	firmware/stub/tpm_lite_stub.c \
570*8617a60dSAndroid Build Coastguard Worker	firmware/stub/vboot_api_stub_disk.c \
571*8617a60dSAndroid Build Coastguard Worker	futility/dump_kernel_config_lib.c \
572*8617a60dSAndroid Build Coastguard Worker	host/arch/${ARCH_DIR}/lib/crossystem_arch.c \
573*8617a60dSAndroid Build Coastguard Worker	host/lib/chromeos_config.c \
574*8617a60dSAndroid Build Coastguard Worker	host/lib/crossystem.c \
575*8617a60dSAndroid Build Coastguard Worker	host/lib/crypto.c \
576*8617a60dSAndroid Build Coastguard Worker	host/lib/extract_vmlinuz.c \
577*8617a60dSAndroid Build Coastguard Worker	$(COMMONLIB_SRCS) \
578*8617a60dSAndroid Build Coastguard Worker	host/lib/fmap.c \
579*8617a60dSAndroid Build Coastguard Worker	host/lib/host_misc.c \
580*8617a60dSAndroid Build Coastguard Worker	host/lib21/host_misc.c \
581*8617a60dSAndroid Build Coastguard Worker	${TLCL_SRCS}
582*8617a60dSAndroid Build Coastguard Worker
583*8617a60dSAndroid Build Coastguard Workerifneq ($(filter-out 0,${GPT_SPI_NOR}),)
584*8617a60dSAndroid Build Coastguard WorkerHOSTLIB_SRCS += cgpt/cgpt_nor.c
585*8617a60dSAndroid Build Coastguard Workerendif
586*8617a60dSAndroid Build Coastguard Worker
587*8617a60dSAndroid Build Coastguard WorkerHOSTLIB_OBJS = ${HOSTLIB_SRCS:%.c=${BUILD}/%.o}
588*8617a60dSAndroid Build Coastguard WorkerALL_OBJS += ${HOSTLIB_OBJS}
589*8617a60dSAndroid Build Coastguard Worker
590*8617a60dSAndroid Build Coastguard Worker# ----------------------------------------------------------------------------
591*8617a60dSAndroid Build Coastguard Worker# Now for the userspace binaries
592*8617a60dSAndroid Build Coastguard Worker
593*8617a60dSAndroid Build Coastguard WorkerCGPT = ${BUILD}/cgpt/cgpt
594*8617a60dSAndroid Build Coastguard Worker
595*8617a60dSAndroid Build Coastguard WorkerCGPT_SRCS = \
596*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt.c \
597*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_add.c \
598*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_boot.c \
599*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_common.c \
600*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_create.c \
601*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_edit.c \
602*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_find.c \
603*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_legacy.c \
604*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_prioritize.c \
605*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_repair.c \
606*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_show.c \
607*8617a60dSAndroid Build Coastguard Worker	cgpt/cmd_add.c \
608*8617a60dSAndroid Build Coastguard Worker	cgpt/cmd_boot.c \
609*8617a60dSAndroid Build Coastguard Worker	cgpt/cmd_create.c \
610*8617a60dSAndroid Build Coastguard Worker	cgpt/cmd_edit.c \
611*8617a60dSAndroid Build Coastguard Worker	cgpt/cmd_find.c \
612*8617a60dSAndroid Build Coastguard Worker	cgpt/cmd_legacy.c \
613*8617a60dSAndroid Build Coastguard Worker	cgpt/cmd_prioritize.c \
614*8617a60dSAndroid Build Coastguard Worker	cgpt/cmd_repair.c \
615*8617a60dSAndroid Build Coastguard Worker	cgpt/cmd_show.c
616*8617a60dSAndroid Build Coastguard Worker
617*8617a60dSAndroid Build Coastguard Workerifneq ($(filter-out 0,${GPT_SPI_NOR}),)
618*8617a60dSAndroid Build Coastguard WorkerCGPT_SRCS += cgpt/cgpt_nor.c
619*8617a60dSAndroid Build Coastguard Workerendif
620*8617a60dSAndroid Build Coastguard Worker
621*8617a60dSAndroid Build Coastguard WorkerCGPT_OBJS = ${CGPT_SRCS:%.c=${BUILD}/%.o}
622*8617a60dSAndroid Build Coastguard Worker
623*8617a60dSAndroid Build Coastguard WorkerALL_OBJS += ${CGPT_OBJS}
624*8617a60dSAndroid Build Coastguard Worker
625*8617a60dSAndroid Build Coastguard WorkerCGPT_WRAPPER = ${BUILD}/cgpt/cgpt_wrapper
626*8617a60dSAndroid Build Coastguard Worker
627*8617a60dSAndroid Build Coastguard WorkerCGPT_WRAPPER_SRCS = \
628*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_nor.c \
629*8617a60dSAndroid Build Coastguard Worker	cgpt/cgpt_wrapper.c
630*8617a60dSAndroid Build Coastguard Worker
631*8617a60dSAndroid Build Coastguard WorkerCGPT_WRAPPER_OBJS = ${CGPT_WRAPPER_SRCS:%.c=${BUILD}/%.o}
632*8617a60dSAndroid Build Coastguard Worker
633*8617a60dSAndroid Build Coastguard WorkerALL_OBJS += ${CGPT_WRAPPER_OBJS}
634*8617a60dSAndroid Build Coastguard Worker
635*8617a60dSAndroid Build Coastguard Worker# Utility defaults
636*8617a60dSAndroid Build Coastguard WorkerUTIL_DEFAULTS = ${BUILD}/default/vboot_reference
637*8617a60dSAndroid Build Coastguard Worker
638*8617a60dSAndroid Build Coastguard Worker# Scripts to install directly (not compiled)
639*8617a60dSAndroid Build Coastguard WorkerUTIL_SCRIPT_NAMES_SDK = \
640*8617a60dSAndroid Build Coastguard Worker	utility/dev_make_keypair \
641*8617a60dSAndroid Build Coastguard Worker	utility/vbutil_what_keys
642*8617a60dSAndroid Build Coastguard WorkerUTIL_SCRIPT_NAMES_BOARD = \
643*8617a60dSAndroid Build Coastguard Worker	utility/chromeos-tpm-recovery \
644*8617a60dSAndroid Build Coastguard Worker	utility/dev_debug_vboot \
645*8617a60dSAndroid Build Coastguard Worker	utility/enable_dev_usb_boot \
646*8617a60dSAndroid Build Coastguard Worker	utility/tpm-nvsize
647*8617a60dSAndroid Build Coastguard Worker
648*8617a60dSAndroid Build Coastguard WorkerUTIL_BIN_NAMES_SDK = \
649*8617a60dSAndroid Build Coastguard Worker	utility/dumpRSAPublicKey \
650*8617a60dSAndroid Build Coastguard Worker	utility/load_kernel_test \
651*8617a60dSAndroid Build Coastguard Worker	utility/pad_digest_utility \
652*8617a60dSAndroid Build Coastguard Worker	utility/signature_digest_utility \
653*8617a60dSAndroid Build Coastguard Worker	utility/verify_data
654*8617a60dSAndroid Build Coastguard WorkerUTIL_BIN_NAMES_BOARD = \
655*8617a60dSAndroid Build Coastguard Worker	utility/dumpRSAPublicKey \
656*8617a60dSAndroid Build Coastguard Worker	utility/tpmc
657*8617a60dSAndroid Build Coastguard Worker
658*8617a60dSAndroid Build Coastguard Workerifneq ($(filter-out 0,${USE_FLASHROM}),)
659*8617a60dSAndroid Build Coastguard WorkerUTIL_BIN_NAMES_BOARD += utility/crossystem
660*8617a60dSAndroid Build Coastguard Workerendif
661*8617a60dSAndroid Build Coastguard Worker
662*8617a60dSAndroid Build Coastguard WorkerUTIL_SCRIPTS_SDK = $(addprefix ${BUILD}/,${UTIL_SCRIPT_NAMES_SDK})
663*8617a60dSAndroid Build Coastguard WorkerUTIL_SCRIPTS_BOARD = $(addprefix ${BUILD}/,${UTIL_SCRIPT_NAMES_BOARD})
664*8617a60dSAndroid Build Coastguard WorkerUTIL_BINS_SDK = $(addprefix ${BUILD}/,${UTIL_BIN_NAMES_SDK})
665*8617a60dSAndroid Build Coastguard WorkerUTIL_BINS_BOARD = $(addprefix ${BUILD}/,${UTIL_BIN_NAMES_BOARD})
666*8617a60dSAndroid Build Coastguard WorkerUTIL_FILES_SDK = ${UTIL_BINS_SDK} ${UTIL_SCRIPTS_SDK}
667*8617a60dSAndroid Build Coastguard WorkerUTIL_FILES_BOARD = ${UTIL_BINS_BOARD} ${UTIL_SCRIPTS_BOARD}
668*8617a60dSAndroid Build Coastguard WorkerALL_OBJS += $(addsuffix .o,${UTIL_BINS_SDK})
669*8617a60dSAndroid Build Coastguard WorkerALL_OBJS += $(addsuffix .o,${UTIL_BINS_BOARD})
670*8617a60dSAndroid Build Coastguard Worker
671*8617a60dSAndroid Build Coastguard Worker
672*8617a60dSAndroid Build Coastguard Worker# Signing scripts that are also useful on DUTs.
673*8617a60dSAndroid Build Coastguard WorkerSIGNING_SCRIPTS_BOARD = \
674*8617a60dSAndroid Build Coastguard Worker	scripts/image_signing/make_dev_firmware.sh \
675*8617a60dSAndroid Build Coastguard Worker	scripts/image_signing/make_dev_ssd.sh \
676*8617a60dSAndroid Build Coastguard Worker	scripts/image_signing/resign_firmwarefd.sh \
677*8617a60dSAndroid Build Coastguard Worker	scripts/image_signing/common_minimal.sh
678*8617a60dSAndroid Build Coastguard Worker
679*8617a60dSAndroid Build Coastguard Worker# SDK installations have some extra scripts.
680*8617a60dSAndroid Build Coastguard WorkerSIGNING_SCRIPTS_SDK = \
681*8617a60dSAndroid Build Coastguard Worker	scripts/image_signing/make_dev_firmware.sh \
682*8617a60dSAndroid Build Coastguard Worker	scripts/image_signing/make_dev_ssd.sh \
683*8617a60dSAndroid Build Coastguard Worker	scripts/image_signing/resign_firmwarefd.sh \
684*8617a60dSAndroid Build Coastguard Worker	scripts/image_signing/swap_ec_rw \
685*8617a60dSAndroid Build Coastguard Worker	scripts/image_signing/common_minimal.sh
686*8617a60dSAndroid Build Coastguard Worker
687*8617a60dSAndroid Build Coastguard Worker# Unified firmware utility.
688*8617a60dSAndroid Build Coastguard WorkerFUTIL_BIN = ${BUILD}/futility/futility
689*8617a60dSAndroid Build Coastguard Worker
690*8617a60dSAndroid Build Coastguard Worker# These are the executables that are now built in to futility. We'll create
691*8617a60dSAndroid Build Coastguard Worker# symlinks for these so the old names will still work.
692*8617a60dSAndroid Build Coastguard WorkerFUTIL_SYMLINKS = \
693*8617a60dSAndroid Build Coastguard Worker	dump_fmap \
694*8617a60dSAndroid Build Coastguard Worker	dump_kernel_config \
695*8617a60dSAndroid Build Coastguard Worker	gbb_utility \
696*8617a60dSAndroid Build Coastguard Worker	vbutil_firmware \
697*8617a60dSAndroid Build Coastguard Worker	vbutil_kernel \
698*8617a60dSAndroid Build Coastguard Worker	vbutil_key \
699*8617a60dSAndroid Build Coastguard Worker	vbutil_keyblock
700*8617a60dSAndroid Build Coastguard Worker
701*8617a60dSAndroid Build Coastguard WorkerFUTIL_SRCS = \
702*8617a60dSAndroid Build Coastguard Worker	futility/futility.c \
703*8617a60dSAndroid Build Coastguard Worker	futility/cmd_create.c \
704*8617a60dSAndroid Build Coastguard Worker	futility/cmd_dump_fmap.c \
705*8617a60dSAndroid Build Coastguard Worker	futility/cmd_dump_kernel_config.c \
706*8617a60dSAndroid Build Coastguard Worker	futility/cmd_flash_util.c \
707*8617a60dSAndroid Build Coastguard Worker	futility/cmd_gbb_utility.c \
708*8617a60dSAndroid Build Coastguard Worker	futility/cmd_gscvd.c \
709*8617a60dSAndroid Build Coastguard Worker	futility/cmd_load_fmap.c \
710*8617a60dSAndroid Build Coastguard Worker	futility/cmd_pcr.c \
711*8617a60dSAndroid Build Coastguard Worker	futility/cmd_read.c \
712*8617a60dSAndroid Build Coastguard Worker	futility/cmd_show.c \
713*8617a60dSAndroid Build Coastguard Worker	futility/cmd_sign.c \
714*8617a60dSAndroid Build Coastguard Worker	futility/cmd_update.c \
715*8617a60dSAndroid Build Coastguard Worker	futility/cmd_vbutil_firmware.c \
716*8617a60dSAndroid Build Coastguard Worker	futility/cmd_vbutil_kernel.c \
717*8617a60dSAndroid Build Coastguard Worker	futility/cmd_vbutil_key.c \
718*8617a60dSAndroid Build Coastguard Worker	futility/cmd_vbutil_keyblock.c \
719*8617a60dSAndroid Build Coastguard Worker	futility/file_type_bios.c \
720*8617a60dSAndroid Build Coastguard Worker	futility/file_type.c \
721*8617a60dSAndroid Build Coastguard Worker	futility/file_type_rwsig.c \
722*8617a60dSAndroid Build Coastguard Worker	futility/file_type_usbpd1.c \
723*8617a60dSAndroid Build Coastguard Worker	futility/flash_helpers.c \
724*8617a60dSAndroid Build Coastguard Worker	futility/platform_csme.c \
725*8617a60dSAndroid Build Coastguard Worker	futility/misc.c \
726*8617a60dSAndroid Build Coastguard Worker	futility/vb1_helper.c \
727*8617a60dSAndroid Build Coastguard Worker	futility/vb2_helper.c
728*8617a60dSAndroid Build Coastguard Worker
729*8617a60dSAndroid Build Coastguard Workerifneq ($(filter-out 0,${USE_FLASHROM}),)
730*8617a60dSAndroid Build Coastguard WorkerFUTIL_SRCS += host/lib/flashrom_drv.c \
731*8617a60dSAndroid Build Coastguard Worker	futility/updater_archive.c \
732*8617a60dSAndroid Build Coastguard Worker	futility/updater_dut.c \
733*8617a60dSAndroid Build Coastguard Worker	futility/updater_manifest.c \
734*8617a60dSAndroid Build Coastguard Worker	futility/updater_quirks.c \
735*8617a60dSAndroid Build Coastguard Worker	futility/updater_utils.c \
736*8617a60dSAndroid Build Coastguard Worker	futility/updater.c
737*8617a60dSAndroid Build Coastguard Workerendif
738*8617a60dSAndroid Build Coastguard Worker
739*8617a60dSAndroid Build Coastguard Worker# List of commands built in futility.
740*8617a60dSAndroid Build Coastguard WorkerFUTIL_CMD_LIST = ${BUILD}/gen/futility_cmds.c
741*8617a60dSAndroid Build Coastguard Worker
742*8617a60dSAndroid Build Coastguard WorkerFUTIL_OBJS = ${FUTIL_SRCS:%.c=${BUILD}/%.o} ${FUTIL_CMD_LIST:%.c=%.o}
743*8617a60dSAndroid Build Coastguard Worker
744*8617a60dSAndroid Build Coastguard Worker${FUTIL_OBJS}: INCLUDES += -Ihost/lib21/include
745*8617a60dSAndroid Build Coastguard Worker
746*8617a60dSAndroid Build Coastguard Worker# Avoid build failures outside the chroot on Ubuntu 2022.04
747*8617a60dSAndroid Build Coastguard Worker# e.g.:
748*8617a60dSAndroid Build Coastguard Worker# futility/cmd_create.c:161:9: warning: ‘RSA_free’ is deprecated: Since OpenSSL 3.0
749*8617a60dSAndroid Build Coastguard Worker# [-Wdeprecated-declarations]
750*8617a60dSAndroid Build Coastguard Workerifeq ($(OPENSSL_VERSION),3)
751*8617a60dSAndroid Build Coastguard Worker${FUTIL_OBJS}: CFLAGS += -Wno-error=deprecated-declarations
752*8617a60dSAndroid Build Coastguard Workerendif
753*8617a60dSAndroid Build Coastguard Worker
754*8617a60dSAndroid Build Coastguard WorkerALL_OBJS += ${FUTIL_OBJS}
755*8617a60dSAndroid Build Coastguard Worker
756*8617a60dSAndroid Build Coastguard Worker
757*8617a60dSAndroid Build Coastguard Worker# Library of handy test functions.
758*8617a60dSAndroid Build Coastguard WorkerTESTLIB = ${BUILD}/tests/test.a
759*8617a60dSAndroid Build Coastguard Worker
760*8617a60dSAndroid Build Coastguard WorkerTEST_COMMON_DIR = tests/common
761*8617a60dSAndroid Build Coastguard Worker
762*8617a60dSAndroid Build Coastguard WorkerTESTLIB_SRCS += $(wildcard $(TEST_COMMON_DIR)/*.c)
763*8617a60dSAndroid Build Coastguard WorkerTESTLIB_SRCS += tests/crc32_test.c
764*8617a60dSAndroid Build Coastguard Worker
765*8617a60dSAndroid Build Coastguard WorkerTESTLIB_OBJS = ${TESTLIB_SRCS:%.c=${BUILD}/%.o}
766*8617a60dSAndroid Build Coastguard WorkerTEST_OBJS += ${TESTLIB_OBJS}
767*8617a60dSAndroid Build Coastguard Worker
768*8617a60dSAndroid Build Coastguard Worker
769*8617a60dSAndroid Build Coastguard Worker# And some compiled tests.
770*8617a60dSAndroid Build Coastguard WorkerTEST_NAMES = \
771*8617a60dSAndroid Build Coastguard Worker	tests/cbfstool_tests \
772*8617a60dSAndroid Build Coastguard Worker	tests/cgptlib_test \
773*8617a60dSAndroid Build Coastguard Worker	tests/chromeos_config_tests \
774*8617a60dSAndroid Build Coastguard Worker	tests/gpt_misc_tests \
775*8617a60dSAndroid Build Coastguard Worker	tests/sha_benchmark \
776*8617a60dSAndroid Build Coastguard Worker	tests/subprocess_tests \
777*8617a60dSAndroid Build Coastguard Worker	tests/verify_kernel
778*8617a60dSAndroid Build Coastguard Worker
779*8617a60dSAndroid Build Coastguard Workerifeq ($(filter-out 0,${MOCK_TPM})$(filter-out 0,${TPM2_MODE}),)
780*8617a60dSAndroid Build Coastguard Worker# tlcl_tests only works when MOCK_TPM is disabled
781*8617a60dSAndroid Build Coastguard Worker# TODO(apronin): tests for TPM2 case?
782*8617a60dSAndroid Build Coastguard WorkerTEST_NAMES += \
783*8617a60dSAndroid Build Coastguard Worker	tests/tlcl_tests
784*8617a60dSAndroid Build Coastguard Workerendif
785*8617a60dSAndroid Build Coastguard Worker
786*8617a60dSAndroid Build Coastguard WorkerTEST_FUTIL_NAMES = \
787*8617a60dSAndroid Build Coastguard Worker	tests/futility/binary_editor \
788*8617a60dSAndroid Build Coastguard Worker	tests/futility/test_file_types \
789*8617a60dSAndroid Build Coastguard Worker	tests/futility/test_not_really
790*8617a60dSAndroid Build Coastguard Worker
791*8617a60dSAndroid Build Coastguard WorkerTEST_NAMES += ${TEST_FUTIL_NAMES}
792*8617a60dSAndroid Build Coastguard Worker
793*8617a60dSAndroid Build Coastguard WorkerTEST2X_NAMES = \
794*8617a60dSAndroid Build Coastguard Worker	tests/vb2_api_tests \
795*8617a60dSAndroid Build Coastguard Worker	tests/vb2_auxfw_sync_tests \
796*8617a60dSAndroid Build Coastguard Worker	tests/vb2_common_tests \
797*8617a60dSAndroid Build Coastguard Worker	tests/vb2_common2_tests \
798*8617a60dSAndroid Build Coastguard Worker	tests/vb2_common3_tests \
799*8617a60dSAndroid Build Coastguard Worker	tests/vb2_crypto_tests \
800*8617a60dSAndroid Build Coastguard Worker	tests/vb2_ec_sync_tests \
801*8617a60dSAndroid Build Coastguard Worker	tests/vb2_firmware_tests \
802*8617a60dSAndroid Build Coastguard Worker	tests/vb2_gbb_init_tests \
803*8617a60dSAndroid Build Coastguard Worker	tests/vb2_gbb_tests \
804*8617a60dSAndroid Build Coastguard Worker	tests/vb2_host_flashrom_tests \
805*8617a60dSAndroid Build Coastguard Worker	tests/vb2_host_key_tests \
806*8617a60dSAndroid Build Coastguard Worker	tests/vb2_host_nvdata_flashrom_tests \
807*8617a60dSAndroid Build Coastguard Worker	tests/vb2_inject_kernel_subkey_tests \
808*8617a60dSAndroid Build Coastguard Worker	tests/vb2_kernel_tests \
809*8617a60dSAndroid Build Coastguard Worker	tests/vb2_load_kernel_tests \
810*8617a60dSAndroid Build Coastguard Worker	tests/vb2_load_kernel2_tests \
811*8617a60dSAndroid Build Coastguard Worker	tests/vb2_misc_tests \
812*8617a60dSAndroid Build Coastguard Worker	tests/vb2_misc2_tests \
813*8617a60dSAndroid Build Coastguard Worker	tests/vb2_nvstorage_tests \
814*8617a60dSAndroid Build Coastguard Worker	tests/vb2_rsa_utility_tests \
815*8617a60dSAndroid Build Coastguard Worker	tests/vb2_recovery_reasons_tests \
816*8617a60dSAndroid Build Coastguard Worker	tests/vb2_secdata_firmware_tests \
817*8617a60dSAndroid Build Coastguard Worker	tests/vb2_secdata_fwmp_tests \
818*8617a60dSAndroid Build Coastguard Worker	tests/vb2_secdata_kernel_tests \
819*8617a60dSAndroid Build Coastguard Worker	tests/vb2_sha_api_tests \
820*8617a60dSAndroid Build Coastguard Worker	tests/vb2_sha_tests \
821*8617a60dSAndroid Build Coastguard Worker	tests/hmac_test
822*8617a60dSAndroid Build Coastguard Worker
823*8617a60dSAndroid Build Coastguard WorkerTEST20_NAMES = \
824*8617a60dSAndroid Build Coastguard Worker	tests/vb20_api_kernel_tests \
825*8617a60dSAndroid Build Coastguard Worker	tests/vb20_kernel_tests \
826*8617a60dSAndroid Build Coastguard Worker	tests/vb20_rsa_padding_tests \
827*8617a60dSAndroid Build Coastguard Worker	tests/vb20_verify_fw
828*8617a60dSAndroid Build Coastguard Worker
829*8617a60dSAndroid Build Coastguard WorkerTEST21_NAMES = \
830*8617a60dSAndroid Build Coastguard Worker	tests/vb21_host_common2_tests \
831*8617a60dSAndroid Build Coastguard Worker	tests/vb21_host_common_tests \
832*8617a60dSAndroid Build Coastguard Worker	tests/vb21_host_key_tests \
833*8617a60dSAndroid Build Coastguard Worker	tests/vb21_host_misc_tests \
834*8617a60dSAndroid Build Coastguard Worker	tests/vb21_host_sig_tests
835*8617a60dSAndroid Build Coastguard Worker
836*8617a60dSAndroid Build Coastguard WorkerTEST_NAMES += ${TEST2X_NAMES} ${TEST20_NAMES} ${TEST21_NAMES}
837*8617a60dSAndroid Build Coastguard Worker
838*8617a60dSAndroid Build Coastguard Worker# Tests which should be run on dut
839*8617a60dSAndroid Build Coastguard Workerifeq (${ARCH}, x86_64)
840*8617a60dSAndroid Build Coastguard WorkerDUT_TEST_NAMES += tests/vb2_sha256_x86_tests
841*8617a60dSAndroid Build Coastguard Workerendif
842*8617a60dSAndroid Build Coastguard Worker
843*8617a60dSAndroid Build Coastguard WorkerHWCRYPTO_RSA_TESTS = \
844*8617a60dSAndroid Build Coastguard Worker	tests/vb20_hwcrypto_rsa_padding_tests \
845*8617a60dSAndroid Build Coastguard Worker	tests/vb20_hwcrypto_verify_fw
846*8617a60dSAndroid Build Coastguard Worker
847*8617a60dSAndroid Build Coastguard WorkerTEST_NAMES += ${DUT_TEST_NAMES}
848*8617a60dSAndroid Build Coastguard Worker
849*8617a60dSAndroid Build Coastguard Workerifeq (${ENABLE_HWCRYPTO_RSA_TESTS},1)
850*8617a60dSAndroid Build Coastguard WorkerTEST20_NAMES += ${HWCRYPTO_RSA_TESTS}
851*8617a60dSAndroid Build Coastguard Workerendif
852*8617a60dSAndroid Build Coastguard Worker
853*8617a60dSAndroid Build Coastguard Worker# And a few more...
854*8617a60dSAndroid Build Coastguard Workerifeq ($(filter-out 0,${TPM2_MODE}),)
855*8617a60dSAndroid Build Coastguard WorkerTLCL_TEST_NAMES = \
856*8617a60dSAndroid Build Coastguard Worker	tests/tpm_lite/tpmtest_earlyextend \
857*8617a60dSAndroid Build Coastguard Worker	tests/tpm_lite/tpmtest_earlynvram \
858*8617a60dSAndroid Build Coastguard Worker	tests/tpm_lite/tpmtest_earlynvram2 \
859*8617a60dSAndroid Build Coastguard Worker	tests/tpm_lite/tpmtest_enable \
860*8617a60dSAndroid Build Coastguard Worker	tests/tpm_lite/tpmtest_fastenable \
861*8617a60dSAndroid Build Coastguard Worker	tests/tpm_lite/tpmtest_globallock \
862*8617a60dSAndroid Build Coastguard Worker	tests/tpm_lite/tpmtest_redefine_unowned \
863*8617a60dSAndroid Build Coastguard Worker	tests/tpm_lite/tpmtest_spaceperm \
864*8617a60dSAndroid Build Coastguard Worker	tests/tpm_lite/tpmtest_testsetup \
865*8617a60dSAndroid Build Coastguard Worker	tests/tpm_lite/tpmtest_timing \
866*8617a60dSAndroid Build Coastguard Worker	tests/tpm_lite/tpmtest_writelimit
867*8617a60dSAndroid Build Coastguard Workerelse
868*8617a60dSAndroid Build Coastguard Worker# TODO(apronin): tests for TPM2 case?
869*8617a60dSAndroid Build Coastguard WorkerTLCL_TEST_NAMES =
870*8617a60dSAndroid Build Coastguard Workerendif
871*8617a60dSAndroid Build Coastguard Worker
872*8617a60dSAndroid Build Coastguard WorkerTEST_NAMES += ${TLCL_TEST_NAMES}
873*8617a60dSAndroid Build Coastguard Worker
874*8617a60dSAndroid Build Coastguard Worker# Finally
875*8617a60dSAndroid Build Coastguard WorkerTEST_BINS = $(addprefix ${BUILD}/,${TEST_NAMES})
876*8617a60dSAndroid Build Coastguard WorkerTEST_OBJS += $(addsuffix .o,${TEST_BINS})
877*8617a60dSAndroid Build Coastguard Worker
878*8617a60dSAndroid Build Coastguard WorkerTEST_FUTIL_BINS = $(addprefix ${BUILD}/,${TEST_FUTIL_NAMES})
879*8617a60dSAndroid Build Coastguard WorkerTEST2X_BINS = $(addprefix ${BUILD}/,${TEST2X_NAMES})
880*8617a60dSAndroid Build Coastguard WorkerTEST20_BINS = $(addprefix ${BUILD}/,${TEST20_NAMES})
881*8617a60dSAndroid Build Coastguard WorkerTEST21_BINS = $(addprefix ${BUILD}/,${TEST21_NAMES})
882*8617a60dSAndroid Build Coastguard Worker
883*8617a60dSAndroid Build Coastguard Worker# Directory containing test keys
884*8617a60dSAndroid Build Coastguard WorkerTEST_KEYS = ${SRC_RUN}/tests/testkeys
885*8617a60dSAndroid Build Coastguard Worker
886*8617a60dSAndroid Build Coastguard Worker# ----------------------------------------------------------------------------
887*8617a60dSAndroid Build Coastguard Worker# Fuzzing binaries
888*8617a60dSAndroid Build Coastguard Worker
889*8617a60dSAndroid Build Coastguard WorkerFUZZ_TEST_NAMES = \
890*8617a60dSAndroid Build Coastguard Worker	tests/cgpt_fuzzer \
891*8617a60dSAndroid Build Coastguard Worker	tests/vb2_keyblock_fuzzer \
892*8617a60dSAndroid Build Coastguard Worker	tests/vb2_preamble_fuzzer
893*8617a60dSAndroid Build Coastguard Worker
894*8617a60dSAndroid Build Coastguard WorkerFUZZ_TEST_BINS = $(addprefix ${BUILD}/,${FUZZ_TEST_NAMES})
895*8617a60dSAndroid Build Coastguard Worker
896*8617a60dSAndroid Build Coastguard Worker##############################################################################
897*8617a60dSAndroid Build Coastguard Worker# Finally, some targets. High-level ones first.
898*8617a60dSAndroid Build Coastguard Worker
899*8617a60dSAndroid Build Coastguard Worker# Create output directories if necessary.  Do this via explicit shell commands
900*8617a60dSAndroid Build Coastguard Worker# so it happens before trying to generate/include dependencies.
901*8617a60dSAndroid Build Coastguard WorkerSUBDIRS := firmware host cgpt utility futility tests tests/tpm_lite
902*8617a60dSAndroid Build Coastguard Worker_dir_create := $(foreach d, \
903*8617a60dSAndroid Build Coastguard Worker	$(shell find ${SUBDIRS} -name '*.c' -exec  dirname {} \; | sort -u), \
904*8617a60dSAndroid Build Coastguard Worker	$(shell [ -d ${BUILD}/${d} ] || mkdir -p ${BUILD}/${d}))
905*8617a60dSAndroid Build Coastguard Worker
906*8617a60dSAndroid Build Coastguard Worker.PHONY: clean
907*8617a60dSAndroid Build Coastguard Workerclean:
908*8617a60dSAndroid Build Coastguard Worker	${Q}/bin/rm -rf ${BUILD}
909*8617a60dSAndroid Build Coastguard Worker
910*8617a60dSAndroid Build Coastguard Worker.PHONY: install
911*8617a60dSAndroid Build Coastguard Workerinstall: cgpt_install signing_install futil_install pc_files_install \
912*8617a60dSAndroid Build Coastguard Worker	lib_install $(if ${SDK_BUILD},,util_install_defaults) \
913*8617a60dSAndroid Build Coastguard Worker	$(foreach f,$(if ${SDK_BUILD},${UTIL_FILES_SDK},${UTIL_FILES_BOARD}), \
914*8617a60dSAndroid Build Coastguard Worker		util_install-$(patsubst ${BUILD}/%,%,${f}))
915*8617a60dSAndroid Build Coastguard Worker
916*8617a60dSAndroid Build Coastguard Worker.PHONY: install_dev
917*8617a60dSAndroid Build Coastguard Workerinstall_dev: devkeys_install headers_install
918*8617a60dSAndroid Build Coastguard Worker
919*8617a60dSAndroid Build Coastguard Worker.PHONY: install_mtd
920*8617a60dSAndroid Build Coastguard Workerinstall_mtd: install cgpt_wrapper_install
921*8617a60dSAndroid Build Coastguard Worker
922*8617a60dSAndroid Build Coastguard Worker.PHONY: install_for_test
923*8617a60dSAndroid Build Coastguard Workerinstall_for_test: override DESTDIR = ${TEST_INSTALL_DIR}
924*8617a60dSAndroid Build Coastguard Workerinstall_for_test: test_setup install \
925*8617a60dSAndroid Build Coastguard Worker	$(foreach f,${UTIL_FILES_SDK} ${UTIL_FILES_BOARD}, \
926*8617a60dSAndroid Build Coastguard Worker		util_install-$(patsubst ${BUILD}/%,%,${f}))
927*8617a60dSAndroid Build Coastguard Worker
928*8617a60dSAndroid Build Coastguard Worker# Don't delete intermediate object files
929*8617a60dSAndroid Build Coastguard Worker.SECONDARY:
930*8617a60dSAndroid Build Coastguard Worker
931*8617a60dSAndroid Build Coastguard Worker# ----------------------------------------------------------------------------
932*8617a60dSAndroid Build Coastguard Worker# Firmware library
933*8617a60dSAndroid Build Coastguard Worker
934*8617a60dSAndroid Build Coastguard Worker# TPM-specific flags.  These depend on the particular TPM we're targeting for.
935*8617a60dSAndroid Build Coastguard Worker# They are needed here only for compiling parts of the firmware code into
936*8617a60dSAndroid Build Coastguard Worker# user-level tests.
937*8617a60dSAndroid Build Coastguard Worker
938*8617a60dSAndroid Build Coastguard Worker# TPM_BLOCKING_CONTINUESELFTEST is defined if TPM_ContinueSelfTest blocks until
939*8617a60dSAndroid Build Coastguard Worker# the self test has completed.
940*8617a60dSAndroid Build Coastguard Worker
941*8617a60dSAndroid Build Coastguard Worker${TLCL_OBJS}: CFLAGS += -DTPM_BLOCKING_CONTINUESELFTEST
942*8617a60dSAndroid Build Coastguard Worker
943*8617a60dSAndroid Build Coastguard Worker# TPM_MANUAL_SELFTEST is defined if the self test must be started manually
944*8617a60dSAndroid Build Coastguard Worker# (with a call to TPM_ContinueSelfTest) instead of starting automatically at
945*8617a60dSAndroid Build Coastguard Worker# power on.
946*8617a60dSAndroid Build Coastguard Worker#
947*8617a60dSAndroid Build Coastguard Worker# We sincerely hope that TPM_BLOCKING_CONTINUESELFTEST and TPM_MANUAL_SELFTEST
948*8617a60dSAndroid Build Coastguard Worker# are not both defined at the same time.  (See comment in code.)
949*8617a60dSAndroid Build Coastguard Worker
950*8617a60dSAndroid Build Coastguard Worker# CFLAGS += -DTPM_MANUAL_SELFTEST
951*8617a60dSAndroid Build Coastguard Worker
952*8617a60dSAndroid Build Coastguard Worker# NOTE: UNROLL_LOOPS *only* affects SHA256, *not* SHA512. This seems to have
953*8617a60dSAndroid Build Coastguard Worker# been a conscious decision at some point (see b/35501356) but whether it still
954*8617a60dSAndroid Build Coastguard Worker# holds up in all situations on all architectures today might need to be
955*8617a60dSAndroid Build Coastguard Worker# reevaluated. For now, since we currently always use SHA256 for (non-recovery)
956*8617a60dSAndroid Build Coastguard Worker# kernel bodies and don't unroll loops for firmware verification, it's not very
957*8617a60dSAndroid Build Coastguard Worker# relevant in practice. To unroll SHA512, UNROLL_LOOPS_SHA512 would need to be
958*8617a60dSAndroid Build Coastguard Worker# defined.
959*8617a60dSAndroid Build Coastguard Workerifneq ($(filter-out 0,$(UNROLL_LOOPS)),)
960*8617a60dSAndroid Build Coastguard Worker$(info vboot SHA256 built with unrolled loops (faster, larger code size))
961*8617a60dSAndroid Build Coastguard WorkerCFLAGS += -DUNROLL_LOOPS
962*8617a60dSAndroid Build Coastguard Workerelse
963*8617a60dSAndroid Build Coastguard Worker$(info vboot SHA256 built with tight loops (slower, smaller code size))
964*8617a60dSAndroid Build Coastguard Workerendif
965*8617a60dSAndroid Build Coastguard Worker
966*8617a60dSAndroid Build Coastguard Worker.PHONY: fwlib
967*8617a60dSAndroid Build Coastguard Workerfwlib: $(if ${FIRMWARE_ARCH},${FWLIB},)
968*8617a60dSAndroid Build Coastguard Worker
969*8617a60dSAndroid Build Coastguard Worker${FWLIB}: ${FWLIB_OBJS}
970*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    RM            $(subst ${BUILD}/,,$@)\n"
971*8617a60dSAndroid Build Coastguard Worker	${Q}rm -f $@
972*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    AR            $(subst ${BUILD}/,,$@)\n"
973*8617a60dSAndroid Build Coastguard Worker	${Q}ar qcT $@ $^
974*8617a60dSAndroid Build Coastguard Worker
975*8617a60dSAndroid Build Coastguard Worker.PHONY: tlcl
976*8617a60dSAndroid Build Coastguard Workertlcl: ${TLCL}
977*8617a60dSAndroid Build Coastguard Worker
978*8617a60dSAndroid Build Coastguard Worker${TLCL}: ${TLCL_OBJS}
979*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    RM            $(subst ${BUILD}/,,$@)\n"
980*8617a60dSAndroid Build Coastguard Worker	${Q}rm -f $@
981*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    AR            $(subst ${BUILD}/,,$@)\n"
982*8617a60dSAndroid Build Coastguard Worker	${Q}ar qcT $@ $^
983*8617a60dSAndroid Build Coastguard Worker
984*8617a60dSAndroid Build Coastguard Worker# ----------------------------------------------------------------------------
985*8617a60dSAndroid Build Coastguard Worker# Host library(s)
986*8617a60dSAndroid Build Coastguard Worker
987*8617a60dSAndroid Build Coastguard Worker# Some UTILLIB files need dlopen(), doesn't hurt to just link it everywhere.
988*8617a60dSAndroid Build Coastguard WorkerLDLIBS += -ldl
989*8617a60dSAndroid Build Coastguard Workerifneq ($(filter-out 0,${USE_FLASHROM}),)
990*8617a60dSAndroid Build Coastguard Worker${HOSTLIB}: LDLIBS += ${FLASHROM_LIBS}
991*8617a60dSAndroid Build Coastguard Workerendif
992*8617a60dSAndroid Build Coastguard Worker
993*8617a60dSAndroid Build Coastguard Worker.PHONY: utillib
994*8617a60dSAndroid Build Coastguard Workerutillib: ${UTILLIB}
995*8617a60dSAndroid Build Coastguard Worker
996*8617a60dSAndroid Build Coastguard Worker# TODO: better way to make .a than duplicating this recipe each time?
997*8617a60dSAndroid Build Coastguard Worker${UTILLIB}: ${UTILLIB_OBJS} ${FWLIB_OBJS} ${TLCL_OBJS}
998*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    RM            $(subst ${BUILD}/,,$@)\n"
999*8617a60dSAndroid Build Coastguard Worker	${Q}rm -f $@
1000*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    AR            $(subst ${BUILD}/,,$@)\n"
1001*8617a60dSAndroid Build Coastguard Worker	${Q}ar qcT $@ $^
1002*8617a60dSAndroid Build Coastguard Worker
1003*8617a60dSAndroid Build Coastguard Worker.PHONY: hostlib
1004*8617a60dSAndroid Build Coastguard Workerhostlib: ${HOSTLIB} ${HOSTLIB_STATIC}
1005*8617a60dSAndroid Build Coastguard Worker
1006*8617a60dSAndroid Build Coastguard Worker# TODO: better way to make .a than duplicating this recipe each time?
1007*8617a60dSAndroid Build Coastguard Worker${HOSTLIB_STATIC}: ${HOSTLIB_OBJS}
1008*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    RM            $(subst ${BUILD}/,,$@)\n"
1009*8617a60dSAndroid Build Coastguard Worker	${Q}rm -f $@
1010*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    AR            $(subst ${BUILD}/,,$@)\n"
1011*8617a60dSAndroid Build Coastguard Worker	${Q}ar qcT $@ $^
1012*8617a60dSAndroid Build Coastguard Worker
1013*8617a60dSAndroid Build Coastguard Worker${HOSTLIB}: ${HOSTLIB_OBJS}
1014*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    RM            $(subst ${BUILD}/,,$@)\n"
1015*8617a60dSAndroid Build Coastguard Worker	${Q}rm -f $@
1016*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    LD            $(subst ${BUILD}/,,$@)\n"
1017*8617a60dSAndroid Build Coastguard Worker	${Q}${LD} ${LDFLAGS} ${LDLIBS} -shared -Wl,-soname,$(subst ${BUILD}/,,$@) $^ -o $@
1018*8617a60dSAndroid Build Coastguard Worker
1019*8617a60dSAndroid Build Coastguard Worker${HOSTLIB_DEF}: ${HOSTLIB_STATIC}
1020*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    NMd           $(subst ${BUILD}/,,$@)\n"
1021*8617a60dSAndroid Build Coastguard Worker	${Q}nm --defined-only --format=just-symbols $^ > $@
1022*8617a60dSAndroid Build Coastguard Worker
1023*8617a60dSAndroid Build Coastguard Worker${HOSTLIB_UNDEF}: ${HOSTLIB_STATIC}
1024*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    NMu           $(subst ${BUILD}/,,$@)\n"
1025*8617a60dSAndroid Build Coastguard Worker	${Q}nm --undefined-only --format=just-symbols $^ > $@
1026*8617a60dSAndroid Build Coastguard Worker
1027*8617a60dSAndroid Build Coastguard Worker
1028*8617a60dSAndroid Build Coastguard Worker.PHONY: headers_install
1029*8617a60dSAndroid Build Coastguard Workerheaders_install:
1030*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    INSTALL       HEADERS\n"
1031*8617a60dSAndroid Build Coastguard Worker	${Q}mkdir -p ${UI_DIR}
1032*8617a60dSAndroid Build Coastguard Worker	${Q}${INSTALL} -t ${UI_DIR} -m644 \
1033*8617a60dSAndroid Build Coastguard Worker		host/include/* \
1034*8617a60dSAndroid Build Coastguard Worker		firmware/2lib/include/2crypto.h \
1035*8617a60dSAndroid Build Coastguard Worker		firmware/2lib/include/2recovery_reasons.h \
1036*8617a60dSAndroid Build Coastguard Worker		firmware/2lib/include/2sysincludes.h \
1037*8617a60dSAndroid Build Coastguard Worker		firmware/include/gpt.h \
1038*8617a60dSAndroid Build Coastguard Worker		firmware/include/tlcl.h \
1039*8617a60dSAndroid Build Coastguard Worker		firmware/include/tss_constants.h \
1040*8617a60dSAndroid Build Coastguard Worker		firmware/include/tpm1_tss_constants.h \
1041*8617a60dSAndroid Build Coastguard Worker		firmware/include/tpm2_tss_constants.h
1042*8617a60dSAndroid Build Coastguard Worker
1043*8617a60dSAndroid Build Coastguard Worker.PHONY: lib_install
1044*8617a60dSAndroid Build Coastguard Workerlib_install: ${HOSTLIB} ${HOSTLIB_STATIC}
1045*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    INSTALL       HOSTLIB\n"
1046*8617a60dSAndroid Build Coastguard Worker	${Q}mkdir -p ${UL_DIR}
1047*8617a60dSAndroid Build Coastguard Worker	${Q}${INSTALL} -t ${UL_DIR} -m644 $^
1048*8617a60dSAndroid Build Coastguard Worker
1049*8617a60dSAndroid Build Coastguard Worker.PHONY: devkeys_install
1050*8617a60dSAndroid Build Coastguard Workerdevkeys_install:
1051*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    INSTALL       DEVKEYS\n"
1052*8617a60dSAndroid Build Coastguard Worker	${Q}mkdir -p ${US_DIR}/devkeys
1053*8617a60dSAndroid Build Coastguard Worker	${Q}${INSTALL} -t ${US_DIR}/devkeys -m644 \
1054*8617a60dSAndroid Build Coastguard Worker		`find tests/devkeys -type f -maxdepth 1`
1055*8617a60dSAndroid Build Coastguard Worker
1056*8617a60dSAndroid Build Coastguard Worker# ----------------------------------------------------------------------------
1057*8617a60dSAndroid Build Coastguard Worker# CGPT library and utility
1058*8617a60dSAndroid Build Coastguard Worker
1059*8617a60dSAndroid Build Coastguard Worker.PHONY: cgpt_wrapper
1060*8617a60dSAndroid Build Coastguard Workercgpt_wrapper: ${CGPT_WRAPPER}
1061*8617a60dSAndroid Build Coastguard Worker
1062*8617a60dSAndroid Build Coastguard Worker${CGPT_WRAPPER}: ${CGPT_WRAPPER_OBJS} ${UTILLIB}
1063*8617a60dSAndroid Build Coastguard Worker	@$(PRINTF) "    LD            $(subst ${BUILD}/,,$@)\n"
1064*8617a60dSAndroid Build Coastguard Worker	${Q}${LD} -o ${CGPT_WRAPPER} ${LDFLAGS} $^ ${LDLIBS}
1065*8617a60dSAndroid Build Coastguard Worker
1066*8617a60dSAndroid Build Coastguard Worker.PHONY: cgpt
1067*8617a60dSAndroid Build Coastguard Workercgpt: ${CGPT} $(if $(filter-out 0,${GPT_SPI_NOR}),cgpt_wrapper)
1068*8617a60dSAndroid Build Coastguard Worker
1069*8617a60dSAndroid Build Coastguard Worker# on FreeBSD: install misc/e2fsprogs-libuuid from ports,
1070*8617a60dSAndroid Build Coastguard Worker# or e2fsprogs-libuuid from its binary package system.
1071*8617a60dSAndroid Build Coastguard Worker# on OpenBSD: install sysutils/e2fsprogs from ports,
1072*8617a60dSAndroid Build Coastguard Worker# or e2fsprogs from its binary package system, to install uuid/uid.h
1073*8617a60dSAndroid Build Coastguard Worker${CGPT}: LDLIBS += -luuid
1074*8617a60dSAndroid Build Coastguard Worker
1075*8617a60dSAndroid Build Coastguard Worker${CGPT}: ${CGPT_OBJS} ${UTILLIB}
1076*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    LDcgpt        $(subst ${BUILD}/,,$@)\n"
1077*8617a60dSAndroid Build Coastguard Worker	${Q}${LD} -o ${CGPT} ${LDFLAGS} $^ ${LDLIBS}
1078*8617a60dSAndroid Build Coastguard Worker
1079*8617a60dSAndroid Build Coastguard Worker.PHONY: cgpt_install
1080*8617a60dSAndroid Build Coastguard Workercgpt_install: ${CGPT}
1081*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    INSTALL       CGPT\n"
1082*8617a60dSAndroid Build Coastguard Worker	${Q}mkdir -p ${UB_DIR}
1083*8617a60dSAndroid Build Coastguard Worker	${Q}${INSTALL} -t ${UB_DIR} $^
1084*8617a60dSAndroid Build Coastguard Worker
1085*8617a60dSAndroid Build Coastguard Worker.PHONY: cgpt_wrapper_install
1086*8617a60dSAndroid Build Coastguard Workercgpt_wrapper_install: cgpt_install ${CGPT_WRAPPER}
1087*8617a60dSAndroid Build Coastguard Worker	@$(PRINTF) "    INSTALL       cgpt_wrapper\n"
1088*8617a60dSAndroid Build Coastguard Worker	${Q}${INSTALL} -t ${UB_DIR} ${CGPT_WRAPPER}
1089*8617a60dSAndroid Build Coastguard Worker	${Q}mv ${UB_DIR}/$(notdir ${CGPT}) \
1090*8617a60dSAndroid Build Coastguard Worker		${UB_DIR}/$(notdir ${CGPT}).bin
1091*8617a60dSAndroid Build Coastguard Worker	${Q}mv ${UB_DIR}/$(notdir ${CGPT_WRAPPER}) \
1092*8617a60dSAndroid Build Coastguard Worker		${UB_DIR}/$(notdir ${CGPT})
1093*8617a60dSAndroid Build Coastguard Worker
1094*8617a60dSAndroid Build Coastguard Worker# ----------------------------------------------------------------------------
1095*8617a60dSAndroid Build Coastguard Worker# Utilities
1096*8617a60dSAndroid Build Coastguard Worker
1097*8617a60dSAndroid Build Coastguard Worker.PHONY: util_files
1098*8617a60dSAndroid Build Coastguard Workerutil_files: $(if ${SDK_BUILD},${UTIL_FILES_SDK},${UTIL_FILES_BOARD})
1099*8617a60dSAndroid Build Coastguard Worker
1100*8617a60dSAndroid Build Coastguard Worker# These have their own headers too.
1101*8617a60dSAndroid Build Coastguard Worker${BUILD}/utility/%: INCLUDES += -Iutility/include
1102*8617a60dSAndroid Build Coastguard Worker
1103*8617a60dSAndroid Build Coastguard Worker# Avoid build failures outside the chroot on Ubuntu 2022.04
1104*8617a60dSAndroid Build Coastguard Workerifeq ($(OPENSSL_VERSION),3)
1105*8617a60dSAndroid Build Coastguard Worker${BUILD}/utility/%: CFLAGS += -Wno-error=deprecated-declarations
1106*8617a60dSAndroid Build Coastguard Workerendif
1107*8617a60dSAndroid Build Coastguard Worker
1108*8617a60dSAndroid Build Coastguard Worker${UTIL_BINS_SDK}: ${UTILLIB}
1109*8617a60dSAndroid Build Coastguard Worker${UTIL_BINS_SDK}: LIBS = ${UTILLIB}
1110*8617a60dSAndroid Build Coastguard Worker${UTIL_BINS_BOARD}: ${UTILLIB}
1111*8617a60dSAndroid Build Coastguard Worker${UTIL_BINS_BOARD}: LIBS = ${UTILLIB}
1112*8617a60dSAndroid Build Coastguard Worker
1113*8617a60dSAndroid Build Coastguard Worker${UTIL_SCRIPTS_SDK} ${UTIL_SCRIPTS_BOARD}: ${BUILD}/%: %
1114*8617a60dSAndroid Build Coastguard Worker	${Q}cp -f $< $@
1115*8617a60dSAndroid Build Coastguard Worker	${Q}chmod a+rx $@
1116*8617a60dSAndroid Build Coastguard Worker
1117*8617a60dSAndroid Build Coastguard Workerdefine UTIL_INSTALL_template
1118*8617a60dSAndroid Build Coastguard Worker.PHONY: util_install-$(1)
1119*8617a60dSAndroid Build Coastguard Workerutil_install-$(1): $$(addprefix $${BUILD}/,$(1))
1120*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    INSTALL       $(1)\n"
1121*8617a60dSAndroid Build Coastguard Worker	${Q}mkdir -p $${UB_DIR}
1122*8617a60dSAndroid Build Coastguard Worker	${Q}${INSTALL} -t $${UB_DIR} $$<
1123*8617a60dSAndroid Build Coastguard Workerendef
1124*8617a60dSAndroid Build Coastguard Worker
1125*8617a60dSAndroid Build Coastguard Worker$(foreach f, $(sort ${UTIL_FILES_SDK} ${UTIL_FILES_BOARD}), \
1126*8617a60dSAndroid Build Coastguard Worker	$(eval $(call UTIL_INSTALL_template,$(patsubst ${BUILD}/%,%,${f}))))
1127*8617a60dSAndroid Build Coastguard Worker
1128*8617a60dSAndroid Build Coastguard Worker.PHONY: util_install_defaults
1129*8617a60dSAndroid Build Coastguard Workerutil_install_defaults: ${UTIL_DEFAULTS}
1130*8617a60dSAndroid Build Coastguard Worker	${Q}mkdir -p ${DF_DIR}
1131*8617a60dSAndroid Build Coastguard Worker	${Q}${INSTALL} -t ${DF_DIR} -m 'u=rw,go=r,a-s' ${UTIL_DEFAULTS}
1132*8617a60dSAndroid Build Coastguard Worker
1133*8617a60dSAndroid Build Coastguard Worker# And some signing stuff for the target
1134*8617a60dSAndroid Build Coastguard Worker.PHONY: signing_install
1135*8617a60dSAndroid Build Coastguard Workersigning_install: $(if ${SDK_BUILD},\
1136*8617a60dSAndroid Build Coastguard Worker		   ${SIGNING_SCRIPTS_SDK},${SIGNING_SCRIPTS_BOARD})
1137*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    INSTALL       SIGNING\n"
1138*8617a60dSAndroid Build Coastguard Worker	${Q}mkdir -p ${VB_DIR}
1139*8617a60dSAndroid Build Coastguard Worker	${Q}${INSTALL} -t ${VB_DIR} $^
1140*8617a60dSAndroid Build Coastguard Worker
1141*8617a60dSAndroid Build Coastguard Worker# ----------------------------------------------------------------------------
1142*8617a60dSAndroid Build Coastguard Worker# Firmware Utility
1143*8617a60dSAndroid Build Coastguard Worker
1144*8617a60dSAndroid Build Coastguard Worker.PHONY: futil
1145*8617a60dSAndroid Build Coastguard Workerfutil: ${FUTIL_BIN}
1146*8617a60dSAndroid Build Coastguard Worker
1147*8617a60dSAndroid Build Coastguard Worker# FUTIL_LIBS is shared by FUTIL_BIN and TEST_FUTIL_BINS.
1148*8617a60dSAndroid Build Coastguard WorkerFUTIL_LIBS = ${CROSID_LIBS} ${CRYPTO_LIBS} ${LIBZIP_LIBS} ${LIBARCHIVE_LIBS} \
1149*8617a60dSAndroid Build Coastguard Worker	${FLASHROM_LIBS}
1150*8617a60dSAndroid Build Coastguard Worker
1151*8617a60dSAndroid Build Coastguard Worker${FUTIL_BIN}: LDLIBS += ${FUTIL_LIBS}
1152*8617a60dSAndroid Build Coastguard Worker${FUTIL_BIN}: ${FUTIL_OBJS} ${UTILLIB} ${FWLIB}
1153*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    LD            $(subst ${BUILD}/,,$@)\n"
1154*8617a60dSAndroid Build Coastguard Worker	${Q}${LD} -o $@ ${LDFLAGS} $^ ${LDLIBS}
1155*8617a60dSAndroid Build Coastguard Worker
1156*8617a60dSAndroid Build Coastguard Worker.PHONY: futil_install
1157*8617a60dSAndroid Build Coastguard Workerfutil_install: ${FUTIL_BIN}
1158*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    INSTALL       futility\n"
1159*8617a60dSAndroid Build Coastguard Worker	${Q}mkdir -p ${UB_DIR}
1160*8617a60dSAndroid Build Coastguard Worker	${Q}${INSTALL} -t ${UB_DIR} ${FUTIL_BIN}
1161*8617a60dSAndroid Build Coastguard Worker	${Q}for prog in ${FUTIL_SYMLINKS}; do \
1162*8617a60dSAndroid Build Coastguard Worker		ln -sf futility "${UB_DIR}/$$prog"; done
1163*8617a60dSAndroid Build Coastguard Worker
1164*8617a60dSAndroid Build Coastguard Worker# ----------------------------------------------------------------------------
1165*8617a60dSAndroid Build Coastguard Worker# Utility to generate TLCL structure definition header file.
1166*8617a60dSAndroid Build Coastguard Worker
1167*8617a60dSAndroid Build Coastguard Worker${BUILD}/utility/tlcl_generator: CFLAGS += -fpack-struct
1168*8617a60dSAndroid Build Coastguard Worker
1169*8617a60dSAndroid Build Coastguard WorkerSTRUCTURES_TMP=${BUILD}/tlcl_structures.tmp
1170*8617a60dSAndroid Build Coastguard WorkerSTRUCTURES_SRC=firmware/lib/tpm_lite/include/tlcl_structures.h
1171*8617a60dSAndroid Build Coastguard Worker
1172*8617a60dSAndroid Build Coastguard Worker.PHONY: update_tlcl_structures
1173*8617a60dSAndroid Build Coastguard Workerupdate_tlcl_structures: ${BUILD}/utility/tlcl_generator
1174*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    Rebuilding TLCL structures\n"
1175*8617a60dSAndroid Build Coastguard Worker	${Q}${BUILD}/utility/tlcl_generator > ${STRUCTURES_TMP}
1176*8617a60dSAndroid Build Coastguard Worker	${Q}cmp -s ${STRUCTURES_TMP} ${STRUCTURES_SRC} || \
1177*8617a60dSAndroid Build Coastguard Worker		( echo "%% Updating structures.h %%" && \
1178*8617a60dSAndroid Build Coastguard Worker		  cp ${STRUCTURES_TMP} ${STRUCTURES_SRC} )
1179*8617a60dSAndroid Build Coastguard Worker
1180*8617a60dSAndroid Build Coastguard Worker# ----------------------------------------------------------------------------
1181*8617a60dSAndroid Build Coastguard Worker# Tests
1182*8617a60dSAndroid Build Coastguard Worker
1183*8617a60dSAndroid Build Coastguard Worker.PHONY: tests
1184*8617a60dSAndroid Build Coastguard Workertests: ${TEST_BINS}
1185*8617a60dSAndroid Build Coastguard Worker
1186*8617a60dSAndroid Build Coastguard Worker${TEST_BINS}: ${UTILLIB} ${TESTLIB}
1187*8617a60dSAndroid Build Coastguard Worker${TEST_BINS}: INCLUDES += -Itests
1188*8617a60dSAndroid Build Coastguard Worker${TEST_BINS}: LIBS = ${TESTLIB} ${UTILLIB}
1189*8617a60dSAndroid Build Coastguard Worker
1190*8617a60dSAndroid Build Coastguard Worker# Futility tests need almost everything that futility needs.
1191*8617a60dSAndroid Build Coastguard Worker${TEST_FUTIL_BINS}: ${FUTIL_OBJS} ${UTILLIB}
1192*8617a60dSAndroid Build Coastguard Worker${TEST_FUTIL_BINS}: INCLUDES += -Ifutility
1193*8617a60dSAndroid Build Coastguard Worker${TEST_FUTIL_BINS}: OBJS += ${FUTIL_OBJS} ${UTILLIB}
1194*8617a60dSAndroid Build Coastguard Worker${TEST_FUTIL_BINS}: LDLIBS += ${FUTIL_LIBS}
1195*8617a60dSAndroid Build Coastguard Worker
1196*8617a60dSAndroid Build Coastguard Worker${TEST2X_BINS}: ${FWLIB}
1197*8617a60dSAndroid Build Coastguard Worker${TEST2X_BINS}: LIBS += ${FWLIB}
1198*8617a60dSAndroid Build Coastguard Worker
1199*8617a60dSAndroid Build Coastguard Worker${TEST20_BINS}: ${FWLIB}
1200*8617a60dSAndroid Build Coastguard Worker${TEST20_BINS}: LIBS += ${FWLIB}
1201*8617a60dSAndroid Build Coastguard Worker${TEST20_BINS}: LDLIBS += ${CRYPTO_LIBS}
1202*8617a60dSAndroid Build Coastguard Worker
1203*8617a60dSAndroid Build Coastguard Worker${TESTLIB}: ${TESTLIB_OBJS}
1204*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    RM            $(subst ${BUILD}/,,$@)\n"
1205*8617a60dSAndroid Build Coastguard Worker	${Q}rm -f $@
1206*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    AR            $(subst ${BUILD}/,,$@)\n"
1207*8617a60dSAndroid Build Coastguard Worker	${Q}ar qcT $@ $^
1208*8617a60dSAndroid Build Coastguard Worker
1209*8617a60dSAndroid Build Coastguard WorkerDUT_TEST_BINS = $(addprefix ${BUILD}/,${DUT_TEST_NAMES})
1210*8617a60dSAndroid Build Coastguard Worker
1211*8617a60dSAndroid Build Coastguard Worker# Special build for sha256_x86 test
1212*8617a60dSAndroid Build Coastguard Worker${BUILD}/tests/vb2_sha256_x86_tests: \
1213*8617a60dSAndroid Build Coastguard Worker	${BUILD}/firmware/2lib/2sha256_x86.o ${BUILD}/firmware/2lib/2hwcrypto.o
1214*8617a60dSAndroid Build Coastguard Worker${BUILD}/tests/vb2_sha256_x86_tests: \
1215*8617a60dSAndroid Build Coastguard Worker	LIBS += ${BUILD}/firmware/2lib/2sha256_x86.o ${BUILD}/firmware/2lib/2hwcrypto.o
1216*8617a60dSAndroid Build Coastguard Worker
1217*8617a60dSAndroid Build Coastguard Workerifeq (${ENABLE_HWCRYPTO_RSA_TESTS},1)
1218*8617a60dSAndroid Build Coastguard Workerdefine enable_hwcrypto_rsa_tests
1219*8617a60dSAndroid Build Coastguard Worker${BUILD}/$(1): CFLAGS += -DENABLE_HWCRYPTO_RSA_TESTS
1220*8617a60dSAndroid Build Coastguard Workerifeq (${ARCH},arm64)
1221*8617a60dSAndroid Build Coastguard Worker${BUILD}/$(1): CFLAGS += -DARM64_RSA_ACCELERATION
1222*8617a60dSAndroid Build Coastguard Worker${BUILD}/$(1): ${BUILD}/firmware/2lib/2modpow_neon.o
1223*8617a60dSAndroid Build Coastguard Worker${BUILD}/$(1): LIBS += ${BUILD}/firmware/2lib/2modpow_neon.o
1224*8617a60dSAndroid Build Coastguard Workerelse
1225*8617a60dSAndroid Build Coastguard Worker${BUILD}/$(1): CFLAGS += -DVB2_X86_RSA_ACCELERATION
1226*8617a60dSAndroid Build Coastguard Worker${BUILD}/$(1): ${BUILD}/firmware/2lib/2modpow_sse2.o
1227*8617a60dSAndroid Build Coastguard Worker${BUILD}/$(1): LIBS += ${BUILD}/firmware/2lib/2modpow_sse2.o
1228*8617a60dSAndroid Build Coastguard Workerendif
1229*8617a60dSAndroid Build Coastguard Workerendef
1230*8617a60dSAndroid Build Coastguard Worker
1231*8617a60dSAndroid Build Coastguard Worker$(foreach test, ${HWCRYPTO_RSA_TESTS}, \
1232*8617a60dSAndroid Build Coastguard Worker	$(eval $(call enable_hwcrypto_rsa_tests,${test})))
1233*8617a60dSAndroid Build Coastguard Workerendif
1234*8617a60dSAndroid Build Coastguard Worker
1235*8617a60dSAndroid Build Coastguard Worker.PHONY: install_dut_test
1236*8617a60dSAndroid Build Coastguard Workerinstall_dut_test: ${DUT_TEST_BINS}
1237*8617a60dSAndroid Build Coastguard Workerifneq ($(strip ${DUT_TEST_BINS}),)
1238*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    INSTALL       DUT TESTS\n"
1239*8617a60dSAndroid Build Coastguard Worker	${Q}mkdir -p ${DUT_TEST_DIR}
1240*8617a60dSAndroid Build Coastguard Worker	${Q}${INSTALL} -t ${DUT_TEST_DIR} $^
1241*8617a60dSAndroid Build Coastguard Workerendif
1242*8617a60dSAndroid Build Coastguard Worker
1243*8617a60dSAndroid Build Coastguard Worker# ----------------------------------------------------------------------------
1244*8617a60dSAndroid Build Coastguard Worker# Fuzzers
1245*8617a60dSAndroid Build Coastguard Worker
1246*8617a60dSAndroid Build Coastguard Worker.PHONY: fuzzers
1247*8617a60dSAndroid Build Coastguard Workerfuzzers: ${FUZZ_TEST_BINS}
1248*8617a60dSAndroid Build Coastguard Worker
1249*8617a60dSAndroid Build Coastguard Worker${FUZZ_TEST_BINS}: ${FWLIB}
1250*8617a60dSAndroid Build Coastguard Worker${FUZZ_TEST_BINS}: LIBS = ${FWLIB}
1251*8617a60dSAndroid Build Coastguard Worker${FUZZ_TEST_BINS}: LDFLAGS += -fsanitize=fuzzer
1252*8617a60dSAndroid Build Coastguard Worker
1253*8617a60dSAndroid Build Coastguard Worker# ----------------------------------------------------------------------------
1254*8617a60dSAndroid Build Coastguard Worker# Generic build rules. LIBS and OBJS can be overridden to tweak the generic
1255*8617a60dSAndroid Build Coastguard Worker# rules for specific targets.
1256*8617a60dSAndroid Build Coastguard Worker
1257*8617a60dSAndroid Build Coastguard Worker${BUILD}/%: ${BUILD}/%.o ${OBJS} ${LIBS}
1258*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    LD            $(subst ${BUILD}/,,$@)\n"
1259*8617a60dSAndroid Build Coastguard Worker	${Q}${LD} -o $@ ${LDFLAGS} $< ${OBJS} ${LIBS} ${LDLIBS}
1260*8617a60dSAndroid Build Coastguard Worker
1261*8617a60dSAndroid Build Coastguard Worker${BUILD}/%.o: %.c
1262*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    CC            $(subst ${BUILD}/,,$@)\n"
1263*8617a60dSAndroid Build Coastguard Worker	${Q}${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $<
1264*8617a60dSAndroid Build Coastguard Worker
1265*8617a60dSAndroid Build Coastguard Worker${BUILD}/%.o: ${BUILD}/%.c
1266*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    CC            $(subst ${BUILD}/,,$@)\n"
1267*8617a60dSAndroid Build Coastguard Worker	${Q}${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $<
1268*8617a60dSAndroid Build Coastguard Worker
1269*8617a60dSAndroid Build Coastguard Worker${BUILD}/%.o: %.S
1270*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    CC            $(subst ${BUILD}/,,$@)\n"
1271*8617a60dSAndroid Build Coastguard Worker	${Q}${CC} ${CFLAGS} ${INCLUDES} -c -o $@ $<
1272*8617a60dSAndroid Build Coastguard Worker
1273*8617a60dSAndroid Build Coastguard Worker# ----------------------------------------------------------------------------
1274*8617a60dSAndroid Build Coastguard Worker# Here are the special tweaks to the generic rules.
1275*8617a60dSAndroid Build Coastguard Worker
1276*8617a60dSAndroid Build Coastguard Worker# Always create the defaults file, since it depends on input variables
1277*8617a60dSAndroid Build Coastguard Worker.PHONY: ${UTIL_DEFAULTS}
1278*8617a60dSAndroid Build Coastguard Worker${UTIL_DEFAULTS}:
1279*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    CREATE        $(subst ${BUILD}/,,$@)\n"
1280*8617a60dSAndroid Build Coastguard Worker	${Q}rm -f $@
1281*8617a60dSAndroid Build Coastguard Worker	${Q}mkdir -p $(dir $@)
1282*8617a60dSAndroid Build Coastguard Worker	${Q}echo '# Generated file. Do not edit.' > $@.tmp
1283*8617a60dSAndroid Build Coastguard Worker	${Q}echo "DEV_DEBUG_FORCE=${DEV_DEBUG_FORCE}" >> $@.tmp
1284*8617a60dSAndroid Build Coastguard Worker	${Q}mv -f $@.tmp $@
1285*8617a60dSAndroid Build Coastguard Worker
1286*8617a60dSAndroid Build Coastguard Worker# Some utilities need external crypto functions
1287*8617a60dSAndroid Build Coastguard WorkerCRYPTO_LIBS := $(shell ${PKG_CONFIG} --libs libcrypto)
1288*8617a60dSAndroid Build Coastguard Workerifeq ($(shell uname -s), FreeBSD)
1289*8617a60dSAndroid Build Coastguard WorkerCRYPTO_LIBS += -lcrypto
1290*8617a60dSAndroid Build Coastguard Workerendif
1291*8617a60dSAndroid Build Coastguard Workerifeq ($(shell uname -s), OpenBSD)
1292*8617a60dSAndroid Build Coastguard WorkerLDFLAGS += -Wl,-z,notext
1293*8617a60dSAndroid Build Coastguard Workerendif
1294*8617a60dSAndroid Build Coastguard Worker
1295*8617a60dSAndroid Build Coastguard Worker${BUILD}/utility/dumpRSAPublicKey: LDLIBS += ${CRYPTO_LIBS}
1296*8617a60dSAndroid Build Coastguard Worker${BUILD}/utility/pad_digest_utility: LDLIBS += ${CRYPTO_LIBS}
1297*8617a60dSAndroid Build Coastguard Worker${BUILD}/utility/signature_digest_utility: LDLIBS += ${CRYPTO_LIBS}
1298*8617a60dSAndroid Build Coastguard Worker${BUILD}/utility/verify_data: LDLIBS += ${CRYPTO_LIBS}
1299*8617a60dSAndroid Build Coastguard Worker
1300*8617a60dSAndroid Build Coastguard Worker${BUILD}/tests/vb2_host_key_tests: LDLIBS += ${CRYPTO_LIBS}
1301*8617a60dSAndroid Build Coastguard Worker${BUILD}/tests/vb2_common2_tests: LDLIBS += ${CRYPTO_LIBS}
1302*8617a60dSAndroid Build Coastguard Worker${BUILD}/tests/vb2_common3_tests: LDLIBS += ${CRYPTO_LIBS}
1303*8617a60dSAndroid Build Coastguard Worker${BUILD}/tests/verify_kernel: LDLIBS += ${CRYPTO_LIBS}
1304*8617a60dSAndroid Build Coastguard Worker${BUILD}/tests/hmac_test: LDLIBS += ${CRYPTO_LIBS}
1305*8617a60dSAndroid Build Coastguard Worker
1306*8617a60dSAndroid Build Coastguard Worker${TEST21_BINS}: LDLIBS += ${CRYPTO_LIBS}
1307*8617a60dSAndroid Build Coastguard Worker
1308*8617a60dSAndroid Build Coastguard Worker${BUILD}/tests/%: LDLIBS += -lrt -luuid
1309*8617a60dSAndroid Build Coastguard Worker${BUILD}/tests/%: LIBS += ${TESTLIB}
1310*8617a60dSAndroid Build Coastguard Worker
1311*8617a60dSAndroid Build Coastguard Workerifeq ($(filter-out 0,${TPM2_MODE}),)
1312*8617a60dSAndroid Build Coastguard Worker# TODO(apronin): tests for TPM2 case?
1313*8617a60dSAndroid Build Coastguard WorkerTLCL_TEST_BINS = $(addprefix ${BUILD}/,${TLCL_TEST_NAMES})
1314*8617a60dSAndroid Build Coastguard Worker${TLCL_TEST_BINS}: OBJS += ${BUILD}/tests/tpm_lite/tlcl_tests.o
1315*8617a60dSAndroid Build Coastguard Worker${TLCL_TEST_BINS}: ${BUILD}/tests/tpm_lite/tlcl_tests.o
1316*8617a60dSAndroid Build Coastguard WorkerTEST_OBJS += ${BUILD}/tests/tpm_lite/tlcl_tests.o
1317*8617a60dSAndroid Build Coastguard Workerendif
1318*8617a60dSAndroid Build Coastguard Worker
1319*8617a60dSAndroid Build Coastguard Worker# ----------------------------------------------------------------------------
1320*8617a60dSAndroid Build Coastguard Worker# Here are the special rules that don't fit in the generic rules.
1321*8617a60dSAndroid Build Coastguard Worker
1322*8617a60dSAndroid Build Coastguard Worker# Generates the list of commands defined in futility by running grep in the
1323*8617a60dSAndroid Build Coastguard Worker# source files looking for the DECLARE_FUTIL_COMMAND() macro usage.
1324*8617a60dSAndroid Build Coastguard Worker${FUTIL_CMD_LIST}: ${FUTIL_SRCS}
1325*8617a60dSAndroid Build Coastguard Worker	@${PRINTF} "    GEN           $(subst ${BUILD}/,,$@)\n"
1326*8617a60dSAndroid Build Coastguard Worker	${Q}rm -f $@ $@_t $@_commands
1327*8617a60dSAndroid Build Coastguard Worker	${Q}mkdir -p ${BUILD}/gen
1328*8617a60dSAndroid Build Coastguard Worker	${Q}grep -hoRE '^DECLARE_FUTIL_COMMAND\([^,]+' $^ \
1329*8617a60dSAndroid Build Coastguard Worker		| sed 's/DECLARE_FUTIL_COMMAND(\(.*\)/_CMD(\1)/' \
1330*8617a60dSAndroid Build Coastguard Worker		| sort >>$@_commands
1331*8617a60dSAndroid Build Coastguard Worker	${Q}./scripts/getversion.sh >> $@_t
1332*8617a60dSAndroid Build Coastguard Worker	${Q}echo '#define _CMD(NAME) extern const struct' \
1333*8617a60dSAndroid Build Coastguard Worker		'futil_cmd_t __cmd_##NAME;' >> $@_t
1334*8617a60dSAndroid Build Coastguard Worker	${Q}cat $@_commands >> $@_t
1335*8617a60dSAndroid Build Coastguard Worker	${Q}echo '#undef _CMD' >> $@_t
1336*8617a60dSAndroid Build Coastguard Worker	${Q}echo '#define _CMD(NAME) &__cmd_##NAME,' >> $@_t
1337*8617a60dSAndroid Build Coastguard Worker	${Q}echo 'const struct futil_cmd_t *const futil_cmds[] = {' >> $@_t
1338*8617a60dSAndroid Build Coastguard Worker	${Q}cat $@_commands >> $@_t
1339*8617a60dSAndroid Build Coastguard Worker	${Q}echo '0};  /* null-terminated */' >> $@_t
1340*8617a60dSAndroid Build Coastguard Worker	${Q}echo '#undef _CMD' >> $@_t
1341*8617a60dSAndroid Build Coastguard Worker	${Q}mv $@_t $@
1342*8617a60dSAndroid Build Coastguard Worker	${Q}rm -f $@_commands
1343*8617a60dSAndroid Build Coastguard Worker
1344*8617a60dSAndroid Build Coastguard Worker##############################################################################
1345*8617a60dSAndroid Build Coastguard Worker# Targets that exist just to run tests
1346*8617a60dSAndroid Build Coastguard Worker
1347*8617a60dSAndroid Build Coastguard Worker.PHONY: test_setup
1348*8617a60dSAndroid Build Coastguard Workertest_setup:: cgpt ${UTIL_FILES_SDK} ${UTIL_FILES_BOARD} futil tests
1349*8617a60dSAndroid Build Coastguard Worker
1350*8617a60dSAndroid Build Coastguard Worker# Generate test keys
1351*8617a60dSAndroid Build Coastguard Worker.PHONY: genkeys
1352*8617a60dSAndroid Build Coastguard Workergenkeys: install_for_test
1353*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${SRC_RUN}/tests/gen_test_keys.sh
1354*8617a60dSAndroid Build Coastguard Worker
1355*8617a60dSAndroid Build Coastguard Worker# Generate test cases
1356*8617a60dSAndroid Build Coastguard Worker.PHONY: gentestcases
1357*8617a60dSAndroid Build Coastguard Workergentestcases: install_for_test
1358*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${SRC_RUN}/tests/gen_test_cases.sh
1359*8617a60dSAndroid Build Coastguard Worker
1360*8617a60dSAndroid Build Coastguard Worker# Generate test cases for fuzzing
1361*8617a60dSAndroid Build Coastguard Worker.PHONY: genfuzztestcases
1362*8617a60dSAndroid Build Coastguard Workergenfuzztestcases: install_for_test
1363*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${SRC_RUN}/tests/gen_fuzz_test_cases.sh
1364*8617a60dSAndroid Build Coastguard Worker
1365*8617a60dSAndroid Build Coastguard Worker.PHONY: runcgpttests
1366*8617a60dSAndroid Build Coastguard Workerruncgpttests: install_for_test
1367*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/cgptlib_test
1368*8617a60dSAndroid Build Coastguard Worker
1369*8617a60dSAndroid Build Coastguard Worker.PHONY: runtestscripts
1370*8617a60dSAndroid Build Coastguard Workerruntestscripts: install_for_test ${HOSTLIB_DEF} ${HOSTLIB_UNDEF}
1371*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${SRC_RUN}/scripts/image_signing/sign_android_unittests.sh
1372*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${SRC_RUN}/scripts/image_signing/sign_uefi_unittest.py
1373*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} $(SRC_RUN)/scripts/image_signing/lib/generate_android_cloud_config_unittest.py
1374*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${SRC_RUN}/tests/load_kernel_tests.sh
1375*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${SRC_RUN}/tests/run_cgpt_tests.sh ${BUILD_RUN}/cgpt/cgpt
1376*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${SRC_RUN}/tests/run_cgpt_tests.sh ${BUILD_RUN}/cgpt/cgpt -D 358400
1377*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${SRC_RUN}/tests/run_preamble_tests.sh
1378*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${SRC_RUN}/tests/run_vbutil_kernel_arg_tests.sh
1379*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${SRC_RUN}/tests/run_vbutil_tests.sh
1380*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${SRC_RUN}/tests/swap_ec_rw_tests.sh
1381*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${SRC_RUN}/tests/vb2_rsa_tests.sh
1382*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${SRC_RUN}/tests/vb2_firmware_tests.sh
1383*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${SRC_RUN}/tests/vhost_reference.sh ${HOSTLIB_DEF} ${HOSTLIB_UNDEF}
1384*8617a60dSAndroid Build Coastguard Worker
1385*8617a60dSAndroid Build Coastguard Worker.PHONY: runmisctests
1386*8617a60dSAndroid Build Coastguard Workerrunmisctests: install_for_test
1387*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/cbfstool_tests
1388*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/gpt_misc_tests
1389*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/subprocess_tests
1390*8617a60dSAndroid Build Coastguard Workerifeq ($(filter-out 0,${MOCK_TPM})$(filter-out 0,${TPM2_MODE}),)
1391*8617a60dSAndroid Build Coastguard Worker# tlcl_tests only works when MOCK_TPM is disabled
1392*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/tlcl_tests
1393*8617a60dSAndroid Build Coastguard Workerendif
1394*8617a60dSAndroid Build Coastguard Worker
1395*8617a60dSAndroid Build Coastguard Worker.PHONY: run2tests
1396*8617a60dSAndroid Build Coastguard Workerrun2tests: install_for_test
1397*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb2_api_tests
1398*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb2_auxfw_sync_tests
1399*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb2_common_tests
1400*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb2_common2_tests ${TEST_KEYS}
1401*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb2_common3_tests ${TEST_KEYS}
1402*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb2_crypto_tests
1403*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb2_ec_sync_tests
1404*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb2_firmware_tests
1405*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb2_gbb_init_tests
1406*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb2_gbb_tests
1407*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb2_host_key_tests
1408*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb2_inject_kernel_subkey_tests
1409*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb2_load_kernel_tests
1410*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb2_load_kernel2_tests
1411*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb2_kernel_tests
1412*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb2_misc_tests
1413*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb2_misc2_tests
1414*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb2_nvstorage_tests
1415*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb2_rsa_utility_tests
1416*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb2_secdata_firmware_tests
1417*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb2_secdata_fwmp_tests
1418*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb2_secdata_kernel_tests
1419*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb2_sha_api_tests
1420*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb2_sha_tests
1421*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb20_api_kernel_tests
1422*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb20_kernel_tests
1423*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb21_host_common_tests
1424*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb21_host_common2_tests ${TEST_KEYS}
1425*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb21_host_key_tests ${TEST_KEYS} ${BUILD_RUN}
1426*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb21_host_misc_tests ${BUILD_RUN}
1427*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb21_host_sig_tests ${TEST_KEYS}
1428*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/hmac_test
1429*8617a60dSAndroid Build Coastguard Worker
1430*8617a60dSAndroid Build Coastguard Worker.PHONY: runfutiltests
1431*8617a60dSAndroid Build Coastguard Workerrunfutiltests: install_for_test
1432*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${SRC_RUN}/tests/futility/run_test_scripts.sh
1433*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/futility/test_file_types
1434*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/futility/test_not_really
1435*8617a60dSAndroid Build Coastguard Worker
1436*8617a60dSAndroid Build Coastguard Worker# Test all permutations of encryption keys, instead of just the ones we use.
1437*8617a60dSAndroid Build Coastguard Worker# Not run by automated build.
1438*8617a60dSAndroid Build Coastguard Worker.PHONY: runlongtests
1439*8617a60dSAndroid Build Coastguard Workerrunlongtests: install_for_test genkeys genfuzztestcases
1440*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb2_common2_tests ${TEST_KEYS} --all
1441*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb2_common3_tests ${TEST_KEYS} --all
1442*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${BUILD_RUN}/tests/vb21_host_common2_tests ${TEST_KEYS} --all
1443*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${SRC_RUN}/tests/run_preamble_tests.sh --all
1444*8617a60dSAndroid Build Coastguard Worker	${RUNTEST} ${SRC_RUN}/tests/run_vbutil_tests.sh --all
1445*8617a60dSAndroid Build Coastguard Worker
1446*8617a60dSAndroid Build Coastguard Worker.PHONY: rununittests
1447*8617a60dSAndroid Build Coastguard Workerrununittests: runcgpttests runmisctests run2tests
1448*8617a60dSAndroid Build Coastguard Worker
1449*8617a60dSAndroid Build Coastguard Worker# Print a big green success message at the end of all tests. If you don't see
1450*8617a60dSAndroid Build Coastguard Worker# that, you know there was an error somewhere further up.
1451*8617a60dSAndroid Build Coastguard Worker.PHONY: runtests
1452*8617a60dSAndroid Build Coastguard Workerruntests: rununittests runtestscripts runfutiltests
1453*8617a60dSAndroid Build Coastguard Worker	${Q}echo -e "\nruntests: \E[32;1mALL TESTS PASSED SUCCESSFULLY!\E[0;m\n"
1454*8617a60dSAndroid Build Coastguard Worker
1455*8617a60dSAndroid Build Coastguard Worker# Code coverage
1456*8617a60dSAndroid Build Coastguard Worker.PHONY: coverage
1457*8617a60dSAndroid Build Coastguard Workerifeq ($(filter-out 0,${COV}),)
1458*8617a60dSAndroid Build Coastguard Workercoverage:
1459*8617a60dSAndroid Build Coastguard Worker	$(error Build coverage like this: make clean && COV=1 make coverage)
1460*8617a60dSAndroid Build Coastguard Workerelse
1461*8617a60dSAndroid Build Coastguard Worker.PHONY: coverage_init
1462*8617a60dSAndroid Build Coastguard Workercoverage_init: install_for_test
1463*8617a60dSAndroid Build Coastguard Worker	rm -f ${COV_INFO}*
1464*8617a60dSAndroid Build Coastguard Worker	lcov -c -i -d . -b . -o ${COV_INFO}.initial
1465*8617a60dSAndroid Build Coastguard Worker
1466*8617a60dSAndroid Build Coastguard Worker.PHONY: coverage_html
1467*8617a60dSAndroid Build Coastguard Workercoverage_html: coverage_init runtests
1468*8617a60dSAndroid Build Coastguard Worker	lcov -c -d . -b . -o ${COV_INFO}.tests
1469*8617a60dSAndroid Build Coastguard Worker	lcov -a ${COV_INFO}.initial -a ${COV_INFO}.tests -o ${COV_INFO}.total
1470*8617a60dSAndroid Build Coastguard Worker	lcov -r ${COV_INFO}.total '/usr/*' -o ${COV_INFO}.local
1471*8617a60dSAndroid Build Coastguard Worker	genhtml ${COV_INFO}.local -o ${BUILD}/coverage
1472*8617a60dSAndroid Build Coastguard Worker# Generate addtional coverage stats just for firmware subdir, because the stats
1473*8617a60dSAndroid Build Coastguard Worker# for the whole project don't include subdirectory summaries. This will print
1474*8617a60dSAndroid Build Coastguard Worker# the summary for just the firmware sources.
1475*8617a60dSAndroid Build Coastguard Worker	lcov -r ${COV_INFO}.local '*/stub/*' -o ${COV_INFO}.nostub
1476*8617a60dSAndroid Build Coastguard Worker	lcov -e ${COV_INFO}.nostub '${SRCDIR}/firmware/*' \
1477*8617a60dSAndroid Build Coastguard Worker		-o ${COV_INFO}.firmware
1478*8617a60dSAndroid Build Coastguard Worker
1479*8617a60dSAndroid Build Coastguard Workercoverage: coverage_init runtests coverage_html
1480*8617a60dSAndroid Build Coastguard Workerendif
1481*8617a60dSAndroid Build Coastguard Worker
1482*8617a60dSAndroid Build Coastguard Worker# Include generated dependencies
1483*8617a60dSAndroid Build Coastguard WorkerALL_DEPS += ${ALL_OBJS:%.o=%.o.d}
1484*8617a60dSAndroid Build Coastguard WorkerTEST_DEPS += ${TEST_OBJS:%.o=%.o.d}
1485*8617a60dSAndroid Build Coastguard Worker-include ${ALL_DEPS}
1486*8617a60dSAndroid Build Coastguard Worker-include ${TEST_DEPS}
1487*8617a60dSAndroid Build Coastguard Worker
1488*8617a60dSAndroid Build Coastguard Worker# We want to use only relative paths in cscope.files, especially since the
1489*8617a60dSAndroid Build Coastguard Worker# paths inside and outside the chroot are different.
1490*8617a60dSAndroid Build Coastguard WorkerSRCDIRPAT=$(subst /,\/,${SRCDIR}/)
1491*8617a60dSAndroid Build Coastguard Worker
1492*8617a60dSAndroid Build Coastguard Worker# Note: vboot 2.0 is deprecated, so don't index those files
1493*8617a60dSAndroid Build Coastguard Worker${BUILD}/cscope.files: all install_for_test
1494*8617a60dSAndroid Build Coastguard Worker	${Q}rm -f $@
1495*8617a60dSAndroid Build Coastguard Worker	${Q}cat ${ALL_DEPS} | tr -d ':\\' | tr ' ' '\012' | \
1496*8617a60dSAndroid Build Coastguard Worker		grep -v /lib20/ | \
1497*8617a60dSAndroid Build Coastguard Worker		sed -e "s/${SRCDIRPAT}//" | \
1498*8617a60dSAndroid Build Coastguard Worker		egrep '\.[chS]$$' | sort | uniq > $@
1499*8617a60dSAndroid Build Coastguard Worker
1500*8617a60dSAndroid Build Coastguard Workercmd_etags = etags -o ${BUILD}/TAGS $(shell cat ${BUILD}/cscope.files)
1501*8617a60dSAndroid Build Coastguard Workercmd_ctags = ctags -o ${BUILD}/tags $(shell cat ${BUILD}/cscope.files)
1502*8617a60dSAndroid Build Coastguard Workerrun_if_prog = $(if $(shell which $(1) 2>/dev/null),$(2),)
1503*8617a60dSAndroid Build Coastguard Worker
1504*8617a60dSAndroid Build Coastguard Worker.PHONY: tags TAGS xrefs
1505*8617a60dSAndroid Build Coastguard Workertags TAGS xrefs: ${BUILD}/cscope.files
1506*8617a60dSAndroid Build Coastguard Worker	${Q}\rm -f ${BUILD}/tags ${BUILD}/TAGS
1507*8617a60dSAndroid Build Coastguard Worker	${Q}$(call run_if_prog,etags,${cmd_etags})
1508*8617a60dSAndroid Build Coastguard Worker	${Q}$(call run_if_prog,ctags,${cmd_ctags})
1509*8617a60dSAndroid Build Coastguard Worker
1510*8617a60dSAndroid Build Coastguard WorkerPC_FILES = ${PC_IN_FILES:%.pc.in=${BUILD}/%.pc}
1511*8617a60dSAndroid Build Coastguard Worker${PC_FILES}: ${PC_IN_FILES}
1512*8617a60dSAndroid Build Coastguard Worker	${Q}sed \
1513*8617a60dSAndroid Build Coastguard Worker		-e 's:@LDLIBS@:${LDLIBS}:' \
1514*8617a60dSAndroid Build Coastguard Worker		-e 's:@LIBDIR@:${LIBDIR}:' \
1515*8617a60dSAndroid Build Coastguard Worker		$< > $@
1516*8617a60dSAndroid Build Coastguard Worker
1517*8617a60dSAndroid Build Coastguard Worker.PHONY: pc_files_install
1518*8617a60dSAndroid Build Coastguard Workerpc_files_install: ${PC_FILES}
1519*8617a60dSAndroid Build Coastguard Worker	${Q}mkdir -p ${ULP_DIR}
1520*8617a60dSAndroid Build Coastguard Worker	${Q}${INSTALL} -D -m 0644 $< ${ULP_DIR}/$(notdir $<)
1521