VirtualBox

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

Last change on this file since 6111 was 6076, checked in by vboxsync, 17 years ago

Merged dmik/s2 branch (r25959:26751) to the trunk.

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

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