VD/Async: Full support for VHD images. VMDK is still in progress
[virtualbox:mainlinemirror.git] / Makefile.kmk
1 # $Id$
2 ## @file
3 # Top level makefile.
4 #
5
6 #
7 # Copyright (C) 2006-2010 Oracle Corporation
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
18 SUB_DEPTH = .
19 include $(KBUILD_PATH)/subheader.kmk
20
21 #
22 # Sub-makefiles / Sub-directories.
23 #
24 ifdef VBOX_SINGLE_MAKEFILE
25  if defined(VBOX_WITH_DOCS) && !defined(VBOX_ONLY_ADDITIONS) && !defined(VBOX_ONLY_TESTSUITE)
26   include $(PATH_SUB_CURRENT)/doc/manual/Makefile.kmk
27  endif
28  include $(PATH_SUB_CURRENT)/src/Makefile.kmk
29 else
30  if defined(VBOX_WITH_DOCS) && !defined(VBOX_ONLY_ADDITIONS) && !defined(VBOX_ONLY_TESTSUITE)
31   SUBDIRS = doc/manual
32  endif
33  SUBDIRS += src
34 endif
35
36
37 #
38 # Clean up global stuff that Config.kmk generates.
39 #
40 OTHER_CLEAN += \
41         $(VBOX_PACKAGE_HEADER) \
42         $(VBOX_LICENSE_VER_KMK) \
43         $(VBOX_VERSION_MK) \
44         $(VBOX_VERSION_HEADER) \
45         $(VBOX_VERSION_STAMP) \
46         $(wildcard $(PATH_OUT)/version-stamp-*.*.*) \
47         $(VBOX_SVN_REV_KMK).ts \
48         $(VBOX_SVN_REV_KMK) \
49         $(PATH_OUT)/GCCConfig.kmk
50
51
52 if !defined(VBOX_ONLY_ADDITIONS) && !defined(VBOX_ONLY_TESTSUITE) && !defined(VBOX_ONLY_DOCS) # -> line 412b ;-)
53
54 ifndef VBOX_OSE
55  #
56  # Install the license (and misc non-executable stuff).
57  #
58  INSTALLS += nobin
59  nobin_INST = $(INST_BIN)
60  nobin_MODE = 0644
61  nobin_SOURCES =
62  ifdef VBOX_LICENSE_FILES
63   nobin_SOURCES += \
64         $(VBOX_BRAND_LICENSE_HTML)=>License-$(VBOX_LICENSE_VER).html \
65         $(foreach f,$(VBOX_INSTALLER_ADD_LANGUAGES),$(VBOX_BRAND_$(f)_LICENSE_HTML)=>License-$(VBOX_LICENSE_VER)-$(f).html)
66  endif
67 endif # !OSE
68
69
70 #
71 # Install external binaries (mostly redistributable parts of tools we use).
72 # This must be done *before* we build the manual.
73 #
74 # To avoid dragging in unnecessary tools and sdks here, we don't use the .win
75 # and .linux property suffixes.
76 #
77 INSTALLS += bin
78
79 bin_INST = $(INST_BIN)
80
81 # The SDL DLLs
82 if1of ($(KBUILD_TARGET), win os2)
83  ifneq ($(VBOX_WITH_VBOXSDL)$(VBOX_WITH_VBOXBFE),)
84   include $(KBUILD_PATH)/sdks/LIBSDL.kmk
85   bin_SOURCES += \
86         $(DLL_SDK_LIBSDL_SDL)
87   ifdef VBOX_WITH_SECURELABEL
88    bin_SOURCES += \
89         $(DLL_SDK_LIBSDL_SDLTTF)
90   endif
91   ifeq ($(KBUILD_TARGET),os2)
92    bin_SOURCES += \
93         $(DLL_SDK_LIBSDL_FSLIB)
94   endif
95  endif
96 endif
97
98
99 # The compiler runtime DLLs.
100 ifeq ($(KBUILD_TARGET).$(VBOX_WITHOUT_COMPILER_REDIST),win.)
101  ifdef VBOX_USE_VCC80
102   include $(KBUILD_PATH)/tools/VCC80X86.kmk
103   include $(KBUILD_PATH)/tools/VCC80AMD64.kmk
104   bin_SOURCES.x86 += \
105         $(PATH_TOOL_VCC80X86)/redist/x86/Microsoft.VC80.CRT/Microsoft.VC80.CRT.manifest=>Microsoft.VC80.CRT/Microsoft.VC80.CRT.manifest \
106         $(PATH_TOOL_VCC80X86)/redist/x86/Microsoft.VC80.CRT/msvcr80.dll=>Microsoft.VC80.CRT/msvcr80.dll \
107         $(PATH_TOOL_VCC80X86)/redist/x86/Microsoft.VC80.CRT/msvcp80.dll=>Microsoft.VC80.CRT/msvcp80.dll \
108         $(PATH_TOOL_VCC80X86)/redist/x86/Microsoft.VC80.CRT/Microsoft.VC80.CRT.manifest=>testcase/Microsoft.VC80.CRT/Microsoft.VC80.CRT.manifest \
109         $(PATH_TOOL_VCC80X86)/redist/x86/Microsoft.VC80.CRT/msvcr80.dll=>testcase/Microsoft.VC80.CRT/msvcr80.dll \
110         $(PATH_TOOL_VCC80X86)/redist/x86/Microsoft.VC80.CRT/msvcp80.dll=>testcase/Microsoft.VC80.CRT/msvcp80.dll
111   bin_SOURCES.amd64 += \
112         $(PATH_TOOL_VCC80AMD64)/redist/amd64/Microsoft.VC80.CRT/Microsoft.VC80.CRT.manifest=>Microsoft.VC80.CRT/Microsoft.VC80.CRT.manifest \
113         $(PATH_TOOL_VCC80AMD64)/redist/amd64/Microsoft.VC80.CRT/msvcr80.dll=>Microsoft.VC80.CRT/msvcr80.dll \
114         $(PATH_TOOL_VCC80AMD64)/redist/amd64/Microsoft.VC80.CRT/msvcp80.dll=>Microsoft.VC80.CRT/msvcp80.dll \
115         $(PATH_TOOL_VCC80AMD64)/redist/amd64/Microsoft.VC80.CRT/Microsoft.VC80.CRT.manifest=>testcase/Microsoft.VC80.CRT/Microsoft.VC80.CRT.manifest \
116         $(PATH_TOOL_VCC80AMD64)/redist/amd64/Microsoft.VC80.CRT/msvcr80.dll=>testcase/Microsoft.VC80.CRT/msvcr80.dll \
117         $(PATH_TOOL_VCC80AMD64)/redist/amd64/Microsoft.VC80.CRT/msvcp80.dll=>testcase/Microsoft.VC80.CRT/msvcp80.dll
118   ifeq ($(VBOX_VCC_CRT_TYPE),d)
119    bin_SOURCES.x86 += \
120         $(PATH_TOOL_VCC80X86)/redist/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT/Microsoft.VC80.DebugCRT.manifest=>Microsoft.VC80.DebugCRT/Microsoft.VC80.DebugCRT.manifest \
121         $(PATH_TOOL_VCC80X86)/redist/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT/msvcr80d.dll=>Microsoft.VC80.DebugCRT/msvcr80d.dll \
122         $(PATH_TOOL_VCC80X86)/redist/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT/msvcp80d.dll=>Microsoft.VC80.DebugCRT/msvcp80d.dll \
123         $(PATH_TOOL_VCC80X86)/redist/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT/Microsoft.VC80.DebugCRT.manifest=>testcase/Microsoft.VC80.DebugCRT/Microsoft.VC80.DebugCRT.manifest \
124         $(PATH_TOOL_VCC80X86)/redist/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT/msvcr80d.dll=>testcase/Microsoft.VC80.DebugCRT/msvcr80d.dll \
125         $(PATH_TOOL_VCC80X86)/redist/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT/msvcp80d.dll=>testcase/Microsoft.VC80.DebugCRT/msvcp80d.dll
126    bin_SOURCES.amd64 += \
127         $(PATH_TOOL_VCC80AMD64)/redist/Debug_NonRedist/amd64/Microsoft.VC80.DebugCRT/Microsoft.VC80.DebugCRT.manifest=>Microsoft.VC80.DebugCRT/Microsoft.VC80.DebugCRT.manifest \
128         $(PATH_TOOL_VCC80AMD64)/redist/Debug_NonRedist/amd64/Microsoft.VC80.DebugCRT/msvcr80d.dll=>Microsoft.VC80.DebugCRT/msvcr80d.dll \
129         $(PATH_TOOL_VCC80AMD64)/redist/Debug_NonRedist/amd64/Microsoft.VC80.DebugCRT/msvcp80d.dll=>Microsoft.VC80.DebugCRT/msvcp80d.dll \
130         $(PATH_TOOL_VCC80AMD64)/redist/Debug_NonRedist/amd64/Microsoft.VC80.DebugCRT/Microsoft.VC80.DebugCRT.manifest=>testcase/Microsoft.VC80.DebugCRT/Microsoft.VC80.DebugCRT.manifest \
131         $(PATH_TOOL_VCC80AMD64)/redist/Debug_NonRedist/amd64/Microsoft.VC80.DebugCRT/msvcr80d.dll=>testcase/Microsoft.VC80.DebugCRT/msvcr80d.dll \
132         $(PATH_TOOL_VCC80AMD64)/redist/Debug_NonRedist/amd64/Microsoft.VC80.DebugCRT/msvcp80d.dll=>testcase/Microsoft.VC80.DebugCRT/msvcp80d.dll
133   endif
134  endif
135  ifndef VBOX_USE_VCC80
136   VBOX_INSTALL_VCC70_RT = 1
137  endif
138  ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),win.x86)
139   VBOX_INSTALL_VCC70_RT = 1
140  endif
141  ifdef VBOX_INSTALL_VCC70_RT
142   include $(KBUILD_PATH)/tools/VCC70.kmk
143
144   ## @todo Move these defines to VCC70.
145   DLL_TOOL_VCC70_MSVCR71 ?= $(PATH_TOOL_VCC70)/bin/msvcr71.dll
146   ifneq ($(wildcard $(DLL_TOOL_VCC70_MSVCR71)),)
147    bin_SOURCES += \
148         $(DLL_TOOL_VCC70_MSVCR71)=>msvcr71.dll \
149         $(DLL_TOOL_VCC70_MSVCR71)=>testcase/msvcr71.dll
150   endif
151   ifeq ($(VBOX_VCC_CRT_TYPE),d)
152    DLL_TOOL_VCC70_MSVCR71D ?= $(PATH_TOOL_VCC70)/bin/msvcr71d.dll
153    ifneq ($(wildcard $(DLL_TOOL_VCC70_MSVCR71D)),)
154     bin_SOURCES += \
155         $(DLL_TOOL_VCC70_MSVCR71D)=>msvcr71d.dll \
156         $(DLL_TOOL_VCC70_MSVCR71D)=>testcase/msvcr71d.dll
157    endif
158   endif
159
160   DLL_TOOL_VCC70_MSVCP71 ?= $(PATH_TOOL_VCC70)/bin/msvcp71.dll
161   ifneq ($(wildcard $(DLL_TOOL_VCC70_MSVCP71)),)
162    bin_SOURCES += \
163         $(DLL_TOOL_VCC70_MSVCP71)=>msvcp71.dll \
164         $(DLL_TOOL_VCC70_MSVCP71)=>testcase/msvcp71.dll
165   endif
166   ifeq ($(VBOX_VCC_CRT_TYPE),d)
167    DLL_TOOL_VCC70_MSVCP71D ?= $(PATH_TOOL_VCC70)/bin/msvcp71d.dll
168    ifneq ($(wildcard $(DLL_TOOL_VCC70_MSVCP71D)),)
169     bin_SOURCES += \
170         $(DLL_TOOL_VCC70_MSVCP71D)=>msvcp71d.dll \
171         $(DLL_TOOL_VCC70_MSVCP71D)=>testcase/msvcp71d.dll
172    endif
173   endif
174
175   DLL_TOOL_VCC70_MSVCRT  ?= $(PATH_TOOL_VCC70)/bin/msvcrt.dll
176   ifneq ($(wildcard $(DLL_TOOL_VCC70_MSVCRT)),)
177    bin_SOURCES += \
178         $(DLL_TOOL_VCC70_MSVCRT)=>msvcrt.dll \
179         $(DLL_TOOL_VCC70_MSVCRT)=>testcase/msvcrt.dll
180   endif
181  endif
182 endif
183
184
185 ifdef VBOX_WITH_QT4_SUN
186 #
187 # Install our Qt DLLs / Shared Objects / Frameworks.
188 # Note: The installer fixes the darwin .dylibs when hardening is enabled.
189 #
190  INSTALLS += qt4-bin
191  qt4-bin_MODE = 755
192  ifeq ($(KBUILD_TARGET),darwin)
193   qt4-bin_INST = $(INST_VIRTUALBOX)Contents/
194   qt4-bin_SOURCES = $(foreach qtmod, QtCore QtGui QtNetwork $(if $(VBOX_GUI_USE_QGL), QtOpenGL,) \
195         ,$(VBOX_PATH_QT4)/Frameworks/$(qtmod)VBox.framework/Versions/4/$(qtmod)VBox=>Frameworks/$(qtmod)VBox.framework/Versions/4/$(qtmod)VBox)
196   ifdef VBOX_WITH_COCOA_QT
197    qt4-bin_SOURCES += \
198         $(VBOX_PATH_QT4)/Frameworks/QtGuiVBox.framework/Versions/4/Resources/qt_menu.nib/classes.nib=>Frameworks/QtGuiVBox.framework/Versions/4/Resources/qt_menu.nib/classes.nib \
199         $(VBOX_PATH_QT4)/Frameworks/QtGuiVBox.framework/Versions/4/Resources/qt_menu.nib/info.nib=>Frameworks/QtGuiVBox.framework/Versions/4/Resources/qt_menu.nib/info.nib \
200         $(VBOX_PATH_QT4)/Frameworks/QtGuiVBox.framework/Versions/4/Resources/qt_menu.nib/keyedobjects.nib=>Frameworks/QtGuiVBox.framework/Versions/4/Resources/qt_menu.nib/keyedobjects.nib
201   endif
202   qt4-bin_SOURCES += \
203         $(VBOX_PATH_QT4)/plugins/accessible/libqtaccessiblewidgets.dylib=>MacOS/accessible/libqtaccessiblewidgets.dylib
204   qt4-bin_SYMLINKS = $(foreach qtmod, QtCore QtGui QtNetwork $(if $(VBOX_GUI_USE_QGL), QtOpenGL,) \
205                 ,Frameworks/$(qtmod)VBox.framework/$(qtmod)VBox=>Versions/4/$(qtmod)VBox)
206   ifdef VBOX_WITH_COCOA_QT
207    qt4-bin_SYMLINKS += \
208         Frameworks/QtGuiVBox.framework/Resources=>Versions/4/Resources/
209   endif
210  else ifeq ($(KBUILD_TARGET),win)
211   qt4-bin_INST = $(INST_BIN)
212   qt4-bin_SOURCES = \
213         $(VBOX_PATH_QT4_LIB)/QtCoreVBox4.dll \
214         $(VBOX_PATH_QT4_LIB)/QtGuiVBox4.dll \
215         $(VBOX_PATH_QT4_LIB)/QtNetworkVBox4.dll \
216         $(if $(VBOX_GUI_USE_QGL), $(VBOX_PATH_QT4_LIB)/QtOpenGLVBox4.dll,) \
217         $(VBOX_PATH_QT4)/plugins/accessible/qtaccessiblewidgets4.dll=>accessible/qtaccessiblewidgets4.dll
218  else
219   qt4-bin_INST = $(INST_BIN)
220   qt4-bin_SOURCES = \
221         $(VBOX_PATH_QT4_LIB)/libQtCoreVBox.so.4 \
222         $(VBOX_PATH_QT4_LIB)/libQtGuiVBox.so.4 \
223         $(VBOX_PATH_QT4_LIB)/libQtNetworkVBox.so.4 \
224         $(if $(VBOX_GUI_USE_QGL), $(VBOX_PATH_QT4_LIB)/libQtOpenGLVBox.so.4,) \
225         $(VBOX_PATH_QT4)/plugins/accessible/libqtaccessiblewidgets$(SUFF_DLL)=>accessible/libqtaccessiblewidgets$(SUFF_DLL)
226  endif
227 endif # VBOX_WITH_QT4_SUN
228
229
230 #
231 # For building the combined package, just get the additions .ISO
232 # once for amd64 to prevent version inconsistences. In all other
233 # cases we get the .ISO per target architecture.
234 #
235 ifdef VBOX_WITH_ADDITIONS_FROM_BUILD_SERVER
236  ifdef VBOX_WITH_COMBINED_PACKAGE
237   ifeq ($(KBUILD_TARGET_ARCH),amd64)
238    INSTALLS += buildserver-additions
239   endif
240  else
241   INSTALLS += buildserver-additions
242  endif
243
244 #
245 # Install additions iso from the build server.
246 # The $(CP)/$(RM) stuff can be replaced by a simple $(TOUCH) once that has
247 # been added to kBuild.
248 #
249 buildserver-additions_INST = $(INST_ADDITIONS_ISO)
250 buildserver-additions_MODE = 0644
251 buildserver-additions_SOURCES = $(PATH_TARGET)/VBoxGuestAdditions.iso
252 buildserver-additions_CLEANS = $(PATH_TARGET)/VBoxGuestAdditions.iso $(PATH_TARGET)/VBoxGuestAdditions.iso.tmp
253
254 $(PATH_TARGET)/VBoxGuestAdditions.iso: $(VBOX_SVN_REV_KMK) $(PATH_DEVTOOLS)/bin/additions.sh | $$(dir $$@)
255         $(RM) -f $(PATH_TARGET)/VBoxGuestAdditions.iso $(PATH_TARGET)/VBoxGuestAdditions.iso.tmp
256  ifneq ($(KBUILD_HOST),win)
257         $(SHELL) $(PATH_DEVTOOLS)/bin/additions.sh --cmd fetch --filename $(PATH_TARGET)/VBoxGuestAdditions.iso.tmp
258  else
259         $(KMK) --affinity 1 -f $(MAKEFILE) VBOX_SINGLE_MAKEFILE= buildserver-additions-affinity-hack
260  endif
261         $(CP) -f $(PATH_TARGET)/VBoxGuestAdditions.iso.tmp $(PATH_TARGET)/VBoxGuestAdditions.iso
262         $(RM) -f $(PATH_TARGET)/VBoxGuestAdditions.iso.tmp
263
264  ifeq ($(KBUILD_HOST),win)
265 buildserver-additions-affinity-hack:
266         $(SHELL) $(PATH_DEVTOOLS)/bin/additions.sh --cmd fetch --filename $(PATH_TARGET)/VBoxGuestAdditions.iso.tmp
267  endif
268 endif
269
270
271 #
272 #
273 # Install documentation files (at the moment the .chm) from the build server.
274 #
275 ifdef VBOX_WITH_DOCS_FROM_BUILD_SERVER
276 ## @todo r=bird: Too much mess now for $(PATH_TARGET); move to doc/manual/.
277 INSTALLS += buildserver-docs
278 buildserver-docs_INST = $(INST_BIN)
279 buildserver-docs_MODE = 0644
280 buildserver-docs_SOURCES = \
281         $(addprefix $(PATH_TARGET)/, \
282                 VirtualBox.chm UserManual.pdf \
283                 $(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES),VirtualBox_$(f).chm UserManual_$(f).pdf))
284 buildserver-docs_CLEANS = \
285         $(buildserver-docs_0_OUTDIR)/unpacked.ts \
286         $(buildserver-docs_0_OUTDIR)/VBoxDocumentation.zip \
287         $(buildserver-docs_0_OUTDIR)/VBoxDocumentation.zip.tmp \
288         $(addprefix $(PATH_TARGET)/, \
289                 VirtualBox.chm UserManual.pdf \
290                 $(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES),VirtualBox_$(f).chm UserManual_$(f).pdf))
291
292 ## @todo Hack to get at TOOL_ZIP_UNPACK; see if this can be integrated somehow...
293 include $(KBUILD_PATH)/tools/ZIP.kmk
294
295 $$(buildserver-docs_0_OUTDIR)/unpacked.ts +| $(PATH_TARGET)/VirtualBox.chm $(PATH_TARGET)/UserManual.pdf \
296 $(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES),$(PATH_TARGET)/VirtualBox_$(f).chm $(PATH_TARGET)/UserManual_$(f).pdf): \
297                 $$(buildserver-docs_0_OUTDIR)/VBoxDocumentation.zip
298         $(call MSG_L1,Unpacking documentation)
299         $(QUIET)$(TOOL_ZIP_UNPACK) $(TOOL_ZIP_UNPACKFLAGS) -o $< -d $(PATH_TARGET)
300         $(APPEND) -t $@ "done"
301
302 $$(buildserver-docs_0_OUTDIR)/VBoxDocumentation.zip: $(VBOX_SVN_REV_KMK) $(PATH_DEVTOOLS)/bin/documentation.sh | $$(dir $$@)
303         $(RM) -f $@ $@.tmp
304  ifneq ($(KBUILD_HOST),win)
305         $(SHELL) $(PATH_DEVTOOLS)/bin/documentation.sh --cmd fetch --filename $@.tmp
306  else
307         $(KMK) --affinity 1 -f $(MAKEFILE) VBOX_SINGLE_MAKEFILE= buildserver-documentation-affinity-hack
308  endif
309         $(CP) -f $@.tmp $@
310         $(RM) -f $@.tmp
311 ## @todo kBuild: The $(CP)/$(RM) stuff can be replaced by a simple $(TOUCH) once that has been added to kBuild.
312
313  ifeq ($(KBUILD_HOST),win)
314 buildserver-documentation-affinity-hack:
315         $(SHELL) $(PATH_DEVTOOLS)/bin/documentation.sh --cmd fetch --filename $(buildserver-docs_0_OUTDIR)/VBoxDocumentation.zip.tmp
316  endif
317 endif # VBOX_WITH_DOCS_FROM_BUILD_SERVER
318
319
320  ifdef VBOX_WITH_EFI
321   #
322   # Install EFI firmware image
323   #
324   ifdef VBOX_WITH_EFIFW_FROM_BUILD_SERVER
325    #
326    # Either from the build server.
327    #
328    INSTALLS += buildserver-efifw
329    buildserver-efifw_INST = $(INST_BIN)
330    buildserver-efifw_MODE = 0644
331    buildserver-efifw_SOURCES = \
332         $(buildserver-efifw_0_OUTDIR)/FV/VBOX.fd=>VBoxEFI32.fd \
333            $(buildserver-efifw_0_OUTDIR)/FV/VBOX64.fd=>VBoxEFI64.fd
334    buildserver-efifw_CLEANS = \
335         $(buildserver-efifw_0_OUTDIR)/unpacked.ts \
336         $(buildserver-efifw_0_OUTDIR)/FV/VBOX.fd \
337            $(buildserver-efifw_0_OUTDIR)/FV/VBOX64.fd \
338         $(buildserver-efifw_0_OUTDIR)/VBoxEfiFirmware.zip \
339         $(buildserver-efifw_0_OUTDIR)/VBoxEfiFirmware.zip.tmp
340    ## @todo rainy day: cleanup the output directory (zip contains lots more)
341
342    ## @todo Hack to get at TOOL_ZIP_UNPACK; see if this can be integrated somehow...
343    include $(KBUILD_PATH)/tools/ZIP.kmk
344
345    $$(buildserver-efifw_0_OUTDIR)/unpacked.ts \
346    +| $$(buildserver-efifw_0_OUTDIR)/FV/VBOX.fd \
347       $$(buildserver-efifw_0_OUTDIR)/FV/VBOX64.fd: \
348                 $$(buildserver-efifw_0_OUTDIR)/VBoxEfiFirmware.zip
349         $(call MSG_L1,Unpacking EFI firmware)
350         $(QUIET)$(TOOL_ZIP_UNPACK) $(TOOL_ZIP_UNPACKFLAGS) -o $< -d $(buildserver-efifw_0_OUTDIR)
351         $(APPEND) -t $@ "done"
352
353    $$(buildserver-efifw_0_OUTDIR)/VBoxEfiFirmware.zip: \
354                 $(VBOX_SVN_REV_KMK) $(PATH_DEVTOOLS)/bin/efi_firmware.sh | $$(dir $$@)
355         $(RM) -f $@ $@.tmp
356    ifneq ($(KBUILD_HOST),win)
357         $(SHELL) $(PATH_DEVTOOLS)/bin/efi_firmware.sh --cmd fetch --filename $@.tmp
358    else
359         $(KMK) --affinity 1 -f $(MAKEFILE) VBOX_SINGLE_MAKEFILE= buildserver-efifw-affinity-hack
360    endif
361         $(CP) -f $@.tmp $@
362         $(RM) -f $@.tmp
363 ## @todo kBuild: The $(CP)/$(RM) stuff can be replaced by a simple $(TOUCH) once that has been added to kBuild.
364
365    ifeq ($(KBUILD_HOST),win)
366     buildserver-efifw-affinity-hack:
367         $(SHELL) $(PATH_DEVTOOLS)/bin/efi_firmware.sh --cmd fetch --filename $(buildserver-efifw_0_OUTDIR)/VBoxEfiFirmware.zip.tmp
368    endif
369   else # !VBOX_WITH_EFIFW_FROM_BUILD_SERVER
370    #
371    # Or from the local copy
372    #
373    INSTALLS += local-efifw
374    local-efifw_INST = $(INST_BIN)
375    local-efifw_MODE = 0644
376    local-efifw_SOURCES = \
377         $(PATH_ROOT)/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd=>VBoxEFI32.fd \
378         $(PATH_ROOT)/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd=>VBoxEFI64.fd
379   endif # !VBOX_WITH_EFIFW_FROM_BUILD_SERVER
380  endif # VBOX_WITH_EFI
381
382
383 #
384 # Install staged binaries on platforms where we can't cross
385 # compile things.
386 #
387 ifn1of ($(KBUILD_TARGET), l4 linux win)
388  VBOX_PATH_STAGED ?= .
389
390  # Additions.
391  ifndef VBOX_WITH_LINUX_ADDITIONS
392   ifndef VBOX_WITH_WIN32_ADDITIONS
393    ifneq ($(wildcard $(VBOX_PATH_STAGED)/VBoxGuestAdditions.iso),)
394     INSTALLS += staged-additions
395     staged-additions_INST = $(INST_ADDITIONS_ISO)
396     staged-additions_MODE = 0644
397     staged-additions_SOURCES = $(VBOX_PATH_STAGED)/VBoxGuestAdditions.iso
398    endif
399   endif
400  endif
401
402  # guesttool.exe
403  ifndef VBOX_WITH_WIN32_ADDITIONS
404   ifneq ($(wildcard $(VBOX_PATH_STAGED)/guesttool.exe),)
405    INSTALLS += staged-guesttool
406    staged-guesttool_INST = $(INST_BIN)
407    staged-guesttool_SOURCES = $(VBOX_PATH_STAGED)/guesttool.exe
408   endif
409  endif
410
411 endif
412
413 endif # !VBOX_ONLY_ADDITIONS && !VBOX_ONLY_TESTSUITE && !VBOX_ONLY_DOCS
414
415
416 ifdef VBOX_ONLY_DOCS
417 # It may sound a bit odd, but for preparing the documentation package the
418 # doxygen documentation isn't needed and increases the build time a lot.
419 docs:
420 else  # !VBOX_ONLY_DOCS
421 #
422 # Generate documentation.
423 # (This should be converted into a separate pass or merged with an existing one later.)
424 #
425  ifdef VBOX_SINGLE_MAKEFILE
426   ifdef VBOX_WITH_ALL_DOXYGEN_TARGETS
427 docs: docs.Core
428   endif
429  else  # !VBOX_SINGLE_MAKEFILE
430 docs: $(if $(VBOX_WITH_ALL_DOXYGEN_TARGETS),docs.Core)
431         $(KMK) -C src/VBox/Main    docs.Main
432   ifdef VBOX_WITH_ALL_DOXYGEN_TARGETS
433         $(KMK) -C src/VBox/Runtime docs.iprt
434   endif
435  endif # !VBOX_SINGLE_MAKEFILE
436 endif # !VBOX_ONLY_DOCS
437
438 docs.Core docs.core: $(PATH_TARGET)/docs.Core
439
440
441
442 #
443 # The core (VMM+REM+Devices+Main) documentation.
444 #
445 # This includes so much because we wish to have the complete CFGM
446 # and GCFGM lists.
447 #
448 OTHER_CLEAN += \
449         $(PATH_TARGET)/Doxyfile.Core \
450         $(PATH_TARGET)/Doxyfile.Core.dep
451
452 VBOX_CORE_DOXYFILE_INPUT_DIRS = \
453         include/iprt \
454         include/iprt/cpp \
455         include/iprt/linux \
456         include/VBox \
457         include/VBox/com \
458         include/VBox/HostServices \
459         include/VBox/GuestHost \
460         include/VBox/HGSMI \
461         src/VBox/VMM \
462         src/VBox/VMM/VMMR0 \
463         src/VBox/VMM/VMMGC \
464         src/VBox/VMM/VMMAll \
465         src/VBox/VMM/PATM \
466         src/VBox/VMM/PATM/VMMR0 \
467         src/VBox/VMM/PATM/VMMGC \
468         src/VBox/VMM/PATM/VMMAll \
469         src/VBox/VMM/VMMSwitcher \
470         src/VBox/Debugger \
471         src/VBox/Devices \
472         src/VBox/Devices/Audio \
473         src/VBox/Devices/Bus \
474         src/VBox/Devices/Graphics \
475         src/VBox/Devices/Graphics/BIOS \
476         src/VBox/Devices/Input \
477         src/VBox/Devices/Networking \
478         src/VBox/Devices/PC \
479         src/VBox/Devices/PC/BIOS \
480         src/VBox/Devices/Parallel \
481         src/VBox/Devices/Serial \
482         src/VBox/Devices/Storage \
483         src/VBox/Devices/VBoxHDDFormats \
484         src/VBox/Devices/VBoxHDDFormats/StorageCraft \
485         src/VBox/Devices/USB \
486         src/VBox/Devices/USB/darwin \
487         src/VBox/Devices/USB/linux \
488         src/VBox/Devices/USB/os2 \
489         src/VBox/Devices/USB/solaris \
490         src/VBox/Devices/USB/vrdp \
491         src/VBox/Devices/USB/win32 \
492         src/VBox/Devices/VMMDev \
493         src/VBox/Main/include \
494         src/VBox/Main/include/hgcm \
495         src/VBox/Main \
496         src/VBox/Main/glue \
497         src/VBox/Main/hgcm \
498         src/VBox/Main/webservice \
499         src/VBox/Main/xml \
500         src/VBox/Main/darwin \
501         src/VBox/Main/linux \
502         src/VBox/Main/os2 \
503         src/VBox/Main/solaris \
504         src/VBox/Main/win \
505         src/VBox/Main/xpcom \
506         src/VBox/HostServices \
507         src/VBox/HostServices/SharedClipboard \
508         src/VBox/HostServices/SharedFolders \
509         src/VBox/HostServices/SharedInfoServices \
510         src/VBox/HostServices/SharedOpenGL \
511         src/VBox/HostDrivers/Support \
512         src/VBox/HostDrivers/Support/darwin \
513         src/VBox/HostDrivers/Support/freebsd \
514         src/VBox/HostDrivers/Support/l4 \
515         src/VBox/HostDrivers/Support/linux \
516         src/VBox/HostDrivers/Support/os2 \
517         src/VBox/HostDrivers/Support/solaris \
518         src/VBox/HostDrivers/Support/win \
519         src/VBox/HostDrivers/VBoxNetFlt \
520         src/VBox/HostDrivers/VBoxNetFlt/darwin \
521         src/VBox/HostDrivers/VBoxNetFlt/linux \
522         src/VBox/HostDrivers/VBoxNetFlt/solaris \
523         src/VBox/HostDrivers/VBoxNetFlt/win \
524         src/VBox/HostDrivers/VBoxNetNat \
525         src/VBox/HostDrivers/VBoxNetNat/darwin \
526         src/VBox/HostDrivers/VBoxNetNat/linux \
527         src/VBox/HostDrivers/VBoxNetNat/solaris \
528         src/VBox/HostDrivers/VBoxNetNat/win \
529         src/VBox/HostDrivers/VBoxNetAdp \
530         src/VBox/HostDrivers/VBoxNetAdp/darwin \
531         src/VBox/HostDrivers/VBoxNetAdp/linux \
532         src/VBox/HostDrivers/VBoxNetAdp/solaris \
533         src/VBox/HostDrivers/VBoxNetAdp/win \
534         src/VBox/HostDrivers/VBoxUSB \
535         src/VBox/HostDrivers/VBoxUSB/darwin \
536         src/VBox/HostDrivers/VBoxUSB/os2 \
537         src/VBox/HostDrivers/VBoxUSB/solaris \
538         src/VBox/HostDrivers/VBoxUSB/win \
539         src/VBox/HostDrivers/VBoxUSB/win/Device \
540         src/VBox/HostDrivers/VBoxUSB/win/Device/amd64 \
541         src/VBox/HostDrivers/VBoxUSB/win/Device/x86 \
542         src/VBox/HostDrivers/VBoxUSB/win/Filter \
543         src/VBox/HostDrivers/VBoxUSB/win/Install \
544         src/VBox/HostDrivers/VBoxUSB/win/Monitor \
545         src/VBox/HostDrivers/VBoxUSB/win/Monitor/win32 \
546         src/VBox/HostDrivers/VBoxUSB/win/Monitor/win64 \
547         src/VBox/HostDrivers/VBoxUSB/win/usbd \
548
549 # These must come first in order to make things look nice.
550 VBOX_CORE_DOXYFILE_INPUT_FIRST =\
551         $(PATH_ROOT)/doc/VBox-doc.c \
552         $(PATH_ROOT)/doc/VBox-CodingGuidelines.cpp \
553         $(PATH_ROOT)/doc/VBox-MakefileGuidelines.cpp \
554         $(PATH_ROOT)/src/VBox/VMM/VMMCodingGuidelines.cpp \
555         $(PATH_ROOT)/src/VBox/VMM/VMMDocsRawMode.cpp \
556         $(PATH_ROOT)/include/VBox/cdefs.h \
557         $(PATH_ROOT)/include/VBox/vmapi.h \
558         $(PATH_ROOT)/include/VBox/vmm.h \
559         $(PATH_ROOT)/include/VBox/cpum.h \
560         $(PATH_ROOT)/include/VBox/mm.h \
561         $(PATH_ROOT)/include/VBox/pgm.h \
562         $(PATH_ROOT)/include/VBox/selm.h \
563         $(PATH_ROOT)/include/VBox/trpm.h \
564         $(PATH_ROOT)/include/VBox/patm.h \
565         $(PATH_ROOT)/include/VBox/dbgf.h \
566         $(PATH_ROOT)/include/VBox/stam.h \
567         $(PATH_ROOT)/include/VBox/em.h \
568         $(PATH_ROOT)/include/VBox/pdm.h \
569         $(PATH_ROOT)/include/VBox/rem.h \
570         $(PATH_ROOT)/include/VBox/iom.h \
571         $(PATH_ROOT)/include/VBox/cfgm.h \
572         $(PATH_ROOT)/include/VBox/tm.h \
573         $(PATH_ROOT)/include/VBox/csam.h \
574         $(PATH_ROOT)/include/VBox/ssm.h \
575         $(PATH_ROOT)/include/VBox/hwaccm.h \
576         $(PATH_ROOT)/include/VBox/hwacc_svm.h \
577         $(PATH_ROOT)/include/VBox/hwacc_vmx.h \
578         \
579         $(PATH_ROOT)/src/VBox/VMM/CFGMInternal.h \
580         $(PATH_ROOT)/src/VBox/VMM/CPUMInternal.h \
581         $(PATH_ROOT)/src/VBox/VMM/DBGFInternal.h \
582         $(PATH_ROOT)/src/VBox/VMM/EMInternal.h \
583         $(PATH_ROOT)/src/VBox/VMM/HWACCMInternal.h \
584         $(PATH_ROOT)/src/VBox/VMM/IOMInternal.h \
585         $(PATH_ROOT)/src/VBox/VMM/MMInternal.h \
586         $(PATH_ROOT)/src/VBox/VMM/PDMInternal.h \
587         $(PATH_ROOT)/src/VBox/VMM/PGMInternal.h \
588         $(PATH_ROOT)/src/VBox/VMM/PATM/CSAMInternal.h \
589         $(PATH_ROOT)/src/VBox/VMM/PATM/PATMInternal.h \
590         $(PATH_ROOT)/src/VBox/VMM/REMInternal.h \
591         $(PATH_ROOT)/src/VBox/VMM/SELMInternal.h \
592         $(PATH_ROOT)/src/VBox/VMM/SSMInternal.h \
593         $(PATH_ROOT)/src/VBox/VMM/STAMInternal.h \
594         $(PATH_ROOT)/src/VBox/VMM/TMInternal.h \
595         $(PATH_ROOT)/src/VBox/VMM/TRPMInternal.h \
596         $(PATH_ROOT)/src/VBox/VMM/VMInternal.h \
597         $(PATH_ROOT)/src/VBox/VMM/VMMInternal.h \
598         \
599         $(PATH_ROOT)/include/VBox/vm.h \
600         \
601         $(PATH_ROOT)/include/VBox/sup.h \
602         $(PATH_ROOT)/include/VBox/VBoxHDD.h \
603         $(PATH_ROOT)/include/VBox/types.h \
604         $(PATH_ROOT)/include/VBox/err.h \
605         $(PATH_ROOT)/include/VBox/x86.h \
606         $(PATH_ROOT)/include/VBox/cpumdis.h \
607         $(PATH_ROOT)/include/VBox/dbggui.h \
608         $(PATH_ROOT)/include/VBox/dis.h \
609         $(PATH_ROOT)/include/VBox/disopcode.h \
610         $(PATH_ROOT)/include/VBox/intnet.h \
611         $(PATH_ROOT)/include/VBox/settings.h \
612         $(PATH_ROOT)/include/VBox/pci.h \
613         $(PATH_ROOT)/include/VBox/scsi.h \
614         $(PATH_ROOT)/include/VBox/shflsvc.h \
615         $(PATH_ROOT)/include/VBox/hgcmsvc.h \
616         $(PATH_ROOT)/include/VBox/usb.h \
617         $(PATH_ROOT)/include/VBox/vusb.h \
618         \
619         $(PATH_ROOT)/include/VBox/log.h \
620         $(PATH_ROOT)/include/VBox/param.h \
621         $(PATH_ROOT)/include/VBox/version.h
622
623 VBOX_CORE_DOXYFILE_INPUT := \
624         $(filter-out %.cpp.h, $(sort $(wildcard $(addsuffix /*.h, $(VBOX_CORE_DOXYFILE_INPUT_DIRS)))) ) \
625         $(foreach dir, $(VBOX_CORE_DOXYFILE_INPUT_DIRS), $(wildcard $(dir)/*.cpp $(dir)/*.c $(dir)/.asm))
626 VBOX_CORE_DOXYFILE_INPUT := \
627         $(VBOX_CORE_DOXYFILE_INPUT_FIRST) \
628         $(filter-out $(VBOX_CORE_DOXYFILE_INPUT_FIRST), $(VBOX_CORE_DOXYFILE_INPUT))
629
630 # And some some additional stuff.
631 VBOX_CORE_DOXYFILE_INPUT += \
632         $(PATH_ROOT)/src/recompiler/VBoxRecompiler.c \
633         $(PATH_ROOT)/src/recompiler/VBoxREMWrapper.cpp
634
635
636 VBOX_CORE_DOXYFILE_OUTPUT = $(PATH_OUT)/docs/Core
637 BLDDIRS += $(VBOX_CORE_DOXYFILE_OUTPUT)
638
639 -include $(PATH_TARGET)/Doxyfile.Core.dep
640
641 # Generate the Doxyfile
642 $(PATH_TARGET)/Doxyfile.Core: Doxyfile.Core \
643                 $(comp-vars VBOX_CORE_DOXYFILE_INPUT,DOXYGEN_INPUT_PREV,FORCE) \
644                 $(comp-vars VBOX_CORE_DOXYFILE_OUTPUT,DOXYGEN_OUTPUT_PREV,FORCE) \
645                 | $$(dir $$@)
646         $(RM) -f $@ $@.tmp $(PATH_TARGET)/Doxyfile.Core.dep
647         $(CP) -f Doxyfile.Core $@.tmp
648         $(APPEND) $@.tmp
649         $(APPEND) $@.tmp "OUTPUT_DIRECTORY = $(VBOX_CORE_DOXYFILE_OUTPUT)"
650         $(APPEND) $@.tmp "WARN_LOGFILE = $(VBOX_CORE_DOXYFILE_OUTPUT)/errors"
651         $(APPEND) $@.tmp "INCLUDE_PATH = $(PATH_ROOT)/include $(PATH_ROOT)/src/VBox/VMM $(PATH_ROOT)/src/VBox/Main/include "
652         $(APPEND) $@.tmp "INCLUDE_FILE_PATTERNS = *.cpp.h"
653         $(APPEND) $@.tmp
654         $(APPEND) $@.tmp "INPUT = $(VBOX_CORE_DOXYFILE_INPUT)"
655         $(APPEND) $@.tmp
656         $(APPEND) $@.tmp "PREDEFINED += $(DEFS) $(DEFS.$(KBUILD_TARGET)) $(DEFS.$(KBUILD_TARGET_ARCH)) $(ARCH_BITS_DEFS)"
657         $(APPEND) $@.tmp "PREDEFINED += ARCH_BITS=HC_ARCH_BITS R3_ARCH_BITS=HC_ARCH_BITS R0_ARCH_BITS=HC_ARCH_BITS "
658         $(APPEND) $@.tmp
659         $(MV) -f $@.tmp $@
660         @$(APPEND) $(PATH_TARGET)/Doxyfile.Core.dep "DOXYGEN_OUTPUT_PREV = $(VBOX_CORE_DOXYFILE_OUTPUT)"
661         @$(APPEND) $(PATH_TARGET)/Doxyfile.Core.dep "DOXYGEN_INPUT_PREV = $(VBOX_CORE_DOXYFILE_INPUT)"
662
663 # Do the actual job.
664 $(PATH_TARGET)/docs.Core: $(PATH_TARGET)/Doxyfile.Core $$(VBOX_CORE_DOXYFILE_INPUT) | $(VBOX_CORE_DOXYFILE_OUTPUT)/
665         $(RM) -f $(PATH_TARGET)/docs.Core
666         $(RM) -Rf $(VBOX_CORE_DOXYFILE_OUTPUT)/html/
667         doxygen $(PATH_TARGET)/Doxyfile.Core
668         $(APPEND) $(PATH_TARGET)/docs.Core
669
670
671 #
672 # Alias for kmk_time.  Used by both the additions and testsuite build setups.
673 #
674 VBOX_KMK_TIME = $(KBUILD_BIN_PATH)/kmk_time
675
676
677 #
678 # Build the additions, all of them.
679 #
680 # This is currently tailored (hardcoded) for the additions
681 # build box. Can make it pretty and configurable later.
682 #
683 # The fetching must be done in serial fashion, while the building
684 # should be more flexible wrt to -jN.
685 #
686 additions-fetch:
687         + $(KMK) -C tools fetch VBOX_ONLY_ADDITIONS=1
688         + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=linux   BUILD_TARGET_ARCH=amd64 BUILD_TARGET=linux    VBOX_ONLY_ADDITIONS=1
689         + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86   KBUILD_TARGET=linux   BUILD_TARGET_ARCH=x86   BUILD_TARGET=linux    VBOX_ONLY_ADDITIONS=1
690 #       + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86   KBUILD_TARGET=os2     BUILD_TARGET_ARCH=x86   BUILD_TARGET=os2      VBOX_ONLY_ADDITIONS=1
691         + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=solaris BUILD_TARGET_ARCH=amd64 BUILD_TARGET=solaris  VBOX_ONLY_ADDITIONS=1
692         + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86   KBUILD_TARGET=solaris BUILD_TARGET_ARCH=x86   BUILD_TARGET=solaris  VBOX_ONLY_ADDITIONS=1
693         + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=win     BUILD_TARGET_ARCH=amd64 BUILD_TARGET=win      VBOX_ONLY_ADDITIONS=1
694         + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86   KBUILD_TARGET=win     BUILD_TARGET_ARCH=x86   BUILD_TARGET=win      VBOX_ONLY_ADDITIONS=1
695
696
697 ## @todo Currently combined solaris additions building assumes that amd64 is
698 # built first. The windows amd64 additions need some x86 files, so don't change
699 # the order of the windows builds. TODO: Split building and packing for these two VMs.
700 additions-build: \
701         additions-build-solaris.amd64 \
702         additions-build-solaris.x86 \
703         additions-build-win.x86 \
704         additions-build-win.amd64 \
705         additions-build-os2.x86 \
706         additions-build-linux.amd64 \
707         additions-build-linux.x86
708
709 VBOX_ADDITIONS_BUILD.amd64 = VBOX_ONLY_ADDITIONS=1 VBOX_WITHOUT_ADDITIONS_ISO=1 \
710         KBUILD_TYPE=$(KBUILD_TYPE) BUILD_TYPE=$(KBUILD_TYPE) \
711         KBUILD_TARGET_ARCH=amd64 BUILD_TARGET_ARCH=amd64 \
712         VBOX_SVN_REV=$(VBOX_SVN_REV)
713
714 VBOX_ADDITIONS_BUILD.x86 = VBOX_ONLY_ADDITIONS=1 VBOX_WITHOUT_ADDITIONS_ISO=1 \
715         KBUILD_TYPE=$(KBUILD_TYPE) BUILD_TYPE=$(KBUILD_TYPE) \
716         KBUILD_TARGET_ARCH=x86 BUILD_TARGET_ARCH=x86 \
717         VBOX_SVN_REV=$(VBOX_SVN_REV)
718
719 # Automatically determine the additions build subdir name. Used for figuring
720 # out directory names inside the additions building VMs.
721 VBOX_ADDITIONS_BUILD_SUBDIRNAME := $(lastword $(subst /, ,$(PATH_ROOT)))
722
723 # When building in parallel on a Windows host, make sure we finish the host
724 # bit before kicking off any UNIX guest or we'll run into file sharing issues.
725 ifeq ($(KBUILD_TARGET),win)
726 VBOX_ADDITIONS_BUILD_WIN_HOST_FIRST = additions-build-win.x86 additions-build-win.amd64
727 else
728 VBOX_ADDITIONS_BUILD_WIN_HOST_FIRST =
729 endif
730
731 # ASSUMES the 32-bit edition has been built already. Also for serializing VM access.
732 additions-build-win.amd64: additions-build-win.x86
733 ifeq ($(KBUILD_TARGET),win)
734         + $(VBOX_KMK_TIME) $(KMK) $(VBOX_ADDITIONS_BUILD.amd64) all $(VBOX_ADD_HOST_BUILD_TWEAK)
735         + $(VBOX_KMK_TIME) $(KMK) $(VBOX_ADDITIONS_BUILD.amd64) packing
736 else
737         $(call MSG_L1,Building Windows/amd64 additions)
738         $(VBOX_KMK_TIME) ssh vbox@192.168.27.5 " echo $@ && cd e:/$(VBOX_ADDITIONS_BUILD_SUBDIRNAME) && tools/env.sh kmk $(VBOX_ADDITIONS_BUILD.amd64) all packing "
739 endif
740
741 additions-build-win.x86:
742 ifeq ($(KBUILD_TARGET),win)
743         + $(VBOX_KMK_TIME) $(KMK) $(VBOX_ADDITIONS_BUILD.x86) all $(VBOX_ADD_HOST_BUILD_TWEAK)
744         + $(VBOX_KMK_TIME) $(KMK) $(VBOX_ADDITIONS_BUILD.x86) packing
745 else
746         $(call MSG_L1,Building Windows/x86 additions)
747         $(VBOX_KMK_TIME) ssh vbox@192.168.27.5 " echo $@ && cd e:/$(VBOX_ADDITIONS_BUILD_SUBDIRNAME) && tools/env.sh kmk $(VBOX_ADDITIONS_BUILD.x86) all packing"
748 endif
749
750 # ASSUMES the 64-bit edition are built first. This also serializes VM access.
751 ifeq ($(KBUILD_TARGET),solaris)
752 additions-build-solaris.amd64:
753         + $(VBOX_KMK_TIME) $(KMK) $(VBOX_ADDITIONS_BUILD.amd64) all $(VBOX_ADD_HOST_BUILD_TWEAK)
754         + $(VBOX_KMK_TIME) $(KMK) $(VBOX_ADDITIONS_BUILD.amd64) packing
755
756 additions-build-solaris.x86: additions-build-solaris.amd64
757         + $(VBOX_KMK_TIME) $(KMK) $(VBOX_ADDITIONS_BUILD.x86) VBOX_WITH_COMBINED_SOLARIS_GUEST_PACKAGE=1 all $(VBOX_ADD_HOST_BUILD_TWEAK)
758         + $(VBOX_KMK_TIME) $(KMK) $(VBOX_ADDITIONS_BUILD.x86) VBOX_WITH_COMBINED_SOLARIS_GUEST_PACKAGE=1 packing
759
760 else
761 additions-build-solaris.rsync-into-vm: $(VBOX_ADDITIONS_BUILD_WIN_HOST_FIRST)
762         $(VBOX_KMK_TIME) rsync -a --delete --delete-excluded --exclude .svn --exclude FetchDir --exclude tinderclient.log --exclude win.amd64 --exclude win.x86 . 192.168.27.4:/mnt/tinderbox/$(VBOX_ADDITIONS_BUILD_SUBDIRNAME)
763
764 additions-build-solaris.build-it: additions-build-solaris.rsync-into-vm
765         $(call MSG_L1,Building Solaris/amd64 additions)
766         $(VBOX_KMK_TIME) ssh vbox@192.168.27.4 " echo $@/amd64 && cd /mnt/tinderbox/$(VBOX_ADDITIONS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_ADDITIONS_BUILD.amd64) all packing"
767         $(call MSG_L1,Building Solaris/x86 additions)
768         $(VBOX_KMK_TIME) ssh vbox@192.168.27.4 " echo $@/x86   && cd /mnt/tinderbox/$(VBOX_ADDITIONS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_ADDITIONS_BUILD.x86) all packing VBOX_WITH_COMBINED_SOLARIS_GUEST_PACKAGE=1"
769
770 additions-build-solaris.rsync-out-of-vm: additions-build-solaris.build-it
771         $(VBOX_KMK_TIME) rsync -a --delete 192.168.27.4:/mnt/tinderbox/$(VBOX_ADDITIONS_BUILD_SUBDIRNAME)/out/solaris.x86 out/
772         $(VBOX_KMK_TIME) rsync -a --delete 192.168.27.4:/mnt/tinderbox/$(VBOX_ADDITIONS_BUILD_SUBDIRNAME)/out/solaris.amd64 out/
773
774 .NOTPARALLEL: additions-build-solaris.rsync-out-of-vm additions-build-solaris.rsync-into-vm
775 .PHONY:       additions-build-solaris.rsync-out-of-vm additions-build-solaris.rsync-into-vm additions-build-solaris.build-it
776
777 additions-build-solaris.amd64: additions-build-solaris.rsync-out-of-vm
778 additions-build-solaris.x86: additions-build-solaris.rsync-out-of-vm
779 endif
780
781 additions-build-os2.x86:
782 #ifeq ($(KBUILD_TARGET),os2)
783 #       + $(VBOX_KMK_TIME) $(KMK) $(VBOX_ADDITIONS_BUILD.x86) all $(VBOX_ADD_HOST_BUILD_TWEAK)
784 #       + $(VBOX_KMK_TIME) $(KMK) $(VBOX_ADDITIONS_BUILD.x86) packing
785 #else
786 #       $(VBOX_KMK_TIME) ssh vbox@192.168.27.3 " cd /mnt/tinderbox/$(VBOX_ADDITIONS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_ADDITIONS_BUILD.x86) "
787 #endif
788
789 additions-build-linux.amd64:   $(VBOX_ADDITIONS_BUILD_WIN_HOST_FIRST)
790 ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),linux.amd64)
791         + $(VBOX_KMK_TIME) $(KMK) $(VBOX_ADDITIONS_BUILD.amd64) all $(VBOX_ADD_HOST_BUILD_TWEAK)
792         + $(VBOX_KMK_TIME) $(KMK) $(VBOX_ADDITIONS_BUILD.amd64) packing
793 else
794         $(call MSG_L1,Building Linux/amd64 additions)
795         $(VBOX_KMK_TIME) ssh vbox@192.168.27.12 " echo $@ && cd /mnt/tinderbox/$(VBOX_ADDITIONS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_ADDITIONS_BUILD.amd64) all packing"
796 endif
797
798 additions-build-linux.x86:   $(VBOX_ADDITIONS_BUILD_WIN_HOST_FIRST)
799 ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),linux.x86)
800         + $(VBOX_KMK_TIME) $(KMK) $(VBOX_ADDITIONS_BUILD.x86) all $(VBOX_ADD_HOST_BUILD_TWEAK)
801         + $(VBOX_KMK_TIME) $(KMK) $(VBOX_ADDITIONS_BUILD.x86) packing
802 else
803         $(call MSG_L1,Building Linux/x86 additions)
804         $(VBOX_KMK_TIME) ssh vbox@192.168.27.2 " echo $@ && cd /mnt/tinderbox/$(VBOX_ADDITIONS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_ADDITIONS_BUILD.x86) all packing"
805 endif
806
807
808 additions-packing:
809         + $(KMK) VBOX_ONLY_ADDITIONS=1 \
810                 VBOX_WITH_ADDITIONS_ISO.freebsd.amd64= \
811                 VBOX_WITH_ADDITIONS_ISO.freebsd.x86= \
812                 VBOX_WITH_ADDITIONS_ISO.linux.amd64=1 \
813                 VBOX_WITH_ADDITIONS_ISO.linux.x86=1 \
814                 VBOX_WITH_ADDITIONS_ISO.solaris.amd64=1 \
815                 VBOX_WITH_ADDITIONS_ISO.solaris.x86=1 \
816                 VBOX_WITH_COMBINED_SOLARIS_GUEST_PACKAGE=1 \
817                 VBOX_WITH_ADDITIONS_ISO.win.amd64=1 \
818                 VBOX_WITH_ADDITIONS_ISO.win.x86=1 \
819                 -C src/VBox/Additions \
820                 $(VBOX_PATH_ADDITIONS)/VBoxGuestAdditions.iso
821
822 .PHONY: \
823         additions-build-win.x86 \
824         additions-build-win.amd64 \
825         additions-build-solaris.amd64 \
826         additions-build-solaris.x86 \
827         additions-build-os2.x86 \
828         additions-build-linux.amd64 \
829         additions-build-linux.x86 \
830         additions-packing
831
832
833 #
834 # Build the test suite, all of it.
835 #
836 # This is currently tailored (hardcoded) for the additions build box just like
837 # the additions build above, which it in fact is a copy of.
838 #
839 testsuite-fetch:
840         + $(KMK) -C tools fetch VBOX_ONLY_TESTSUITE=1
841 #       + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=darwin  BUILD_TARGET_ARCH=amd64 BUILD_TARGET=darwin    VBOX_ONLY_TESTSUITE=1
842 #       + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86   KBUILD_TARGET=darwin  BUILD_TARGET_ARCH=x86   BUILD_TARGET=darwin    VBOX_ONLY_TESTSUITE=1
843         + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=linux   BUILD_TARGET_ARCH=amd64 BUILD_TARGET=linux     VBOX_ONLY_TESTSUITE=1
844         + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86   KBUILD_TARGET=linux   BUILD_TARGET_ARCH=x86   BUILD_TARGET=linux     VBOX_ONLY_TESTSUITE=1
845 #       + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86   KBUILD_TARGET=os2     BUILD_TARGET_ARCH=x86   BUILD_TARGET=os2       VBOX_ONLY_TESTSUITE=1
846         + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=solaris BUILD_TARGET_ARCH=amd64 BUILD_TARGET=solaris   VBOX_ONLY_TESTSUITE=1
847         + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86   KBUILD_TARGET=solaris BUILD_TARGET_ARCH=x86   BUILD_TARGET=solaris   VBOX_ONLY_TESTSUITE=1
848         + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=win     BUILD_TARGET_ARCH=amd64 BUILD_TARGET=win       VBOX_ONLY_TESTSUITE=1
849         + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86   KBUILD_TARGET=win     BUILD_TARGET_ARCH=x86   BUILD_TARGET=win       VBOX_ONLY_TESTSUITE=1
850
851
852 testsuite-build: \
853         testsuite-build-solaris.amd64 \
854         testsuite-build-solaris.x86 \
855         testsuite-build-win.x86 \
856         testsuite-build-win.amd64 \
857         testsuite-build-os2.x86 \
858         testsuite-build-linux.amd64 \
859         testsuite-build-linux.x86
860
861 VBOX_TESTSUITE_BUILD.amd64 = VBOX_ONLY_TESTSUITE=1 \
862         KBUILD_TYPE=$(KBUILD_TYPE) BUILD_TYPE=$(KBUILD_TYPE) \
863         KBUILD_TARGET_ARCH=amd64 BUILD_TARGET_ARCH=amd64 \
864         VBOX_SVN_REV=$(VBOX_SVN_REV)
865
866 VBOX_TESTSUITE_BUILD.x86 = VBOX_ONLY_TESTSUITE=1 \
867         KBUILD_TYPE=$(KBUILD_TYPE) BUILD_TYPE=$(KBUILD_TYPE) \
868         KBUILD_TARGET_ARCH=x86 BUILD_TARGET_ARCH=x86 \
869         VBOX_SVN_REV=$(VBOX_SVN_REV)
870
871 # Automatically determine the testsuite build subdir name. Used for figuring
872 # out directory names inside the test suite building VMs.
873 VBOX_TESTSUITE_BUILD_SUBDIRNAME := $(lastword $(subst /, ,$(PATH_ROOT)))
874
875 # When building in parallel on a Windows host, make sure we finish the host
876 # bit before kicking off any UNIX guest or we'll run into file sharing issues.
877 ifeq ($(KBUILD_TARGET),win)
878 VBOX_TESTSUITE_BUILD_WIN_HOST_FIRST = testsuite-build-win.x86 testsuite-build-win.amd64
879 else
880 VBOX_TESTSUITE_BUILD_WIN_HOST_FIRST =
881 endif
882
883 # ASSUMES the 32-bit edition has been built already. Also for serializing VM access.
884 testsuite-build-win.amd64: testsuite-build-win.x86
885 ifeq ($(KBUILD_TARGET),win)
886         + $(VBOX_KMK_TIME) $(KMK) $(VBOX_TESTSUITE_BUILD.amd64) all $(VBOX_TESTSUITE_HOST_BUILD_TWEAK)
887 else
888         $(call MSG_L1,Building Windows/amd64 testsuite)
889         $(VBOX_KMK_TIME) ssh vbox@192.168.27.5 " echo $@ && cd e:/$(VBOX_TESTSUITE_BUILD_SUBDIRNAME) && tools/env.sh kmk $(VBOX_TESTSUITE_BUILD.amd64) all "
890 endif
891
892 testsuite-build-win.x86:
893 ifeq ($(KBUILD_TARGET),win)
894         + $(VBOX_KMK_TIME) $(KMK) $(VBOX_TESTSUITE_BUILD.x86) all $(VBOX_TESTSUITE_HOST_BUILD_TWEAK)
895 else
896         $(call MSG_L1,Building Windows/x86 testsuite)
897         $(VBOX_KMK_TIME) ssh vbox@192.168.27.5 " echo $@ && cd e:/$(VBOX_TESTSUITE_BUILD_SUBDIRNAME) && tools/env.sh kmk $(VBOX_TESTSUITE_BUILD.x86) all"
898 endif
899
900 ifeq ($(KBUILD_TARGET),solaris)
901 testsuite-build-solaris.amd64:
902         + $(VBOX_KMK_TIME) $(KMK) $(VBOX_TESTSUITE_BUILD.amd64) all $(VBOX_TESTSUITE_HOST_BUILD_TWEAK)
903
904 testsuite-build-solaris.x86:
905         + $(VBOX_KMK_TIME) $(KMK) $(VBOX_TESTSUITE_BUILD.x86)   all $(VBOX_TESTSUITE_HOST_BUILD_TWEAK)
906
907 else
908 testsuite-build-solaris.rsync-into-vm: $(VBOX_TESTSUITE_BUILD_WIN_HOST_FIRST)
909         $(VBOX_KMK_TIME) rsync -a --delete --delete-excluded --exclude .svn --exclude FetchDir --exclude tinderclient.log --exclude win.amd64 --exclude win.x86 . 192.168.27.4:/mnt/tinderbox/$(VBOX_TESTSUITE_BUILD_SUBDIRNAME)
910
911 testsuite-build-solaris.build-it: testsuite-build-solaris.rsync-into-vm
912         $(call MSG_L1,Building Solaris/amd64 testsuite)
913         $(VBOX_KMK_TIME) ssh vbox@192.168.27.4 " echo $@/amd64 && cd /mnt/tinderbox/$(VBOX_TESTSUITE_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_TESTSUITE_BUILD.amd64) all"
914         $(call MSG_L1,Building Solaris/x86 testsuite)
915         $(VBOX_KMK_TIME) ssh vbox@192.168.27.4 " echo $@/x86   && cd /mnt/tinderbox/$(VBOX_TESTSUITE_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_TESTSUITE_BUILD.x86) all "
916
917 testsuite-build-solaris.rsync-out-of-vm: testsuite-build-solaris.build-it
918         $(VBOX_KMK_TIME) rsync -a --delete 192.168.27.4:/mnt/tinderbox/$(VBOX_TESTSUITE_BUILD_SUBDIRNAME)/out/solaris.x86   out/
919         $(VBOX_KMK_TIME) rsync -a --delete 192.168.27.4:/mnt/tinderbox/$(VBOX_TESTSUITE_BUILD_SUBDIRNAME)/out/solaris.amd64 out/
920
921 .NOTPARALLEL: testsuite-build-solaris.rsync-out-of-vm testsuite-build-solaris.rsync-into-vm
922 .PHONY:       testsuite-build-solaris.rsync-out-of-vm testsuite-build-solaris.rsync-into-vm testsuite-build-solaris.build-it
923
924 testsuite-build-solaris.amd64: testsuite-build-solaris.rsync-out-of-vm
925 testsuite-build-solaris.x86:   testsuite-build-solaris.rsync-out-of-vm
926 endif
927
928 testsuite-build-os2.x86:
929 #ifeq ($(KBUILD_TARGET),os2)
930 #       + $(VBOX_KMK_TIME) $(KMK) $(VBOX_TESTSUITE_BUILD.x86) all $(VBOX_TESTSUITE_HOST_BUILD_TWEAK)
931 #else
932 #       $(VBOX_KMK_TIME) ssh vbox@192.168.27.3 " cd /mnt/tinderbox/$(VBOX_TESTSUITE_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_TESTSUITE_BUILD.x86) "
933 #endif
934
935 testsuite-build-linux.amd64:   $(VBOX_TESTSUITE_BUILD_WIN_HOST_FIRST)
936 ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),linux.amd64)
937         + $(VBOX_KMK_TIME) $(KMK) $(VBOX_TESTSUITE_BUILD.amd64) all $(VBOX_TESTSUITE_HOST_BUILD_TWEAK)
938 else
939         $(call MSG_L1,Building Linux/amd64 testsuite)
940         $(VBOX_KMK_TIME) ssh vbox@192.168.27.12 " echo $@ && cd /mnt/tinderbox/$(VBOX_TESTSUITE_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_TESTSUITE_BUILD.amd64) all"
941 endif
942
943 testsuite-build-linux.x86:   $(VBOX_TESTSUITE_BUILD_WIN_HOST_FIRST)
944 ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),linux.x86)
945         + $(VBOX_KMK_TIME) $(KMK) $(VBOX_TESTSUITE_BUILD.x86) all $(VBOX_TESTSUITE_HOST_BUILD_TWEAK)
946 else
947         $(call MSG_L1,Building Linux/x86 testsuite)
948         $(VBOX_KMK_TIME) ssh vbox@192.168.27.2 " echo $@ && cd /mnt/tinderbox/$(VBOX_TESTSUITE_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_TESTSUITE_BUILD.x86) all"
949 endif
950
951
952 testsuite-packing:
953         + $(KMK) VBOX_ONLY_TESTSUITE=1 \
954                 VBOX_WITH_TESTSUITE_PACKING.darwin.amd64= \
955                 VBOX_WITH_TESTSUITE_PACKING.darwin.x86= \
956                 VBOX_WITH_TESTSUITE_PACKING.freebsd.amd64= \
957                 VBOX_WITH_TESTSUITE_PACKING.freebsd.x86= \
958                 VBOX_WITH_TESTSUITE_PACKING.linux.amd64=1 \
959                 VBOX_WITH_TESTSUITE_PACKING.linux.x86=1 \
960                 VBOX_WITH_TESTSUITE_PACKING.os2.x86= \
961                 VBOX_WITH_TESTSUITE_PACKING.solaris.amd64=1 \
962                 VBOX_WITH_TESTSUITE_PACKING.solaris.x86=1 \
963                 VBOX_WITH_TESTSUITE_PACKING.win.amd64=1 \
964                 VBOX_WITH_TESTSUITE_PACKING.win.x86=1 \
965                 -C src/tests/testsuite \
966                 $(PATH_OUT)/VBoxTestSuite.zip
967
968 .PHONY: \
969         testsuite-build-win.x86 \
970         testsuite-build-win.amd64 \
971         testsuite-build-solaris.amd64 \
972         testsuite-build-solaris.x86 \
973         testsuite-build-os2.x86 \
974         testsuite-build-linux.amd64 \
975         testsuite-build-linux.x86 \
976         testsuite-packing
977
978
979 #
980 # Build the EFI firmware, all of it.
981 #
982 # Mainly hooks right now, maybe we need them later.
983 #
984 efi-fetch:
985
986 efi-build: $(VBOX_VERSION_HEADER)
987         $(PATH_ROOT)/webtools/tinderbox/client/efi-build.sh
988
989 efi-packing:
990
991 #
992 # Generate VirtualBox-OSE-x.x.x.tar.bz2 (OSE) tarballs for distribution
993 # - includes kBuild
994 # - must be executed on an OSE checkout
995 #
996
997 # the path where to store the tarball
998 TARBALLPATH ?= $(abspath $(PATH_ROOT)/..)
999 # the root directory inside the tarball
1000 TARBALLROOT ?= VirtualBox-$(VBOX_VERSION_STRING)
1001 # the name of the tarball file
1002 TARBALLNAME ?= VirtualBox-$(VBOX_VERSION_STRING).tar.bz2
1003 snapshot-ose:
1004         @$(call MSG_L1,Creating tarball $(TARBALLPATH)/$(TARBALLNAME))
1005         @if [ -r "$(PATH_ROOT)/src/VBox/Devices/USB/USBProxyDevice.cpp" ]; then \
1006             echo; \
1007             echo "Found USB stuff, refused to build OSE tarball!"; \
1008             echo; \
1009             exit 1; \
1010         fi; \
1011         if [ -z "$(VBOX_OSE)" ]; then \
1012             echo; \
1013             echo "Please do 'kmk snapshot-ose VBOX_OSE=1'"; \
1014             echo; \
1015             exit 1; \
1016         fi
1017         $(QUIET)$(MKDIR) -p $(TARBALLPATH)
1018         $(QUIET)$(RM) -f $(TARBALLPATH)/$(TARBALLROOT)
1019         $(QUIET)$(LN_SYMLINK) $(PATH_ROOT) $(TARBALLPATH)/$(TARBALLROOT)
1020         $(QUIET)tar -cjh --owner 0 --group 0 --totals \
1021             --exclude=.svn \
1022             --exclude=$(TARBALLROOT)/out \
1023             --exclude=$(TARBALLROOT)/env.sh \
1024             --exclude=$(TARBALLROOT)/configure.log \
1025             --exclude=$(TARBALLROOT)/build.log \
1026             --exclude=$(TARBALLROOT)/AutoConfig.kmk \
1027             --exclude=$(TARBALLROOT)/LocalConfig.kmk \
1028             --exclude=$(TARBALLROOT)/prebuild \
1029             -C $(TARBALLPATH) \
1030             -f $(TARBALLPATH)/$(TARBALLNAME) \
1031             $(TARBALLROOT)
1032         $(QUIET)$(RM) $(TARBALLPATH)/$(TARBALLROOT)
1033
1034
1035 #
1036 # Generate VirtualBox-x.x.x.tar.bz2 (PUEL) zip archives for internal use only
1037 # - includes kBuild
1038 # - must be executed on an PUEL checkout
1039 #
1040
1041 # the path where to store the zip archive
1042 ZIPPATH ?= $(abspath $(PATH_ROOT)/..)
1043 # the root directory inside the zip archive
1044 ZIPROOT ?= VirtualBox-$(VBOX_VERSION_STRING)
1045 # the name of the zip archive
1046 ZIPNAME ?= VirtualBox-$(VBOX_VERSION_STRING).zip
1047 snapshot-puel:
1048         @$(call MSG_L1,Creating zip $(ZIPPATH)/$(ZIPNAME))
1049         @if [ ! -r "$(PATH_ROOT)/src/VBox/Devices/USB/USBProxyDevice.cpp" ]; then \
1050             echo; \
1051             echo "Did not find USB stuff, is this an OSE branch?"; \
1052             echo; \
1053             exit 1; \
1054          fi
1055         @if [ -z "$(PASSWORD)" ]; then \
1056             echo; \
1057             echo "Please specify a password with PASSWORD=..."; \
1058             echo; \
1059             exit 1; \
1060          fi
1061         $(QUIET)$(MKDIR) -p $(ZIPPATH)
1062         $(QUIET)$(RM) -f $(ZIPPATH)/$(ZIPROOT)
1063         $(QUIET)$(RM) -f $(ZIPPATH)/$(ZIPNAME)
1064         $(QUIET)$(LN_SYMLINK) $(PATH_ROOT) $(ZIPPATH)/$(ZIPROOT)
1065         $(QUIET)(cd $(ZIPPATH); 7z a \
1066             -l -tzip -mmt=on -mx=7 -p$(PASSWORD) \
1067             -xr!.svn \
1068             -i!$(ZIPROOT)/Config.kmk \
1069             -i!$(ZIPROOT)/Doxyfile.Core \
1070             -i!$(ZIPROOT)/Makefile.kmk \
1071             -i!$(ZIPROOT)/configure \
1072             -i!$(ZIPROOT)/configure.vbs \
1073             -i!$(ZIPROOT)/doc \
1074             -i!$(ZIPROOT)/include \
1075             -i!$(ZIPROOT)/kBuild \
1076             -i!$(ZIPROOT)/src \
1077             -i!$(ZIPROOT)/tools/env.sh \
1078             -i!$(ZIPROOT)/tools/linux.x86/bin/* \
1079             -i!$(ZIPROOT)/tools/linux.amd64/bin/* \
1080             -x!$(ZIPROOT)/doc/Devices \
1081             -x!$(ZIPROOT)/doc/\*pdf \
1082             -x!$(ZIPROOT)/doc/L4VM \
1083             -x!$(ZIPROOT)/doc/VMM \
1084             -x!$(ZIPROOT)/doc/licenses_old \
1085             -x!$(ZIPROOT)/doc/manual/de_DE \
1086             -x!$(ZIPROOT)/doc/manual/fr_FR \
1087             -x!$(ZIPROOT)/src/tests \
1088             -x!$(ZIPROOT)/src/VBox/Artwork/2008-\* \
1089             -x!$(ZIPROOT)/src/VBox/Installer/AMI \
1090             -x!$(ZIPROOT)/src/VBox/Installer/Avanquest \
1091             -x!$(ZIPROOT)/src/VBox/Installer/Encore \
1092             -x!$(ZIPROOT)/src/VBox/Installer/linux/debian \
1093             -x!$(ZIPROOT)/src/VBox/Installer/linux/rpm \
1094             $(ZIPPATH)/$(ZIPNAME))
1095         $(QUIET)$(RM) $(ZIPPATH)/$(ZIPROOT)
1096
1097
1098 #
1099 # Generate ALL the rules.
1100 #
1101 include $(KBUILD_PATH)/subfooter.kmk
1102
1103
1104 #
1105 # Generate x86.mac and err.mac.
1106 #
1107 incs:
1108         $(SED) -f include/VBox/err.sed     --output include/VBox/err.mac   include/VBox/err.h
1109         $(APPEND) include/VBox/err.mac '%include "iprt/err.mac"'
1110         $(SED) -f include/VBox/err.sed     --output include/iprt/err.mac   include/iprt/err.h
1111         $(SED) -f include/VBox/various.sed --output include/VBox/x86.mac   include/VBox/x86.h
1112         $(SED) -f include/VBox/various.sed --output include/VBox/param.mac include/VBox/param.h
1113
1114
1115 #
1116 # Generate Visual SlickEdit tagging #defines.
1117 #
1118 vslick.h: include/VBox/cdefs.h include/iprt/cdefs.h $(MAKEFILE)
1119         $(RM) -f -- $@ $@.tmp $@.tmp2 $@.tmp3
1120         $(APPEND) $@.tmp '// autogenerated'
1121         @$(APPEND) $@.tmp '#define IN_SLICKEDIT '
1122         @$(APPEND) $@.tmp '#define RT_C_DECLS_BEGIN '
1123         @$(APPEND) $@.tmp '#define RT_C_DECLS_END '
1124         @$(APPEND) $@.tmp '#define RT_NO_THROW '
1125         @$(APPEND) $@.tmp '#define RT_THROW(type) throw(type)'
1126
1127         @$(APPEND) $@.tmp '#define ATL_NO_VTABLE '
1128         @$(APPEND) $@.tmp '#define BEGIN_COM_MAP(a) '
1129         @$(APPEND) $@.tmp '#define COM_INTERFACE_ENTRY(a) '
1130         @$(APPEND) $@.tmp '#define COM_INTERFACE_ENTRY2(a,b) '
1131         @$(APPEND) $@.tmp '#define COM_INTERFACE_ENTRY3(a,b,c) '
1132         @$(APPEND) $@.tmp '#define COM_INTERFACE_ENTRY4(a,b,c,d) '
1133         @$(APPEND) $@.tmp '#define END_COM_MAP(a) '
1134
1135         @$(APPEND) $@.tmp '#define COM_DECL_READONLY_ENUM_AND_COLLECTION(a) '
1136         @$(APPEND) $@.tmp '#define COMGETTER(n)                    n '
1137         @$(APPEND) $@.tmp '#define COMSETTER(n)                    n '
1138         @$(APPEND) $@.tmp '#define ComSafeArrayIn(t,a)             t a[] '
1139         @$(APPEND) $@.tmp '#define ComSafeArrayOut(t,a)            t * a[] '
1140         @$(APPEND) $@.tmp '#define DECLARE_CLASSFACTORY(a) '
1141         @$(APPEND) $@.tmp '#define DECLARE_CLASSFACTORY_SINGLETON(a) '
1142         @$(APPEND) $@.tmp '#define DECLARE_REGISTRY_RESOURCEID(a) '
1143         @$(APPEND) $@.tmp '#define DECLARE_NOT_AGGREGATABLE(a) '
1144         @$(APPEND) $@.tmp '#define DECLARE_PROTECT_FINAL_CONSTRUCT(a) '
1145         @$(APPEND) $@.tmp '#define DECLARE_EMPTY_CTOR_DTOR(a)      a(); ~a();'
1146         @$(APPEND) $@.tmp '#define DEFINE_EMPTY_CTOR_DTOR(a)       a::a() {}   a::~a() {}'
1147         @$(APPEND) $@.tmp '#define NS_DECL_ISUPPORTS '
1148         @$(APPEND) $@.tmp '#define NS_IMETHOD                      virtual nsresult '
1149         @$(APPEND) $@.tmp '#define NS_IMETHOD_(type)               virtual type '
1150         @$(APPEND) $@.tmp '#define NS_IMETHODIMP                   nsresult '
1151         @$(APPEND) $@.tmp '#define NS_IMETHODIMP_(type)            type '
1152         @$(APPEND) $@.tmp '#define PARSERS_EXPORT '
1153 if1of ($(KBUILD_HOST),win)
1154         @$(APPEND) $@.tmp '#define STDMETHOD(m)                    virtual HRESULT m '
1155         @$(APPEND) $@.tmp '#define STDMETHOD_(type,m)              virtual type m '
1156         @$(APPEND) $@.tmp '#define STDMETHODIMP                    HRESULT '
1157         @$(APPEND) $@.tmp '#define STDMETHODIMP_(type)             type '
1158 else
1159         @$(APPEND) $@.tmp '#define STDMETHOD(m)                    virtual nsresult m '
1160         @$(APPEND) $@.tmp '#define STDMETHOD_(type,m)              virtual type m '
1161         @$(APPEND) $@.tmp '#define STDMETHODIMP                    nsresult '
1162         @$(APPEND) $@.tmp '#define STDMETHODIMP_(type)             type '
1163 endif
1164         @$(APPEND) $@.tmp '#define VBOX_SCRIPTABLE(a)              public a '
1165         @$(APPEND) $@.tmp '#define VBOX_SCRIPTABLE_IMPL(a) '
1166         @$(APPEND) $@.tmp '#define VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(a) '
1167
1168         @$(APPEND) $@.tmp '#define CTX_SUFF(var)                   var##R3 '
1169         @$(APPEND) $@.tmp '#define CTXAllSUFF(var)                 var##R3 '
1170         @$(APPEND) $@.tmp '#define CTXSUFF(var)                    var##HC '
1171         @$(APPEND) $@.tmp '#define OTHERCTXSUFF(var)               var##GC '
1172         @$(APPEND) $@.tmp '#define CTXALLMID(first, last)          first##R3##last '
1173         @$(APPEND) $@.tmp '#define CTXMID(first, last)             first##HC##last '
1174         @$(APPEND) $@.tmp '#define OTHERCTXMID(first, last)        first##GC##last '
1175         @$(APPEND) $@.tmp '#define CTXTYPE(GCType, R3Type, R0Type) R3Type '
1176         @$(APPEND) $@.tmp '#define RCTYPE(RCType, HCType)          RCType '
1177         @$(APPEND) $@.tmp '#define GCTYPE(GCType, HCType)          GCType '
1178         @$(APPEND) $@.tmp '#define RCPTRTYPE(RCType)               RCType '
1179         @$(APPEND) $@.tmp '#define GCPTRTYPE(GCType)               GCType '
1180         @$(APPEND) $@.tmp '#define HCPTRTYPE(HCType)               HCType '
1181         @$(APPEND) $@.tmp '#define R3R0PTRTYPE(HCType)             HCType '
1182         @$(APPEND) $@.tmp '#define R0PTRTYPE(R3Type)               R3Type '
1183         @$(APPEND) $@.tmp '#define R3PTRTYPE(R0Type)               R0Type '
1184         @$(APPEND) $@.tmp '#define RT_SRC_POS                      __FILE__, __LINE__, __PRETTY_FUNCTION__ '
1185         @$(APPEND) $@.tmp '#define RT_SRC_POS_DECL                 const char *pszFile, unsigned iLine, const char *pszFunction '
1186         @$(APPEND) $@.tmp '#define RT_SRC_POS_ARGS                 pszFile, iLine, pszFunction '
1187         @$(APPEND) $@.tmp '#define RTCALL'
1188         @$(APPEND) $@.tmp '#define DECLINLINE(type)                inline type '
1189         @$(APPEND) $@.tmp '#define DECL_FORCE_INLINE(type)         inline type '
1190         @$(APPEND) $@.tmp '#define DECL_INVALID(type)              type '
1191
1192         @$(APPEND) $@.tmp '#define PDMDEVINSINT_DECLARED           1'
1193         @$(APPEND) $@.tmp '#define VBOX_WITH_HGCM                  1'
1194         @$(APPEND) $@.tmp '#define VBOXCALL'
1195
1196         @$(APPEND) $@.tmp '#define PGM_CTX(a,b)                    b'
1197         @$(APPEND) $@.tmp '#define PGM_CTX3(a,b,c)                 c'
1198         @$(APPEND) $@.tmp '#define PGM_GST_NAME(name)              PGM_GST_NAME_AMD64(name)'
1199         @$(APPEND) $@.tmp '#define PGM_GST_NAME_REAL(name)         PGM_CTX3(name)'
1200         @$(APPEND) $@.tmp '#define PGM_GST_NAME_PROT(name)         PGM_CTX3(pgm,GstProt,name)'
1201         @$(APPEND) $@.tmp '#define PGM_GST_NAME_32BIT(name)        PGM_CTX3(pgm,Gst32Bit,name)'
1202         @$(APPEND) $@.tmp '#define PGM_GST_NAME_PAE(name)          PGM_CTX3(pgm,GstPAE,name)'
1203         @$(APPEND) $@.tmp '#define PGM_GST_NAME_AMD64(name)        PGM_CTX3(pgm,GstAMD64,name)'
1204         @$(APPEND) $@.tmp '#define PGM_GST_DECL(type, name)        type PGM_GST_NAME(name)'
1205         @$(APPEND) $@.tmp '#define PGM_SHW_NAME(name)              PGM_GST_NAME_AMD64(name)'
1206         @$(APPEND) $@.tmp '#define PGM_SHW_NAME_32BIT(name)        PGM_CTX3(pgm,Shw32Bit,name)'
1207         @$(APPEND) $@.tmp '#define PGM_SHW_NAME_PAE(name)          PGM_CTX3(pgm,ShwPAE,name)'
1208         @$(APPEND) $@.tmp '#define PGM_SHW_NAME_AMD64(name)        PGM_CTX3(pgm,ShwAMD64,name)'
1209         @$(APPEND) $@.tmp '#define PGM_SHW_NAME_NESTED(name)       PGM_CTX3(pgm,ShwNested,name)'
1210         @$(APPEND) $@.tmp '#define PGM_SHW_NAME_EPT(name)          PGM_CTX3(pgm,ShwEPT,name)'
1211         @$(APPEND) $@.tmp '#define PGM_SHW_DECL(type, name)        type PGM_SHW_NAME(name)'
1212         @$(APPEND) $@.tmp '#define PGM_BTH_NAME(name)              PGM_BTH_NAME_NESTED_AMD64(name)'
1213         @$(APPEND) $@.tmp '#define PGM_BTH_NAME_32BIT_REAL(name)   PGM_CTX3(pgm,Bth,name)'
1214         @$(APPEND) $@.tmp '#define PGM_BTH_NAME_32BIT_PROT(name)   PGM_CTX3(pgm,Bth,name)'
1215         @$(APPEND) $@.tmp '#define PGM_BTH_NAME_32BIT_32BIT(name)  PGM_CTX3(pgm,Bth,name)'
1216         @$(APPEND) $@.tmp '#define PGM_BTH_NAME_PAE_REAL(name)     PGM_CTX3(pgm,Bth,name)'
1217         @$(APPEND) $@.tmp '#define PGM_BTH_NAME_PAE_PROT(name)     PGM_CTX3(pgm,Bth,name)'
1218         @$(APPEND) $@.tmp '#define PGM_BTH_NAME_PAE_32BIT(name)    PGM_CTX3(pgm,Bth,name)'
1219         @$(APPEND) $@.tmp '#define PGM_BTH_NAME_PAE_PAE(name)      PGM_CTX3(pgm,Bth,name)'
1220         @$(APPEND) $@.tmp '#define PGM_BTH_NAME_AMD64_PROT(name)   PGM_CTX3(pgm,Bth,name)'
1221         @$(APPEND) $@.tmp '#define PGM_BTH_NAME_AMD64_AMD64(name)  PGM_CTX3(pgm,Bth,name)'
1222         @$(APPEND) $@.tmp '#define PGM_BTH_NAME_NESTED_REAL(name)  PGM_CTX3(pgm,Bth,name)'
1223         @$(APPEND) $@.tmp '#define PGM_BTH_NAME_NESTED_PROT(name)  PGM_CTX3(pgm,Bth,name)'
1224         @$(APPEND) $@.tmp '#define PGM_BTH_NAME_NESTED_32BIT(name) PGM_CTX3(pgm,Bth,name)'
1225         @$(APPEND) $@.tmp '#define PGM_BTH_NAME_NESTED_PAE(name)   PGM_CTX3(pgm,Bth,name)'
1226         @$(APPEND) $@.tmp '#define PGM_BTH_NAME_NESTED_AMD64(name) PGM_CTX3(pgm,Bth,name)'
1227         @$(APPEND) $@.tmp '#define PGM_BTH_NAME_EPT_REAL(name)     PGM_CTX3(pgm,Bth,name)'
1228         @$(APPEND) $@.tmp '#define PGM_BTH_NAME_EPT_PROT(name)     PGM_CTX3(pgm,Bth,name)'
1229         @$(APPEND) $@.tmp '#define PGM_BTH_NAME_EPT_32BIT(name)    PGM_CTX3(pgm,Bth,name)'
1230         @$(APPEND) $@.tmp '#define PGM_BTH_NAME_EPT_PAE(name)      PGM_CTX3(pgm,Bth,name)'
1231         @$(APPEND) $@.tmp '#define PGM_BTH_NAME_EPT_AMD64(name)    PGM_CTX3(pgm,Bth,name)'
1232         @$(APPEND) $@.tmp '#define PGM_BTH_DECL(type, name)        type PGM_BTH_NAME(name)'
1233
1234         $(SED)  -e '/__cdecl/d' \
1235                 -e '/^ *# *define.*DECL/!d' \
1236                 -e '/DECLS/d' \
1237                 -e '/DECLARE_CLS_/d' \
1238                 -e '/_SRC_POS_DECL/d' \
1239                 -e '/declspec/d' \
1240                 -e '/__attribute__/d' \
1241                 -e 's/#  */#/g' \
1242                 -e 's/   */ /g' \
1243                 -e '/(type) DECLEXPORT/d' \
1244                 -e '/ DECLEXPORT_CLASS/d' \
1245                 -e 's/ *VBOXCALL//' \
1246                 -e 's/ *RTCALL//' \
1247                 -e 's/(type) DECLIMPORT(type)/(type) type/' \
1248                 -e '/ DECLASM(type) type/d' \
1249                 -e '/define  *DECL..CALLBACKMEMBER(type[^)]*) *RT/d' \
1250                 -e '/define  *DECLINLINE(type)/d' \
1251                 -e '/define  *DECL_FORCE_INLINE(type)/d' \
1252                 -e '/  *DECL_INVALID(/d' \
1253                 -e '/define RT[DATGRC03]*DECL(type) *DECLHIDDEN(type)/d' \
1254                 \
1255                 --append $@.tmp \
1256                 $(filter-out include/VBox/err.h, $(wildcard include/VBox/*.h)) \
1257                 include/iprt/cdefs.h
1258         $(CAT_EXT) $@.tmp \
1259                 | $(SED_EXT) -e 's/_/\x1F/g' -e 's/(/\x1E/g' -e 's/[[:space:]][[:space:]]*/\x1C/g' \
1260                 | sort $(if-expr "$(KBUILD_TARGET)" == "win",,-f) \
1261                 | $(SED_EXT) -e 's/\x1F/_/g' -e 's/\x1E/(/g' -e 's/\x1C/ /g' \
1262                 | $(SED_EXT) -e 's/$$/\n/' --output $@.tmp2
1263         $(MV) -f $@.tmp2 $@
1264         $(RM) -f $@.tmp $@.tmp2 $@.tmp3
1265 ifeq ($(KBUILD_HOST),win)
1266         @$(ECHO) 'TODO: Merge vslick.h with your "$(HOMEDRIVE)$(HOMEPATH)\Documents\My SlickEdit Config\x.y.z\usercpp.h" file.'
1267 else ifeq ($(KBUILD_HOST),darwin)
1268         @$(ECHO) "TODO: Merge ./vslick.h with your ~/Library/Application\ Support/SlickEdit/x.y.z/unxcpp.h file."
1269 else
1270         @$(ECHO) "TODO: Merge ./vslick.h with your ~/.slickedit/x.y.z/unxcpp.h file."
1271 endif
1272
1273
1274 #
1275 # Add fetching of the tools to the 'up[date][2]' targets.
1276 #
1277 up update up2 update2::
1278 ifndef VBOX_OSE
1279         +$(MAKE) -C tools fetch
1280 else
1281         $(MAKE) -C tools -f Makefile-ose.kmk fetch
1282 endif
1283
1284
1285
1286 #
1287 # Aliases for building the SDK.
1288 #
1289 .NOTPARALLEL: sdk sdk-fetch
1290 sdk:
1291         + $(KMK) VBOX_ONLY_SDK=1 \
1292                 pass_bldprogs pass_others pass_installs pass_packing
1293
1294 sdk-fetch:
1295         + $(KMK) KBUILD_TARGET=win  KBUILD_TARGET_ARCH=x86  -C tools fetch
1296