VirtualBox

source: vbox/trunk/Config.kmk@ 15036

Last change on this file since 15036 was 15032, checked in by vboxsync, 16 years ago

Enable 64 bits RTGCPTR on 32 bits hosts too to get feedback from the test boxes.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id Revision
File size: 144.3 KB
Line 
1# $Id: Config.kmk 15032 2008-12-05 12:09:55Z vboxsync $
2## @file
3# The global build configuration file for VBox.
4#
5# This file gets included by all makefiles through the
6# include $(KBUILD_PATH)/header.kmk statement.
7#
8
9#
10# Copyright (C) 2006-2007 Sun Microsystems, Inc.
11#
12# This file is part of VirtualBox Open Source Edition (OSE), as
13# available from http://www.virtualbox.org. This file is free software;
14# you can redistribute it and/or modify it under the terms of the GNU
15# General Public License as published by the Free Software Foundation,
16# in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
17# distribution. VirtualBox OSE is distributed in the hope that it will
18# be useful, but WITHOUT ANY WARRANTY of any kind.
19#
20
21# Marker.
22VBOX_ROOT_CONFIG_KMK_INCLUDED = 1
23
24#
25# kBuild stuff
26#
27
28# Experimental
29.SECONDTARGETEXPANSION:
30
31# Enable automatic installation of what's built.
32KBUILD_DO_AUTO_INSTALL := 1
33PASSES := $(filter-out PACKING,$(PASSES)) PACKING # temporary hack
34# Modify the order of the INSTALLS and OTHERS passes.
35DEFAULT_PASSES := BLDPROGS LIBRARIES DLLS BINARIES INSTALLS OTHERS
36# Modify the build types.
37## @todo checked and dbgopt
38KBUILD_BLD_TYPES = release profile debug kprofile
39
40## 'strict' builds
41# Same as release builds, except that RT_STRICT and VBOX_STRICT are defined,
42# meaning all assertions are in action. (Appending means '.strict' props take
43# precedence in argument lists.)
44KBUILD_BLD_TYPES += strict
45BLD_TYPE_strict_EXTENDS = release
46BLD_TYPE_strict_EXTENDS_BY = appending
47
48## 'dbgopt' builds
49# Same as debug builds, except that compiler optimizations are enabled. This
50# intended for cases where all the debug facitities (logging, assertions, ++)
51# is wanted but actual source level debugging as important as execution speed.
52KBUILD_BLD_TYPES += dbgopt
53BLD_TYPE_dbgopt_EXTENDS = debug
54BLD_TYPE_dbgopt_EXTENDS_BY = appending
55
56
57# Install paths.
58PATH_INS = $(PATH_OUT)
59ifeq ($(KBUILD_TARGET),darwin)
60 INST_DIST = dist/
61 INST_SDK = $(INST_DIST)sdk/
62
63 # the bundles
64 INST_VIRTUALBOX = $(INST_DIST)VirtualBox.app/
65 INST_VBOXDRV = $(INST_DIST)VBoxDrv.kext/
66 INST_VBOXNETFLT = $(INST_DIST)VBoxNetFlt.kext/
67 INST_VBOXNETTAP = $(INST_DIST)VBoxNetTap.kext/
68 INST_VBOXUSB = $(INST_DIST)VBoxUSB.kext/
69
70 # put everything in the VirtualBox app bundle.
71 INST_BIN = $(INST_VIRTUALBOX)Contents/MacOS/
72 INST_DLL = $(INST_BIN)
73 INST_SYS = $(INST_BIN)
74 INST_TESTCASE = $(INST_BIN)testcase/
75 INST_ADDITIONS = $(INST_BIN)additions/
76
77 # other paths
78 INST_TESTSUITE = testsuite/
79 INST_LIB = lib/
80 INST_ADDITIONS_LIB = $(PATH_LIB)/additions/
81
82else
83
84 INST_BIN = bin/
85 INST_DIST = $(INST_BIN)
86 INST_DLL = $(INST_BIN)
87 INST_SDK = $(INST_BIN)sdk/
88 INST_DLL = $(INST_BIN)
89 INST_SYS = $(INST_BIN)
90 INST_TESTCASE = $(INST_BIN)testcase/
91 INST_ADDITIONS = $(INST_BIN)additions/
92
93 INST_TESTSUITE = testsuite/
94 INST_LIB = lib/
95 INST_ADDITIONS_LIB = $(INST_LIB)additions/
96endif
97
98PATH_BIN = $(patsubst %/,%,$(PATH_INS)/$(INST_BIN))
99PATH_DLL = $(patsubst %/,%,$(PATH_INS)/$(INST_DLL))
100PATH_SYS = $(patsubst %/,%,$(PATH_INS)/$(INST_SYS))
101PATH_LIB = $(patsubst %/,%,$(PATH_INS)/$(INST_LIB))
102PATH_DOC = $(PATH_OUT)/doc
103VBOX_PATH_SDK = $(patsubst %/,%,$(PATH_INS)/$(INST_SDK))
104VBOX_PATH_DIST = $(patsubst %/,%,$(PATH_INS)/$(INST_DIST))
105VBOX_PATH_TESTSUITE = $(patsubst %/,%,$(PATH_INS)/$(INST_TESTSUITE))
106VBOX_PATH_ADDITIONS = $(patsubst %/,%,$(PATH_INS)/$(INST_ADDITIONS))
107VBOX_PATH_ADDITIONS_LIB = $(patsubst %/,%,$(PATH_INS)/$(INST_ADDITIONS_LIB))
108
109
110# Delete targets on failure.
111.DELETE_ON_ERROR:
112
113# Notify about important kBuild updates.
114ifneq ($(call int-ge,$(KMK_REVISION),1777),1)
115 $(error You must update kBuild! KMK_REVISION=$(KMK_REVISION) KBUILD_PATH=$(KBUILD_PATH))
116endif
117
118#
119# Define USERNAME early on.
120#
121ifndef USERNAME
122 ifdef USER
123 USERNAME = $(USER)
124 else
125 $(warning Warning: You must have USERNAME or USER in your environment.)
126 endif
127endif
128
129#
130# The VirtualBox version.
131#
132
133# Major version.
134VBOX_VERSION_MAJOR = 2
135# Minor version.
136VBOX_VERSION_MINOR = 0
137# This is the current build number. It should be increased every time we publish a
138# new build. The define is available in every source file. Only even build numbers
139# will be published, odd numbers are set during development.
140VBOX_VERSION_BUILD = 51
141# Full version string (may include more than just x.y.z, but no spaces or other problematic chars).
142VBOX_VERSION_STRING = $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
143# Force the additions.sh script to get an exact additions build when we're doing the release.
144ifeq ($(int-mod $(VBOX_VERSION_BUILD),2),0)
145 export VBOX_ADDITIONS_SH_MODE = release
146 export VBOX_DOCUMENTATION_SH_MODE = release
147endif
148
149
150#
151# The VirtualBox package type.
152#
153ifeq ($(KBUILD_TARGET),win)
154 VBOX_PACKAGE_OS = WINDOWS
155else ifeq ($(KBUILD_TARGET),linux)
156 VBOX_PACKAGE_OS = LINUX
157else ifeq ($(KBUILD_TARGET),darwin)
158 VBOX_PACKAGE_OS = DARWIN
159else ifeq ($(KBUILD_TARGET),solaris)
160 VBOX_PACKAGE_OS = SOLARIS
161else ifeq ($(KBUILD_TARGET),os2)
162 VBOX_PACKAGE_OS = OS2
163else if1of ($(KBUILD_TARGET), dragonfly freebsd netbsd openbsd)
164 VBOX_PACKAGE_OS = BSD
165else
166 $(error Cannot determine VBOX_PACKAGE_OS)
167endif
168ifeq ($(KBUILD_TARGET_ARCH),x86)
169 VBOX_PACKAGE_ARCH = 32BITS
170else
171 VBOX_PACKAGE_ARCH = 64BITS
172endif
173# distribution, mostly for Linux/Solaris where we support different distributions
174# this strip will be overridden by the Linux packaging scripts
175VBOX_PACKAGE_DIST ?= GENERIC
176# Full string
177VBOX_PACKAGE_STRING = $(VBOX_PACKAGE_OS)_$(VBOX_PACKAGE_ARCH)_$(VBOX_PACKAGE_DIST)
178
179
180#
181# The VirtualBox Configuration Defaults.
182#
183# We try to document all the build configuration options here, thing which
184# aren't enabled by default is left commented out just to show that they
185# exist and which value they should have (usually 1, but anyway).
186#
187
188# Virtual single makefile.
189# If undefined, the tranditional recursive make method will be used.
190VBOX_SINGLE_MAKEFILE = 1
191
192# This indicates that additions (of some kind or another) is being _built_.
193# VBOX_WITHOUT_ADDITIONS overrides it.
194#if1of ($(KBUILD_TARGET), freebsd linux os2 solaris win)
195if1of ($(KBUILD_TARGET), linux solaris win)
196 VBOX_WITH_ADDITIONS = 1
197endif
198# Build the optional ring-0 part of the additions for syntax checking.
199# (Except when cross-building on linux since we're using /usr/src/...)
200ifn1of ($(KBUILD_TARGET).$(KBUILD_HOST_ARCH).$(KBUILD_TARGET_ARCH), linux.x86.amd64 linux.amd64.x86)
201 VBOX_WITH_ADDITION_DRIVERS = 1
202endif
203# Build X11 additions. Can be disabled separately.
204if1of ($(KBUILD_TARGET), dragonfly freebsd linux netbsd openbsd solaris)
205 VBOX_WITH_X11_ADDITIONS = 1
206endif
207# Enable the building of shared folders in the windows additions.
208VBOX_WITH_WIN32_ADDITIONS_SHAREDFOLDERS = 1
209# Take the binaries of the OS/2 Additions.
210VBOX_WITH_OS2_ADDITIONS_BIN = 1
211# Use additions from the build server.
212#VBOX_WITH_ADDITIONS_FROM_BUILD_SERVER = 1
213# Include additions in the package
214VBOX_WITH_ADDITIONS_PACKING = 1
215# Don't bother with additions, overrides VBOX_WITH_ADDITIONS.
216# This is not used by makefiles, only Config.kmk, see below.
217#VBOX_WITHOUT_ADDITIONS = 1
218# Only build the additions (for the additions build server).
219#VBOX_ONLY_ADDITIONS = 1
220ifdef VBOX_ADDITIONS_ONLY # typical mistake.
221 $(error It is VBOX_ONLY_ADDITIONS=1 not VBOX_ADDITIONS_ONLY!)
222endif
223
224# When build SDK-only, no need for additions
225ifdef VBOX_ONLY_SDK
226 VBOX_WITHOUT_ADDITIONS=1
227endif
228
229## Enable new TCG-based recompiler
230ifn1of ($(KBUILD_TARGET),darwin)
231VBOX_WITH_NEW_RECOMPILER = 1
232endif
233
234# Don't create the additions ISO.
235# (Used by the additions build server, don't invert it.)
236#VBOX_WITHOUT_ADDITIONS_ISO = 1
237
238# the documentation
239VBOX_WITH_DOCS = 1
240# Use documentation from the build server.
241#VBOX_WITH_DOCS_FROM_BUILD_SERVER = 1
242# Include documentation in the package
243VBOX_WITH_DOCS_PACKING = 1
244# Don't bother with documentation, overrides VBOX_WITH_DOCS.
245# This is not used by makefiles, only Config.kmk, see below.
246#VBOX_WITHOUT_DOCS = 1
247# Only build the documentation (for the documentation build server).
248#VBOX_ONLY_DOCS = 1
249ifdef VBOX_DOCS_ONLY # typical mistake.
250 $(error It is VBOX_ONLY_DOCS=1 not VBOX_DOCS_ONLY!)
251endif
252
253# build the installer
254VBOX_WITH_INSTALLER = 1
255# enable VRDP server
256VBOX_WITH_VRDP = 1
257# build VRDP authentication modules
258VBOX_WITH_VRDP_AUTHMOD = 1
259# build enhanced version of rdesktop
260VBOX_WITH_VRDP_RDESKTOP = 1
261# Activate this to force the VM to pre-allocate the guest RAM before startup
262VBOX_WITH_PREALLOC_RAM_BY_DEFAULT =
263# The kernel driver/module and related runtime libraries.
264VBOX_WITH_VBOXDRV = 1
265# build with secure label support
266ifeq ($(filter win.amd64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),) # too much work with freetype and all that.
267VBOX_WITH_SECURELABEL = 1
268endif
269
270# The main api.
271VBOX_WITH_MAIN = 1
272# The webservices api.
273VBOX_WITH_WEBSERVICES = 1
274# The SDL based GUI.
275VBOX_WITH_VBOXSDL = 1
276# The basic frontend (w/o Main).
277VBOX_WITH_VBOXBFE = 1
278# The Qt GUI.
279VBOX_WITH_QTGUI = 1
280# The Qt 4 GUI.
281VBOX_WITH_QT4GUI = 1
282# The headless frontend.
283VBOX_WITH_HEADLESS = 1
284## the Direct Framebuffer GUI
285#VBOX_WITH_VBOXFB = 1
286# Enable the debugger.
287VBOX_WITH_DEBUGGER = 1
288# Enable the debugger GUI.
289VBOX_WITH_DEBUGGER_GUI = 1
290# build the Host Guest Communication Manager component
291VBOX_WITH_HGCM = 1
292# Enable the USB feature.
293VBOX_WITH_USB = 1
294# Enable the USB 2.0 controller
295VBOX_WITH_EHCI = 1
296# Enable the ISCSI feature.
297VBOX_WITH_ISCSI = 1
298# Enable the E1000 feature
299VBOX_WITH_E1000 = 1
300# Enable ALSA support for Linux
301VBOX_WITH_ALSA = 1
302# Enable Pulse support for Linux
303VBOX_WITH_PULSE = 1
304# Enable statically linked dbus support for Linux
305ifeq ($(KBUILD_TARGET),linux)
306# VBOX_WITH_DBUS = 1
307endif
308# Disable WINMM support for Windows (not implemented)
309VBOX_WITH_WINMM =
310# Disable VMI BIOS (not yet ready)
311VBOX_WITH_VMI =
312# Enable the kchmviewer
313VBOX_WITH_KCHMVIEWER = 1
314# Build the testsuite.
315VBOX_WITH_TESTSUITE = 1
316# Build the testcases.
317VBOX_WITH_TESTCASES = 1
318# Set this to not use COM or XPCOM in places where it can be avoided.
319#VBOX_WITHOUT_COM = 1
320# Set this to prefix all C symbols in XPCOM, to avoid dynamic linking problems
321# caused by our XPCOM library polluting the symbol namespace for system libs.
322if1of ($(KBUILD_TARGET), linux solaris)
323 VBOX_WITH_XPCOM_NAMESPACE_CLEANUP = 1
324endif
325# Set this to skip installing the redistributable compiler runtime.
326#VBOX_WITHOUT_COMPILER_REDIST = 1
327# Enabled internal networking.
328VBOX_WITH_INTERNAL_NETWORKING = 1
329# Enables the ffmpeg module for recording test runs.
330# Enable this for non-Linux builds later.
331ifeq ($(KBUILD_TARGET),linux)
332# VBOX_WITH_FFMPEG = 1
333endif
334# Enable crOpenGL service
335if1of ($(KBUILD_TARGET),win linux solaris darwin)
336VBOX_WITH_CROGL = 1
337endif
338# Enable OpenGL service
339VBOX_WITH_OGL = 1
340# Enable shared folders
341VBOX_WITH_SHARED_FOLDERS = 1
342# Enable shared clipboard
343VBOX_WITH_SHARED_CLIPBOARD = 1
344# Enable the Intel PXE ROM (replaces Etherboot).
345VBOX_WITH_INTEL_PXE = 1
346# Strip binaries of release and profile builds
347VBOX_DO_STRIP = $(if $(filter release profile,$(KBUILD_TYPE)),1,)
348# Strip R0/GC modules (current requirement for our loader)
349VBOX_DO_STRIP_MODULES = 1
350# Use kStuff for MACH-O and LX binary loading.
351if1of ($(KBUILD_TARGET),darwin os2)
352IPRT_WITH_KSTUFF = 1
353endif
354# Enable Crossbow support for Solaris.
355VBOX_WITH_CROSSBOW = 1
356# Enable setuid wrapper for Solaris.
357#VBOX_WITH_SUID_WRAPPER = 1
358# Enable the PDM Lock and let I/O threads call into the PICs.
359VBOX_WITH_PDM_LOCK = 1
360# Enable Seamless mode
361VBOX_X11_SEAMLESS_GUEST = 1
362# Enable the virtual SATA/AHCI controller
363VBOX_WITH_AHCI = 1
364# Enable the new async completion manager
365VBOX_WITH_PDM_ASYNC_COMPLETION = 1
366# Temporary switch for enabling / disabling the new USB code on Darwin.
367VBOX_WITH_NEW_USB_CODE_ON_DARWIN=1
368# Enable the hal/sysfs USB code on Linux. This depends on VBOX_WITH_DBUS.
369ifdef VBOX_WITH_DBUS
370# VBOX_USB_WITH_SYSFS=1
371endif
372# Use the new VBI module on Solaris.
373VBOX_WITH_SOLARIS_VBI = 1
374# Enable 64 bits guest pointers.
375VBOX_WITH_64_BITS_GUESTS = 1
376##if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), linux.amd64 solaris.amd64 win.amd64)
377##VBOX_WITH_64_BITS_GUESTS = 1
378##else
379### VBOX_WITH_64_BITS_GUESTS = 1
380##endif
381# Enable SMP support in guests
382##VBOX_WITH_SMP_GUESTS = 1
383# Allow more than 4G in guests
384##VBOX_WITH_MORE_THAN_4GB = 1
385# Enable the host/guest information service (aka guest properties).
386VBOX_WITH_GUEST_PROPS = 1
387# Enable performance API.
388VBOX_WITH_RESOURCE_USAGE_API = 1
389# Enables all the doxgen bits.
390VBOX_WITH_ALL_DOXYGEN_TARGETS = 1
391# Enable BusLogic SCSI host adapter
392VBOX_WITH_BUSLOGIC = 1
393# Enable SCSI drivers
394VBOX_WITH_SCSI = 1
395# Enables the Python<->XPCOM and later Python<->COM bindings.
396# (Current not enabled by default because all the build servers has
397# different Python versions installed and would start burning.)
398if1of ($(KBUILD_TARGET), darwin solaris)
399 VBOX_WITH_PYTHON = 1
400endif
401# Enables hardening.
402# Most developers will want to disable this in their LocalConfig.kmk.
403ifn1of ($(KBUILD_TARGET), win)
404 VBOX_WITH_HARDENING = 1
405endif
406# Where the application files are (going to be) installed.
407#VBOX_PATH_APP_PRIVATE = /usr/lib/virtualbox
408ifdef VBOX_WITH_HARDENING
409 if1of ($(KBUILD_TARGET), solaris)
410 VBOX_PATH_APP_PRIVATE = /opt/VirtualBox
411 else ifeq ($(KBUILD_TARGET),darwin)
412 VBOX_PATH_APP_PRIVATE = /Applications/VirtualBox.app/Contents/MacOS
413 endif
414endif
415# Where the architecture specific application files are (going to be) installed.
416#VBOX_PATH_APP_PRIVATE_ARCH = /usr/lib/virtualbox
417ifdef VBOX_WITH_HARDENING
418 if1of ($(KBUILD_TARGET), darwin solaris)
419 VBOX_PATH_APP_PRIVATE_ARCH = $(VBOX_PATH_APP_PRIVATE)
420 endif
421endif
422# Where the shared libraries are (going to be) installed.
423#VBOX_PATH_SHARED_LIBS = /usr/lib
424ifdef VBOX_WITH_HARDENING
425 if1of ($(KBUILD_TARGET), darwin solaris)
426 VBOX_PATH_SHARED_LIBS = $(VBOX_PATH_APP_PRIVATE)
427 endif
428endif
429# Where the documentation is (going to be) installed.
430#VBOX_PATH_APP_DOCS = /usr/share/doc/virtualbox
431ifdef VBOX_WITH_HARDENING
432 if1of ($(KBUILD_TARGET), darwin solaris)
433 VBOX_PATH_APP_DOCS = $(VBOX_PATH_APP_PRIVATE)
434 endif
435endif
436# The DT_RPATH/DT_RUNPATH to embed into the binaries (ELF).
437# (This one is used for all binaries, there is no need to adjust this
438# depending on the location of the object.)
439#VBOX_WITH_RUNPATH = /usr/lib/virtualbox
440ifdef VBOX_WITH_HARDENING
441 if1of ($(KBUILD_TARGET), solaris)
442 VBOX_WITH_RUNPATH = $(VBOX_PATH_APP_PRIVATE)
443 endif
444endif
445# Enable use of the $ORIGIN DT_RPATH/DT_RUNPATH feature (ELF).
446# Because of the setuid usage on all ELF platforms when hardening the build
447# things gets a bit complicated since the $ORIGIN+setuid policy differs.
448#VBOX_WITH_ORIGIN=1
449ifdef VBOX_WITH_HARDENING
450 if1of ($(KBUILD_TARGET), linux)
451 VBOX_WITH_ORIGIN = 1
452 endif
453else if1of ($(KBUILD_TARGET), linux solaris)
454 VBOX_WITH_ORIGIN = 1
455endif
456# Enable the system wide support service/daemon.
457# Work in progress, but required for hardening on Windows.
458#VBOX_WITH_SUPSVC = 1
459ifdef VBOX_WITH_HARDENING
460 if1of ($(KBUILD_TARGET), win)
461 VBOX_WITH_SUPSVC = 1
462 endif
463endif
464# Use VBoxNetFlt for host interface networking.
465if1of ($(KBUILD_TARGET), darwin linux solaris win)
466 VBOX_WITH_NETFLT = 1
467 VBOX_SOLARIS_NSL_RESOLVED = 1
468endif
469# Enable Shared Chromium OpenGL extensions
470#VBOX_WITH_CROGL =1
471
472#
473# Branding
474#
475VBOX_BRAND_BIOS_LOGO := $(PATH_ROOT)/src/VBox/Devices/Graphics/BIOS/sun_logo.bmp
476VBOX_BRAND_LICENSE_HTML := $(PATH_ROOT)/doc/License.html
477VBOX_BRAND_LICENSE_RTF := $(PATH_ROOT)/doc/License.rtf
478VBOX_BRAND_LICENSE_TXT := $(PATH_ROOT)/doc/License.txt
479VBOX_BRAND_LICENSE_VER :=
480VBOX_BRAND_GUI_ABOUT_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox4/images/NonOSE/about.png
481VBOX_BRAND_GUI_ABOUT_16PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox4/images/NonOSE/about_16px.png
482VBOX_BRAND_GUI_VBOX_16PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox4/images/NonOSE/VirtualBox_16px.png
483VBOX_BRAND_GUI_VBOX_20PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox4/images/NonOSE/VirtualBox_20px.png
484VBOX_BRAND_GUI_VBOX_32PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox4/images/NonOSE/VirtualBox_32px.png
485VBOX_BRAND_GUI_VBOX_40PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox4/images/NonOSE/VirtualBox_40px.png
486VBOX_BRAND_GUI_VBOX_48PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox4/images/NonOSE/VirtualBox_48px.png
487VBOX_BRAND_GUI_VBOX_64PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox4/images/NonOSE/VirtualBox_64px.png
488VBOX_BRAND_GUI_CUBE_42PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox4/images/NonOSE/VirtualBox_cube_42px.png
489VBOX_BRAND_WIN_INST_DLGBMP := $(PATH_ROOT)/src/VBox/Installer/win/Binary/Dialog.bmp
490VBOX_BRAND_WIN_INST_EXT :=
491VBOX_BRAND_WIN_ADD_INST_DLGBMP := $(PATH_ROOT)/src/VBox/Additions/WINNT/Installer/welcome.bmp
492VBOX_BRAND_DARWIN_DISKIMAGE_DS_STORE := $(PATH_ROOT)/src/VBox/Installer/darwin/DiskImage/DS_Store
493VBOX_BRAND_DARWIN_DISKIMAGE_BG := $(PATH_ROOT)/src/VBox/Installer/darwin/DiskImage/vbox_folder.tiff
494VBOX_BRAND_DARWIN_INSTALLER_BG := $(PATH_ROOT)/src/VBox/Installer/darwin/VirtualBox_mpkg/background.tif
495
496#
497# Skip stuff.
498#
499
500# VBOX_QUICK can be used by core developers to speed to the build
501ifdef VBOX_QUICK
502 # undefine variables by assigning blank.
503 VBOX_WITH_TESTSUITE=
504 VBOX_WITH_TESTCASES=
505 VBOX_WITH_MAIN =
506 VBOX_WITH_VBOXSDL =
507 VBOX_WITH_VBOXBFE =
508 VBOX_WITH_QTGUI =
509 VBOX_WITH_QT4GUI =
510 VBOX_WITH_DEBUGGER_GUI =
511 VBOX_WITH_DOCS =
512endif # VBOX_QUICK
513
514ifeq ($(KBUILD_TARGET),darwin)
515 # Don't bother with SDL ttf for now.
516 VBOX_WITH_SECURELABEL=
517 # We'll use the native html/help viewer.
518 VBOX_WITH_KCHMVIEWER=
519 # Later:
520 VBOX_WITH_VRDP_AUTHMOD=
521 VBOX_WITH_VRDP_RDESKTOP=
522 VBOX_WITH_PDM_ASYNC_COMPLETION=
523endif
524
525ifeq ($(KBUILD_TARGET),freebsd)
526 VBOX_WITH_INSTALLER=
527 VBOX_WITH_SECURELABEL=
528 VBOX_WITH_VRDP_AUTHMOD=
529 VBOX_WITH_VRDP_RDESKTOP=
530 VBOX_WITH_TESTSUITE=
531 VBOX_WITH_USB=
532 VBOX_WITH_EHCI=
533 VBOX_WITH_DOCS=
534 VBOX_WITH_KCHMVIEWER=
535endif
536
537ifeq ($(KBUILD_TARGET),l4)
538 VBOX_WITH_VBOXDRV=
539 VBOX_WITH_ADDITION_DRIVERS=
540 VBOX_WITH_VRDP=
541 VBOX_WITH_HEADLESS=
542 VBOX_WITH_VBOXSDL=
543 VBOX_WITH_QTGUI=
544 VBOX_WITH_QT4GUI=
545 VBOX_WITH_MAIN=
546 VBOX_WITH_DOCS=
547 VBOX_WITH_ISCSI=
548 VBOX_WITH_INTERNAL_NETWORKING=
549 VBOX_WITH_PDM_ASYNC_COMPLETION=
550 VBOX_WITH_KCHMVIEWER=
551 VBOX_WITH_HARDENING=
552endif
553
554ifeq ($(KBUILD_TARGET),os2)
555 VBOX_WITH_INSTALLER=
556 VBOX_WITH_SECURELABEL=
557 VBOX_WITH_VRDP_AUTHMOD=
558 VBOX_WITH_VRDP_RDESKTOP=
559 VBOX_WITH_TESTSUITE=
560 VBOX_WITH_QT4GUI=
561 VBOX_WITH_USB=
562 VBOX_WITH_EHCI=
563 VBOX_WITH_DOCS=
564 VBOX_WITH_PDM_ASYNC_COMPLETION=
565 VBOX_WITH_KCHMVIEWER=
566 VBOX_WITH_HARDENING=
567endif
568
569ifeq ($(KBUILD_TARGET),solaris)
570 VBOX_WITH_SECURELABEL=
571 VBOX_WITH_USB=
572 VBOX_WITH_OGL=
573endif
574
575ifeq ($(KBUILD_TARGET),win)
576 VBOX_WITH_VRDP_RDESKTOP=
577 VBOX_WITH_KCHMVIEWER=
578endif
579
580
581#
582# Include automatic and local config file to override the above settings
583# and to provide defaults for the settings below this point.
584#
585AUTOCFG := $(wildcard $(PATH_ROOT)/AutoConfig.kmk)
586ifeq ($(AUTOCFG),)
587 # deprecated name. to be removed.
588 AUTOCFG := $(wildcard $(PATH_ROOT)/Config.kmkconf)
589 ifneq ($(AUTOCFG),)
590 $(warning Config.kmkconf has been renamed. Please re-run configure.)
591 endif
592endif
593ifneq ($(AUTOCFG),)
594 include $(AUTOCFG)
595endif
596
597LOCALCFG := $(wildcard $(PATH_ROOT)/LocalConfig.kmk)
598ifeq ($(LOCALCFG),)
599 # deprecated name. to be removed.
600 LOCALCFG := $(wildcard $(PATH_ROOT)/Config.kmklocal)
601 ifneq ($(LOCALCFG),)
602 $(warning Please rename your Config.kmklocal to LocalConfig.kmk.)
603 endif
604endif
605ifneq ($(LOCALCFG),)
606 include $(LOCALCFG)
607endif
608
609#
610# Allow to overwrite the branding information from an external file
611#
612ifdef VBOX_BRANDING_CFG
613 include $(VBOX_BRANDING_CFG)
614endif
615
616#
617# Disable components that are not open sourced.
618#
619ifdef VBOX_OSE
620 VBOX_WITH_WEBSERVICES=
621 VBOX_WITH_VRDP=
622 VBOX_WITH_USB=
623 VBOX_WITH_EHCI=
624 VBOX_WITH_ISCSI=
625 VBOX_WITH_E1000=
626 VBOX_WITH_VMI=
627 ifn1of ($(KBUILD_TARGET), darwin linux solaris)
628 VBOX_WITH_NETFLT=
629 endif
630 VBOX_WITH_DEBUGGER=
631 VBOX_WITH_DEBUGGER_GUI=
632 VBOX_WITH_WIN32_ADDITIONS_SHAREDFOLDERS=
633 VBOX_WITH_ADDITIONS_PACKING=
634 VBOX_WITHOUT_ADDITIONS_ISO=1
635 VBOX_WITH_OS2_ADDITIONS_BIN=
636 VBOX_WITH_SECURELABEL=
637 VBOX_WITH_KCHMVIEWER=
638 VBOX_WITH_DOCS=
639 VBOX_WITH_DOCS_PACKING=
640 VBOX_WITH_TESTSUITE=
641 VBOX_WITH_INTEL_PXE=
642 VBOX_WITH_FFMPEG=
643 VBOX_WITH_CROGL=
644 ifeq ($(KBUILD_TARGET),darwin)
645 # Qt/Mac v3.3.x requires patching to work for us.
646 VBOX_WITH_QTGUI=
647 endif
648 ifn1of ($(KBUILD_TARGET), linux solaris)
649 # Only the Linux, Solaris installers are public
650 VBOX_WITH_INSTALLER=
651 endif
652 VBOX_WITH_AHCI=
653 VBOX_WITH_PDM_ASYNC_COMPLETION=
654 VBOX_WITH_BUSLOGIC=
655 VBOX_WITH_SCSI=
656 # branding
657 VBOX_BRAND_BIOS_LOGO := $(PATH_ROOT)/src/VBox/Devices/Graphics/BIOS/ose_logo.bmp
658 VBOX_BRAND_GUI_ABOUT_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox4/images/OSE/about.png
659 VBOX_BRAND_GUI_ABOUT_16PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox4/images/OSE/about_16px.png
660 VBOX_BRAND_GUI_VBOX_16PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox4/images/OSE/VirtualBox_16px.png
661 VBOX_BRAND_GUI_VBOX_20PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox4/images/OSE/VirtualBox_20px.png
662 VBOX_BRAND_GUI_VBOX_32PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox4/images/OSE/VirtualBox_32px.png
663 VBOX_BRAND_GUI_VBOX_40PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox4/images/OSE/VirtualBox_40px.png
664 VBOX_BRAND_GUI_VBOX_48PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox4/images/OSE/VirtualBox_48px.png
665 VBOX_BRAND_GUI_VBOX_64PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox4/images/OSE/VirtualBox_64px.png
666 VBOX_BRAND_GUI_CUBE_42PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox4/images/OSE/VirtualBox_cube_42px.png
667endif
668
669#
670# VBOX_WITHOUT_HARDENING is for developers (put in LocalConfig.kmk).
671# Note that this is a bit rough since hardening governs more than one
672# variable... Also note that we allow VBOX_WITH_HARDENING=1 on the
673# command line to overrule VBOX_WITHOUT_HARDENING (the check below).
674#
675ifdef VBOX_WITHOUT_HARDENING
676 VBOX_WITH_HARDENING=
677 ifeq ($(VBOX_WITH_HARDENING),)
678 VBOX_PATH_APP_PRIVATE=
679 VBOX_PATH_APP_PRIVATE_ARCH=
680 VBOX_PATH_SHARED_LIBS=
681 VBOX_PATH_APP_DOCS=
682 VBOX_WITH_RUNPATH=
683 if1of ($(KBUILD_TARGET), linux solaris)
684 VBOX_WITH_ORIGIN=1
685 endif
686 endif
687endif
688
689#
690# Sanitize the additions build config variables.
691#
692ifdef VBOX_WITH_ADDITIONS_FROM_BUILD_SERVER
693 VBOX_WITHOUT_ADDITIONS := 1
694 ifdef VBOX_ONLY_ADDITIONS
695 $(error VBOX_ONLY_ADDITIONS + VBOX_WITH_ADDITIONS_FROM_BUILD_SERVER does not add up!)
696 endif
697endif
698
699ifdef VBOX_ONLY_ADDITIONS
700 ifdef VBOX_WITHOUT_ADDITIONS
701 $(error VBOX_ONLY_ADDITIONS + VBOX_WITHOUT_ADDITIONS does not add up!)
702 endif
703endif
704
705ifdef VBOX_WITHOUT_ADDITIONS
706 # Zap anything that could be contradicting this.
707 VBOX_WITH_ADDITIONS :=
708endif
709
710#
711# Sanitize the documentation build config variables.
712#
713ifdef VBOX_WITH_DOCS_FROM_BUILD_SERVER
714 VBOX_WITHOUT_DOCS := 1
715 ifdef VBOX_ONLY_DOCS
716 $(error VBOX_ONLY_DOCS + VBOX_WITH_DOCS_FROM_BUILD_SERVER does not add up!)
717 endif
718endif
719
720ifdef VBOX_ONLY_DOCS
721 ifdef VBOX_WITHOUT_DOCS
722 $(error VBOX_ONLY_DOCS + VBOX_WITHOUT_DOCS does not add up!)
723 endif
724endif
725
726ifdef VBOX_WITHOUT_DOCS
727 # Zap anything that could be contradicting this.
728 VBOX_WITH_DOCS :=
729endif
730
731#
732# Disable components for headless
733#
734ifdef VBOX_HEADLESS
735 VBOX_WITH_QTGUI=
736 VBOX_WITH_QT4GUI=
737 VBOX_WITH_VBOXSDL=
738 VBOX_WITH_VBOXBFE=
739 VBOX_WITH_OGL=
740 VBOX_WITH_KCHMVIEWER=
741endif
742
743#
744# Undefined VBOX_WITH_MAIN implies exclusion of a few more items.
745#
746ifndef VBOX_WITH_MAIN
747 VBOX_WITH_VRDP=
748 VBOX_WITH_VBOXSDL=
749 VBOX_WITH_QTGUI=
750 VBOX_WITH_QT4GUI=
751 VBOX_WITH_DEBUGGER_GUI=
752 VBOX_WITH_HEADLESS=
753endif
754
755ifndef VBOX_WITH_QT4GUI
756 VBOX_WITH_KCHMVIEWER=
757endif
758
759#
760# Check for incompatible combinations.
761#
762ifdef VBOX_WITH_RUNPATH
763 ifdef VBOX_WITH_ORIGIN
764 $(error VBOX_WITH_RUNPATH and VBOX_WITH_ORIGIN are mutually exclusive (lazy bird))
765 endif
766endif
767
768#
769# Mark OSE builds clearly, helps figuring out limitations more easily.
770#
771ifdef VBOX_OSE
772VBOX_VERSION_STRING = $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)_OSE
773endif
774
775
776#
777# Image and object format config.
778#
779if1of ($(KBUILD_TARGET), linux l4 freebsd netbsd openbsd solaris)
780 VBOX_LDR_FMT = elf
781endif
782ifeq ($(KBUILD_TARGET),darwin)
783 VBOX_LDR_FMT = macho
784endif
785ifeq ($(KBUILD_TARGET),os2)
786 VBOX_LDR_FMT = lx
787 VBOX_LDR_FMT32 = lx
788 VBOX_LDR_FMT64 = elf
789 DONT_USE_YASM = 1 # yasm doesn't implement omf yet.
790endif
791ifeq ($(KBUILD_TARGET),win)
792 VBOX_LDR_FMT = pe
793endif
794VBOX_LDR_FMT32 ?= $(VBOX_LDR_FMT)
795VBOX_LDR_FMT64 ?= $(VBOX_LDR_FMT)
796
797#
798# Assembler setup.
799#
800# This is a bit complicated since we have to support two different assmblers
801# (yasm/nasm) and possibly two different formats (32-bit/64-bit).
802#
803ifeq ($(VBOX_LDR_FMT),elf)
804 ifeq ($(KBUILD_TARGET_ARCH),x86)
805VBOX_ASFLAGS_FMT = -f elf32 -DASM_FORMAT_ELF
806 else
807VBOX_ASFLAGS_FMT = -f elf64 -DASM_FORMAT_ELF
808 endif
809 VBOX_ASFLAGS_DBFINFO = -g dwarf2
810endif
811ifeq ($(VBOX_LDR_FMT),lx)
812 VBOX_ASFLAGS_FMT = -f obj -DASM_FORMAT_OMF
813 VBOX_ASFLAGS_DBFINFO = -g stabs
814endif
815ifeq ($(VBOX_LDR_FMT),macho)
816 VBOX_ASFLAGS_FMT = -f macho -DASM_FORMAT_MACHO
817 VBOX_ASFLAGS_DBFINFO = -g dwarf2
818endif
819ifeq ($(VBOX_LDR_FMT),pe)
820 ifeq ($(KBUILD_TARGET_ARCH),x86)
821VBOX_ASFLAGS_FMT = -f win32 -DASM_FORMAT_PE
822 else
823VBOX_ASFLAGS_FMT = -f win64 -DASM_FORMAT_PE
824 endif
825VBOX_ASFLAGS_DBFINFO = -g cv8
826endif
827ifndef VBOX_ASFLAGS_FMT
828 $(error VBOX_ASFLAGS_FMT is not defined. VBOX_LDR_FMT=$(VBOX_LDR_FMT))
829endif
830
831ifeq ($(VBOX_LDR_FMT32),elf)
832 VBOX_ASFLAGS_FMT32 = -f elf32 -DASM_FORMAT_ELF
833 VBOX_ASFLAGS_DBFINFO32 = -g dwarf2
834endif
835ifeq ($(VBOX_LDR_FMT32),lx)
836 VBOX_ASFLAGS_FMT32 = -f obj -DASM_FORMAT_OMF
837 VBOX_ASFLAGS_DBFINFO32 = -g stabs
838endif
839ifeq ($(VBOX_LDR_FMT32),macho)
840 VBOX_ASFLAGS_FMT32 = -f macho -DASM_FORMAT_MACHO
841 VBOX_ASFLAGS_DBFINFO32 = -g dwarf2
842endif
843ifeq ($(VBOX_LDR_FMT32),pe)
844 VBOX_ASFLAGS_FMT32 = -f win32 -DASM_FORMAT_PE
845 VBOX_ASFLAGS_DBFINFO32 = -g cv8
846endif
847ifndef VBOX_ASFLAGS_FMT32
848 $(error VBOX_ASFLAGS_FMT32 is not defined. VBOX_LDR_FMT32=$(VBOX_LDR_FMT32))
849endif
850
851ifeq ($(VBOX_LDR_FMT64),elf)
852 VBOX_ASFLAGS_FMT64 = -f elf64 -DASM_FORMAT_ELF
853 VBOX_ASFLAGS_DBFINFO64 = -g dwarf2
854endif
855ifeq ($(VBOX_LDR_FMT64),macho)
856 VBOX_ASFLAGS_FMT64 = -f macho64 -DASM_FORMAT_MACHO
857 VBOX_ASFLAGS_DBFINFO64 = -g dwarf2
858endif
859ifeq ($(VBOX_LDR_FMT64),pe)
860 VBOX_ASFLAGS_FMT64 = -f win64 -DASM_FORMAT_PE
861 VBOX_ASFLAGS_DBFINFO64 = -g cv8
862endif
863ifndef VBOX_ASFLAGS_FMT64
864 $(error VBOX_ASFLAGS_FMT64 is not defined. VBOX_LDR_FMT64=$(VBOX_LDR_FMT64))
865endif
866
867ifndef DONT_USE_YASM
868 VBOX_ASTOOL = YASM
869 VBOX_LDR_FMT_2_YASM_DBGINFO.elf = -g dwarf2
870 VBOX_LDR_FMT_2_YASM_DBGINFO.lx = -g stabs
871 VBOX_LDR_FMT_2_YASM_DBGINFO.macho =
872 VBOX_LDR_FMT_2_YASM_DBGINFO.pe = -g cv8
873 VBOX_ASFLAGS = $(VBOX_ASFLAGS_FMT) -D__YASM__ -Worphan-labels $(VBOX_LDR_FMT_2_YASM_DBGINFO.$(VBOX_LDR_FMT))
874 VBOX_ASFLAGS32 = $(VBOX_ASFLAGS_FMT32) -D__YASM__ -Worphan-labels $(VBOX_LDR_FMT_2_YASM_DBGINFO.$(VBOX_LDR_FMT32))
875 VBOX_ASFLAGS64 = $(VBOX_ASFLAGS_FMT64) -D__YASM__ -Worphan-labels $(VBOX_LDR_FMT_2_YASM_DBGINFO.$(VBOX_LDR_FMT64))
876else
877 VBOX_ASTOOL = NASM
878 VBOX_ASFLAGS = $(subst elf32,elf,$(VBOX_ASFLAGS_FMT)) -D__NASM__ -w+orphan-labels -g
879 VBOX_ASFLAGS32 = $(subst elf32,elf,$(VBOX_ASFLAGS_FMT32)) -D__NASM__ -w+orphan-labels -g
880 VBOX_ASFLAGS64 = $(VBOX_ASFLAGS_FMT64) -D__NASM__ -w+orphan-labels -g
881endif
882
883#
884# Windows only has mingw handy. On *nix we have to deal with cross compiling
885# 32-bit targets on 64-bit platforms, meaning we'll be using gcc32/g++32.
886# In the latter case we'll also have to disable all the all the R0 driver related stuff.
887#
888ifndef VBOX_GCC_TOOL
889 ifeq ($(KBUILD_TARGET),win)
890 VBOX_GCC_TOOL := MINGW32
891 TOOL_MINGW32_CFLAGS := $(UNDEFINED) # override -g
892 else ifeq ($(KBUILD_TARGET),os2)
893 VBOX_GCC_TOOL := GXX3OMF
894 else ifeq ($(KBUILD_TARGET),darwin)
895 VBOX_GCC_TOOL := GXX4MACHO
896 else ifeq ($(KBUILD_TARGET),solaris)
897 VBOX_GCC_TOOL := GXX3PLAIN
898 VBOX_GCC32_TOOL := GXX3PLAIN
899 else
900 VBOX_GCC_TOOL := GXX3
901 ifeq ($(KBUILD_TARGET_ARCH).$(KBUILD_HOST_ARCH),x86.amd64) ## @todo mixing target/host here!
902 VBOX_GCC_TOOL := GXX32
903 VBOX_WITH_VBOXDRV=
904 else ifeq ($(KBUILD_TARGET_ARCH).$(KBUILD_HOST_ARCH),amd64.x86)
905 VBOX_GCC_TOOL := GXX64
906 VBOX_WITH_VBOXDRV=
907 endif
908 endif
909endif
910ifndef VBOX_GCC32_TOOL
911 ifeq ($(KBUILD_TARGET_ARCH),x86)
912 VBOX_GCC32_TOOL := $(VBOX_GCC_TOOL)
913 else ifeq ($(KBUILD_TARGET),win)
914 VBOX_GCC32_TOOL := MINGW32
915 else
916 VBOX_GCC32_TOOL := GXX32
917 endif
918endif
919
920#
921# Decide which Visual C++ compiler version we're using by default.
922#
923ifndef VBOX_VCC_TOOL
924 ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),win.amd64)
925 VBOX_USE_VCC80 ?= 1 # Enforce VCC80 when targetting AMD64.
926 endif
927 ifdef VBOX_USE_VCC80
928 ifeq ($(KBUILD_TARGET_ARCH),x86)
929 VBOX_VCC_TOOL := VCC80X86
930 else
931 VBOX_VCC_TOOL := VCC80AMD64
932 endif
933 else
934 VBOX_VCC_TOOL := VCC70
935 endif
936endif
937
938#
939# The kBuild tools and SDKs are using PATH_DEVTOOLS, PATH_DEVTOOLS_BLD
940# and PATH_DEVTOOLS_TRG to find things if we give them specific locations.
941#
942PATH_DEVTOOLS ?= $(PATH_ROOT)/tools
943PATH_DEVTOOLS := $(abspath $(PATH_DEVTOOLS))
944PATH_DEVTOOLS_BLD ?= $(PATH_DEVTOOLS)/$(KBUILD_HOST).$(KBUILD_HOST_ARCH)
945PATH_DEVTOOLS_TRG ?= $(PATH_DEVTOOLS)/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)
946
947## @todo Remove the default tool crap here!
948TOOL = $(VBOX_GCC_TOOL)
949ifdef VBOX_USE_VCC80
950 TOOL.win.x86 = VCC80X86
951 TOOL.win.amd64 = VCC80AMD64
952else
953 TOOL.win = VCC70
954endif
955ASTOOL = $(VBOX_ASTOOL)
956
957#
958# L4-specific settings.
959#
960ifdef L4_DIR
961 ifeq ($(KBUILD_TARGET),l4)
962 L4_API ?= l4v2
963 L4_ARCH ?= $(KBUILD_TARGET_ARCH)
964 ifeq ($(L4_ARCH),x86)
965 L4_CPU ?= 586
966 L4LINUX26_INCDIR := $(L4LINUX26_DIR)/include \
967 $(L4LINUX26_DIR)/include/asm-l4/i386-arch
968 else ifeq ($(L4_ARCH),amd64)
969 L4_CPU ?= k8
970 L4LINUX26_INCDIR := $(L4LINUX26_DIR)/include
971 # no red zone for L4 because of IPC bindings
972 CFLAGS.l4 = -mno-red-zone
973 CXXFLAGS.l4 = -mno-red-zone
974 else
975 $(error L4_ARCH=$(L4_ARCH))
976 endif
977 L4_OBJ := $(L4_DIR)/build-$(L4_ARCH)-$(L4_CPU)-$(L4_API)
978 # support splitted Linux kernels (make O=<build directory>)
979 kernelsrc := $(shell $(SED_EXT) -ne 's+^KERNELSRC.*= *\(.*\)+\1+p' $(L4LINUX26_DIR)/Makefile)
980 ifneq ($(kernelsrc),)
981 kernelpath := $(realpath $(kernelsrc))
982 L4LINUX26_INCDIR += $(L4LINUX26_DIR)/include2 $(kernelpath)/include
983 endif
984 L4_INCDIR := \
985 $(L4_OBJ)/include/uclibc++ \
986 $(L4_OBJ)/include/$(L4_ARCH)/uclibc \
987 $(L4_OBJ)/include/uclibc \
988 $(L4LINUX26_INCDIR) \
989 $(L4_OBJ)/include/$(L4_ARCH)/$(L4_API) \
990 $(L4_OBJ)/include/$(L4_API) \
991 $(L4_OBJ)/include/$(L4_ARCH) \
992 $(L4_OBJ)/include \
993 $(L4_DIR)/tool/dice/include
994 L4_LIBDIR := \
995 $(L4_DIR)/build-$(L4_ARCH)-$(L4_CPU)-$(L4_API)/lib/$(L4_ARCH)_$(L4_CPU)/$(L4_API)
996 endif # KBUILD_TARGET == l4
997endif # L4_DIR
998
999# Produce debugging information that the Fiasco kernel debugger can read.
1000ifeq ($(KBUILD_TARGET).$(KBUILD_TYPE),l4.debug)
1001 DEBUG_L4 = -gstabs+
1002endif
1003
1004#
1005# Setup the global defines and includes.
1006#
1007# Note! The __SOMETHING__ #defines are deprecated as they violate the C/C++ specs.
1008#
1009INCS += $(PATH_ROOT)/include $(PATH_OUT)
1010DEFS += VBOX
1011DEFS.debug := DEBUG DEBUG_$(subst $(subst _, ,_),_,$(USERNAME)) DEBUG_USERNAME=$(subst $(subst _, ,_),_,$(USERNAME))
1012DEFS.profile = VBOX_WITH_STATISTICS
1013DEFS.strict = RT_STRICT VBOX_STRICT
1014DEFS.x86 = RT_ARCH_X86 __X86__
1015DEFS.amd64 = RT_ARCH_AMD64 __AMD64__
1016DEFS.darwin = RT_OS_DARWIN __DARWIN__
1017DEFS.darwin.x86 = VBOX_WITH_HYBIRD_32BIT_KERNEL
1018DEFS.freebsd = RT_OS_FREEBSD __FREEBSD__
1019DEFS.l4 = RT_OS_L4 __L4__ __L4ENV__ L4API_l4v2 ARCH_$(KBUILD_TARGET_ARCH) __NO_CTYPE _FILE_OFFSET_BITS=64
1020DEFS.linux = RT_OS_LINUX _FILE_OFFSET_BITS=64
1021DEFS.netbsd = RT_OS_NETBSD
1022DEFS.openbsd = RT_OS_OPENBSD
1023DEFS.os2 = RT_OS_OS2 __OS2__
1024DEFS.solaris = RT_OS_SOLARIS _FILE_OFFSET_BITS=64
1025DEFS.win = RT_OS_WINDOWS __WIN__
1026DEFS.win.x86 = __WIN32__
1027DEFS.win.amd64 = __WIN64__
1028# optional defines (use environment or make commandline)
1029ifdef VBOX_WITH_DEBUGGER
1030 DEFS += VBOX_WITH_DEBUGGER
1031endif
1032ifdef VBOX_WITH_DEBUGGER_GUI
1033 DEFS += VBOX_WITH_DEBUGGER_GUI
1034endif
1035ifdef VBOX_WITH_STATISTICS
1036 DEFS += VBOX_WITH_STATISTICS
1037endif
1038ifdef VBOX_STRICT
1039 DEFS += VBOX_STRICT
1040endif
1041ifdef LOG_ENABLED
1042 DEFS += LOG_ENABLED
1043endif
1044ifdef VBOX_OSE
1045 DEFS += VBOX_OSE
1046endif
1047ifdef VBOX_WITH_NEW_PHYS_CODE
1048 DEFS += VBOX_WITH_NEW_PHYS_CODE
1049endif
1050ifdef VBOX_WITH_64_BITS_GUESTS
1051 DEFS += VBOX_WITH_64_BITS_GUESTS
1052endif
1053ifdef VBOX_WITH_SMP_GUESTS
1054 DEFS += VBOX_WITH_SMP_GUESTS
1055endif
1056ifdef VBOX_WITH_MORE_THAN_4GB
1057 DEFS += VBOX_WITH_MORE_THAN_4GB
1058endif
1059ifdef VBOX_WITH_HARDENING
1060 DEFS += VBOX_WITH_HARDENING
1061endif
1062ifdef VBOX_PATH_APP_PRIVATE
1063 DEFS += RTPATH_APP_PRIVATE=\"$(VBOX_PATH_APP_PRIVATE)\"
1064endif
1065ifdef VBOX_PATH_APP_PRIVATE_ARCH
1066 DEFS += RTPATH_APP_PRIVATE_ARCH=\"$(VBOX_PATH_APP_PRIVATE_ARCH)\"
1067endif
1068ifdef VBOX_PATH_SHARED_LIBS
1069 DEFS += RTPATH_SHARED_LIBS=\"$(VBOX_PATH_SHARED_LIBS)\"
1070endif
1071ifdef VBOX_PATH_APP_DOCS
1072 DEFS += RTPATH_APP_DOCS=\"$(VBOX_PATH_APP_DOCS)\"
1073endif
1074
1075#
1076# Compiler optimization flags.
1077#
1078VBOX_GCC_WARN ?= -Wall $(VBOX_GCC_Wextra) $(VBOX_GCC_Wno-missing-field-initializers) -Wno-unused -Wno-trigraphs
1079VBOX_GCC_PEDANTIC ?= -pedantic $(VBOX_GCC_WARN) -Wno-long-long
1080ifeq ($(KBUILD_TYPE),debug)
1081 VBOX_GCC_FP ?= -fno-omit-frame-pointer
1082 VBOX_GCC_OPT ?= -O0
1083 VBOX_VCC_FP ?= -Oy-
1084 VBOX_VCC_OPT ?=
1085 VBOX_GCC_GC_FP ?= -fno-omit-frame-pointer
1086 VBOX_GCC_GC_OPT ?= -O0
1087 VBOX_VCC_GC_FP ?= -Oy-
1088 VBOX_VCC_GC_OPT ?=
1089else
1090 # We should use -fomit-frame-pointer for GCC / -Oy for VCC.
1091 # -funwind-tables provides support for backtraces in gdb then.
1092 VBOX_GCC_FP ?= -fno-omit-frame-pointer
1093 VBOX_GCC_OPT ?= -O2 $(VBOX_GCC_mtune-generic)
1094 VBOX_VCC_FP ?= -Oy-
1095 ifdef VBOX_USE_VCC80
1096 VBOX_VCC_OPT ?= -O2 -GS-
1097 else
1098 VBOX_VCC_OPT ?= -Ogitb2
1099 endif
1100 VBOX_GCC_GC_FP ?= -fno-omit-frame-pointer
1101 VBOX_GCC_GC_OPT ?= -O2 $(VBOX_GCC_mtune-generic)
1102 VBOX_VCC_GC_FP ?= -Oy-
1103 ifdef VBOX_USE_VCC80
1104 VBOX_VCC_GC_OPT ?= -O2
1105 else
1106 VBOX_VCC_GC_OPT ?= -Ogitb2
1107 endif
1108endif
1109ifeq ($(KBUILD_TARGET_ARCH),x86)
1110 ifneq ($(KBUILD_TARGET),darwin)
1111 # (The '<=' operator is for prepending (kmk specific).)
1112 VBOX_GCC_OPT <= -march=i586
1113 endif
1114endif
1115
1116#
1117# ARCH_BITS_DEFS.
1118#
1119ifeq ($(KBUILD_TARGET_ARCH),amd64)
1120 ARCH_BITS_DEFS := HC_ARCH_BITS=64
1121else ifeq ($(KBUILD_TARGET_ARCH),x86)
1122 ARCH_BITS_DEFS := HC_ARCH_BITS=32
1123else
1124 error KBUILD_TARGET_ARCH=$(KBUILD_TARGET_ARCH)
1125endif
1126
1127ifdef VBOX_WITH_64_BITS_GUESTS
1128 VBOX_GC_ARCH_BITS_DEFS := GC_ARCH_BITS=64
1129else
1130 VBOX_GC_ARCH_BITS_DEFS := GC_ARCH_BITS=32
1131endif
1132ARCH_BITS_DEFS += $(VBOX_GC_ARCH_BITS_DEFS)
1133
1134#
1135# Add the output dir(s) to the dynamic loader search path.
1136#
1137if1of ($(KBUILD_TARGET), linux l4 freebsd netbsd openbsd solaris)
1138 export LD_LIBRARY_PATH:=$(PATH_BIN):$(PATH_LIB):$(LD_LIBRARY_PATH)
1139endif
1140ifeq ($(KBUILD_TARGET),os2)
1141 #fixme! export BEGINLIBPATH:=$(PATH_BIN);$(PATH_LIB);$(BEGINLIBPATH)
1142endif
1143ifeq ($(KBUILD_TARGET),win)
1144 export PATH:=$(PATH_BIN);$(PATH_LIB);$(PATH)
1145endif
1146
1147#
1148# Common libraries and tools.
1149#
1150ifeq ($(KBUILD_TARGET),darwin)
1151 LIB_RUNTIME = $(PATH_BIN)/VBoxRT.dylib
1152 LIB_RUNTIME_EF = #$(PATH_LIB)/RuntimeEFCPP.a
1153 LIB_KPROFILE = $(PATH_BIN)/kPrf2.dylib
1154 LIB_VMM = $(PATH_BIN)/VBoxVMM.dylib
1155 LIB_VMMGC = $(PATH_BIN)/VMMGC.gc
1156ifdef VBOX_WITH_NEW_RECOMPILER
1157 LIB_REM = $(PATH_BIN)/VBoxREM.dylib
1158else
1159 LIB_REM = $(PATH_LIB)/VBoxREM.dylib
1160endif
1161 LIB_XPCOM = $(PATH_BIN)/VBoxXPCOM.dylib
1162 LIB_DDU = $(PATH_BIN)/VBoxDDU.dylib
1163 LIB_SETTINGS = $(PATH_BIN)/VBoxSettings.dylib
1164endif
1165ifeq ($(KBUILD_TARGET),l4)
1166 LIB_RUNTIME = $(PATH_BIN)/VBoxRT.s.so
1167 LIB_RUNTIME_EF = #$(PATH_LIB)/RuntimeEFCPP.a
1168 LIB_KPROFILE = $(PATH_BIN)/kPrf2.s.so
1169 LIB_VMM = $(PATH_BIN)/VBoxVMM.s.so
1170 LIB_VMMGC = $(PATH_BIN)/VMMGC.gc
1171 LIB_REM = $(PATH_LIB)/VBoxREM.s.so
1172 LIB_XPCOM = $(PATH_BIN)/VBoxXPCOM.s.so
1173 LIB_DDU = $(PATH_BIN)/VBoxDDU.s.so
1174 LIB_SETTINGS = $(PATH_BIN)/VBoxSettings.s.so
1175endif
1176if1of ($(KBUILD_TARGET), linux freebsd netbsd openbsd solaris)
1177 LIB_RUNTIME = $(PATH_BIN)/VBoxRT.so
1178 LIB_RUNTIME_EF = $(PATH_LIB)/RuntimeEFCPP.a
1179 LIB_KPROFILE = $(PATH_BIN)/kPrf2.so
1180 LIB_VMM = $(PATH_BIN)/VBoxVMM.so
1181 LIB_VMMGC = $(PATH_BIN)/VMMGC.gc
1182 ifdef VBOX_WITH_NEW_RECOMPILER # bird: Not acceptable - it won't work because of build order (try a clean, recursive, build).
1183 LIB_REM = $(PATH_BIN)/VBoxREM.so
1184 else
1185 LIB_REM = $(PATH_LIB)/VBoxREM.so
1186 endif
1187 LIB_XPCOM = $(PATH_BIN)/VBoxXPCOM.so
1188 LIB_DDU = $(PATH_BIN)/VBoxDDU.so
1189 LIB_SETTINGS = $(PATH_BIN)/VBoxSettings.so
1190endif
1191ifeq ($(KBUILD_TARGET),os2)
1192 LIB_RUNTIME = $(PATH_BIN)/VBoxRT.dll
1193 LIB_RUNTIME_EF = #$(PATH_LIB)/RuntimeEFCPP.a
1194 LIB_KPROFILE = $(PATH_BIN)/kPrf2.dll
1195 LIB_VMM = $(PATH_BIN)/VBoxVMM.dll
1196 LIB_VMMGC = $(PATH_LIB)/VMMGCImp.lib
1197 LIB_REM = $(PATH_LIB)/VBoxREMImp.lib
1198 LIB_XPCOM = $(PATH_BIN)/VBoxXCOM.dll
1199 LIB_DDU = $(PATH_BIN)/VBoxDDU.dll
1200 LIB_SETTINGS = $(PATH_BIN)/VBoxSett.dll
1201 VBOX_OBJ_SYS0 = $(PATH_OBJ)/RuntimeR0/os2/sys0.obj
1202endif
1203ifeq ($(KBUILD_TARGET),win)
1204 LIB_RUNTIME = $(PATH_LIB)/VBoxRT.lib
1205 LIB_RUNTIME_EF = #$(PATH_LIB)/RuntimeEFCPP.lib
1206 LIB_KPROFILE = $(PATH_LIB)/kPrf2.lib
1207 LIB_VMM = $(PATH_LIB)/VBoxVMM.lib
1208 LIB_VMMGC = $(PATH_OBJ)/VMMGC/VMMGC.lib
1209 LIB_REM = $(PATH_LIB)/VBoxREMImp.lib
1210 LIB_XPCOM = $(PATH_BIN)/VBoxXPCOM.dll
1211 LIB_DDU = $(PATH_LIB)/VBoxDDU.lib
1212 LIB_SETTINGS = $(PATH_LIB)/VBoxSettings.lib
1213endif
1214VBOX_LIB_SUPHARDENED = $(PATH_LIB)/SUPR3HardenedStatic$(VBOX_SUFF_LIB)
1215
1216# Define the macro for win path conversion.
1217ifndef VBOX_ONLY_SDK
1218 VBOX_FN_MAKE_WIN_PATH = $(subst /,\\,$(1))
1219else
1220 # on Wine Z: is always FS root
1221 VBOX_FN_MAKE_WIN_PATH = $(subst /,\\,$(patsubst /%,Z:/%,$(1)))
1222endif #!VBOX_ONLY_SDK
1223
1224# The kprofile build automagically links with kProfile.
1225ifeq ($(KBUILD_TYPE),kprofile)
1226 LIB_RUNTIME += $(LIB_KPROFILE)
1227endif
1228
1229## Enable C++ electric fence heap. (Warning: will easily run out of virtual memory / kernel stuff on Linux/Windows.)
1230#LIB_RUNTIME += $(LIB_RUNTIME_EF) $(LIB_RUNTIME)
1231
1232# Overridable libraries (unix).
1233LIB_PTHREAD ?= pthread
1234
1235# Xcursor (consider an SDK for this).
1236ifeq ($(VBOX_XCURSOR_LIBS),)
1237 ifeq ($(KBUILD_TARGET),solaris)
1238 VBOX_XCURSOR_LIBS := $(lastword $(wildcard $(PATH_DEVTOOLS_TRG)/libXcursor/*/lib/libXcursor.a))
1239 ifneq ($(VBOX_XCURSOR_LIBS),)
1240 VBOX_XCURSOR_INCS := $(patsubst %/lib/libXcursor.a,%/include, $(VBOX_XCURSOR_LIBS))
1241 VBOX_XCURSOR_LIBS += X11 Xrender Xfixes
1242 endif
1243 endif
1244 ifeq ($(VBOX_XCURSOR_LIBS),)
1245 VBOX_XCURSOR_LIBS := Xcursor
1246 endif
1247endif
1248
1249
1250# Intel ASL compiler for ACPI
1251VBOX_IASLCMD ?= $(firstword $(wildcard $(PATH_DEVTOOLS_BLD)/bin/iasl$(HOSTSUFF_EXE)) iasl$(HOSTSUFF_EXE))
1252
1253# Bruce's C compile is a C-compiler for BIOS-related 8086 code
1254VBOX_BCC ?= $(PATH_DEVTOOLS_BLD)/bin/bcc$(HOSTSUFF_EXE) -B $(PATH_DEVTOOLS_BLD)/bin/
1255
1256# Assembler for BIOS-related 8086 code
1257VBOX_AS86 ?= $(PATH_DEVTOOLS_BLD)/bin/as86$(HOSTSUFF_EXE)
1258
1259# libxslt XSLT processor. (see PATH_TOOL_YASM for explanation why it's temporarily located in bin.)
1260ifeq ($(KBUILD_HOST),win)
1261# VBOX_XSLTPROC ?= $(PATH_DEVTOOLS)/win.x86/libxslt/10114/xsltproc.exe
1262 VBOX_XSLTPROC ?= $(PATH_DEVTOOLS)/win.x86/bin/xsltproc.exe
1263else ifeq ($(KBUILD_HOST),os2)
1264 VBOX_XSLTPROC ?= BEGINLIBPATH="$(PATH_DEVTOOLS_BLD)/bin;$$BEGINLIBPATH" $(PATH_DEVTOOLS_BLD)/bin/xsltproc.exe
1265else
1266 VBOX_XSLTPROC ?= xsltproc$(HOSTSUFF_EXE)
1267endif
1268
1269# bin2c (convert binary files into C arrays)
1270VBOX_BIN2C ?= $(PATH_OBJ)/bin2c/bin2c$(HOSTSUFF_EXE)
1271
1272# biossums (set BIOS checksums)
1273VBOX_BIOSSUMS ?= $(PATH_OBJ)/biossums/biossums$(HOSTSUFF_EXE)
1274
1275# mkisofs
1276ifeq ($(KBUILD_HOST),win)
1277 VBOX_MKISOFS ?= $(PATH_DEVTOOLS_BLD)/bin/mkisofs.exe
1278else
1279 VBOX_MKISOFS ?= mkisofs
1280endif
1281
1282# Makeself for the linux installers.
1283VBOX_MAKESELF ?= $(PATH_DEVTOOLS)/common/makeself/v2.1.4_1/makeself.sh
1284
1285# Microsoft HTML Help Workshop.
1286VBOX_PATH_HTML_HELP_WORKSHOP ?= $(PATH_DEVTOOLS)/win.x86/HTML_Help_Workshop/v1.3/
1287
1288# Path to the null soft installer.
1289VBOX_PATH_NSIS ?= $(PATH_DEVTOOLS)/win.x86/nsis/v2.33-log-nsscm-r1
1290
1291# Path to AutoIt3.
1292VBOX_PATH_AUTOIT3 ?= $(PATH_DEVTOOLS)/win.x86/autoit/v3.2.10.0
1293
1294# Windows install tools...
1295VBOX_PATH_WIX ?= $(PATH_DEVTOOLS)/win.x86/wix/v2.0.5805.0
1296VBOX_PATH_MSITRAN ?= $(PATH_DEVTOOLS)/win.x86/sdk/200504/Bin/MsiTran.Exe
1297VBOX_PATH_MSIDB ?= $(PATH_DEVTOOLS)/win.x86/sdk/200504/Bin/MsiDb.Exe
1298VBOX_PATH_WISUBSTG ?= $(PATH_DEVTOOLS)/win.x86/sdk/200504/Samples/SysMgmt/Msi/Scripts/WiSubStg.vbs
1299VBOX_PATH_WISUMINFO ?= $(PATH_DEVTOOLS)/win.x86/sdk/200504/Samples/SysMgmt/Msi/Scripts/WiSumInf.vbs
1300VBOX_PATH_DIFX ?= $(PATH_DEVTOOLS)/win.$(KBUILD_TARGET_ARCH)/DIFx/v2.1
1301
1302# We need to export YASM for OSE, but since it was converted to .zip we need to
1303# allow for the location used by the zip to be properly cleaned up first.
1304if1of ($(KBUILD_HOST).$(KBUILD_HOST_ARCH), win.x86 linux.x86 solaris.x86)
1305 PATH_TOOL_YASM ?= $(PATH_DEVTOOLS_BLD)/bin
1306endif
1307
1308# XPCOM setup for all but win32.
1309ifneq ($(KBUILD_TARGET),win)
1310 VBOX_WITH_XPCOM = 1
1311 # if updating, also update xpidl_INST var in src/libs/xpcom18a4/Makefile.kmk
1312 VBOX_XPIDL ?= $(PATH_BIN)/xpidl$(HOSTSUFF_EXE)
1313 ifeq ($(KBUILD_TARGET),os2)
1314 VBOX_XPIDL_ENV = BEGINLIBPATH="$(dir $(VBOX_XPIDL));$$BEGINLIBPATH"$(SP)
1315 endif
1316 VBOX_PATH_XPCOM_IDL ?= $(VBOX_PATH_SDK)/bindings/xpcom/idl
1317 VBOX_XPCOM_INCS ?= \
1318 $(VBOX_PATH_SDK)/bindings/xpcom/include \
1319 $(VBOX_PATH_SDK)/bindings/xpcom/include/xpcom \
1320 $(VBOX_PATH_SDK)/bindings/xpcom/include/string \
1321 $(VBOX_PATH_SDK)/bindings/xpcom/include/xpcom \
1322 $(VBOX_PATH_SDK)/bindings/xpcom/include/nsprpub \
1323 $(VBOX_PATH_SDK)/bindings/xpcom/include/ipcd
1324 ifneq ($(KBUILD_TARGET),os2)
1325 # libIDL-config (for xpcom18a4)
1326 ifeq ($(origin VBOX_LIBIDL_CONFIG),undefined)
1327 export VBOX_LIBIDL_CONFIG := $(firstword $(shell which libIDL-config-2 libIDL-config 2> /dev/null))
1328 endif
1329 endif
1330endif
1331
1332# The X11 LIBPATH. (The amd64 hack is for RHEL4.)
1333ifeq ($(KBUILD_TARGET_ARCH),amd64)
1334 VBOX_LIBPATH_X11 ?= /usr/X11R6/lib64 /usr/X11R6/lib
1335else
1336 VBOX_LIBPATH_X11 ?= /usr/X11R6/lib
1337endif
1338
1339# 32bit X11 LIBPATH for building 32bit guest additions
1340VBOX_LIBPATH32_X11 ?= /usr/X11R6/lib32 /usr/X11R6/lib
1341
1342# dbus settings for Linux
1343ifeq ($(KBUILD_TARGET),linux)
1344 if defined(VBOX_WITH_DBUS) && (!defined(VBOX_DBUS_CFLAGS) || !defined(VBOX_DBUS_CXXFLAGS) || !defined(VBOX_DBUS_LDFLAGS))
1345 export VBOX_DBUS_CFLAGS := $(shell pkg-config dbus-1 --cflags) -DDBUS_API_SUBJECT_TO_CHANGE
1346 export VBOX_DBUS_CXXFLAGS := $(VBOX_DBUS_CFLAGS)
1347 export VBOX_DBUS_LDFLAGS := $(shell pkg-config dbus-1 --libs)
1348 endif
1349endif
1350
1351#
1352# Macros dealing with the darwin version we're targeting.
1353#
1354ifeq ($(KBUILD_TARGET),darwin)
1355 VBOX_DEF_MACOSX_VERSION_MIN ?= 10.4
1356 ifeq ($(VBOX_DEF_MACOSX_VERSION_MIN),10.4)
1357 ifeq ($(origin VBOX_DARWIN_CLASSIC_LINKER),undefined)
1358 VBOX_DARWIN_CLASSIC_LINKER := $(shell ld -v 2>&1 )
1359 ifneq ($(filter ld64%, $(subst :, , $(VBOX_DARWIN_CLASSIC_LINKER))),)
1360 export VBOX_DARWIN_CLASSIC_LINKER := -Wl,-classic_linker
1361 else
1362 export VBOX_DARWIN_CLASSIC_LINKER :=
1363 endif
1364 endif
1365 VBOX_PATH_MACOSX_SDK ?= /Developer/SDKs/MacOSX$(VBOX_DEF_MACOSX_VERSION_MIN)u.sdk
1366 else
1367 VBOX_PATH_MACOSX_SDK ?= /Developer/SDKs/MacOSX$(VBOX_DEF_MACOSX_VERSION_MIN).sdk
1368 endif
1369 VBOX_DARWIN_DEF_SDK_DEFS := MAC_OS_X_VERSION_MIN_REQUIRED=$(subst .,,$(VBOX_DEF_MACOSX_VERSION_MIN))0 \
1370 MAC_OS_X_VERSION_MAX_ALLOWED=$(subst .,,$(VBOX_DEF_MACOSX_VERSION_MIN))0
1371 VBOX_DARWIN_DEF_SDK_CFLAGS := -mmacosx-version-min=$(VBOX_DEF_MACOSX_VERSION_MIN) -isysroot $(VBOX_PATH_MACOSX_SDK)
1372 VBOX_DARWIN_DEF_SDK_CXXFLAGS := -mmacosx-version-min=$(VBOX_DEF_MACOSX_VERSION_MIN) -isysroot $(VBOX_PATH_MACOSX_SDK)
1373 VBOX_DARWIN_DEF_SDK_OBJCFLAGS := -mmacosx-version-min=$(VBOX_DEF_MACOSX_VERSION_MIN) -isysroot $(VBOX_PATH_MACOSX_SDK)
1374 VBOX_DARWIN_DEF_SDK_LDFLAGS := -mmacosx-version-min=$(VBOX_DEF_MACOSX_VERSION_MIN) -Wl,-syslibroot,$(VBOX_PATH_MACOSX_SDK) $(VBOX_DARWIN_CLASSIC_LINKER)
1375
1376 # specific versions.
1377 VBOX_PATH_MACOSX_SDK_10_4 ?= /Developer/SDKs/MacOSX10.4u.sdk
1378 VBOX_DARWIN_DEF_SDK_10_4_DEFS := MAC_OS_X_VERSION_MIN_REQUIRED=1040 MAC_OS_X_VERSION_MAX_ALLOWED=1040
1379 VBOX_DARWIN_DEF_SDK_10_4_CFLAGS := -mmacosx-version-min=10.4 -isysroot $(VBOX_PATH_MACOSX_SDK_10_4)
1380 VBOX_DARWIN_DEF_SDK_10_4_CXXFLAGS := -mmacosx-version-min=10.4 -isysroot $(VBOX_PATH_MACOSX_SDK_10_4)
1381 VBOX_DARWIN_DEF_SDK_10_4_OBJCFLAGS := -mmacosx-version-min=10.4 -isysroot $(VBOX_PATH_MACOSX_SDK_10_4)
1382 VBOX_DARWIN_DEF_SDK_10_4_LDFLAGS := -mmacosx-version-min=10.4 -Wl,-syslibroot,$(VBOX_PATH_MACOSX_SDK_10_4) $(VBOX_DARWIN_CLASSIC_LINKER)
1383
1384 # specific versions.
1385 VBOX_PATH_MACOSX_SDK_10_5 ?= /Developer/SDKs/MacOSX10.5.sdk
1386 VBOX_DARWIN_DEF_SDK_10_5_DEFS := MAC_OS_X_VERSION_MIN_REQUIRED=1050 MAC_OS_X_VERSION_MAX_ALLOWED=1050
1387 VBOX_DARWIN_DEF_SDK_10_5_CFLAGS := -mmacosx-version-min=10.5 -isysroot $(VBOX_PATH_MACOSX_SDK_10_5)
1388 VBOX_DARWIN_DEF_SDK_10_5_CXXFLAGS := -mmacosx-version-min=10.5 -isysroot $(VBOX_PATH_MACOSX_SDK_10_5)
1389 VBOX_DARWIN_DEF_SDK_10_5_OBJCFLAGS := -mmacosx-version-min=10.5 -isysroot $(VBOX_PATH_MACOSX_SDK_10_5)
1390 VBOX_DARWIN_DEF_SDK_10_5_LDFLAGS := -mmacosx-version-min=10.5 -Wl,-syslibroot,$(VBOX_PATH_MACOSX_SDK_10_5)
1391
1392endif # target=darwin
1393
1394#
1395# Macro switching between @executable_path and /Applications/VirtualBox.app
1396# depending on whether the build is hardened or not (dylib install_name)
1397#
1398ifndef VBOX_DYLD_EXECUTABLE_PATH
1399 ifdef VBOX_WITH_HARDENING
1400 VBOX_DYLD_EXECUTABLE_PATH = $(VBOX_PATH_APP_PRIVATE_ARCH)
1401 else
1402 VBOX_DYLD_EXECUTABLE_PATH = @executable_path
1403 endif
1404endif
1405
1406#
1407# The X11 headers.
1408#
1409VBOX_PATH_X11_ROOT = $(PATH_ROOT)/src/VBox/Additions/x11/x11include
1410VBOX_PATH_X11_XFREE_4_2 = $(VBOX_PATH_X11_ROOT)/4.2
1411VBOX_PATH_X11_XFREE_4_3 = $(VBOX_PATH_X11_ROOT)/4.3
1412VBOX_PATH_X11_XORG_7_0 = $(VBOX_PATH_X11_ROOT)/7.0
1413VBOX_PATH_X11_XORG_7_1 = $(VBOX_PATH_X11_ROOT)/7.1
1414VBOX_PATH_X11_XORG_1_3 = $(VBOX_PATH_X11_ROOT)/1.3
1415VBOX_PATH_X11_XORG_1_4 = $(VBOX_PATH_X11_ROOT)/1.4
1416VBOX_PATH_X11_XORG_1_5 = $(VBOX_PATH_X11_ROOT)/1.5
1417
1418#
1419# Various other variables.
1420#
1421
1422# Two helper variables for the VBOX_WITH_ORIGIN stuff:
1423# VBOX_ORIGIN - Indirect expansion trick.
1424# VBOX_GCC_RPATH_OPT - Different GCC/LD combinations needs different options.
1425VBOX_ORIGIN = $$ORIGIN
1426ifeq ($(KBUILD_TARGET),solaris)
1427 VBOX_GCC_RPATH_OPT = -R
1428else
1429 VBOX_GCC_RPATH_OPT = -Wl,-rpath,
1430endif
1431
1432# The icons to use.
1433ifdef VBOX_OSE
1434 VBOX_WINDOWS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_win.ico
1435 VBOX_NSIS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_win.ico
1436 VBOX_MACOSX_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox.icns
1437else
1438 ifeq ($(KBUILD_HOST),win)
1439 VBOX_WINDOWS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/VirtualBox-vista.ico
1440 VBOX_NSIS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/VirtualBox-nsis.ico
1441 TOOL_VCC80X86_RC := $(PATH_DEVTOOLS)/win.x86/ddk/6000/bin/x86/rc.exe
1442 TOOL_VCC80AMD64_RC := $(PATH_DEVTOOLS)/win.x86/ddk/6000/bin/x86/rc.exe
1443 TOOL_VCC70_RC := $(PATH_DEVTOOLS)/win.x86/ddk/6000/bin/x86/rc.exe
1444 else
1445 VBOX_WINDOWS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/VirtualBox-winxp.ico
1446 VBOX_NSIS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/VirtualBox-nsis.ico
1447 endif
1448 VBOX_MACOSX_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/VirtualBox.icns
1449endif
1450
1451
1452#
1453# GCC stuff properties.
1454# Most of this is resolved on first kmk invocation and cached in PATH_OUT.
1455#
1456# Note! That a harmless warning is printed if the file doesn't exist.
1457# Note! Changes in GCC are not detected automatically (yet).
1458#
1459include $(KBUILD_PATH)/tools/$(VBOX_GCC_TOOL).kmk
1460ifneq ($(VBOX_GCC_TOOL),$(VBOX_GCC32_TOOL))
1461 include $(KBUILD_PATH)/tools/$(VBOX_GCC32_TOOL).kmk
1462endif
1463
1464# These tests never worked on Windows because of /dev/null, so, there
1465# can be no harm in just dropping them until cygwin is mp safe.
1466ifeq ($(KBUILD_HOST),win)
1467VBOX_GCC_CHECK_CC = $(2)
1468VBOX_GCC_CHECK_CXX = $(2)
1469VBOX_GCC_CHECK_LD = $(2)
1470VBOX_GCC32_CHECK_CXX = $(2)
1471else
1472VBOX_GCC_CHECK_CC = $(shell \
1473 if $(TOOL_$(VBOX_GCC_TOOL)_CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; \
1474 then echo "$(1)"; \
1475 else echo "$(2)"; fi; )
1476
1477VBOX_GCC_CHECK_CXX = $(shell \
1478 if $(TOOL_$(VBOX_GCC_TOOL)_CXX) $(1) -S -o /dev/null -xc++ /dev/null > /dev/null 2>&1; \
1479 then echo "$(1)"; \
1480 else echo "$(2)"; fi; )
1481
1482VBOX_GCC_CHECK_LD = $(shell \
1483 if $(TOOL_$(VBOX_GCC_TOOL)_LD) -Wl,$(1) -nostdlib -o /dev/null -xc /dev/null > /dev/null 2>&1 ;\
1484 then echo "-Wl,$(1)"; \
1485 else echo "$(2)"; fi; )
1486
1487VBOX_GCC32_CHECK_CXX = $(shell \
1488 if $(TOOL_$(VBOX_GCC32_TOOL)_CXX) $(1) -S -o /dev/null -xc++ /dev/null > /dev/null 2>&1; \
1489 then echo "$(1)"; \
1490 else echo "$(2)"; fi; )
1491endif
1492
1493ifeq ($(KBUILD_HOST),win)
1494# This isn't important (yet) on windows, so cook the result until
1495# cygwin is feeling better.
1496VBOX_GCC_VERSION := $(int-add $(int-mul 10000, 3), $(int-mul 100, 3), 3)
1497else
1498# This is kind of bad, the returned string needs to be re-evaluated before use.
1499# The reason for this hack is that the windows kmk_ash cannot deal with $((1+1)).
1500# Some versions of gcc (e.g. openSUSE11) return only major.minor on `gcc -dumpversion`.
1501VBOX_GCC_VERSION = $(shell \
1502 $(1) -dumpversion | $(SED_EXT) 's|\([0-9]\)\.\([0-9]\)\.\{0,1\}\([0-9]\{0,1\}\)|$$(int-add $$(int-mul 10000, \1), $$(int-mul 100, \2), $$(firstword \3 0))|' )
1503endif
1504
1505# No $(QUIET) here as it's interesting to see what goes into the file.
1506$(PATH_OUT)/GCCConfig.kmk: $(PATH_ROOT)/Config.kmk $(LOCALCFG) $(AUTOCFG)
1507 $(call MSG_GENERATE,,$@,)
1508 $(QUIET)$(RM) -f '$@'
1509 $(QUIET)$(MKDIR) -p $(@D)
1510
1511# HC compiler switch detection.
1512 $(APPEND) '$@' 'VBOX_GCC_VERSION_CC ?= $(call VBOX_GCC_VERSION,$(TOOL_$(VBOX_GCC_TOOL)_CC))'
1513 $(APPEND) '$@' 'VBOX_GCC_VERSION_CXX ?= $(call VBOX_GCC_VERSION,$(TOOL_$(VBOX_GCC_TOOL)_CXX))'
1514 $(APPEND) '$@' 'VBOX_GCC_LIBGCC ?= $(shell $(TOOL_$(VBOX_GCC_TOOL)_CC) -print-libgcc-file-name)'
1515 $(APPEND) '$@' 'VBOX_GCC_Wno-pointer-sign ?= $(call VBOX_GCC_CHECK_CC,-Wno-pointer-sign,)'
1516# -Wextra produces additional useful warnings but includes -Wno-missing-field-initializers (too noisy)
1517 $(APPEND) '$@' 'VBOX_GCC_Wextra ?= $(call VBOX_GCC_CHECK_CC,-Wextra,)'
1518 $(APPEND) '$@' 'VBOX_GCC_Wno-missing-field-initializers ?= $(call VBOX_GCC_CHECK_CC,-Wno-missing-field-initializers,)'
1519 $(APPEND) '$@' 'VBOX_GCC_Wno-variadic-macros ?= $(call VBOX_GCC_CHECK_CXX,-Wno-variadic-macros,)'
1520 $(APPEND) '$@' 'VBOX_GCC_Wno-invalid-offsetof ?= $(call VBOX_GCC_CHECK_CXX,-Wno-invalid-offsetof,)'
1521 $(APPEND) '$@' 'VBOX_GCC_fno-stack-protector ?= $(call VBOX_GCC_CHECK_CC,-fno-stack-protector,)'
1522# Produce code optimized for the most common IA32/AMD64/EM64T processors. Introduced with gcc version 4.2.
1523 $(APPEND) '$@' 'VBOX_GCC_mtune-generic ?= $(call VBOX_GCC_CHECK_CC,-mtune=generic,)'
1524 $(APPEND) '$@' 'VBOX_LD_as_needed ?= $(call VBOX_GCC_CHECK_LD,--as-needed,)'
1525ifneq ($(KBUILD_TARGET),l4)
1526# Set default attribute for ELF and MACH-O symbols to ``hidden'' to reduce the number
1527# of relocation entries and PLT indirections in shared libraries. Don't allow for gcc version < 4.
1528 $(APPEND) '$@' 'ifneq ($$(VBOX_GCC_VERSION_CC),)'
1529 $(APPEND) '$@' ' ifneq ($$(int-ge $$(VBOX_GCC_VERSION_CC),40000),)'
1530 $(APPEND) '$@' ' VBOX_GCC_fvisibility-hidden ?= $(call VBOX_GCC_CHECK_CC,-fvisibility=hidden -DVBOX_HAVE_VISIBILITY_HIDDEN -DRT_USE_VISIBILITY_DEFAULT,)'
1531 $(APPEND) '$@' ' endif'
1532 $(APPEND) '$@' 'endif'
1533endif
1534ifneq ($(KBUILD_TARGET),l4)
1535# Set default attribute for inline functions to ``hidden'' to reduce the number
1536# of relocation entries and PLT indirections in shared libraries. Don't allow for gcc version < 4.
1537 $(APPEND) '$@' 'ifneq ($$(VBOX_GCC_VERSION_CXX),)'
1538 $(APPEND) '$@' ' ifneq ($$(int-ge $$(VBOX_GCC_VERSION_CXX),40000),)'
1539 $(APPEND) '$@' ' VBOX_GCC_fvisibility-inlines-hidden ?= $(call VBOX_GCC_CHECK_CXX,-fvisibility-inlines-hidden,)'
1540 $(APPEND) '$@' ' endif'
1541 $(APPEND) '$@' 'endif'
1542endif
1543# Find the compiler includes for IPRT no-crt.
1544# Note that `$(dir $(gcc -print-libgcc-file-name))/include does not work for a 64-bit cross build on a 32-bit build host.
1545ifeq ($(KBUILD_HOST),win)
1546# With the cygwin issues and gcc on windows returning a useless path, just skip this on windows.
1547 $(APPEND) '$@' 'VBOX_PATH_GCC_INCS ?= '
1548else
1549 $(APPEND) '$@' 'VBOX_PATH_GCC_INCS ?= $(shell LC_ALL=C $(TOOL_$(VBOX_GCC_TOOL)_CC) -print-search-dirs|$(SED_EXT) -ne 's+^install: \(.*[^/][^/]*\)/+\1+p')/include'
1550endif
1551# 32-bit (GC) compiler switch detection.
1552 $(APPEND) '$@' 'VBOX_GCC32_VERSION_CC ?= $(call VBOX_GCC_VERSION,$(TOOL_$(VBOX_GCC32_TOOL)_CC))'
1553 $(APPEND) '$@' 'VBOX_GCC32_VERSION_CXX ?= $(call VBOX_GCC_VERSION,$(TOOL_$(VBOX_GCC32_TOOL)_CXX))'
1554 $(APPEND) '$@' 'VBOX_GCC32_LIBGCC ?= $(shell $(TOOL_$(VBOX_GCC32_TOOL)_CC) -print-libgcc-file-name)'
1555 $(APPEND) '$@' 'VBOX_GCC32_Wno-variadic-macros ?= $(call VBOX_GCC32_CHECK_CXX,-Wno-variadic-macros,)'
1556
1557include $(PATH_OUT)/GCCConfig.kmk
1558
1559
1560#
1561# Code Signing.
1562#
1563ifdef VBOX_SIGNING_MODE
1564 ifeq ($(KBUILD_HOST),win)
1565 # VBOX_PATH_SELFSIGN points to the Vista WDK bin/SelfSign directory.
1566 ifndef VBOX_PATH_SELFSIGN
1567 VBOX_PATH_SELFSIGN := $(lastword $(sort $(wildcard $(PATH_DEVTOOLS)/win.x86/selfsign/*)))
1568 ifeq ($(VBOX_PATH_SELFSIGN),)
1569 VBOX_PATH_SELFSIGN := $(PATH_DEVTOOLS)/win.x86/selfsign/r1
1570 endif
1571 endif
1572 VBOX_SIGNTOOL ?= $(VBOX_PATH_SELFSIGN)/SignTool.exe
1573 VBOX_INF2CAT ?= $(VBOX_PATH_SELFSIGN)/Inf2Cat.exe
1574
1575 # There are three signing modes; 'test', 'development' and 'release'.
1576 ifeq ($(strip $(VBOX_SIGNING_MODE)),test)
1577 VBOX_CERTIFICATE_SUBJECT_NAME ?= MyTestCertificate
1578 VBOX_CERTIFICATE_SUBJECT_NAME_ARGS ?= /n "$(VBOX_CERTIFICATE_SUBJECT_NAME)"
1579 else if1of ($(VBOX_SIGNING_MODE),release development)
1580 VBOX_CERTIFICATE_SUBJECT_NAME ?= Sun Microsystems, Inc.
1581 VBOX_CERTIFICATE_SUBJECT_NAME_ARGS ?= /n "$(VBOX_CERTIFICATE_SUBJECT_NAME)"
1582 VBOX_CROSS_CERTIFICATE_FILE ?= $(VBOX_PATH_SELFSIGN)/MSCV-VSClass3.cer
1583 VBOX_CROSS_CERTIFICATE_FILE_ARGS ?= /ac "$(VBOX_CROSS_CERTIFICATE_FILE)"
1584 VBOX_TSA_URL ?= http://timestamp.verisign.com/scripts/timestamp.dll
1585 VBOX_TSA_URL_ARGS ?= /t "$(VBOX_TSA_URL)"
1586 else
1587 $(error Unknown VBOX_SIGNING_MODE: $(VBOX_SIGNING_MODE))
1588 endif
1589 VBOX_CERTIFICATE_STORE ?= my
1590 VBOX_CERTIFICATE_STORE_ARGS ?= /s "$(VBOX_CERTIFICATE_STORE)"
1591
1592 ## Commands for signing a driver image after link.
1593 VBOX_SIGN_DRIVER_CMDS ?= $(if $(eq $(tool_do),LINK_LIBRARY),,$(call VBOX_SIGN_FILE_FN,$(out)))
1594 ## Sign a file.
1595 # @param 1 The file to sign.
1596 VBOX_SIGN_FILE_FN ?= $(VBOX_SIGNTOOL) sign \
1597 $(VBOX_CROSS_CERTIFICATE_FILE_ARGS) \
1598 $(VBOX_CERTIFICATE_STORE_ARGS) \
1599 $(VBOX_CERTIFICATE_SUBJECT_NAME_ARGS) \
1600 $(VBOX_TSA_URL_ARGS) \
1601 $(1)
1602 ## Create a security catalog file.
1603 # @param 1 The directory containing the stuff to sign.
1604 # @param 2 The expected .cat name. (Inf2Cat lowercases it)
1605 # @param 3 The list of OSes, separated by ';'.
1606 VBOX_MAKE_CAT_HLP_FN ?= \
1607 $(RM) -f $(2)\
1608 $(NL)$(TAB)$(VBOX_INF2CAT) /driver:$(strip $(1)) /os:$(strip $(subst ;,$(COMMA),$(3))) /verbose \
1609 $(NL)$(TAB)$(MV) $(2) $(2) \
1610 $(NL)$(TAB)$(call VBOX_SIGN_FILE_FN,$(2))
1611 VBOX_MAKE_CAT64_FN ?= $(call VBOX_MAKE_CAT_HLP_FN,$(1),$(2),XP_X64;Server2003_X64;Vista_X64)
1612 VBOX_MAKE_CAT32_FN ?= $(call VBOX_MAKE_CAT_HLP_FN,$(1),$(2),2000;XP_X86;Server2003_X86;Vista_X86)
1613 ifeq ($(KBUILD_TARGET_ARCH),x86)
1614 VBOX_MAKE_CAT_FN ?= $(call VBOX_MAKE_CAT32_FN,$(1),$(2))
1615 else
1616 VBOX_MAKE_CAT_FN ?= $(call VBOX_MAKE_CAT64_FN,$(1),$(2))
1617 endif
1618
1619 # Go nuts, sign everything.
1620 ifeq ($(strip $(VBOX_SIGNING_MODE)),release)
1621 ## Commands for signing an executable or a dll image after link.
1622 VBOX_SIGN_IMAGE_CMDS ?= $(if $(eq $(tool_do),LINK_LIBRARY),,$(call VBOX_SIGN_FILE_FN,$(out)))
1623 endif
1624 ## Enable signing of the additions.
1625 VBOX_SIGN_ADDITIONS ?= 1
1626 else
1627 # Not windows build platform, ignore.
1628 VBOX_SIGNING_MODE :=
1629 endif
1630endif
1631
1632#
1633# Windows .inf editing.
1634#
1635ifeq ($(KBUILD_TARGET_ARCH),x86)
1636 VBOX_EDIT_INF_FN = $(call VBOX_EDIT_INF32_FN,$(1),$(2))
1637else
1638 VBOX_EDIT_INF_FN = $(call VBOX_EDIT_INF64_FN,$(1),$(2))
1639endif
1640## Edit an inf file an x86 target.
1641# @param 1 The inf file to edit.
1642# @param 2 The output file.
1643VBOX_EDIT_INF32_FN = $(SED) $(if $(VBOX_SIGNING_MODE),-e 's/^;cat *//', -e '/^;cat /d') \
1644 -e 's/^;x86 *//' \
1645 -e '/^;amd64 /d' \
1646 -e 's/^;edit-DriverVer.*/DriverVer = $(date-utc %m\/%d\/%Y),$(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)/' \
1647 --output $(2) \
1648 $(1)
1649## Edit an inf file an x86 target.
1650# @param 1 The inf file to edit.
1651# @param 2 The output file.
1652VBOX_EDIT_INF64_FN = $(SED) \
1653 $(if $(VBOX_SIGNING_MODE),-e 's/^;cat *//', -e '/^;cat /d')\
1654 -e 's/^;amd64 *//' \
1655 -e '/^;x86 /d' \
1656 -e 's/^;edit-DriverVer.*/DriverVer = $(date-utc %m\/%d\/%Y),$(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)/' \
1657 --output $(2) \
1658 $(1)
1659
1660#
1661# Default prefixes and suffixes.
1662#
1663VBOX_PREF_LIB =
1664if1of ($(KBUILD_TARGET),win os2)
1665VBOX_SUFF_LIB = .lib
1666else
1667VBOX_SUFF_LIB = .a
1668endif
1669VBOX_SUFF_DLL = $(SUFF_DLL)
1670ifeq ($(KBUILD_TARGET),os2) # GXX3OMF produces out .o at the moment.
1671VBOX_SUFF_OBJ = .o
1672else
1673VBOX_SUFF_OBJ = $(SUFF_OBJ)
1674endif
1675VBOXW32GUEST_SUFF_LIB = .lib
1676VBOXLNX32GUEST_SUFF_LIB = .a
1677
1678#
1679# SDKs for external libraries.
1680#
1681SDK_VBOX_LIBXML2 = .
1682#if1of ($(KBUILD_TARGET),win os2 solaris)
1683 SDK_VBOX_LIBXML2_INCS ?= $(PATH_ROOT)/src/libs/libxml2-2.6.30/include
1684 SDK_VBOX_LIBXML2_LIBS ?= $(PATH_LIB)/VBox-libxml2$(VBOX_SUFF_LIB)
1685 SDK_VBOX_LIBXML2_DEFS ?= LIBXML_STATIC
1686 SDK_VBOX_LIBXML2_DEFS.win += WIN32 _WINDOWS _MBCS
1687#else if1of ($(KBUILD_TARGET),linux)
1688# SDK_VBOX_LIBXML2_INCS ?=
1689# SDK_VBOX_LIBXML2_LIBS ?=
1690# SDK_VBOX_LIBXML2_CFLAGS ?= $(shell pkg-config libxml-2.0 --cflags)
1691# SDK_VBOX_LIBXML2_CXXFLAGS ?= $(SDK_VBOX_LIBXML2_CFLAGS)
1692# SDK_VBOX_LIBXML2_LDFLAGS ?= $(shell pkg-config libxml-2.0 --libs)
1693#else
1694# SDK_VBOX_LIBXML2_INCS ?=
1695# SDK_VBOX_LIBXML2_LIBS ?= xml2
1696#endif
1697
1698SDK_VBOX_LIBXSLT = .
1699#if1of ($(KBUILD_TARGET),win os2 solaris)
1700 SDK_VBOX_LIBXSLT_INCS ?= $(PATH_ROOT)/src/libs/libxslt-1.1.22
1701 SDK_VBOX_LIBXSLT_LIBS ?= $(PATH_LIB)/VBox-libxslt$(VBOX_SUFF_LIB)
1702 SDK_VBOX_LIBXSLT_DEFS ?=
1703 SDK_VBOX_LIBXSLT_DEFS.win += WIN32 _WINDOWS _MBCS _REENTRANT
1704#else if1of ($(KBUILD_TARGET),linux)
1705# SDK_VBOX_LIBXSLT_INCS ?=
1706# SDK_VBOX_LIBXSLT_LIBS ?=
1707# SDK_VBOX_LIBXSLT_CFLAGS ?= $(shell pkg-config libxslt-1.0 --cflags)
1708# SDK_VBOX_LIBXSLT_CXXFLAGS ?= $(SDK_VBOX_LIBXSLT_CFLAGS)
1709# SDK_VBOX_LIBXSLT_LDFLAGS ?= $(shell pkg-config libxslt-1.0 --libs)
1710#else
1711# SDK_VBOX_LIBXSLT_INCS ?=
1712# SDK_VBOX_LIBXSLT_LIBS ?= xslt
1713#endif
1714
1715SDK_VBOX_LIBPNG = .
1716SDK_VBOX_LIBPNG_INCS ?= $(PATH_ROOT)/src/libs/libpng-1.2.8
1717SDK_VBOX_LIBPNG_LIBS ?= $(PATH_LIB)/VBox-libpng$(VBOX_SUFF_LIB)
1718
1719SDK_VBOX_ZLIB = .
1720if1of ($(KBUILD_TARGET), win os2)
1721 SDK_VBOX_ZLIB_INCS ?= $(PATH_ROOT)/src/libs/zlib-1.2.1
1722 SDK_VBOX_ZLIB_LIBS ?= $(PATH_LIB)/VBox-zlib$(VBOX_SUFF_LIB)
1723else
1724 SDK_VBOX_ZLIB_INCS ?=
1725 SDK_VBOX_ZLIB_LIBS ?= z
1726endif
1727
1728SDK_VBOX_OPENSSL = .
1729SDK_VBOX_OPENSSL_DEFAULT_INCS := $(PATH_OUT)/obj/crypto-headers/include
1730SDK_VBOX_OPENSSL_INCS ?= $(SDK_VBOX_OPENSSL_DEFAULT_INCS)
1731SDK_VBOX_OPENSSL_LIBS ?= $(PATH_LIB)/VBox-libcrypto$(VBOX_SUFF_LIB)
1732# Build entire openssl library, not just the minimal subset.
1733if1of ($(KBUILD_TARGET), linux solaris)
1734 VBOX_OPENSSL_ALL=1
1735endif
1736
1737SDK_VBOX_FFMPEG = .
1738if1of ($(KBUILD_TARGET), win os2 darwin linux)
1739 SDK_VBOX_FFMPEG_INCS ?= \
1740 $(PATH_ROOT)/src/libs/ffmpeg-20060710/libavutil \
1741 $(PATH_ROOT)/src/libs/ffmpeg-20060710/libavcodec \
1742 $(PATH_ROOT)/src/libs/ffmpeg-20060710/libavformat
1743 ifeq ($(KBUILD_TARGET),win)
1744 ## @todo Michael! Where is $(PATH_LIB)/VBoxFFmpegImp$(VBOX_SUFF_LIB) supposed to come from?
1745 #SDK_VBOX_FFMPEG_LIBS ?= $(PATH_LIB)/VBoxFFmpeg.a
1746 SDK_VBOX_FFMPEG_LIBS ?= $(PATH_LIB)/VBoxFFmpegImp.lib
1747 else
1748 SDK_VBOX_FFMPEG_LIBS ?= $(PATH_BIN)/VBoxFFmpeg$(SUFF_DLL)
1749 endif
1750else
1751 SDK_VBOX_FFMPEG_INCS ?= /usr/include/ffmpeg /usr/include/libpng
1752 SDK_VBOX_FFMPEG_LIBS ?= avutil avcodec avformat
1753endif
1754
1755#
1756# Special SDK for the problematic NTDLL.LIB.
1757#
1758SDK_VBOX_NTDLL = Requires W2K3DDK
1759SDK_VBOX_NTDLL_LIBS ?= $(PATH_SDK_W2K3DDK_LIB)/ntdll.lib
1760
1761
1762#
1763# Qt build tools and libraries.
1764# For *NIX we require it to be present on the system.
1765#
1766## @todo convert this into SDK and integrate the Qt stuff into kBuild.
1767## @todo remove this section when win and darwin cases are moved to kBuild/units/qt3.kmk.
1768## vbox/Makefile.kmk that uses VBX_DLL_QT and others needs to be corrected too
1769ifeq ($(KBUILD_TARGET),win)
1770 VBOX_PATH_QT ?= $(lastword $(sort $(wildcard $(PATH_DEVTOOLS_TRG)/qt/v3.*)))
1771 VBOX_DLL_QT ?= $(firstword $(wildcard $(VBOX_PATH_QT)/bin/VBoxQt3*.dll) \
1772 $(wildcard $(VBOX_PATH_QT)/bin/qtmt3*.dll) \
1773 $(wildcard $(VBOX_PATH_QT)/bin/qt-mt3*.dll) \
1774 $(wildcard $(VBOX_PATH_QT)/lib/qt-mt3*.dll))
1775 ifneq ($(wildcard $(VBOX_PATH_QT)/bin/accessible/VBoxQtWidgets100.dll),)
1776 VBOX_QT_BINARIES += \
1777 $(VBOX_PATH_QT)/bin/accessible/VBoxQtWidgets100.dll=>accessible/VBoxQtWidgets100.dll
1778 endif
1779 LIB_QT ?= $(firstword $(wildcard $(VBOX_PATH_QT)/lib/VBoxQt3*.lib) \
1780 $(wildcard $(VBOX_PATH_QT)/lib/qt-mt3*.lib) \
1781 $(wildcard $(VBOX_PATH_QT)/lib/dynamic/qt-mt3*.lib))
1782 LIB_QT_PRL ?= $(firstword $(wildcard $(VBOX_PATH_QT)/lib/VBoxQt.prl) \
1783 $(wildcard $(VBOX_PATH_QT)/lib/qt-mt.prl) \
1784 $(wildcard $(VBOX_PATH_QT)/lib/dynamic/qt-mt.prl))
1785 LIB_QTMAIN ?= $(firstword $(wildcard $(VBOX_PATH_QT)/lib/qtmain.lib) \
1786 $(wildcard $(VBOX_PATH_QT)/lib/dynamic/qtmain.lib))
1787 QTDIR ?= $(lastword $(sort $(wildcard $(PATH_DEVTOOLS_BLD)/qt/v3.*)))
1788else ifeq ($(KBUILD_TARGET),os2)
1789 QTDIR ?= $(PATH_DEVTOOLS_TRG)/qt/v3.3.1
1790 VBOX_PATH_QT ?= $(QTDIR)
1791 VBOX_DLL_QT ?= $(lastword $(sort $(wildcard $(VBOX_PATH_QT)/bin/*qt*.dll)))
1792 LIB_QT ?= $(lastword $(sort $(wildcard $(VBOX_PATH_QT)/lib/*qt*.lib)))
1793 LIB_QT_PRL ?= $(lastword $(sort $(wildcard $(VBOX_PATH_QT)/lib/*qt*.prl)))
1794 QTDIR := $(VBOX_PATH_QT)
1795else ifeq ($(KBUILD_TARGET),darwin)
1796 ifndef VBOX_PATH_QT
1797 VBOX_PATH_QT := $(lastword $(sort $(wildcard $(PATH_DEVTOOLS_TRG)/qt/v3.*)))
1798 VBOX_PATH_QT ?= $(PATH_DEVTOOLS_TRG)/qt/v3.3.8-r1
1799 endif
1800 VBOX_MUST_INSTALL_LIB_QT ?= 1
1801 LIB_QT ?= $(VBOX_PATH_QT)/lib/libqt-mt.3.dylib
1802 LIB_QTMAIN ?= $(NO_SUCH_VARIABLE)
1803 ifndef QTDIR
1804 QTDIR := $(sort $(wildcard $(PATH_DEVTOOLS_BLD)/v*))
1805 QTDIR := $(call lastword,$(QTDIR))
1806 endif
1807else
1808 ifndef QTDIR
1809 ifndef VBOX_PATH_QT
1810 # If QTDIR and VBOX_WITH_QTGUI aren't defined, we'll first
1811 # look in the tools tree and then on the system. If in the
1812 # tools, we'll have to install it.
1813 # Results are exported to avoid having to do this for every make file.
1814 VBOX_PATH_QT := $(lastword $(sort $(wildcard $(PATH_DEVTOOLS_TRG)/qt/v3.*)))
1815 ifneq ($(VBOX_PATH_QT),)
1816 export VBOX_PATH_QT
1817 export VBOX_MUST_INSTALL_LIB_QT := 1
1818 export LIB_QT := $(VBOX_PATH_QT)/lib/libqt-mt.so.3
1819 export LD_LIBRARY_PATH := $(VBOX_PATH_QT)/lib:$(LD_LIBRARY_PATH)
1820 else
1821 QTDIR := $(wildcard /usr/share/qt3)
1822 ifeq ($(QTDIR),)
1823 QTDIR := $(patsubst %/bin/moc,%,$(firstword $(wildcard /usr/bin/moc /usr/local/bin/moc /usr/X11R6/bin/moc)))
1824 endif
1825 ifneq ($(QTDIR),)
1826 export QTDIR
1827 endif
1828 endif
1829 else
1830 QTDIR := $(VBOX_PATH_QT)
1831 export QTDIR
1832 endif
1833 endif
1834endif
1835ifndef VBOX_PATH_QT
1836 VBOX_PATH_QT := $(QTDIR)
1837 LIB_QT ?= qt-mt
1838endif
1839ifeq ($(KBUILD_HOST),$(KBUILD_TARGET))
1840 VBOX_PATH_QT_HOST ?= $(VBOX_PATH_QT)
1841else
1842 VBOX_PATH_QT_HOST ?= $(QTDIR)
1843endif
1844VBOX_UIC ?= $(VBOX_PATH_QT_HOST)/bin/uic$(HOSTSUFF_EXE)
1845VBOX_MOC ?= $(VBOX_PATH_QT_HOST)/bin/moc$(HOSTSUFF_EXE)
1846VBOX_LUPDATE ?= $(VBOX_PATH_QT_HOST)/bin/lupdate$(HOSTSUFF_EXE)
1847VBOX_LRELEASE ?= $(VBOX_PATH_QT_HOST)/bin/lrelease$(HOSTSUFF_EXE)
1848
1849ifeq ($(KBUILD_TARGET),os2)
1850 # search DLLs in the EXE directory first (unless VBOX_DLL_QT is set)
1851 VBOX_DLL_QT_PATH := $(dir $(VBOX_DLL_QT))
1852 VBOX_DLL_QT_PATH := $(if $(VBOX_DLL_QT_PATH),$(VBOX_DLL_QT_PATH);,)
1853 VBOX_UIC := BEGINLIBPATH="$(VBOX_DLL_QT_PATH)$(dir $(VBOX_UIC));$$BEGINLIBPATH" $(VBOX_UIC)
1854 VBOX_MOC := BEGINLIBPATH="$(VBOX_DLL_QT_PATH)$(dir $(VBOX_MOC));$$BEGINLIBPATH" $(VBOX_MOC)
1855 VBOX_LUPDATE := BEGINLIBPATH="$(VBOX_DLL_QT_PATH)$(dir $(VBOX_LUPDATE));$$BEGINLIBPATH" $(VBOX_LUPDATE)
1856 VBOX_LRELEASE := BEGINLIBPATH="$(VBOX_DLL_QT_PATH)$(dir $(VBOX_LRELEASE));$$BEGINLIBPATH" $(VBOX_LRELEASE)
1857endif
1858
1859#
1860# The linux kernel headers(/sources).
1861#
1862if1of ($(KBUILD_TARGET), linux)
1863 ifeq ($(origin VBOX_LINUX_SRC),undefined)
1864 ifneq ($(wildcard /lib/modules/$(shell uname -r)/build/include/linux/autoconf.h),)
1865 export VBOX_LINUX_SRC := /lib/modules/$(shell uname -r)/build
1866 else
1867 export VBOX_LINUX_SRC := /usr/src/linux
1868 endif
1869 endif
1870 ifneq ($(VBOX_LINUX_SRC),)
1871 ifeq ($(origin VBOX_LINUX_INCS),undefined)
1872 export VBOX_LINUX_INCS := $(VBOX_LINUX_SRC)/include
1873 # XXX hack alert! support splitted Linux kernels (make O=<build directory>)
1874 kernelsrc := $(shell $(SED_EXT) -ne 's+^KERNELSRC.*= *\(.*\)+\1+p' $(VBOX_LINUX_SRC)/Makefile)
1875 ifneq ($(kernelsrc),)
1876 kernelpath := $(realpath $(VBOX_LINUX_SRC)/$(kernelsrc))
1877 else
1878 # Linux >= 2.6.25
1879 kernelpath := $(shell $(SED_EXT) -ne 's+^MAKEARGS *:= *-C *\(.*\)+\1+p' $(VBOX_LINUX_SRC)/Makefile)
1880 endif
1881 ifneq ($(kernelpath),)
1882 VBOX_LINUX_INCS += $(VBOX_LINUX_SRC)/include2 $(kernelpath)/include
1883 else
1884 kernelpath := $(VBOX_LINUX_SRC)
1885 endif
1886 VBOX_LINUX_INCS += $(kernelpath)/include/asm-i386/mach-default \
1887 $(kernelpath)/include/asm-x86/mach-default \
1888 $(kernelpath)/arch/x86/include \
1889 $(kernelpath)/arch/x86/include/asm/mach-default
1890 endif
1891 endif
1892endif
1893
1894#
1895# Determine Solaris version.
1896#
1897ifeq ($(KBUILD_TARGET),solaris)
1898 ifeq ($(origin VBOX_SOLARIS_VERSION),undefined)
1899 $(eval export VBOX_SOLARIS_VERSION := $(shell uname -r | $(SED_EXT) 's|\([0-9]*\)\.\([0-9]*\)|$$(int-add $$(int-mul 100, \1), \2)|' ))
1900 endif
1901 ifeq ($(VBOX_SOLARIS_VERSION),510)
1902 DEFS.solaris += RT_OS_SOLARIS_10
1903 # Solaris 10 does not include crossbow.
1904 VBOX_WITH_CROSSBOW =
1905 VBOX_SOLARIS_10 = 1
1906 endif
1907endif
1908
1909
1910#
1911# Template for building GC things.
1912#
1913TEMPLATE_VBOXGC = VBox GC
1914TEMPLATE_VBOXGC_ASTOOL = $(VBOX_ASTOOL)
1915TEMPLATE_VBOXGC_ASFLAGS = $(VBOX_ASFLAGS32)
1916TEMPLATE_VBOXGC_DEFS = IN_RC IPRT_NO_CRT RT_WITH_NOCRT_ALIASES $(ARCH_BITS_DEFS)
1917TEMPLATE_VBOXGC_INCS = $(PATH_ROOT)/include/iprt/nocrt
1918TEMPLATE_VBOXGC_SYSSUFF = .gc
1919TEMPLATE_VBOXGC_BLD_TRG_ARCH = x86
1920
1921ifeq ($(VBOX_LDR_FMT32),pe)
1922ifdef VBOX_USE_VCC80
1923 TEMPLATE_VBOXGC_TOOL = VCC80X86
1924 TEMPLATE_VBOXGC_CXXFLAGS = -Zi -Zl -GR- -GS- -EHs-c- -GF- -W3 -wd4244 -wd4996 -Zc:wchar_t- -Gs8192 $(VBOX_VCC_GC_OPT) $(VBOX_VCC_GC_FP)
1925else
1926 TEMPLATE_VBOXGC_TOOL = VCC70
1927 TEMPLATE_VBOXGC_CXXFLAGS = -Zi -Zl -GR- -GX- -GF- -W3 -wd4244 $(VBOX_VCC_GC_OPT) $(VBOX_VCC_GC_FP)
1928endif
1929TEMPLATE_VBOXGC_CFLAGS = $(TEMPLATE_VBOXGC_CXXFLAGS)
1930TEMPLATE_VBOXGC_LDFLAGS = -Driver -Subsystem:NATIVE -Incremental:NO -Align:64 -MapInfo:Lines -MapInfo:Exports -NoD
1931include $(KBUILD_PATH)/sdks/W2K3DDKX86.kmk
1932TEMPLATE_VBOXGC_LIBS = \
1933 $(PATH_SDK_W2K3DDKX86_LIB)/int64.lib
1934endif # pe
1935
1936ifeq ($(VBOX_LDR_FMT32),elf)
1937TEMPLATE_VBOXGC_TOOL = $(VBOX_GCC32_TOOL)
1938TEMPLATE_VBOXGC_CXXFLAGS = -nostdinc -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC32_Wno-variadic-macros) -fno-exceptions -fno-rtti $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_fvisibility-inlines-hidden)
1939TEMPLATE_VBOXGC_CFLAGS = -nostdinc -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC32_Wno-variadic-macros) -Wmissing-prototypes -Wstrict-prototypes $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_fvisibility-hidden)
1940ifeq ($(KBUILD_TARGET),solaris)
1941 TEMPLATE_VBOXGC_LDFLAGS = -r
1942else
1943 TEMPLATE_VBOXGC_LDFLAGS = -nostdlib -Bsymbolic
1944 # "temporarily", must fix the loader.
1945 TEMPLATE_VBOXGC_LDFLAGS += $(if $(VBOX_DO_STRIP_MODULES),-S,)
1946 TEMPLATE_VBOXGC_LDFLAGS.release = $(if $(VBOX_DO_STRIP_MODULES),-S,)
1947endif
1948ifn1of ($(KBUILD_TARGET), solaris freebsd)
1949 TEMPLATE_VBOXGC_LIBS = \
1950 $(VBOX_GCC32_LIBGCC) # instricts
1951endif
1952endif
1953
1954ifeq ($(VBOX_LDR_FMT32),macho)
1955TEMPLATE_VBOXGC_TOOL = GXX4MACHO
1956TEMPLATE_VBOXGC_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS)
1957TEMPLATE_VBOXGC_CXXFLAGS = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS) -nostdinc -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC32_Wno-variadic-macros) -fno-common -msoft-float -static -fno-exceptions -fno-rtti $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing
1958TEMPLATE_VBOXGC_CFLAGS = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -nostdinc -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC32_Wno-variadic-macros) -fno-common -msoft-float -static -Wmissing-prototypes -Wstrict-prototypes $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing
1959TEMPLATE_VBOXGC_LDFLAGS = $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -nostdlib
1960#TEMPLATE_VBOXGC_LDFLAGS.release = -Wl,-S ???
1961endif
1962
1963ifeq ($(VBOX_LDR_FMT32),lx)
1964TEMPLATE_VBOXGC_TOOL = GXX3OMF
1965TEMPLATE_VBOXGC_CXXFLAGS = -nostdinc -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC32_Wno-variadic-macros) -fno-exceptions -fno-rtti $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing
1966TEMPLATE_VBOXGC_CFLAGS = -nostdinc -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC32_Wno-variadic-macros) -Wmissing-prototypes -Wstrict-prototypes $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing
1967TEMPLATE_VBOXGC_LDFLAGS = -Zdll -nostdlib
1968TEMPLATE_VBOXGC_LIBS = \
1969 $(VBOX_GCC32_LIBGCC) \
1970 $(VBOX_OBJ_SYS0) \
1971 end
1972endif
1973
1974
1975#
1976# Template for building a GC ring-3 testcase (tstVMStructGC, tstDevStructGC).
1977#
1978TEMPLATE_VBOXGCEXE = VBox GC as ring-3 testcase
1979TEMPLATE_VBOXGCEXE_EXTENDS = VBOXGC
1980TEMPLATE_VBOXGCEXE_DEFS = $(filter-out IPRT_NO_CRT RT_WITH_NOCRT_ALIASES,$(TEMPLATE_VBOXGC_DEFS))
1981TEMPLATE_VBOXGCEXE_INCS = $(NO_SUCH_VARIABLE)
1982
1983ifeq ($(VBOX_LDR_FMT32),pe)
1984 TEMPLATE_VBOXGCEXE_LDFLAGS = -Incremental:NO -MapInfo:Exports -NoD -Debug
1985 TEMPLATE_VBOXGCEXE_SDKS = WIN32SDK
1986 ifdef VBOX_USE_VCC80
1987 TEMPLATE_VBOXGCEXE_LIBS = \
1988 $(PATH_TOOL_VCC80X86_LIB)/libcmt.lib \
1989 $(PATH_TOOL_VCC80X86_LIB)/oldnames.lib
1990 else
1991 TEMPLATE_VBOXGCEXE_LIBS = \
1992 $(PATH_TOOL_VCC70_LIB)/libcmt.lib \
1993 $(PATH_TOOL_VCC70_LIB)/oldnames.lib
1994 endif
1995endif
1996
1997ifeq ($(VBOX_LDR_FMT32),elf)
1998 TEMPLATE_VBOXGCEXE_CFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBOXGC_CFLAGS))
1999 TEMPLATE_VBOXGCEXE_CXXFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBOXGC_CXXFLAGS))
2000 TEMPLATE_VBOXGCEXE_LDFLAGS = -g
2001 TEMPLATE_VBOXGCEXE_LDFLAGS.release = -g
2002endif
2003
2004ifeq ($(VBOX_LDR_FMT32),macho)
2005 TEMPLATE_VBOXGCEXE_CFLAGS = $(filter-out -static -nostdinc,$(TEMPLATE_VBOXGC_CFLAGS))
2006 TEMPLATE_VBOXGCEXE_CXXFLAGS = $(filter-out -static -nostdinc,$(TEMPLATE_VBOXGC_CXXFLAGS))
2007 TEMPLATE_VBOXGCEXE_LDFLAGS = -g
2008endif
2009
2010ifeq ($(VBOX_LDR_FMT32),lx)
2011 TEMPLATE_VBOXGCEXE_CFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBOXGC_CFLAGS))
2012 TEMPLATE_VBOXGCEXE_CXXFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBOXGC_CXXFLAGS))
2013 TEMPLATE_VBOXGCEXE_LDFLAGS = -g
2014 TEMPLATE_VBOXGCEXE_LIBS = $(NO_SUCH_VARIABLE)
2015endif
2016
2017
2018#
2019# Template for building R0 things.
2020#
2021TEMPLATE_VBOXR0 = VBox Ring 0
2022TEMPLATE_VBOXR0_ASTOOL = $(VBOX_ASTOOL)
2023TEMPLATE_VBOXR0_ASFLAGS = $(VBOX_ASFLAGS)
2024TEMPLATE_VBOXR0_DEFS = IN_RING0 IN_RING0_AGNOSTIC IPRT_NO_CRT RT_WITH_NOCRT_ALIASES $(ARCH_BITS_DEFS)
2025TEMPLATE_VBOXR0_INCS = $(PATH_ROOT)/include/iprt/nocrt
2026TEMPLATE_VBOXR0_SYSSUFF = .r0
2027
2028ifeq ($(VBOX_LDR_FMT),pe)
2029TEMPLATE_VBOXR0_TOOL = $(VBOX_VCC_TOOL)
2030ifdef VBOX_USE_VCC80
2031 TEMPLATE_VBOXR0_CXXFLAGS = -Zi -Zl -GR- -GS- -EHs-c- -GF- -W3 -wd4244 -wd4996 -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
2032else
2033 TEMPLATE_VBOXR0_CXXFLAGS = -Zi -Zl -GR- -GX- -GF- -W3 -wd4244 $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
2034endif
2035TEMPLATE_VBOXR0_CFLAGS = $(TEMPLATE_VBOXR0_CXXFLAGS)
2036TEMPLATE_VBOXR0_LDFLAGS = -Driver -Subsystem:NATIVE -Incremental:NO -Align:64 -MapInfo:Exports -NoD
2037TEMPLATE_VBOXR0_LIBS.x86 = \
2038 $(PATH_SDK_W2K3DDKX86_LIB)/int64.lib
2039endif # pe
2040
2041ifeq ($(VBOX_LDR_FMT),elf)
2042TEMPLATE_VBOXR0_TOOL = $(VBOX_GCC_TOOL)
2043TEMPLATE_VBOXR0_CFLAGS = -nostdinc -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC_Wno-variadic-macros) -Wmissing-prototypes -Wstrict-prototypes $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_fvisibility-hidden)
2044TEMPLATE_VBOXR0_CXXFLAGS = -nostdinc -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC_Wno-variadic-macros) -fno-rtti -fno-exceptions $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_fvisibility-hidden)
2045TEMPLATE_VBOXR0_CFLAGS.amd64 = -m64 -mno-red-zone -mcmodel=kernel -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-asynchronous-unwind-tables -ffreestanding
2046TEMPLATE_VBOXR0_CXXFLAGS.amd64 = -m64 -mno-red-zone -mcmodel=kernel -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-asynchronous-unwind-tables
2047ifeq ($(KBUILD_TARGET),solaris)
2048 TEMPLATE_VBOXR0_LDFLAGS = -r
2049else
2050 TEMPLATE_VBOXR0_LDFLAGS = -nostdlib -Bsymbolic
2051 # temporarily, must fix the loader.
2052 TEMPLATE_VBOXR0_LDFLAGS += $(if $(VBOX_DO_STRIP_MODULES),-S,)
2053 TEMPLATE_VBOXR0_LDFLAGS.release = $(if $(VBOX_DO_STRIP_MODULES),-S,)
2054endif
2055ifn1of ($(KBUILD_TARGET),solaris freebsd)
2056 TEMPLATE_VBOXR0_LIBS = \
2057 $(VBOX_GCC_LIBGCC) # instricts
2058endif
2059endif
2060
2061ifeq ($(VBOX_LDR_FMT),macho)
2062TEMPLATE_VBOXR0_TOOL = GXX4MACHO
2063TEMPLATE_VBOXR0_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS)
2064TEMPLATE_VBOXR0_CXXFLAGS = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS) -nostdinc -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC_Wno-variadic-macros) -fno-common -msoft-float -static -fno-rtti -fno-exceptions $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing
2065TEMPLATE_VBOXR0_CFLAGS = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -nostdinc -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC_Wno-variadic-macros) -fno-common -msoft-float -static -Wmissing-prototypes -Wstrict-prototypes $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing
2066TEMPLATE_VBOXR0_LDFLAGS = $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -nostdlib
2067#TEMPLATE_VBOXR0_LDFLAGS.release = -Wl,-S ???
2068endif
2069
2070ifeq ($(VBOX_LDR_FMT),lx)
2071TEMPLATE_VBOXR0_TOOL = GXX3OMF
2072TEMPLATE_VBOXR0_CFLAGS = -nostdinc -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC_Wno-variadic-macros) -Wmissing-prototypes -Wstrict-prototypes $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing
2073TEMPLATE_VBOXR0_CXXFLAGS = -nostdinc -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC_Wno-variadic-macros) -fno-rtti -fno-exceptions $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing
2074TEMPLATE_VBOXR0_LDFLAGS = -nostdlib -Zdll
2075TEMPLATE_VBOXR0_LIBS = \
2076 $(VBOX_GCC_LIBGCC) \
2077 $(VBOX_OBJ_SYS0) \
2078 end
2079endif
2080
2081
2082#
2083# Template for building SUPDRV R0 things.
2084#
2085TEMPLATE_VBOXR0DRV = VBox SUPDRV Ring 0
2086TEMPLATE_VBOXR0DRV_ASTOOL = $(VBOX_ASTOOL)
2087TEMPLATE_VBOXR0DRV_ASFLAGS = $(VBOX_ASFLAGS)
2088TEMPLATE_VBOXR0DRV_DEFS = IN_RING0 IN_RT_R0 $(ARCH_BITS_DEFS)
2089
2090ifeq ($(KBUILD_TARGET),win)
2091 TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_VCC_TOOL)
2092 TEMPLATE_VBOXR0DRV_RCDEFS = \
2093 VBOX_VERSION_MAJOR=\"$(VBOX_VERSION_MAJOR)\" \
2094 VBOX_VERSION_MINOR=\"$(VBOX_VERSION_MINOR)\" \
2095 VBOX_VERSION_BUILD=\"$(VBOX_VERSION_BUILD)\" \
2096 VBOX_SVN_REV=\"$(VBOX_SVN_REV)\" \
2097 VBOX_VERSION_MAJOR_NR=$(VBOX_VERSION_MAJOR) \
2098 VBOX_VERSION_MINOR_NR=$(VBOX_VERSION_MINOR) \
2099 VBOX_VERSION_BUILD_NR=$(VBOX_VERSION_BUILD) \
2100 VBOX_SVN_REV_NR=$(VBOX_SVN_REV)
2101 TEMPLATE_VBOXR0DRV_DEFS.x86 = _X86_
2102 TEMPLATE_VBOXR0DRV_DEFS.amd64 = _AMD64_
2103 ifdef VBOX_USE_VCC80
2104 TEMPLATE_VBOXR0DRV_CXXFLAGS = -Zi -Zl -GR- -GS- -EHs-c- -GF- -Gz -W3 -wd4996 -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
2105 else
2106 TEMPLATE_VBOXR0DRV_CXXFLAGS = -Zi -Zl -GR- -GX- -GF- -Gz -W3 $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
2107 endif
2108 TEMPLATE_VBOXR0DRV_CFLAGS = $(TEMPLATE_VBOXR0DRV_CXXFLAGS)
2109 TEMPLATE_VBOXR0DRV_LDFLAGS = -Driver -Subsystem:NATIVE -Incremental:NO -Align:64 -MapInfo:Exports -NoD -Debug
2110 TEMPLATE_VBOXR0DRV_POST_CMDS = $(VBOX_SIGN_DRIVER_CMDS)
2111endif
2112
2113ifeq ($(KBUILD_TARGET),linux)
2114TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_GCC_TOOL)
2115TEMPLATE_VBOXR0DRV_DEFS = __KERNEL__ MODULE IN_RING0 IN_RT_R0
2116TEMPLATE_VBOXR0DRV_INCS = $(VBOX_LINUX_INCS)
2117TEMPLATE_VBOXR0DRV_CFLAGS = -nostdinc -iwithprefix include \
2118 $(VBOX_GCC_WARN) -Wstrict-prototypes $(VBOX_GCC_Wno-pointer-sign) -Wno-sign-compare \
2119 $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing -fno-common
2120TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -mpreferred-stack-boundary=2 -msoft-float
2121TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 -mno-red-zone -mcmodel=kernel -mno-sse -mno-mmx -mno-sse2 -mno-3dnow \
2122 -fno-reorder-blocks -ffreestanding -fno-asynchronous-unwind-tables -funit-at-a-time \
2123 -Wno-sign-compare -Wdeclaration-after-statement
2124TEMPLATE_VBOXR0DRV_CXXFLAGS = $(filter-out -Wstrict-prototypes -Wno-pointer-sign -ffreestanding -Wdeclaration-after-statement,$(TEMPLATE_VBOXR0DRV_CFLAGS) $(TEMPLATE_VBOXR0DRV_CFLAGS.$(KBUILD_TARGET_ARCH))) -fno-exceptions -fno-rtti
2125 ifndef VBOX_LINUX_VERSION_2_4
2126# 2.6
2127TEMPLATE_VBOXR0DRV_SYSSUFF = .ko
2128TEMPLATE_VBOXR0DRV_LDFLAGS.x86 = -m elf_i386 -r
2129TEMPLATE_VBOXR0DRV_LDFLAGS.amd64 = -m elf_x86_64 -r
2130 else
2131# 2.4
2132TEMPLATE_VBOXR0DRV_SYSSUFF = .o
2133TEMPLATE_VBOXR0DRV_LDFLAGS = -r -s
2134 endif
2135endif
2136
2137ifeq ($(KBUILD_TARGET),os2)
2138TEMPLATE_VBOXR0DRV_TOOL = GXX3OMF
2139TEMPLATE_VBOXR0DRV_CXXFLAGS = -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing -fno-rtti -fno-exceptions
2140TEMPLATE_VBOXR0DRV_CFLAGS = -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC_Wno-variadic-macros) -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing
2141TEMPLATE_VBOXR0DRV_LIBS = $(VBOX_GCC_LIBGCC)
2142# wlink thinks physdevice doesn't need fixups and should have a stack - stupid!
2143TEMPLATE_VBOXR0DRV_LDFLAGS = -Zlinker Option -Zlinker internalrelocs, -Zlinker togglerelocs
2144endif
2145
2146ifeq ($(KBUILD_TARGET),darwin)
2147TEMPLATE_VBOXR0DRV_TOOL = GXX4MACHO
2148TEMPLATE_VBOXR0DRV_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS) KERNEL KERNEL_PRIVATE DRIVER_PRIVATE APPLE NeXT RT_USE_VISIBILITY_HIDDEN
2149# I didn't really know why we have to state explicitly the position of the
2150# sdk headers. Maybe it has something to do with the fact that the kernel.framework
2151# isn't a real framework according to http://developer.apple.com/qa/qa2001/qa1096.html.
2152TEMPLATE_VBOXR0DRV_INCS += $(VBOX_PATH_MACOSX_SDK)/System/Library/Frameworks/Kernel.framework/Headers
2153TEMPLATE_VBOXR0DRV_CXXFLAGS = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS) \
2154 -g -pipe $(VBOX_GCC_WARN) -Wno-long-long -fno-common -nostdinc -fno-builtin -finline \
2155 -fno-keep-inline-functions -force_cpusubtype_ALL -fno-exceptions -msoft-float -static \
2156 -fapple-kext -fno-rtti -fcheck-new
2157TEMPLATE_VBOXR0DRV_CXXFLAGS.release = $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing -fasm-blocks
2158TEMPLATE_VBOXR0DRV_CXXFLAGS.profile = $(TEMPLATE_VBOXR0DRV_CXXFLAGS.release)
2159TEMPLATE_VBOXR0DRV_CXXFLAGS.kprofile = $(TEMPLATE_VBOXR0DRV_CXXFLAGS.release)
2160TEMPLATE_VBOXR0DRV_CFLAGS = $(VBOX_DARWIN_DEF_SDK_CFLAGS) \
2161 -g -pipe $(VBOX_GCC_WARN) -Wno-long-long -fno-common -nostdinc -fno-builtin -finline \
2162 -fno-keep-inline-functions -force_cpusubtype_ALL -fno-exceptions -msoft-float -static \
2163 -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations
2164TEMPLATE_VBOXR0DRV_CFLAGS.release = $(TEMPLATE_VBOXR0DRV_CXXFLAGS.release)
2165TEMPLATE_VBOXR0DRV_CFLAGS.profile = $(TEMPLATE_VBOXR0DRV_CXXFLAGS.profile)
2166TEMPLATE_VBOXR0DRV_CFLAGS.kprofile = $(TEMPLATE_VBOXR0DRV_CXXFLAGS.kprofile)
2167TEMPLATE_VBOXR0DRV_LDFLAGS = $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -static -nostdlib -r -Wl,-Y,1455 -keep_private_extern
2168TEMPLATE_VBOXR0DRV_LIBS = kmodc++ kmod cc_kext cpp_kext $(VBOX_GCC_LIBGCC)
2169endif
2170
2171ifeq ($(KBUILD_TARGET),solaris)
2172## The Solaris /usr/platform/i86pc/include and /usr/include directories.
2173VBOX_SOLARIS_SYS_INCS ?= /usr/platform/i86pc/include /usr/include
2174
2175TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_GCC_TOOL)
2176TEMPLATE_VBOXR0DRV_DEFS = _KERNEL _STRICT_STDC IN_RING0 IN_RT_R0
2177TEMPLATE_VBOXR0DRV_INCS = $(VBOX_SOLARIS_SYS_INCS)
2178TEMPLATE_VBOXR0DRV_LDFLAGS = -r -dy
2179ifdef VBOX_WITH_SOLARIS_VBI
2180 TEMPLATE_VBOXR0DRV_LDFLAGS += -N misc/vbi
2181endif
2182TEMPLATE_VBOXR0DRV_LDFLAGS.amd64 = -64
2183# Exclude -Wall because of solaris headers' pragma ident warnings that gcc refuses to supress.
2184TEMPLATE_VBOXR0DRV_CFLAGS = -Wpointer-arith -Winline $(VBOX_GCC_Wno-pointer-sign) \
2185 -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs \
2186 -O2 -ffreestanding -nodefaultlibs -fno-strict-aliasing -fno-common -std=c99
2187TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow
2188TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow $(if $(VBOX_SOLARIS_10),,-msave-args) -mno-red-zone -mcmodel=kernel \
2189 -fno-reorder-blocks -fno-asynchronous-unwind-tables -funit-at-a-time
2190TEMPLATE_VBOXR0DRV_CXXFLAGS = -Wpointer-arith -Winline $(VBOX_GCC_Wno-pointer-sign) \
2191 -O2 -nodefaultlibs -fno-strict-aliasing -fno-common -fno-exceptions -fno-rtti
2192TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = $(TEMPLATE_VBOXR0DRV_CFLAGS.x86)
2193TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64 = $(TEMPLATE_VBOXR0DRV_CFLAGS.amd64)
2194endif # Solaris
2195
2196ifeq ($(KBUILD_TARGET),freebsd)
2197# x86 FreeBSD:
2198# cc -O2 -fno-strict-aliasing -pipe -Werror -D_KERNEL -DKLD_MODULE \
2199# -nostdinc -I- -I. -I@ -I@/contrib/altq -I@/../include -I/usr/include \
2200# -finline-limit=8000 -fno-common -mno-align-long-strings -mpreferred-stack-boundary=2 \
2201# -mno-mmx -mno-3dnow -mno-sse -mno-sse2 -ffreestanding -Wall -Wredundant-decls -Wnested-externs \
2202# -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -fformat-extensions \
2203# -std=c99 -c ../my.c
2204# ld -d -warn-common -r -d -o my.kld my.o
2205# :> export_syms
2206# awk -f /usr/src/sys/modules/my/../../conf/kmod_syms.awk my.kld export_syms | xargs -J% objcopy % my.kld
2207# ld -Bsharable -d warn-commnon -o my.ko my.kld
2208#
2209# Note: @ -> /usr/src/sys and machine -> /usr/src/sys/i386/include
2210
2211## The location of the FreeBSD kernel source.
2212VBOX_FREEBSD_SRC ?= /usr/src/sys
2213## The FreeBSD /usr/include.
2214VBOX_FREEBSD_SYS_INCS ?= /usr/include
2215
2216TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_GCC_TOOL)
2217TEMPLATE_VBOXR0DRV_LDTOOL = FREEBSDKMODLD
2218TEMPLATE_VBOXR0DRV_DEFS = _KERNEL KLD_MODULE IN_RING0 IN_RT_R0
2219TEMPLATE_VBOXR0DRV_INCS = \
2220 $(VBOX_FREEBSD_SRC) \
2221 $(VBOX_FREEBSD_SRC)/contrib/altq \
2222 $(VBOX_FREEBSD_SRC)/../include \
2223 $(VBOX_FREEBSD_SYS_INCS)
2224# omitting: -Wcast-qual, -Wredundant-decls
2225TEMPLATE_VBOXR0DRV_CFLAGS = \
2226 $(VBOX_GCC_WARN) -Wpointer-arith -Winline $(VBOX_GCC_Wno-pointer-sign) \
2227 -Wstrict-prototypes -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs \
2228 -O2 -fformat-extensions -ffreestanding -fno-strict-aliasing -fno-common -finline-limit=8000 \
2229 $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_OPT) $(VBOX_GCC_FP) \
2230 -nostdinc -std=c99
2231TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -mno-align-long-strings -mpreferred-stack-boundary=2 -mno-mmx -mno-3dnow -mno-sse -mno-sse2
2232TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 "Port me to amd64 FreeBSD"
2233TEMPLATE_VBOXR0DRV_CXXFLAGS = -fno-exceptions -fno-rtti \
2234 $(VBOX_GCC_WARN) -Wpointer-arith -Winline $(VBOX_GCC_Wno-pointer-sign) \
2235 -O2 -fno-format-extensions -fno-strict-aliasing -fno-common -finline-limit=8000 \
2236 $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_OPT) $(VBOX_GCC_FP) \
2237 -nostdinc
2238TEMPLATE_VBOXR0DRV_SYSSUFF = .ko
2239TEMPLATE_VBOXR0DRV_LDFLAGS = -d --warn-common
2240TEMPLATE_VBOXR0DRV_LDFLAGS.x86 = -m elf_i386_fbsd
2241TEMPLATE_VBOXR0DRV_LDFLAGS.amd64 = -m elf_x86_64 "Port me to amd64 FreeBSD"
2242
2243TOOL_FREEBSDKMODLD = FreeBSD kernel module linker.
2244# See kBuild/tools/GCC3.kmk for docs.
2245TOOL_FREEBSDKMODLD_LINK_SYSMOD_OUTPUT = $(outbase).kld
2246TOOL_FREEBSDKMODLD_LINK_SYSMOD_OUTPUT_MAYBE = $(outbase).map
2247TOOL_FREEBSDKMODLD_LINK_SYSMOD_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib)))
2248TOOL_FREEBSDKMODLD_LINK_SYSMOD_DEPORD =
2249define TOOL_FREEBSDKMODLD_LINK_SYSMOD_CMDS
2250 @# Link intermediate .kld (a relocatable object).
2251 ld $(flags) -r -o $(outbase).kld $(objs) \
2252 $(foreach p,$(libpath), -L$(p))\
2253 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(basename $(lib))), $(lib)))
2254 @# Strip non-exported symbols private and localize the exported ones.
2255 awk -f $(VBOX_FREEBSD_SRC)/conf/kmod_syms.awk $(outbase).kld $(if $(othersrc), $(othersrc),/dev/null) \
2256 | xargs -J% objcopy % $(outbase).kld
2257 @# Link the final .ko (a shared object).
2258 ld $(flags) -Bshareable -o $(out) $(outbase).kld
2259endef
2260
2261endif # FreeBSD
2262
2263ifdef VBOX_WITH_VBOXDRV
2264 ifndef TEMPLATE_VBOXR0DRV_TOOL
2265 $(warning Warning: VBox Build: Target $(KBUILD_HOST) is not officially supported!)
2266 endif
2267endif
2268
2269
2270
2271#
2272# Template for building R3 executables and static libraries which are linked into executables.
2273# Note! This is the base template for a whole lot of other ones, so be careful when changing it.
2274#
2275TEMPLATE_VBOXR3EXE = VBox Ring 3 Exe
2276TEMPLATE_VBOXR3EXE_ASTOOL = $(VBOX_ASTOOL)
2277TEMPLATE_VBOXR3EXE_ASFLAGS = $(VBOX_ASFLAGS)
2278TEMPLATE_VBOXR3EXE_DEFS = IN_RING3 $(ARCH_BITS_DEFS)
2279TEMPLATE_VBOXR3EXE_LIBS.kprofile = $(LIB_KPROFILE)
2280ifeq ($(KBUILD_TARGET),win)
2281 TEMPLATE_VBOXR3EXE_TOOL = $(VBOX_VCC_TOOL)
2282 TEMPLATE_VBOXR3EXE_RCDEFS = \
2283 VBOX_VERSION_MAJOR=\"$(VBOX_VERSION_MAJOR)\" \
2284 VBOX_VERSION_MINOR=\"$(VBOX_VERSION_MINOR)\" \
2285 VBOX_VERSION_BUILD=\"$(VBOX_VERSION_BUILD)\" \
2286 VBOX_SVN_REV=\"$(VBOX_SVN_REV)\" \
2287 VBOX_VERSION_MAJOR_NR=$(VBOX_VERSION_MAJOR) \
2288 VBOX_VERSION_MINOR_NR=$(VBOX_VERSION_MINOR) \
2289 VBOX_VERSION_BUILD_NR=$(VBOX_VERSION_BUILD) \
2290 VBOX_SVN_REV_NR=$(VBOX_SVN_REV)
2291 TEMPLATE_VBOXR3EXE_SDKS = WINPSDK
2292 ifdef VBOX_USE_VCC80
2293 TEMPLATE_VBOXR3EXE_CXXFLAGS = -Zi -Zl -GR- -EHs-c- -GF- -MD -W3 -wd4065 -wd4244 -wd4996 -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
2294 TEMPLATE_VBOXR3EXE_CXXFLAGS.debug = -RTCsu
2295 else
2296 TEMPLATE_VBOXR3EXE_CXXFLAGS = -Zi -Zl -GR- -GX- -GF- -MD -W3 -wd4065 -wd4244 $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
2297 TEMPLATE_VBOXR3EXE_CXXFLAGS.debug = -GZ
2298 endif
2299 TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile = -Gh -GH
2300 TEMPLATE_VBOXR3EXE_CFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS)
2301 TEMPLATE_VBOXR3EXE_CFLAGS.debug = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.debug)
2302 TEMPLATE_VBOXR3EXE_CFLAGS.kprofile = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile)
2303 TEMPLATE_VBOXR3EXE_LDFLAGS = \
2304 /NOD /INCREMENTAL:NO /MAPINFO:EXPORTS /LARGEADDRESSAWARE /DEBUG \
2305 /DISALLOWLIB:libc.lib \
2306 /DISALLOWLIB:libcd.lib \
2307 /DISALLOWLIB:libcmt.lib \
2308 /DISALLOWLIB:libcmtd.lib \
2309 /DISALLOWLIB:msvcrtd.lib
2310 TEMPLATE_VBOXR3EXE_LIBS = \
2311 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcrt.lib \
2312 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcprt.lib \
2313 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/oldnames.lib
2314 TEMPLATE_VBOXR3EXE_POST_CMDS = $(VBOX_SIGN_IMAGE_CMDS)
2315
2316else # the gcc guys
2317TEMPLATE_VBOXR3EXE_TOOL = $(VBOX_GCC_TOOL)
2318TEMPLATE_VBOXR3EXE_CXXFLAGS = -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_fvisibility-hidden)
2319TEMPLATE_VBOXR3EXE_CXXFLAGS.x86 = -m32
2320TEMPLATE_VBOXR3EXE_CXXFLAGS.amd64 = -m64
2321# L4 currently can't handle exception handling.
2322TEMPLATE_VBOXR3EXE_CXXFLAGS.l4 = -fno-exceptions -nostdinc \
2323 $(addprefix -I,$(VBOX_PATH_GCC_INCS) $(L4_INCDIR) $(FILE_TOOL_GPP3_INCDIR)) \
2324 $(DEBUG_L4)
2325TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile = -finstrument-functions
2326TEMPLATE_VBOXR3EXE_CFLAGS = -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC_Wno-variadic-macros) -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing $(VBOX_GCC_fvisibility-hidden)
2327TEMPLATE_VBOXR3EXE_CFLAGS.x86 = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.x86)
2328TEMPLATE_VBOXR3EXE_CFLAGS.amd64 = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.amd64)
2329TEMPLATE_VBOXR3EXE_CFLAGS.debug = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.debug)
2330TEMPLATE_VBOXR3EXE_CFLAGS.kprofile = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile)
2331TEMPLATE_VBOXR3EXE_CFLAGS.l4 = -nostdinc \
2332 $(addprefix -I,$(VBOX_PATH_GCC_INCS) $(L4_INCDIR)) $(DEBUG_L4)
2333TEMPLATE_VBOXR3EXE_DEFS.l4 = L4_THREAD_SAFE
2334TEMPLATE_VBOXR3EXE_LDFLAGS.x86 = -m32
2335TEMPLATE_VBOXR3EXE_LDFLAGS.amd64 = -m64
2336TEMPLATE_VBOXR3EXE_LDFLAGS.l4 = \
2337 $(L4_LIBDIR)/../crt0.o \
2338 -T$(L4_LIBDIR)/../main_dyn.ld -nostdlib \
2339 -Wl,--export-dynamic,--dynamic-linker=libld-l4.s.so \
2340 -Wl,--rpath-link,$(L4_LIBDIR)
2341TEMPLATE_VBOXR3EXE_LDFLAGS.linux = -Wl,-z,noexecstack $(VBOX_LD_as_needed)
2342 ifeq ($(KBUILD_TARGET),linux)
2343TEMPLATE_VBOXR3EXE_LIBS = pthread m rt dl
2344 else ifeq ($(KBUILD_TARGET),l4)
2345TEMPLATE_VBOXR3EXE_LIBS = \
2346 $(L4_LIBDIR)/libvboxserver.s.so \
2347 $(L4_LIBDIR)/libuc++.0.s.so \
2348 supc++ gcc_eh gcc \
2349 $(L4_LIBDIR)/libdl.s.so \
2350 $(L4_LIBDIR)/libuc.0.s.so
2351 else ifeq ($(KBUILD_TARGET),os2)
2352TEMPLATE_VBOXR3EXE_TOOL = GXX3OMF
2353TEMPLATE_VBOXR3EXE_LIBS = socket iconv
2354 else ifeq ($(KBUILD_TARGET),darwin)
2355TEMPLATE_VBOXR3EXE_TOOL = GXX4MACHO
2356TEMPLATE_VBOXR3EXE_LIBS =
2357TEMPLATE_VBOXR3EXE_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_DEFS)
2358TEMPLATE_VBOXR3EXE_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -fno-common
2359TEMPLATE_VBOXR3EXE_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
2360TEMPLATE_VBOXR3EXE_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_OBJCFLAGS)
2361TEMPLATE_VBOXR3EXE_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -read_only_relocs suppress
2362 else if1of ($(KBUILD_TARGET),freebsd netbsd openbsd)
2363TEMPLATE_VBOXR3EXE_TOOL = GXX3
2364TEMPLATE_VBOXR3EXE_LIBS = pthread
2365TEMPLATE_VBOXR3EXE_INCS += \
2366 /usr/include \
2367 /usr/X11R6/include \
2368 /usr/local/include
2369 else ifeq ($(KBUILD_TARGET),solaris)
2370TEMPLATE_VBOXR3EXE_TOOL = GXX3PLAIN
2371TEMPLATE_VBOXR3EXE_DEFS += LIBICONV_PLUG _REENTRANT # Avoid the GNU libiconv, for now at least.
2372TEMPLATE_VBOXR3EXE_LIBS = rt socket
2373 else
2374$(warning Warning: VBOX Build: Target $(KBUILD_TARGET) is not officially supported!)
2375TEMPLATE_VBOXR3EXE_CXXFLAGS.profile = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.release)
2376TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.krelease)
2377 endif
2378 ifdef VBOX_WITH_RUNPATH
2379 TEMPLATE_VBOXR3EXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)'
2380 else ifdef VBOX_WITH_ORIGIN
2381 TEMPLATE_VBOXR3EXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$$(VBOX_ORIGIN)'
2382 TEMPLATE_VBOXR3EXE_LDFLAGS.linux += -Wl,-z,origin
2383 endif
2384endif
2385
2386#
2387# Template for building R3 shared objects / DLLs.
2388# This is mostly identical to the VBOXR3EXE template. (Avoid PIC if possible!)
2389#
2390TEMPLATE_VBOXR3 = VBox Ring 3 SO/DLLs
2391TEMPLATE_VBOXR3_EXTENDS = VBOXR3EXE
2392TEMPLATE_VBOXR3_LDFLAGS.l4 = $(L4_LIBDIR)/../crt0.s.o -T$(L4_LIBDIR)/../main_rel.ld -nostdlib
2393TEMPLATE_VBOXR3_DEFS.l4 = $(TEMPLATE_VBOXR3EXE_DEFS.l4) __PIC__
2394TEMPLATE_VBOXR3_DEFS.darwin = $(TEMPLATE_VBOXR3EXE_DEFS.darwin) PIC
2395TEMPLATE_VBOXR3_LDFLAGS.darwin = $(TEMPLATE_VBOXR3EXE_LDFLAGS.darwin) -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
2396ifeq ($(filter-out solaris.x86 %.amd64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),)
2397 ifn1of ($(KBUILD_TARGET), darwin win)
2398 TEMPLATE_VBOXR3_DEFS = $(TEMPLATE_VBOXR3EXE_DEFS) PIC
2399 TEMPLATE_VBOXR3_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS) -fPIC
2400 TEMPLATE_VBOXR3_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -fPIC
2401 TEMPLATE_VBOXR3_LDFLAGS = $(TEMPLATE_VBOXR3EXE_LDFLAGS) -fPIC
2402 endif
2403endif
2404
2405#
2406# Template for building static R3 executables and any static
2407# libraries they link with.
2408#
2409TEMPLATE_VBOXR3STATIC = VBox Static Ring 3 EXE
2410TEMPLATE_VBOXR3STATIC_EXTENDS = VBOXR3EXE
2411ifeq ($(KBUILD_TARGET),win)
2412 TEMPLATE_VBOXR3STATIC_CFLAGS = $(filter-out -MD, $(TEMPLATE_VBOXR3EXE_CFLAGS)) -MT
2413 TEMPLATE_VBOXR3STATIC_CXXFLAGS = $(filter-out -MD, $(TEMPLATE_VBOXR3EXE_CFLAGS)) -MT
2414 TEMPLATE_VBOXR3STATIC_LDFLAGS = $(filter-out /DISALLOWLIB:libcmt.lib, $(TEMPLATE_VBOXR3EXE_LDFLAGS)) \
2415 /DISALLOWLIB:msvcrt.lib \
2416 /DISALLOWLIB:msvcprt.lib
2417 TEMPLATE_VBOXR3STATIC_LIBS = \
2418 $(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL)_LIB)/oldnames.lib \
2419 $(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL)_LIB)/libcmt.lib \
2420 $(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL)_LIB)/libcpmt.lib
2421else # the gcc guys (untested!)
2422 TEMPLATE_VBOXR3STATIC_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS) -static
2423 TEMPLATE_VBOXR3STATIC_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -static
2424 TEMPLATE_VBOXR3STATIC_OBJCFLAGS= $(TEMPLATE_VBOXR3EXE_OBJCFLAGS) -static
2425 TEMPLATE_VBOXR3STATIC_LDFLAGS = $(TEMPLATE_VBOXR3EXE_LDFLAGS) -static
2426endif
2427
2428#
2429# Template for building hardened Ring-3 executables.
2430#
2431TEMPLATE_VBOXR3HARDENEDEXE = Hardened VBox Ring-3 EXE
2432TEMPLATE_VBOXR3HARDENEDEXE_EXTENDS = VBOXR3EXE
2433TEMPLATE_VBOXR3HARDENEDEXE_LIBS = $(VBOX_LIB_SUPHARDENED) $(TEMPLATE_VBOXR3EXE_LIBS)
2434TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS.darwin = $(TEMPLATE_VBOXR3EXE_LDFLAGS.darwin) -framework IOKit
2435
2436#
2437# Template for building hardened Ring-3 libraries.
2438#
2439TEMPLATE_VBOXR3HARDENEDLIB = Hardened VBox Ring-3 LIB
2440TEMPLATE_VBOXR3HARDENEDLIB_EXTENDS = VBOXR3HARDENEDEXE
2441TEMPLATE_VBOXR3HARDENEDLIB_LIBS = $(NO_SUCH_VARIABLE)
2442
2443
2444#
2445# Template for building R3 shared objects / DLLs with the 10.5 Mac OS X SDK.
2446# Identical to VBOXR3EXE, except for the DYLIB, the classic_linker and SDK bits.
2447#
2448TEMPLATE_VBOXR3OSX105 = VBox Ring 3 SO/DLLs for OS X 10.5
2449TEMPLATE_VBOXR3OSX105_EXTENDS = VBOXR3EXE
2450TEMPLATE_VBOXR3OSX105_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_DEFS) PIC
2451TEMPLATE_VBOXR3OSX105_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_CFLAGS) -fno-common
2452TEMPLATE_VBOXR3OSX105_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_CXXFLAGS)
2453TEMPLATE_VBOXR3OSX105_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_OBJCFLAGS)
2454TEMPLATE_VBOXR3OSX105_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_LDFLAGS) \
2455 -read_only_relocs suppress \
2456 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
2457
2458
2459#
2460# Ring-3 testcase, running automatically during the build.
2461# This is the VBOXR3EXE template only with a different install dir.
2462#
2463TEMPLATE_VBOXR3AUTOTST = VBox Ring 3 Testcase Exe
2464TEMPLATE_VBOXR3AUTOTST_EXTENDS = VBOXR3EXE
2465TEMPLATE_VBOXR3AUTOTST_INST = $(INST_TESTCASE)
2466TEMPLATE_VBOXR3AUTOTST_LIBS = $(TEMPLATE_VBOXR3EXE_LIBS)
2467TEMPLATE_VBOXR3AUTOTST_LIBS.l4 = $(LIB_RUNTIME) $(TEMPLATE_VBOXR3EXE_LIBS.l4)
2468ifeq ($(KBUILD_TARGET),win)
2469 ifdef VBOX_SIGNING_MODE
2470 TEMPLATE_VBOXR3AUTOTST_POST_CMDS =
2471 endif
2472endif
2473
2474#
2475# Ring-3 testcase.
2476# This is the VBOXR3EXE template only with a different install dir.
2477#
2478TEMPLATE_VBOXR3TSTEXE = VBox Ring 3 Testcase Exe
2479TEMPLATE_VBOXR3TSTEXE_EXTENDS = VBOXR3EXE
2480TEMPLATE_VBOXR3TSTEXE_INST = $(INST_TESTCASE)
2481TEMPLATE_VBOXR3TSTEXE_LIBS = $(LIB_RUNTIME) $(TEMPLATE_VBOXR3EXE_LIBS)
2482ifdef VBOX_WITH_RUNPATH
2483 TEMPLATE_VBOXR3TSTEXE_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' $(TEMPLATE_VBOXR3EXE_LDFLAGS)
2484else ifdef VBOX_WITH_ORIGIN
2485 TEMPLATE_VBOXR3TSTEXE_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$$(VBOX_ORIGIN)/..' $(TEMPLATE_VBOXR3EXE_LDFLAGS)
2486endif
2487ifeq ($(KBUILD_TARGET),win)
2488 ifdef VBOX_SIGNING_MODE
2489 TEMPLATE_VBOXR3TSTEXE_POST_CMDS =
2490 endif
2491endif
2492
2493#
2494# Template for the CppUnit kind of testcases.
2495#
2496TEMPLATE_VBOXCPPUNITEXE = VBox CppUnit Testcase Exe
2497TEMPLATE_VBOXCPPUNITEXE_EXTENDS = VBOXR3TSTEXE
2498## @todo make a CPPUNIT SDK and add cppunit tools packages for windows, mac, solaris and OS/2.
2499#TEMPLATE_VBOXCPPUNITEXE_SDKS = CPPUNIT -
2500TEMPLATE_VBOXCPPUNITEXE_LIBS = \
2501 $(TEMPLATE_VBOXR3TSTEXE_LIBS) \
2502 cppunit
2503
2504#
2505# Template for building bad C/C++ style R3 executables (no -pedantic).
2506#
2507TEMPLATE_VBOXR3NPEXE = VBox Ring 3 Non-pedantic
2508TEMPLATE_VBOXR3NPEXE_EXTENDS = VBOXR3EXE
2509ifneq ($(KBUILD_TARGET),win) # (only gcc)
2510 TEMPLATE_VBOXR3NPEXE_TOOL = $(VBOX_GCC_TOOL)
2511 TEMPLATE_VBOXR3NPEXE_CXXFLAGS = $(filter-out -pedantic,$(TEMPLATE_VBOXR3EXE_CXXFLAGS)) -Wno-sign-compare
2512 TEMPLATE_VBOXR3NPEXE_CFLAGS = $(filter-out -pedantic -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations,$(TEMPLATE_VBOXR3EXE_CFLAGS)) -Wno-sign-compare
2513endif
2514
2515
2516#
2517# Template for building bad C/C++ style R3 shared libraries / Dlls (no -pedantic).
2518# This is mostly identical to the VBOXR3NPEXE template.
2519#
2520TEMPLATE_VBOXR3NP= VBox Ring 3 Non-pedantic
2521TEMPLATE_VBOXR3NP_EXTENDS = VBOXR3NPEXE
2522TEMPLATE_VBOXR3NP_LDFLAGS.l4 = \
2523 $(L4_LIBDIR)/../crt0.s.o \
2524 -T$(L4_LIBDIR)/../main_rel.ld \
2525 -nostdlib
2526TEMPLATE_VBOXR3NP_DEFS.l4 = $(TEMPLATE_VBOXR3NPEXE_DEFS.l4) __PIC__
2527ifeq ($(filter-out solaris.x86 %.amd64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),)
2528 ifneq ($(KBUILD_TARGET),win)
2529 TEMPLATE_VBOXR3NP_DEFS = $(TEMPLATE_VBOXR3NPEXE_DEFS) PIC
2530 TEMPLATE_VBOXR3NP_CFLAGS = $(TEMPLATE_VBOXR3NPEXE_CFLAGS) -fPIC
2531 TEMPLATE_VBOXR3NP_CXXFLAGS = $(TEMPLATE_VBOXR3NPEXE_CXXFLAGS) -fPIC
2532 TEMPLATE_VBOXR3NP_LDFLAGS = $(TEMPLATE_VBOXR3NPEXE_LDFLAGS) -fPIC
2533 endif
2534endif
2535
2536
2537#
2538# Template for building libraries, shared libraries / modules
2539# which only depends on IPRT for crt.
2540#
2541TEMPLATE_VBOXNOCRTGCC = VBox no-crt GCC libraries and modules, yasm/nasm.
2542TEMPLATE_VBOXNOCRTGCC_DEFS = IN_RING3 IPRT_NO_CRT $(ARCH_BITS_DEFS)
2543TEMPLATE_VBOXNOCRTGCC_ASDEFS = ASM_CALL64_GCC
2544TEMPLATE_VBOXNOCRTGCC_CFLAGS = -nostdinc -fno-strict-aliasing -fno-math-errno $(VBOX_GCC_WARN)
2545TEMPLATE_VBOXNOCRTGCC_CFLAGS.x86 = -m32
2546TEMPLATE_VBOXNOCRTGCC_CFLAGS.amd64 = -m64 -mcmodel=medium -fno-common
2547TEMPLATE_VBOXNOCRTGCC_CFLAGS.release = -O2 -fno-strict-aliasing
2548TEMPLATE_VBOXNOCRTGCC_CFLAGS.profile = $(TEMPLATE_VBOXNOCRTGCC_CFLAGS.release)
2549TEMPLATE_VBOXNOCRTGCC_CFLAGS.kprofile = $(TEMPLATE_VBOXNOCRTGCC_CFLAGS.release)
2550ifdef VBOX_TARGET_MAC_OS_X_VERSION_10_5 ## @todo this probably works for 10.4 too, check.
2551 TEMPLATE_VBOXNOCRTGCC_CFLAGS.darwin = -static
2552else
2553 TEMPLATE_VBOXNOCRTGCC_CFLAGS.darwin = -mdynamic-no-pic
2554endif
2555TEMPLATE_VBOXNOCRTGCC_CXXFLAGS = $(TEMPLATE_VBOXNOCRTGCC_CFLAGS)
2556TEMPLATE_VBOXNOCRTGCC_CXXFLAGS.$(KBUILD_TARGET) = $(TEMPLATE_VBOXNOCRTGCC_CFLAGS.$(KBUILD_TARGET))
2557TEMPLATE_VBOXNOCRTGCC_CXXFLAGS.$(KBUILD_TARGET_ARCH) = $(TEMPLATE_VBOXNOCRTGCC_CFLAGS.$(KBUILD_TARGET_ARCH))
2558TEMPLATE_VBOXNOCRTGCC_INCS = $(PATH_ROOT)/include/iprt/nocrt
2559
2560ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),win.amd64)
2561 # cross compile to 64-bit ELF (linux).
2562 TEMPLATE_VBOXNOCRTGCC_TOOL = XGCCAMD64LINUX
2563 TEMPLATE_VBOXNOCRTGCC_ASTOOL = YASM
2564 TEMPLATE_VBOXNOCRTGCC_ASFLAGS = -f elf64 -DASM_FORMAT_ELF -D__YASM__ -w+orphan-labels -g dwarf2
2565 TEMPLATE_VBOXNOCRTGCC_LIBS = $(PATH_DEVTOOLS)/win.x86/x86_64-unknown-linux-gnu/20060701-r2/lib/gcc/x86_64-unknown-linux-gnu/3.4.6/libgcc.a
2566 TEMPLATE_VBOXNOCRTGCC_LDFLAGS = -nostdlib
2567
2568else ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),win.x86)
2569 # Use the default GCC (MinGW) with the Microsoft linker.
2570 # (Drop all '-g' options as we're unable to strip the debug info.)
2571 TEMPLATE_VBOXNOCRTGCC_TOOL = $(VBOX_GCC_TOOL)
2572 TEMPLATE_VBOXNOCRTGCC_ASTOOL = $(VBOX_ASTOOL)
2573 TEMPLATE_VBOXNOCRTGCC_ASFLAGS = $(VBOX_ASFLAGS)
2574 TEMPLATE_VBOXNOCRTGCC_LDTOOL = $(VBOX_VCC_TOOL)
2575 TEMPLATE_VBOXNOCRTGCC_LDFLAGS = -Incremental:NO -MapInfo:Exports -NoD
2576 TEMPLATE_VBOXNOCRTGCC_LIBS = $(VBOX_GCC_LIBGCC)
2577 TEMPLATE_VBOXNOCRTGCC_CFLAGS := $(filter-out -g,$(TEMPLATE_VBOXNOCRTGCC_CFLAGS)) -s
2578
2579else
2580 # Use the default GCC.
2581 # The use of --exclude-libs ALL is to avoid confusing the linux ld.so.
2582 TEMPLATE_VBOXNOCRTGCC_TOOL = $(VBOX_GCC_TOOL)
2583 TEMPLATE_VBOXNOCRTGCC_ASTOOL = $(VBOX_ASTOOL)
2584 TEMPLATE_VBOXNOCRTGCC_ASFLAGS = $(VBOX_ASFLAGS)
2585 TEMPLATE_VBOXNOCRTGCC_CFLAGS += $(VBOX_GCC_fno-stack-protector)
2586 TEMPLATE_VBOXNOCRTGCC_CXXFLAGS += $(VBOX_GCC_fno-stack-protector)
2587 ifeq ($(KBUILD_TARGET_ARCH),amd64)
2588 # in 64-bit mode we'll build a sys-module (VBoxREM2).
2589 if1of ($(KBUILD_TARGET),darwin solaris)
2590 TEMPLATE_VBOXNOCRTGCC_LDFLAGS.solaris= -64 -r
2591 else
2592 TEMPLATE_VBOXNOCRTGCC_LDFLAGS = -nostdlib
2593 endif
2594 else # x86:
2595 TEMPLATE_VBOXNOCRTGCC_LDFLAGS = -nostdlib
2596 ifn1of ($(KBUILD_TARGET), os2 darwin solaris)
2597 TEMPLATE_VBOXNOCRTGCC_LDFLAGS += -Wl,--no-undefined
2598 endif
2599 endif # x86
2600 TEMPLATE_VBOXNOCRTGCC_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_LDFLAGS)
2601 TEMPLATE_VBOXNOCRTGCC_LIBS = # FIXME - has unwind mess.
2602endif
2603
2604
2605#
2606# Same as VBOXNOCRTGCC only it uses GAS as the assembler instead of yasm/nasm.
2607#
2608TEMPLATE_VBOXNOCRTGAS = VBox no-crt GCC libraries and modules, gas.
2609TEMPLATE_VBOXNOCRTGAS_EXTENDS = VBOXNOCRTGCC
2610TEMPLATE_VBOXNOCRTGAS_ASTOOL = $(TEMPLATE_VBOXNOCRTGCC_TOOL)
2611ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),win.x86)
2612 TEMPLATE_VBOXNOCRTGAS_ASFLAGS = -s
2613else
2614 TEMPLATE_VBOXNOCRTGAS_ASFLAGS = -g
2615endif
2616TEMPLATE_VBOXNOCRTGAS_ASFLAGS.x86 = -m32
2617TEMPLATE_VBOXNOCRTGAS_ASFLAGS.amd64 = -m64
2618
2619
2620#
2621# Template for building executables that are part of the VBox Main component
2622# (COM/XPCOM interface to VirtualBox).
2623#
2624TEMPLATE_VBOXMAINEXE = VBox Main Executable
2625TEMPLATE_VBOXMAINEXE_ASTOOL = $(VBOX_ASTOOL)
2626TEMPLATE_VBOXMAINEXE_ASFLAGS = $(VBOX_ASFLAGS)
2627TEMPLATE_VBOXMAINEXE_DEFS = IN_RING3 UNICODE NDEBUG=1
2628TEMPLATE_VBOXMAINEXE_DEFS.win = _UNICODE
2629TEMPLATE_VBOXMAINEXE_RCDEFS = $(TEMPLATE_VBOXR3EXE_RCDEFS)
2630TEMPLATE_VBOXMAINEXE_LIBS.kprofile = $(LIB_KPROFILE)
2631
2632ifeq ($(KBUILD_TARGET),win)
2633 TEMPLATE_VBOXMAINEXE_SDKS = WINPSDK W2K3DDK
2634 # Note: C4250 is the dominance warning, see r32789.
2635 # C4065 is about default only switches.
2636 # C4996 is about deprected function (CRT only?).
2637 ifdef VBOX_USE_VCC80
2638 TEMPLATE_VBOXMAINEXE_TOOL = $(VBOX_VCC_TOOL)
2639 TEMPLATE_VBOXMAINEXE_CXXFLAGS = -Zi -Zl -GR -GF- -MD -EHsc -W3 -wd4065 -wd4996 -wd4250 -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
2640 TEMPLATE_VBOXMAINEXE_CXXFLAGS.debug = -RTCsu
2641 else
2642 TEMPLATE_VBOXMAINEXE_TOOL = VCC70
2643 TEMPLATE_VBOXMAINEXE_CXXFLAGS = -Zi -Zl -GR -GX- -GF- -MD -EHsc -W3 -wd4065 -wd4250 $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
2644 TEMPLATE_VBOXMAINEXE_CXXFLAGS.debug = -GZ
2645 endif
2646 TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile = -Gh -GH
2647 TEMPLATE_VBOXMAINEXE_CFLAGS = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS)
2648 TEMPLATE_VBOXMAINEXE_CFLAGS.debug = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.debug)
2649 TEMPLATE_VBOXMAINEXE_CFLAGS.kprofile = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile)
2650 TEMPLATE_VBOXMAINEXE_INCS += \
2651 $(PATH_TOOL_$(VBOX_VCC_TOOL)_ATLMFC_INC)
2652 TEMPLATE_VBOXMAINEXE_LDFLAGS = \
2653 /NOD /INCREMENTAL:NO /MAPINFO:EXPORTS /LARGEADDRESSAWARE /DEBUG\
2654 /DISALLOWLIB:libc.lib \
2655 /DISALLOWLIB:libcd.lib \
2656 /DISALLOWLIB:msvcrt.lib \
2657 /DISALLOWLIB:msvcrtd.lib \
2658 /DISALLOWLIB:libcmtd.lib \
2659 /DISALLOWLIB:libcmt.lib
2660 TEMPLATE_VBOXMAINEXE_LIBS = \
2661 $(LIB_RUNTIME) \
2662 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcrt.lib \
2663 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcprt.lib \
2664 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/oldnames.lib \
2665 $(PATH_TOOL_$(VBOX_VCC_TOOL)_ATLMFC_LIB)/atls.lib
2666 TEMPLATE_VBOXMAINEXE_POST_CMDS = $(VBOX_SIGN_IMAGE_CMDS)
2667
2668else # the GCC guys:
2669
2670TEMPLATE_VBOXMAINEXE_TOOL = $(VBOX_GCC_TOOL)
2671TEMPLATE_VBOXMAINEXE_CXXFLAGS = -g -pipe $(VBOX_GCC_WARN) -Wno-long-long -Wno-non-virtual-dtor -fshort-wchar -fpermissive -fexceptions -frtti $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_fvisibility-hidden)
2672TEMPLATE_VBOXMAINEXE_CXXFLAGS.x86 = -m32
2673TEMPLATE_VBOXMAINEXE_CXXFLAGS.amd64 = -m64
2674TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile = -finstrument-functions
2675TEMPLATE_VBOXMAINEXE_CFLAGS = -g -pipe $(VBOX_GCC_WARN) -Wno-long-long -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing $(VBOX_GCC_fvisibility-hidden)
2676TEMPLATE_VBOXMAINEXE_CFLAGS.x86 = -m32
2677TEMPLATE_VBOXMAINEXE_CFLAGS.amd64 = -m64
2678TEMPLATE_VBOXMAINEXE_CFLAGS.kprofile = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile)
2679TEMPLATE_VBOXMAINEXE_LDFLAGS.x86 = -m32
2680TEMPLATE_VBOXMAINEXE_LDFLAGS.amd64 = -m64
2681 ifeq ($(KBUILD_TARGET),linux)
2682TEMPLATE_VBOXMAINEXE_LIBS = pthread m rt $(LIB_RUNTIME)
2683TEMPLATE_VBOXMAINEXE_LDFLAGS.linux = $(VBOX_LD_as_needed)
2684 else ifeq ($(KBUILD_TARGET),l4)
2685TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME)
2686# no libs as yet in l4 target - must be added later
2687 else ifeq ($(KBUILD_TARGET),os2)
2688TEMPLATE_VBOXMAINEXE_TOOL = GXX3OMF
2689TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME)
2690 else ifeq ($(KBUILD_TARGET),darwin)
2691TEMPLATE_VBOXMAINEXE_TOOL = GXX4MACHO
2692TEMPLATE_VBOXMAINEXE_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS)
2693TEMPLATE_VBOXMAINEXE_CFLAGS += $(VBOX_DARWIN_DEF_SDK_CFLAGS)
2694TEMPLATE_VBOXMAINEXE_CXXFLAGS += $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
2695TEMPLATE_VBOXMAINEXE_OBJCFLAGS += $(VBOX_DARWIN_DEF_SDK_OBJCFLAGS)
2696TEMPLATE_VBOXMAINEXE_LDFLAGS.darwin += -bind_at_load
2697TEMPLATE_VBOXMAINEXE_LDFLAGS += $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -framework Carbon
2698TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME)
2699 else if1of ($(KBUILD_TARGET), freebsd netbsd openbsd)
2700TEMPLATE_VBOXMAINEXE_TOOL = GXX3
2701TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME)
2702 else ifeq ($(KBUILD_TARGET),solaris)
2703TEMPLATE_VBOXMAINEXE_TOOL = GXX3PLAIN
2704TEMPLATE_VBOXMAINEXE_DEFS += _REENTRANT
2705TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME) rt
2706 else
2707$(warning Warning: VBOX Build: Target $(KBUILD_TARGET) is not officially supported!)
2708TEMPLATE_VBOXMAINEXE_LIBS =
2709 endif
2710 ifdef VBOX_WITH_RUNPATH
2711TEMPLATE_VBOXMAINEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)'
2712 else ifdef VBOX_WITH_ORIGIN
2713TEMPLATE_VBOXMAINEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$$(VBOX_ORIGIN)'
2714TEMPLATE_VBOXMAINEXE_LDFLAGS.linux += -Wl,-z,origin
2715 endif
2716
2717endif # !win
2718
2719# Add COM/XPCOM stuff
2720TEMPLATE_VBOXMAINEXE_LIBS += \
2721 $(PATH_LIB)/VBoxCOM$(VBOX_SUFF_LIB)
2722ifdef VBOX_WITH_XPCOM
2723 ## @todo may be worth creating the VBOX_XPCOM SDK def
2724 TEMPLATE_VBOXMAINEXE_DEFS += VBOX_WITH_XPCOM
2725 ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
2726 TEMPLATE_VBOXMAINEXE_DEFS += VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
2727 endif
2728 TEMPLATE_VBOXMAINEXE_INCS += \
2729 $(VBOX_XPCOM_INCS)
2730 TEMPLATE_VBOXMAINEXE_LIBS += \
2731 $(LIB_XPCOM)
2732 TEMPLATE_VBOXMAINEXE_INTERMEDIATES += \
2733 $(VBOX_PATH_SDK)/bindings/xpcom/include/VirtualBox_XPCOM.h
2734
2735else # COM
2736 TEMPLATE_VBOXMAINEXE_INCS += \
2737 $(VBOX_PATH_SDK)/bindings/mscom/include
2738 TEMPLATE_VBOXMAINEXE_INTERMEDIATES += \
2739 $(VBOX_PATH_SDK)/bindings/mscom/include/VirtualBox.h
2740endif # COM
2741
2742#
2743# Template for building the Main DLL modules (such as in-process COM/XPCOM
2744# components for Main).
2745#
2746# This differs from VBOXMAINEXE only in PIC handling and similar DLL stuff.
2747#
2748TEMPLATE_VBOXMAINDLL = VBox Main Component (shared library)
2749TEMPLATE_VBOXMAINDLL_EXTENDS = VBOXMAINEXE
2750ifeq ($(filter-out solaris.x86 %.amd64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),)
2751 ifn1of ($(KBUILD_TARGET), darwin win)
2752 TEMPLATE_VBOXMAINDLL_DEFS = PIC $(TEMPLATE_VBOXMAINEXE_DEFS)
2753 TEMPLATE_VBOXMAINDLL_CFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_CFLAGS)
2754 TEMPLATE_VBOXMAINDLL_CXXFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_CXXFLAGS)
2755 TEMPLATE_VBOXMAINDLL_LDFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_LDFLAGS)
2756 endif
2757endif
2758TEMPLATE_VBOXMAINDLL_LDFLAGS.darwin = $(filter-out -bind_at_load,$(TEMPLATE_VBOXMAINEXE_LDFLAGS.darwin)) \
2759 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
2760
2761#
2762# Template identical to VBOXMAINDLL except for where the stuff is
2763# installed when using XPCOM (components/).
2764#
2765# Note! In the hardened build this gets a bit ugly since $ORIGIN/..
2766# doesn't work. So, we use $ORIGIN there and let the installers
2767# handle the symlinking.
2768#
2769# (No difference when building against COM on Windows.)
2770#
2771TEMPLATE_VBOXMAINCOMP = VBox Main COM/XPCOM Component (shared library)
2772TEMPLATE_VBOXMAINCOMP_EXTENDS = VBOXMAINEXE
2773ifn1of ($(KBUILD_TARGET), win) ## WARNING! Linux used to be excluded too, so this may cause trouble.
2774 TEMPLATE_VBOXMAINCOMP_INST = $(INST_BIN)components/
2775endif
2776ifeq ($(filter-out solaris.x86 %.amd64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),)
2777 ifneq ($(KBUILD_TARGET),win)
2778 TEMPLATE_VBOXMAINCOMP_DEFS = PIC $(TEMPLATE_VBOXMAINEXE_DEFS)
2779 TEMPLATE_VBOXMAINCOMP_CFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_CFLAGS)
2780 TEMPLATE_VBOXMAINCOMP_CXXFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_CXXFLAGS)
2781 ifdef VBOX_WITH_ORIGIN
2782 ifndef VBOX_WITH_HARDENING
2783 TEMPLATE_VBOXMAINCOMP_LDFLAGS = -fPIC $(filter-out '$(VBOX_GCC_RPATH_OPT)$$(VBOX_ORIGIN)',$(TEMPLATE_VBOXMAINEXE_LDFLAGS)) '$(VBOX_GCC_RPATH_OPT)$$(VBOX_ORIGIN)/..'
2784 endif
2785 endif
2786 ifndef TEMPLATE_VBOXMAINCOMP_LDFLAGS
2787 TEMPLATE_VBOXMAINCOMP_LDFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_LDFLAGS)
2788 endif
2789 endif
2790endif
2791ifdef VBOX_WITH_ORIGIN
2792 ifndef TEMPLATE_VBOXMAINCOMP_LDFLAGS
2793 ifndef VBOX_WITH_HARDENING
2794 TEMPLATE_VBOXMAINCOMP_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)$$(VBOX_ORIGIN)',$(TEMPLATE_VBOXMAINEXE_LDFLAGS)) '$(VBOX_GCC_RPATH_OPT)$$(VBOX_ORIGIN)/..'
2795 endif
2796 endif
2797endif
2798TEMPLATE_VBOXMAINCOMP_LDFLAGS.darwin = $(filter-out -bind_at_load,$(TEMPLATE_VBOXMAINEXE_LDFLAGS.darwin)) \
2799 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
2800
2801#
2802# Template for building the Main static libraries.
2803#
2804# This differs from VBOXMAINDLL only that it zeroes out the _LIBS definition.
2805#
2806TEMPLATE_VBOXMAINLIB = VBox Main Component (static library)
2807TEMPLATE_VBOXMAINLIB_EXTENDS = VBOXMAINDLL
2808TEMPLATE_VBOXMAINLIB_LIBS =
2809
2810#
2811# Template for building executables that use the VBox Main component.
2812#
2813TEMPLATE_VBOXMAINCLIENTEXE = VBox Main Client (executable)
2814TEMPLATE_VBOXMAINCLIENTEXE_EXTENDS = VBOXMAINEXE
2815ifeq ($(KBUILD_TARGET),win)
2816 TEMPLATE_VBOXMAINCLIENTEXE_LIBS.win = $(TEMPLATE_VBOXMAINEXE_LIBS.win) \
2817 $(PATH_SDK_WINPSDK_LIB)/User32.Lib \
2818 $(PATH_SDK_WINPSDK_LIB)/Shell32.Lib \
2819 $(PATH_SDK_WINPSDK_LIB)/ShLwApi.Lib \
2820 $(PATH_SDK_WINPSDK_LIB)/Ole32.Lib \
2821 $(PATH_SDK_WINPSDK_LIB)/OleAut32.Lib \
2822 $(PATH_SDK_WINPSDK_LIB)/Uuid.Lib
2823else
2824 TEMPLATE_VBOXMAINCLIENTEXE_DEFS = $(TEMPLATE_VBOXMAINEXE_DEFS) \
2825 NDEBUG TRIMMED
2826 TEMPLATE_VBOXMAINCLIENTEXE_CXXFLAGS.linux = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.linux) \
2827 -pthread
2828endif
2829
2830#
2831# Template for building shared libraries / DLLs that use the VBox Main component.
2832#
2833# This differs from VBOXMAINCLIENTEXE only in PIC handling and similar DLL stuff.
2834#
2835TEMPLATE_VBOXMAINCLIENTDLL = VBox MAIN Client (shared library)
2836TEMPLATE_VBOXMAINCLIENTDLL_EXTENDS = VBOXMAINCLIENTEXE
2837ifeq ($(filter-out solaris.x86 %.amd64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),)
2838 ifneq ($(KBUILD_TARGET),win)
2839 TEMPLATE_VBOXMAINCLIENTDLL_DEFS = PIC $(TEMPLATE_VBOXMAINCLIENTEXE_DEFS)
2840 TEMPLATE_VBOXMAINCLIENTDLL_CFLAGS = -fPIC $(TEMPLATE_VBOXMAINCLIENTEXE_CFLAGS)
2841 TEMPLATE_VBOXMAINCLIENTDLL_CXXFLAGS = -fPIC $(TEMPLATE_VBOXMAINCLIENTEXE_CXXFLAGS)
2842 TEMPLATE_VBOXMAINCLIENTDLL_LDFLAGS = -fPIC $(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS)
2843 endif
2844endif
2845TEMPLATE_VBOXMAINCLIENTDLL_LDFLAGS.darwin = $(filter-out -bind_at_load,$(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS.darwin))
2846
2847
2848#
2849# Template for building Qt GUI executables.
2850#
2851TEMPLATE_VBOXQTGUIEXE = VBox Qt GUI Executable
2852TEMPLATE_VBOXQTGUIEXE_DEFS = IN_RING3 QT_NO_DEBUG QT_THREAD_SUPPORT $(ARCH_BITS_DEFS)
2853TEMPLATE_VBOXQTGUIEXE_INCS = \
2854 $(VBOX_PATH_QT)/include
2855
2856ifeq ($(KBUILD_TARGET),win)
2857 # drag in library configuration (we need QMAKE_PRL_DEFINES)
2858 ifneq ($(LIB_QT_PRL),)
2859 include $(LIB_QT_PRL)
2860 endif
2861 TEMPLATE_VBOXQTGUIEXE_TOOL = $(VBOX_VCC_TOOL)
2862 TEMPLATE_VBOXQTGUIEXE_QT_PREFIX = VBox
2863 TEMPLATE_VBOXQTGUIEXE_DEFS += \
2864 _WIN32_WINNT=0x0500 UNICODE _UNICODE \
2865 QT_DLL _CRT_SECURE_NO_DEPRECATE \
2866 $(QMAKE_PRL_DEFINES)
2867 ## @todo VCC70 flags?
2868 ifdef VBOX_USE_VCC80
2869 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS = \
2870 -nologo -Zm200 -W3 -MD -Zi -EHsc -Zc:wchar_t-
2871 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.debug = -RTCsu
2872 else
2873 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS = \
2874 -nologo -Zm200 -W3 -MD -Zi -GX
2875 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.debug = -GZ
2876 endif
2877 TEMPLATE_VBOXQTGUIEXE_INCS += \
2878 $(PATH_TOOL_$(VBOX_VCC_TOOL)_ATLMFC_INC)
2879 TEMPLATE_VBOXQTGUIEXE_LDFLAGS = \
2880 /NOD /NOLOGO /INCREMENTAL:NO /MAPINFO:EXPORTS /DEBUG \
2881 /DELAYLOAD:oleaut32.dll
2882 TEMPLATE_VBOXQTGUIEXE_SDKS = WINPSDK
2883 TEMPLATE_VBOXQTGUIEXE_LIBS = \
2884 $(LIB_QT) \
2885 $(LIB_QTMAIN) \
2886 $(LIB_RUNTIME) \
2887 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcprt.lib \
2888 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcrt.lib \
2889 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/oldnames.lib \
2890 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/delayimp.lib \
2891 $(PATH_TOOL_$(VBOX_VCC_TOOL)_ATLMFC_LIB)/atls.lib
2892 TEMPLATE_VBOXQTGUIEXE_POST_CMDS = $(VBOX_SIGN_IMAGE_CMDS)
2893
2894else # the gcc guys:
2895 TEMPLATE_VBOXQTGUIEXE_TOOL = $(VBOX_GCC_TOOL)
2896 TEMPLATE_VBOXQTGUIEXE_DEFS.linux = _REENTRANT
2897 TEMPLATE_VBOXQTGUIEXE_DEFS.solaris = _REENTRANT
2898
2899 TEMPLATE_VBOXQTGUIEXE_INCS += \
2900 $(LIB_SDL_INC)
2901 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS = \
2902 -pipe $(VBOX_GCC_WARN) -frtti -fno-exceptions -Wno-non-virtual-dtor \
2903 -Wno-long-long -fshort-wchar -fno-strict-aliasing \
2904 $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_fvisibility-inlines-hidden)
2905 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.x86 = -m32
2906 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.amd64 = -m64
2907 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.linux = -pthread
2908 TEMPLATE_VBOXQTGUIEXE_LDFLAGS.x86 = -m32
2909 TEMPLATE_VBOXQTGUIEXE_LDFLAGS.amd64 = -m64
2910 TEMPLATE_VBOXQTGUIEXE_LIBS += \
2911 $(LIB_SDL) \
2912 $(LIB_RUNTIME) \
2913 $(LIB_REM) \
2914 $(LIB_VMM)
2915
2916 ifeq ($(KBUILD_TARGET),linux)
2917 TEMPLATE_VBOXQTGUIEXE_LDFLAGS += $(VBOX_LD_as_needed)
2918 else ifeq ($(KBUILD_TARGET),darwin)
2919 TEMPLATE_VBOXQTGUIEXE_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS)
2920 TEMPLATE_VBOXQTGUIEXE_CFLAGS += $(VBOX_DARWIN_DEF_SDK_CFLAGS)
2921 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS += $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
2922 TEMPLATE_VBOXQTGUIEXE_OBJCFLAGS += $(VBOX_DARWIN_DEF_SDK_OBJCFLAGS)
2923 TEMPLATE_VBOXQTGUIEXE_LDFLAGS.darwin += -bind_at_load
2924 TEMPLATE_VBOXQTGUIEXE_LIBS +=
2925 TEMPLATE_VBOXQTGUIEXE_LIBPATH +=
2926 else ifeq ($(KBUILD_TARGET),os2)
2927 # drag in library configuration (we need QMAKE_PRL_DEFINES)
2928 ifneq ($(LIB_QT_PRL),)
2929 include $(LIB_QT_PRL)
2930 endif
2931 TEMPLATE_VBOXQTGUIEXE_DEFS += $(QMAKE_PRL_DEFINES)
2932 TEMPLATE_VBOXQTGUIEXE_LIBS +=
2933 TEMPLATE_VBOXQTGUIEXE_LIBPATH +=
2934 else
2935 TEMPLATE_VBOXQTGUIEXE_INCS += \
2936 $(VBOX_XCURSOR_INCS)
2937 TEMPLATE_VBOXQTGUIEXE_LIBS += \
2938 $(VBOX_XCURSOR_LIBS) \
2939 Xext \
2940 X11 \
2941 m \
2942 $(LIB_PTHREAD)
2943 TEMPLATE_VBOXQTGUIEXE_LIBPATH += \
2944 $(VBOX_LIBPATH_X11)
2945 ifeq ($(KBUILD_TARGET),freebsd)
2946 TEMPLATE_VBOXQTGUIEXE_INCS += \
2947 /usr/include \
2948 /usr/X11R6/include \
2949 /usr/local/include
2950 endif
2951 ifeq ($(KBUILD_TARGET),solaris)
2952 TEMPLATE_VBOXQTGUIEXE_LIBS += \
2953 rt socket nsl
2954 endif
2955 endif
2956 ifdef VBOX_WITH_RUNPATH
2957 ifeq ($(KBUILD_TARGET),solaris)
2958 TEMPLATE_VBOXQTGUIEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH):$(VBOX_WITH_RUNPATH)/qtgcc/lib'
2959 else
2960 TEMPLATE_VBOXQTGUIEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)'
2961 endif
2962 else ifdef VBOX_WITH_ORIGIN
2963 ifeq ($(KBUILD_TARGET),solaris)
2964 TEMPLATE_VBOXQTGUIEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$$(VBOX_ORIGIN):$$(VBOX_ORIGIN)/qtgcc/lib'
2965 else
2966 TEMPLATE_VBOXQTGUIEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$$(VBOX_ORIGIN)'
2967 endif
2968 endif
2969
2970endif # !win
2971
2972# Add COM/XPCOM stuff
2973TEMPLATE_VBOXQTGUIEXE_LIBS += \
2974 $(PATH_LIB)/VBoxCOM$(VBOX_SUFF_LIB)
2975ifdef VBOX_WITH_XPCOM
2976 ## @todo may be worth creating the VBOX_XPCOM SDK def
2977 TEMPLATE_VBOXQTGUIEXE_DEFS += VBOX_WITH_XPCOM
2978 ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
2979 TEMPLATE_VBOXQTGUIEXE_DEFS += VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
2980 endif
2981 TEMPLATE_VBOXQTGUIEXE_INCS += \
2982 $(VBOX_XPCOM_INCS)
2983 TEMPLATE_VBOXQTGUIEXE_LIBS += \
2984 $(LIB_XPCOM)
2985 TEMPLATE_VBOXQTGUIEXE_INTERMEDIATES += \
2986 $(VBOX_PATH_SDK)/bindings/xpcom/include/VirtualBox_XPCOM.h
2987else
2988 TEMPLATE_VBOXQTGUIEXE_INCS += \
2989 $(VBOX_PATH_SDK)/bindings/mscom/include
2990 TEMPLATE_VBOXQTGUIEXE_INTERMEDIATES += \
2991 $(VBOX_PATH_SDK)/bindings/mscom/include/VirtualBox.h
2992endif
2993
2994#
2995# Template for building Qt GUI components.
2996#
2997TEMPLATE_VBOXQTGUI = VBox Qt GUI Components
2998TEMPLATE_VBOXQTGUI_EXTENDS = VBOXQTGUIEXE
2999TEMPLATE_VBOXQTGUI_LIBS = $(filter-out $(QTMAIN),$(TEMPLATE_VBOXQTGUIEXE_LIBS))
3000ifeq ($(KBUILD_TARGET),darwin)
3001 TEMPLATE_VBOXQTGUI_LDFLAGS.darwin = $(filter-out -bind_at_load,$(TEMPLATE_VBOXQTGUIEXE_LDFLAGS.darwin)) \
3002 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
3003endif
3004ifeq ($(filter-out solaris.x86 %.amd64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),)
3005 ifneq ($(KBUILD_TARGET),win)
3006 TEMPLATE_VBOXQTGUI_DEFS = PIC $(TEMPLATE_VBOXQTGUIEXE_DEFS)
3007 TEMPLATE_VBOXQTGUI_CFLAGS = -fPIC $(TEMPLATE_VBOXQTGUIEXE_CFLAGS)
3008 TEMPLATE_VBOXQTGUI_CXXFLAGS = -fPIC $(TEMPLATE_VBOXQTGUIEXE_CXXFLAGS)
3009 TEMPLATE_VBOXQTGUI_LDFLAGS = -fPIC $(TEMPLATE_VBOXQTGUIEXE_LDFLAGS)
3010 endif
3011endif
3012
3013
3014#
3015# Qt 4
3016# Qt 4
3017# Qt 4
3018#
3019
3020# Guess VBOX_WITH_QT4_SUN
3021ifndef VBOX_WITH_QT4_SUN
3022 ifndef VBOX_OSE
3023 if1of ($(KBUILD_TARGET), darwin solaris win)
3024 VBOX_WITH_QT4_SUN := 1
3025 endif
3026 endif
3027endif
3028
3029#
3030# Handmade configuration of qt4 - very annoying, this needs to
3031# be cleaned up properly later some time (not important now).
3032#
3033ifeq ($(VBOX_PATH_QT4),)
3034 ifeq ($(KBUILD_TARGET),darwin)
3035 VBOX_PATH_QT4 := $(lastword $(sort $(wildcard $(PATH_DEVTOOLS_TRG)/qt/v4*)))
3036 ifeq ($(VBOX_PATH_QT4),)
3037 ifneq ($(wildcard /Library/Frameworks/QtCore.framework),)
3038 # Using the global installation (for OSE).
3039 VBOX_PATH_QT4 ?= /usr
3040 VBOX_PATH_QT4_FRAMEWORKS ?= /Library/Frameworks
3041 endif
3042 endif
3043 else if1of ($(KBUILD_TARGET),win)
3044 VBOX_PATH_QT4 ?= $(lastword $(sort $(wildcard $(PATH_DEVTOOLS_TRG)/qt/v4*)))
3045 else if1of ($(KBUILD_TARGET),solaris)
3046 VBOX_PATH_QT4 ?= $(lastword $(sort $(wildcard $(PATH_DEVTOOLS_TRG)/qt/v4*)))
3047 ifneq ($(VBOX_PATH_QT4),)
3048 VBOX_WITH_QT4_SUN = 1
3049 endif
3050 endif
3051endif
3052ifeq ($(VBOX_PATH_QT4),)
3053 if1of ($(USERNAME), bird)
3054 # gentoo (64-bit)
3055 VBOX_PATH_QT4 ?= /usr
3056 VBOX_PATH_QT4_LIB ?= /usr/lib/qt4
3057 endif
3058endif
3059VBOX_PATH_QT4 ?= /usr
3060VBOX_PATH_QT4_LIB ?= $(VBOX_PATH_QT4)/lib
3061
3062# Hack LD_LIBRARY_PATH for stuff in tools.
3063ifdef VBOX_WITH_QT4_SUN
3064 if1of ($(KBUILD_TARGET), linux)
3065 export LD_LIBRARY_PATH := $(VBOX_PATH_QT4_LIB):$(LD_LIBRARY_PATH)
3066 endif
3067endif
3068
3069
3070#
3071# Template for building Qt GUI executables.
3072#
3073TEMPLATE_VBOXQT4GUIEXE = VBox Qt4 GUI Executable
3074TEMPLATE_VBOXQT4GUIEXE_USES = qt4
3075TEMPLATE_VBOXQT4GUIEXE_QTTOOL = QT4
3076TEMPLATE_VBOXQT4GUIEXE_MOCTOOL = QT4
3077TEMPLATE_VBOXQT4GUIEXE_UICTOOL = QT4
3078TEMPLATE_VBOXQT4GUIEXE_RCCTOOL = QT4
3079TEMPLATE_VBOXQT4GUIEXE_LRCTOOL = QT4
3080TEMPLATE_VBOXQT4GUIEXE_SDKS = QT4
3081ifdef VBOX_WITH_QT4_SUN
3082 ifneq ($(KBUILD_TARGET),darwin) ## @todo The next darwin build should also make use the prefix just to make things more uniform.
3083 TEMPLATE_VBOXQT4GUIEXE_QT_PREFIX = VBox
3084 endif
3085endif
3086TEMPLATE_VBOXQT4GUIEXE_DEFS = IN_RING3 QT_NO_DEBUG QT_THREAD_SUPPORT QT_SHARED HAVE_CONFIG_H $(ARCH_BITS_DEFS)
3087
3088ifeq ($(KBUILD_TARGET),win)
3089 TEMPLATE_VBOXQT4GUIEXE_TOOL = $(VBOX_VCC_TOOL)
3090 TEMPLATE_VBOXQT4GUIEXE_DEFS += \
3091 _WIN32_WINNT=0x0500 UNICODE _UNICODE \
3092 QT_DLL _CRT_SECURE_NO_DEPRECATE \
3093 $(QMAKE_PRL_DEFINES)
3094 ## @todo VCC70 flags?
3095 ifdef VBOX_USE_VCC80
3096 TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS = \
3097 -nologo -Zm200 -W3 -MD -Zi -EHsc -Zc:wchar_t-
3098 TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS.debug = -RTCsu
3099 else
3100 TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS = \
3101 -nologo -Zm200 -W3 -MD -Zi -GX
3102 TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS.debug = -GZ
3103 endif
3104 TEMPLATE_VBOXQT4GUIEXE_INCS += \
3105 $(PATH_TOOL_$(VBOX_VCC_TOOL)_ATLMFC_INC)
3106 TEMPLATE_VBOXQT4GUIEXE_LDFLAGS = \
3107 /NOD /NOLOGO /INCREMENTAL:NO /MAPINFO:EXPORTS /DEBUG \
3108 /DELAYLOAD:oleaut32.dll
3109 TEMPLATE_VBOXQT4GUIEXE_SDKS += WINPSDK
3110 TEMPLATE_VBOXQT4GUIEXE_LIBS = \
3111 $(VBOX_LIBS_QT4) \
3112 $(LIB_RUNTIME) \
3113 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcprt.lib \
3114 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcrt.lib \
3115 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/oldnames.lib \
3116 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/delayimp.lib \
3117 $(PATH_TOOL_$(VBOX_VCC_TOOL)_ATLMFC_LIB)/atls.lib
3118 TEMPLATE_VBOXQT4GUIEXE_POST_CMDS = $(VBOX_SIGN_IMAGE_CMDS)
3119
3120else # the gcc guys:
3121 TEMPLATE_VBOXQT4GUIEXE_TOOL = $(VBOX_GCC_TOOL)
3122 TEMPLATE_VBOXQT4GUIEXE_DEFS.linux = _REENTRANT
3123
3124 TEMPLATE_VBOXQT4GUIEXE_DEFS.solaris = _REENTRANT
3125
3126 TEMPLATE_VBOXQT4GUIEXE_INCS += \
3127 $(LIB_SDL_INC)
3128 TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS = \
3129 -g -pipe $(VBOX_GCC_WARN) -frtti -fno-exceptions -Wno-non-virtual-dtor \
3130 -Wno-long-long -fshort-wchar -fno-strict-aliasing \
3131 $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_fvisibility-inlines-hidden)
3132 TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS.x86 = -m32
3133 TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS.amd64 = -m64
3134 TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS.linux = -pthread
3135 TEMPLATE_VBOXQT4GUIEXE_LDFLAGS.x86 = -m32
3136 TEMPLATE_VBOXQT4GUIEXE_LDFLAGS.amd64 = -m64
3137 TEMPLATE_VBOXQT4GUIEXE_LIBS = \
3138 $(VBOX_LIBS_QT4) \
3139 $(LIB_SDL) \
3140 $(LIB_RUNTIME) \
3141 $(LIB_REM) \
3142 $(LIB_VMM)
3143
3144 ifeq ($(KBUILD_TARGET),linux)
3145 TEMPLATE_VBOXQT4GUIEXE_LDFLAGS += $(VBOX_LD_as_needed)
3146 TEMPLATE_VBOXQT4GUIEXE_LIBS += \
3147 $(VBOX_XCURSOR_LIBS) \
3148 Xext \
3149 X11
3150 TEMPLATE_VBOXQT4GUIEXE_LIBPATH += \
3151 $(VBOX_LIBPATH_X11)
3152 else ifeq ($(KBUILD_TARGET),darwin)
3153 TEMPLATE_VBOXQT4GUIEXE_CFLAGS.darwin += $(VBOX_DARWIN_DEF_SDK_CFLAGS)
3154 TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS.darwin += $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
3155 TEMPLATE_VBOXQT4GUIEXE_OBJCFLAGS.darwin += $(VBOX_DARWIN_DEF_SDK_OBJCFLAGS)
3156 TEMPLATE_VBOXQT4GUIEXE_LDFLAGS.darwin += $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -bind_at_load
3157 TEMPLATE_VBOXQT4GUIEXE_LIBS +=
3158 TEMPLATE_VBOXQT4GUIEXE_LIBPATH +=
3159 else
3160 TEMPLATE_VBOXQT4GUIEXE_INCS += \
3161 $(VBOX_XCURSOR_INCS)
3162 TEMPLATE_VBOXQT4GUIEXE_LIBS += \
3163 $(VBOX_XCURSOR_LIBS) \
3164 Xext \
3165 X11 \
3166 m \
3167 $(LIB_PTHREAD)
3168 TEMPLATE_VBOXQT4GUIEXE_LIBPATH += \
3169 $(VBOX_LIBPATH_X11)
3170 ifeq ($(KBUILD_TARGET),freebsd)
3171 TEMPLATE_VBOXQT4GUIEXE_INCS += \
3172 /usr/include \
3173 /usr/X11R6/include \
3174 /usr/local/include
3175 endif
3176 ifeq ($(KBUILD_TARGET),solaris)
3177 TEMPLATE_VBOXQT4GUIEXE_LIBS += \
3178 rt socket nsl
3179 endif
3180 endif
3181 # Assume the Qt shared objects are in the same directory as the executable, on Solaris too.
3182 ifdef VBOX_WITH_RUNPATH
3183 TEMPLATE_VBOXQT4GUIEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)'
3184 else ifdef VBOX_WITH_ORIGIN
3185 TEMPLATE_VBOXQT4GUIEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$$(VBOX_ORIGIN)'
3186 endif
3187
3188endif
3189
3190# Add COM/XPCOM stuff
3191TEMPLATE_VBOXQT4GUIEXE_LIBS += \
3192 $(PATH_LIB)/VBoxCOM$(VBOX_SUFF_LIB)
3193ifdef VBOX_WITH_XPCOM
3194 ## @todo may be worth creating the VBOX_XPCOM SDK def, or just a SDK_VBOXXPCOM.
3195 TEMPLATE_VBOXQT4GUIEXE_DEFS += VBOX_WITH_XPCOM
3196 ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
3197 TEMPLATE_VBOXQT4GUIEXE_DEFS += VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
3198 endif
3199 TEMPLATE_VBOXQT4GUIEXE_INCS += \
3200 $(VBOX_XPCOM_INCS)
3201 TEMPLATE_VBOXQT4GUIEXE_LIBS += \
3202 $(LIB_XPCOM)
3203 TEMPLATE_VBOXQT4GUIEXE_INTERMEDIATES += \
3204 $(VBOX_PATH_SDK)/bindings/xpcom/include/VirtualBox_XPCOM.h
3205else # COM
3206 TEMPLATE_VBOXQT4GUIEXE_INCS += \
3207 $(VBOX_PATH_SDK)/bindings/mscom/include
3208 TEMPLATE_VBOXQT4GUIEXE_INTERMEDIATES += \
3209 $(VBOX_PATH_SDK)/bindings/mscom/include/VirtualBox.h
3210endif # COM
3211
3212
3213#
3214# Template for building Qt4 GUI components.
3215#
3216TEMPLATE_VBOXQT4GUI = VBox Qt4 GUI Components
3217TEMPLATE_VBOXQT4GUI_EXTENDS = VBOXQT4GUIEXE
3218TEMPLATE_VBOXQT4GUI_LIBS = $(filter-out $(QTMAIN),$(TEMPLATE_VBOXQT4GUIEXE_LIBS))
3219ifeq ($(KBUILD_TARGET),darwin)
3220 TEMPLATE_VBOXQT4GUI_LDFLAGS.darwin += $(filter-out -bind_at_load,$(TEMPLATE_VBOXQT4GUIEXE_LDFLAGS.darwin)) \
3221 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
3222endif
3223ifeq ($(filter-out solaris.x86 %.amd64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),)
3224 ifneq ($(KBUILD_TARGET),win)
3225 TEMPLATE_VBOXQT4GUI_DEFS = PIC $(TEMPLATE_VBOXQT4GUIEXE_DEFS)
3226 TEMPLATE_VBOXQT4GUI_CFLAGS = -fPIC $(TEMPLATE_VBOXQT4GUIEXE_CFLAGS)
3227 TEMPLATE_VBOXQT4GUI_CXXFLAGS = -fPIC $(TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS)
3228 TEMPLATE_VBOXQT4GUI_LDFLAGS = -fPIC $(TEMPLATE_VBOXQT4GUIEXE_LDFLAGS)
3229 endif
3230endif
3231
3232
3233
3234#
3235# Template for building build bldprogs.
3236#
3237TEMPLATE_VBOXBLDPROG = VBox Build Program
3238TEMPLATE_VBOXBLDPROG_DEFS = IN_RING3
3239ifeq ($(KBUILD_HOST),win)
3240 ifeq ($(KBUILD_HOST_ARCH),x86)
3241 ifdef VBOX_USE_VCC80
3242 TEMPLATE_VBOXBLDPROG_TOOL = VCC80X86
3243 else
3244 TEMPLATE_VBOXBLDPROG_TOOL = VCC70
3245 endif
3246 TEMPLATE_VBOXBLDPROG_SDKS = WIN32SDK
3247 else
3248 TEMPLATE_VBOXBLDPROG_TOOL = VCC80AMD64
3249 TEMPLATE_VBOXBLDPROG_SDKS = WIN64SDK
3250 endif
3251 ifneq ($(TEMPLATE_VBOXBLDPROG_TOOL),VCC70)
3252 TEMPLATE_VBOXBLDPROG_CXXFLAGS = -Zi -Zl -GR- -EHs-c- -GF- -MT -W3 -wd4996 -Zc:wchar_t-
3253 TEMPLATE_VBOXBLDPROG_CXXFLAGS.debug = -RTCsu
3254 TEMPLATE_VBOXBLDPROG_CXXFLAGS.release = -O2 -Oy- -GS-
3255 else
3256 TEMPLATE_VBOXBLDPROG_CXXFLAGS = -Zi -Zl -GR- -GX- -GF- -MT -W3
3257 TEMPLATE_VBOXBLDPROG_CXXFLAGS.debug = -GZ
3258 TEMPLATE_VBOXBLDPROG_CXXFLAGS.release = -Ogitb2 -Oy-
3259 endif
3260 TEMPLATE_VBOXBLDPROG_CXXFLAGS.profile = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.release)
3261 TEMPLATE_VBOXBLDPROG_CXXFLAGS.kprofile = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.release)
3262 TEMPLATE_VBOXBLDPROG_CFLAGS = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS)
3263 TEMPLATE_VBOXBLDPROG_CFLAGS.debug = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.debug)
3264 TEMPLATE_VBOXBLDPROG_CFLAGS.release = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.release)
3265 TEMPLATE_VBOXBLDPROG_CFLAGS.profile = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.profile)
3266 TEMPLATE_VBOXBLDPROG_CFLAGS.kprofile = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.kprofile)
3267 TEMPLATE_VBOXBLDPROG_LDFLAGS = \
3268 /NOD /INCREMENTAL:NO /MAPINFO:EXPORTS /LARGEADDRESSAWARE /DEBUG \
3269 /DISALLOWLIB:libcd.lib \
3270 /DISALLOWLIB:libcmtd.lib \
3271 /DISALLOWLIB:msvcrt.lib \
3272 /DISALLOWLIB:msvcrtd.lib \
3273 /DISALLOWLIB:msvcprt.lib \
3274 /DISALLOWLIB:msvcprtd.lib
3275 TEMPLATE_VBOXBLDPROG_LIBS = \
3276 $(PATH_TOOL_$(TEMPLATE_VBOXBLDPROG_TOOL)_LIB)/oldnames.lib \
3277 $(PATH_TOOL_$(TEMPLATE_VBOXBLDPROG_TOOL)_LIB)/libcmt.lib \
3278 $(PATH_TOOL_$(TEMPLATE_VBOXBLDPROG_TOOL)_LIB)/libcpmt.lib
3279
3280else
3281# (gcc of some kind )
3282TEMPLATE_VBOXBLDPROG_TOOL = GXX3
3283TEMPLATE_VBOXBLDPROG_CFLAGS = -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC_Wno-variadic-macros) -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations
3284TEMPLATE_VBOXBLDPROG_CFLAGS.x86 = -m32
3285TEMPLATE_VBOXBLDPROG_CFLAGS.amd64 = -m64
3286TEMPLATE_VBOXBLDPROG_CFLAGS.release = -O2 -fno-omit-frame-pointer -fno-strict-aliasing
3287TEMPLATE_VBOXBLDPROG_CFLAGS.profile = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.profile)
3288TEMPLATE_VBOXBLDPROG_CFLAGS.kprofile = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.kprofile)
3289TEMPLATE_VBOXBLDPROG_CXXFLAGS = -g -pipe $(VBOX_GCC_PEDANTIC)
3290TEMPLATE_VBOXBLDPROG_CXXFLAGS.x86 = -m32
3291TEMPLATE_VBOXBLDPROG_CXXFLAGS.amd64 = -m64
3292TEMPLATE_VBOXBLDPROG_CXXFLAGS.release = -O2 -fno-omit-frame-pointer -fno-strict-aliasing
3293TEMPLATE_VBOXBLDPROG_CXXFLAGS.profile = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.release)
3294TEMPLATE_VBOXBLDPROG_CXXFLAGS.kprofile = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.release)
3295TEMPLATE_VBOXBLDPROG_LDFLAGS.x86 = -m32
3296TEMPLATE_VBOXBLDPROG_LDFLAGS.amd64 = -m64
3297 ifeq ($(KBUILD_HOST),linux)
3298TEMPLATE_VBOXBLDPROG_LIBS = pthread m rt dl
3299 else ifeq ($(KBUILD_HOST),os2)
3300TEMPLATE_VBOXBLDPROG_TOOL = GXX3OMF
3301TEMPLATE_VBOXBLDPROG_LIBS = socket iconv
3302 else ifeq ($(KBUILD_HOST),darwin)
3303TEMPLATE_VBOXBLDPROG_TOOL = GXX4MACHO
3304TEMPLATE_VBOXBLDPROG_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -fno-common
3305TEMPLATE_VBOXBLDPROG_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
3306TEMPLATE_VBOXBLDPROG_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_OBJCFLAGS)
3307TEMPLATE_VBOXBLDPROG_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_LDFLAGS)
3308TEMPLATE_VBOXBLDPROG_LIBS =
3309 else if1of ($(KBUILD_HOST), freebsd netbsd openbsd)
3310TEMPLATE_VBOXBLDPROG_TOOL = GXX3
3311TEMPLATE_VBOXBLDPROG_LIBS =
3312 else ifeq ($(KBUILD_HOST),solaris)
3313TEMPLATE_VBOXBLDPROG_TOOL = GXX3PLAIN
3314TEMPLATE_VBOXBLDPROG_LIBS = rt
3315 else
3316$(warning Warning: VBOX Build: Target $(KBUILD_HOST) is not officially supported!)
3317 endif
3318
3319endif # !win
3320
3321
3322#
3323# Windows rc workaround for crosscompiling.
3324# (Some (old) Wine versions fails loading msvcrt.dll from the VCC bin directory.)
3325#
3326ifneq ($(KBUILD_HOST),win)
3327 TOOL_VCC80X86_RC := $(EXEC_X86_WIN32) $(PATH_DEVTOOLS)/win.x86/bin/rc.exe
3328 TOOL_VCC80AMD64_RC := $(EXEC_X86_WIN32) $(PATH_DEVTOOLS)/win.x86/bin/rc.exe
3329 TOOL_VCC70_RC := $(EXEC_X86_WIN32) $(PATH_DEVTOOLS)/win.x86/bin/rc.exe
3330 WIN32_MC = $(EXEC_X86_WIN32) $(PATH_DEVTOOLS)/win.x86/bin/mc.exe
3331else
3332 WIN32_MC = $(EXEC_X86_WIN32) $(firstword $(wildcard \
3333 $(PATH_SDK_WINPSDK_BIN)/MC.Exe\
3334 $(PATH_SDK_WINPSDK)/Bin/MC.Exe\
3335 $(PATH_SDK_WIN32SDK_BIN)/MC.Exe\
3336 $(PATH_SDK_WIN64SDK_BIN)/MC.Exe\
3337 $(PATH_DEVTOOLS)/win.x86/bin/mc.exe\
3338 ) Sorry_Cannot_find_mc_in_the_PSDK)
3339endif
3340
3341
3342#
3343# Template for building Linux host tools (only for KBUILD_TARGET=l4).
3344#
3345TEMPLATE_VBOXLNXHOSTR3EXE = Template for building linux host programs when targeting L4.
3346TEMPLATE_VBOXLNXHOSTR3EXE_INST = $(INST_BIN)
3347TEMPLATE_VBOXLNXHOSTR3EXE_BLD_TRG = linux
3348TEMPLATE_VBOXLNXHOSTR3EXE_TOOL = $(VBOX_GCC_TOOL)
3349TEMPLATE_VBOXLNXHOSTR3EXE_ASTOOL = YASM
3350TEMPLATE_VBOXLNXHOSTR3EXE_DLLSUFF = .so
3351TEMPLATE_VBOXLNXHOSTR3EXE_ASFLAGS = $(VBOX_ASFLAGS)
3352TEMPLATE_VBOXLNXHOSTR3EXE_DEFS = IN_RING3 $(ARCH_BITS_DEFS)
3353TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS = -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC_fno-stack-protector)
3354TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.debug = -fno-inline
3355TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.release = -O2 -fno-omit-frame-pointer -fno-strict-aliasing
3356TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.profile = $(TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.release)
3357TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.kprofile = $(TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.release)
3358TEMPLATE_VBOXLNXHOSTR3EXE_CFLAGS.release = $(TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.release)
3359TEMPLATE_VBOXLNXHOSTR3EXE_CFLAGS.debug = $(TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.debug)
3360TEMPLATE_VBOXLNXHOSTR3EXE_CFLAGS.profile = $(TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.profile)
3361TEMPLATE_VBOXLNXHOSTR3EXE_CFLAGS.kprofile = $(TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.kprofile)
3362TEMPLATE_VBOXLNXHOSTR3EXE_CFLAGS = -g -pipe $(VBOX_GCC_PEDANTIC) -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations $(VBOX_GCC_fno-stack-protector)
3363TEMPLATE_VBOXLNXHOSTR3EXE_LIBS = pthread m rt dl
3364
3365TEMPLATE_VBOXLNXHOSTR3LIB = Template for linux host libraries.
3366TEMPLATE_VBOXLNXHOSTR3LIB_EXTENDS = VBOXLNXHOSTR3EXE
3367TEMPLATE_VBOXLNXHOSTR3LIB_INST = $(INST_LIB)
3368
3369
3370#
3371# Template for building R3 programs for the guest additions.
3372# Note: Make sure you don't break VBOXGUESTR3CPPEXE when changing this.
3373#
3374TEMPLATE_VBOXGUESTR3EXE = VBox Guest Program
3375ifeq ($(KBUILD_TARGET),win)
3376 TEMPLATE_VBOXGUESTR3EXE_EXTENDS = VBOXR3EXE
3377 TEMPLATE_VBOXGUESTR3EXE_CFLAGS = $(filter-out -MD, $(TEMPLATE_VBOXR3EXE_CFLAGS)) -MT
3378 TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS = $(filter-out -MD, $(TEMPLATE_VBOXR3EXE_CFLAGS)) -MT
3379 TEMPLATE_VBOXGUESTR3EXE_LDFLAGS = $(filter-out /DISALLOWLIB:libcmt.lib, $(TEMPLATE_VBOXR3EXE_LDFLAGS)) \
3380 /DISALLOWLIB:msvcrt.lib \
3381 /DISALLOWLIB:msvcprt.lib
3382 TEMPLATE_VBOXGUESTR3EXE_LIBS = \
3383 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL)_LIB)/oldnames.lib \
3384 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL)_LIB)/libcmt.lib \
3385 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL)_LIB)/libcpmt.lib
3386else # the gcc guys
3387 TEMPLATE_VBOXGUESTR3EXE_EXTENDS = VBOXR3EXE
3388 TEMPLATE_VBOXGUESTR3EXE_TOOL := $(subst GXX,GCC,$(TEMPLATE_VBOXR3EXE_TOOL))
3389 TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -fno-exceptions
3390endif
3391TEMPLATE_VBOXGUESTR3EXE_INST = $(INST_ADDITIONS)
3392TEMPLATE_VBOXGUESTR3EXE_DEFS := $(TEMPLATE_VBOXR3EXE_DEFS) IN_GUEST IN_GUEST_R3 IN_RT_R3
3393ifeq ($(KBUILD_TARGET),linux) # As few libs as possible on linux.
3394 TEMPLATE_VBOXGUESTR3EXE_LIBS = pthread rt m
3395endif
3396
3397#
3398# Template for building R3 (dynamic) libraries for the guest additions.
3399#
3400TEMPLATE_VBOXGUESTR3DLL = VBox Guest User Dynamic Libraries
3401TEMPLATE_VBOXGUESTR3DLL_EXTENDS = VBOXGUESTR3EXE
3402## @todo add a INSTFUN that separates dlls and libs.
3403ifn1of ($(KBUILD_TARGET), os2 win)
3404 TEMPLATE_VBOXGUESTR3DLL_DEFS = $(TEMPLATE_VBOXGUESTR3EXE_DEFS) PIC
3405 TEMPLATE_VBOXGUESTR3DLL_CFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_CFLAGS) -fPIC
3406 TEMPLATE_VBOXGUESTR3DLL_CXXFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS) -fPIC -fno-exceptions
3407 TEMPLATE_VBOXGUESTR3DLL_LDFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_LDFLAGS) -fPIC
3408endif
3409
3410#
3411# Template for building R3 (static) libraries for the guest additions.
3412#
3413TEMPLATE_VBOXGUESTR3LIB = VBox Guest User Libraries
3414TEMPLATE_VBOXGUESTR3LIB_EXTENDS = VBOXGUESTR3EXE
3415TEMPLATE_VBOXGUESTR3LIB_INST = $(INST_ADDITIONS_LIB)
3416if1of ($(KBUILD_TARGET), solaris) ## @todo r=bird: Fix the *R3Mini template to VBOXGUESTR3DLL and remove this hack.
3417 TEMPLATE_VBOXGUESTR3LIB_DEFS = $(TEMPLATE_VBOXGUESTR3EXE_DEFS) PIC
3418 TEMPLATE_VBOXGUESTR3LIB_CFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_CFLAGS) -fPIC
3419 TEMPLATE_VBOXGUESTR3LIB_CXXFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS) -fPIC -fno-exceptions
3420endif
3421
3422#
3423# Template for building R3 programs for the guest additions (no -pedantic)
3424#
3425TEMPLATE_VBOXGUESTR3NPEXE = VBox Guest Program Non-pedantic
3426TEMPLATE_VBOXGUESTR3NPEXE_EXTENDS = VBOXGUESTR3EXE
3427ifneq ($(KBUILD_TARGET),win) # gcc only
3428TEMPLATE_VBOXGUESTR3NPEXE_CXXFLAGS = $(filter-out -pedantic,$(TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS)) -Wno-sign-compare
3429TEMPLATE_VBOXGUESTR3NPEXE_CFLAGS = $(filter-out -pedantic -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations,$(TEMPLATE_VBOXGUESTR3EXE_CFLAGS)) -Wno-sign-compare
3430endif
3431
3432#
3433# Template for building R3 (dynamic) libraries for the guest additions (no -pedantic)
3434#
3435TEMPLATE_VBOXGUESTR3NPDLL = VBox Guest User Dynamic Libraries Non-pedantic
3436TEMPLATE_VBOXGUESTR3NPDLL_EXTENDS = VBOXGUESTR3NPEXE
3437## @todo add a INSTFUN that separates dlls and libs.
3438ifn1of ($(KBUILD_TARGET), os2 win)
3439 TEMPLATE_VBOXGUESTR3NPDLL_DEFS = $(TEMPLATE_VBOXGUESTR3NPEXE_DEFS) PIC
3440 TEMPLATE_VBOXGUESTR3NPDLL_CFLAGS = $(TEMPLATE_VBOXGUESTR3NPEXE_CFLAGS) -fPIC
3441 TEMPLATE_VBOXGUESTR3NPDLL_CXXFLAGS = $(TEMPLATE_VBOXGUESTR3NPEXE_CXXFLAGS) -fPIC -fno-exceptions
3442 TEMPLATE_VBOXGUESTR3NPDLL_LDFLAGS = $(TEMPLATE_VBOXGUESTR3NPEXE_LDFLAGS) -fPIC
3443endif
3444
3445#
3446# Template for building R3 (static) libraries for the guest additions (no -pedantic)
3447#
3448TEMPLATE_VBOXGUESTR3NPLIB = VBox Guest User Libraries Non-pedantic
3449TEMPLATE_VBOXGUESTR3NPLIB_EXTENDS = VBOXGUESTR3NPEXE
3450TEMPLATE_VBOXGUESTR3NPLIB_INST = $(INST_ADDITIONS_LIB)
3451## @todo r=bird: Fix the *R3Mini template to VBOXGUESTR3DLL and remove this hack.
3452ifeq ($(filter-out solaris.x86 %.amd64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),)
3453 ifn1of ($(KBUILD_TARGET), darwin win)
3454 TEMPLATE_VBOXGUESTR3NPLIB_DEFS = $(TEMPLATE_VBOXGUESTR3NPEXE_DEFS) PIC
3455 TEMPLATE_VBOXGUESTR3NPLIB_CFLAGS = $(TEMPLATE_VBOXGUESTR3NPEXE_CFLAGS) -fPIC
3456 TEMPLATE_VBOXGUESTR3NPLIB_CXXFLAGS = $(TEMPLATE_VBOXGUESTR3NPEXE_CXXFLAGS) -fPIC -fno-exceptions
3457 endif
3458endif
3459
3460
3461#
3462# Template for XFree86 guest modules (relocatable module, i.e. sysmod).
3463# This mostly about zapping the VBOXR3EXE linker flags and libraries.
3464#
3465TEMPLATE_VBOXGUESTR3XF86MOD = VBox Guest Program with C++ library dependencies
3466TEMPLATE_VBOXGUESTR3XF86MOD_EXTENDS = VBOXGUESTR3EXE
3467TEMPLATE_VBOXGUESTR3XF86MOD_LIBS.$(KBUILD_TYPE) = $(NO_SUCH_VARIABLE)
3468TEMPLATE_VBOXGUESTR3XF86MOD_LIBS.$(KBUILD_TARGET) = $(NO_SUCH_VARIABLE)
3469TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.$(KBUILD_TARGET) = $(NO_SUCH_VARIABLE)
3470TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.$(KBUILD_TYPE) = $(NO_SUCH_VARIABLE)
3471TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS = -r
3472if1of ($(KBUILD_TARGET), dragonfly freebsd linux netbsd openbsd) # the gnu ld guys.
3473 TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.release = -S
3474 TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.x86 = -m elf_i386
3475 TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.amd64 = -m elf_x86_64
3476endif
3477TEMPLATE_VBOXGUESTR3XF86MOD_CFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_CFLAGS) -fno-merge-constants -std=c99
3478TEMPLATE_VBOXGUESTR3XF86MOD_CXXFLAGS= $(TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS) -fno-merge-constants
3479TEMPLATE_VBOXGUESTR3XF86MOD_SYSSUFF = .o
3480TEMPLATE_VBOXGUESTR3XF86MOD_LIBS = \
3481 $(VBOX_LIB_VBGL_R3_XFREE86)
3482TEMPLATE_VBOXGUESTR3XF86MOD_DEFS = $(TEMPLATE_VBOXGUESTR3DLL_DEFS) LOG_TO_BACKDOOR
3483
3484
3485#
3486# Template for X.org guest modules (shared libs).
3487# This mostly about zapping unnecessary LIBS from VBOXGUESTR3DLL and adding some flags.
3488#
3489TEMPLATE_VBOXGUESTR3XORGMOD = VBox Guest Program with C++ library dependencies
3490TEMPLATE_VBOXGUESTR3XORGMOD_EXTENDS = VBOXGUESTR3DLL
3491TEMPLATE_VBOXGUESTR3XORGMOD_LIBS.$(KBUILD_TYPE) = $(NO_SUCH_VARIABLE)
3492TEMPLATE_VBOXGUESTR3XORGMOD_LIBS.$(KBUILD_TARGET) = $(NO_SUCH_VARIABLE)
3493TEMPLATE_VBOXGUESTR3XORGMOD_CFLAGS = $(TEMPLATE_VBOXGUESTR3DLL_CFLAGS) -std=c99
3494TEMPLATE_VBOXGUESTR3XORGMOD_DEFS = $(TEMPLATE_VBOXGUESTR3DLL_DEFS) LOG_TO_BACKDOOR
3495ifeq ($(KBUILD_TARGET_ARCH),amd64)
3496 TEMPLATE_VBOXGUESTR3XORGMOD_DEFS += _XSERVER64
3497endif
3498if1of ($(KBUILD_TARGET), linux)
3499 TEMPLATE_VBOXGUESTR3XORGMOD_LDFLAGS = $(TEMPLATE_VBOXGUESTR3DLL_LDFLAGS) -s
3500endif
3501TEMPLATE_VBOXGUESTR3XORGMOD_LIBS = \
3502 $(VBOX_LIB_VBGL_R3_SHARED) \
3503 $(VBOX_LIB_IPRT_GUEST_R3_MINI) \
3504 $(VBOX_LIB_VBGL_R3_SHARED)
3505
3506
3507#
3508# Template for guest stuff that makes use of the C++ library and features.
3509# (This is mostly about undoing what was done to C++ for VBOXGUESTR3EXE.)
3510#
3511TEMPLATE_VBOXGUESTR3CPPEXE = VBox Guest Program with C++ library dependencies
3512TEMPLATE_VBOXGUESTR3CPPEXE_EXTENDS = VBOXGUESTR3EXE
3513ifeq ($(KBUILD_TARGET),win)
3514 # later if necessary
3515else
3516 TEMPLATE_VBOXGUESTR3CPPEXE_TOOL = $(TEMPLATE_VBOXR3EXE_TOOL)
3517 TEMPLATE_VBOXGUESTR3CPPEXE_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS)
3518endif
3519
3520
3521#
3522# Template for building R0 drivers for the guest additions.
3523#
3524TEMPLATE_VBOXGUESTR0 = VBox Guest Driver
3525TEMPLATE_VBOXGUESTR0_EXTENDS = VBOXR0DRV
3526TEMPLATE_VBOXGUESTR0_INST = $(INST_ADDITIONS)
3527TEMPLATE_VBOXGUESTR0_SDKS.win.x86 = WIN32SDK W2K3DDK
3528TEMPLATE_VBOXGUESTR0_SDKS.win.amd64 = W2K3DDK WINPSDKINCS
3529TEMPLATE_VBOXGUESTR0_LIBS.win.x86 = \
3530 $(PATH_SDK_W2K3DDK_LIB)/int64.lib
3531TEMPLATE_VBOXGUESTR0_DEFS = $(TEMPLATE_VBOXR0DRV_DEFS) IN_GUEST IN_GUEST_R0
3532ifeq ($(KBUILD_TARGET),solaris) # No VBI for the guest additions yet.
3533 TEMPLATE_VBOXGUESTR0_LDFLAGS = -r -dy
3534# ifdef VBOX_WITH_SOLARIS_VBI
3535# TEMPLATE_VBOXGUESTR0DRV_LDFLAGS += -N misc/vbi
3536# endif
3537endif
3538
3539#
3540# Template for building R0 libraries for the guest additions.
3541#
3542TEMPLATE_VBOXGUESTR0LIB = VBox Guest Driver Libraries
3543TEMPLATE_VBOXGUESTR0LIB_EXTENDS = VBOXGUESTR0
3544TEMPLATE_VBOXGUESTR0LIB_INST = $(INST_ADDITIONS_LIB)
3545
3546
3547#
3548# Guest additions libraries (all static).
3549# The _MINI and _SHARED are both compiled as PIC and intended for linking into a .so/.dll/.dylib.
3550#
3551VBOX_LIB_IPRT_GUEST_R3 = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR3$(VBOX_SUFF_LIB)
3552VBOX_LIB_IPRT_GUEST_R3_MINI = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR3Mini$(VBOX_SUFF_LIB)
3553VBOX_LIB_IPRT_GUEST_R0 = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR0$(VBOX_SUFF_LIB)
3554ifeq ($(KBUILD_TARGET_ARCH),x86)
3555 VBOX_LIB_IPRT_GUEST_R0_NT4 = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR0NT4$(VBOX_SUFF_LIB)
3556else
3557 VBOX_LIB_IPRT_GUEST_R0_NT4 = $(VBOX_LIB_IPRT_GUEST_R0)
3558endif
3559VBOX_LIB_VBGL_R3 = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3Lib$(VBOX_SUFF_LIB)
3560VBOX_LIB_VBGL_R3_XFREE86 = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3LibXFree86$(VBOX_SUFF_LIB)
3561VBOX_LIB_VBGL_R3_SHARED = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3LibShared$(VBOX_SUFF_LIB)
3562VBOX_LIB_VBGL_R0BASE = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR0LibBase$(VBOX_SUFF_LIB)
3563VBOX_LIB_VBGL_R0 = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR0Lib$(VBOX_SUFF_LIB)
3564
3565
3566
3567#
3568# Two targets to coordinate version number changes properly. Note that the
3569# only way to get a really consistent build is to run 'kmk' in the top-level
3570# directory. If you don't run it there, you get a consistent sub-tree only.
3571#
3572VBOX_VERSION_STAMP = $(PATH_OUT)/version-stamp-$(VBOX_VERSION_STRING)
3573VBOX_VERSION_HEADER = $(PATH_OUT)/version-generated.h
3574VBOX_VERSION_MK = $(PATH_OUT)/version-generated.mk
3575
3576$(VBOX_VERSION_STAMP): | $(PATH_ROOT)/Config.kmk
3577 $(call MSG_GENERATE,,$@)
3578 $(QUIET)$(MKDIR) -p $(@D)
3579 $(QUIET)$(RM) -f $(wildcard $(PATH_OUT)/version-stamp-*)
3580 $(QUIET)$(APPEND) $@ $(VBOX_VERSION_STRING)
3581
3582$(VBOX_VERSION_HEADER): $(VBOX_VERSION_STAMP)
3583 $(call MSG_GENERATE,,$@)
3584 $(QUIET)$(MKDIR) -p $(@D)
3585 $(QUIET)$(RM) -f $@ [email protected]
3586 $(QUIET)$(APPEND) [email protected] '#ifndef ___version_generated_h___'
3587 $(QUIET)$(APPEND) [email protected] '#define ___version_generated_h___'
3588 $(QUIET)$(APPEND) [email protected] ''
3589 $(QUIET)$(APPEND) [email protected] '#define VBOX_VERSION_MAJOR $(VBOX_VERSION_MAJOR)'
3590 $(QUIET)$(APPEND) [email protected] '#define VBOX_VERSION_MINOR $(VBOX_VERSION_MINOR)'
3591 $(QUIET)$(APPEND) [email protected] '#define VBOX_VERSION_BUILD $(VBOX_VERSION_BUILD)'
3592 $(QUIET)$(APPEND) [email protected] '#define VBOX_VERSION_STRING "$(VBOX_VERSION_STRING)"'
3593 $(QUIET)$(APPEND) [email protected] ''
3594 $(QUIET)$(APPEND) [email protected] '#endif'
3595 $(QUIET)$(MV) -f [email protected] $@
3596
3597
3598VBOX_PACKAGE_HEADER = $(PATH_OUT)/package-generated.h
3599
3600$(VBOX_PACKAGE_HEADER):
3601 $(call MSG_GENERATE,,$@)
3602 $(QUIET)$(MKDIR) -p $(@D)
3603 $(QUIET)$(RM) -f $@ [email protected]
3604 $(QUIET)$(APPEND) [email protected] '#ifndef ___package_generated_h___'
3605 $(QUIET)$(APPEND) [email protected] '#define ___package_generated_h___'
3606 $(QUIET)$(APPEND) [email protected] ''
3607 $(QUIET)$(APPEND) [email protected] '#define VBOX_PACKAGE_STRING "$(VBOX_PACKAGE_STRING)"'
3608 $(QUIET)$(APPEND) [email protected] ''
3609 $(QUIET)$(APPEND) [email protected] '#endif'
3610 $(QUIET)$(MV) -f [email protected] $@
3611
3612#
3613# Used for external makefiles which cannot include Config.kmk
3614#
3615$(VBOX_VERSION_MK): $(VBOX_VERSION_STAMP)
3616 $(call MSG_GENERATE,,$@)
3617 $(QUIET)$(RM) -f $@ [email protected]
3618 $(QUIET)$(MKDIR) -p $(@D)
3619 $(QUIET)$(APPEND) [email protected] 'VBOX_VERSION_MAJOR = $(VBOX_VERSION_MAJOR)'
3620 $(QUIET)$(APPEND) [email protected] 'VBOX_VERSION_MINOR = $(VBOX_VERSION_MINOR)'
3621 $(QUIET)$(APPEND) [email protected] 'VBOX_VERSION_BUILD = $(VBOX_VERSION_BUILD)'
3622 $(QUIET)$(APPEND) [email protected] 'VBOX_VERSION_STRING = $(VBOX_VERSION_STRING)'
3623 $(QUIET)$(MV) -f [email protected] $@
3624
3625ifndef VBOX_OSE
3626if1of ($(KBUILD_TARGET),freebsd linux netbsd openbsd solaris)
3627# VBOX_LICENSE_VER is used in several Makefiles
3628VBOX_LICENSE_VER_KMK = $(PATH_OUT)/license-version.kmk
3629$(VBOX_LICENSE_VER_KMK): $(VBOX_BRAND_LICENSE_HTML)
3630 $(call MSG_GENERATE,,$(VBOX_LICENSE_VER_KMK))
3631 $(QUIET)$(MKDIR) -p $(@D)
3632ifdef VBOX_BRAND_LICENSE_VER
3633 $(QUIET)$(RM) -f '$@'
3634 $(APPEND) '$@' 'VBOX_LICENSE_VER=$(VBOX_BRAND_LICENSE_VER)'
3635else
3636 $(QUIET)$(SED) -e "s/.*License version \([0-9.]*\) *[,&].*/VBOX_LICENSE_VER=\1/;t;d" --output $@ $(VBOX_BRAND_LICENSE_HTML)
3637endif
3638-include $(VBOX_LICENSE_VER_KMK)
3639VBOX_LICENSE_FILES = \
3640 License-$(VBOX_LICENSE_VER).html \
3641 $(foreach f,$(VBOX_INSTALLER_ADD_LANGUAGES),License-$(VBOX_LICENSE_VER)-$(f).html)
3642VBOX_LICENSE_BINS = $(addprefix $(PATH_BIN)/,$(VBOX_LICENSE_FILES))
3643endif
3644endif
3645
3646
3647# Force building of the version header file as the first thing anywhere in
3648# the tree. This eliminates the need for manual dependencies on it.
3649## @todo there gotta be a better way of doing this.
3650Makefile.kmk: | $(VBOX_VERSION_HEADER) $(VBOX_VERSION_MK) $(VBOX_PACKAGE_HEADER)
3651Makefile: | $(VBOX_VERSION_HEADER) $(VBOX_VERSION_MK) $(VBOX_PACKAGE_HEADER)
3652makefile: | $(VBOX_VERSION_HEADER) $(VBOX_VERSION_MK) $(VBOX_PACKAGE_HEADER)
3653
3654
3655#
3656# Subversion tree revision.
3657#
3658# The VBOX_SVN_REV contains our best guess. Use svn info on the
3659# root of the treeto determin this it if .svn/entries is found,
3660# otherwise fall back on the Config.kmk revision.
3661#
3662SVN ?= svn$(HOSTSUFF_EXE)
3663VBOX_SVN_REV_KMK = $(PATH_OUT)/revision.kmk
3664ifndef VBOX_SVN_REV
3665 VBOX_SVN_REV_FALLBACK := $(patsubst %:,, $Rev: 15032 $ )
3666 VBOX_SVN_DEP := $(wildcard $(PATH_ROOT)/.svn/entries)
3667 ifeq ($(which $(SVN)),)
3668 VBOX_SVN_DEP :=
3669 endif
3670
3671# Rule for generating a timestamp and updating the real thing on change.
3672$(VBOX_SVN_REV_KMK).ts +| $(VBOX_SVN_REV_KMK): $(if $(VBOX_SVN_DEP), $(VBOX_SVN_DEP), $(PATH_ROOT)/Config.kmk)
3673 $(call MSG_GENERATE,,$(VBOX_SVN_REV_KMK))
3674 $(QUIET)$(RM) -f $@ [email protected]
3675 $(QUIET)$(MKDIR) -p $(@D)
3676 ifneq ($(VBOX_SVN_DEP),)
3677 $(REDIRECT) -E 'LC_ALL=C' -wo [email protected] -- $(SVN) info $(PATH_ROOT)
3678 ifeq ($(int-mod $(VBOX_VERSION_BUILD), 2),0)
3679 $(SED) -e '/^Last Changed Rev/!d' -e 's/Last Changed Rev\: */export VBOX_SVN_REV=/' --output $@ [email protected]
3680 else
3681 $(SED) -e '/^Revision/!d' -e 's/Revision\: */export VBOX_SVN_REV=/' --output $@ [email protected]
3682 endif
3683 $(QUIET)$(RM) -f [email protected]
3684 else
3685 $(QUIET)$(APPEND) $@ 'export VBOX_SVN_REV=$(VBOX_SVN_REV_FALLBACK)'
3686 endif
3687 $(QUIET)$(CP) --changed -fv $@ $(VBOX_SVN_REV_KMK)
3688
3689 include $(VBOX_SVN_REV_KMK)
3690else
3691# allow to overwrite VBOX_SVN_REV externally (mainly for building .debs/.rpms)
3692$(VBOX_SVN_REV_KMK):
3693 $(call MSG_GENERATE,,$(VBOX_SVN_REV_KMK))
3694 $(QUIET)$(RM) -f $@
3695 $(QUIET)$(MKDIR) -p $(@D)
3696 $(QUIET)$(APPEND) $@ 'export VBOX_SVN_REV=$(VBOX_SVN_REV)'
3697 $(QUIET)echo '* $(VBOX_SVN_REV_KMK) was externally overwritten:'
3698 $(QUIET)$(CAT) $(VBOX_SVN_REV_KMK)
3699endif
3700
3701
3702#
3703# Legacy.
3704#
3705ifneq ($(LOCALCFG),)
3706 include $(LOCALCFG)
3707endif
3708
3709
3710#
3711# Some extra goals.
3712#
3713.PHONY: up update st stat status
3714up update::
3715 $(SVN) up
3716
3717up2 update2::
3718 $(SVN) up --ignore-externals
3719
3720st stat status:
3721 $(SVN) status
3722
3723quick:
3724 $(MAKE) VBOX_QUICK=1
3725
3726
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