VirtualBox

source: vbox/trunk/src/VBox/Main/Makefile.kmk@ 2773

Last change on this file since 2773 was 2754, checked in by vboxsync, 18 years ago

Split com.cpp into generic bits and initterm bits so it won't drag in VBoxXPCOMGlue and cause havok on darwin with multiply defined symbols and whatnot.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 15.9 KB
Line 
1# $Id: Makefile.kmk 2754 2007-05-22 02:19:37Z vboxsync $
2## @file
3# Makefile for the VBox Main module.
4#
5
6#
7# Copyright (C) 2006 InnoTek Systemberatung GmbH
8#
9# This file is part of VirtualBox Open Source Edition (OSE), as
10# available from http://www.virtualbox.org. This file is free software;
11# you can redistribute it and/or modify it under the terms of the GNU
12# General Public License as published by the Free Software Foundation,
13# in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
14# distribution. VirtualBox OSE is distributed in the hope that it will
15# be useful, but WITHOUT ANY WARRANTY of any kind.
16#
17# If you received this file as part of a commercial VirtualBox
18# distribution, then only the terms of your commercial VirtualBox
19# license agreement apply instead of the previous paragraph.
20#
21
22DEPTH = ../../..
23include $(PATH_KBUILD)/header.kmk
24
25ifdef VBOX_WITH_VRDP_MC
26DEFS += VRDP_MC
27endif
28
29SUBDIRS_AFTER = testcase
30
31ifndef VBOX_OSE
32SUBDIRS_AFTER += webservice
33endif
34
35LIBRARIES =
36DLLS = VBoxXML VBoxC
37PROGRAMS = VBoxSVC
38ifeq ($(BUILD_TARGET),win)
39 LIBRARIES = VBoxCOM
40else
41 ifndef VBOX_WITH_XPCOM
42 $(error "VBox: VBOX_WITH_XPCOM isn't defined")
43 endif
44 DLLS += VBoxSVCM
45 LIBRARIES = VBoxXPCOM
46 DEFS += VBOX_WITH_XPCOM
47 DEFS += VBOX_WITH_SYS_V_IPC_SESSION_WATCHER
48 DEFS += VBOX_WITH_UNIXY_TAP_NETWORKING
49endif
50#PROGRAMS = tstCFGLdr
51
52ifeq ($(BUILD_TARGET),win)
53 OTHERS = $(PATH_BIN)/comregister.cmd
54 IDLFILE = $(VBOX_PATH_SDK)/idl/VirtualBox.idl
55 OTHER_CLEAN = \
56 $(PATH_BIN)/comregister.cmd \
57 $(VBOX_PATH_SDK)/include/VirtualBox.h \
58 $(IDLFILE) \
59 $(VBOX_PATH_SDK)/lib/VirtualBox.tlb \
60 $(VBOX_PATH_SDK)/lib/VirtualBox_i.c \
61 $(PATH_VBoxCOM)/VirtualBox.h \
62 $(PATH_VBoxCOM)/VirtualBox_i.c \
63 $(PATH_VBoxCOM)/VirtualBox.tlb
64else
65 INSTALLS = xpcom-components
66 IDLFILE = $(VBOX_PATH_SDK)/idl/VirtualBox_XPCOM.idl
67 ifeq ($(BUILD_TARGET),linux)
68 IDLTYPELIB = $(PATH_BIN)/VirtualBox_XPCOM.xpt
69 else
70 IDLTYPELIB = $(PATH_BIN)/components/VirtualBox_XPCOM.xpt
71 endif
72 IDLHEADER = $(VBOX_PATH_SDK)/include/VirtualBox_XPCOM.h
73 OTHERS = $(IDLTYPELIB)
74 OTHER_CLEAN = \
75 $(IDLFILE) \
76 $(IDLHEADER) \
77 $(IDLTYPELIB)
78
79endif
80
81
82
83#
84# The Main API documentation
85#
86docs: $(PATH_TARGET)/docs.Main
87
88$(PATH_TARGET)/docs.Main: \
89 Doxyfile.Main \
90 idl/doxygen.xsl \
91 idl/VirtualBox.xidl \
92 | $(call DIRDEP, $(PATH_TARGET)) \
93 $(call DIRDEP, $(PATH_OUT)/docs/Main)
94 $(RM) -f $(wildcard $(PATH_OUT)/docs/Main/html/*)
95 $(VBOX_XSLTPROC) -o $(PATH_TARGET)/VirtualBox.idl idl/doxygen.xsl idl/VirtualBox.xidl
96 PATH_OUT="$(PATH_OUT)" PATH_TARGET="$(PATH_TARGET)" PATH_CHM="$(subst /,\\,$(PATH_BIN)/VirtualBoxAPI.chm)" doxygen Doxyfile.Main
97 -$(EXEC_X86_WIN32) $(VBOX_PATH_HTML_HELP_WORKSHOP)/hhc.exe $(subst /,\\,$(PATH_OUT)/docs/Main/html/index.hhp)
98 $(APPEND) $(PATH_TARGET)/docs.Main
99
100$(call DIRDEP, $(PATH_OUT)/docs/Main):
101 $(MKDIR) -p $@
102
103
104#
105# VBoxSVC executable
106#
107VBoxSVC_TEMPLATE = VBOXMAINEXE
108VBoxSVC_DEFS = CFGLDR_HAVE_COM IN_CFGLDR_R3
109ifdef VBOX_WITH_VRDP
110VBoxSVC_DEFS += VBOX_VRDP IN_VRDP_R3
111endif
112ifdef VBOX_WITH_HGCM
113VBoxSVC_DEFS += VBOX_HGCM
114endif
115ifdef VBOX_MAIN_RELEASE_LOG
116VBoxSVC_DEFS += VBOX_MAIN_RELEASE_LOG LOG_ENABLED
117endif
118ifdef VBOX_WITH_USB
119VBoxSVC_DEFS += VBOX_WITH_USB
120endif
121ifdef VBOX_WITH_ALSA
122VBoxSVC_DEFS += VBOX_WITH_ALSA
123endif
124ifdef VBOX_WITH_WINMM
125VBoxSVC_DEFS += VBOX_WITH_WINMM
126endif
127ifdef VBOX_WITHOUT_LINUX_COMPILER_H
128VBoxSVC_DEFS += VBOX_WITHOUT_LINUX_COMPILER_H
129endif
130VBoxSVC_DEFS.win += VBOX_COM_OUTOFPROC_MODULE
131VBoxSVC_DEFS.win.x86 += _WIN32_WINNT=0x0500
132VBoxSVC_DEFS.win.amd64 += _WIN32_WINNT=0x0510
133VBoxSVC_INCS = \
134 include \
135 $(PATH_VBoxSVC) \
136 $(PATH_VBoxCOM) \
137 $(PATH_CURRENT)
138ifdef VBOX_WITH_XPCOM
139 VBoxSVC_LIBS += \
140 $(PATH_BIN)/VBoxDDU$(VBOX_SUFF_DLL) \
141 $(PATH_BIN)/VBoxXML$(VBOX_SUFF_DLL) \
142 $(TARGET_VBoxXPCOM)
143 VBoxSVC_LIBS += \
144 $(PATH_LIB)/VBoxXPCOMGlue$(VBOX_SUFF_LIB) \
145 $(PATH_BIN)/VBoxXPCOM$(VBOX_SUFF_DLL)
146 VBoxSVC_LIBS.darwin = \
147 $(LIB_VMM) \
148 $(LIB_REM)
149else
150 VBoxSVC_LIBS = \
151 $(PATH_LIB)/VBoxDDU$(VBOX_SUFF_LIB) \
152 $(PATH_LIB)/VBoxXML$(VBOX_SUFF_LIB) \
153 $(PATH_LIB)/VBoxCOM$(VBOX_SUFF_LIB)
154endif
155VBoxSVC_SOURCES = \
156 Logging.cpp \
157 Matching.cpp \
158 USBDeviceFilterImpl.cpp \
159 USBProxyService.cpp \
160 VirtualBoxBase.cpp \
161 VirtualBoxXMLUtil.cpp \
162 VirtualBoxErrorInfoImpl.cpp \
163 VirtualBoxImpl.cpp \
164 MachineImpl.cpp \
165 SnapshotImpl.cpp \
166 HardDiskImpl.cpp \
167 HardDiskAttachmentImpl.cpp \
168 ProgressImpl.cpp \
169 DVDDriveImpl.cpp \
170 DVDImageImpl.cpp \
171 FloppyDriveImpl.cpp \
172 FloppyImageImpl.cpp \
173 HostImpl.cpp \
174 HostDVDDriveImpl.cpp \
175 HostFloppyDriveImpl.cpp \
176 HostUSBDeviceImpl.cpp \
177 GuestOSTypeImpl.cpp \
178 NetworkAdapterImpl.cpp \
179 USBControllerImpl.cpp \
180 AudioAdapterImpl.cpp \
181 SharedFolderImpl.cpp \
182 SystemPropertiesImpl.cpp \
183 BIOSSettingsImpl.cpp
184
185ifdef VBOX_WITH_VRDP
186VBoxSVC_SOURCES += VRDPServerImpl.cpp
187endif
188
189VBoxSVC_SOURCES.darwin = \
190 darwin/iokit.cpp
191
192VBoxSVC_SOURCES.win = \
193 HostNetworkInterfaceImpl.cpp \
194 win32/svcmain.cpp \
195 win32/svchlp.cpp \
196 win32/VBoxSVC.rc
197
198ifdef VBOX_WITH_XPCOM
199VBoxSVC_SOURCES += \
200 linux/server.cpp
201endif
202
203ifdef VBOX_WITH_USB
204VBoxSVC_SOURCES.darwin += darwin/USBProxyServiceDarwin.cpp
205VBoxSVC_SOURCES.linux += linux/USBProxyServiceLinux.cpp
206VBoxSVC_SOURCES.win += win32/USBProxyServiceWin32.cpp
207endif
208
209VBoxSVC_LDFLAGS.darwin = -framework IOKit
210ifeq ($(BUILD_TYPE),debug)
211VBoxSVC_LDFLAGS.linux += -rdynamic # for backtrace_symbols()
212endif
213
214#
215# VBoxSVC wrapper module
216#
217ifdef VBOX_WITH_XPCOM
218
219VBoxSVCM_TEMPLATE = VBOXMAIN
220ifneq ($(BUILD_TARGET),linux)
221VBoxSVCM_INST = $(INST_BIN)components/
222endif
223VBoxSVCM_DEFS = IN_RING3 IN_CFGLDR_R3
224VBoxSVCM_INCS = \
225 include \
226 $(PATH_VBoxC) \
227 $(PATH_VBoxCOM) \
228 $(PATH_CURRENT)
229VBoxSVCM_SOURCES = \
230 linux/server_module.cpp
231VBoxSVCM_LIBS = \
232 $(PATH_BIN)/VBoxXPCOM$(VBOX_SUFF_DLL)
233VBoxSVCM_LDFLAGS.darwin = \
234 -install_name @executable_path/components/VBoxSVCM.dylib \
235 -exported_symbols_list $(PATH_TARGET)/VBoxSVCM.def
236ifeq ($(BUILD_TARGET),darwin)
237VBoxSVCM_ORDERDEPS += $(PATH_TARGET)/VBoxSVCM.def
238VBoxSVCM_CLEAN += $(PATH_TARGET)/VBoxSVCM.def
239$(PATH_TARGET)/VBoxSVCM.def:
240 $(RM) -f $@
241 $(APPEND) $@ _NSGetModule
242endif
243
244endif # VBOX_WITH_XPCOM
245
246#
247# VBoxC module
248#
249VBoxC_TEMPLATE = VBOXMAIN
250ifneq ($(filter-out linux win,$(BUILD_TARGET)),)
251VBoxC_INST = $(INST_BIN)components/
252endif
253VBoxC_DEFS = IN_RING3 IN_CFGLDR_R3
254VBoxC_DEFS += VBOX_COM_INPROC
255ifdef VBOX_WITH_VRDP
256VBoxC_DEFS += VBOX_VRDP IN_VRDP_R3
257endif
258ifdef VBOX_WITH_HGCM
259VBoxC_DEFS += VBOX_HGCM
260endif
261ifdef VBOX_MAIN_RELEASE_LOG
262VBoxC_DEFS += VBOX_MAIN_RELEASE_LOG LOG_ENABLED
263endif
264ifdef VBOX_WITH_USB
265VBoxC_DEFS += VBOX_WITH_USB
266endif
267ifdef VBOX_WITH_ALSA
268VBoxC_DEFS += VBOX_WITH_ALSA
269endif
270ifdef VBOX_WITH_WINMM
271VBoxC_DEFS += VBOX_WITH_WINMM
272endif
273VBoxC_DEFS.win.x86 += _WIN32_WINNT=0x0500
274VBoxC_DEFS.win.amd64 += _WIN32_WINNT=0x0510
275VBoxC_INCS = \
276 include \
277 $(PATH_VBoxC) \
278 $(PATH_VBoxCOM)
279VBoxC_INCS.win := \
280 $(PATH_SUB_CURRENT)
281VBoxC_LDFLAGS.darwin = \
282 -install_name @executable_path/components/VBoxSVCM.dylib \
283 -exported_symbols_list $(PATH_TARGET)/VBoxC.def
284ifdef VBOX_USE_VCC80
285VBoxC_LDFLAGS.win = /MANIFEST
286endif
287ifdef VBOX_WITH_XPCOM
288VBoxC_LIBS = \
289 $(TARGET_VBoxXPCOM) \
290 $(PATH_BIN)/VBoxXPCOM$(VBOX_SUFF_DLL)
291 ifneq ($(BUILD_TARGET),darwin) # Why is a XPCOM component linking with the glue? Because of the old com.cpp?
292VBoxC_LIBS += $(PATH_LIB)/VBoxXPCOMGlue$(VBOX_SUFF_LIB)
293 endif
294else
295VBoxC_LIBS = \
296 $(PATH_LIB)/VBoxCOM$(VBOX_SUFF_LIB)
297endif
298VBoxC_LIBS += \
299 $(LIB_VMM) \
300 $(LIB_REM)
301VBoxC_SOURCES = \
302 Logging.cpp \
303 VBoxDll.cpp \
304 USBDeviceImpl.cpp \
305 RemoteUSBDeviceImpl.cpp \
306 VirtualBoxBase.cpp \
307 VirtualBoxErrorInfoImpl.cpp \
308 ProgressImpl.cpp \
309 SharedFolderImpl.cpp \
310 SessionImpl.cpp \
311 ConsoleImpl.cpp \
312 ConsoleVRDPServer.cpp \
313 GuestImpl.cpp \
314 KeyboardImpl.cpp \
315 MouseImpl.cpp \
316 DisplayImpl.cpp \
317 FramebufferImpl.cpp \
318 MachineDebuggerImpl.cpp \
319 VBoxDriversRegister.cpp \
320 AudioSnifferInterface.cpp \
321 VMMDevInterface.cpp
322VBoxC_SOURCES.win = \
323 win32/dllmain.cpp \
324 win32/VBoxC.def \
325 win32/VBoxC.rc
326ifdef VBOX_WITH_XPCOM
327VBoxC_SOURCES += \
328 linux/module.cpp
329endif
330
331ifdef VBOX_WITH_HGCM
332VBoxC_SOURCES += \
333 hgcm/HGCMObjects.cpp \
334 hgcm/HGCMThread.cpp \
335 hgcm/HGCM.cpp
336endif
337
338ifdef VBOX_WITH_USB
339VBoxC_SOURCES += \
340 RemoteUSBBackend.cpp
341endif
342
343ifeq ($(BUILD_TARGET),darwin)
344VBoxC_ORDERDEPS += $(PATH_TARGET)/VBoxC.def
345VBoxC_CLEAN += $(PATH_TARGET)/VBoxC.def
346$(PATH_TARGET)/VBoxC.def: $(MAKEFILE_CURRENT)
347 $(RM) -f $@
348 $(APPEND) $@ _NSGetModule
349 $(APPEND) $@ _VBoxDriversRegister
350endif
351
352#
353# VBoxXML
354#
355VBoxXML_TEMPLATE = VBOXMAIN
356VBoxXML_SDKS = VBOX_XALAN VBOX_XERCES
357## @todo Why do we need this? Why isn't it in the template?!?
358VBoxXML_CXXFLAGS.win = -EHsc
359VBoxXML_DEFS = \
360 CFGLDR_HAVE_COM IN_RING3 IN_CFGLDR_R3
361VBoxXML_INCS = \
362 include \
363 $(PATH_TARGET)
364VBoxXML_SOURCES = \
365 xml/cfgldr.cpp \
366 xml/cfgldrhlp.cpp
367ifdef VBOX_WITH_XPCOM
368VBoxXML_LIBS = \
369 $(TARGET_VBoxXPCOM) \
370 $(PATH_BIN)/VBoxXPCOM$(VBOX_SUFF_DLL)
371endif
372VBoxXML_LDFLAGS.darwin = -install_name @executable_path/VBoxXML.dylib -Wl,-x # no debug info please.
373
374## @todo (dmik): temporarily embed SettingsConverter.xsl into VBoxXML,
375# later it should go to VBoxSVC as well
376xml/cfgldr.cpp_DEPS = $(PATH_TARGET)/SettingsConverter_xsl.h
377OTHER_CLEAN += $(PATH_TARGET)/SettingsConverter_xsl.h
378$(PATH_TARGET)/SettingsConverter_xsl.h: xml/SettingsConverter.xsl $(VBOX_BIN2C) | $(call DIRDEP,$(PATH_TARGET))
379 $(call MSG_TOOL,bin2c,VBoxXML,$<,$@)
380 $(QUIET)$(VBOX_BIN2C) SettingsConverter_xsl $< $@
381
382
383#
384# tstCFGLdr - broken.
385#
386tstCFGLdr_TEMPLATE = VBOXR3
387tstCFGLdr_SDKS = VBOX_XALAN VBOX_XERCES
388tstCFGLdr_DEFS = IN_CFGLDR_R3 STANDALONE_TEST
389## @todo these makes uncessary noice. fix the template usage!
390tstCFGLdr_CXXFLAGS.win = -EHsc
391tstCFGLdr_SOURCES = \
392 xml/cfgldr.cpp \
393 xml/cfgldrhlp.cpp
394tstCFGLdr_INCS = \
395 include \
396 $(PATH_TARGET)
397ifdef VBOX_WITH_XPCOM
398tstCFGLdr_LIBS = \
399 $(PATH_LIB)/VBoxXPCOM$(VBOX_SUFF_LIB)
400endif
401tstCFGLdr_LIBS += \
402 $(LIB_RUNTIME)
403
404
405#
406# VBoxCOM - COM Abstraction Layer library
407#
408VBoxCOM_COMMON_SOURCES = \
409 glue/com.cpp \
410 glue/initterm.cpp \
411 glue/string.cpp \
412 glue/EventQueue.cpp \
413 glue/ErrorInfo.cpp
414
415VBoxCOM_TEMPLATE = VBOXMAIN
416VBoxCOM_DEFS.x86 = _WIN32_WINNT=0x0500
417VBoxCOM_DEFS.amd64 = _WIN32_WINNT=0x0510
418VBoxCOM_SOURCES = \
419 $(VBoxCOM_COMMON_SOURCES) \
420 $(PATH_VBoxCOM)/VirtualBox_i.c
421
422
423#
424# VBoxXPCOM
425#
426VBoxXPCOM_TEMPLATE = VBOXMAIN
427VBoxXPCOM_SOURCES = \
428 $(VBoxCOM_COMMON_SOURCES) \
429 linux/helpers.cpp
430VBoxXPCOM_INCS = \
431 include
432
433
434#
435# Generate _DEPS on all sources which depends on generated headers.
436#
437ifeq ($(BUILD_TARGET),win)
438PREREQS = $(PATH_VBoxCOM)/VirtualBox_i.c
439else
440PREREQS = $(IDLTYPELIB) $(IDLHEADER)
441endif
442
443# brute force way to ensure the prereqs are generated before anything is compiled.
444define def_src_deps
445$(src)_DEPS = $(PREREQS)
446endef
447$(foreach src,\
448 $(VBoxC_SOURCES) $(VBoxC_SOURCES.$(BUILD_TARGET)) \
449 $(VBoxSVC_SOURCES) $(VBoxSVC_SOURCES.$(BUILD_TARGET)) \
450 $(VBoxCOM_COMMON_SOURCES) $(VBoxCOM_SOURCES) $(VBoxXPCOM_SOURCES) \
451 ,$(eval $(value def_src_deps)))
452
453
454#
455# Embed XML Schema files to VBoxSVC
456#
457VBOX_XML_ENTITIES = $(PATH_TARGET)/VirtualBoxXMLUtil_entities.h
458VBOX_XML_ENTITIES_COMMON = $(PATH_TARGET)/VirtualBoxXMLUtil_common_entities.h
459
460VBOX_XML_SCHEMA_COMMON = xml/VirtualBox-settings-common.xsd
461VBOX_XML_SCHEMA.darwin = xml/VirtualBox-settings-macosx.xsd
462VBOX_XML_SCHEMA.linux = xml/VirtualBox-settings-linux.xsd
463VBOX_XML_SCHEMA.win = xml/VirtualBox-settings-windows.xsd
464
465VirtualBoxXMLUtil.cpp_DEPS = $(VBOX_XML_ENTITIES) $(VBOX_XML_ENTITIES_COMMON)
466
467$(VBOX_XML_ENTITIES_COMMON): $(VBOX_XML_SCHEMA_COMMON) $(VBOX_BIN2C)
468 $(call MSG_TOOL,bin2c,VBoxXML,$<,$@)
469 $(QUIET)$(VBOX_BIN2C) VirtualBox_settings_common_xsd $< $@
470
471$(VBOX_XML_ENTITIES): $(VBOX_XML_SCHEMA.$(BUILD_TARGET)) $(VBOX_BIN2C)
472 $(call MSG_TOOL,bin2c,VBoxXML,$<,$@)
473 $(QUIET)$(VBOX_BIN2C) VirtualBox_settings_xsd $< $@
474
475OTHER_CLEAN += $(VBOX_XML_ENTITIES) $(VBOX_XML_ENTITIES_COMMON)
476
477
478#
479# Generate SchemaDefs.h from XML Schema
480#
481VBOX_XML_SCHEMADEFS_H = $(PATH_TARGET)/SchemaDefs.h
482VBOX_XML_SCHEMADEFS_XSL = xml/SchemaDefs.xsl
483
484VBoxC_DEPS += $(VBOX_XML_SCHEMADEFS_H)
485VBoxC_INCS += $(PATH_TARGET)
486VBoxSVC_DEPS += $(VBOX_XML_SCHEMADEFS_H)
487VBoxSVC_INCS += $(PATH_TARGET)
488
489$(VBOX_XML_SCHEMADEFS_H): $(VBOX_XML_SCHEMADEFS_XSL) $(VBOX_XML_SCHEMA.$(BUILD_TARGET)) $(VBOX_XML_SCHEMA_COMMON)
490 $(call MSG_TOOL,xsltproc,VBoxXML,$<,$@)
491 $(QUIET)$(VBOX_XSLTPROC) -o $@ $(filter-out $(VBOX_XML_SCHEMA_COMMON),$^)
492
493OTHER_CLEAN += $(VBOX_XML_SCHEMADEFS_H)
494.NOTPARALLEL: $(VBOX_XML_SCHEMADEFS_H)
495
496
497
498#
499# Creates the symlinks necessary for making XPCOM work.
500#
501## @todo Figure out why Linux really needs this, darwin doesn't...
502xpcom-components_INST = $(INST_BIN)components/
503ifeq ($(BUILD_TARGET),linux)
504xpcom-components_SYMLINKS = \
505 VirtualBox_XPCOM.xpt=>../VirtualBox_XPCOM.xpt \
506 VBoxXPCOMBase.xpt=>../VBoxXPCOMBase.xpt \
507 VBoxC$(SUFF_DLL)=>../VBoxC$(SUFF_DLL) \
508 VBoxSVCM$(SUFF_DLL)=>../VBoxSVCM$(SUFF_DLL) \
509 VBoxXPCOMIPCC$(SUFF_DLL)=>../VBoxXPCOMIPCC$(SUFF_DLL)
510endif
511
512# generate
513include $(PATH_KBUILD)/footer.kmk
514
515
516#
517# Additions rules.
518#
519
520XIDLFILE = idl/VirtualBox.xidl
521
522ifneq ($(BUILD_TARGET),win)
523
524linux/helpers.cpp: $(IDLTYPELIB)
525
526$(IDLFILE): idl/xpidl.xsl $(XIDLFILE) | $(call DIRDEP,$(dir $(IDLFILE)))
527 $(call MSG_TOOL,xsltproc,VBoxXML,$<,$@)
528 $(QUIET)$(MKDIR) -p $(@D)
529 $(QUIET)$(VBOX_XSLTPROC) -o $@ $^
530
531$(IDLTYPELIB): $(IDLFILE) | $(call DIRDEP,$(dir $(IDLTYPELIB)))
532 $(call MSG_TOOL,xpidl,VBoxXML,$<,$@)
533 $(QUIET)$(VBOX_XPIDL) -m typelib -I $(VBOX_PATH_XPCOM_IDL) -e $@ $<
534
535$(IDLHEADER): $(IDLFILE) | $(call DIRDEP,$(dir $(IDLHEADER)))
536 $(call MSG_TOOL,xpidl,VBoxXML,$<,$@)
537 $(QUIET)$(VBOX_XPIDL) -m header -I $(VBOX_PATH_XPCOM_IDL) -e $@ $<
538
539else
540
541MAIN_IDL ?= $(EXEC_X86_WIN32) $(firstword $(wildcard \
542 $(PATH_SDK_WINPSDK_BIN)/Midl.Exe\
543 $(PATH_SDK_WINPSDK)/Bin/Midl.Exe\
544 $(PATH_DEVTOOLS)/win.x86/bin/midl.exe\
545 ) Sorry_Cannot_Find_The_Midl_Compiler_In_The_PSDK)
546IDL_DEFS = /nologo
547ifdef VBOX_WITH_VRDP
548 IDL_DEFS += /D VBOX_VRDP
549endif
550
551$(IDLFILE): idl/midl.xsl $(XIDLFILE)
552 $(call MSG_TOOL,xsltproc,VBoxXML,$<,$@)
553 $(QUIET)$(MKDIR) -p $(VBOX_PATH_SDK)/idl
554 $(QUIET)$(VBOX_XSLTPROC) -o $@ $^
555
556## @todo r=bird: last changes to this rule showed incorrect dependencies here as it broke testcase (see testboxwin2).
557# This is kind of obvious when looking at the rule, because it's (a) not specifing all it output
558# and (b) generating more stuff *after* the maintarget has been completed.
559#
560# What needs to be done is to not depend on _i.c in the object subdir, but on all the final outputs.
561$(PATH_VBoxCOM)/VirtualBox_i.c: $(IDLFILE) | $(call DIRDEP,$(PATH_VBoxCOM))
562 $(MAIN_IDL) $(IDL_DEFS) \
563 /out $(subst /,\\,$(PATH_VBoxCOM)) \
564 /cpp_cmd $(subst /,\\,$(TOOL_$(VBOX_VCC_TOOL)_CC)) \
565 /I $(subst /,\\,$(PATH_SDK_WINPSDK_INC)) \
566 /I idl \
567 $(subst /,\\,$<)
568 $(MKDIR) -p $(VBOX_PATH_SDK)/include
569 $(CP) $(PATH_VBoxCOM)/VirtualBox.h $(VBOX_PATH_SDK)/include
570 $(MKDIR) -p $(VBOX_PATH_SDK)/lib
571 $(CP) $(PATH_VBoxCOM)/VirtualBox.tlb $(VBOX_PATH_SDK)/lib
572 $(CP) $(PATH_VBoxCOM)/VirtualBox_i.c $(VBOX_PATH_SDK)/lib
573
574endif
575
576# bird: anyone still using this? If not it's a gonner.
577## Hack to work around wine's trouble with midl.exe and rc.exe (seems to be msvcrt.dll related)
578#gen: $(PREREQS)
579
580
581#
582# Translation stuff
583#
584VBoxSVC_HEADERS = \
585 include/collection.h \
586 include/MachineImpl.h \
587 include/HostDVDDriveImpl.h \
588 include/HostFloppyDriveImpl.h
589
590VBoxC_HEADERS = \
591 include/ConsoleImpl.h
592
593VBoxSVC_TRANSLATIONS = \
594 nls/VBoxSVC_de.ts
595
596VBoxC_TRANSLATIONS = \
597 nls/VBoxC_de.ts
598
599updatenls:
600 $(VBOX_LUPDATE) $(VBoxSVC_SOURCES) $(VBoxSVC_HEADERS) -ts $(VBoxSVC_TRANSLATIONS)
601 $(VBOX_LUPDATE) $(VBoxC_SOURCES) $(VBoxC_HEADERS) -ts $(VBoxC_TRANSLATIONS)
602
603ifdef VBOX_WITH_XPCOM
604
605testidl: $(IDLFILE) $(IDLTYPELIB)
606testidlhdr: $(IDLHEADER)
607
608else
609
610testidl: $(IDLFILE) $(PATH_VBoxCOM)/VirtualBox_i.c
611
612endif
613
614$(PATH_BIN)/comregister.cmd: win32/comregister.cmd
615 $(CP) $< $@
616
617
618# Hot fix when dependencies goes bad again...
619#.NOTPARALLEL: $(TARGET_VBoxC) $(TARGET_VBoxSVC) $(TARGET_VBoxXPCOM) $(TARGET_VBoxCOM) $(IDLHEADER) $(IDLFILE) $(PATH_VBoxCOM)/VirtualBox_i.c
620
Note: See TracBrowser for help on using the repository browser.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette