2N/A# Top-level sub-makefile for the devices, drivers and services.
2N/A# Copyright (C) 2006-2010 Sun Microsystems, Inc.
2N/A# This file is part of VirtualBox Open Source Edition (OSE), as
2N/A# you can redistribute it
and/or modify it under the terms of the GNU
2N/A# General Public License (GPL) as published by the Free Software
2N/A# Foundation, in version 2 as it comes in the "COPYING" file of the
2N/A# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
2N/A# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
2N/A# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
2N/A# additional information or have any questions.
2N/AVBOX_PATH_DEVICES_SRC := $(PATH_SUB_CURRENT)
2N/A# Include sub-makefiles.
2N/Aifdef VBOX_WITH_INTEL_PXE
2N/A # Subdir with complex makefile.
2N/A # Disable the unsafe pass order optimizations.
2N/A KBUILD_SAFE_PARALLEL = 1
2N/ALIBRARIES += DevicesR3 Drivers ServicesR0
2N/ADLLS += VBoxDDU VBoxDD VBoxDD2
2N/ASYSMODS += VBoxDDR0 VBoxDD2R0
2N/Aifdef VBOX_WITH_RAW_MODE
2N/A SYSMODS += VBoxDDGC VBoxDD2GC
2N/A# VBoxDDU (shared object)
2N/AVBoxDDU_TEMPLATE = VBOXR3
2N/AVBoxDDU_NAME = $(basename $(notdir $(LIB_DDU)))
2N/AVBoxDDU_DEFS = IN_VBOXDDU
2N/A VBoxDDU_DEFS += VBOX_WITH_VUSB
2N/A VBoxDDU_DEFS += VBOX_WITH_USB IN_USBLIB
2N/A ifdef VBOX_WITH_EHCI
2N/A VBoxDDU_DEFS += VBOX_WITH_EHCI
2N/A ifdef VBOX_WITH_NEW_USB_CODE_ON_DARWIN
2N/Aifdef VBOX_WITH_NEW_IO_CODE
2N/A VBoxDDU_DEFS += VBOX_WITH_NEW_IO_CODE
2N/A $(PATH_LIB)/USBLib$(VBOX_SUFF_LIB)
2N/Aifeq ($(KBUILD_TARGET),l4)
2N/A ifdef VBOX_WITH_NEW_USB_CODE_ON_DARWIN
2N/A# VBoxDDULnxHostR3 (Only needed for l4, currently for executing vditool on L4Linux.)
2N/Aifeq ($(KBUILD_TARGET),l4)
2N/A LIBRARIES += VBoxDDULnxHostR3
2N/A VBoxDDULnxHostR3_TEMPLATE = VBOXLNXHOSTR3LIB
2N/A VBoxDDULnxHostR3_DEFS = IN_VBOXDDU
2N/A VBoxDDULnxHostR3_SOURCES = $(VBoxDDU_SOURCES)
2N/A# VBoxDD (shared object)
2N/AVBoxDD_TEMPLATE = VBOXR3
2N/Aifdef VBOX_WITH_DTRACE_R3
2N/A VBoxDD_TEMPLATE = VBOXR3OSX105
2N/AVBoxDD_DEFS = VBOX_ACPI
2N/A VBoxDD_DEFS += VBOX_WITH_USB
2N/A ifdef VBOX_WITH_EHCI
2N/A VBoxDD_DEFS += VBOX_WITH_EHCI
2N/A VBoxDD_DEFS += VBOX_WITH_VUSB
2N/A VBoxDD_DEFS += VBOX_WITH_AHCI
2N/Aifdef VBOX_WITH_ISCSI
2N/A VBoxDD_DEFS += VBOX_WITH_ISCSI
2N/A ifdef VBOX_WITH_INIP
2N/A VBoxDD_DEFS += VBOX_WITH_INIP
2N/Aifdef VBOX_WITH_E1000
2N/A VBoxDD_DEFS += VBOX_WITH_E1000
2N/Aifdef VBOX_WITH_VIRTIO
2N/A VBoxDD_DEFS += VBOX_WITH_VIRTIO
2N/Aifdef VBOX_WITH_BUSLOGIC
2N/A VBoxDD_DEFS += VBOX_WITH_BUSLOGIC
2N/Aifdef VBOX_WITH_PDM_ASYNC_COMPLETION
2N/A VBoxDD_DEFS += VBOX_WITH_PDM_ASYNC_COMPLETION
2N/A VBoxDD_DEFS += VBOX_WITH_SCSI
2N/Aifdef VBOX_WITH_LSILOGIC
2N/A VBoxDD_DEFS += VBOX_WITH_LSILOGIC
2N/A VBoxDD_DEFS += VBOX_WITH_HPET
2N/A VBoxDD_DEFS += VBOX_WITH_SMC
2N/A VBoxDD_DEFS += VBOX_WITH_LPC
2N/A VBoxDD_DEFS += VBOX_WITH_EFI
2N/Aifdef VBOX_WITH_DRV_DISK_INTEGRITY
2N/A VBoxDD_DEFS += VBOX_WITH_DRV_DISK_INTEGRITY
2N/A $(PATH_LIB)/DevicesR3$(VBOX_SUFF_LIB) \
2N/A $(PATH_LIB)/Drivers$(VBOX_SUFF_LIB) \
2N/A $(PATH_LIB)/VgaDefBiosLogo$(VBOX_SUFF_LIB) \
2N/Aifeq ($(KBUILD_TARGET),win)
2N/A $(INSTARGET_VBoxDDU) \
2N/A $(INSTARGET_VBoxDD2)
2N/Aifeq ($(KBUILD_TARGET),l4)
2N/Aifdef VBOX_WITH_HGSMI
2N/A $(PATH_LIB)/HGSMIHostR3Lib$(VBOX_SUFF_LIB)
2N/Aifdef VBOX_WITH_NETFLT
2N/A VBoxDD_LIBS += $(PATH_LIB)/EfiThunkBin$(VBOX_SUFF_LIB)
2N/Aifeq ($(KBUILD_TARGET),solaris)
2N/A ifdef VBOX_WITH_SUID_WRAPPER
2N/A VBoxDD_LIBS += secdb
2N/A -framework CoreAudio \
2N/A -framework AudioUnit \
2N/A -framework AudioToolbox \
2N/A -framework DiskArbitration
2N/A# VBoxDD2 (shared object)
2N/AVBoxDD2_TEMPLATE = VBOXR3
2N/AVBoxDD2_DEFS = IN_VBOXDD2 \
2N/A $(if $(VBOX_WITH_VMI),VBOX_WITH_VMI,)
2N/A $(PATH_LIB)/PcBiosBin$(VBOX_SUFF_LIB) \
2N/A $(PATH_LIB)/VgaBiosBin$(VBOX_SUFF_LIB) \
2N/A $(PATH_LIB)/NetBiosBin$(VBOX_SUFF_LIB) \
2N/A $(if $(VBOX_WITH_VMI),$(PATH_LIB)/VmiBiosBin$(VBOX_SUFF_LIB)) \
2N/Aifeq ($(KBUILD_TARGET),l4)
2N/A# DevicesR3 (library)
2N/ADevicesR3_TEMPLATE = VBOXR3
2N/ADevicesR3_DEFS += VBOX_HGCM_HOST_CODE \
2N/A $(if $(VBOX_WITH_VMI),VBOX_WITH_VMI,)
2N/ADevicesR3_DEFS += VBOX_WITH_HGCM
2N/ADevicesR3_SOURCES = \
2N/Aifdef VBOX_DYNAMIC_NET_ATTACH
2N/A DevicesR3_DEFS += VBOX_DYNAMIC_NET_ATTACH
2N/Aifdef VBOX_BIOS_DMI_FALLBACK
2N/A DevicesR3_DEFS += VBOX_BIOS_DMI_FALLBACK
2N/Aifdef VBOX_WITH_E1000
2N/A DevicesR3_DEFS += VBOX_WITH_E1000
2N/A DevicesR3_SOURCES += \
2N/Aifdef VBOX_WITH_VIRTIO
2N/A DevicesR3_DEFS += VBOX_WITH_VIRTIO
2N/A DevicesR3_SOURCES += \
2N/Aifdef VBOX_WITH_HGSMI
2N/A DevicesR3_DEFS += VBOX_WITH_HGSMI
2N/A DevicesR3_SOURCES += \
2N/A DevicesR3_DEFS += VBOXVDMA
2N/A DevicesR3_SOURCES += \
2N/Aifdef VBOXWDDM_WITH_VBVA
2N/A DevicesR3_DEFS += VBOXWDDM_WITH_VBVA
2N/Aifdef VBOX_WITH_VIDEOHWACCEL
2N/A DevicesR3_DEFS += VBOX_WITH_VIDEOHWACCEL
2N/Aifdef VBOX_WITH_DMI_CHASSIS
2N/A DevicesR3_DEFS += VBOX_WITH_DMI_CHASSIS
2N/Aifdef VBOX_WITH_DMI_OEMSTRINGS
2N/A DevicesR3_DEFS += VBOX_WITH_DMI_OEMSTRINGS
2N/A DevicesR3_SOURCES += \
2N/A DevicesR3_DEFS += VBOX_WITH_INIP
2N/A DevicesR3_DEFS += VBOX_WITH_AHCI IN_AHCI_R3
2N/A DevicesR3_SOURCES += \
2N/Aifdef VBOX_WITH_BUSLOGIC
2N/A DevicesR3_DEFS += VBOX_WITH_BUSLOGIC
2N/A DevicesR3_SOURCES += \
2N/Aifdef VBOX_WITH_LSILOGIC
2N/A DevicesR3_DEFS += VBOX_WITH_LSILOGIC
2N/A DevicesR3_SOURCES += \
2N/A DevicesR3_DEFS += VBOX_WITH_HPET
2N/A DevicesR3_DEFS += VBOX_WITH_SMC
2N/A DevicesR3_DEFS += VBOX_WITH_LPC
2N/A DevicesR3_DEFS += VBOX_WITH_EFI
2N/A ifdef VBOX_WITH_ALT_EFITHUNK
2N/A DevicesR3_DEFS += VBOX_WITH_ALT_EFITHUNK
2N/Aifdef VBOX_WITH_DYNAMIC_DSDT
2N/A DevicesR3_DEFS += VBOX_WITH_DYNAMIC_DSDT
2N/A DevicesR3_DEFS += VBOX_WITH_VUSB
2N/A DevicesR3_SOURCES += \
2N/A DevicesR3_DEFS += VBOX_WITH_USB
2N/A ifdef VBOX_WITH_EHCI
2N/A DevicesR3_DEFS += VBOX_WITH_EHCI
2N/A DevicesR3_SOURCES += \
2N/Aifdef VBOX_WITH_DTRACE_R3
2N/A DevicesR3_TEMPLATE = VBOXR3OSX105
2N/A DevicesR3_DEFS += VBOX_WITH_DTRACE
2N/A DevicesR3_INCS += $(DevicesR3_0_OUTDIR)
2N/A dtrace -C -h -o $@ -s $<
2N/Aifdef VBOX_WITH_DYNAMIC_DSDT
2N/A $(call MSG_TOOL,bin2c,DevicesR3,$<,$@)
2N/A $(QUIET)$(VBOX_BIN2C) -export VboxDslSource $< $@
2N/Aelse # !VBOX_WITH_DYNAMIC_DSDT
2N/A DevicesR3_CLEAN += \
2N/A $(call MSG_TOOL,iasl,DevicesR3,$<,$@)
2N/A $(QUIET)$(VBOX_IASLCMD) -tc -vs -p $@ $<
2N/A $(call MSG_TOOL,iasl,DevicesR3,$<,$@)
2N/A $(QUIET)$(RM) -f $@ $@.tmp
2N/A $(QUIET)$(VBOX_IASLCMD) -tc -vs -p $@ $<
2N/A $(QUIET)$(MV) -f $@ $@.tmp
2N/A $(QUIET)$(RM) -f $@.tmp
2N/A $(call MSG_TOOL,iasl,DevicesR3,$<,$@)
2N/A $(QUIET)$(RM) -f $@ $@.tmp $@.pre
2N/A $(QUIET)$(TOOL_$(VBOX_GCC_TOOL)_CC) -E -P -x c -o $@.pre $<
2N/A $(QUIET)$(VBOX_IASLCMD) -tc -vs -p $@ $@.pre
2N/A $(QUIET)$(MV) -f $@ $@.tmp
2N/A $(QUIET)$(RM) -f $@.tmp $@.pre
2N/Aendif # !VBOX_WITH_DYNAMIC_DSDT
2N/Aifdef VBOX_WITH_RAW_MODE
2N/A VBoxDDGC_TEMPLATE = VBoxRc
2N/A VBoxDDGC_SYSSUFF = .gc
2N/A ifeq ($(KBUILD_TARGET_ARCH),x86)
2N/A VBoxDDGC_SOURCES = \
2N/A ifdef VBOX_DYNAMIC_NET_ATTACH
2N/A VBoxDDGC_DEFS += VBOX_DYNAMIC_NET_ATTACH
2N/A ifdef VBOX_WITH_E1000
2N/A VBoxDDGC_DEFS += VBOX_WITH_E1000
2N/A VBoxDDGC_SOURCES += \
2N/A ifdef VBOX_WITH_VIRTIO
2N/A VBoxDDGC_DEFS += VBOX_WITH_VIRTIO
2N/A VBoxDDGC_SOURCES += \
2N/A ifdef VBOX_WITH_HGSMI
2N/A VBoxDDGC_DEFS += VBOX_WITH_HGSMI
2N/A VBoxDDGC_DEFS += VBOXVDMA
2N/A ifdef VBOXWDDM_WITH_VBVA
2N/A VBoxDDGC_DEFS += VBOXWDDM_WITH_VBVA
2N/A ifdef VBOX_WITH_VUSB
2N/A VBoxDDGC_DEFS += VBOX_WITH_VUSB
2N/A VBoxDDGC_SOURCES += \
2N/A VBoxDDGC_DEFS += VBOX_WITH_USB
2N/A ifdef VBOX_WITH_EHCI
2N/A VBoxDDGC_DEFS += VBOX_WITH_EHCI
2N/A VBoxDDGC_SOURCES += \
2N/A ifdef VBOX_WITH_HGSMI
2N/A VBoxDDGC_DEFS += VBOX_WITH_HGSMI
2N/A VBoxDDGC_DEFS += VBOXVDMA
2N/A ifdef VBOXWDDM_WITH_VBVA
2N/A VBoxDDGC_DEFS += VBOXWDDM_WITH_VBVA
2N/A ifdef VBOX_WITH_VIDEOHWACCEL
2N/A VBoxDDGC_DEFS += VBOX_WITH_VIDEOHWACCEL
2N/A ifdef VBOX_WITH_AHCI
2N/A VBoxDDGC_DEFS += VBOX_WITH_AHCI IN_AHCI_GC
2N/A VBoxDDGC_SOURCES += \
2N/A ifdef VBOX_WITH_BUSLOGIC
2N/A VBoxDDGC_DEFS += VBOX_WITH_BUSLOGIC
2N/A VBoxDDGC_SOURCES += \
2N/A ifdef VBOX_WITH_LSILOGIC
2N/A VBoxDDGC_DEFS += VBOX_WITH_LSILOGIC
2N/A VBoxDDGC_SOURCES += \
2N/A ifdef VBOX_WITH_HPET
2N/A VBoxDDGC_DEFS += VBOX_WITH_HPET
2N/A if1of ($(VBOX_LDR_FMT32), pe lx)
2N/A $(PATH_LIB)/VMMGCBuiltin$(VBOX_SUFF_LIB) \
2N/A $(PATH_LIB)/VMMGCImp$(VBOX_SUFF_LIB)
2N/Aendif # VBOX_WITH_RAW_MODE
VBoxDDR0_TEMPLATE = VBoxR0
ifdef VBOX_DYNAMIC_NET_ATTACH
VBoxDDR0_DEFS += VBOX_DYNAMIC_NET_ATTACH
VBoxDDR0_DEFS += VBOX_WITH_E1000
VBoxDDR0_DEFS += VBOX_WITH_VIRTIO
VBoxDDR0_DEFS += VBOX_WITH_HGSMI
VBoxDDR0_DEFS += VBOXVDMA
VBoxDDR0_DEFS += VBOXWDDM_WITH_VBVA
VBoxDDR0_DEFS += VBOX_WITH_VUSB
VBoxDDR0_DEFS += VBOX_WITH_USB
VBoxDDR0_DEFS += VBOX_WITH_EHCI
VBoxDDR0_DEFS += VBOX_WITH_AHCI IN_AHCI_R0
VBoxDDR0_DEFS += VBOX_WITH_BUSLOGIC
VBoxDDR0_DEFS += VBOX_WITH_LSILOGIC
VBoxDDR0_DEFS += VBOX_WITH_HGSMI
ifdef VBOX_WITH_VIDEOHWACCEL
VBoxDDR0_DEFS += VBOX_WITH_VIDEOHWACCEL
VBoxDDR0_DEFS += VBOXVDMA
VBoxDDR0_DEFS += VBOXWDDM_WITH_VBVA
VBoxDDR0_DEFS += VBOX_WITH_HPET
if1of ($(VBOX_LDR_FMT), pe lx)
$(PATH_LIB)/VMMR0Imp$(VBOX_SUFF_LIB) \
$(PATH_LIB)/SUP0$(VBOX_SUFF_LIB)
# VBoxDD2GC (LGPL sysmod)
VBoxDD2GC_TEMPLATE = VBoxRc
if1of ($(VBOX_LDR_FMT32), pe lx)
$(PATH_LIB)/VMMGCBuiltin$(VBOX_SUFF_LIB) \
$(PATH_LIB)/VMMGCImp$(VBOX_SUFF_LIB)
# VBoxDD2R0 (LGPL sysmod)
VBoxDD2R0_TEMPLATE = VBoxR0
VBoxDD2R0_DEFS = IN_RT_R0
if1of ($(VBOX_LDR_FMT), pe lx)
VBoxDD2R0_LIBS = $(PATH_LIB)/VMMR0Imp$(VBOX_SUFF_LIB)
ifeq ($(KBUILD_TARGET),l4) # We are using real Linux headers, not the cleaned up user space ones
Drivers_TEMPLATE = VBOXR3NP
Drivers_TEMPLATE = VBOXR3
Drivers_DEFS += VBOX_WITH_NETFLT
ifdef VBOX_WITH_DRV_DISK_INTEGRITY
Drivers_DEFS += VBOX_WITH_DRV_DISK_INTEGRITY
VBOX_WITH_SLIRP_BSD_MBUF=1
ifdef VBOX_WITH_SLIRP_BSD_MBUF
VBOX_SLIRP_BSD_ARCH = $(subst x86,i386,$(KBUILD_TARGET_ARCH))
VBOX_SLIRP_BSD_SOURCES += \
# some notes dnsproxy will probably deprecate
VBOX_SLIRP_ALIAS_SOURCES = \
# some day will be deleted
Drivers_SOURCES += $(VBOX_SLIRP_SOURCES)
define def_vbox_slirp_cflags
$(if $(VBOX_WITH_SLIRP_MEMORY_CHECK),RTMEM_WRAP_TO_EF_APIS,) \
$(if $(VBOX_WITH_DEBUG_NAT_SOCKETS),VBOX_WITH_DEBUG_NAT_SOCKETS,) \
$(if $(VBOX_WITH_SLIRP_MT),VBOX_WITH_SLIRP_MT,) \
$(if $(VBOX_WITH_SLIRP_BSD_MBUF),VBOX_WITH_SLIRP_BSD_MBUF,)
ifdef VBOX_WITH_SLIRP_BSD_MBUF
$(file)_INCS += $(1)
/slirp/bsd/$(VBOX_SLIRP_BSD_ARCH)/include
$(file)_INCS += $(1)/slirp
ifeq ($(KBUILD_TARGET),win)
$(file)_CFLAGS += -Wno-sign-compare
ifdef VBOX_WITH_SLIRP_BSD_MBUF
$(file)_CFLAGS += -Wno-format
$(file)_CFLAGS += -Wno-bad-function-cast
$(foreach file,$(VBOX_SLIRP_SOURCES),$(eval $(call def_vbox_slirp_cflags, Network)))
Drivers_SOURCES += $(VBOX_SLIRP_ALIAS_SOURCES)
define def_vbox_slirp_alias_cflags
$(file)_DEFS += VBOX_SLIRP_ALIAS
$(file)_INCS += $(1)/slirp
ifneq ($(KBUILD_TARGET),win)
$(file)_CFLAGS += -Wno-shadow
$(foreach file,$(VBOX_SLIRP_ALIAS_SOURCES),$(eval $(call def_vbox_slirp_cflags, Network)))
$(foreach file,$(VBOX_SLIRP_ALIAS_SOURCES),$(eval $(call def_vbox_slirp_alias_cflags, Network)))
ifdef VBOX_WITH_SLIRP_BSD_MBUF
VBOX_SLIRP_BSD_SOURCES += $(VBOX_SLIRP_BSD_SOURCES.${KBUILD_TARGET_ARCH})
Drivers_SOURCES += $(VBOX_SLIRP_BSD_SOURCES)
define def_vbox_slirp_bsd_cflags
$(file)_DEFS += VBOX_SLIRP_BSD
$(foreach file,$(VBOX_SLIRP_BSD_SOURCES),$(eval $(call def_vbox_slirp_cflags, Network)))
$(foreach file,$(VBOX_SLIRP_BSD_SOURCES),$(eval $(call def_vbox_slirp_bsd_cflags, Network)))
ifdef VBOX_WITH_DRV_DISK_INTEGRITY
ifeq ($(KBUILD_TARGET),darwin)
Drivers_SOURCES := $(filter-out \
ifeq ($(KBUILD_TARGET),freebsd)
Drivers_SOURCES := $(filter-out \
ifeq ($(KBUILD_TARGET),l4)
ifeq ($(KBUILD_TARGET),os2)
Drivers_SOURCES := $(filter-out \
ifeq ($(KBUILD_TARGET),solaris)
Drivers_SOURCES := $(filter-out \
ifdef VBOX_WITH_SOLARIS_OSS
Drivers_DEFS += VBOX_WITH_SOLARIS_OSS
Drivers_DEFS += VBOX_WITH_CROSSBOW
ifdef VBOX_WITH_SUID_WRAPPER
Drivers_DEFS += VBOX_WITH_SUID_WRAPPER
if defined(VBOX_WITH_NETFLT)
if defined(VBOX_NETFLT_ONDEMAND_BIND)
VBoxDDU_DEFS += VBOX_WITH_ISCSI
Drivers_DEFS += VBOX_WITH_VUSB
Drivers_DEFS += VBOX_WITH_USB
Drivers_DEFS += VBOX_WITH_VRDP
ifdef VBOX_WITH_NEW_USB_CODE_ON_DARWIN
VUSB_HAVE_USBPROXY_DEVICE \
$(if $(VBOX_WITH_LINUX_COMPILER_H),VBOX_WITH_LINUX_COMPILER_H,) \
$(if $(VBOX_USB_WITH_SYSFS),VBOX_USB_WITH_SYSFS,)
ifdef VBOX_WITH_PDM_ASYNC_COMPLETION
Drivers_DEFS += VBOX_WITH_PDM_ASYNC_COMPLETION
endif #VBOX_WITH_PDM_ASYNC_COMPLETION
Drivers_DEFS += VBOX_WITH_SCSI
# Ring-0 Services (library, linked into
VMMR0.r0)
ServicesR0_TEMPLATE = VBoxR0
ServicesR0_DEFS = IN_INTNET_R0 IN_RT_R0
# Internal Networking - Ring-3 Testcase for the Ring-0 code (a bit hackish).
ifdef VBOX_WITH_TESTCASES
tstIntNetR0_TEMPLATE = VBOXR3TSTEXE
tstIntNetR0_DEFS = IN_INTNET_R0
# Internal Networking - Ring-3 Testcase for the Ring-0 code (a bit hackish).
ifdef VBOX_WITH_TESTCASES
tstIntNet-1_TEMPLATE = VBOXR3TSTEXE
# EEPROM device unit test requires cppunit
ifdef VBOX_WITH_CPPUNIT_TESTCASES
tstDevEEPROM_TEMPLATE = VBOXCPPUNITEXE
tstDevPhy_TEMPLATE = VBOXCPPUNITEXE
tstDevPhy_DEFS = PHY_UNIT_TEST