# $Id: Makefile.kmk 5755 2007-11-15 13:03:25Z vboxsync $ ## @file # Top-level makefile for the devices, drivers and services. # # # Copyright (C) 2006-2007 innotek GmbH # # 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 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. # DEPTH = ../../.. include $(PATH_KBUILD)/subheader.kmk # Include sub-makefiles. include $(PATH_SUB_CURRENT)/PC/BIOS/Makefile.kmk include $(PATH_SUB_CURRENT)/Graphics/BIOS/Makefile.kmk include $(PATH_SUB_CURRENT)/testcase/Makefile.kmk include $(PATH_SUB_CURRENT)/Storage/testcase/Makefile.kmk # Subdirs with complex makefiles. ifdef VBOX_WITH_INTEL_PXE SUBDIRS_LIBRARIES = PC/PXE SUBDIRS_CLEAN = PC/PXE else SUBDIRS_LIBRARIES = PC/Etherboot-src SUBDIRS_CLEAN = PC/Etherboot-src endif ifndef VBOX_OSE SUBDIRS_LIBRARIES += Storage/VBoxHDDFormats endif # # Main targets. # LIBRARIES += DevicesR3 Drivers ServicesR0 DLLS += VBoxDDU VBoxDD VBoxDD2 SYSMODS += VBoxDDGC VBoxDD2GC VBoxDDR0 VBoxDD2R0 ## ## Enable the pdm lock (experimental). ## #DEFS += VBOX_WITH_PDM_LOCK # # VBoxDDU (shared object) # VBoxDDU_TEMPLATE = VBOXR3 VBoxDDU_DEFS = IN_VBOXDDU ifdef VBOX_WITH_USB VBoxDDU_DEFS += VBOX_WITH_USB IN_USBLIB VBoxDDU_SDKS.win = WINPSDK W2K3DDK ifdef VBOX_WITH_EHCI VBoxDDU_DEFS += VBOX_WITH_EHCI endif else VBoxDDU_SDKS.win = WINPSDK endif VBoxDDU_SOURCES = \ Storage/VBoxHDD-new.cpp \ Storage/VDICore.cpp \ Storage/VmdkHDDCore.cpp \ VBoxDDUDeps.cpp ifdef VBOX_WITH_USB VBoxDDU_SOURCES.win = \ USB/win32/USBLib-win32.cpp VBoxDDU_INCS.os2 += \ $(PATH_ROOT)/src/VBox/HostDrivers/VBoxUSB/os2 endif VBoxDDU_LIBS = \ $(LIB_RUNTIME) ifdef VBOX_WITH_USB VBoxDDU_LIBS += \ $(PATH_LIB)/USBLib$(VBOX_SUFF_LIB) endif ifeq ($(BUILD_TARGET),l4) VBoxDDU_LIBS += \ $(L4_LIBDIR)/libl4sys.p.a endif VBoxDDU_LDFLAGS.darwin = -install_name @executable_path/VBoxDDU.dylib VBoxDDU_LDFLAGS.linux = -Wl,--no-undefined VBoxDDU_LDFLAGS.l4 = -Wl,--no-undefined # # VBoxDD (shared object) # VBoxDD_TEMPLATE = VBOXR3 VBoxDD_SDKS.win = WINPSDK DXSDK W2K3DDK VBOX_NTDLL VBoxDD_SOURCES = \ Builtins.cpp VBoxDD_DEFS = VBOX_ACPI ifdef VBOX_WITH_USB VBoxDD_DEFS += VBOX_WITH_USB IN_USB_R3 ifdef VBOX_WITH_EHCI VBoxDD_DEFS += VBOX_WITH_EHCI endif endif ifdef VBOX_WITH_AHCI VBoxDD_DEFS += VBOX_WITH_AHCI endif ifdef VBOX_WITH_ISCSI VBoxDD_DEFS += VBOX_WITH_ISCSI endif ifndef VBOX_OSE VBoxDD_DEFS +=VBOX_WITH_E1000 endif VBoxDD_LIBS = \ $(PATH_LIB)/DevicesR3$(VBOX_SUFF_LIB) \ $(PATH_LIB)/Drivers$(VBOX_SUFF_LIB) \ $(PATH_LIB)/PcDefBiosLogo$(VBOX_SUFF_LIB) \ $(LIB_VMM) \ $(LIB_RUNTIME) ifeq ($(BUILD_TARGET),win) VBoxDD_LIBS += \ $(PATH_LIB)/VBoxDDU.lib \ $(PATH_LIB)/VBoxDD2.lib \ $(PATH_SDK_DXSDK_LIB)/dxguid.lib else VBoxDD_LIBS += \ $(INSTARGET_VBoxDDU) \ $(INSTARGET_VBoxDD2) endif ifeq ($(BUILD_TARGET),l4) VBoxDD_LIBS += \ $(L4_LIBDIR)/libl4sys.p.a endif ifeq ($(BUILD_TARGET),solaris) VBoxDD_LIBS += adm ifdef VBOX_WITH_CROSSBOW VBoxDD_LIBS += dlpi endif ifdef VBOX_WITH_SUID_WRAPPER VBoxDD_LIBS += secdb endif endif VBoxDD_LIBS.darwin += \ $(LIB_REM) VBoxDD_LDFLAGS.darwin = -install_name @executable_path/VBoxDD.dylib \ -framework CoreAudio \ -framework IOKit \ -framework Carbon \ -framework DiskArbitration VBoxDD_LDFLAGS.linux = -Wl,--no-undefined VBoxDD_LDFLAGS.l4 = -Wl,--no-undefined # damn, fix this. ifeq ($(BUILD_TARGET),win) $(PATH_LIB)/VBoxDD2.lib: $(PATH_BIN)/VBoxDD2.dll $(PATH_LIB)/VBoxDDU.lib: $(PATH_BIN)/VBoxDDU.dll endif # # VBoxDD2 (shared object) # VBoxDD2_TEMPLATE = VBOXR3 VBoxDD2_DEFS = IN_VBOXDD2 VBoxDD2_INCS := \ $(PATH_SUB_CURRENT) VBoxDD2_SOURCES = \ Builtins2.cpp \ PC/DevAPIC.cpp VBoxDD2_LIBS = \ $(PATH_LIB)/PcBiosBin$(VBOX_SUFF_LIB) \ $(PATH_LIB)/VgaBiosBin$(VBOX_SUFF_LIB) \ $(PATH_LIB)/NetBiosBin$(VBOX_SUFF_LIB) \ $(LIB_VMM) \ $(LIB_RUNTIME) ifeq ($(BUILD_TARGET),l4) VBoxDD2_LIBS += \ $(L4_LIBDIR)/libl4sys.p.a endif VBoxDD2_LIBS.darwin += $(LIB_REM) VBoxDD2_LDFLAGS.darwin = -install_name @executable_path/VBoxDD2.dylib VBoxDD2_LDFLAGS.linux = -Wl,--no-undefined VBoxDD2_LDFLAGS.l4 = -Wl,--no-undefined # # DevicesR3 (library) # DevicesR3_TEMPLATE = VBOXR3 DevicesR3_SDKS.win = WINPSDK W2K3DDK DevicesR3_INCS := \ $(PATH_SUB_CURRENT) DevicesR3_SOURCES = \ Input/DevPS2.cpp \ Bus/DevPCI.cpp \ Graphics/DevVGA.cpp \ Storage/DevATA.cpp \ PC/DevPit-i8254.cpp \ PC/DevPIC.cpp \ PC/DevACPI.cpp \ PC/DevRTC.cpp \ PC/DevPcBios.cpp \ PC/DevPcArch.c \ VMMDev/VBoxDev.cpp \ VMMDev/VMMDevHGCM.cpp \ Network/DevPCNet.cpp \ Audio/DevIchAc97.cpp \ PC/DevDMA.cpp \ Storage/fdc.c \ Serial/DevSerial.cpp \ Parallel/DevParallel.cpp ifndef VBOX_OSE DevicesR3_SOURCES += \ Network/DevE1000.cpp \ Network/DevEEPROM.cpp DevicesR3_DEFS += VBOX_WITH_E1000 endif ifdef VBOX_WITH_AHCI DevicesR3_DEFS += VBOX_WITH_AHCI IN_AHCI_R3 DevicesR3_SOURCES += \ Storage/DevAHCI.cpp endif ifdef VBOX_WITH_USB DevicesR3_DEFS += VBOX_WITH_USB IN_USB_R3 DevicesR3_SOURCES += \ USB/DevOHCI.cpp ifdef VBOX_WITH_EHCI DevicesR3_DEFS += VBOX_WITH_EHCI DevicesR3_SOURCES += \ USB/DevEHCI.cpp endif endif DevicesR3_DEFS += VBOX_HGCM DevicesR3_DEFS.linux += _GNU_SOURCE DevicesR3_DEFS.l4 += _GNU_SOURCE # DevACPI.cpp needs vboxaml.hex which we generate from PC/vbox.dsl. DevicesR3_CLEAN += $(PATH_TARGET)/vboxaml.hex $(PATH_TARGET)/vboxaml.aml PC/DevACPI.cpp_DEPS = $(PATH_TARGET)/vboxaml.hex PC/DevACPI.cpp_INCS = $(PATH_TARGET) $(PATH_TARGET)/vboxaml.hex: PC/vbox.dsl $(call MSG_TOOL,iasl,DevicesR3,$<,$@) $(QUIET)$(VBOX_IASLCMD) -tc -vs -p $@ $< # For finding PCIInternal.h from VBox/pci.h. Bus/DevPCI.cpp_INCS = Bus # for finding vbetables.h Graphics/DevVGA.cpp_INCS = $(PATH_TARGET) # # VBoxDDGC (sysmod) # VBoxDDGC_TEMPLATE = VBOXGC VBoxDDGC_DEFS = VBoxDDGC_SYSSUFF = .gc VBoxDDGC_INCS := \ $(PATH_SUB_CURRENT) VBoxDDGC_SOURCES = \ Bus/DevPCI.cpp \ Graphics/DevVGA.cpp \ Input/DevPS2.cpp \ PC/DevACPI.cpp \ PC/DevPit-i8254.cpp \ PC/DevPIC.cpp \ PC/DevRTC.cpp \ Storage/DevATA.cpp \ Network/DevPCNet.cpp \ Serial/DevSerial.cpp \ Parallel/DevParallel.cpp ifdef VBOX_WITH_USB VBoxDDGC_DEFS += VBOX_WITH_USB IN_USB_GC VBoxDDGC_SOURCES += \ USB/DevOHCI.cpp ifdef VBOX_WITH_EHCI VBoxDDGC_DEFS += VBOX_WITH_EHCI VBoxDDGC_SOURCES += \ USB/DevEHCI.cpp endif endif ifdef VBOX_WITH_AHCI VBoxDDGC_DEFS += VBOX_WITH_AHCI IN_AHCI_GC VBoxDDGC_SOURCES += \ Storage/DevAHCI.cpp endif ifeq ($(VBOX_LDR_FMT32),pe) VBoxDDGC_LDFLAGS = -Entry:vgaMMIOWrite endif ifneq ($(filter pe lx,$(VBOX_LDR_FMT32)),) VBoxDDGC_LIBS = \ $(PATH_LIB)/VMMGCBuiltin$(VBOX_SUFF_LIB) \ $(PATH_LIB)/VMMGCImp$(VBOX_SUFF_LIB) endif # # VBoxDDR0 (sysmod) # VBoxDDR0_TEMPLATE = VBOXR0 VBoxDDR0_SYSSUFF = .r0 VBoxDDR0_DEFS = IN_RT_R0 VBoxDDR0_INCS := \ $(PATH_SUB_CURRENT) VBoxDDR0_SOURCES = \ Bus/DevPCI.cpp \ Graphics/DevVGA.cpp \ Input/DevPS2.cpp \ PC/DevACPI.cpp \ PC/DevPit-i8254.cpp \ PC/DevPIC.cpp \ PC/DevRTC.cpp \ Storage/DevATA.cpp \ Network/DevPCNet.cpp \ Serial/DevSerial.cpp \ Parallel/DevParallel.cpp ifdef VBOX_WITH_USB VBoxDDR0_DEFS += VBOX_WITH_USB IN_USB_R0 VBoxDDR0_SOURCES += \ USB/DevOHCI.cpp ifdef VBOX_WITH_EHCI VBoxDDR0_DEFS += VBOX_WITH_EHCI VBoxDDR0_SOURCES += \ USB/DevEHCI.cpp endif endif ifdef VBOX_WITH_AHCI VBoxDDR0_DEFS += VBOX_WITH_AHCI IN_AHCI_R0 VBoxDDR0_SOURCES += \ Storage/DevAHCI.cpp endif ifeq ($(VBOX_LDR_FMT32),pe) VBoxDDR0_LDFLAGS = -Entry:vgaMMIOWrite endif ifneq ($(filter pe lx,$(VBOX_LDR_FMT32)),) VBoxDDR0_LIBS = $(PATH_LIB)/VMMR0Imp$(VBOX_SUFF_LIB) endif VBoxDDR0_LIBS += $(PATH_LIB)/RuntimeR0$(VBOX_SUFF_LIB) ifeq ($(VBOX_LDR_FMT32),elf) # this is template stuff! VBoxDDR0_LIBS += $(VBOX_GCC_LIBGCC) endif # # VBoxDD2GC (LGPL sysmod) # VBoxDD2GC_TEMPLATE = VBOXGC VBoxDD2GC_DEFS = VBoxDD2GC_SYSSUFF = .gc VBoxDD2GC_INCS := \ $(PATH_SUB_CURRENT) VBoxDD2GC_SOURCES = \ PC/DevAPIC.cpp ifeq ($(VBOX_LDR_FMT32),pe) VBoxDD2GC_LDFLAGS = -Entry:apicMMIOWrite endif ifneq ($(filter pe lx,$(VBOX_LDR_FMT32)),) VBoxDD2GC_LIBS = \ $(PATH_LIB)/VMMGCBuiltin$(VBOX_SUFF_LIB) \ $(PATH_LIB)/VMMGCImp$(VBOX_SUFF_LIB) endif # # VBoxDD2R0 (LGPL sysmod) # VBoxDD2R0_TEMPLATE = VBOXR0 VBoxDD2R0_DEFS = IN_RT_R0 VBoxDD2R0_SYSSUFF = .r0 VBoxDD2R0_INCS := \ $(PATH_SUB_CURRENT) VBoxDD2R0_SOURCES = \ PC/DevAPIC.cpp ifeq ($(VBOX_LDR_FMT),pe) VBoxDD2R0_LDFLAGS = -Entry:apicMMIOWrite endif ifneq ($(filter pe lx,$(VBOX_LDR_FMT)),) VBoxDD2R0_LIBS = $(PATH_LIB)/VMMR0Imp$(VBOX_SUFF_LIB) endif VBoxDD2R0_LIBS += $(PATH_LIB)/RuntimeR0$(VBOX_SUFF_LIB) ifeq ($(VBOX_LDR_FMT),elf) VBoxDD2R0_LIBS += $(VBOX_GCC_LIBGCC) endif # # Drivers (library) # ifeq ($(BUILD_TARGET),l4) # We are using real Linux headers, not the cleaned up user space ones Drivers_TEMPLATE = VBOXR3NP else Drivers_TEMPLATE = VBOXR3 endif Drivers_SDKS.win = WINPSDK W2K3DDK Storage/DrvHostDVD.cpp_SDKS.win = W2K3DDK Drivers_DEFS = IN_IDE_R3 Drivers_DEFS.win.x86 += _WIN32_WINNT=0x0500 Drivers_DEFS.win.amd64 += _WIN32_WINNT=0x0510 Drivers_INCS := \ $(PATH_SUB_CURRENT) \ Network/slirp Drivers_SOURCES = \ Audio/audio.c \ Audio/audiosniffer.c \ Audio/mixeng.c \ Audio/noaudio.c \ Input/DrvKeyboardQueue.cpp \ Input/DrvMouseQueue.cpp \ Network/DrvIntNet.cpp \ Network/DrvNAT.cpp \ Network/DrvNetSniffer.cpp \ Network/slirp/bootp.c \ Network/slirp/cksum.c \ Network/slirp/debug.c \ Network/slirp/if.c \ Network/slirp/ip_icmp.c \ Network/slirp/ip_input.c \ Network/slirp/ip_output.c \ Network/slirp/mbuf.c \ Network/slirp/misc.c \ Network/slirp/sbuf.c \ Network/slirp/slirp.c \ Network/slirp/socket.c \ Network/slirp/tcp_input.c \ Network/slirp/tcp_output.c \ Network/slirp/tcp_subr.c \ Network/slirp/tcp_timer.c \ Network/slirp/tftp.c \ Network/slirp/udp.c \ PC/DrvACPI.cpp \ Serial/DrvChar.cpp \ Serial/DrvNamedPipe.cpp \ Storage/DrvBlock.cpp \ Storage/DrvHostBase.cpp \ Storage/DrvHostDVD.cpp \ Storage/DrvHostFloppy.cpp \ Storage/DrvHostRawDisk.cpp \ Storage/DrvMediaISO.cpp \ Storage/DrvRawImage.cpp \ Storage/DrvVD.cpp \ Storage/DrvVmdk.cpp \ Storage/VBoxHDD.cpp # -- OS specific -- ifeq ($(BUILD_TARGET),darwin) Drivers_SOURCES := $(filter-out \ Storage/DrvHostRaw% \ Storage/DrvHostFloppy% \ , $(Drivers_SOURCES)) \ Audio/coreaudio.c Drivers_SOURCES.darwin = endif # darwin ifeq ($(BUILD_TARGET),freebsd) Drivers_SOURCES := $(filter-out \ Storage/DrvHost% \ , $(Drivers_SOURCES)) Drivers_SOURCES.freebsd = endif # freebsd ifeq ($(BUILD_TARGET),l4) Drivers_SOURCES = \ Input/DrvMouseQueue.cpp \ Input/DrvKeyboardQueue.cpp \ Storage/VBoxHDD.cpp \ Storage/DrvBlock.cpp \ Storage/DrvMediaISO.cpp \ Storage/DrvRawImage.cpp \ Storage/DrvHostBase.cpp \ Storage/DrvHostDVD.cpp \ Storage/DrvVD.cpp \ PC/DrvACPI.cpp \ Network/DrvIntNet.cpp \ Network/DrvNetSniffer.cpp \ Audio/audio.c \ Audio/mixeng.c \ Audio/noaudio.c \ Audio/audiosniffer.c Drivers_SOURCES.l4 = \ Network/DrvTAP.cpp \ Audio/ossaudio.c endif # l4 Drivers_SOURCES.linux = \ Network/DrvTAP.cpp \ Audio/ossaudio.c \ Parallel/DrvHostParallel.cpp \ Serial/DrvHostSerial.cpp ifeq ($(BUILD_TARGET),os2) Drivers_SOURCES := $(filter-out \ Storage/DrvHost% \ , $(Drivers_SOURCES)) Drivers_SOURCES.os2 = \ Network/DrvTAPOs2.cpp endif ifeq ($(BUILD_TARGET),solaris) Drivers_SOURCES := $(filter-out \ Storage/DrvHost% \ , $(Drivers_SOURCES)) Drivers_SOURCES.solaris = \ Audio/solaudio.c \ Network/DrvTAP.cpp \ Storage/DrvHostBase.cpp \ Storage/DrvHostDVD.cpp ifdef VBOX_WITH_CROSSBOW Drivers_DEFS += VBOX_WITH_CROSSBOW endif ifdef VBOX_WITH_SUID_WRAPPER Drivers_DEFS += VBOX_WITH_SUID_WRAPPER endif endif Drivers_SOURCES.win = \ Network/DrvTAPWin32.cpp \ Audio/dsoundaudio.c \ Serial/DrvHostSerial.cpp # -- features -- ifdef VBOX_WITH_ISCSI Drivers_SOURCES += \ Storage/DrvISCSI.cpp \ Storage/DrvISCSITransportTCP.cpp Drivers_DEFS += VBOX_WITH_ISCSI endif # VBOX_WITH_ISCSI ifdef VBOX_WITH_ALSA Drivers_DEFS.linux += VBOX_WITH_ALSA Drivers_SOURCES.linux+= \ Audio/alsaaudio.c \ Audio/alsa_stubs.c # VBoxDD_LIBS.linux += asound endif ifdef VBOX_WITH_USB Drivers_DEFS += VBOX_WITH_USB IN_USB_R3 Drivers_SOURCES += \ USB/DrvVUSBRootHub.cpp \ USB/VUSBDevice.cpp \ USB/VUSBUrb.cpp ifdef VBOX_WITH_VRDP Drivers_DEFS += VBOX_VRDP Drivers_SOURCES += \ USB/vrdp/USBProxyDevice-vrdp.cpp endif Drivers_DEFS.darwin += VUSB_HAVE_USBPROXY_DEVICE #Drivers_DEFS.darwin += VBOX_WITH_USBFILTER Drivers_SOURCES.darwin += \ USB/USBProxyDevice.cpp \ USB/darwin/USBProxyDevice-darwin.cpp Drivers_DEFS.linux += VUSB_HAVE_USBPROXY_DEVICE ifdef VBOX_WITHOUT_LINUX_COMPILER_H Drivers_DEFS.linux += VBOX_WITHOUT_LINUX_COMPILER_H endif Drivers_SOURCES.linux+= \ USB/USBProxyDevice.cpp \ USB/linux/USBProxyDevice-linux.cpp Drivers_DEFS.l4 += VUSB_HAVE_USBPROXY_DEVICE Drivers_SOURCES.l4 += \ USB/USBProxyDevice.cpp \ USB/linux/USBProxyDevice-linux.cpp Drivers_DEFS.os2 += VUSB_HAVE_USBPROXY_DEVICE Drivers_INCS.os2 += $(PATH_ROOT)/src/VBox/HostDrivers/VBoxUSB/os2 Drivers_SOURCES.os2 += \ USB/USBProxyDevice.cpp \ USB/os2/USBProxyDevice-os2.cpp Drivers_DEFS.win += VUSB_HAVE_USBPROXY_DEVICE Drivers_SOURCES.win += \ USB/USBProxyDevice.cpp \ USB/win32/USBProxyDevice-win32.cpp endif # VBOX_WITH_USB # # Ring-0 Services (library, linked into VMMR0.r0) # ServicesR0_TEMPLATE = VBOXR0 ServicesR0_DEFS = IN_INTNET_R0 IN_RT_R0 ServicesR0_SOURCES = \ Network/SrvIntNetR0.cpp # # Internal Networking - Ring-3 Testcase for the Ring-0 code (a bit hackish). # ifdef VBOX_WITH_TESTCASES PROGRAMS += tstIntNetR0 tstIntNetR0_TEMPLATE = VBOXR3TSTEXE tstIntNetR0_DEFS = IN_INTNET_R0 tstIntNetR0_SOURCES = \ Network/testcase/tstIntNetR0.cpp endif # # EEPROM device unit test requires cppunit # ifdef VBOX_WITH_CPPUNIT_TESTCASES ifndef VBOX_OSE PROGRAMS += tstDevEEPROM tstDevEEPROM_TEMPLATE = VBOXCPPUNITEXE tstDevEEPROM_SOURCES = \ Network/testcase/tstDevEEPROM.cpp tstDevEEPROM_LIBS = \ $(TARGET_DevicesR3) endif endif include $(PATH_KBUILD)/subfooter.kmk