VirtualBox

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

Last change on this file since 10240 was 10225, checked in by vboxsync, 17 years ago

VBOX_SINGLE_MAKEFILE fixes.

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