1623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley# Copyright 2015 The Chromium OS Authors. All rights reserved.
2623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley# Use of this source code is governed by a BSD-style license that can be
3623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley# found in the LICENSE file.
4623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
5623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley# Minimal makefile capable of compiling futility to sign images
6623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
7623d6c4744ed92b53ac929edd94de22c61a93dafDavid RileyLOCAL_PATH := $(call my-dir)
8623d6c4744ed92b53ac929edd94de22c61a93dafDavid Rileyinclude $(CLEAR_VARS)
9623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
10623d6c4744ed92b53ac929edd94de22c61a93dafDavid RileyLOCAL_MODULE := libvboot_util-host
11623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
12623d6c4744ed92b53ac929edd94de22c61a93dafDavid Rileyifeq ($(HOST_OS),darwin)
1310ebdb2ed235c5fc70d72ba11c7e7d2caf4b3296Ying WangLOCAL_CFLAGS += -DHAVE_MACOS -DO_LARGEFILE=0
14623d6c4744ed92b53ac929edd94de22c61a93dafDavid Rileyendif
15623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
16623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley# These are required to access large disks and files on 32-bit systems.
17623d6c4744ed92b53ac929edd94de22c61a93dafDavid RileyLOCAL_CFLAGS += -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64
18623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
19623d6c4744ed92b53ac929edd94de22c61a93dafDavid RileyLOCAL_C_INCLUDES += \
20623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	$(LOCAL_PATH)/firmware/include \
21623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	$(LOCAL_PATH)/firmware/lib/include \
22623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	$(LOCAL_PATH)/firmware/lib/cgptlib/include \
23623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	$(LOCAL_PATH)/firmware/lib/cryptolib/include \
24623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	$(LOCAL_PATH)/firmware/lib/tpm_lite/include \
25623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	$(LOCAL_PATH)/firmware/2lib/include \
26623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	$(LOCAL_PATH)/host/include \
27d6759e4ce635fabf01e7919ef070e114d54b455bAdam Langley	$(LOCAL_PATH)/host/lib/include
28623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
29623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley# Firmware library sources needed by VbInit() call
30623d6c4744ed92b53ac929edd94de22c61a93dafDavid RileyVBINIT_SRCS = \
31623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/crc8.c \
32623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/utility.c \
33623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/vboot_api_init.c \
34623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/vboot_common_init.c \
35623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/vboot_nvstorage.c \
36623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/vboot_nvstorage_rollback.c \
37623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/region-init.c \
38623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
39623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley# Additional firmware library sources needed by VbSelectFirmware() call
40623d6c4744ed92b53ac929edd94de22c61a93dafDavid RileyVBSF_SRCS = \
41623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/cryptolib/padding.c \
42623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/cryptolib/rsa.c \
43623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/cryptolib/rsa_utility.c \
44623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/cryptolib/sha1.c \
45623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/cryptolib/sha256.c \
46623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/cryptolib/sha512.c \
47623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/cryptolib/sha_utility.c \
48623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/stateful_util.c \
49623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/vboot_api_firmware.c \
50623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/vboot_common.c \
51623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/vboot_firmware.c \
52623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/region-fw.c \
53623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
54623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley# Additional firmware library sources needed by VbSelectAndLoadKernel() call
55623d6c4744ed92b53ac929edd94de22c61a93dafDavid RileyVBSLK_SRCS = \
56623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/cgptlib/cgptlib.c \
57623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/cgptlib/cgptlib_internal.c \
58623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/cgptlib/crc32.c \
59623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/gpt_misc.c \
60623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/utility_string.c \
61623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/vboot_api_kernel.c \
62623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/vboot_audio.c \
63623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/vboot_display.c \
64623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/vboot_kernel.c \
65623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/lib/region-kernel.c \
66623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
67623d6c4744ed92b53ac929edd94de22c61a93dafDavid RileyVBINIT_SRCS += \
68623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/stub/tpm_lite_stub.c \
69623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/stub/utility_stub.c \
70623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/stub/vboot_api_stub_init.c \
71623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/stub/vboot_api_stub_region.c
72623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
73623d6c4744ed92b53ac929edd94de22c61a93dafDavid RileyVBSF_SRCS += \
74623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/stub/vboot_api_stub_sf.c
75623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
76623d6c4744ed92b53ac929edd94de22c61a93dafDavid RileyVBSLK_SRCS += \
77623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/stub/vboot_api_stub.c \
78623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/stub/vboot_api_stub_disk.c \
79623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	firmware/stub/vboot_api_stub_stream.c
80623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
81623d6c4744ed92b53ac929edd94de22c61a93dafDavid RileyUTILLIB_SRCS = \
82623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	cgpt/cgpt_create.c \
83623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	cgpt/cgpt_add.c \
84623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	cgpt/cgpt_boot.c \
85623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	cgpt/cgpt_show.c \
86623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	cgpt/cgpt_repair.c \
87623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	cgpt/cgpt_prioritize.c \
88623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	cgpt/cgpt_common.c \
89623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	futility/dump_kernel_config_lib.c \
90623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	host/lib/crossystem.c \
91623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	host/lib/file_keys.c \
92623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	host/lib/fmap.c \
93623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	host/lib/host_common.c \
94623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	host/lib/host_key.c \
95623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	host/lib/host_keyblock.c \
96623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	host/lib/host_misc.c \
97623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	host/lib/util_misc.c \
98623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	host/lib/host_signature.c \
99623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	host/lib/signature_digest.c
100623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
101623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley#	host/arch/${HOST_ARCH}/lib/crossystem_arch.c \
102623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
103623d6c4744ed92b53ac929edd94de22c61a93dafDavid RileyLOCAL_SRC_FILES := \
104623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	$(VBINIT_SRCS) \
105623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	$(VBSF_SRCS) \
106623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	$(VBSLK_SRCS) \
107623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	$(UTILLIB_SRCS)
108623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
109623d6c4744ed92b53ac929edd94de22c61a93dafDavid RileyLOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_C_INCLUDES)
110d6759e4ce635fabf01e7919ef070e114d54b455bAdam LangleyLOCAL_STATIC_LIBRARIES := libcrypto_static
111623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
112623d6c4744ed92b53ac929edd94de22c61a93dafDavid Rileyinclude $(BUILD_HOST_STATIC_LIBRARY)
113623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
114623d6c4744ed92b53ac929edd94de22c61a93dafDavid Rileyinclude $(CLEAR_VARS)
115623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
116623d6c4744ed92b53ac929edd94de22c61a93dafDavid RileyLOCAL_MODULE := futility-host
117623d6c4744ed92b53ac929edd94de22c61a93dafDavid RileyLOCAL_IS_HOST_MODULE := true
118623d6c4744ed92b53ac929edd94de22c61a93dafDavid RileyLOCAL_MODULE_CLASS := EXECUTABLES
119623d6c4744ed92b53ac929edd94de22c61a93dafDavid Rileygenerated_sources := $(call local-generated-sources-dir)
120623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
121623d6c4744ed92b53ac929edd94de22c61a93dafDavid Rileyifeq ($(HOST_OS),darwin)
122623d6c4744ed92b53ac929edd94de22c61a93dafDavid RileyLOCAL_CFLAGS += -DHAVE_MACOS
123623d6c4744ed92b53ac929edd94de22c61a93dafDavid Rileyendif
124623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
125623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley# These are required to access large disks and files on 32-bit systems.
126623d6c4744ed92b53ac929edd94de22c61a93dafDavid RileyLOCAL_CFLAGS += -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64
127623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
128623d6c4744ed92b53ac929edd94de22c61a93dafDavid RileyFUTIL_STATIC_SRCS = \
129623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	futility/futility.c \
130623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	futility/cmd_dump_fmap.c \
131623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	futility/cmd_gbb_utility.c \
132623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	futility/misc.c
133623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
134623d6c4744ed92b53ac929edd94de22c61a93dafDavid RileyFUTIL_SRCS = \
135623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	${FUTIL_STATIC_SRCS} \
136623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	futility/cmd_dump_kernel_config.c \
137623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	futility/cmd_load_fmap.c \
138623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	futility/cmd_pcr.c \
139623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	futility/cmd_show.c \
140623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	futility/cmd_sign.c \
141623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	futility/cmd_vbutil_firmware.c \
142623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	futility/cmd_vbutil_kernel.c \
143623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	futility/cmd_vbutil_key.c \
144623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	futility/cmd_vbutil_keyblock.c \
145623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	futility/file_type.c \
146623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	futility/traversal.c \
147623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	futility/vb1_helper.c
148623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
149623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley#	${FUTIL_STATIC_WORKAROUND_SRCS:%.c=${BUILD}/%.o} \
150623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
151623d6c4744ed92b53ac929edd94de22c61a93dafDavid RileyLOCAL_SRC_FILES := \
152623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	$(FUTIL_SRCS) \
153623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
154623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley$(generated_sources)/futility_cmds.c: ${FUTIL_SRCS:%=${LOCAL_PATH}/%}
155623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	@echo making $< from ${FUTIL_SRCS}
156623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	@rm -f $@ $@_t $@_commands
157623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	@mkdir -p $(dir $@)
158623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	@grep -hoRE '^DECLARE_FUTIL_COMMAND\([^,]+' $^ \
159623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley		| sed 's/DECLARE_FUTIL_COMMAND(\(.*\)/_CMD(\1)/' \
160623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley		| sort >>$@_commands
161623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	@external/vboot_reference/scripts/getversion.sh >> $@_t
162623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	@echo '#define _CMD(NAME) extern const struct' \
163623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley		'futil_cmd_t __cmd_##NAME;' >> $@_t
164623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	@cat $@_commands >> $@_t
165623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	@echo '#undef _CMD' >> $@_t
166623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	@echo '#define _CMD(NAME) &__cmd_##NAME,' >> $@_t
167623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	@echo 'const struct futil_cmd_t *const futil_cmds[] = {' >> $@_t
168623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	@cat $@_commands >> $@_t
169623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	@echo '0};  /* null-terminated */' >> $@_t
170623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	@echo '#undef _CMD' >> $@_t
171623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	@mv $@_t $@
172623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley	@rm -f $@_commands
173623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
174623d6c4744ed92b53ac929edd94de22c61a93dafDavid RileyLOCAL_GENERATED_SOURCES := $(generated_sources)/futility_cmds.c
175623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
176623d6c4744ed92b53ac929edd94de22c61a93dafDavid RileyLOCAL_STATIC_LIBRARIES := libvboot_util-host
177d6759e4ce635fabf01e7919ef070e114d54b455bAdam LangleyLOCAL_SHARED_LIBRARIES := libcrypto-host
178623d6c4744ed92b53ac929edd94de22c61a93dafDavid Rileyinclude $(BUILD_HOST_EXECUTABLE)
179623d6c4744ed92b53ac929edd94de22c61a93dafDavid Riley
180