Makefile revision 250549d3e742cddaf72b4f53d5739e54faf5db96
10fc95946347a3318b41372aa8e2a4509a384e92bDon Garrett# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
2322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah# Use of this source code is governed by a BSD-style license that can be
3322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah# found in the LICENSE file.
4322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
50a0e8d0bb26c951a895c5034a4c1c12f3d4e8707Che-Liang Chiouexport FIRMWARE_ARCH
68511f7891b5eca7ae93a147964201a4b57210ff6Che-Liang Chiouexport MOCK_TPM
70a0e8d0bb26c951a895c5034a4c1c12f3d4e8707Che-Liang Chiou
86d696e532c6a0c93ad9b915c59dad4144e6f1b33Simon Glass# This Makefile normally builds in a 'build' subdir, but use
96d696e532c6a0c93ad9b915c59dad4144e6f1b33Simon Glass#
106d696e532c6a0c93ad9b915c59dad4144e6f1b33Simon Glass#    make BUILD=<dir>
116d696e532c6a0c93ad9b915c59dad4144e6f1b33Simon Glass#
126d696e532c6a0c93ad9b915c59dad4144e6f1b33Simon Glass# to put the output somewhere else
136d696e532c6a0c93ad9b915c59dad4144e6f1b33Simon Glass
14b265c34321c01bd279f3a1df0a2fea3601f732eeSimon Glass#
15b265c34321c01bd279f3a1df0a2fea3601f732eeSimon Glass# Provide default CC and CFLAGS for firmware builds; if you have any -D flags,
16b265c34321c01bd279f3a1df0a2fea3601f732eeSimon Glass# please add them after this point (e.g., -DVBOOT_DEBUG).
1774359b755c4a203df0fe3bf51fc53d5de87d1fbfChe-Liang Chiou#
186b0003c6381a7e69818b0b34b358c2cfb1393043Che-Liang Chiou# TODO(crosbug.com/16808) We hard-code u-boot's compiler flags here just
196b0003c6381a7e69818b0b34b358c2cfb1393043Che-Liang Chiou# temporarily. As we are still investigating which flags are necessary for
206b0003c6381a7e69818b0b34b358c2cfb1393043Che-Liang Chiou# maintaining a compatible ABI, etc. between u-boot and vboot_reference.
2174359b755c4a203df0fe3bf51fc53d5de87d1fbfChe-Liang Chiou#
22b265c34321c01bd279f3a1df0a2fea3601f732eeSimon Glass# As a first step, this makes the setting of CC and CFLAGS here optional, to
23b265c34321c01bd279f3a1df0a2fea3601f732eeSimon Glass# permit a calling script or Makefile to set these.
2474359b755c4a203df0fe3bf51fc53d5de87d1fbfChe-Liang Chiou#
25b265c34321c01bd279f3a1df0a2fea3601f732eeSimon Glass# Flag ordering: arch, then -f, then -m, then -W
26b265c34321c01bd279f3a1df0a2fea3601f732eeSimon GlassDEBUG_FLAGS := $(if ${DEBUG},-g -O0,-Os)
27b265c34321c01bd279f3a1df0a2fea3601f732eeSimon GlassCOMMON_FLAGS := -nostdinc -pipe \
28b265c34321c01bd279f3a1df0a2fea3601f732eeSimon Glass	-ffreestanding -fno-builtin -fno-stack-protector \
29b265c34321c01bd279f3a1df0a2fea3601f732eeSimon Glass	-Werror -Wall -Wstrict-prototypes $(DEBUG_FLAGS)
30b265c34321c01bd279f3a1df0a2fea3601f732eeSimon Glass
317604a7dba239c1f4f1ce2561d3c5aa968dc53d8dChe-Liang Chiouifeq ($(FIRMWARE_ARCH), arm)
32b265c34321c01bd279f3a1df0a2fea3601f732eeSimon GlassCC ?= armv7a-cros-linux-gnueabi-gcc
33b265c34321c01bd279f3a1df0a2fea3601f732eeSimon GlassCFLAGS ?= -march=armv5 \
34b265c34321c01bd279f3a1df0a2fea3601f732eeSimon Glass	-fno-common -ffixed-r8 \
35b265c34321c01bd279f3a1df0a2fea3601f732eeSimon Glass	-msoft-float -marm -mabi=aapcs-linux -mno-thumb-interwork \
36b265c34321c01bd279f3a1df0a2fea3601f732eeSimon Glass	$(COMMON_FLAGS)
3774359b755c4a203df0fe3bf51fc53d5de87d1fbfChe-Liang Chiouendif
387604a7dba239c1f4f1ce2561d3c5aa968dc53d8dChe-Liang Chiouifeq ($(FIRMWARE_ARCH), i386)
39b265c34321c01bd279f3a1df0a2fea3601f732eeSimon GlassCC ?= i686-pc-linux-gnu-gcc
40b265c34321c01bd279f3a1df0a2fea3601f732eeSimon Glass# Drop -march=i386 to permit use of SSE instructions
41b265c34321c01bd279f3a1df0a2fea3601f732eeSimon GlassCFLAGS ?= \
42b265c34321c01bd279f3a1df0a2fea3601f732eeSimon Glass	-ffunction-sections -fvisibility=hidden -fno-strict-aliasing \
43b265c34321c01bd279f3a1df0a2fea3601f732eeSimon Glass	-fomit-frame-pointer -fno-toplevel-reorder -fno-dwarf2-cfi-asm \
44b265c34321c01bd279f3a1df0a2fea3601f732eeSimon Glass	-mpreferred-stack-boundary=2 -mregparm=3 \
45b265c34321c01bd279f3a1df0a2fea3601f732eeSimon Glass	$(COMMON_FLAGS)
4634be8273e0fb80a6654deab650e581b0dc9046a4Che-Liang Chiouendif
478e85e987739281161ece1dbc9ff2b73f3e8e1e35Simon Glassifeq ($(FIRMWARE_ARCH), x86_64)
488e85e987739281161ece1dbc9ff2b73f3e8e1e35Simon GlassCFLAGS ?= $(COMMON_FLAGS) \
498e85e987739281161ece1dbc9ff2b73f3e8e1e35Simon Glass	-fvisibility=hidden -fno-strict-aliasing -fomit-frame-pointer
508e85e987739281161ece1dbc9ff2b73f3e8e1e35Simon Glassendif
5134be8273e0fb80a6654deab650e581b0dc9046a4Che-Liang Chiou
52b265c34321c01bd279f3a1df0a2fea3601f732eeSimon GlassCC ?= gcc
53b265c34321c01bd279f3a1df0a2fea3601f732eeSimon GlassCXX ?= g++
54b265c34321c01bd279f3a1df0a2fea3601f732eeSimon Glass
55287beaed7f8ceff679c57664d4da008c6234edfdRandall Spangler# Fix compiling directly on host (outside of emake)
56287beaed7f8ceff679c57664d4da008c6234edfdRandall Spanglerifeq ($(ARCH),)
57287beaed7f8ceff679c57664d4da008c6234edfdRandall Spanglerexport ARCH=amd64
58287beaed7f8ceff679c57664d4da008c6234edfdRandall Spanglerendif
59287beaed7f8ceff679c57664d4da008c6234edfdRandall Spangler
6034be8273e0fb80a6654deab650e581b0dc9046a4Che-Liang Chiouifeq ($(FIRMWARE_ARCH),)
6134be8273e0fb80a6654deab650e581b0dc9046a4Che-Liang ChiouCFLAGS += -DCHROMEOS_ENVIRONMENT
6234be8273e0fb80a6654deab650e581b0dc9046a4Che-Liang Chiouendif
6334be8273e0fb80a6654deab650e581b0dc9046a4Che-Liang Chiou
6434be8273e0fb80a6654deab650e581b0dc9046a4Che-Liang Chiouifneq (${DEBUG},)
6534be8273e0fb80a6654deab650e581b0dc9046a4Che-Liang ChiouCFLAGS += -DVBOOT_DEBUG
66b2b0fcc0f62fadce6f854bf14826a9778c0f7632vbendebendif
670a0e8d0bb26c951a895c5034a4c1c12f3d4e8707Che-Liang Chiou
68b2b0fcc0f62fadce6f854bf14826a9778c0f7632vbendebifeq (${DISABLE_NDEBUG},)
69b2b0fcc0f62fadce6f854bf14826a9778c0f7632vbendebCFLAGS += -DNDEBUG
70b2b0fcc0f62fadce6f854bf14826a9778c0f7632vbendebendif
71b2b0fcc0f62fadce6f854bf14826a9778c0f7632vbendeb
72b265c34321c01bd279f3a1df0a2fea3601f732eeSimon Glassexport CC CXX CFLAGS
73b265c34321c01bd279f3a1df0a2fea3601f732eeSimon Glass
747ca31f3e4d21bb7dfa39e1e4b9ab42c7047e66d8Gaurav Shahexport TOP = $(shell pwd)
75620c38cf34eadcd222535b01fb71c5e9fbc1cb80Randall Spanglerexport FWDIR=$(TOP)/firmware
76d183644564ec27c106a3eb1931f565fae167a058Randall Spanglerexport HOSTDIR=$(TOP)/host
770a0e8d0bb26c951a895c5034a4c1c12f3d4e8707Che-Liang Chiouifeq ($(FIRMWARE_ARCH),)
78d0dae7a4388139161c56e5b3c37a6e079f9558fdRandall Spanglerexport INCLUDES = -I$(FWDIR)/include -I$(FWDIR)/stub/include
790a0e8d0bb26c951a895c5034a4c1c12f3d4e8707Che-Liang Chiouelse
800a0e8d0bb26c951a895c5034a4c1c12f3d4e8707Che-Liang Chiouexport INCLUDES = -I$(FWDIR)/include -I$(FWDIR)/arch/$(FIRMWARE_ARCH)/include
810a0e8d0bb26c951a895c5034a4c1c12f3d4e8707Che-Liang Chiouendif
82322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
836d696e532c6a0c93ad9b915c59dad4144e6f1b33Simon Glassexport BUILD ?= ${TOP}/build
8470e9509a2748c0ee8646d77f2a0e6fcbb1446505vbendebexport FWLIB = ${BUILD}/vboot_fw.a
8589678602e66df24dea75b384ce079519cb8ec2a4Che-Liang Chiouexport HOSTLIB = ${BUILD}/vboot_host.a
86ed5fcc0191ca1ce959b4614f3f6fa861135f506fDon Garrettexport DUMPKERNELCONFIGLIB = ${BUILD}/libdump_kernel_config.a
870b8f35c6a56a0e645254dd7f07ca68e01c8ee629Bill Richardson
880a0e8d0bb26c951a895c5034a4c1c12f3d4e8707Che-Liang Chiouifeq ($(FIRMWARE_ARCH),)
8939f66114c03639715cb88774255f066a2d942557Randall SpanglerSUBDIRS = firmware host utility cgpt tests tests/tpm_lite
900a0e8d0bb26c951a895c5034a4c1c12f3d4e8707Che-Liang Chiouelse
910a0e8d0bb26c951a895c5034a4c1c12f3d4e8707Che-Liang ChiouSUBDIRS = firmware
920a0e8d0bb26c951a895c5034a4c1c12f3d4e8707Che-Liang Chiouendif
93322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
94322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahall:
95b31ddcec6a826986cd215725bf4defbc6021fe6bLouis Yung-Chieh Lo	set -e; \
9670e9509a2748c0ee8646d77f2a0e6fcbb1446505vbendeb	for d in $(shell find ${SUBDIRS} -name '*.c' -exec  dirname {} \; |\
9770e9509a2748c0ee8646d77f2a0e6fcbb1446505vbendeb		 sort -u); do \
9870e9509a2748c0ee8646d77f2a0e6fcbb1446505vbendeb		newdir=${BUILD}/$$d; \
9970e9509a2748c0ee8646d77f2a0e6fcbb1446505vbendeb		if [ ! -d $$newdir ]; then \
10070e9509a2748c0ee8646d77f2a0e6fcbb1446505vbendeb			mkdir -p $$newdir; \
10170e9509a2748c0ee8646d77f2a0e6fcbb1446505vbendeb		fi; \
1025896b9664d088699e246de964a7c374af663a34eLuigi Semenzato	done; \
1036d696e532c6a0c93ad9b915c59dad4144e6f1b33Simon Glass	[ -z "$(FIRMWARE_ARCH)" ] && $(MAKE) -C utility update_tlcl_structures; \
104322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah	for i in $(SUBDIRS); do \
105b31ddcec6a826986cd215725bf4defbc6021fe6bLouis Yung-Chieh Lo		make -C $$i; \
106322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah	done
107322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah
108250549d3e742cddaf72b4f53d5739e54faf5db96Jay Srinivasanlibcgpt_cc: all
109250549d3e742cddaf72b4f53d5739e54faf5db96Jay Srinivasan	$(MAKE) -C cgpt libcgpt_cc
110250549d3e742cddaf72b4f53d5739e54faf5db96Jay Srinivasan	$(MAKE) -C tests CgptManagerTests
111250549d3e742cddaf72b4f53d5739e54faf5db96Jay Srinivasan
112322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahclean:
11370e9509a2748c0ee8646d77f2a0e6fcbb1446505vbendeb	/bin/rm -rf ${BUILD}
114371df8bbbf9088dc1206701bdc2294d9598bb339Bill Richardson
115371df8bbbf9088dc1206701bdc2294d9598bb339Bill Richardsoninstall:
116371df8bbbf9088dc1206701bdc2294d9598bb339Bill Richardson	$(MAKE) -C utility install
117f1372d9109d638fbb1a177a89ebaf64e7ee0637eBill Richardson	$(MAKE) -C cgpt install
118e642198b93cf2c50e279a6598f21f69564b13c6fGaurav Shah
119e642198b93cf2c50e279a6598f21f69564b13c6fGaurav Shahruntests:
120e642198b93cf2c50e279a6598f21f69564b13c6fGaurav Shah	$(MAKE) -C tests runtests
12118b814d9bc7fcf0a7e5d7fca57eed8229f0e9aacLuigi Semenzato
122250549d3e742cddaf72b4f53d5739e54faf5db96Jay Srinivasanruncgptmanagertests:
123250549d3e742cddaf72b4f53d5739e54faf5db96Jay Srinivasan	$(MAKE) -C tests runcgptmanagertests
124250549d3e742cddaf72b4f53d5739e54faf5db96Jay Srinivasan
12518b814d9bc7fcf0a7e5d7fca57eed8229f0e9aacLuigi Semenzatorbtest:
12618b814d9bc7fcf0a7e5d7fca57eed8229f0e9aacLuigi Semenzato	$(MAKE) -C tests rbtest
127856e072e8119cab07fd884e54853f1c3897452eeBill Richardson
128856e072e8119cab07fd884e54853f1c3897452eeBill Richardsonrunbmptests:
129856e072e8119cab07fd884e54853f1c3897452eeBill Richardson	$(MAKE) -C tests runbmptests
130