# $Id: Makefile.kmk 8547 2008-05-03 00:54:40Z vboxsync $ ## @file # Makefile for the VBox Main module. # # # Copyright (C) 2006-2007 Sun Microsystems, Inc. # # 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. # # Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa # Clara, CA 95054 USA or visit http://www.sun.com if you need # additional information or have any questions. # DEPTH = ../../.. include $(PATH_KBUILD)/subheader.kmk # Include sub-makefile(s) first if we're doing parallel building. # This is primarily a hack to try avoid idling all but one cpu when # building the gigant soap sources. ifneq ($(KMK_OPTS_JOBS),1) ifdef VBOX_WITH_WEBSERVICES include $(PATH_SUB_CURRENT)/webservice/Makefile.kmk endif include $(PATH_SUB_CURRENT)/testcase/Makefile.kmk endif # targets++ LIBRARIES += VBoxCOM DLLS += VBoxSettings VBoxC PROGRAMS += VBoxSVC VBOX_MAIN_DEFS = ifneq ($(BUILD_TARGET),win) ifndef VBOX_WITH_XPCOM $(error "VBox: VBOX_WITH_XPCOM isn't defined") endif DLLS += VBoxSVCM ifneq ($(BUILD_TARGET),os2) VBOX_MAIN_DEFS+= VBOX_WITH_SYS_V_IPC_SESSION_WATCHER endif VBOX_MAIN_DEFS += VBOX_WITH_UNIXY_TAP_NETWORKING endif ifneq ($(VBOX_VERSION_MAJOR)$(VBOX_VERSION_MINOR)$(VBOX_VERSION_BUILD),160) VBOX_MAIN_DEFS += VBOX_MAIN_AUTOLOCK_TRAP endif ## @todo later when RTSemRWIsWriteOwner and RTSemRWGetWriteRecursion are done #ifeq ($(filter-out linux darwin freebsd solaris,$(BUILD_TARGET)),) # VBOX_MAIN_DEFS += VBOX_MAIN_USE_SEMRW #endif ## @todo eliminate or expand VBOX_MAIN_DEFS. #PROGRAMS += tstCFGLdr ifeq ($(BUILD_TARGET),win) OTHERS += $(PATH_BIN)/comregister.cmd IDLFILE = $(VBOX_PATH_SDK)/idl/VirtualBox.idl OTHER_CLEAN += \ $(PATH_BIN)/comregister.cmd \ $(VBOX_PATH_SDK)/include/VirtualBox.h \ $(IDLFILE) \ $(VBOX_PATH_SDK)/lib/VirtualBox.tlb \ $(VBOX_PATH_SDK)/lib/VirtualBox_i.c \ $(PATH_VBoxCOM)/VirtualBox.h \ $(PATH_VBoxCOM)/VirtualBox_i.c \ $(PATH_VBoxCOM)/VirtualBox.tlb else INSTALLS += xpcom-components IDLFILE = $(VBOX_PATH_SDK)/idl/VirtualBox_XPCOM.idl ifeq ($(BUILD_TARGET),linux) IDLTYPELIB = $(PATH_BIN)/VirtualBox_XPCOM.xpt else IDLTYPELIB = $(PATH_BIN)/components/VirtualBox_XPCOM.xpt endif IDLHEADER = $(VBOX_PATH_SDK)/include/VirtualBox_XPCOM.h OTHERS += $(IDLTYPELIB) OTHER_CLEAN += \ $(IDLFILE) \ $(IDLHEADER) \ $(IDLTYPELIB) endif # # The Main API documentation # docs: $(PATH_TARGET)/docs.Main $(PATH_TARGET)/docs.Main: \ Doxyfile.Main \ idl/doxygen.xsl \ idl/VirtualBox.xidl \ | $(call DIRDEP, $(PATH_TARGET)) \ $(call DIRDEP, $(PATH_OUT)/docs/Main) $(RM) -f $(wildcard $(PATH_OUT)/docs/Main/html/*) $(VBOX_XSLTPROC) -o $(PATH_TARGET)/VirtualBox.idl idl/doxygen.xsl idl/VirtualBox.xidl $(REDIRECT) -E 'PATH_OUT=$(PATH_OUT)' -E 'PATH_TARGET=$(PATH_TARGET)' -E 'PATH_CHM=$(subst /,\,$(PATH_BIN)/VirtualBoxAPI.chm)' \ -- doxygen Doxyfile.Main -$(EXEC_X86_WIN32) $(VBOX_PATH_HTML_HELP_WORKSHOP)/hhc.exe $(subst /,\\,$(PATH_OUT)/docs/Main/html/index.hhp) $(APPEND) $(PATH_TARGET)/docs.Main $(call DIRDEP, $(PATH_OUT)/docs/Main): $(MKDIR) -p $@ # # VBoxSVC executable # VBoxSVC_TEMPLATE = VBOXMAINEXE VBoxSVC_DEFS = VBOX_MAIN_SETTINGS_ADDONS $(VBOX_MAIN_DEFS) ifdef VBOX_WITH_VRDP VBoxSVC_DEFS += VBOX_VRDP endif ifdef VBOX_WITH_HGCM VBoxSVC_DEFS += VBOX_HGCM endif ifdef VBOX_MAIN_RELEASE_LOG VBoxSVC_DEFS += VBOX_MAIN_RELEASE_LOG LOG_ENABLED endif ifdef VBOX_WITH_USB VBoxSVC_DEFS += VBOX_WITH_USB ifdef VBOX_WITH_EHCI VBoxSVC_DEFS += VBOX_WITH_EHCI endif ifdef VBOX_WITH_NEW_USB_CODE_ON_DARWIN VBoxSVC_DEFS += VBOX_WITH_NEW_USB_CODE_ON_DARWIN endif endif ifdef VBOX_WITH_ALSA VBoxSVC_DEFS += VBOX_WITH_ALSA endif ifdef VBOX_WITH_PULSE VBoxSVC_DEFS += VBOX_WITH_PULSE endif ifdef VBOX_WITH_WINMM VBoxSVC_DEFS += VBOX_WITH_WINMM endif ifdef VBOX_WITH_E1000 VBoxSVC_DEFS += VBOX_WITH_E1000 endif ifdef VBOX_WITH_AHCI VBoxSVC_DEFS += VBOX_WITH_AHCI endif ifdef VBOX_WITHOUT_LINUX_COMPILER_H VBoxSVC_DEFS += VBOX_WITHOUT_LINUX_COMPILER_H endif VBoxSVC_DEFS.win += VBOX_COM_OUTOFPROC_MODULE VBoxSVC_DEFS.win.x86 += _WIN32_WINNT=0x0500 VBoxSVC_DEFS.win.amd64 += _WIN32_WINNT=0x0510 VBoxSVC_DEFS.linux += VBOX_USE_LIBHAL VBoxSVC_DEFS.solaris += VBOX_USE_LIBHAL VBoxSVC_INCS = \ include \ $(PATH_VBoxSVC) \ $(PATH_CURRENT) VBoxSVC_INCS.win = \ $(PATH_VBoxCOM) ifdef VBOX_WITH_USB VBoxSVC_INCS.os2 = \ $(PATH_ROOT)/src/VBox/HostDrivers/VBoxUSB/os2 endif VBoxSVC_LIBS += \ $(LIB_DDU) \ $(LIB_SETTINGS) VBoxSVC_LIBS.darwin = \ $(LIB_VMM) \ $(LIB_REM) VBoxSVC_LIBS.solaris = \ adm \ devinfo VBoxSVC_SOURCES = \ Logging.cpp \ AutoLock.cpp \ Matching.cpp \ VirtualBoxBase.cpp \ VirtualBoxErrorInfoImpl.cpp \ VirtualBoxImpl.cpp \ VirtualBoxImplExtra.cpp \ MachineImpl.cpp \ SnapshotImpl.cpp \ HardDiskImpl.cpp \ HardDiskAttachmentImpl.cpp \ ProgressImpl.cpp \ DVDDriveImpl.cpp \ DVDImageImpl.cpp \ FloppyDriveImpl.cpp \ FloppyImageImpl.cpp \ HostImpl.cpp \ HostDVDDriveImpl.cpp \ HostFloppyDriveImpl.cpp \ GuestOSTypeImpl.cpp \ NetworkAdapterImpl.cpp \ SerialPortImpl.cpp \ ParallelPortImpl.cpp \ USBControllerImpl.cpp \ SATAControllerImpl.cpp \ AudioAdapterImpl.cpp \ SharedFolderImpl.cpp \ SystemPropertiesImpl.cpp \ BIOSSettingsImpl.cpp ifdef VBOX_WITH_VRDP VBoxSVC_SOURCES += VRDPServerImpl.cpp endif VBoxSVC_SOURCES.darwin = \ darwin/iokit.cpp VBoxSVC_SOURCES.win = \ HostNetworkInterfaceImpl.cpp \ win32/svcmain.cpp \ win32/svchlp.cpp \ win32/VBoxSVC.rc VBoxSVC_SOURCES.linux = \ linux/vbox-libhal.cpp VBoxSVC_SOURCES.solaris = \ linux/vbox-libhal.cpp ifdef VBOX_WITH_XPCOM VBoxSVC_SOURCES += \ linux/server.cpp endif ifdef VBOX_WITH_USB VBoxSVC_SOURCES += \ USBDeviceFilterImpl.cpp \ USBProxyService.cpp \ HostUSBDeviceImpl.cpp VBoxSVC_SOURCES.darwin += darwin/USBProxyServiceDarwin.cpp VBoxSVC_SOURCES.linux += linux/USBProxyServiceLinux.cpp VBoxSVC_SOURCES.os2 += os2/USBProxyServiceOs2.cpp VBoxSVC_SOURCES.solaris += solaris/USBProxyServiceSolaris.cpp VBoxSVC_SOURCES.win += win32/USBProxyServiceWin32.cpp endif VBoxSVC_LDFLAGS.darwin = -framework IOKit ifeq ($(BUILD_TYPE),debug) VBoxSVC_LDFLAGS.linux += -rdynamic # for backtrace_symbols() endif win32/VBoxSVC.rc_DEPS = $(PATH_TARGET)/VBoxSVC.rgs # # VBoxSVC wrapper module # ifdef VBOX_WITH_XPCOM VBoxSVCM_TEMPLATE = VBOXMAINDLL ifneq ($(BUILD_TARGET),linux) VBoxSVCM_INST = $(INST_BIN)components/ endif VBoxSVCM_DEFS = IN_RING3 $(VBOX_MAIN_DEFS) VBoxSVCM_INCS = \ include \ $(PATH_VBoxC) \ $(PATH_CURRENT) VBoxSVCM_SOURCES = \ linux/server_module.cpp ifdef VBOX_WITH_ORIGIN VBoxSVCM_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$$(VBOX_ORIGIN)/..' endif VBoxSVCM_LDFLAGS.darwin = \ -install_name @executable_path/components/VBoxSVCM.dylib \ -exported_symbols_list $(PATH_TARGET)/VBoxSVCM.def ifeq ($(BUILD_TARGET),darwin) VBoxSVCM_ORDERDEPS += $(PATH_TARGET)/VBoxSVCM.def VBoxSVCM_CLEAN += $(PATH_TARGET)/VBoxSVCM.def $(PATH_TARGET)/VBoxSVCM.def: $(RM) -f $@ $(APPEND) $@ _NSGetModule endif endif # VBOX_WITH_XPCOM # # VBoxC module # VBoxC_TEMPLATE = VBOXMAINDLL ifneq ($(filter-out linux win,$(BUILD_TARGET)),) VBoxC_INST = $(INST_BIN)components/ endif VBoxC_DEFS = IN_RING3 $(VBOX_MAIN_DEFS) VBoxC_DEFS += VBOX_COM_INPROC ifdef VBOX_WITH_VRDP VBoxC_DEFS += VBOX_VRDP endif ifdef VBOX_WITH_HGCM VBoxC_DEFS += VBOX_HGCM endif ifdef VBOX_MAIN_RELEASE_LOG VBoxC_DEFS += VBOX_MAIN_RELEASE_LOG LOG_ENABLED endif ifdef VBOX_WITH_USB VBoxC_DEFS += VBOX_WITH_USB ifdef VBOX_WITH_EHCI VBoxC_DEFS += VBOX_WITH_EHCI endif endif ifdef VBOX_WITH_ALSA VBoxC_DEFS += VBOX_WITH_ALSA endif ifdef VBOX_WITH_PULSE VBoxC_DEFS += VBOX_WITH_PULSE endif ifdef VBOX_WITH_WINMM VBoxC_DEFS += VBOX_WITH_WINMM endif ifdef VBOX_WITH_CROSSBOW VBoxC_DEFS += VBOX_WITH_CROSSBOW endif ifdef VBOX_WITH_E1000 VBoxC_DEFS += VBOX_WITH_E1000 endif VBoxC_DEFS.win.x86 += _WIN32_WINNT=0x0500 VBoxC_DEFS.win.amd64 += _WIN32_WINNT=0x0510 VBoxC_INCS = \ include \ $(PATH_VBoxC) VBoxC_INCS.win = \ $(PATH_VBoxCOM) \ $(PATH_SUB_CURRENT) ifdef VBOX_WITH_ORIGIN VBoxC_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$$(VBOX_ORIGIN)/..' endif VBoxC_LDFLAGS.darwin = \ -install_name @executable_path/components/VBoxSVCM.dylib \ -exported_symbols_list $(PATH_TARGET)/VBoxC.def ifdef VBOX_USE_VCC80 VBoxC_LDFLAGS.win = /MANIFEST endif VBoxC_LIBS += \ $(LIB_VMM) \ $(LIB_REM) VBoxC_SOURCES = \ Logging.cpp \ AutoLock.cpp \ VBoxDll.cpp \ Version.cpp \ USBDeviceImpl.cpp \ RemoteUSBDeviceImpl.cpp \ VirtualBoxBase.cpp \ VirtualBoxErrorInfoImpl.cpp \ ProgressImpl.cpp \ SharedFolderImpl.cpp \ SessionImpl.cpp \ ConsoleImpl.cpp \ ConsoleImpl2.cpp \ ConsoleVRDPServer.cpp \ GuestImpl.cpp \ KeyboardImpl.cpp \ MouseImpl.cpp \ DisplayImpl.cpp \ FramebufferImpl.cpp \ MachineDebuggerImpl.cpp \ VBoxDriversRegister.cpp \ AudioSnifferInterface.cpp \ VMMDevInterface.cpp VBoxC_SOURCES.win = \ win32/dllmain.cpp \ win32/VBoxC.def \ win32/VBoxC.rc ifdef VBOX_WITH_XPCOM VBoxC_SOURCES += \ linux/module.cpp endif ifdef VBOX_WITH_HGCM VBoxC_SOURCES += \ hgcm/HGCMObjects.cpp \ hgcm/HGCMThread.cpp \ hgcm/HGCM.cpp endif ifdef VBOX_WITH_USB VBoxC_SOURCES += \ RemoteUSBBackend.cpp endif ifeq ($(BUILD_TARGET),darwin) VBoxC_ORDERDEPS += $(PATH_TARGET)/VBoxC.def VBoxC_CLEAN += $(PATH_TARGET)/VBoxC.def $(PATH_TARGET)/VBoxC.def: $(MAKEFILE_CURRENT) $(RM) -f $@ $(APPEND) $@ _NSGetModule $(APPEND) $@ _VBoxDriversRegister endif # Version.cpp uses VBOX_SVN_REV. Version.cpp_DEFS = VBOX_SVN_REV=$(VBOX_SVN_REV) Version.cpp_DEPS = $(VBOX_SVN_REV_KMK) ConsoleImpl.cpp_DEFS = VBOX_BUILD_TARGET=\"$(BUILD_TARGET).$(BUILD_TARGET_ARCH)\" win32/VBoxC.rc_DEPS = $(PATH_TARGET)/VBoxC.rgs $(PATH_VBoxCOM)/VirtualBox.tlb # # VBoxSettings # VBoxSettings_TEMPLATE = VBOXMAINDLL VBoxSettings_NAME = $(basename $(notdir $(LIB_SETTINGS))) VBoxSettings_SDKS = VBOX_LIBXSLT VBOX_LIBXML2 VBOX_ZLIB VBoxSettings_DEFS = IN_VBOXSETTINGS_R3 VBoxSettings_INCS = \ include \ $(PATH_TARGET) VBoxSettings_SOURCES = \ xml/Settings.cpp VBoxSettings_LDFLAGS.darwin = -install_name @executable_path/$(notdir $(LIB_SETTINGS)) -Wl,-x # no debug info please. # # VBoxCOM - COM Abstraction Layer library # VBoxCOM_TEMPLATE = VBOXMAINLIB VBoxCOM_SOURCES = \ glue/com.cpp \ glue/initterm.cpp \ glue/string.cpp \ glue/EventQueue.cpp \ glue/ErrorInfo.cpp ifeq ($(BUILD_TARGET),win) VBoxCOM_DEFS.x86 += _WIN32_WINNT=0x0500 VBoxCOM_DEFS.amd64 += _WIN32_WINNT=0x0510 VBoxCOM_SOURCES += \ $(PATH_VBoxCOM)/VirtualBox_i.c else VBoxCOM_INCS += \ include VBoxCOM_SOURCES += \ linux/helpers.cpp endif # # Generate _DEPS on all sources which depends on generated headers. # ifeq ($(BUILD_TARGET),win) PREREQS = $(PATH_VBoxCOM)/VirtualBox_i.c else PREREQS = $(IDLTYPELIB) $(IDLHEADER) endif # brute force way to ensure the prereqs are generated before anything is compiled. define def_src_deps $(src)_ORDERDEPS += $(PREREQS) endef $(foreach src,\ $(VBoxC_SOURCES) $(VBoxC_SOURCES.$(BUILD_TARGET)) \ $(VBoxSVC_SOURCES) $(VBoxSVC_SOURCES.$(BUILD_TARGET)) \ $(VBoxCOM_SOURCES) \ ,$(eval $(value def_src_deps))) # # Embed XML Schema files to VBoxSVC # VBOX_XML_SCHEMA_H = $(PATH_TARGET)/xml_VirtualBox_settings_xsd.h VBOX_XML_SCHEMA_COMMON_H = $(PATH_TARGET)/xml_VirtualBox_settings_common_xsd.h VBOX_XML_CONVERTER_TEMPLATE_H = $(PATH_TARGET)/xml_SettingsConverter_xsl.h VBOX_XML_SCHEMA_COMMON = xml/VirtualBox-settings-common.xsd VBOX_XML_SCHEMA.darwin = xml/VirtualBox-settings-macosx.xsd VBOX_XML_SCHEMA.linux = xml/VirtualBox-settings-linux.xsd VBOX_XML_SCHEMA.freebsd = xml/VirtualBox-settings-freebsd.xsd VBOX_XML_SCHEMA.win = xml/VirtualBox-settings-windows.xsd VBOX_XML_SCHEMA.os2 = xml/VirtualBox-settings-os2.xsd VBOX_XML_SCHEMA.solaris = xml/VirtualBox-settings-solaris.xsd VBOX_XML_CONVERTER_TEMPLATE = xml/SettingsConverter.xsl VirtualBoxImplExtra.cpp_DEPS = \ $(VBOX_XML_SCHEMA_H) $(VBOX_XML_SCHEMA_COMMON_H) $(VBOX_XML_CONVERTER_TEMPLATE_H) $(VBOX_XML_SCHEMA_H): $(VBOX_XML_SCHEMA.$(BUILD_TARGET)) $(VBOX_BIN2C) $(call MSG_TOOL,bin2c,VBoxSVC,$<,$@) $(QUIET)$(VBOX_BIN2C) _xml_VirtualBox_settings_xsd $< $@ $(VBOX_XML_SCHEMA_COMMON_H): $(VBOX_XML_SCHEMA_COMMON) $(VBOX_BIN2C) $(call MSG_TOOL,bin2c,VBoxSVC,$<,$@) $(QUIET)$(VBOX_BIN2C) _xml_VirtualBox_settings_common_xsd $< $@ $(VBOX_XML_CONVERTER_TEMPLATE_H): $(VBOX_XML_CONVERTER_TEMPLATE) $(VBOX_BIN2C) $(call MSG_TOOL,bin2c,VBoxSVC,$<,$@) $(QUIET)$(VBOX_BIN2C) _xml_SettingsConverter_xsl $< $@ OTHER_CLEAN += \ $(VBOX_XML_SCHEMA_H) $(VBOX_XML_SCHEMA_COMMON_H) $(VBOX_XML_CONVERTER_TEMPLATE_H) # # Generate SchemaDefs.h and SchemaDefs.cpp from XML Schema # VBOX_XML_SCHEMADEFS_H = $(PATH_TARGET)/SchemaDefs.h VBOX_XML_SCHEMADEFS_CPP = $(PATH_TARGET)/SchemaDefs.cpp VBOX_XML_SCHEMADEFS_XSL = xml/SchemaDefs.xsl VBoxC_DEPS += $(VBOX_XML_SCHEMADEFS_H) VBoxC_INCS += $(PATH_TARGET) VBoxSVC_DEPS += $(VBOX_XML_SCHEMADEFS_H) VBoxSVC_INCS += $(PATH_TARGET) VBoxSVC_SOURCES += $(VBOX_XML_SCHEMADEFS_CPP) $(VBOX_XML_SCHEMADEFS_H): $(VBOX_XML_SCHEMADEFS_XSL) $(VBOX_XML_SCHEMA.$(BUILD_TARGET)) $(VBOX_XML_SCHEMA_COMMON) $(call MSG_TOOL,xsltproc,SchemaDefs,$<,$@) $(QUIET)$(VBOX_XSLTPROC) --stringparam mode declare -o $@ $(filter-out $(VBOX_XML_SCHEMA_COMMON),$^) $(VBOX_XML_SCHEMADEFS_CPP): $(VBOX_XML_SCHEMADEFS_XSL) $(VBOX_XML_SCHEMA.$(BUILD_TARGET)) $(VBOX_XML_SCHEMA_COMMON) $(call MSG_TOOL,xsltproc,SchemaDefs,$<,$@) $(QUIET)$(VBOX_XSLTPROC) --stringparam mode define -o $@ $(filter-out $(VBOX_XML_SCHEMA_COMMON),$^) OTHER_CLEAN += $(VBOX_XML_SCHEMADEFS_H) $(VBOX_XML_SCHEMADEFS_CPP) .NOTPARALLEL: $(VBOX_XML_SCHEMADEFS_H) $(VBOX_XML_SCHEMADEFS_CPP) # # Creates the symlinks necessary for making XPCOM work. # ## @todo Figure out why Linux really needs this, darwin doesn't... xpcom-components_INST = $(INST_BIN)components/ ifeq ($(BUILD_TARGET),linux) xpcom-components_SYMLINKS = \ VirtualBox_XPCOM.xpt=>../VirtualBox_XPCOM.xpt \ VBoxXPCOMBase.xpt=>../VBoxXPCOMBase.xpt \ VBoxC$(SUFF_DLL)=>../VBoxC$(SUFF_DLL) \ VBoxSVCM$(SUFF_DLL)=>../VBoxSVCM$(SUFF_DLL) \ VBoxXPCOMIPCC$(SUFF_DLL)=>../VBoxXPCOMIPCC$(SUFF_DLL) endif # # Include sub-makefile(s) last if we're not doing parallel building. # # We do this here so that the webservices ends up last in the target # lists. For 100% correctness we must do this after all the main # targets has been fully fleshed out as subheader/footer.kmk will # process new targets. # ifeq ($(KMK_OPTS_JOBS),1) ifdef VBOX_WITH_WEBSERVICES include $(PATH_SUB_CURRENT)/webservice/Makefile.kmk endif include $(PATH_SUB_CURRENT)/testcase/Makefile.kmk endif # generate rules include $(PATH_KBUILD)/subfooter.kmk # # Additions rules. # XIDLFILE = idl/VirtualBox.xidl ifneq ($(BUILD_TARGET),win) linux/helpers.cpp: $(IDLTYPELIB) $(IDLFILE): idl/xpidl.xsl $(XIDLFILE) | $(call DIRDEP,$(dir $(IDLFILE))) $(call MSG_TOOL,xsltproc,VBoxSVC,$<,$@) $(QUIET)$(MKDIR) -p $(@D) $(QUIET)$(VBOX_XSLTPROC) -o $@ $^ $(IDLTYPELIB): $(IDLFILE) | $(call DIRDEP,$(dir $(IDLTYPELIB))) $(call MSG_TOOL,xpidl,VBoxSVC,$<,$@) $(QUIET)$(VBOX_XPIDL) -m typelib -I $(VBOX_PATH_XPCOM_IDL) -e $@ $< $(IDLHEADER): $(IDLFILE) | $(call DIRDEP,$(dir $(IDLHEADER))) $(call MSG_TOOL,xpidl,VBoxSVC,$<,$@) $(QUIET)$(VBOX_XPIDL) -m header -I $(VBOX_PATH_XPCOM_IDL) -e $@ $< else MAIN_IDL ?= $(EXEC_X86_WIN32) $(firstword $(wildcard \ $(PATH_SDK_WINPSDK_BIN)/Midl.Exe\ $(PATH_SDK_WINPSDK)/Bin/Midl.Exe\ $(PATH_DEVTOOLS)/win.x86/bin/midl.exe\ ) Sorry_Cannot_Find_The_Midl_Compiler_In_The_PSDK) IDL_DEFS = /nologo ifdef VBOX_WITH_VRDP IDL_DEFS += /D VBOX_VRDP endif $(IDLFILE): idl/midl.xsl $(XIDLFILE) $(call MSG_TOOL,xsltproc,VBoxSVC,$<,$@) $(QUIET)$(MKDIR) -p $(VBOX_PATH_SDK)/idl $(QUIET)$(VBOX_XSLTPROC) -o $@ $^ $(PATH_TARGET)/VBoxSVC.rgs: win32/VirtualBox_rgs.xsl $(XIDLFILE) $(VBOX_XSLTPROC) --stringparam Module VBoxSVC -o $@ $^ $(PATH_TARGET)/VBoxC.rgs: win32/VirtualBox_rgs.xsl $(XIDLFILE) $(VBOX_XSLTPROC) --stringparam Module VBoxC -o $@ $^ ## @todo r=bird: last changes to this rule showed incorrect dependencies here as it broke testcase (see testboxwin2). # This is kind of obvious when looking at the rule, because it's (a) not specifing all it output # and (b) generating more stuff *after* the maintarget has been completed. # # What needs to be done is to not depend on _i.c in the object subdir, but on all the final outputs. $(PATH_VBoxCOM)/VirtualBox_i.c \ + $(VBOX_PATH_SDK)/lib/VirtualBox_i.c \ + $(PATH_VBoxCOM)/VirtualBox.h \ + $(VBOX_PATH_SDK)/include/VirtualBox.h \ + $(PATH_VBoxCOM)/VirtualBox.tlb \ + $(VBOX_PATH_SDK)/lib/VirtualBox.tlb: $(IDLFILE) | $(call DIRDEP,$(PATH_VBoxCOM)) $(MAIN_IDL) $(IDL_DEFS) \ /out $(subst /,\\,$(PATH_VBoxCOM)) \ /cpp_cmd $(subst /,\\,$(TOOL_$(VBOX_VCC_TOOL)_CC)) \ /I $(subst /,\\,$(PATH_SDK_WINPSDK_INC)) \ /I idl \ $(subst /,\\,$<) $(MKDIR) -p $(VBOX_PATH_SDK)/include $(CP) $(PATH_VBoxCOM)/VirtualBox.h $(VBOX_PATH_SDK)/include $(MKDIR) -p $(VBOX_PATH_SDK)/lib $(CP) $(PATH_VBoxCOM)/VirtualBox.tlb $(VBOX_PATH_SDK)/lib $(CP) $(PATH_VBoxCOM)/VirtualBox_i.c $(VBOX_PATH_SDK)/lib endif # bird: anyone still using this? If not it's a gonner. ## Hack to work around wine's trouble with midl.exe and rc.exe (seems to be msvcrt.dll related) #gen: $(PREREQS) # # Translation stuff # VBoxSVC_HEADERS = \ include/collection.h \ include/MachineImpl.h \ include/HostDVDDriveImpl.h \ include/HostFloppyDriveImpl.h VBoxC_HEADERS = \ include/ConsoleImpl.h VBoxSVC_TRANSLATIONS = \ nls/VBoxSVC_de.ts VBoxC_TRANSLATIONS = \ nls/VBoxC_de.ts updatenls: $(VBOX_LUPDATE) $(VBoxSVC_SOURCES) $(VBoxSVC_HEADERS) -ts $(VBoxSVC_TRANSLATIONS) $(VBOX_LUPDATE) $(VBoxC_SOURCES) $(VBoxC_HEADERS) -ts $(VBoxC_TRANSLATIONS) ifdef VBOX_WITH_XPCOM testidl: $(IDLFILE) $(IDLTYPELIB) testidlhdr: $(IDLHEADER) else testidl: $(IDLFILE) $(PATH_VBoxCOM)/VirtualBox_i.c endif testschemadefs: $(VBOX_XML_SCHEMADEFS_H) $(VBOX_XML_SCHEMADEFS_CPP) $(PATH_BIN)/comregister.cmd: win32/comregister.cmd $(CP) $< $@ # Hot fix when dependencies goes bad again... #.NOTPARALLEL: $(TARGET_VBoxC) $(TARGET_VBoxSVC) $(TARGET_VBoxCOM) $(IDLHEADER) $(IDLFILE) $(PATH_VBoxCOM)/VirtualBox_i.c