Makefile.kmk revision a734c64bff58bda2fa48c2795453e092167b0ff7
# $Id$
## @file
# Sub-makefile for iPXE.
#
#
# Copyright (C) 2012 Oracle Corporation
#
# Oracle Corporation confidential
# All rights reserved
#
SUB_DEPTH = ../../../../..
include $(KBUILD_PATH)/subheader.kmk
#
# Globals.
#
VBOX_PATH_IPXE_SRC := $(PATH_SUB_CURRENT)
#
# iPxeBiosBin - Library containing the iPXE ROM as a data blob.
# Will be linked into VBoxDD2.
#
LIBRARIES += iPxeBiosBin
iPxeBiosBin_TEMPLATE = VBOXR3
iPxeBiosBin_DEFS = IN_VBOXDD2
iPxeBiosBin_SOURCES = $(iPxeBiosBin_0_OUTDIR)/iPxeBiosBin.c
iPxeBiosBin_CLEAN = \
$(iPxeBiosBin_0_OUTDIR)/iPxeBiosBin.c \
if1of ($(KBUILD_TARGET), darwin os2 solaris win)
$$(iPxeBiosBin_0_OUTDIR)/iPxeBiosBin.c: $(PATH_SUB_CURRENT)/iPxeBiosBin.rom $(VBOX_BIN2C) | $$(dir $$@)
$(call MSG_TOOL,bin2c,iPxeBiosBin,$<,$@)
$(QUIET)$(VBOX_BIN2C) -min 32 -max 56 -mask 0x1ff -export NetBiosBinary $< $@
else
iPxeBiosBin_CLEAN += \
$(iPxeBiosBin_0_OUTDIR)/iPxeBiosBin.rom \
$(iPxeBiosBin_0_OUTDIR)/iPxeBaseBin.rom.bin \
$(iPxeBiosBin_0_OUTDIR)/iPxeBaseBin.rom.zinfo
$$(iPxeBiosBin_0_OUTDIR)/iPxeBiosBin.c: $$(iPxeBiosBin_0_OUTDIR)/iPxeBiosBin.rom $(VBOX_BIN2C)
$(call MSG_TOOL,bin2c,iPxeBiosBin,$<,$@)
$(QUIET)$(VBOX_BIN2C) -min 32 -max 56 -mask 0x1ff -export NetBiosBinary $< $@
$$(iPxeBiosBin_0_OUTDIR)/iPxeBiosBin.rom: \
$$(iPxeBaseBin_1_TARGET) \
$$(ipxezbin_1_TARGET) \
$(VBOX_PATH_IPXE_SRC)/src/util/padimg.pl \
$(VBOX_PATH_IPXE_SRC)/src/util/fixrom.pl \
| $$(dir $$@)
$(call MSG_TOOL,zbin,iPxeBiosBin,$<,$@)
$(TOOL_$(VBOX_GCC32_TOOL)_OBJCOPY) -O binary -R .zinfo $< $(iPxeBiosBin_0_OUTDIR)/iPxeBaseBin.rom.bin
$(TOOL_$(VBOX_GCC32_TOOL)_OBJCOPY) -O binary -j .zinfo $< $(iPxeBiosBin_0_OUTDIR)/iPxeBaseBin.rom.zinfo
$(ipxezbin_1_TARGET) \
$(iPxeBiosBin_0_OUTDIR)/iPxeBaseBin.rom.bin \
$(iPxeBiosBin_0_OUTDIR)/iPxeBaseBin.rom.zinfo \
> $@
perl $(VBOX_PATH_IPXE_SRC)/src/util/padimg.pl --blksize=512 --byte=0xff $@
perl $(VBOX_PATH_IPXE_SRC)/src/util/fixrom.pl $@
$(RM) -- \
$(iPxeBiosBin_0_OUTDIR)/iPxeBaseBin.rom.bin \
$(iPxeBiosBin_0_OUTDIR)/iPxeBaseBin.rom.zinfo
#
# iPxeLinker - Linker tool used to link the ROM binary.
#
TOOL_iPxeLinker = iPXE LD tool.
TOOL_iPxeLinker_LINK_PROGRAM_OUTPUT =
TOOL_iPxeLinker_LINK_PROGRAM_OUTPUT_MAYBE = $(outbase).map
TOOL_iPxeLinker_LINK_PROGRAM_OUTPUT_DEBUG = $(outbase).debug
TOOL_iPxeLinker_LINK_PROGRAM_DEBUG_INSTALL_FN = $(2).debug=>$(basename $(3)).debug
TOOL_iPxeLinker_LINK_PROGRAM_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib)))\
$(filter %.def, $(othersrc))
TOOL_iPxeLinker_LINK_PROGRAM_DEPORD =
define TOOL_iPxeLinker_LINK_PROGRAM_CMDS
$(QUIET)ld $(flags) -o $(out) $(objs)\
$(foreach p,$(libpath), -L$(p))\
$(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(lib)), $(lib)))
endef
#
# iPXE - Template used to build the ROM binary.
#
TEMPLATE_iPxe = iPXE code
TEMPLATE_iPxe_TOOL = $(VBOX_GCC32_TOOL)
TEMPLATE_iPxe_LDTOOL = iPxeLinker
TEMPLATE_iPxe_LDFLAGS = \
-N \
--no-check-sections \
--gc-sections \
-T $(VBOX_PATH_IPXE_SRC)/src/arch/i386/scripts/i386.lds \
-u _rom_start --defsym check__rom_start=_rom_start \
-u obj_config --defsym check_obj_config=obj_config \
--defsym pci_vendor_id=0x8086 \
--defsym pci_device_id=0x100E \
-e _rom_start
ifeq ($(KBUILD_TARGET), freebsd)
TEMPLATE_iPxe_LDFLAGS += -m elf_i386_fbsd
else
TEMPLATE_iPxe_LDFLAGS += -m elf_i386
endif
TEMPLATE_iPxe_LNK_DEPS = $(VBOX_PATH_IPXE_SRC)/src/arch/i386/scripts/i386.lds
TEMPLATE_iPxe_CFLAGS = \
-ffreestanding \
-ffunction-sections \
-march=i386 \
-fomit-frame-pointer \
-fstrength-reduce \
-falign-jumps=1 \
-falign-loops=1 \
-Os \
-falign-functions=1 \
-mpreferred-stack-boundary=2 \
-mregparm=3 \
-mrtd \
-freg-struct-return \
-fshort-wchar \
-Ui386 \
-Ulinux \
-include compiler.h \
-Wall \
-W \
-Wformat-nonliteral \
$(VBOX_GCC_fno-stack-protector) \
$(VBOX_GCC_fno-dwarf2-cfi-asm) \
$(VBOX_GCC_Wno-address)
TEMPLATE_iPxe_ASFLAGS = \
-ffreestanding \
-ffunction-sections \
-march=i386 \
-fomit-frame-pointer \
-fstrength-reduce \
-falign-jumps=1 \
-falign-loops=1 \
-falign-functions=1 \
-mpreferred-stack-boundary=2 \
-mregparm=3 \
-mrtd \
-freg-struct-return \
-fshort-wchar \
-Ui386 \
-Ulinux \
-include compiler.h \
-Wall \
-W \
-Wformat-nonliteral \
$(VBOX_GCC_fno-stack-protector) \
$(VBOX_GCC_fno-dwarf2-cfi-asm) \
$(VBOX_GCC_Wno-address) \
-DASSEMBLY
TEMPLATE_iPxe_DEFS = \
ARCH=i386 \
PLATFORM=pcbios \
VERSION_MAJOR=1 \
VERSION_MINOR=0 \
VERSION_PATCH=0 \
VERSION=\"1.0.0+\" \
_build_id=0xaffeaffe
#
# iPxeBaseBin - The iPXE ROM base binary.
#
PROGRAMS += iPxeBaseBin
iPxeBaseBin_TEMPLATE = iPxe
iPxeBaseBin_INCS = \
src \
iPxeBaseBin_SOURCES = \
define def_iPxeBaseBinDefs
$(file)_DEFS += OBJECT=$(subst -,_,$(basename $(notdir $(file))))
endef
$(foreach file,$(iPxeBaseBin_SOURCES),$(eval $(call def_iPxeBaseBinDefs)))
#
# ipxezbin - Compressor?
#
BLDPROGS += ipxezbin
ipxezbin_TEMPLATE = VBOXBLDPROG
ipxezbin_CFLAGS = -Wno-format
ipxezbin_SOURCES = src/util/zbin.c
endif
include $(FILE_KBUILD_SUB_FOOTER)