VirtualBox

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

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

VBOX_KBUILD_HACKING.

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