VirtualBox

source: vbox/trunk/src/VBox/Devices/EFI/Firmware/Makefile.kmk@ 58804

Last change on this file since 58804 was 58804, checked in by vboxsync, 9 years ago

EFI/Firmware: Remove the now obsolete VBoxEfiResetVector targets for x86 and amd64 because they are not used anymore after the firmware update. The reset vector code is now built just like the other things by the EDK build system

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 13.2 KB
Line 
1# $Id: Makefile.kmk 58804 2015-11-20 17:22:41Z vboxsync $
2## @file
3# Toplevel sub-makefile for the EFI firmwares.
4#
5# Note! kBuild is only used for the build tools, the rest is handled by the
6# very custom EFI build system.
7#
8
9#
10# Copyright (C) 2013-2015 Oracle Corporation
11#
12# This file is part of VirtualBox Open Source Edition (OSE), as
13# available from http://www.virtualbox.org. This file is free software;
14# you can redistribute it and/or modify it under the terms of the GNU
15# General Public License (GPL) as published by the Free Software
16# Foundation, in version 2 as it comes in the "COPYING" file of the
17# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
18# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
19#
20# The contents of this file may alternatively be used under the terms
21# of the Common Development and Distribution License Version 1.0
22# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
23# VirtualBox OSE distribution, in which case the provisions of the
24# CDDL are applicable instead of those of the GPL.
25#
26# You may elect to license modified versions of this file under the
27# terms and conditions of either the GPL or the CDDL or both.
28#
29
30SUB_DEPTH = ../../../../..
31include $(KBUILD_PATH)/subheader.kmk
32
33#
34# Make sure our Config.kmk is included.
35#
36ifndef VBOX_EFI_FIRMWARE_CONFIG_KMK_INCLUDED
37 include $(PATH_SUB_CURRENT)/Config.kmk
38endif
39
40
41#
42# Include sub-makefiles.
43#
44VBOX_EFI_BLDPROGS := $(BLDPROGS)
45include $(PATH_SUB_CURRENT)/BaseTools/Makefile.kmk
46VBOX_EFI_BLDPROGS := $(filter-out $(VBOX_EFI_BLDPROGS),$(BLDPROGS)) VBoxEfiBldPythonWrappers
47
48#
49# Binary wrappers for python scripts.
50#
51VBOX_EFI_PYTHON_WRAPPERS = \
52 BPDG \
53 build \
54 Ecc \
55 GenFds \
56 GenPatchPcdTable \
57 PatchPcdValue \
58 Trim \
59 TargetTool \
60 UPT
61
62INSTALLS += VBoxEfiBldPythonWrappers
63VBoxEfiBldPythonWrappers_TEMPLATE = VBoxEfiBldProg
64if1of ($(KBUILD_HOST), win os2)
65 VBoxEfiBldPythonWrappers_EXEC_SOURCES = \
66 $(foreach PyWrap,$(VBOX_EFI_PYTHON_WRAPPERS),$(VBoxEfiBldPythonWrappers_0_OUTDIR)/$(PyWrap).cmd)
67else
68 VBoxEfiBldPythonWrappers_EXEC_SOURCES = \
69 $(addprefix $(VBoxEfiBldPythonWrappers_0_OUTDIR)/,$(VBOX_EFI_PYTHON_WRAPPERS))
70endif
71VBoxEfiBldPythonWrappers_CLEAN = $(VBoxEfiBldPythonWrappers_SOURCES)
72
73if1of ($(KBUILD_HOST), win os2)
74 define VBoxEfiBldPythonWrappersRuleTemplate
75 $$$$(VBoxEfiBldPythonWrappers_0_OUTDIR)/$(PyWrap).cmd: | $$$$(dir $$$$@)
76 $$(APPEND) -tn "$$@" \
77 '@SET PYTHONPATH=$$(VBOX_PATH_EFI_FIRMWARE)/BaseTools/Source/Python' \
78 '@"$$(VBOX_BLD_PYTHON)" "$$(VBOX_PATH_EFI_FIRMWARE)/BaseTools/Source/Python/$(PyWrap)/$(PyWrap).py" %*'
79 endef
80else
81 define VBoxEfiBldPythonWrappersRuleTemplate
82 $$$$(VBoxEfiBldPythonWrappers_0_OUTDIR)/$(PyWrap): | $$$$(dir $$$$@)
83 $$(APPEND) -tn "$$@" \
84 '#!$(ASH)' \
85 'export PYTHONPATH="$$(VBOX_PATH_EFI_FIRMWARE)/BaseTools/Source/Python"' \
86 'exec "$$(VBOX_BLD_PYTHON)" "$$(VBOX_PATH_EFI_FIRMWARE)/BaseTools/Source/Python/$(PyWrap)/$(PyWrap).py" "$$(DOLLAR)@"'
87 $$(CHMOD) a+x "$$@"
88 endef
89endif
90$(foreach PyWrap,$(VBOX_EFI_PYTHON_WRAPPERS),$(eval $(VBoxEfiBldPythonWrappersRuleTemplate)))
91
92#
93# Rules for building and installing the VBox EFI firmware images.
94#
95INSTALLS += VBoxEfiFirmware
96VBoxEfiFirmware_INST = $(INST_BIN)
97VBoxEfiFirmware_MODE = 0644
98VBoxEfiFirmware_SOURCES = \
99 $(VBoxEfiFirmware_0_OUTDIR)/x86/$(VBOX_EFI_OUTPUT_SUBDIR)/FV/OVMF.fd=>VBoxEFI32.fd \
100 $(VBoxEfiFirmware_0_OUTDIR)/amd64/$(VBOX_EFI_OUTPUT_SUBDIR)/FV/OVMF.fd=>VBoxEFI64.fd
101VBoxEfiFirmware_BLDDIRS = \
102 $(VBoxEfiFirmware_0_OUTDIR)/x86/ \
103 $(VBoxEfiFirmware_0_OUTDIR)/x86/Conf/ \
104 $(VBoxEfiFirmware_0_OUTDIR)/amd64/ \
105 $(VBoxEfiFirmware_0_OUTDIR)/amd64/Conf/
106VBoxEfiFirmware_CLEAN = \
107 $(VBoxEfiFirmware_0_OUTDIR)/x86/Conf/target.txt \
108 $(VBoxEfiFirmware_0_OUTDIR)/x86/Conf/tools_def.txt \
109 $(VBoxEfiFirmware_0_OUTDIR)/amd64/Conf/target.txt \
110 $(VBoxEfiFirmware_0_OUTDIR)/amd64/Conf/tools_def.txt
111
112# Install the debug info.
113INSTALLS += VBoxEfiFirmwareDbg32
114VBoxEfiFirmwareDbg32_INST = $(INST_VBOXDBG_SYMS)x86/
115VBoxEfiFirmwareDbg32_MODE = 0644
116if1of ($(KBUILD_HOST), win)
117 VBoxEfiFirmwareDbg32_SOURCES = \
118 $(foreach mod,$(VBOX_EFI_MODULES),$(VBoxEfiFirmware_0_OUTDIR)/x86/$(VBOX_EFI_OUTPUT_SUBDIR)/IA32/$(mod).pdb)
119else
120 VBoxEfiFirmwareDbg32_SOURCES = \
121 $(foreach mod,$(VBOX_EFI_MODULES_FLAT),$(VBoxEfiFirmware_0_OUTDIR)/x86/$(VBOX_EFI_OUTPUT_SUBDIR)/IA32/$(mod).debug)
122endif
123
124INSTALLS += VBoxEfiFirmwareDbg64
125VBoxEfiFirmwareDbg64_INST = $(INST_VBOXDBG_SYMS)amd64/
126VBoxEfiFirmwareDbg64_MODE = 0644
127if1of ($(KBUILD_HOST), win)
128 VBoxEfiFirmwareDbg64_SOURCES = \
129 $(foreach mod,$(VBOX_EFI_MODULES),$(VBoxEfiFirmware_0_OUTDIR)/amd64/$(VBOX_EFI_OUTPUT_SUBDIR)/X64/$(mod).pdb)
130else
131 VBoxEfiFirmwareDbg64_SOURCES = \
132 $(foreach mod,$(VBOX_EFI_MODULES_FLAT),$(VBoxEfiFirmware_0_OUTDIR)/amd64/$(VBOX_EFI_OUTPUT_SUBDIR)/X64/$(mod).debug)
133endif
134
135
136#
137# Install a custom clean up rule for dealing with the EFI build system output.
138#
139PASS_CLEAN_trgs += VBoxEfiFirmwareCleanup
140VBoxEfiFirmwareCleanup:
141 $(if $(VBoxEfiFirmware_0_OUTDIR),,exit 1)
142 $(RM) -Rf -- "$(VBoxEfiFirmware_0_OUTDIR)/amd64/" "$(VBoxEfiFirmware_0_OUTDIR)/x86/"
143.PHONY: VBoxEfiFirmwareCleanup
144
145
146#
147# The zipfile.
148#
149include $(KBUILD_PATH)/tools/ZIP.kmk
150ifndef TOOL_ZIP_PACK
151 TOOL_ZIP_PACK = zip
152endif
153VBoxEfiFirmware.zip: $(PATH_STAGE)/VBoxEfiFirmware.zip
154$(PATH_STAGE)/VBoxEfiFirmware.zip:
155 $(REDIRECT) -C "$(PATH_STAGE_BIN)" -- $(TOOL_ZIP_PACK) $(TOOL_ZIP_PACKFLAGS) -9X $@ \
156 VBoxEFI32.fd \
157 VBoxEFI64.fd
158 $(REDIRECT) -C "$(PATH_STAGE)/$(INST_VBOXDBG_SYMS)" -- $(TOOL_ZIP_PACK) $(TOOL_ZIP_PACKFLAGS) -9X $@ \
159 $(foreach mod,$(VBOX_EFI_MODULES_FLAT),amd64/$(mod)$(VBOX_EFI_DBG_SUFF)) \
160 $(foreach mod,$(VBOX_EFI_MODULES_FLAT),x86/$(mod)$(VBOX_EFI_DBG_SUFF))
161
162#
163# Include the footer early so that we can use VBoxEfiFirmware_0_OUTDIR below.
164#
165include $(FILE_KBUILD_SUB_FOOTER)
166
167#
168# Incomplete list of dependencies relative.
169#
170VBOX_EFI_DEPENDENCIES = \
171 $(VBOX_PATH_EFI_FIRMWARE)/../DevEFI.h \
172 $(VBOX_PATH_EFI_FIRMWARE)/VBoxPkg/Library/VBoxDebugAgentLib/VBoxDebugAgentLib.c \
173 $(VBOX_PATH_EFI_FIRMWARE)/VBoxPkg/Library/VBoxDebugAgentLib/VBoxDebugAgentLib.inf \
174 $(VBOX_PATH_EFI_FIRMWARE)/VBoxPkg/Library/VBoxPeCoffExtraActionLib/VBoxPeCoffExtraActionLib.c \
175 $(VBOX_PATH_EFI_FIRMWARE)/VBoxPkg/Library/VBoxPeCoffExtraActionLib/VBoxPeCoffExtraActionLib.inf \
176 $(VBOX_PATH_EFI_FIRMWARE)/VBoxPkg/VBoxPkg.dec \
177 \
178 $(VBOX_PATH_EFI_FIRMWARE)/OvmfPkg/OvmfPkg.dec \
179 $(VBOX_PATH_EFI_FIRMWARE)/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsBoot.c \
180 $(VBOX_PATH_EFI_FIRMWARE)/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsConnect.c \
181 $(VBOX_PATH_EFI_FIRMWARE)/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsConsole.c \
182 $(VBOX_PATH_EFI_FIRMWARE)/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsMisc.c \
183 $(VBOX_PATH_EFI_FIRMWARE)/IntelFrameworkModulePkg/Library/GenericBdsLib/DevicePath.c \
184 $(VBOX_PATH_EFI_FIRMWARE)/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf \
185 $(VBOX_PATH_EFI_FIRMWARE)/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsStrings.uni \
186 $(VBOX_PATH_EFI_FIRMWARE)/IntelFrameworkModulePkg/Library/GenericBdsLib/InternalBdsLib.h \
187 $(VBOX_PATH_EFI_FIRMWARE)/IntelFrameworkModulePkg/Library/GenericBdsLib/Performance.c \
188 $(VBOX_PATH_EFI_FIRMWARE)/IntelFrameworkModulePkg/Library/GenericBdsLib/String.c \
189 $(VBOX_PATH_EFI_FIRMWARE)/IntelFrameworkModulePkg/Library/GenericBdsLib/String.h \
190
191#
192# The common build.py invocation part.
193# Note! windir isn't set in cygwin on tinderwin2a. SystemRoot is.
194# Note! MAKEFLAGS must be zapped on Windows so nmake don't get confused.
195#
196if1of ($(KBUILD_HOST), win)
197 VBOX_EFI_REDIRECT_E_EQUAL:=$(EQUAL)
198 VBOX_EFI_BUILD_CMD = $(REDIRECT) \
199 -E 'PATH=$(VBOX_PATH_STAGE_EFI_BLDPROGS)$(VBOX_SEP)$(PATH);' \
200 -E 'INCLUDE=$(PATH_ROOT)/include$(VBOX_SEP)$(PATH_OUT)$(VBOX_SEP)$(VBOX_SEP)$(PATH_TOOL_$(VBOX_VCC_TOOL)_INC)$(INCLUDE);' \
201 -E 'COMSPEC=$(firstword $(windir) $(SystemRoot) C:\windows)\system32\cmd.exe' \
202 -E 'MAKEFLAGS='
203else
204 VBOX_EFI_REDIRECT_E_EQUAL:=
205VBOX_EFI_BUILD_CMD = $(REDIRECT) \
206 -E "PATH=$(VBOX_PATH_STAGE_EFI_BLDPROGS)$(VBOX_SEP)$(PATH)" \
207 -E "C_INCLUDE_PATH=$(PATH_ROOT)/include$(VBOX_SEP)$(PATH_OUT)$(VBOX_SEP)$(C_INCLUDE_PATH)" \
208 -E "CPLUS_INCLUDE_PATH=$(PATH_ROOT)/include$(VBOX_SEP)$(PATH_OUT)$(VBOX_SEP)$(C_INCLUDE_PATH)"
209endif
210VBOX_EFI_BUILD_CMD += \
211 -E 'PYTHONPATH=$(VBOX_PATH_EFI_FIRMWARE)/BaseTools/Source/Python' \
212 -E 'PYTHONDONTWRITEBYTECODE=1' \
213 -E 'IASL_BIN=$(VBOX_IASLCMD)' \
214 -E 'NASM_BIN=$(VBOX_YASMCMD)' \
215 -E 'WORKSPACE=$(VBOX_PATH_EFI_FIRMWARE)' \
216 -E 'EDK_TOOLS_PATH=$(VBOX_PATH_EFI_FIRMWARE)/BaseTools' \
217 -E 'EFI_SOURCE$(VBOX_EFI_REDIRECT_E_EQUAL)' \
218 -E 'ECP_SOURCE$(VBOX_EFI_REDIRECT_E_EQUAL)' \
219 -E 'EDK_SOURCE$(VBOX_EFI_REDIRECT_E_EQUAL)' \
220 -E 'X64_PETOOLS_PREFIX$(VBOX_EFI_REDIRECT_E_EQUAL)' \
221 -E 'ARCH$(VBOX_EFI_REDIRECT_E_EQUAL)' \
222 -E 'IPF_PETOOLS_PREFIX=__no_ipf__' \
223 -E $(if-expr "$(KBUILD_VERBOSE)" != "",'EFI_QUIET=','EFI_QUIET=@') \
224 -C '$(VBOX_PATH_EFI_FIRMWARE)' \
225 -- $(VBOX_BLD_PYTHON) "$(VBOX_PATH_EFI_FIRMWARE)/BaseTools/Source/Python/build/build.py" \
226 -D VBOX=1 \
227 -D VBOX_WITH_OVMF=1 \
228 -D BUILD_NEW_SHELL=1 \
229 -D VBOX_REV=$(VBOX_SVN_REV) \
230 -D "VBOX_OUTPUT_BASE_DIR=$(VBoxEfiFirmware_0_OUTDIR)" \
231 -D "VBOX_PATH_ROOT=$(PATH_ROOT)" \
232 -D "FD_SIZE_2MB=1" \
233 $(if $(VBOX_OSE),-D "VBOX_OSE=1") \
234 $(if-expr "$(KBUILD_VERBOSE)" != "",$(if-expr "$(KBUILD_VERBOSE)" >= 3,-v,),--silent --quiet) \
235 --no-cache \
236 --buildtarget $(VBOX_EFI_BUILD_TARGET) \
237 --tagname $(VBOX_EFI_TOOL_CHAIN)
238
239#
240# Derive the number of parallel jobs (on windows) from KMK_OPTS_JOBS.
241#
242VBOX_EFI_MAX_THREADS := 1
243if defined(KMK_OPTS_JOBS) && "$(KBUILD_HOST)" == "win"
244 VBOX_EFI_MAX_THREADS := $(expr $(KMK_OPTS_JOBS) / 2)
245endif
246
247#
248# Tools configurations.
249#
250$(VBoxEfiFirmware_0_OUTDIR)/x86/Conf/tools_def.txt \
251$(VBoxEfiFirmware_0_OUTDIR)/amd64/Conf/tools_def.txt: \
252 $(VBOX_PATH_EFI_FIRMWARE)/vbox-tools_def.txt \
253 $(MAKEFILE) | $$(dir $$@)
254 $(RM) -f -- "$@"
255 $(SED) \
256 -e 's,@VBOX_IASLCMD@,$(VBOX_IASLCMD),' \
257 -e 's,@VBOX_YASMCMD@,$(VBOX_YASMCMD),' \
258 -e 's,@KMK@,$(MAKE),' \
259 \
260 -e 's,@VBOX_PATH_PREFIX_MINGW32@,$(VBOX_PATH_PREFIX_MINGW32),' \
261 -e 's,@VBOX_PATH_PREFIX_MINGW64@,$(VBOX_PATH_PREFIX_MINGW64),' \
262 -e 's,@VBOX_MINGW32_Wno@,-Wno-address $(VBOX_MINGW32_Wno-unused-but-set-variable) $(VBOX_MINGW32_Wno-maybe-uninitialized) $(VBOX_MINGW32_Wno-array-bounds),' \
263 -e 's,@VBOX_MINGW64_Wno@,-Wno-address $(VBOX_MINGW64_Wno-unused-but-set-variable) $(VBOX_MINGW64_Wno-maybe-uninitialized) $(VBOX_MINGW64_Wno-array-bounds),' \
264 -e 's,@VBOX_MINGW64_USER_LABEL_PREFIX@,$(VBOX_MINGW64_USER_LABEL_PREFIX),' \
265 \
266 -e 's,@PATH_VS2010@,$(PATH_TOOL_$(VBOX_VCC_TOOL)),' \
267 -e 's,@PATH_VS2010_AMD64_BIN@,$(PATH_TOOL_$(VBOX_VCC_TOOL))/bin/$(subst x86,x86_amd64,$(KBUILD_HOST_ARCH)),' \
268 \
269 --output $@ $<
270
271#
272# VBoxEFI32
273#
274$(VBoxEfiFirmware_0_OUTDIR)/x86/Conf/target.txt: $(MAKEFILE) | $$(dir $$@) $(VBOX_EFI_BLDPROGS)
275 $(APPEND) -tn "$@" \
276 "# Automatically generated, do not edit" \
277 "" \
278 "# These variables cannot be overriden by the build.py command line." \
279 "TOOL_CHAIN_CONF = $(VBoxEfiFirmware_0_OUTDIR)/x86/Conf/tools_def.txt" \
280 "BUILD_RULE_CONF = $(VBOX_PATH_EFI_FIRMWARE)/BaseTools/Conf/build_rule.template" \
281 "" \
282 "# These variables are overridden and this is just for show." \
283 "ACTIVE_PLATFORM = OvmfPkg/OvmfPkgIa32.dsc" \
284 "TARGET = $(VBOX_EFI_BUILD_TARGET)" \
285 "TARGET_ARCH = IA32" \
286 "TOOL_CHAIN_TAG = $(VBOX_EFI_TOOL_CHAIN)" \
287 "MAX_CONCURRENT_THREAD_NUMBER = $(VBOX_EFI_MAX_THREADS)"
288
289$(VBoxEfiFirmware_0_OUTDIR)/x86/$(VBOX_EFI_OUTPUT_SUBDIR)/FV/OVMF.fd \
290+ $(VBoxEfiFirmwareDbg32_SOURCES): \
291 $(VBoxEfiFirmware_0_OUTDIR)/x86/Conf/target.txt \
292 $(VBoxEfiFirmware_0_OUTDIR)/x86/Conf/tools_def.txt \
293 $$(VBoxEfiResetVector-x86_1_TARGET) \
294 $(VBOX_EFI_DEPENDENCIES) \
295 $(VBOX_PATH_EFI_FIRMWARE)/OvmfPkg/OvmfPkgIa32.dsc \
296 $(VBOX_PATH_EFI_FIRMWARE)/OvmfPkg/OvmfPkgIa32.fdf
297 + $(VBOX_EFI_BUILD_CMD) \
298 --vbox-target-conf "$(VBoxEfiFirmware_0_OUTDIR)/x86/Conf/target.txt" \
299 --arch IA32 \
300 --platform OvmfPkg/OvmfPkgIa32.dsc
301
302#
303# VBoxEFI64
304#
305$(VBoxEfiFirmware_0_OUTDIR)/amd64/Conf/target.txt: $(MAKEFILE) | $$(dir $$@) $(VBOX_EFI_BLDPROGS)
306 $(APPEND) -tn "$@" \
307 "# Automatically generated, do not edit" \
308 "" \
309 "# These variables cannot be overriden by the build.py command line." \
310 "TOOL_CHAIN_CONF = $(VBoxEfiFirmware_0_OUTDIR)/amd64/Conf/tools_def.txt" \
311 "BUILD_RULE_CONF = $(VBOX_PATH_EFI_FIRMWARE)/BaseTools/Conf/build_rule.template" \
312 "" \
313 "# These variables are overridden and this is just for show." \
314 "ACTIVE_PLATFORM = OvmfPkg/OvmfPkgX64.dsc" \
315 "TARGET = $(VBOX_EFI_BUILD_TARGET)" \
316 "TARGET_ARCH = X64" \
317 "TOOL_CHAIN_TAG = $(VBOX_EFI_TOOL_CHAIN)" \
318 "MAX_CONCURRENT_THREAD_NUMBER = $(VBOX_EFI_MAX_THREADS)"
319
320$(VBoxEfiFirmware_0_OUTDIR)/amd64/$(VBOX_EFI_OUTPUT_SUBDIR)/FV/OVMF.fd \
321+ $(VBoxEfiFirmwareDbg64_SOURCES): \
322 $(VBoxEfiFirmware_0_OUTDIR)/amd64/Conf/target.txt \
323 $(VBoxEfiFirmware_0_OUTDIR)/amd64/Conf/tools_def.txt \
324 $$(VBoxEfiResetVector-amd64_1_TARGET) \
325 $(VBOX_EFI_DEPENDENCIES) \
326 $(VBOX_PATH_EFI_FIRMWARE)/OvmfPkg/OvmfPkgX64.dsc \
327 $(VBOX_PATH_EFI_FIRMWARE)/OvmfPkg/OvmfPkgX64.fdf
328 + $(VBOX_EFI_BUILD_CMD) \
329 --vbox-target-conf "$(VBoxEfiFirmware_0_OUTDIR)/amd64/Conf/target.txt" \
330 --arch X64 \
331 --platform OvmfPkg/OvmfPkgX64.dsc
332
333#
334# Some aliases.
335#
336build-efi-x86: $$(filter %VBoxEFI32.fd,$$(VBoxEfiFirmware_2_STAGE_TARGETS))
337build-efi-amd64: $$(filter %VBoxEFI64.fd,$$(VBoxEfiFirmware_2_STAGE_TARGETS))
338
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette