# $Id: Config.kmk 48674 2013-09-25 08:26:15Z vboxsync $ ## @file # kBuild configuration for the VBox EFI firmware. # # Note! kBuild is only used for the build tools, the rest is handled by the # very custom EFI build system. # # # Copyright (C) 2013 Oracle Corporation # # This file is part of VirtualBox Open Source Edition (OSE), as # available from http://www.virtualbox.org. This file is free software; # you can redistribute it and/or modify it under the terms of the GNU # General Public License (GPL) as published by the Free Software # Foundation, in version 2 as it comes in the "COPYING" file of the # VirtualBox OSE distribution. VirtualBox OSE is distributed in the # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. # # The contents of this file may alternatively be used under the terms # of the Common Development and Distribution License Version 1.0 # (CDDL) only, as it comes in the "COPYING.CDDL" file of the # VirtualBox OSE distribution, in which case the provisions of the # CDDL are applicable instead of those of the GPL. # # You may elect to license modified versions of this file under the # terms and conditions of either the GPL or the CDDL or both. # VBOX_EFI_FIRMWARE_CONFIG_KMK_INCLUDED = 1 # Include the next configure file above us. ifndef VBOX_DEVICES_CONFIG_KMK_INCLUDED include $(PATH_ROOT)/src/VBox/Devices/Config.kmk endif # # Globals. # VBOX_PATH_EFI_FIRMWARE = $(PATH_ROOT)/src/VBox/Devices/EFI/Firmware VBOX_PATH_STAGE_EFI_BLDPROGS = $(PATH_STAGE)/EfiBldProgs VBOX_EFI_BUILD_TARGET = $(if-expr $(intersects release profile, $(KBUILD_TYPE)),RELEASE,DEBUG) VBOX_EFI_OUTPUT_SUBDIR = $(VBOX_EFI_BUILD_TARGET)_$(VBOX_EFI_TOOL_CHAIN) # # Decide which tool chain to use for the EFI binaries. # ifeq ($(KBUILD_HOST),win) ifeq ($(VBOX_VCC_TOOL_STEM),VCC100) VBOX_EFI_TOOL_CHAIN := VS2010$(if-expr "$(KBUILD_HOST_ARCH)" == "x86",x86,) else ifeq ($(VBOX_VCC_TOOL_STEM),VCC110) VBOX_EFI_TOOL_CHAIN := VS2012$(if-expr "$(KBUILD_HOST_ARCH)" == "x86",x86,) else $(error Unsupported Visual C++ tool: $(VBOX_VCC_TOOL_STEM)) endif else VBOX_EFI_TOOL_CHAIN = UNIXGCC if !defined(VBOX_PATH_PREFIX_MINGW32) && !defined(VBOX_PATH_PREFIX_MINGW64) $(info Requires VBOX_PATH_PREFIX_MINGW32 and/or VBOX_PATH_PREFIX_MINGW64 to point something mingw like or there must be some mingw like in the PATH.) $(info ) $(info Recent Fedora: sudo yum install mingw64-gcc mingw64-gcc-c++ mingw64-binutils mingw32-gcc mingw32-gcc-c++ mingw32-binutils) $(info ) $(info Newer Debian and forks: sudo apt-get install binutils-mingw-w64 gcc-mingw-w64 g++-mingw-w64 ) $(info Older Debian and forks: sudo apt-get install mingw32-binutils mingw32 mingw32-runtime ) $(info ) $(info Gentoo: crossdev -S -P -v -t i686-pc-mingw32 && crossdev -S -P -v -t x86_64-pc-mingw32) $(info ) $(error Needs mingw32/64) endif endif # # Make a build program template of our own. # TEMPLATE_VBoxEfiBldProg = EFI build program. TEMPLATE_VBoxEfiBldProg_EXTENDS = VBOXBLDPROG TEMPLATE_VBoxEfiBldProg_INST = EfiBldProgs/ TEMPLATE_VBoxEfiBldProg_INSTTYPE = stage TEMPLATE_VBoxEfiBldProg_INCS = $(TEMPLATE_VBOXBLDPROG_INCS) \ $(VBOX_PATH_EFI_FIRMWARE)/BaseTools/Source/C/Include/IndustryStandard \ $(VBOX_PATH_EFI_FIRMWARE)/BaseTools/Source/C/Common \ $(VBOX_PATH_EFI_FIRMWARE)/BaseTools/Source/C/Include \ $(VBOX_PATH_EFI_FIRMWARE)/BaseTools/Source/C TEMPLATE_VBoxEfiBldProg_INCS.x86 = $(TEMPLATE_VBOXBLDPROG_INCS.x86) \ $(VBOX_PATH_EFI_FIRMWARE)/BaseTools/Source/C/Include/IA32 TEMPLATE_VBoxEfiBldProg_INCS.amd64 = $(TEMPLATE_VBOXBLDPROG_INCS.amd64) \ $(VBOX_PATH_EFI_FIRMWARE)/BaseTools/Source/C/Include/X64 TEMPLATE_VBoxEfiBldProg_LIBS = \ $(VBOX_PATH_STAGE_EFI_BLDPROGS)/EfiBldCommonLib$(VBOX_SUFF_LIB) \ $(TEMPLATE_VBOXBLDPROG_LIBS) ifn1of ($(KBUILD_HOST),win) # This stuff isn't up to our standard at all! :/ TEMPLATE_VBoxEfiBldProg_CFLAGS = $(filter-out -pedantic,$(TEMPLATE_VBOXBLDPROG_CFLAGS)) \ -Wno-sign-compare -Wno-missing-prototypes -Wno-strict-prototypes \ -Wno-implicit-function-declaration -Wno-missing-declarations -Wno-shadow -Wno-format -Wno-empty-body TEMPLATE_VBoxEfiBldProg_CXXFLAGS = $(filter-out -pedantic,$(TEMPLATE_VBOXBLDPROG_CXXFLAGS)) \ -Wno-all -Wno-shadow -Wno-empty-body endif # There isn't a BLDLIBRARIES target group, so we have to override the build # target for libraries used by build programs and keep them in LIBRARIES. TEMPLATE_VBoxEfiBldLib = Library for an EFI build program. TEMPLATE_VBoxEfiBldLib_EXTENDS = VBoxEfiBldProg TEMPLATE_VBoxEfiBldLib_BLD_TRG := $(KBUILD_HOST) TEMPLATE_VBoxEfiBldLib_BLD_TRG_ARCH := $(KBUILD_HOST_ARCH) TEMPLATE_VBoxEfiBldLib_BLD_TRG_CPU := $(KBUILD_HOST_CPU) # # List of modules that ends up producing .efi, .debug and .pdb files. # VBOX_EFI_MODULES = \ IntelFrameworkModulePkg/Bus/Isa/IsaBusDxe/IsaBusDxe/$(VBOX_EFI_BUILD_TARGET)/IsaBusDxe \ IntelFrameworkModulePkg/Bus/Isa/IsaFloppyDxe/IsaFloppyDxe/$(VBOX_EFI_BUILD_TARGET)/IsaFloppyDxe \ IntelFrameworkModulePkg/Bus/Isa/IsaIoDxe/IsaIoDxe/$(VBOX_EFI_BUILD_TARGET)/IsaIoDxe \ IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/IsaSerialDxe/$(VBOX_EFI_BUILD_TARGET)/IsaSerialDxe \ IntelFrameworkModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2keyboardDxe/$(VBOX_EFI_BUILD_TARGET)/Ps2KeyboardDxe \ IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/IdeBusDxe/$(VBOX_EFI_BUILD_TARGET)/IdeBusDxe \ IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe/$(VBOX_EFI_BUILD_TARGET)/BdsDxe \ IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe/$(VBOX_EFI_BUILD_TARGET)/DataHubDxe \ IntelFrameworkModulePkg/Universal/StatusCode/Pei/StatusCodePei/$(VBOX_EFI_BUILD_TARGET)/StatusCodePei \ IntelFrameworkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCodeRuntimeDxe/$(VBOX_EFI_BUILD_TARGET)/StatusCodeRuntimeDxe \ MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru/$(VBOX_EFI_BUILD_TARGET)/AtaAtapiPassThruDxe \ MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe/$(VBOX_EFI_BUILD_TARGET)/AtaBusDxe \ MdeModulePkg/Bus/Pci/EhciDxe/EhciDxe/$(VBOX_EFI_BUILD_TARGET)/EhciDxe \ MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe/$(VBOX_EFI_BUILD_TARGET)/PciBusDxe \ MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe/$(VBOX_EFI_BUILD_TARGET)/ScsiBus \ MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe/$(VBOX_EFI_BUILD_TARGET)/ScsiDisk \ MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBusDxe/$(VBOX_EFI_BUILD_TARGET)/UsbBusDxe \ MdeModulePkg/Bus/Usb/UsbKbDxe/UsbKbDxe/$(VBOX_EFI_BUILD_TARGET)/UsbKbDxe \ MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassStorageDxe/$(VBOX_EFI_BUILD_TARGET)/UsbMassStorageDxe \ MdeModulePkg/Core/Dxe/DxeMain/$(VBOX_EFI_BUILD_TARGET)/DxeCore \ MdeModulePkg/Core/DxeIplPeim/DxeIpl/$(VBOX_EFI_BUILD_TARGET)/DxeIpl \ MdeModulePkg/Core/Pei/PeiMain/$(VBOX_EFI_BUILD_TARGET)/PeiCore \ MdeModulePkg/Core/RuntimeDxe/RuntimeDxe/$(VBOX_EFI_BUILD_TARGET)/RuntimeDxe \ MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe/$(VBOX_EFI_BUILD_TARGET)/AcpiTableDxe \ MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe/$(VBOX_EFI_BUILD_TARGET)/CapsuleRuntimeDxe \ MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe/$(VBOX_EFI_BUILD_TARGET)/ConPlatformDxe \ MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe/$(VBOX_EFI_BUILD_TARGET)/ConSplitterDxe \ MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe/$(VBOX_EFI_BUILD_TARGET)/GraphicsConsoleDxe \ MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe/$(VBOX_EFI_BUILD_TARGET)/TerminalDxe \ MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe/$(VBOX_EFI_BUILD_TARGET)/DevicePathDxe \ MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe/$(VBOX_EFI_BUILD_TARGET)/DiskIoDxe \ MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe/$(VBOX_EFI_BUILD_TARGET)/EnglishDxe \ MdeModulePkg/Universal/EbcDxe/EbcDxe/$(VBOX_EFI_BUILD_TARGET)/EbcDxe \ MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe/$(VBOX_EFI_BUILD_TARGET)/FaultTolerantWriteDxe \ MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe/$(VBOX_EFI_BUILD_TARGET)/HiiDatabase \ MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe/$(VBOX_EFI_BUILD_TARGET)/NullMemoryTestDxe \ MdeModulePkg/Universal/Metronome/Metronome/$(VBOX_EFI_BUILD_TARGET)/Metronome \ MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe/$(VBOX_EFI_BUILD_TARGET)/MonotonicCounterRuntimeDxe \ MdeModulePkg/Universal/PCD/Dxe/Pcd/$(VBOX_EFI_BUILD_TARGET)/PcdDxe \ MdeModulePkg/Universal/PCD/Pei/Pcd/$(VBOX_EFI_BUILD_TARGET)/PcdPeim \ MdeModulePkg/Universal/PrintDxe/PrintDxe/$(VBOX_EFI_BUILD_TARGET)/PrintDxe \ MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe/$(VBOX_EFI_BUILD_TARGET)/ReportStatusCodeRouterRuntimeDxe \ MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe/$(VBOX_EFI_BUILD_TARGET)/SecurityStubDxe \ MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe/$(VBOX_EFI_BUILD_TARGET)/SetupBrowser \ MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe/$(VBOX_EFI_BUILD_TARGET)/SmbiosDxe \ MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntimeDxe/$(VBOX_EFI_BUILD_TARGET)/StatusCodeHandlerRuntimeDxe \ MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer/$(VBOX_EFI_BUILD_TARGET)/WatchdogTimer \ OvmfPkg/BlockMmioToBlockIoDxe/BlockIo/$(VBOX_EFI_BUILD_TARGET)/BlockMmioToBlockIoDxe \ OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb/$(VBOX_EFI_BUILD_TARGET)/EmuVariableFvbRuntimeDxe \ OvmfPkg/Sec/SecMain/$(VBOX_EFI_BUILD_TARGET)/SecMain \ OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe/$(VBOX_EFI_BUILD_TARGET)/SmbiosPlatformDxe \ PcAtChipsetPkg/8254TimerDxe/8254Timer/$(VBOX_EFI_BUILD_TARGET)/Timer \ PcAtChipsetPkg/8259InterruptControllerDxe/8259/$(VBOX_EFI_BUILD_TARGET)/Legacy8259 \ PcAtChipsetPkg/Bus/Pci/IdeControllerDxe/IdeControllerDxe/$(VBOX_EFI_BUILD_TARGET)/IdeController \ PcAtChipsetPkg/IsaAcpiDxe/IsaAcpi/$(VBOX_EFI_BUILD_TARGET)/IsaAcpi \ PcAtChipsetPkg/KbcResetDxe/Reset/$(VBOX_EFI_BUILD_TARGET)/KbcReset \ PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcatRealTimeClockRuntimeDxe/$(VBOX_EFI_BUILD_TARGET)/PcRtc \ PcAtChipsetPkg/PciHostBridgeDxe/PciHostBridgeDxe/$(VBOX_EFI_BUILD_TARGET)/PciHostBridge \ ShellPkg/Application/Shell/Shell/$(VBOX_EFI_BUILD_TARGET)/Shell \ UefiCpuPkg/CpuDxe/CpuDxe/$(VBOX_EFI_BUILD_TARGET)/CpuDxe \ UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe/$(VBOX_EFI_BUILD_TARGET)/CpuIo2Dxe \ VBoxPkg/AcpiPlatformDxe/AcpiPlatformDxe/$(VBOX_EFI_BUILD_TARGET)/AcpiPlatform \ VBoxPkg/PartitionDxe/PartitionDxe/$(VBOX_EFI_BUILD_TARGET)/PartitionDxe \ VBoxPkg/PlatformPei/PlatformPei/$(VBOX_EFI_BUILD_TARGET)/PlatformPei \ VBoxPkg/VBoxAppleSim/VBoxAppleSim/$(VBOX_EFI_BUILD_TARGET)/VBoxAppleSim \ VBoxPkg/VBoxFsDxe/VBoxHfs/$(VBOX_EFI_BUILD_TARGET)/VBoxHfs \ VBoxPkg/VBoxFsDxe/VBoxIso9660/$(VBOX_EFI_BUILD_TARGET)/VBoxIso9600 \ VBoxPkg/VBoxSysTables/VBoxSysTables/$(VBOX_EFI_BUILD_TARGET)/VBoxSysTables \ VBoxPkg/VBoxVariable/VBoxVariableRuntimeDxe/$(VBOX_EFI_BUILD_TARGET)/EmuVariableRuntimeDxe \ VBoxPkg/VBoxVgaDxe/VBoxVgaDxe/$(VBOX_EFI_BUILD_TARGET)/VBoxVgaDxe \ VBoxPkg/VBoxVgaMiniPortDxe/VBoxVgaMiniPortDxe/$(VBOX_EFI_BUILD_TARGET)/VBoxVgaMiniPortDxe \ # Version of VBOX_EFI_MODULES without directories. (Using $(value ) to avoid # expanding all the build target macros and then immediately discarding them.) VBOX_EFI_MODULES_FLAT = $(notdir $(value VBOX_EFI_MODULES))