VirtualBox

source: vbox/trunk/Config.kmk@ 52447

Last change on this file since 52447 was 52447, checked in by vboxsync, 11 years ago

Use our own MZ stub binary, one that is compatible with silly Symantec Endpoint Protection import table patching bugs.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id Revision
File size: 246.3 KB
Line 
1# $Id: Config.kmk 52447 2014-08-21 17:25:19Z 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-2014 Oracle Corporation
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 (GPL) as published by the Free Software
16# Foundation, in version 2 as it comes in the "COPYING" file of the
17# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
18# hope that it will 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# Build with umask 022 (requires kBuild r2556 to work, harmless on earlier).
29$(set-umask 022)
30
31# Add our own directories to the search paths.
32KBUILD_TOOL_PATHS = $(KBUILD_DEVTOOLS)/kBuildTools/
33
34
35# Modify the build types.
36KBUILD_BLD_TYPES = release profile debug kprofile
37
38## 'strict' builds
39# Same as release builds, except that RT_STRICT and VBOX_STRICT are defined,
40# meaning all assertions are in action. (Appending means '.strict' props take
41# precedence in argument lists.)
42KBUILD_BLD_TYPES += strict
43BLD_TYPE_strict_EXTENDS = release
44BLD_TYPE_strict_EXTENDS_BY = appending
45
46## 'dbgopt' builds
47# Same as debug builds, except that compiler optimizations are enabled. This
48# intended for cases where all the debug facitities (logging, assertions, ++)
49# is wanted but actual source level debugging as important as execution speed.
50KBUILD_BLD_TYPES += dbgopt
51BLD_TYPE_dbgopt_EXTENDS = debug
52BLD_TYPE_dbgopt_EXTENDS_BY = overriding
53
54# Temporary hack for kBuild ticket #83.
55## @todo kBuild: remove after closing ticket #83.
56PROPS_ACCUMULATE_L_LNK += INTERMEDIATES
57PROPS_PROGRAMS_ACCUMULATE_L += INTERMEDIATES
58PROPS_LIBRARIES_ACCUMULATE_L += INTERMEDIATES
59PROPS_DLLS_ACCUMULATE_L += INTERMEDIATES
60PROPS_SYSMODS_ACCUMULATE_L += INTERMEDIATES
61PROPS_MISCBINS_ACCUMULATE_L += INTERMEDIATES
62
63# Misc names used bye the install paths below.
64VBOX_PUEL_MANGLED_NAME := Oracle_VM_VirtualBox_Extension_Pack
65
66# Install paths
67## @todo This will change after 4.1 is branched off!
68# What is now 'bin' and 'lib' will be moved down under 'staged/', except on
69# darwin where it's currently called 'dist' which will be renamed to 'staged'.
70# When running 'kmk install' files will be copied to 'dist/', on unix systems
71# this will be done in FHS fashion assuming /usr/local or /usr as 'prefix'.
72#
73# Changes related to this are marked VBOX_WITH_NEW_LAYOUT.
74ifndef VBOX_WITH_NEW_LAYOUT
75 PATH_INS = $(PATH_OUT)/dist
76 PATH_STAGE = $(PATH_OUT)
77 INST_DEBUG := stage/debug/
78endif
79
80ifeq ($(KBUILD_TARGET),darwin)
81 ifndef VBOX_WITH_NEW_LAYOUT
82 INST_DIST = dist/
83 else
84 INST_DIST :=
85 endif
86 INST_SDK = $(INST_DIST)sdk/
87
88 # the bundles
89 INST_VIRTUALBOX = $(INST_DIST)VirtualBox.app/
90 INST_VBOXDRV = $(INST_DIST)VBoxDrv.kext/
91 INST_VBOXNETFLT = $(INST_DIST)VBoxNetFlt.kext/
92 INST_VBOXNETADP = $(INST_DIST)VBoxNetAdp.kext/
93 INST_VBOXUSB = $(INST_DIST)VBoxUSB.kext/
94
95 # put everything in the VirtualBox app bundle.
96 INST_BIN = $(INST_VIRTUALBOX)Contents/MacOS/
97 INST_DLL = $(INST_BIN)
98 INST_SYS = $(INST_BIN)
99 INST_TESTCASE = $(INST_BIN)testcase/
100 INST_ADDITIONS = $(INST_DIST)additions/
101 INST_ADDITIONS_ISO = $(INST_BIN)
102
103 INST_VBOXDBG_SYMS = $(INST_VIRTUALBOX)Contents/Resources/VBoxDbgSyms/
104
105 # other paths
106 INST_LIB = lib/
107 INST_ADDITIONS_LIB = $(INST_LIB)additions/
108 VBOX_INST_DTRACE_LIB = $(INST_BIN)dtrace/lib/
109 VBOX_INST_DTRACE_TST = $(INST_BIN)dtrace/testcase/
110 VBOX_INST_TOOLS = $(INST_BIN)tools/
111
112else
113
114 INST_BIN = bin/
115 INST_DIST = $(INST_BIN)
116 INST_SDK = $(INST_BIN)sdk/
117
118 INST_VIRTUALBOX = $(INST_BIN)
119 INST_VBOXDRV = $(INST_BIN)
120 INST_VBOXNETFLT = $(INST_BIN)
121 INST_VBOXNETADP = $(INST_BIN)
122 INST_VBOXUSB = $(INST_BIN)
123
124 INST_DLL = $(INST_BIN)
125 INST_SYS = $(INST_BIN)
126 INST_TESTCASE = $(INST_BIN)testcase/
127 INST_ADDITIONS = $(INST_BIN)additions/
128 INST_ADDITIONS_ISO = $(INST_ADDITIONS)
129
130 INST_LIB = lib/
131 INST_ADDITIONS_LIB = $(INST_LIB)additions/
132 VBOX_INST_DTRACE_LIB = $(INST_BIN)dtrace/lib/
133 VBOX_INST_DTRACE_TST = $(INST_BIN)dtrace/testcase/
134
135 INST_VBOXDBG_SYMS = $(INST_BIN)VBoxDbgSyms/
136 VBOX_INST_TOOLS = $(INST_BIN)tools/
137endif
138
139
140INST_VALIDATIONKIT = validationkit/
141INST_TESTBOXSCRIPT = testboxscript/
142
143INST_DOC = doc/
144INST_EXTPACK = $(INST_BIN)ExtensionPacks/
145INST_EXTPACK_CERTS = $(INST_BIN)ExtPackCertificates/
146INST_EXTPACK_PUEL = $(INST_EXTPACK)$(VBOX_PUEL_MANGLED_NAME)/
147INST_PACKAGES = packages/
148
149VBOX_PATH_SDK = $(patsubst %/,%,$(PATH_STAGE)/$(INST_SDK))
150VBOX_PATH_DIST = $(patsubst %/,%,$(PATH_STAGE)/$(INST_DIST))
151VBOX_PATH_VALIDATIONKIT = $(patsubst %/,%,$(PATH_STAGE)/$(INST_VALIDATIONKIT))
152VBOX_PATH_ADDITIONS = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS))
153VBOX_PATH_ADDITIONS_ISO = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS_ISO))
154VBOX_PATH_ADDITIONS_LIB = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS_LIB))
155VBOX_PATH_EXTPACK_PUEL= $(patsubst %/,%,$(PATH_STAGE)/$(INST_EXTPACK_PUEL))
156VBOX_PATH_PACKAGES = $(patsubst %/,%,$(PATH_STAGE)/$(INST_PACKAGES))
157
158
159# Delete targets on failure.
160.DELETE_ON_ERROR:
161
162# Notify about important kBuild updates.
163if $(KBUILD_VERSION_MAJOR) == 0 \
164 && ( $(KBUILD_VERSION_MINOR) >= 2 \
165 || ( $(KBUILD_VERSION_MINOR) == 1 \
166 && $(KBUILD_VERSION_PATCH) >= 999))
167 if $(KMK_REVISION) >= 2689
168 # OK.
169 else
170 $(error You must update kBuild! Requires kBuild revision 2577 or later, found $(KMK_REVISION) ($(KBUILD_VERSION)))
171 endif
172else
173 $(error You must update kBuild! Requires 0.1.999 or later, found $(KBUILD_VERSION))
174endif
175
176#
177# Define USERNAME early on.
178#
179ifndef USERNAME
180 ifdef USER
181 USERNAME = $(USER)
182 else
183 $(warning Warning: You must have USERNAME or USER in your environment.)
184 endif
185endif
186
187#
188# Detect the darwin host version number so we can disable stuff that doesn't
189# currently build on Lion.
190#
191ifeq ($(KBUILD_HOST),darwin)
192 VBOX_DARWIN_HOST_VERSION := $(subst ., ,$(shell uname -r))
193 VBOX_DARWIN_HOST_VERSION_MAJOR := $(expr $(word 1, $(VBOX_DARWIN_HOST_VERSION)) - 4)
194 VBOX_DARWIN_HOST_VERSION_MINOR := $(word 2, $(VBOX_DARWIN_HOST_VERSION))
195 VBOX_DARWIN_HOST_VERSION_PATCH := $(word 3, $(VBOX_DARWIN_HOST_VERSION))
196 VBOX_DARWIN_HOST_VERSION := 10.$(VBOX_DARWIN_HOST_VERSION_MAJOR).$(VBOX_DARWIN_HOST_VERSION_MINOR)
197endif
198
199
200#
201# The VirtualBox version.
202#
203
204# Major version.
205VBOX_VERSION_MAJOR = 4
206# Minor version.
207VBOX_VERSION_MINOR = 3
208# This is the current build number. It should be increased every time we publish a
209# new build. The define is available in every source file. Only even build numbers
210# will be published, odd numbers are set during development.
211VBOX_VERSION_BUILD = 53
212# The raw version string. This *must not* contain any other information/fields than
213# major, minor and build revision (as it is now) -- also will be used for host/guest version
214# comparison.
215VBOX_VERSION_STRING_RAW = $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
216# This can be overridden in LocalConfig.kmk or elsewhere.
217# For the convension, see checks near the end of Config.kmk.
218VBOX_BUILD_PUBLISHER =
219# Full version string (may include more than just x.y.z, but no spaces or other problematic chars).
220# Note! The BETA[n],ALPHA[n],RC[n] indicators should be inserted before the
221# publisher so that RTStrVersionCompare have a chance of comparing
222# prerelease from different publishers correctly.
223VBOX_VERSION_STRING = $(VBOX_VERSION_STRING_RAW)$(VBOX_BUILD_PUBLISHER)
224
225# Force the additions.sh script to get an exact additions build when we're doing the release.
226ifeq ($(int-mod $(VBOX_VERSION_BUILD),2),0)
227 VBOX_RELEASE_EXACT_MATCH=1
228endif
229ifneq ($(VBOX_RELEASE_EXACT_MATCH),)
230 export VBOX_ADDITIONS_SH_MODE = release
231 export VBOX_DOCUMENTATION_SH_MODE = release
232 export VBOX_EFI_SH_MODE = release
233 export VBOX_EXTPACKS_SH_MODE = release
234endif
235
236# Some info on the vendor
237VBOX_VENDOR = Oracle Corporation
238VBOX_VENDOR_SHORT = Oracle
239VBOX_PRODUCT = Oracle VM VirtualBox
240# Not all could be done automatically. Here is a list of known places which
241# have to be updated manually, please keep this up to date:
242# src/VBox/Devices/PC/PXE/client/uinit.asm
243# src/VBox/RDP/webclient/flash/com/sun/network/rdp/Version.as
244# src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
245# src/VBox/Frontends/VirtualBox/src/settings/global/VBoxGLSettingsLanguage.cpp
246# src/VBox/Frontends/VirtualBox/nls/*.ts
247# debian/control
248# src/VBox/Installer/linux/{debian,rpm}
249# src/VBox/Installer/linux/virtualbox.desktop
250# src/VBox/Additions/WINNT/Installer/ISO/ReadmeDrivers.txt
251# */*.inf, */*.rc
252
253# Maybe we want set this manually.
254VBOX_C_YEAR = $(date-utc %Y)
255
256#
257# The VirtualBox package type.
258#
259ifeq ($(KBUILD_TARGET),win)
260 VBOX_PACKAGE_OS = WINDOWS
261else ifeq ($(KBUILD_TARGET),linux)
262 VBOX_PACKAGE_OS = LINUX
263else ifeq ($(KBUILD_TARGET),darwin)
264 VBOX_PACKAGE_OS = DARWIN
265else ifeq ($(KBUILD_TARGET),solaris)
266 VBOX_PACKAGE_OS = SOLARIS
267else ifeq ($(KBUILD_TARGET),os2)
268 VBOX_PACKAGE_OS = OS2
269else ifeq ($(KBUILD_TARGET),haiku)
270 VBOX_PACKAGE_OS = HAIKU
271else if1of ($(KBUILD_TARGET), dragonfly freebsd netbsd openbsd)
272 VBOX_PACKAGE_OS = BSD
273else
274 $(error Cannot determine VBOX_PACKAGE_OS)
275endif
276ifeq ($(KBUILD_TARGET_ARCH),x86)
277 VBOX_PACKAGE_ARCH = 32BITS
278else
279 VBOX_PACKAGE_ARCH = 64BITS
280endif
281# distribution, mostly for Linux/Solaris where we support different distributions
282# this strip will be overridden by the Linux packaging scripts
283VBOX_PACKAGE_DIST ?= GENERIC
284# Full string
285VBOX_PACKAGE_STRING = $(VBOX_PACKAGE_OS)_$(VBOX_PACKAGE_ARCH)_$(VBOX_PACKAGE_DIST)
286
287
288#
289# The VirtualBox Configuration Defaults.
290#
291# We try to document all the build configuration options here, thing which
292# aren't enabled by default is left commented out just to show that they
293# exist and which value they should have (usually 1, but anyway).
294#
295
296## @name Additions
297## @{
298# This indicates that additions (of some kind or another) is being _built_.
299# VBOX_WITHOUT_ADDITIONS overrides it.
300VBOX_WITH_ADDITIONS = 1
301# Build the optional ring-0 part of the additions for syntax checking.
302# (Except when cross-building on linux since we're using /usr/src/...)
303ifn1of ($(KBUILD_TARGET).$(KBUILD_HOST_ARCH).$(KBUILD_TARGET_ARCH), linux.x86.amd64 linux.amd64.x86)
304 VBOX_WITH_ADDITION_DRIVERS = 1
305endif
306# Build X11 additions. Can be disabled separately.
307if1of ($(KBUILD_TARGET), dragonfly freebsd linux netbsd openbsd solaris)
308 VBOX_WITH_X11_ADDITIONS = 1
309endif
310# Enable the building of shared folders in the windows additions.
311VBOX_WITH_WIN32_ADDITIONS_SHAREDFOLDERS = 1
312# Take the binaries of the OS/2 Additions.
313VBOX_WITH_OS2_ADDITIONS_BIN = 1
314# Use additions from the build server.
315#VBOX_WITH_ADDITIONS_FROM_BUILD_SERVER = 1
316# Include additions in the package
317VBOX_WITH_ADDITIONS_PACKING = 1
318# Only build the additions (for the additions build server).
319#VBOX_ONLY_ADDITIONS = 1
320ifdef VBOX_ADDITIONS_ONLY # typical mistake.
321 $(error It is VBOX_ONLY_ADDITIONS=1 not VBOX_ADDITIONS_ONLY!)
322endif
323# Don't bother with additions, overrides VBOX_WITH_ADDITIONS.
324# This is not used by makefiles, only Config.kmk, see below.
325ifdef VBOX_ONLY_SDK
326 VBOX_WITHOUT_ADDITIONS = 1
327endif
328# Don't create the additions ISO.
329# (Used by the additions build server, don't invert it.)
330#VBOX_WITHOUT_ADDITIONS_ISO = 1
331## @}
332
333## @name Documentation
334## @{
335# The documentation
336VBOX_WITH_DOCS = 1
337# Use documentation from the build server.
338#VBOX_WITH_DOCS_FROM_BUILD_SERVER = 1
339# Include documentation in the package
340VBOX_WITH_DOCS_PACKING = 1
341# Include CHM when building docs (unset in LocalConfig.kmk to suppress CHM)
342ifn1of ($(KBUILD_TARGET), linux)
343 VBOX_WITH_DOCS_CHM = 1
344endif
345# By default only include translations in documentation-only builds
346ifdef VBOX_ONLY_DOCS
347 ifndef VBOX_NO_DOCS_TRANSLATIONS
348 VBOX_WITH_DOCS_TRANSLATIONS = 1
349 endif
350endif
351# Default languages
352VBOX_MANUAL_LANGUAGES = en_US
353ifdef VBOX_WITH_DOCS_TRANSLATIONS
354 VBOX_MANUAL_ADD_LANGUAGES = fr_FR
355endif
356# Don't bother with documentation, overrides VBOX_WITH_DOCS.
357# This is not used by makefiles, only Config.kmk, see below.
358#VBOX_WITHOUT_DOCS = 1
359# Only build the documentation (for the documentation build server).
360#VBOX_ONLY_DOCS = 1
361ifdef VBOX_DOCS_ONLY # typical mistake.
362 $(error It is VBOX_ONLY_DOCS=1 not VBOX_DOCS_ONLY!)
363endif
364## @}
365
366## @name VMM related settings.
367## @{
368# Enable the tradition raw-mode virtualization.
369VBOX_WITH_RAW_MODE = 1
370# Enable the ring-1 compression option (mainly for QNX).
371VBOX_WITH_RAW_RING1 = 1
372# Enable safe STR (store task register) emulation for raw-mode.
373VBOX_WITH_SAFE_STR = 1
374# Enable support for 64-bit guests.
375VBOX_WITH_64_BITS_GUESTS = 1
376# Enable multi-core VCPUs.
377VBOX_WITH_MULTI_CORE = 1
378# Activate this to force the VM to pre-allocate the guest RAM before startup
379VBOX_WITH_PREALLOC_RAM_BY_DEFAULT =
380# Enable the debugger.
381VBOX_WITH_DEBUGGER = 1
382# Enable the debugger GUI.
383VBOX_WITH_DEBUGGER_GUI = 1
384# Enables the first step using IEM (the interpreter).
385VBOX_WITH_FIRST_IEM_STEP = 1
386# Enables the new MSR code.
387VBOX_WITH_NEW_MSR_CODE = 1
388## @}
389
390
391## @name Devices, Drivers, ...
392## @{
393# Build the Host Guest Communication Manager component.
394VBOX_WITH_HGCM = 1
395## Build the bugcheck detection code.
396#VBOX_WITH_GUEST_BUGCHECK_DETECTION =
397# Enable the USB feature. This includes VBOX_WITH_VUSB!
398VBOX_WITH_USB = 1
399# Enable the USB 1.1 controller plus virtual USB HID devices.
400VBOX_WITH_VUSB = 1
401# Enable the USB 2.0 controller.
402VBOX_WITH_EHCI = 1
403# Enable the ISCSI feature.
404VBOX_WITH_ISCSI = 1
405# Enable INIP support in the ISCSI feature.
406VBOX_WITH_INIP = 1
407# Enable new (pre-1.5.0 release) version of LWIP.
408VBOX_WITH_NEW_LWIP = 1
409# Enables lwip as a core of NAT service
410VBOX_WITH_LWIP_NAT = 1
411# Enables compilation of NAT service
412VBOX_WITH_NAT_SERVICE = 1
413# Enable the E1000 feature.
414VBOX_WITH_E1000 = 1
415# Enable the Virtio feature.
416VBOX_WITH_VIRTIO = 1
417# Enable ALSA support for Linux.
418VBOX_WITH_ALSA = 1
419# Enable Pulse support for Linux.
420VBOX_WITH_PULSE = 1
421# Enable PCI passthrough support.
422VBOX_WITH_PCI_PASSTHROUGH = 1
423# Enable PDM based audio driver
424VBOX_WITH_PDM_AUDIO_DRIVER =
425# Enable statically linked dbus support.
426if1of ($(KBUILD_TARGET), linux solaris)
427 VBOX_WITH_DBUS = 1
428endif
429# Enable building PAM modules.
430if1of ($(KBUILD_TARGET), linux solaris)
431 VBOX_WITH_PAM = 1
432endif
433# Disable WINMM support for Windows (not implemented).
434VBOX_WITH_WINMM =
435# Enable internal networking.
436VBOX_WITH_INTERNAL_NETWORKING = 1
437# Enable vmsvga (svga2) graphics device variant, 2D part
438VBOX_WITH_VMSVGA = 1
439# Enable Host Guest Shared Memory Interface.
440VBOX_WITH_HGSMI = 1
441# Enable Video 2D Acceleration.
442if1of ($(KBUILD_TARGET), darwin linux win freebsd)
443 VBOX_WITH_VIDEOHWACCEL = 1
444endif
445# Enable Wddm Video driver for Vista+ guests.
446VBOX_WITH_WDDM = 1
447# Enable Wddm Video driver for Windows 8 guests.
448VBOX_WITH_WDDM_W8 = 1
449# Lazy developer!!
450VBOXWDDM_WITH_VBVA = 1
451# Lazy developer!!
452ifdef VBOX_WITH_WDDM
453 VBOX_WITH_VDMA = 1
454else ifdef VBOX_WITH_VDMA
455 undef VBOX_WITH_VDMA
456endif
457# Disable the Intel PXE ROM (uses Etherboot).
458VBOX_WITH_INTEL_PXE =
459# Enable EFI support
460VBOX_WITH_EFI = 1
461# Fetch EFI firmware image from the build server
462#VBOX_WITH_EFIFW_FROM_BUILD_SERVER = 1
463# Include the EFI firmware into the package
464VBOX_WITH_EFIFW_PACKING = 1
465# Use kStuff for MACH-O and LX binary loading.
466if1of ($(KBUILD_TARGET_ARCH), x86 amd64)
467 IPRT_WITH_KSTUFF = 1
468endif
469# Enable setuid wrapper for Solaris host DVD.
470#VBOX_WITH_SUID_WRAPPER = 1
471# Enable the virtual SATA/AHCI controller
472VBOX_WITH_AHCI = 1
473# Enable the new async completion manager
474VBOX_WITH_PDM_ASYNC_COMPLETION = 1
475# Temporary switch for enabling / disabling the new USB code on Darwin.
476VBOX_WITH_NEW_USB_CODE_ON_DARWIN = 1
477ifdef VBOX_WITH_USB
478 VBOX_WITH_VUSB = 1
479 VBOX_WITH_XHCI_IMPL=1
480endif
481ifdef VBOX_WITH_EHCI
482 VBOX_WITH_EHCI_IMPL = 1
483endif
484ifdef VBOX_WITH_PCI_PASSTHROUGH
485 VBOX_WITH_PCI_PASSTHROUGH_IMPL = 1
486endif
487ifndef VBOX_WITHOUT_HOSTWEBCAM
488 VBOX_WITH_USB_VIDEO_IMPL = 1
489endif
490# Enable the hal/sysfs USB code on Linux.
491ifeq ($(KBUILD_TARGET),linux)
492 VBOX_USB_WITH_SYSFS = 1
493 # Disabled for now
494 # VBOX_USB_WITH_DBUS = 1
495 VBOX_USB_WITH_INOTIFY = 1
496endif
497# Enable performance API.
498VBOX_WITH_RESOURCE_USAGE_API = 1
499# Use VBoxVolInfo for getting FS dependecies.
500if1of ($(KBUILD_TARGET), linux)
501 VBOX_WITH_DEVMAPPER = 1
502endif
503# Enable BusLogic SCSI host adapter
504VBOX_WITH_BUSLOGIC = 1
505# Enable LsiLogic SCSI host adapter
506VBOX_WITH_LSILOGIC = 1
507# Enable SCSI drivers
508VBOX_WITH_SCSI = 1
509# Enable this setting to force a fallback to default DMI data on configuration errors
510VBOX_BIOS_DMI_FALLBACK =
511# Enable the builtin PXE ROM
512VBOX_WITH_PXE_ROM = 1
513# Enable MSI support in devices
514VBOX_WITH_MSI_DEVICES = 1
515# Enable host network interface API.
516if1of ($(KBUILD_TARGET), darwin freebsd linux solaris win)
517 VBOX_WITH_HOSTNETIF_API = 1
518endif
519# Emulated USB smart card reader
520VBOX_WITH_USB_CARDREADER = 1
521# Disk crypt plugin
522VBOX_WITH_PLUGIN_CRYPT = 1
523## @}
524
525# legacy
526ifdef VBOX_ONLY_TESTSUITE
527 $(warning VBOX_ONLY_TESTSUITE was renamed to VBOX_ONLY_VALIDATIONKIT)
528 VBOX_ONLY_VALIDATIONKIT = $(VBOX_ONLY_TESTSUITE)
529endif
530
531## @name Other Component
532## @{
533# Build the installer.
534VBOX_WITH_INSTALLER = 1
535# The kernel driver/module and related runtime libraries.
536VBOX_WITH_VBOXDRV = 1
537# The main api.
538VBOX_WITH_MAIN = 1
539# Whether to also ship 32-bit main API on 64-bit systems.
540if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), solaris.amd64 win.amd64)
541 if !defined(VBOX_ONLY_VALIDATIONKIT) && !defined(VBOX_ONLY_ADDITIONS) && !defined(VBOX_ONLY_DOCS)
542 VBOX_WITH_32_ON_64_MAIN_API = 1
543 endif
544endif
545# The recompiler.
546VBOX_WITH_REM = 1
547# Set this to prefix all C symbols in XPCOM, to avoid dynamic linking problems
548# caused by our XPCOM library polluting the symbol namespace for system libs.
549if1of ($(KBUILD_TARGET), linux solaris)
550 VBOX_WITH_XPCOM_NAMESPACE_CLEANUP = 1
551endif
552# Set this to not use COM or XPCOM in places where it can be avoided.
553#VBOX_WITHOUT_COM = 1
554# The webservices api.
555VBOX_WITH_WEBSERVICES = 1
556VBOX_WITH_WEBSERVICES_SSL = 1
557# The Qt 4 GUI.
558VBOX_WITH_QTGUI = 1
559# Indicates the Qt is Cocoa based on the Mac.
560ifeq ($(KBUILD_TARGET),darwin)
561 VBOX_WITH_COCOA_QT = 1
562endif
563# HiDPI support for OS X
564VBOX_GUI_WITH_HIDPI = 1
565# The SDL based GUI.
566VBOX_WITH_VBOXSDL = 1
567# Build VBoxSDL with secure label support.
568ifeq ($(filter win.amd64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),) # too much work with freetype and all that.
569VBOX_WITH_SECURELABEL = 1
570endif
571# The headless frontend.
572VBOX_WITH_HEADLESS = 1
573# Enable the build of VRDP server.
574VBOX_WITH_VRDP = 1
575# Build the VRDP authentication modules.
576VBOX_WITH_VRDP_AUTHMOD = 1
577# Build enhanced version of rdesktop.
578VBOX_WITH_VRDP_RDESKTOP = 1
579## The Direct Framebuffer GUI.
580#VBOX_WITH_VBOXFB = 1
581# Enables the Python<->XPCOM and Python<->COM bindings.
582VBOX_WITH_PYTHON ?= 1
583if1of ($(KBUILD_TARGET), darwin linux solaris)
584 # Enable Java<->XPCOM bridge + glue code
585 VBOX_WITH_JXPCOM ?= 1
586endif
587if1of ($(KBUILD_TARGET), )
588 # Enable Java<->MSCOM glue, bridge is provided by an external lib (Jacob)
589 VBOX_WITH_JMSCOM ?= 1
590endif
591if1of ($(KBUILD_TARGET), darwin linux solaris)
592 # Enable Java<->JAX-WS bridge
593 VBOX_WITH_JWS ?= 1
594endif
595# Use XPIDL instead of XSLT stylesheet
596VBOX_WITH_JAVA_SUPPORT_IN_XPIDL ?=
597# Build against multiple Python versions present in the system
598VBOX_WITH_MULTIVERSION_PYTHON ?= 1
599# Enable the kchmviewer.
600VBOX_WITH_KCHMVIEWER = 1
601# Build the Validation Kit.
602VBOX_WITH_VALIDATIONKIT = 1
603# Build the testcases.
604VBOX_WITH_TESTCASES = 1
605# Enable this to build vditool even if VBOX_WITH_TESTCASES is disabled
606VBOX_WITH_VDITOOL =
607# Enable this to build vbox-img even if VBOX_WITH_TESTCASES is disabled
608VBOX_WITH_VBOX_IMG =
609# Enables the VPX module for VM video capturing
610if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), darwin.x86 darwin.amd64 linux.x86 linux.amd64 solaris.amd64 win.x86 win.amd64)
611 VBOX_WITH_VPX = 1
612endif
613# Enable shared folders
614VBOX_WITH_SHARED_FOLDERS = 1
615# Enable shared clipboard
616VBOX_WITH_SHARED_CLIPBOARD = 1
617# Enable the host/guest information service (aka guest properties).
618VBOX_WITH_GUEST_PROPS = 1
619# Enable this to prevent the guest from writing guest properties.
620VBOX_WITH_GUEST_PROPS_RDONLY_GUEST =
621# Compile the host channel
622VBOX_WITH_HOST_CHANNEL = 1
623# Enable the guest control service.
624if1of ($(KBUILD_TARGET), darwin freebsd linux solaris win)
625 VBOX_WITH_GUEST_CONTROL = 1
626endif
627# Enable ballooning
628VBOX_WITH_MEMBALLOON = 1
629# Enable crOpenGL service
630if1of ($(KBUILD_TARGET), darwin freebsd linux solaris win)
631 VBOX_WITH_CROGL = 1
632endif
633# enable new wined3d code
634VBOX_WITH_NEW_WINE = 1
635# Enable S3 support (requires libcurl)
636VBOX_WITH_S3 = 1
637# Enable Host=>Guest Drag'n'Drop
638if1of ($(KBUILD_TARGET), darwin linux solaris win)
639 VBOX_WITH_DRAG_AND_DROP = 1
640 if1of ($(KBUILD_TARGET), linux solaris win)
641 VBOX_WITH_DRAG_AND_DROP_GH = 1
642 endif
643endif
644# Enable support for VRDP redirection of Windows Media Player content
645ifeq ($(KBUILD_TARGET),win)
646 VBOX_WITH_MMR = 1
647endif
648## @}
649
650
651## @name Networking
652## @{
653# Use VBoxNetFlt for host interface networking.
654if1of ($(KBUILD_TARGET), darwin freebsd linux solaris win)
655 VBOX_WITH_NETFLT = 1
656 ifeq ($(KBUILD_TARGET),solaris)
657 # requires snv_159+.
658 VBOX_WITH_NETFLT_CROSSBOW = 1
659 endif
660 # Use VBoxNetAdp for host only networking.
661 if1of ($(KBUILD_TARGET), darwin freebsd linux solaris) ## @todo this should be set and used on windows too.
662 VBOX_WITH_NETADP = 1
663 endif
664endif
665# Enables the UDP tunnel transport.
666VBOX_WITH_UDPTUNNEL = 1
667# Enable the netshaper support
668VBOX_WITH_NETSHAPER = 1
669# Enable Virtual Distributed Ethernet or not.
670if1of ($(KBUILD_TARGET), freebsd linux)
671 VBOX_WITH_VDE = 1
672endif
673## @}
674
675
676## @name Extension pack
677## @{
678# Enables the extension pack feature.
679VBOX_WITH_EXTPACK = 1
680# Enables separating code into the Oracle VM VirtualBox Extension Pack, dubbed PUEL.
681VBOX_WITH_EXTPACK_PUEL = 1
682# Enables building+packing the Oracle VM VirtualBox Extension Pack, includes VBOX_WITH_EXTPACK_PUEL
683VBOX_WITH_EXTPACK_PUEL_BUILD = 1
684# Enable the BusMouse sample extension pack.
685#VBOX_WITH_EXTPACK_BUSMOUSESAMPLE = 1
686# Enable the VNC server extension pack (GPL only).
687#VBOX_WITH_EXTPACK_VNC = 1
688## @}
689
690## @name Misc
691## @{
692# Enable Seamless mode
693VBOX_X11_SEAMLESS_GUEST = 1
694# Enables all the doxgen bits.
695VBOX_WITH_ALL_DOXYGEN_TARGETS = 1
696# Set this to skip installing the redistributable compiler runtime.
697#VBOX_WITHOUT_COMPILER_REDIST = 1
698# Enables VMMR0.r0 (++) loading using the native loader on solaris.
699# Good for debugging and analysis. Experimental.
700#VBOX_WITH_NATIVE_SOLARIS_LOADING = 1
701# Set this to enable user mode dtrace probes.
702if1of ($(KBUILD_TARGET), darwin linux solaris)
703 VBOX_WITH_DTRACE_R3 = 1
704endif
705# Set this to enable kernel driver dtrace probes.
706if1of ($(KBUILD_TARGET), darwin solaris)
707 VBOX_WITH_DTRACE_R0DRV = 1
708endif
709# Set this to enable dtrace probes in platform agnostic kernel code.
710ifn1of ($(KBUILD_TARGET), os2)
711 VBOX_WITH_DTRACE_R0 = 1
712endif
713# Set this to enable dtrace probes raw-mode context code.
714if1of ($(KBUILD_TARGET), linux solaris)
715 VBOX_WITH_DTRACE_RC = 1
716endif
717# Set this to enable support for dtrace probes in guest code.
718#VBOX_WITH_DTRACE_GST = 1
719# Set this to indicate that the host ships with DTrace.
720if1of ($(KBUILD_TARGET), darwin solaris freebsd)
721 VBOX_WITH_NATIVE_DTRACE = 1
722endif
723## @}
724
725
726## @name Compiler and linker config
727## @{
728# For treating compiler and linker warnings as errors where possible.
729if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), darwin.x86 darwin.amd64 linux.x86 linux.amd64 win.x86 win.amd64)
730 VBOX_WITH_WARNINGS_AS_ERRORS = 1
731endif
732# Whether we can use Open Watcom to build stuff.
733if1of ($(KBUILD_TARGET), darwin linux os2 win)
734 VBOX_WITH_OPEN_WATCOM = 1
735endif
736## @}
737
738
739## @name Hardening
740## @{
741# Enables hardening.
742# Most developers will want to disable this in their LocalConfig.kmk.
743VBOX_WITH_HARDENING = 1
744# Where the application files are (going to be) installed.
745#VBOX_PATH_APP_PRIVATE = /usr/lib/virtualbox
746ifdef VBOX_WITH_HARDENING
747 if1of ($(KBUILD_TARGET), linux solaris)
748 VBOX_PATH_APP_PRIVATE = /opt/VirtualBox
749 else ifeq ($(KBUILD_TARGET),darwin)
750 VBOX_PATH_APP_PRIVATE = /Applications/VirtualBox.app/Contents/MacOS
751 else ifeq ($(KBUILD_TARGET),freebsd)
752 VBOX_PATH_APP_PRIVATE = /usr/local/lib/virtualbox
753 else ifeq ($(KBUILD_TARGET),haiku)
754 VBOX_PATH_APP_PRIVATE = /boot/system/apps/VirtualBox
755 endif
756endif
757# Where the architecture specific application files are (going to be) installed.
758#VBOX_PATH_APP_PRIVATE_ARCH = /usr/lib/virtualbox
759ifdef VBOX_WITH_HARDENING
760 if1of ($(KBUILD_TARGET), solaris)
761 VBOX_PATH_APP_PRIVATE_ARCH_TOP = $(VBOX_PATH_APP_PRIVATE)
762 VBOX_PATH_APP_PRIVATE_ARCH = $(VBOX_PATH_APP_PRIVATE_ARCH_TOP)/$(if-expr $(KBUILD_TARGET_ARCH) == "amd64",amd64,i386)
763 else ifdef VBOX_PATH_APP_PRIVATE
764 VBOX_PATH_APP_PRIVATE_ARCH = $(VBOX_PATH_APP_PRIVATE)
765 endif
766endif
767# Where the shared libraries are (going to be) installed.
768#VBOX_PATH_SHARED_LIBS = /usr/lib
769ifdef VBOX_WITH_HARDENING
770 if1of ($(KBUILD_TARGET), solaris)
771 VBOX_PATH_SHARED_LIBS = $(VBOX_PATH_APP_PRIVATE)/$(if-expr $(KBUILD_TARGET_ARCH) == "amd64",amd64,i386)
772 else ifdef VBOX_PATH_APP_PRIVATE
773 VBOX_PATH_SHARED_LIBS = $(VBOX_PATH_APP_PRIVATE)
774 endif
775endif
776# Where the documentation is (going to be) installed.
777#VBOX_PATH_APP_DOCS = /usr/share/doc/virtualbox
778ifdef VBOX_WITH_HARDENING
779 ifdef VBOX_PATH_APP_PRIVATE
780 VBOX_PATH_APP_DOCS = $(VBOX_PATH_APP_PRIVATE)
781 endif
782endif
783# The DT_RPATH/DT_RUNPATH to embed into the binaries (ELF).
784# (This one is used for all binaries, there is no need to adjust this
785# depending on the location of the object.)
786#VBOX_WITH_RUNPATH = /usr/lib/virtualbox
787ifdef VBOX_WITH_HARDENING
788 if1of ($(KBUILD_TARGET), solaris)
789 VBOX_WITH_RUNPATH = $(VBOX_PATH_APP_PRIVATE)/$(if-expr $(KBUILD_TARGET_ARCH) == "amd64",amd64,i386)
790 else if1of ($(KBUILD_TARGET), freebsd linux)
791 VBOX_WITH_RUNPATH = $(VBOX_PATH_APP_PRIVATE)
792 endif
793endif
794# Enable use of the $ORIGIN DT_RPATH/DT_RUNPATH feature (ELF).
795# Because of the setuid usage on all ELF platforms when hardening the build
796# things gets a bit complicated since the $ORIGIN+setuid policy differs.
797#VBOX_WITH_ORIGIN = 1
798ifndef VBOX_WITH_HARDENING
799 if1of ($(KBUILD_TARGET), linux solaris)
800 VBOX_WITH_ORIGIN = 1
801 endif
802endif
803# Enable the system wide support service/daemon.
804# Very sketchy work in progress.
805#VBOX_WITH_SUPSVC = 1
806
807# Continue to support Vista w/o any service pack, at least for now.
808VBOX_WITH_VISTA_NO_SP = 1
809## @}
810
811
812# Strip binaries of release and profile builds before packing them into the installer
813# archive. When building .deb/.rpms, don't strip the symbols as they are required for
814# the debug packages containing symbols for gdb located in /usr/lib/debug.
815VBOX_DO_STRIP := $(if $(filter release profile,$(KBUILD_TYPE)),1,)
816
817
818#
819# Config items for enabling work in progress.
820#
821# It's good pratice to add stuff here even if it is currently disabled by
822# default.
823#
824# Note! Please, do *not* add stuff to the global DEFS unless it is *really*
825# necessary! The other guys will hate for it you when they have to
826# recompile everything when the feature is enabled or disabled. Put
827# the ifdefs in target or template definitions.
828#
829
830# Mask all Local APIC interrupt vectors which are set up to NMI mode when switching
831# to/from the guest in raw mode. Modern Linux kernels use the performance counter
832# to raise an NMI from time to time.
833if1of ($(KBUILD_TARGET), linux)
834 VBOX_WITH_VMMR0_DISABLE_LAPIC_NMI = 1
835endif
836## For testing deadlock detection and lock order validation.
837# If issues are found, create high priority defects and temporarily comment
838# the next line.
839VBOX_WITH_STRICT_LOCKS = 1
840
841
842#
843# Branding
844#
845VBOX_BRAND_BIOS_LOGO := $(PATH_ROOT)/src/VBox/Devices/Graphics/BIOS/puel_logo.bmp
846VBOX_BRAND_LICENSE_HTML := $(PATH_ROOT)/doc/License-gpl-2.0.html
847VBOX_BRAND_LICENSE_RTF := $(PATH_ROOT)/doc/License-gpl-2.0.rtf
848VBOX_BRAND_LICENSE_TXT := $(PATH_ROOT)/doc/License-gpl-2.0.txt
849VBOX_BRAND_LICENSE_VER :=
850VBOX_BRAND_GUI_ABOUT_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/NonOSE/about.png
851VBOX_BRAND_GUI_ABOUT_HIDPI_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/hidpi/NonOSE/about_hidpi.png
852VBOX_BRAND_GUI_ABOUT_16PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/NonOSE/about_16px.png
853VBOX_BRAND_GUI_VBOX_16PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/NonOSE/VirtualBox_16px.png
854VBOX_BRAND_GUI_VBOX_20PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/NonOSE/VirtualBox_20px.png
855VBOX_BRAND_GUI_VBOX_32PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/NonOSE/VirtualBox_32px.png
856VBOX_BRAND_GUI_VBOX_40PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/NonOSE/VirtualBox_40px.png
857VBOX_BRAND_GUI_VBOX_48PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/NonOSE/VirtualBox_48px.png
858VBOX_BRAND_GUI_VBOX_64PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/NonOSE/VirtualBox_64px.png
859VBOX_BRAND_GUI_VBOX_SVG := $(PATH_ROOT)/src/VBox/Resources/NonOSE/virtualbox.svg
860VBOX_BRAND_WIN_INST_DLGJPG := $(PATH_ROOT)/src/VBox/Installer/win/Binary/Dialog.jpg
861VBOX_BRAND_WIN_INST_EXT :=
862VBOX_BRAND_WIN_ADD_INST_DLGBMP := $(PATH_ROOT)/src/VBox/Additions/WINNT/Installer/welcome.bmp
863VBOX_BRAND_DARWIN_DISKIMAGE_DS_STORE := $(PATH_ROOT)/src/VBox/Installer/darwin/DiskImage/DS_Store
864VBOX_BRAND_DARWIN_DISKIMAGE_BG := $(PATH_ROOT)/src/VBox/Installer/darwin/DiskImage/vbox_folder.tiff
865VBOX_BRAND_DARWIN_INSTALLER_BG := $(PATH_ROOT)/src/VBox/Installer/darwin/VirtualBox_mpkg/background.tif
866
867#
868# Skip stuff.
869#
870
871ifdef VBOX_ONLY_EXTPACKS
872 # Clear some VBOX_WITH_XXX variables instead of adding ifdefs all over the place.
873 VBOX_WITH_DEBUGGER =
874 VBOX_WITH_ADDITIONS =
875 VBOX_WITH_VBOXDRV =
876 VBOX_WITH_TESTCASES =
877endif
878
879# VBOX_QUICK can be used by core developers to speed to the build
880ifdef VBOX_QUICK
881 # undefine variables by assigning blank.
882 VBOX_WITH_VALIDATIONKIT=
883 VBOX_WITH_TESTCASES=
884 VBOX_WITH_MAIN =
885 VBOX_WITH_VBOXSDL =
886 VBOX_WITH_QTGUI =
887 VBOX_WITH_DEBUGGER_GUI =
888 VBOX_WITH_DOCS =
889endif # VBOX_QUICK
890
891ifeq ($(KBUILD_TARGET),darwin)
892 # Don't bother with SDL ttf for now.
893 VBOX_WITH_SECURELABEL=
894 # We'll use the native html/help viewer.
895 VBOX_WITH_KCHMVIEWER=
896 VBOX_WITH_VRDP_RDESKTOP=
897 # Permanent (no working SDL).
898 VBOX_WITH_VBOXSDL=
899endif
900
901ifeq ($(KBUILD_TARGET),freebsd)
902 VBOX_WITH_DOCS=
903endif
904
905ifeq ($(KBUILD_TARGET),haiku)
906 # Don't bother with SDL ttf for now.
907 VBOX_WITH_SECURELABEL=
908 # We'll use the native html/help viewer.
909 VBOX_WITH_KCHMVIEWER=
910 VBOX_WITH_VRDP_RDESKTOP=
911 # Permanent (no working SDL).
912 VBOX_WITH_VBOXSDL=
913 VBOX_WITH_DOCS=
914 VBOX_WITH_VBOXDRV=
915 VBOX_WITH_VRDP=
916 VBOX_WITH_HEADLESS=
917 VBOX_WITH_VBOXSDL=
918 VBOX_WITH_QTGUI=
919# VBOX_WITH_MAIN=
920 VBOX_WITH_DOCS=
921 VBOX_WITH_ISCSI=
922 VBOX_WITH_INIP=
923 VBOX_WITH_INTERNAL_NETWORKING=
924 VBOX_WITH_PDM_ASYNC_COMPLETION=
925 VBOX_WITH_KCHMVIEWER=
926 VBOX_WITH_HARDENING=
927endif
928
929
930ifeq ($(KBUILD_TARGET),os2)
931 VBOX_WITH_WEBSERVICES=
932 VBOX_WITH_INSTALLER=
933 VBOX_WITH_SECURELABEL=
934 VBOX_WITH_VRDP_AUTHMOD=
935 VBOX_WITH_VRDP_RDESKTOP=
936 VBOX_WITH_VALIDATIONKIT=
937 VBOX_WITH_QTGUI=
938 VBOX_WITH_USB=
939 VBOX_WITH_EHCI=
940 VBOX_WITH_DOCS=
941 VBOX_WITH_PDM_ASYNC_COMPLETION=
942 VBOX_WITH_KCHMVIEWER=
943 VBOX_WITH_HARDENING=
944endif
945
946ifeq ($(KBUILD_TARGET),solaris)
947 VBOX_WITH_SECURELABEL=
948 VBOX_WITH_OGL=
949endif
950
951ifeq ($(KBUILD_TARGET),win)
952 VBOX_WITH_VRDP_RDESKTOP=
953 VBOX_WITH_KCHMVIEWER=
954endif
955
956ifn1of ($(KBUILD_TARGET_ARCH), x86 amd64)
957 VBOX_WITH_ADDITION_DRIVERS=
958 VBOX_WITH_CROGL=
959 VBOX_WITH_DEBUGGER=
960 VBOX_WITH_DOCS=
961 VBOX_WITH_EHCI=
962 VBOX_WITH_HARDENING=
963 VBOX_WITH_HEADLESS=
964 VBOX_WITH_HGCM=
965 VBOX_WITH_HGSMI=
966 VBOX_WITH_INIP=
967 VBOX_WITH_INSTALLER=
968 VBOX_WITH_INTERNAL_NETWORKING=
969 VBOX_WITH_ISCSI=
970 VBOX_WITH_KCHMVIEWER=
971 VBOX_WITH_MAIN=
972 VBOX_WITH_PDM_ASYNC_COMPLETION=
973 VBOX_WITH_QTGUI=
974 VBOX_WITH_RAW_MODE=
975 VBOX_WITH_SECURELABEL=
976 VBOX_WITH_VALIDATIONKIT=
977 VBOX_WITH_USB=
978 VBOX_WITH_VBOXDRV=
979 VBOX_WITH_VBOXSDL=
980 VBOX_WITH_WEBSERVICES=
981 VBOX_WITH_XPCOM=
982 VBOX_WITHOUT_HARDENING=1
983 # remove later:
984 VBOX_WITH_VRDP=
985 VBOX_WITH_VRDP_AUTHMOD=
986 VBOX_WITH_VRDP_RDESKTOP=
987endif
988
989
990#
991# Include automatic and local config file to override the above settings
992# and to provide defaults for the settings below this point.
993#
994ifndef AUTOCFG
995 AUTOCFG := $(wildcard $(PATH_ROOT)/AutoConfig.kmk)
996endif
997ifneq ($(AUTOCFG),)
998 include $(AUTOCFG)
999endif
1000
1001ifndef LOCALCFG
1002 LOCALCFG := $(wildcard $(PATH_ROOT)/LocalConfig.kmk)
1003 ifneq ($(LOCALCFG),)
1004 include $(LOCALCFG)
1005 endif
1006else
1007 # Ignore it if it doesn't exist.
1008 if exists "$(LOCALCFG)"
1009 include $(LOCALCFG)
1010 else
1011 $(warning LOCALCFG='$(LOCALCFG)' does not exist)
1012 override LOCALCFG :=
1013 endif
1014endif
1015
1016#
1017# Allow to overwrite the branding information from an external file
1018#
1019ifdef VBOX_BRANDING_CFG
1020 include $(VBOX_BRANDING_CFG)
1021endif
1022
1023#
1024# Bitch about old settings.
1025#
1026ifdef VBOX_WITHOUT_LINUX_COMPILER_H
1027 $(warning VBOX_WITHOUT_LINUX_COMPILER_H was renamed to VBOX_WITH_LINUX_COMPILER_H, the meaning is inverted.)
1028endif
1029
1030#
1031# Indicate VBOX_ONLY build if any of the VBOX_ONLY_* variables are set.
1032#
1033VBOX_ONLY_BUILD := $(strip $(foreach x, ADDITIONS DOCS EXTPACKS SDK VALIDATIONKIT\
1034 , $(if-expr defined(VBOX_ONLY_$(x)),VBOX_ONLY_$(x))))
1035if $(words $(VBOX_ONLY_BUILD)) > 1
1036 $(error VBox: More than one VBOX_ONLY build enabled! $(VBOX_ONLY_BUILD))
1037endif
1038
1039#
1040# For the docs build box.
1041#
1042ifdef VBOX_ONLY_DOCS
1043 VBOX_WITH_DOCS_CHM = 1
1044endif
1045
1046#
1047# Disable components that are not open sourced.
1048#
1049ifdef VBOX_OSE
1050 VBOX_WITH_VRDP=
1051 VBOX_WITH_EHCI_IMPL=
1052 VBOX_WITH_XHCI_IMPL=
1053 VBOX_WITH_USB_VIDEO_IMPL=
1054 VBOX_WITH_EXTPACK_PUEL=
1055 VBOX_WITH_EXTPACK_PUEL_BUILD=
1056 VBOX_WITH_PCI_PASSTHROUGH_IMPL=
1057 VBOX_WITH_OS2_ADDITIONS_BIN=
1058 VBOX_WITH_SECURELABEL=
1059 VBOX_WITH_KCHMVIEWER=
1060 VBOX_WITH_PLUGIN_CRYPT=
1061 ifn1of ($(KBUILD_TARGET), linux)
1062 VBOX_WITH_DOCS=
1063 VBOX_WITH_DOCS_PACKING=
1064 endif
1065 if1of ($(KBUILD_TARGET), solaris)
1066 VBOX_WITH_32_ON_64_MAIN_API=
1067 endif
1068 # Enable any translations in OSE, even partial ones.
1069 ifndef ($(VBOX_NO_DOCS_TRANSLATIONS))
1070 VBOX_WITH_DOCS_TRANSLATIONS = 1
1071 endif
1072 VBOX_WITH_VALIDATIONKIT=
1073 VBOX_WITH_INTEL_PXE=
1074 # Disable for OSE, requires snv_159+.
1075 VBOX_WITH_NETFLT_CROSSBOW=
1076 ifn1of ($(KBUILD_TARGET), darwin linux solaris win)
1077 VBOX_WITH_INSTALLER=
1078 endif
1079 if1of ($(KBUILD_TARGET), win)
1080 VBOX_WITH_VPX=
1081 endif
1082 VBOX_GUI_WITH_HIDPI=
1083 # branding
1084 VBOX_BRAND_LICENSE_HTML := $(PATH_ROOT)/doc/License-gpl-2.0.html
1085 VBOX_BRAND_LICENSE_RTF := $(PATH_ROOT)/doc/License-gpl-2.0.rtf
1086 VBOX_BRAND_LICENSE_TXT := $(PATH_ROOT)/doc/License-gpl-2.0.txt
1087 VBOX_BRAND_BIOS_LOGO := $(PATH_ROOT)/src/VBox/Devices/Graphics/BIOS/ose_logo.bmp
1088 VBOX_BRAND_GUI_ABOUT_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/about.png
1089 VBOX_BRAND_GUI_ABOUT_HIDPI_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/about.png
1090 VBOX_BRAND_GUI_ABOUT_16PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/about_16px.png
1091 VBOX_BRAND_GUI_VBOX_16PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_16px.png
1092 VBOX_BRAND_GUI_VBOX_20PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_20px.png
1093 VBOX_BRAND_GUI_VBOX_32PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_32px.png
1094 VBOX_BRAND_GUI_VBOX_40PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_40px.png
1095 VBOX_BRAND_GUI_VBOX_48PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_48px.png
1096 VBOX_BRAND_GUI_VBOX_64PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_64px.png
1097 VBOX_BRAND_GUI_CUBE_42PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_cube_42px.png
1098 VBOX_BRAND_GUI_VBOX_SVG := $(PATH_ROOT)/src/VBox/Resources/OSE/virtualbox.svg
1099endif
1100
1101#
1102# VBOX_WITHOUT_HARDENING is for developers (put in LocalConfig.kmk).
1103# Note that this is a bit rough since hardening governs more than one
1104# variable... Also note that we allow VBOX_WITH_HARDENING=1 on the
1105# command line to overrule VBOX_WITHOUT_HARDENING (the check below).
1106#
1107ifdef VBOX_WITHOUT_HARDENING
1108 VBOX_WITH_HARDENING=
1109 ifeq ($(VBOX_WITH_HARDENING),)
1110 VBOX_PATH_APP_PRIVATE=
1111 VBOX_PATH_APP_PRIVATE_ARCH=
1112 VBOX_PATH_APP_PRIVATE_ARCH_TOP=
1113 VBOX_PATH_SHARED_LIBS=
1114 VBOX_PATH_APP_DOCS=
1115 VBOX_WITH_RUNPATH=
1116 if1of ($(KBUILD_TARGET), linux solaris)
1117 VBOX_WITH_ORIGIN=1
1118 endif
1119 endif
1120endif
1121
1122#
1123# Sanitize the additions build config variables.
1124#
1125ifdef VBOX_WITH_ADDITIONS_FROM_BUILD_SERVER
1126 VBOX_WITHOUT_ADDITIONS := 1
1127 ifdef VBOX_ONLY_ADDITIONS
1128 $(error VBOX_ONLY_ADDITIONS + VBOX_WITH_ADDITIONS_FROM_BUILD_SERVER does not add up!)
1129 endif
1130endif
1131
1132ifdef VBOX_ONLY_ADDITIONS
1133 ifdef VBOX_WITHOUT_ADDITIONS
1134 $(error VBOX_ONLY_ADDITIONS + VBOX_WITHOUT_ADDITIONS does not add up!)
1135 endif
1136endif
1137
1138ifdef VBOX_WITHOUT_ADDITIONS
1139 # Zap anything that could be contradicting this.
1140 VBOX_WITH_ADDITIONS :=
1141endif
1142
1143#
1144# Sanitize the documentation build config variables.
1145#
1146ifdef VBOX_WITH_DOCS_FROM_BUILD_SERVER
1147 VBOX_WITHOUT_DOCS := 1
1148 ifdef VBOX_ONLY_DOCS
1149 $(error VBOX_ONLY_DOCS + VBOX_WITH_DOCS_FROM_BUILD_SERVER does not add up!)
1150 endif
1151endif
1152
1153ifdef VBOX_ONLY_DOCS
1154 ifdef VBOX_WITHOUT_DOCS
1155 $(error VBOX_ONLY_DOCS + VBOX_WITHOUT_DOCS does not add up!)
1156 endif
1157endif
1158
1159ifdef VBOX_WITHOUT_DOCS
1160 # Zap anything that could be contradicting this.
1161 VBOX_WITH_DOCS :=
1162 VBOX_WITH_DOCS_CHM :=
1163endif
1164
1165#
1166# Disable components for headless
1167#
1168ifdef VBOX_HEADLESS
1169 VBOX_WITH_QTGUI=
1170 VBOX_WITH_VBOXSDL=
1171 VBOX_WITH_OGL=
1172 VBOX_WITH_KCHMVIEWER=
1173 VBOX_WITH_VRDP_RDESKTOP=
1174endif
1175
1176#
1177# Undefined VBOX_WITH_MAIN implies exclusion of a few more items.
1178#
1179ifndef VBOX_WITH_MAIN
1180 VBOX_WITH_VBOXSDL=
1181 VBOX_WITH_QTGUI=
1182 VBOX_WITH_DEBUGGER_GUI=
1183 VBOX_WITH_HEADLESS=
1184 ifdef VBOX_ONLY_DOCS
1185 $(error Oh, does VBOX_ONLY_DOCS actually end up here. sweet.)
1186 endif
1187 VBOX_WITH_DOCS=
1188endif
1189
1190ifndef VBOX_WITH_QTGUI
1191 VBOX_WITH_KCHMVIEWER=
1192endif
1193
1194ifdef VBOX_WITH_EXTPACK_PUEL_BUILD
1195 VBOX_WITH_EXTPACK_PUEL = 1
1196endif
1197
1198ifdef VBOX_WITH_TESTSUITE
1199 $(warning VBOX_WITH_TESTSUITE was renamed to VBOX_WITH_VALIDATIONKIT)
1200 VBOX_WITH_VALIDATIONKIT = $(VBOX_WITH_TESTSUITE)
1201endif
1202
1203#
1204# Mark OSE builds clearly, helps figuring out limitations more easily.
1205#
1206ifdef VBOX_OSE
1207# This can be overridden (e.g. in LocalConfig.kmk) by whoever publishes a set
1208# of VirtualBox binaries. We request though that you always use something that
1209# clearly identifies your build and makes it clear that it is not one done by
1210# the VirtualBox team.
1211 VBOX_BUILD_PUBLISHER = _OSE
1212endif
1213
1214# Keep in sync with G_virtualBoxPackage in glue-jaxws.xsl and glue-java.xsl
1215# Changed with every new version, so beware!
1216if $(VBOX_VERSION_BUILD) < 51
1217 VBOX_API_VERSION = $(VBOX_VERSION_MAJOR)_$(VBOX_VERSION_MINOR)
1218else
1219 VBOX_API_VERSION = $(VBOX_VERSION_MAJOR)_$(expr $(VBOX_VERSION_MINOR) + 1)
1220endif
1221VBOX_API_SUFFIX = _$(VBOX_API_VERSION)
1222VBOX_JAVA_PACKAGE = org.virtualbox$(VBOX_API_SUFFIX)
1223
1224#
1225# Derived / helper config indicators. Not configurable.
1226#
1227
1228# Use the OpenGL module in qt when the video hardware acceleartion feature
1229# is enabled.
1230if defined(VBOX_WITH_VIDEOHWACCEL) && defined(VBOX_WITH_QTGUI)
1231 VBOX_GUI_USE_QGL = 1
1232else
1233 VBOX_GUI_USE_QGL=
1234endif
1235
1236#
1237# Image and object format config.
1238#
1239if1of ($(KBUILD_TARGET), freebsd haiku linux netbsd openbsd solaris)
1240 VBOX_LDR_FMT = elf
1241endif
1242ifeq ($(KBUILD_TARGET),darwin)
1243 VBOX_LDR_FMT = macho
1244endif
1245ifeq ($(KBUILD_TARGET),os2)
1246 VBOX_LDR_FMT = lx
1247 VBOX_LDR_FMT32 = lx
1248 VBOX_LDR_FMT64 = elf
1249 DONT_USE_YASM = 1 # yasm doesn't implement omf yet.
1250endif
1251ifeq ($(KBUILD_TARGET),win)
1252 VBOX_LDR_FMT = pe
1253endif
1254VBOX_LDR_FMT32 ?= $(VBOX_LDR_FMT)
1255VBOX_LDR_FMT64 ?= $(VBOX_LDR_FMT)
1256
1257#
1258# Assembler setup.
1259#
1260# This is a bit complicated since we have to support two different assmblers
1261# (yasm/nasm) and possibly two different formats (32-bit/64-bit).
1262#
1263ifeq ($(VBOX_LDR_FMT),elf)
1264 ifeq ($(KBUILD_TARGET_ARCH),x86)
1265VBOX_ASFLAGS_FMT = -f elf32 -DASM_FORMAT_ELF
1266 else
1267VBOX_ASFLAGS_FMT = -f elf64 -DASM_FORMAT_ELF
1268 endif
1269 VBOX_ASFLAGS_DBFINFO = -g dwarf2
1270endif
1271ifeq ($(VBOX_LDR_FMT),lx)
1272 VBOX_ASFLAGS_FMT = -f obj -DASM_FORMAT_OMF
1273 VBOX_ASFLAGS_DBFINFO = -g stabs
1274endif
1275ifeq ($(VBOX_LDR_FMT),macho)
1276 ifeq ($(KBUILD_TARGET_ARCH),x86)
1277 VBOX_ASFLAGS_FMT = -f macho32 -DASM_FORMAT_MACHO
1278 else
1279 VBOX_ASFLAGS_FMT = -f macho64 -DASM_FORMAT_MACHO
1280 endif
1281 VBOX_ASFLAGS_DBFINFO = -g dwarf2
1282endif
1283ifeq ($(VBOX_LDR_FMT),pe)
1284 ifeq ($(KBUILD_TARGET_ARCH),x86)
1285VBOX_ASFLAGS_FMT = -f win32 -DASM_FORMAT_PE
1286 else
1287VBOX_ASFLAGS_FMT = -f win64 -DASM_FORMAT_PE
1288 endif
1289VBOX_ASFLAGS_DBFINFO = -g cv8
1290endif
1291ifndef VBOX_ASFLAGS_FMT
1292 $(error VBOX_ASFLAGS_FMT is not defined. VBOX_LDR_FMT=$(VBOX_LDR_FMT))
1293endif
1294
1295ifeq ($(VBOX_LDR_FMT32),elf)
1296 VBOX_ASFLAGS_FMT32 = -f elf32 -DASM_FORMAT_ELF
1297 VBOX_ASFLAGS_DBFINFO32 = -g dwarf2
1298endif
1299ifeq ($(VBOX_LDR_FMT32),lx)
1300 VBOX_ASFLAGS_FMT32 = -f obj -DASM_FORMAT_OMF
1301 VBOX_ASFLAGS_DBFINFO32 = -g stabs
1302endif
1303ifeq ($(VBOX_LDR_FMT32),macho)
1304 VBOX_ASFLAGS_FMT32 = -f macho32 -DASM_FORMAT_MACHO
1305 VBOX_ASFLAGS_DBFINFO32 = -g dwarf2
1306endif
1307ifeq ($(VBOX_LDR_FMT32),pe)
1308 VBOX_ASFLAGS_FMT32 = -f win32 -DASM_FORMAT_PE
1309 VBOX_ASFLAGS_DBFINFO32 = -g cv8
1310endif
1311ifndef VBOX_ASFLAGS_FMT32
1312 $(error VBOX_ASFLAGS_FMT32 is not defined. VBOX_LDR_FMT32=$(VBOX_LDR_FMT32))
1313endif
1314
1315ifeq ($(VBOX_LDR_FMT64),elf)
1316 VBOX_ASFLAGS_FMT64 = -f elf64 -DASM_FORMAT_ELF
1317 VBOX_ASFLAGS_DBFINFO64 = -g dwarf2
1318endif
1319ifeq ($(VBOX_LDR_FMT64),macho)
1320 VBOX_ASFLAGS_FMT64 = -f macho64 -DASM_FORMAT_MACHO
1321 VBOX_ASFLAGS_DBFINFO64 = -g dwarf2
1322endif
1323ifeq ($(VBOX_LDR_FMT64),pe)
1324 VBOX_ASFLAGS_FMT64 = -f win64 -DASM_FORMAT_PE
1325 VBOX_ASFLAGS_DBFINFO64 = -g cv8
1326endif
1327ifndef VBOX_ASFLAGS_FMT64
1328 $(error VBOX_ASFLAGS_FMT64 is not defined. VBOX_LDR_FMT64=$(VBOX_LDR_FMT64))
1329endif
1330
1331ifndef DONT_USE_YASM
1332 VBOX_ASTOOL = YASM
1333 VBOX_LDR_FMT_2_YASM_DBGINFO.elf = -g dwarf2
1334 VBOX_LDR_FMT_2_YASM_DBGINFO.lx = -g stabs
1335 VBOX_LDR_FMT_2_YASM_DBGINFO.macho =
1336 VBOX_LDR_FMT_2_YASM_DBGINFO.pe = -g cv8
1337 VBOX_ASFLAGS = $(VBOX_ASFLAGS_FMT) -D__YASM__ -Worphan-labels $(VBOX_YASM_Wno-segreg-in-64bit) $(VBOX_LDR_FMT_2_YASM_DBGINFO.$(VBOX_LDR_FMT))
1338 VBOX_ASFLAGS32 = $(VBOX_ASFLAGS_FMT32) -D__YASM__ -Worphan-labels $(VBOX_YASM_Wno-segreg-in-64bit) $(VBOX_LDR_FMT_2_YASM_DBGINFO.$(VBOX_LDR_FMT32))
1339 VBOX_ASFLAGS64 = $(VBOX_ASFLAGS_FMT64) -D__YASM__ -Worphan-labels $(VBOX_YASM_Wno-segreg-in-64bit) $(VBOX_LDR_FMT_2_YASM_DBGINFO.$(VBOX_LDR_FMT64))
1340else
1341 VBOX_ASTOOL = NASM
1342 VBOX_ASFLAGS = $(subst elf32,elf,$(VBOX_ASFLAGS_FMT)) -D__NASM__ -w+orphan-labels -g
1343 VBOX_ASFLAGS32 = $(subst elf32,elf,$(VBOX_ASFLAGS_FMT32)) -D__NASM__ -w+orphan-labels -g
1344 VBOX_ASFLAGS64 = $(VBOX_ASFLAGS_FMT64) -D__NASM__ -w+orphan-labels -g
1345endif
1346
1347#
1348# Windows only has mingw handy. On *nix we have to deal with cross compiling
1349# 32-bit targets on 64-bit platforms, meaning we'll be using gcc32/g++32.
1350# In the latter case we'll also have to disable all the all the R0 driver related stuff.
1351#
1352ifndef VBOX_GCC_TOOL
1353 ifeq ($(KBUILD_TARGET),win)
1354 ifeq ($(KBUILD_TARGET_ARCH),x86)
1355 VBOX_GCC_TOOL := MINGW32
1356 TOOL_MINGW32_CFLAGS := $(UNDEFINED) # override -g
1357 else
1358 VBOX_GCC_TOOL := MINGWW64
1359 endif
1360 else ifeq ($(KBUILD_TARGET),os2)
1361 VBOX_GCC_TOOL := GXX3OMF
1362 else ifeq ($(KBUILD_TARGET),darwin)
1363 VBOX_GCC_TOOL := GXX4MACHO
1364 else ifeq ($(KBUILD_TARGET),haiku)
1365 # Haiku shouldn't pass '-r' to the linker by default
1366 VBOX_GCC_TOOL := GXX3PLAIN
1367 else ifeq ($(KBUILD_TARGET),solaris)
1368 VBOX_GCC_TOOL := GXX3PLAIN
1369 VBOX_GCC32_TOOL := GXX3PLAIN
1370 ifeq ($(KBUILD_HOST),solaris)
1371 TOOL_GXX3PLAIN_LD_SYSMOD ?= /usr/ccs/bin/ld
1372 endif
1373 else
1374 VBOX_GCC_TOOL := GXX3
1375 ifeq ($(KBUILD_TARGET_ARCH).$(KBUILD_HOST_ARCH),x86.amd64) ## @todo mixing target/host here!
1376 VBOX_GCC_TOOL := GXX32
1377 VBOX_WITH_VBOXDRV=
1378 else ifeq ($(KBUILD_TARGET_ARCH).$(KBUILD_HOST_ARCH),amd64.x86)
1379 VBOX_GCC_TOOL := GXX64
1380 VBOX_WITH_VBOXDRV=
1381 endif
1382 endif
1383endif
1384ifndef VBOX_GCC32_TOOL
1385 ifeq ($(KBUILD_TARGET_ARCH),x86)
1386 VBOX_GCC32_TOOL := $(VBOX_GCC_TOOL)
1387 else ifeq ($(KBUILD_TARGET),win)
1388 VBOX_GCC32_TOOL := MINGW32
1389 else
1390 VBOX_GCC32_TOOL := GXX32
1391 endif
1392endif
1393
1394#
1395# Decide which Visual C++ compiler version we're using by default.
1396#
1397ifndef VBOX_VCC_TOOL_STEM
1398 VBOX_VCC_TOOL_STEM := VCC100
1399else ifn1of ($(VBOX_VCC_TOOL_STEM), VCC100 VCC110)
1400 $(error VBox: VBOX_VCC_TOOL_STEM='$(VBOX_VCC_TOOL_STEM)' is not supported, only VCC100 and VCC110 is)
1401endif
1402ifndef VBOX_VCC_TOOL
1403 VBOX_VCC_TOOL := $(VBOX_VCC_TOOL_STEM)$(toupper $(KBUILD_TARGET_ARCH))
1404endif
1405
1406#
1407# The kBuild tools and SDKs are using PATH_DEVTOOLS, PATH_DEVTOOLS_BLD
1408# and PATH_DEVTOOLS_TRG to find things if we give them specific locations.
1409#
1410PATH_DEVTOOLS ?= $(PATH_ROOT)/tools
1411PATH_DEVTOOLS := $(abspath $(PATH_DEVTOOLS))
1412PATH_DEVTOOLS_BLD ?= $(PATH_DEVTOOLS)/$(KBUILD_HOST).$(KBUILD_HOST_ARCH)
1413PATH_DEVTOOLS_TRG ?= $(PATH_DEVTOOLS)/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)
1414
1415## @todo Remove the default tool crap here!
1416TOOL = $(VBOX_GCC_TOOL)
1417TOOL.win.x86 = $(VBOX_VCC_TOOL_STEM)X86
1418TOOL.win.amd64 = $(VBOX_VCC_TOOL_STEM)AMD64
1419ASTOOL = $(VBOX_ASTOOL)
1420
1421#
1422# Setup the global defines and includes.
1423#
1424# Note! The __SOMETHING__ #defines are deprecated as they violate the C/C++ specs.
1425#
1426INCS += $(PATH_ROOT)/include $(PATH_OUT)
1427DEFS += VBOX
1428DEFS.debug := DEBUG DEBUG_$(subst $(subst _, ,_),_,$(USERNAME)) DEBUG_USERNAME=$(subst $(subst _, ,_),_,$(USERNAME))
1429DEFS.dbgopt = $(DEFS.debug)
1430DEFS.profile = VBOX_WITH_STATISTICS
1431DEFS.strict = RT_STRICT VBOX_STRICT
1432DEFS.x86 = RT_ARCH_X86 __X86__
1433DEFS.amd64 = RT_ARCH_AMD64 __AMD64__
1434DEFS.darwin = RT_OS_DARWIN __DARWIN__
1435DEFS.freebsd = RT_OS_FREEBSD __FREEBSD__
1436DEFS.haiku = RT_OS_HAIKU
1437DEFS.linux = RT_OS_LINUX _FILE_OFFSET_BITS=64
1438DEFS.netbsd = RT_OS_NETBSD
1439DEFS.openbsd = RT_OS_OPENBSD
1440DEFS.os2 = RT_OS_OS2 __OS2__
1441DEFS.solaris = RT_OS_SOLARIS _FILE_OFFSET_BITS=64
1442DEFS.win = RT_OS_WINDOWS __WIN__
1443DEFS.win.x86 = __WIN32__
1444DEFS.win.amd64 = __WIN64__
1445# optional defines (use environment or make commandline)
1446ifdef VBOX_WITH_STATISTICS
1447 DEFS += VBOX_WITH_STATISTICS
1448endif
1449ifdef VBOX_STRICT
1450 DEFS += VBOX_STRICT
1451endif
1452ifdef LOG_ENABLED
1453 DEFS += LOG_ENABLED
1454endif
1455ifdef VBOX_OSE
1456 DEFS += VBOX_OSE
1457endif
1458ifdef VBOX_WITH_64_BITS_GUESTS
1459 DEFS += VBOX_WITH_64_BITS_GUESTS
1460endif
1461
1462# Don't flood CDEFS, old MASMs doesn't like too many defines.
1463ifdef VBOX_WITH_DEBUGGER
1464 DEFS += VBOX_WITH_DEBUGGER
1465endif
1466ifdef VBOX_WITH_HARDENING
1467 CDEFS += VBOX_WITH_HARDENING
1468endif
1469if defined(VBOX_WITH_STRICT_LOCKS) && ($(KBUILD_TYPE) == "debug" || $(KBUILD_TYPE) == "strict")
1470 CDEFS += RT_LOCK_STRICT RT_LOCK_STRICT_ORDER
1471endif
1472ifdef VBOX_WITH_EF_WRAPS
1473 CDEFS += RTMEM_WRAP_TO_EF_APIS RTMEM_WRAP_SOME_NEW_AND_DELETE_TO_EF
1474endif
1475
1476# Quoted strings should not be passed to the assemblers since they might not
1477# subscribe to C preprocessing semantics.
1478ifdef VBOX_PATH_APP_PRIVATE
1479 CDEFS += RTPATH_APP_PRIVATE=\"$(VBOX_PATH_APP_PRIVATE)\"
1480endif
1481ifdef VBOX_PATH_APP_PRIVATE_ARCH
1482 CDEFS += RTPATH_APP_PRIVATE_ARCH=\"$(VBOX_PATH_APP_PRIVATE_ARCH)\"
1483endif
1484ifdef VBOX_PATH_APP_PRIVATE_ARCH_TOP
1485 CDEFS += RTPATH_APP_PRIVATE_ARCH_TOP=\"$(VBOX_PATH_APP_PRIVATE_ARCH_TOP)\"
1486endif
1487ifdef VBOX_PATH_SHARED_LIBS
1488 CDEFS += RTPATH_SHARED_LIBS=\"$(VBOX_PATH_SHARED_LIBS)\"
1489endif
1490ifdef VBOX_PATH_APP_DOCS
1491 CDEFS += RTPATH_APP_DOCS=\"$(VBOX_PATH_APP_DOCS)\"
1492endif
1493CXXDEFS += $(CDEFS)
1494OBJCDEFS += $(CDEFS)
1495
1496USES += dtrace
1497
1498
1499#
1500# Compiler optimization flags.
1501#
1502VBOX_GCC_WARN ?= -Wall $(VBOX_GCC_Wextra) $(VBOX_GCC_Wno-missing-field-initializers) -Wno-unused -Wno-trigraphs $(VBOX_GCC_fdiagnostics-show-option) $(VBOX_GCC_Wno-unused-parameter)
1503VBOX_GCC_WARN_PEDANTIC = -Wshadow $(VBOX_GCC_WARN) -Wno-long-long
1504ifdef VBOX_WITH_MASOCHISTIC_WARNINGS
1505 VBOX_GCC_WARN_PEDANTIC += -Wunused-variable -Wunused-function -Wunused-label -Wunused-parameter
1506endif
1507VBOX_GCC_PEDANTIC_CXX ?= -pedantic -Wshadow $(VBOX_GCC_WARN_PEDANTIC) -Wno-long-long $(VBOX_GCC_Wno-delete-non-virtual-dtor)
1508VBOX_GCC_PEDANTIC_C ?= -pedantic -Wshadow $(VBOX_GCC_WARN_PEDANTIC) -Wno-long-long -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -Werror-implicit-function-declaration
1509ifeq ($(KBUILD_TARGET),win)
1510 VBOX_C_CXX_FLAGS_NO_UNUSED_PARAMETERS = #-Wdxxxx
1511else
1512 VBOX_C_CXX_FLAGS_NO_UNUSED_PARAMETERS = -Wno-unused-parameter
1513endif
1514ifeq ($(KBUILD_TYPE),debug)
1515 VBOX_GCC_FP ?= -fno-omit-frame-pointer
1516 VBOX_GCC_OPT ?= -O0
1517 VBOX_VCC_FP ?= -Oy-
1518 VBOX_VCC_OPT ?=
1519 VBOX_GCC_R0_FP ?= -fno-omit-frame-pointer -fno-optimize-sibling-calls
1520 VBOX_GCC_R0_OPT ?= -O2
1521 VBOX_VCC_R0_FP ?= -Oy-
1522 VBOX_VCC_R0_OPT ?=
1523 VBOX_GCC_GC_FP ?= -fno-omit-frame-pointer -fno-optimize-sibling-calls
1524 VBOX_GCC_GC_OPT ?= -O2
1525 VBOX_VCC_GC_FP ?= -Oy-
1526 VBOX_VCC_GC_OPT ?=
1527else
1528 # We should use -fomit-frame-pointer for GCC / -Oy for VCC.
1529 # -funwind-tables provides support for backtraces in gdb then.
1530 VBOX_GCC_FP ?= -fno-omit-frame-pointer
1531 VBOX_GCC_OPT ?= -O2 $(VBOX_GCC_mtune-generic)
1532 VBOX_VCC_FP ?= -Oy-
1533 VBOX_VCC_OPT ?= -O2
1534 VBOX_GCC_R0_FP ?= -fno-omit-frame-pointer
1535 VBOX_GCC_R0_OPT ?= -O2 $(VBOX_GCC_mtune-generic)
1536 VBOX_VCC_R0_FP ?= -Oy-
1537 VBOX_VCC_R0_OPT ?= -O2
1538 VBOX_GCC_GC_FP ?= -fno-omit-frame-pointer
1539 VBOX_GCC_GC_OPT ?= -O2 $(VBOX_GCC_mtune-generic)
1540 VBOX_VCC_GC_FP ?= -Oy-
1541 VBOX_VCC_GC_OPT ?= -O2
1542endif
1543ifeq ($(KBUILD_TARGET_ARCH),x86)
1544 ifneq ($(KBUILD_TARGET),darwin)
1545 # (The '<=' operator is for prepending (kmk specific).)
1546 VBOX_GCC_OPT <= -march=i586
1547 endif
1548endif
1549
1550
1551#
1552# Select the CRT type we're using with Microsoft Visual C++.
1553#
1554ifdef VBOX_WITH_DEBUG_VCC_CRT
1555 VBOX_VCC_CRT_TYPE = d
1556 VBOX_VCC_CRT_TYPE_N =
1557else
1558 VBOX_VCC_CRT_TYPE =
1559 VBOX_VCC_CRT_TYPE_N = d
1560endif
1561
1562#
1563# Decide which Windows DDK to use by default.
1564#
1565ifeq ($(VBOX_VCC_TOOL_STEM),VCC110)
1566 VBOX_WINDDK ?= WINDDK80
1567else
1568 VBOX_WINDDK ?= WINDDK71
1569endif
1570VBOX_WINDDK_WLH ?= $(VBOX_WINDDK)WLH
1571
1572VBOX_WINDDK_GST ?= $(VBOX_WINDDK)
1573VBOX_WINDDK_GST_W8 ?= WINDDK80W8
1574VBOX_WINDDK_GST_W7 ?= $(VBOX_WINDDK_GST)W7
1575VBOX_WINDDK_GST_WLH ?= $(VBOX_WINDDK_GST)WLH
1576VBOX_WINDDK_GST_W2K3 ?= WINDDK71WNET
1577ifeq ($(KBUILD_TARGET_ARCH),x86)
1578 VBOX_WINDDK_GST_WXP ?= WINDDK71WXP
1579 VBOX_WINDDK_GST_W2K ?= $(VBOX_WINDDK_GST_WXP)
1580 VBOX_WINDDK_GST_NT4 ?= $(VBOX_WINDDK_GST_WXP)
1581else
1582 VBOX_WINDDK_GST_WXP ?= $(VBOX_WINDDK_GST_W2K3)
1583 VBOX_WINDDK_GST_W2K ?= $(VBOX_WINDDK_GST_W2K3)
1584 VBOX_WINDDK_GST_NT4 ?= $(VBOX_WINDDK_GST_W2K3)
1585endif
1586
1587
1588#
1589# Decide which Windows SDK to use by default.
1590#
1591ifeq ($(VBOX_VCC_TOOL_STEM),VCC110)
1592 VBOX_WINPSDK ?= WINPSDK80
1593else
1594 VBOX_WINPSDK ?= WINPSDK71
1595endif
1596VBOX_WINPSDK_GST ?= $(VBOX_WINPSDK)
1597VBOX_WINPSDK_GST_W8 ?= WINPSDK80
1598VBOX_WINPSDK_GST_W7 ?= $(VBOX_WINPSDK_GST)
1599VBOX_WINPSDK_GST_WLH ?= $(VBOX_WINPSDK_GST)
1600VBOX_WINPSDK_GST_WXP ?= $(VBOX_WINPSDK_GST)
1601ifeq ($(KBUILD_TARGET_ARCH),x86)
1602 VBOX_WINPSDK_GST_W2K ?= $(VBOX_WINPSDK_GST)
1603 VBOX_WINPSDK_GST_NT4 ?= $(VBOX_WINPSDK_GST)
1604else
1605 VBOX_WINPSDK_GST_W2K ?= $(VBOX_WINPSDK_GST_WXP)
1606 VBOX_WINPSDK_GST_NT4 ?= $(VBOX_WINPSDK_GST_WXP)
1607endif
1608
1609
1610#
1611# ARCH_BITS_DEFS.
1612#
1613if1of ($(KBUILD_TARGET_ARCH),amd64 sparc64)
1614 VBOX_HC_ARCH_BITS := 64
1615 ARCH_BITS_DEFS := HC_ARCH_BITS=64
1616else if1of ($(KBUILD_TARGET_ARCH),x86 sparc32)
1617 VBOX_HC_ARCH_BITS := 32
1618 ARCH_BITS_DEFS := HC_ARCH_BITS=32
1619else
1620 $(error VBox: KBUILD_TARGET_ARCH=$(KBUILD_TARGET_ARCH))
1621endif
1622
1623ifdef VBOX_WITH_64_BITS_GUESTS
1624 VBOX_GC_ARCH_BITS_DEFS := GC_ARCH_BITS=64
1625else
1626 VBOX_GC_ARCH_BITS_DEFS := GC_ARCH_BITS=32
1627endif
1628ARCH_BITS_DEFS += $(VBOX_GC_ARCH_BITS_DEFS)
1629
1630#
1631# Add the output dir(s) to the dynamic loader search path.
1632#
1633if1of ($(KBUILD_HOST), freebsd linux netbsd openbsd solaris)
1634 export LD_LIBRARY_PATH:=$(PATH_STAGE_BIN):$(PATH_STAGE_LIB):$(LD_LIBRARY_PATH)
1635endif
1636ifeq ($(KBUILD_HOST),haiku)
1637 export LIBRARY_PATH:=$(PATH_STAGE_BIN):$(PATH_STAGE_LIB):$(LIBRARY_PATH)
1638endif
1639ifeq ($(KBUILD_HOST),os2)
1640 #fixme! export BEGINLIBPATH:=$(PATH_STAGE_BIN);$(PATH_STAGE_LIB);$(BEGINLIBPATH)
1641endif
1642ifeq ($(KBUILD_HOST),win)
1643 # This check is a bit hacky, but avoids problems with PATH being changed
1644 # again when the makefiles are reread because some automatically generated
1645 # makefile has been modified.
1646 ifeq ($(findstring $(PATH_STAGE_BIN);$(PATH_STAGE_LIB);,$(PATH)),)
1647 export PATH:=$(PATH_STAGE_BIN);$(PATH_STAGE_LIB);$(PATH)
1648 endif
1649endif
1650
1651#
1652# Common libraries and tools.
1653#
1654ifeq ($(KBUILD_TARGET),darwin)
1655 LIB_RUNTIME = $(PATH_STAGE_BIN)/VBoxRT.dylib
1656 LIB_RUNTIME_EF = #$(PATH_STAGE_LIB)/RuntimeEFCPP.a
1657 VBOX_LIB_RUNTIME_X86 = $(PATH_STAGE_BIN)/VBoxRT-x86.dylib
1658 LIB_KPROFILE = $(PATH_STAGE_BIN)/kPrf2.dylib
1659 LIB_VMM = $(PATH_STAGE_BIN)/VBoxVMM.dylib
1660 LIB_VMMGC = $(PATH_STAGE_BIN)/VMMGC.gc
1661 LIB_REM = $(PATH_STAGE_LIB)/VBoxREM.dylib
1662 LIB_XPCOM = $(PATH_STAGE_BIN)/VBoxXPCOM.dylib
1663 VBOX_LIB_XPCOM_X86 = $(PATH_STAGE_BIN)/VBoxXPCOM-x86.dylib
1664 LIB_DDU = $(PATH_STAGE_BIN)/VBoxDDU.dylib
1665endif
1666if1of ($(KBUILD_TARGET), freebsd haiku linux netbsd openbsd solaris)
1667 LIB_RUNTIME = $(PATH_STAGE_BIN)/VBoxRT.so
1668 LIB_RUNTIME_EF = $(PATH_STAGE_LIB)/RuntimeEFCPP.a
1669 VBOX_LIB_RUNTIME_X86 = $(PATH_STAGE_BIN)/VBoxRT-x86.so
1670 LIB_KPROFILE = $(PATH_STAGE_BIN)/kPrf2.so
1671 LIB_VMM = $(PATH_STAGE_BIN)/VBoxVMM.so
1672 LIB_VMMGC = $(PATH_STAGE_BIN)/VMMGC.gc
1673 LIB_REM = $(PATH_STAGE_LIB)/VBoxREM.so
1674 LIB_XPCOM = $(PATH_STAGE_BIN)/VBoxXPCOM.so
1675 VBOX_LIB_XPCOM_X86 = $(PATH_STAGE_BIN)/VBoxXPCOM-x86.so
1676 LIB_DDU = $(PATH_STAGE_BIN)/VBoxDDU.so
1677endif
1678ifeq ($(KBUILD_TARGET),os2)
1679 LIB_RUNTIME = $(PATH_STAGE_BIN)/VBoxRT.dll
1680 LIB_RUNTIME_EF = #$(PATH_STAGE_LIB)/RuntimeEFCPP.a
1681 VBOX_LIB_RUNTIME_X86 = $(PATH_STAGE_BIN)/VBoxRT-x86.dll
1682 LIB_KPROFILE = $(PATH_STAGE_BIN)/kPrf2.dll
1683 LIB_VMM = $(PATH_STAGE_BIN)/VBoxVMM.dll
1684 LIB_VMMGC = $(PATH_STAGE_LIB)/VMMRCImp.lib
1685 LIB_REM = $(PATH_STAGE_LIB)/VBoxREMImp.lib
1686 LIB_XPCOM = $(PATH_STAGE_BIN)/VBoxXCOM.dll
1687 VBOX_LIB_XPCOM_X86 = $(PATH_STAGE_BIN)/VBoxXPCOM-x86.dll
1688 LIB_DDU = $(PATH_STAGE_BIN)/VBoxDDU.dll
1689 VBOX_OBJ_SYS0 = $(PATH_OBJ)/RuntimeR0/os2/sys0.obj
1690endif
1691ifeq ($(KBUILD_TARGET),win)
1692 LIB_RUNTIME = $(PATH_STAGE_LIB)/VBoxRT.lib
1693 LIB_RUNTIME_EF = #$(PATH_STAGE_LIB)/RuntimeEFCPP.lib
1694 VBOX_LIB_RUNTIME_X86 = $(PATH_STAGE_LIB)/VBoxRT-x86.lib
1695 LIB_KPROFILE = $(PATH_STAGE_LIB)/kPrf2.lib
1696 LIB_VMM = $(PATH_STAGE_LIB)/VBoxVMM.lib
1697 LIB_VMMGC = $(PATH_OBJ)/VMMRC/VMMGC.lib
1698 LIB_REM = $(PATH_STAGE_LIB)/VBoxREMImp.lib
1699 LIB_XPCOM = $(PATH_STAGE_BIN)/VBoxXPCOM.lib
1700 VBOX_LIB_XPCOM_X86 = $(PATH_STAGE_BIN)/VBoxXPCOM-x86.lib
1701 LIB_DDU = $(PATH_STAGE_LIB)/VBoxDDU.lib
1702endif
1703if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), win.amd64 linux.amd64)
1704 VBOX_LIB_VMM_LAZY = $(PATH_STAGE_LIB)/VMMR3LazyImp$(VBOX_SUFF_LIB)
1705else
1706 VBOX_LIB_VMM_LAZY = $(LIB_VMM)
1707endif
1708VBOX_LIB_SUPHARDENED = $(PATH_STAGE_LIB)/SUPR3HardenedStatic$(VBOX_SUFF_LIB)
1709VBOX_LIB_RUNTIME_STATIC = $(PATH_STAGE_LIB)/RuntimeR3$(VBOX_SUFF_LIB)
1710
1711ifndef VBOX_WITH_REM
1712 LIB_REM :=
1713endif
1714
1715# Python
1716ifndef VBOX_BLD_PYTHON
1717 if1of ($(KBUILD_HOST), win)
1718 VBOX_BLD_PYTHON := $(firstword $(rsort $(wildcard $(PATH_DEVTOOLS)/win.x86/python/v*/python$(HOSTSUFF_EXE))) \
1719 python-not-found.exe)
1720 else
1721 VBOX_BLD_PYTHON := $(firstword $(which python$(HOSTSUFF_EXE)) $(which python2.7$(HOSTSUFF_EXE)) \
1722 $(which python2.6$(HOSTSUFF_EXE)) python$(HOSTSUFF_EXE))
1723 endif
1724endif
1725
1726#
1727# pylint setup, see http://www.logilab.org/857.
1728# Supported are 0.21.0 - 0.25.2, but no 0.26.0.
1729#
1730# Disabled:
1731# W0301 - Unnecessary semicolon.
1732# W0511 - TODO/XXX/FIXME/+++.
1733# W0603 - Using the global statement.
1734# W0702 - No exception type(s) specified.
1735# W0703 - Catch "Exception".
1736# I0011 - Locally disabling XXXXX.
1737# C0321 - More than one statement on a single line.
1738# R0201 - Method could be a function.
1739#
1740# Note! Yes, --max-branchs is a typo, but not by me.
1741#
1742# Note! Users of older pylint release (< 1.0) needs to define
1743# VBOX_WITH_PYLINT_PRE_V1_0 in LocalConfig because they changed the
1744# output arguments in an backwards incompatible way and added more
1745# attribute regex options.
1746#
1747ifndef VBOX_PYLINT
1748 VBOX_PYLINT := $(firstword $(which pylint-2.7) $(which pylint-2.6) $(which pylint2) $(which pylint))
1749 ifdef VBOX_PYLINT
1750 VBOX_PYLINT := $(VBOX_BLD_PYTHON) $(VBOX_PYLINT)
1751 endif
1752endif
1753if !defined(VBOX_WITH_PYLINT) && defined(VBOX_PYLINT)
1754 VBOX_WITH_PYLINT := 1
1755endif
1756VBOX_PYLINT_FLAGS := --report=n \
1757 $(if-expr !defined(VBOX_WITH_PYLINT_PRE_V1_0)\
1758 ,--msg-template='{path}:{line}: <{msg_id}>({obj}:{symbol}): {msg}' \
1759 ,--output-format=msvs --include-ids=y) \
1760 --persistent=n \
1761 --rcfile=$(PATH_ROOT)/tools/pylintrc \
1762 --max-line-length=130 \
1763 --max-attributes=20 \
1764 --max-branch$(if-expr !defined(VBOX_WITH_PYLINT_PRE_V1_0),e,)s=50 \
1765 --max-statements=100 \
1766 --max-returns=100 \
1767 --max-public-methods=139 \
1768 --max-args=9 \
1769 --max-module-lines=4096 \
1770 --max-locals=32 \
1771 --min-public-methods=0 \
1772 --function-rgx='[a-z_][a-zA-Z0-9_]{2,40}$(DOLLAR)' \
1773 --method-rgx='[a-z_][a-zA-Z0-9_]{2,40}$(DOLLAR)' \
1774 --argument-rgx='([a-z_][a-zA-Z0-9_]{2,30}|rc|hr|s|c|ch|cx|cy|cb|fn)$(DOLLAR)' \
1775 --variable-rgx='([a-z_][a-zA-Z0-9_]{2,30}|rc|hr|s|c|ch|cx|cy|cb|fn)$(DOLLAR)' \
1776 --attr-rgx='([a-z_][a-zA-Z0-9_]{2,30}|rc|hr|o)$(DOLLAR)' \
1777 --module-rgx='(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+)|(td[A-Z][a-zA-Z0-9]+)|(t(e|)st(-|)[a-zA-Z0-9]+))$(DOLLAR)' \
1778 --class-rgx='(td|)[A-Z_][a-zA-Z0-9_]+$(DOLLAR)' \
1779 --const-rgx='(g_(k|)[abcdefhmnpilorstu]+[A-Z][a-zA-Z0-9]+|[A-Z_][A-Z0-9_]+|__copyright__|__version__|__file__|__all__)$(DOLLAR)' \
1780 --good-names='i,j,k,t,o,c,e,ch,s,_' \
1781 $(if-expr !defined(VBOX_WITH_PYLINT_PRE_V1_0),--class-attribute-rgx='(k[abcdefhmnpilorstu]+[A-Z0-9][a-zA-Z0-9_]{0,32}|[A-Z_][A-Z0-9_]{2,32})',) \
1782 $(if-expr defined(VBOX_WITH_PYLINT_V1_1_PLUS) || defined(VBOX_WITH_PYLINT_V1_2_1_PLUS),--disable=C0326,) \
1783 $(if-expr defined(VBOX_WITH_PYLINT_V1_2_1_PLUS),--disable=C0330 --disable=W0123,) \
1784 --disable=W0301,W0511,W0603,W0702,W0703,C0321,R0201,I0011 \
1785 --ignored-classes=testdriver.vboxcon \
1786
1787
1788# Define the macro for win path conversion.
1789ifndef VBOX_ONLY_SDK
1790 VBOX_FN_MAKE_WIN_PATH = $(subst /,\\,$(1))
1791else
1792 # on Wine Z: is always FS root
1793 VBOX_FN_MAKE_WIN_PATH = $(subst /,\\,$(patsubst /%,Z:/%,$(1)))
1794endif #!VBOX_ONLY_SDK
1795
1796# The kprofile build automagically links with kProfile.
1797ifeq ($(KBUILD_TYPE),kprofile)
1798 LIB_RUNTIME += $(LIB_KPROFILE)
1799endif
1800
1801# Enable C++ electric fence heap. (Warning: will easily run out of virtual memory / kernel stuff on Linux/Windows.)
1802ifdef VBOX_WITH_CPP_EF
1803 LIB_RUNTIME <= $(LIB_RUNTIME_EF)
1804endif
1805
1806# Overridable libraries (unix).
1807LIB_PTHREAD ?= pthread
1808
1809# Xcursor (consider an SDK for this).
1810ifeq ($(VBOX_XCURSOR_LIBS),)
1811 ifeq ($(KBUILD_TARGET),solaris)
1812 VBOX_XCURSOR_LIBS := $(lastword $(wildcard $(PATH_DEVTOOLS_TRG)/libXcursor/*/lib/libXcursor.a))
1813 ifneq ($(VBOX_XCURSOR_LIBS),)
1814 VBOX_XCURSOR_INCS := $(patsubst %/lib/libXcursor.a,%/include, $(VBOX_XCURSOR_LIBS))
1815 VBOX_XCURSOR_LIBS += X11 Xrender Xfixes
1816 endif
1817 endif
1818 ifeq ($(VBOX_XCURSOR_LIBS),)
1819 VBOX_XCURSOR_LIBS := Xcursor
1820 endif
1821endif
1822
1823
1824# Intel ASL compiler for ACPI
1825VBOX_IASLCMD ?= $(firstword $(wildcard $(PATH_DEVTOOLS_BLD)/bin/iasl$(HOSTSUFF_EXE)) iasl$(HOSTSUFF_EXE))
1826
1827# libxslt XSLT processor. (see PATH_TOOL_YASM for explanation why it's temporarily located in bin.)
1828ifeq ($(KBUILD_HOST),win)
1829# VBOX_XSLTPROC ?= $(PATH_DEVTOOLS)/win.x86/libxslt/10114/xsltproc.exe
1830 VBOX_XSLTPROC ?= $(PATH_DEVTOOLS)/win.x86/bin/xsltproc.exe
1831else ifeq ($(KBUILD_HOST),os2)
1832 VBOX_XSLTPROC ?= BEGINLIBPATH="$(PATH_DEVTOOLS_BLD)/bin;$$BEGINLIBPATH" $(PATH_DEVTOOLS_BLD)/bin/xsltproc.exe
1833else ifeq ($(KBUILD_HOST),haiku)
1834 VBOX_XSLTPROC ?= $(PATH_DEVTOOLS)/haiku.x86/bin/xsltproc
1835else
1836 VBOX_XSLTPROC ?= xsltproc$(HOSTSUFF_EXE)
1837endif
1838
1839# bin2c (convert binary files into C arrays)
1840VBOX_BIN2C ?= $(PATH_OBJ)/bin2c/bin2c$(HOSTSUFF_EXE)
1841
1842# RTManifest (extension pack manifest utility)
1843VBOX_RTMANIFEST ?= $(PATH_OBJ)/bldRTManifest/bldRTManifest$(HOSTSUFF_EXE)
1844
1845# RTSignTool (certificate extraction tool)
1846VBOX_RTSIGNTOOL ?= $(PATH_OBJ)/bldRTSignTool/bldRTSignTool$(HOSTSUFF_EXE)
1847
1848# VBoxCmp (simple /bin/cmp with more sensible output)
1849VBOX_VBOXCMP ?= $(PATH_OBJ)/VBoxCmp/VBoxCmp$(HOSTSUFF_EXE)
1850
1851# VBoxCPP (special purpose C preprocessor)
1852VBOX_VBOXCPP ?= $(PATH_OBJ)/VBoxCPP/VBoxCPP$(HOSTSUFF_EXE)
1853
1854# VBoxTpG (tracepoint generator)
1855VBOX_VBOXTPG ?= $(PATH_OBJ)/VBoxTpG/VBoxTpG$(HOSTSUFF_EXE)
1856
1857# VBoxPeSetVersion (changes the minimum OS version of an image)
1858VBOX_PE_SET_VERSION ?= $(PATH_OBJ)/VBoxPeSetVersion/VBoxPeSetVersion$(HOSTSUFF_EXE)
1859
1860# Visual C++ EditBin.exe.
1861VBOX_VCC_EDITBIN = $(if $(PATH_TOOL_$(VBOX_VCC_TOOL)_BIN),$(PATH_TOOL_$(VBOX_VCC_TOOL)_BIN)/,)editbin.exe /NoLogo
1862
1863# filesplitter (splits java files)
1864VBOX_FILESPLIT ?= $(PATH_OBJ)/filesplitter/filesplitter$(HOSTSUFF_EXE)
1865
1866# biossums (set BIOS checksums)
1867VBOX_BIOSSUMS ?= $(PATH_OBJ)/biossums/biossums$(HOSTSUFF_EXE)
1868
1869# MakeAlternativeSource (for BIOSes)
1870VBOX_MAKE_ALTERNATIVE_SOURCE ?= $(PATH_OBJ)/MakeAlternativeSource/MakeAlternativeSource$(HOSTSUFF_EXE)
1871
1872# VBoxDef2LazyLoad (lazy dynamic library loader assembly generator)
1873VBOX_DEF_2_LAZY_LOAD ?= $(PATH_OBJ)/VBoxDef2LazyLoad/VBoxDef2LazyLoad$(HOSTSUFF_EXE)
1874
1875# GNU tar if present.
1876if1of ($(KBUILD_TARGET), linux os2 win)
1877 VBOX_GTAR ?= tar
1878else if1of ($(KBUILD_TARGET), freebsd solaris)
1879 VBOX_GTAR ?= gtar
1880endif
1881
1882# mkisofs
1883ifeq ($(KBUILD_HOST),win)
1884 VBOX_MKISOFS ?= $(PATH_DEVTOOLS_BLD)/bin/mkisofs.exe
1885else
1886 VBOX_MKISOFS ?= mkisofs
1887endif
1888
1889# Makeself for the linux installers.
1890VBOX_MAKESELF ?= $(PATH_DEVTOOLS)/common/makeself/v2.1.5/makeself.sh
1891
1892# Microsoft HTML Help Workshop.
1893VBOX_PATH_HTML_HELP_WORKSHOP ?= $(PATH_DEVTOOLS)/win.x86/HTML_Help_Workshop/v1.3/
1894
1895# Path to the null soft installer.
1896VBOX_PATH_NSIS ?= $(PATH_DEVTOOLS)/win.x86/nsis/v2.46-log-nsscm-r1
1897
1898# Path to AutoIt3.
1899VBOX_PATH_AUTOIT3 ?= $(PATH_DEVTOOLS)/win.x86/autoit/v3.2.10.0
1900
1901# Windows install tools...
1902# Note! The scripts has been moved to Bin in v8.0.
1903VBOX_PATH_WIX ?= $(PATH_DEVTOOLS)/win.x86/wix/v3.8.1128.0
1904VBOX_PATH_MSITRAN ?= $(PATH_DEVTOOLS)/win.x86/sdk/v7.1/Bin/MsiTran.Exe
1905VBOX_PATH_MSIDB ?= $(PATH_DEVTOOLS)/win.x86/sdk/v7.1/Bin/MsiDb.Exe
1906VBOX_PATH_WISUBSTG ?= $(PATH_DEVTOOLS)/win.x86/sdk/v7.1/Samples/sysmgmt/msi/scripts/WiSubStg.vbs
1907VBOX_PATH_WISUMINFO ?= $(PATH_DEVTOOLS)/win.x86/sdk/v7.1/Samples/sysmgmt/msi/scripts/WiSumInf.vbs
1908VBOX_PATH_DIFX ?= $(PATH_DEVTOOLS)/win.$(KBUILD_TARGET_ARCH)/DIFx/v2.1-r3
1909VBOX_PATH_CABSDK ?= $(PATH_DEVTOOLS)/win.x86/cabsdk/r1
1910VBOX_PATH_MAKECAB ?= $(VBOX_PATH_CABSDK)/BIN/MAKECAB.EXE
1911
1912# We need to export YASM for OSE, but since it was converted to .zip we need to
1913# allow for the location used by the zip to be properly cleaned up first.
1914if1of ($(KBUILD_HOST).$(KBUILD_HOST_ARCH), linux.x86 solaris.x86 win.x86)
1915 PATH_TOOL_YASM ?= $(PATH_DEVTOOLS_BLD)/bin
1916endif
1917
1918# The Microsoft IDL compiler (the SDK build needs this on non-Windows).
1919VBOX_WIN_MIDL ?= $(EXEC_X86_WIN32) $(call VBOX_FN_MAKE_WIN_PATH,$(firstword $(wildcard $(addsuffix /[Mm][Ii][Dd][Ll].[Ee][Xx][Ee], \
1920 $(PATH_DEVTOOLS)/win.x86/sdk/v7.1/Bin$(if-expr "$(KBUILD_HOST).$(KBUILD_HOST_ARCH)" == "win.amd64",/x64,) \
1921 $(PATH_DEVTOOLS)/win.x86/ddk/7600.16385.1/bin/x86 \
1922 $(PATH_DEVTOOLS)/win.x86/bin \
1923 $(PATH_SDK_$(VBOX_WINPSDK)_BIN) \
1924 $(PATH_SDK_$(VBOX_WINPSDK)) \
1925 $(PATH_SDK_WINPSDK_BIN) \
1926 $(PATH_SDK_WINPSDK) \
1927 )) Sorry_Cannot_Find_The_Midl_Compiler_In_The_PSDK))
1928
1929# XPCOM setup for all but win32.
1930ifneq ($(KBUILD_TARGET),win)
1931 VBOX_WITH_XPCOM = 1
1932 # if updating, also update xpidl_INST var in src/libs/xpcom18a4/Makefile.kmk
1933 VBOX_XPIDL ?= $(PATH_STAGE_BIN)/xpidl$(HOSTSUFF_EXE)
1934 ifeq ($(KBUILD_TARGET),os2)
1935 VBOX_XPIDL_ENV = BEGINLIBPATH="$(dir $(VBOX_XPIDL));$$BEGINLIBPATH"$(SP)
1936 endif
1937 VBOX_PATH_XPCOM_IDL ?= $(VBOX_PATH_SDK)/bindings/xpcom/idl
1938 VBOX_XPCOM_INCS ?= \
1939 $(VBOX_PATH_SDK)/bindings/xpcom/include \
1940 $(VBOX_PATH_SDK)/bindings/xpcom/include/xpcom \
1941 $(VBOX_PATH_SDK)/bindings/xpcom/include/string \
1942 $(VBOX_PATH_SDK)/bindings/xpcom/include/xpcom \
1943 $(VBOX_PATH_SDK)/bindings/xpcom/include/nsprpub \
1944 $(VBOX_PATH_SDK)/bindings/xpcom/include/ipcd
1945 ifneq ($(KBUILD_TARGET),os2)
1946 # libIDL-config (for xpcom18a4)
1947 ifeq ($(origin VBOX_LIBIDL_CONFIG),undefined)
1948 export VBOX_LIBIDL_CONFIG := $(firstword $(shell which libIDL-config-2 libIDL-config 2> /dev/null))
1949 endif
1950 endif
1951endif
1952
1953# The X11 LIBPATH. (The amd64 hack is for RHEL4.)
1954ifeq ($(KBUILD_TARGET_ARCH),amd64)
1955 VBOX_LIBPATH_X11 ?= /usr/X11R6/lib64 /usr/X11R6/lib
1956else
1957 VBOX_LIBPATH_X11 ?= /usr/X11R6/lib
1958endif
1959
1960# 32bit X11 LIBPATH for building 32bit guest additions
1961VBOX_LIBPATH32_X11 ?= /usr/X11R6/lib32 /usr/X11R6/lib
1962
1963#
1964# Macros dealing with the darwin version we're targeting.
1965# The DEF in VBOX_DEF_MACOSX_VERSION_MIN mean default. The default min
1966# version is assumed to be the
1967#
1968ifeq ($(KBUILD_TARGET),darwin)
1969 VBOX_PATH_MACOSX_DEVEL_ROOT ?= /Developer
1970 VBOX_PATH_MACOSX_SDK_ROOT ?= $(VBOX_PATH_MACOSX_DEVEL_ROOT)/SDKs
1971
1972 ifeq ($(VBOX_DEF_MACOSX_VERSION_MIN),10.4)
1973 ifeq ($(origin VBOX_DARWIN_CLASSIC_LINKER),undefined)
1974 VBOX_DARWIN_CLASSIC_LINKER := $(shell ld -v 2>&1 )
1975 ifneq ($(filter ld64%, $(subst :, , $(VBOX_DARWIN_CLASSIC_LINKER))),)
1976 export VBOX_DARWIN_CLASSIC_LINKER := -Wl,-classic_linker
1977 else
1978 export VBOX_DARWIN_CLASSIC_LINKER :=
1979 endif
1980 endif
1981 VBOX_PATH_MACOSX_SDK ?= $(VBOX_PATH_MACOSX_SDK_ROOT)/MacOSX$(VBOX_DEF_MACOSX_VERSION_MIN)u.sdk
1982 else
1983 VBOX_PATH_MACOSX_SDK ?= $(VBOX_PATH_MACOSX_SDK_ROOT)/MacOSX$(VBOX_DEF_MACOSX_VERSION_MIN).sdk
1984 endif
1985
1986 ## The Xcode version.
1987 ifeq ($(KBUILD_HOST),darwin)
1988 ifndef VBOX_XCODE_VERSION
1989 ifdef VBOX_WITH_MACOSX_COMPILERS_FROM_DEVEL
1990 VBOX_XCODE_VERSION := $(word 2, $(shell $(VBOX_PATH_MACOSX_DEVEL_ROOT)/usr/bin/xcodebuild -version))
1991 else
1992 VBOX_XCODE_VERSION := $(word 2, $(shell xcodebuild -version))
1993 endif
1994 VBOX_XCODE_VERSION ?= 4.1
1995 endif
1996 ifeq ($(VBOX_XCODE_VERSION),4.2)
1997 $(warning Xcode 4.2 is not able to correctly build the recompiler!)
1998 $(warning Please downgrade to Xcode 4.1 if you want a working VMM!)
1999 endif
2000 else
2001 VBOX_XCODE_VERSION ?= 4.1
2002 endif
2003 VBOX_XCODE_VERSION_MAJOR := $(word 1, $(subst ., ,$(VBOX_XCODE_VERSION)))
2004 VBOX_XCODE_VERSION_MINOR := $(word 2, $(subst ., ,$(VBOX_XCODE_VERSION)))
2005 VBOX_XCODE_VERSION := $(VBOX_XCODE_VERSION_MAJOR).$(VBOX_XCODE_VERSION_MINOR)
2006
2007 VBOX_DEF_MACOSX_VERSION_MIN ?= 10.6
2008 ifeq ($(KBUILD_TARGET_ARCH),x86)
2009 if1of ($(VBOX_DEF_MACOSX_VERSION_MIN), 10.4 10.5)
2010 VBOX_DARWIN_NO_COMPACT_LINKEDIT ?= $(VBOX_LD_no_compact_linkedit)
2011 TOOL_GXX4MACHO_SUFFIX ?= -4.0
2012 endif
2013 else
2014 if $(VBOX_XCODE_VERSION_MAJOR) < 4 && "$(VBOX_XCODE_VERSION)" != "3.2"
2015 $(error VBox: 64-bit darwin builds require Xcode 3.2 or later, you have $(VBOX_XCODE_VERSION))
2016 endif
2017 endif
2018 if $(VBOX_XCODE_VERSION_MAJOR) == 4 && $(VBOX_XCODE_VERSION_MINOR) >= 2
2019 TOOL_GXX4MACHO_PREFIX ?= llvm-
2020 endif
2021 TOOL_GXX4MACHO_SUFFIX ?= -4.2
2022 VBOX_DARWIN_NO_COMPACT_LINKEDIT ?=
2023
2024 TOOL_GCC4MACHO_SUFFIX ?= $(TOOL_GXX4MACHO_SUFFIX)$(HOSTSUFF_EXE)
2025 TOOL_GCC4MACHO_PREFIX ?= $(TOOL_GXX4MACHO_PREFIX)
2026 ifdef VBOX_WITH_MACOSX_COMPILERS_FROM_DEVEL
2027 TOOL_GCC4MACHO_PREFIX := $(VBOX_PATH_MACOSX_DEVEL_ROOT)/usr/bin/$(TOOL_GCC4MACHO_PREFIX)
2028 TOOL_GXX4MACHO_PREFIX := $(VBOX_PATH_MACOSX_DEVEL_ROOT)/usr/bin/$(TOOL_GXX4MACHO_PREFIX)
2029 TOOL_GCC4MACHO_SUFFIX := $(TOOL_GCC4MACHO_SUFFIX) -isysroot $(VBOX_PATH_MACOSX_SDK)
2030 TOOL_GXX4MACHO_SUFFIX := $(TOOL_GXX4MACHO_SUFFIX) -isysroot $(VBOX_PATH_MACOSX_SDK)
2031 ifndef SVN # must expand first so we won't be using old svn.
2032 SVN := $(firstword $(which svn) svn)
2033 endif
2034 export PATH:=$(VBOX_PATH_MACOSX_DEVEL_ROOT)/usr/bin/:$(PATH)
2035 endif
2036 ## @todo WTF do we do the -m32/64 stuff here for these compilers? Also the visibility should be elsewhere...
2037 TOOL_GXX4MACHO_OBJC = $(TOOL_GCC4MACHO_PREFIX)gcc$(TOOL_GCC4MACHO_SUFFIX) $(if-expr $(KBUILD_TARGET_ARCH) == "x86",-m32,-m64) -fvisibility=hidden
2038 TOOL_GXX4MACHO_OBJCXX = $(TOOL_GCC4MACHO_PREFIX)gcc$(TOOL_GCC4MACHO_SUFFIX) $(if-expr $(KBUILD_TARGET_ARCH) == "x86",-m32,-m64) -fvisibility=hidden -fvisibility-inlines-hidden
2039
2040 VBOX_DARWIN_DEF_SDK_DEFS := MAC_OS_X_VERSION_MIN_REQUIRED=$(subst .,,$(VBOX_DEF_MACOSX_VERSION_MIN))0 \
2041 MAC_OS_X_VERSION_MAX_ALLOWED=$(subst .,,$(VBOX_DEF_MACOSX_VERSION_MIN))0
2042 VBOX_DARWIN_DEF_SDK_CFLAGS := -mmacosx-version-min=$(VBOX_DEF_MACOSX_VERSION_MIN) -isysroot $(VBOX_PATH_MACOSX_SDK)
2043 VBOX_DARWIN_DEF_SDK_CXXFLAGS := -mmacosx-version-min=$(VBOX_DEF_MACOSX_VERSION_MIN) -isysroot $(VBOX_PATH_MACOSX_SDK)
2044 VBOX_DARWIN_DEF_SDK_OBJCFLAGS := -mmacosx-version-min=$(VBOX_DEF_MACOSX_VERSION_MIN) -isysroot $(VBOX_PATH_MACOSX_SDK)
2045 VBOX_DARWIN_DEF_SDK_OBJCXXFLAGS := -mmacosx-version-min=$(VBOX_DEF_MACOSX_VERSION_MIN) -isysroot $(VBOX_PATH_MACOSX_SDK)
2046 VBOX_DARWIN_DEF_SDK_LDFLAGS = -mmacosx-version-min=$(VBOX_DEF_MACOSX_VERSION_MIN) -Wl,-syslibroot,$(VBOX_PATH_MACOSX_SDK) \
2047 -Wl,-headerpad_max_install_names $(VBOX_DARWIN_CLASSIC_LINKER) $(VBOX_DARWIN_NO_COMPACT_LINKEDIT)
2048
2049 # specific versions.
2050 ## @todo s/VBOX_DARWIN_DEF_SDK_10/VBOX_DARWIN_SDK_10/g
2051
2052 if1of ($(VBOX_DEF_MACOSX_VERSION_MIN), 10.4) # classic linker detection is bust otherwise
2053 VBOX_PATH_MACOSX_SDK_10_4 ?= $(VBOX_PATH_MACOSX_SDK_ROOT)/MacOSX10.4u.sdk
2054 VBOX_DARWIN_DEF_SDK_10_4_DEFS := MAC_OS_X_VERSION_MIN_REQUIRED=1040 MAC_OS_X_VERSION_MAX_ALLOWED=1040
2055 VBOX_DARWIN_DEF_SDK_10_4_CFLAGS := -mmacosx-version-min=10.4 -isysroot $(VBOX_PATH_MACOSX_SDK_10_4)
2056 VBOX_DARWIN_DEF_SDK_10_4_CXXFLAGS := -mmacosx-version-min=10.4 -isysroot $(VBOX_PATH_MACOSX_SDK_10_4)
2057 VBOX_DARWIN_DEF_SDK_10_4_OBJCFLAGS := -mmacosx-version-min=10.4 -isysroot $(VBOX_PATH_MACOSX_SDK_10_4)
2058 VBOX_DARWIN_DEF_SDK_10_4_OBJCXXFLAGS := -mmacosx-version-min=10.4 -isysroot $(VBOX_PATH_MACOSX_SDK_10_4)
2059 VBOX_DARWIN_DEF_SDK_10_4_LDFLAGS := -mmacosx-version-min=10.4 -Wl,-syslibroot,$(VBOX_PATH_MACOSX_SDK_10_4) \
2060 -Wl,-headerpad_max_install_names $(VBOX_DARWIN_CLASSIC_LINKER)
2061 else
2062 VBOX_DARWIN_DEF_SDK_10_4_CXXFLAGS = $(error VBox: $(if $(target),$(target): ,)Using 10.4 SDK)
2063 VBOX_DARWIN_DEF_SDK_10_4_LDFLAGS = $(error VBox: $(if $(target),$(target): ,)Using 10.4 SDK)
2064 endif
2065
2066 if1of ($(VBOX_DEF_MACOSX_VERSION_MIN), 10.4 10.5)
2067 VBOX_PATH_MACOSX_SDK_10_5 ?= $(VBOX_PATH_MACOSX_SDK_ROOT)/MacOSX10.5.sdk
2068 VBOX_DARWIN_DEF_SDK_10_5_DEFS := MAC_OS_X_VERSION_MIN_REQUIRED=1050 MAC_OS_X_VERSION_MAX_ALLOWED=1050
2069 VBOX_DARWIN_DEF_SDK_10_5_CFLAGS := -mmacosx-version-min=10.5 -isysroot $(VBOX_PATH_MACOSX_SDK_10_5)
2070 VBOX_DARWIN_DEF_SDK_10_5_CXXFLAGS := -mmacosx-version-min=10.5 -isysroot $(VBOX_PATH_MACOSX_SDK_10_5)
2071 VBOX_DARWIN_DEF_SDK_10_5_OBJCFLAGS := -mmacosx-version-min=10.5 -isysroot $(VBOX_PATH_MACOSX_SDK_10_5)
2072 VBOX_DARWIN_DEF_SDK_10_5_OBJCXXFLAGS := -mmacosx-version-min=10.5 -isysroot $(VBOX_PATH_MACOSX_SDK_10_5)
2073 VBOX_DARWIN_DEF_SDK_10_5_LDFLAGS := -mmacosx-version-min=10.5 -Wl,-syslibroot,$(VBOX_PATH_MACOSX_SDK_10_5) \
2074 -Wl,-headerpad_max_install_names $(VBOX_DARWIN_NO_COMPACT_LINKEDIT)
2075 else
2076 VBOX_DARWIN_DEF_SDK_10_5_CXXFLAGS = $(error VBox: $(if $(target),$(target): ,)Using 10.5 SDK)
2077 VBOX_DARWIN_DEF_SDK_10_5_LDFLAGS = $(error VBox: $(if $(target),$(target): ,)Using 10.5 SDK)
2078 endif
2079
2080 if1of ($(VBOX_DEF_MACOSX_VERSION_MIN), 10.4 10.5 10.6)
2081 VBOX_PATH_MACOSX_SDK_10_6 ?= $(VBOX_PATH_MACOSX_SDK_ROOT)/MacOSX10.6.sdk
2082 VBOX_DARWIN_DEF_SDK_10_6_DEFS := MAC_OS_X_VERSION_MIN_REQUIRED=1060 MAC_OS_X_VERSION_MAX_ALLOWED=1060
2083 VBOX_DARWIN_DEF_SDK_10_6_CFLAGS := -mmacosx-version-min=10.6 -isysroot $(VBOX_PATH_MACOSX_SDK_10_6)
2084 VBOX_DARWIN_DEF_SDK_10_6_CXXFLAGS := -mmacosx-version-min=10.6 -isysroot $(VBOX_PATH_MACOSX_SDK_10_6)
2085 VBOX_DARWIN_DEF_SDK_10_6_OBJCFLAGS := -mmacosx-version-min=10.6 -isysroot $(VBOX_PATH_MACOSX_SDK_10_6)
2086 VBOX_DARWIN_DEF_SDK_10_6_OBJCXXFLAGS := -mmacosx-version-min=10.6 -isysroot $(VBOX_PATH_MACOSX_SDK_10_6)
2087 VBOX_DARWIN_DEF_SDK_10_6_LDFLAGS := -mmacosx-version-min=10.6 -Wl,-syslibroot,$(VBOX_PATH_MACOSX_SDK_10_6) \
2088 -Wl,-headerpad_max_install_names
2089 else
2090 VBOX_DARWIN_DEF_SDK_10_6_CXXFLAGS = $(error VBox: $(if $(target),$(target): ,)Using 10.6 SDK)
2091 VBOX_DARWIN_DEF_SDK_10_6_LDFLAGS = $(error VBox: $(if $(target),$(target): ,)Using 10.6 SDK)
2092 endif
2093
2094 if1of ($(VBOX_DEF_MACOSX_VERSION_MIN), 10.4 10.5 10.6 10.7)
2095 ifndef VBOX_PATH_MACOSX_SDK_10_7
2096 ifneq ($(wildcard $(VBOX_PATH_MACOSX_SDK_ROOT)/MacOSX10.7.sdk),)
2097 VBOX_PATH_MACOSX_SDK_10_7 = $(VBOX_PATH_MACOSX_SDK_ROOT)/MacOSX10.7.sdk
2098 else
2099 VBOX_PATH_MACOSX_SDK_10_7 = $(PATH_DEVTOOLS)/darwin.x86/SDKs/MacOSX10.7.sdk
2100 endif
2101 endif
2102 VBOX_DARWIN_DEF_SDK_10_7_DEFS := MAC_OS_X_VERSION_MIN_REQUIRED=1070 MAC_OS_X_VERSION_MAX_ALLOWED=1070
2103 VBOX_DARWIN_DEF_SDK_10_7_CFLAGS := -mmacosx-version-min=10.7 -isysroot $(VBOX_PATH_MACOSX_SDK_10_7)
2104 VBOX_DARWIN_DEF_SDK_10_7_CXXFLAGS := -mmacosx-version-min=10.7 -isysroot $(VBOX_PATH_MACOSX_SDK_10_7)
2105 VBOX_DARWIN_DEF_SDK_10_7_OBJCFLAGS := -mmacosx-version-min=10.7 -isysroot $(VBOX_PATH_MACOSX_SDK_10_7)
2106 VBOX_DARWIN_DEF_SDK_10_7_OBJCXXFLAGS := -mmacosx-version-min=10.7 -isysroot $(VBOX_PATH_MACOSX_SDK_10_7)
2107 VBOX_DARWIN_DEF_SDK_10_7_LDFLAGS := -mmacosx-version-min=10.7 -Wl,-syslibroot,$(VBOX_PATH_MACOSX_SDK_10_7) \
2108 -Wl,-headerpad_max_install_names
2109 else
2110 VBOX_DARWIN_DEF_SDK_10_7_CXXFLAGS = $(error VBox: $(if $(target),$(target): ,)Using 10.7 SDK)
2111 VBOX_DARWIN_DEF_SDK_10_7_LDFLAGS = $(error VBox: $(if $(target),$(target): ,)Using 10.7 SDK)
2112 endif
2113
2114
2115endif # target=darwin
2116
2117#
2118# Macro switching between @executable_path, @rpath and /Applications/VirtualBox.app
2119# depending on whether the build is hardened or not (dylib install_name).
2120#
2121ifeq ($(KBUILD_TARGET),darwin)
2122 ifndef VBOX_DYLD_EXECUTABLE_PATH
2123 ifdef VBOX_WITH_HARDENING
2124 VBOX_DYLD_EXECUTABLE_PATH = $(VBOX_PATH_APP_PRIVATE_ARCH)
2125 else if 0
2126 VBOX_DYLD_EXECUTABLE_PATH = @executable_path
2127 else
2128 VBOX_DYLD_EXECUTABLE_PATH = @rpath
2129 VBOX_WITH_RELATIVE_RUNPATH = @loader_path/
2130 endif
2131 endif
2132endif
2133
2134#
2135# Check for incompatible rpath combinations.
2136#
2137if defined(VBOX_WITH_RUNPATH) && defined(VBOX_WITH_ORIGIN)
2138 $(error VBox: VBOX_WITH_RUNPATH and VBOX_WITH_ORIGIN are mutually exclusive)
2139endif
2140if defined(VBOX_WITH_RELATIVE_RUNPATH) && defined(VBOX_WITH_ORIGIN)
2141 $(error VBox: VBOX_WITH_RELATIVE_RUNPATH and VBOX_WITH_ORIGIN are mutually exclusive)
2142endif
2143if defined(VBOX_WITH_RUNPATH) && defined(VBOX_WITH_RELATIVE_RUNPATH)
2144 $(error VBox: VBOX_WITH_RUNPATH and VBOX_WITH_RELATIVE_RUNPATH are mutually exclusive)
2145endif
2146if defined(VBOX_WITH_RELATIVE_RUNPATH) && defined(VBOX_WITH_HARDENING)
2147 $(error VBox: VBOX_WITH_RELATIVE_RUNPATH and VBOX_WITH_HARDENING are mutually exclusive)
2148endif
2149
2150#
2151# VBOX_WITH_ORIGIN translates into VBOX_WITH_RELATIVE_RUNPATH.
2152#
2153# We use two helper variables for the VBOX_WITH_ORIGIN stuff:
2154# VBOX_ORIGIN - Indirect expansion trick.
2155# VBOX_GCC_RPATH_OPT - Different GCC/LD combinations needs different options.
2156#
2157VBOX_ORIGIN = $$ORIGIN
2158ifeq ($(KBUILD_TARGET),solaris)
2159 VBOX_GCC_RPATH_OPT = -R
2160else
2161 VBOX_GCC_RPATH_OPT = -Wl,-rpath,
2162 VBOX_GCC_ORIGIN_OPT = -Wl,-z,origin
2163endif
2164ifdef VBOX_WITH_ORIGIN
2165 VBOX_WITH_RELATIVE_RUNPATH = $$(VBOX_ORIGIN)
2166endif
2167
2168
2169#
2170# The X11 headers.
2171#
2172VBOX_PATH_X11_ROOT = $(PATH_ROOT)/src/VBox/Additions/x11/x11include
2173VBOX_PATH_X11_XFREE_4_3 = $(VBOX_PATH_X11_ROOT)/4.3
2174VBOX_PATH_X11_XORG_7_0 = $(VBOX_PATH_X11_ROOT)/7.0
2175VBOX_PATH_X11_XORG_7_1 = $(VBOX_PATH_X11_ROOT)/7.1
2176
2177
2178#
2179# crOpenGL related paths and variables.
2180#
2181ifdef VBOX_WITH_CROGL
2182 ifdef VBOX_WITH_WDDM
2183 VBOX_WITH_CRHGSMI = 1
2184 endif
2185 VBOX_PATH_CROGL_GLAPI = $(PATH_ROOT)/src/VBox/GuestHost/OpenGL/glapi_parser
2186 VBOX_PATH_CROGL_GENFILES = $(PATH_OBJ)/VBoxOGLgen
2187 VBOX_PATH_CROGL_INCLUDE = $(PATH_ROOT)/src/VBox/GuestHost/OpenGL/include
2188 VBOX_CROGL_API_FILES = $(VBOX_PATH_CROGL_GLAPI)/apiutil.py $(VBOX_PATH_CROGL_GLAPI)/APIspec.txt
2189 VBOX_CROGL_PYTHON_ENV = $(REDIRECT) $(if $1,-E 'PYTHONPATH=$1',) $(if $2,-o $2,) $(if $3,-i $3) --
2190
2191 if1of ($(KBUILD_HOST), os2 win)
2192 VBOX_PATH_CROGL_PYTHON_INCLUDE = $(VBOX_PATH_CROGL_GLAPI);$(PATH_ROOT)/src/VBox/GuestHost/OpenGL/packer;$(PATH_ROOT)/src/VBox/HostServices/SharedOpenGL/crserverlib
2193 else
2194 VBOX_PATH_CROGL_PYTHON_INCLUDE = $(VBOX_PATH_CROGL_GLAPI):$(PATH_ROOT)/src/VBox/GuestHost/OpenGL/packer:$(PATH_ROOT)/src/VBox/HostServices/SharedOpenGL/crserverlib
2195 endif
2196
2197 ifeq ($(KBUILD_TARGET),win)
2198 VBOX_LIB_OGL_CRUTIL = $(PATH_OBJ)/VBoxOGLcrutil/VBoxOGLcrutil$(VBOX_SUFF_LIB)
2199 VBOX_LIB_OGL_HOSTCRUTIL = $(PATH_OBJ)/VBoxOGLhostcrutil/VBoxOGLhostcrutil$(VBOX_SUFF_LIB)
2200 ifeq ($(KBUILD_TARGET),x86)
2201 VBOX_LIB_OGL_CRUTIL_X86 = $(VBOX_LIB_OGL_CRUTIL)
2202 else
2203 VBOX_LIB_OGL_CRUTIL_X86 = $(PATH_OBJ)/VBoxOGLcrutil-x86/VBoxOGLcrutil-x86$(VBOX_SUFF_LIB)
2204 endif
2205 else
2206 VBOX_LIB_OGL_CRUTIL = $(VBOX_PATH_ADDITIONS)/VBoxOGLcrutil$(VBOX_SUFF_DLL)
2207 VBOX_LIB_OGL_HOSTCRUTIL = $(PATH_STAGE_BIN)/VBoxOGLhostcrutil$(VBOX_SUFF_DLL)
2208 endif
2209
2210 if1of ($(KBUILD_TARGET), freebsd linux solaris)
2211 # VBOX_PATH_MESA_SOURCE = $(PATH_ROOT)/src/libs/mesa-7.2
2212 VBOX_PATH_MESA_SOURCE = $(VBOX_PATH_X11_ROOT)/mesa-7.2
2213 VBOX_MESA_INCS = \
2214 $(VBOX_PATH_MESA_SOURCE) \
2215 $(VBOX_PATH_MESA_SOURCE)/include \
2216 $(VBOX_PATH_MESA_SOURCE)/src/mesa/ \
2217 $(VBOX_PATH_MESA_SOURCE)/src/mesa/glapi \
2218 $(VBOX_PATH_MESA_SOURCE)/src/mesa/main \
2219 $(VBOX_PATH_MESA_SOURCE)/src/mesa/drivers/dri/common
2220 endif
2221
2222 VBOX_DARWIN_OPENGL_INST = obj/VBoxOGL/GL/
2223 VBOX_DARWIN_OPENGL_HEADERS = gl.h glu.h
2224 SDK_DARWIN-OPENGL = Workaround SDK for the darwin OpenGL include directorly layout layout.
2225 SDK_DARWIN-OPENGL_INCS = $(PATH_OUT)/obj/VBoxOGL
2226 SDK_DARWIN-OPENGL_ORDERDEPS = $(addprefix $(PATH_OUT)/obj/VBoxOGL/GL/,$(VBOX_DARWIN_OPENGL_HEADERS))
2227 ## @todo kBuild: Using INTERMEDIATES doesn't work!
2228endif
2229
2230# The icons to use.
2231ifdef VBOX_OSE
2232 VBOX_WINDOWS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_win.ico
2233 VBOX_WINDOWS_ADDITIONS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_win.ico
2234 VBOX_NSIS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_win.ico
2235 VBOX_MACOSX_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox.icns
2236else
2237 ifeq ($(KBUILD_HOST),win)
2238 VBOX_WINDOWS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/VirtualBox-vista.ico
2239 VBOX_WINDOWS_ADDITIONS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/VirtualBoxGA-vista.ico
2240 VBOX_NSIS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/VirtualBoxGA-nsis.ico
2241 TOOL_VCC80X86_RC := $(PATH_DEVTOOLS)/win.x86/ddk/6000/bin/x86/rc.exe
2242 TOOL_VCC80AMD64_RC := $(PATH_DEVTOOLS)/win.x86/ddk/6000/bin/x86/rc.exe
2243 TOOL_VCC70_RC := $(PATH_DEVTOOLS)/win.x86/ddk/6000/bin/x86/rc.exe
2244 else
2245 VBOX_WINDOWS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/VirtualBox-winxp.ico
2246 VBOX_WINDOWS_ADDITIONS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/VirtualBoxGA-winxp.ico
2247 VBOX_NSIS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/VirtualBox-nsis.ico
2248 endif
2249 VBOX_MACOSX_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/VirtualBox.icns
2250endif
2251
2252
2253ifndef VBOX_NOINC_DYNAMIC_CONFIG_KMK
2254#
2255# GCC and YASM dynamic properties.
2256# Most of this is resolved on first kmk invocation and cached in PATH_OUT.
2257#
2258# Note! That a harmless warning is printed if the file doesn't exist.
2259# Note! Changes in GCC are not detected automatically (yet).
2260#
2261include $(KBUILD_PATH)/tools/$(VBOX_GCC_TOOL).kmk
2262ifneq ($(VBOX_GCC_TOOL),$(VBOX_GCC32_TOOL))
2263 include $(KBUILD_PATH)/tools/$(VBOX_GCC32_TOOL).kmk
2264endif
2265
2266# These tests never worked on Windows because of /dev/null, so, there
2267# can be no harm in just dropping them until cygwin is mp safe.
2268ifeq ($(KBUILD_HOST),win)
2269 VBOX_GCC_CHECK_EX_CC = $(3)
2270 VBOX_GCC_CHECK_EX_CXX = $(3)
2271 VBOX_GCC_CHECK_EX_LD = $(3)
2272 VBOX_GCC_CHECK_CC = $(2)
2273 VBOX_GCC_CHECK_CXX = $(2)
2274 VBOX_GCC_CHECK_LD = $(2)
2275 VBOX_GCC32_CHECK_CXX = $(2)
2276else
2277 VBOX_GCC_CHECK_EX_CC = $(shell \
2278 if $(1) $(subst -Wno-,-W,$(2)) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo "$(2)"; else echo "$(3)"; fi; )
2279 VBOX_GCC_CHECK_EX_CXX = $(shell \
2280 if $(1) $(subst -Wno-,-W,$(2)) -S -o /dev/null -xc++ /dev/null > /dev/null 2>&1; then echo "$(2)"; else echo "$(3)"; fi; )
2281 VBOX_GCC_CHECK_EX_LD = $(shell \
2282 if $(1) -Wl,$(2) $(if $(eq $(KBUILD_HOST),darwin),-Wl$(COMMA)-u$(COMMA)start -Wl$(COMMA)-undefined$(COMMA)dynamic_lookup,) \
2283 -nostdlib -o /dev/null -xc /dev/null > /dev/null 2>&1; \
2284 then echo "-Wl,$(2)"; else echo "$(3)"; fi; )
2285
2286 VBOX_GCC_CHECK_CC = $(call VBOX_GCC_CHECK_EX_CC, $(TOOL_$(VBOX_GCC_TOOL)_CC),$1,$2)
2287 VBOX_GCC_CHECK_CXX = $(call VBOX_GCC_CHECK_EX_CXX, $(TOOL_$(VBOX_GCC_TOOL)_CXX),$1,$2)
2288 VBOX_GCC_CHECK_LD = $(call VBOX_GCC_CHECK_EX_LD, $(TOOL_$(VBOX_GCC_TOOL)_LD),$1,$2)
2289 VBOX_GCC32_CHECK_CXX = $(call VBOX_GCC_CHECK_EX_CXX, $(TOOL_$(VBOX_GCC32_TOOL)_CXX),$1,$2)
2290endif
2291
2292ifeq ($(KBUILD_HOST),win) ## @todo can drop this now, we're not using cygwin.
2293 # This isn't important (yet) on windows, so cook the result until
2294 # cygwin is feeling better.
2295 VBOX_GCC_VERSION := $(int-add $(int-mul 10000, 3), $(int-mul 100, 3), 3)
2296else
2297 # This is kind of bad, the returned string needs to be re-evaluated before use.
2298 # The reason for this hack is that the windows kmk_ash cannot deal with $((1+1)).
2299 # Some versions of gcc (e.g. openSUSE11) return only major.minor on `gcc -dumpversion`.
2300 VBOX_GCC_VERSION = $(shell \
2301 $(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))|' )
2302endif
2303
2304# Find MinGW cross compilers for EFI on non-windows systems. We need to probe
2305# them for supported options in the Dynamic Config.kmk section below.
2306ifdef VBOX_WITH_EFI
2307 ifneq ($(KBUILD_HOST),win)
2308 ifndef VBOX_PATH_PREFIX_MINGW32
2309 VBOX_PATH_PREFIX_MINGW32 := $(firstword \
2310 $(which i686-w64-mingw32-gcc) \
2311 $(which i686-w32-mingw32-gcc) \
2312 $(which i686-pc-mingw32-gcc) \
2313 $(which i586-mingw32msvc-gcc) \
2314 )# Add more variants.
2315 ifdef VBOX_PATH_PREFIX_MINGW32
2316 VBOX_PATH_PREFIX_MINGW32 := $(substr $(VBOX_PATH_PREFIX_MINGW32), 1, $(expr $(length-var VBOX_PATH_PREFIX_MINGW32) - 3))
2317 endif
2318 endif
2319 ifndef VBOX_PATH_PREFIX_MINGW64
2320 VBOX_PATH_PREFIX_MINGW64 := $(firstword \
2321 $(which x86_64-w64-mingw64-gcc) \
2322 $(which x86_64-w64-mingw32-gcc) \
2323 $(which x86_64-pc-mingw64-gcc) \
2324 $(which x86_64-pc-mingw32-gcc) \
2325 $(which x86_64-w32-mingw32-gcc) \
2326 )# Add more variants.
2327 ifdef VBOX_PATH_PREFIX_MINGW64
2328 VBOX_PATH_PREFIX_MINGW64 := $(substr $(VBOX_PATH_PREFIX_MINGW64), 1, $(expr $(length-var VBOX_PATH_PREFIX_MINGW64) - 3))
2329 endif
2330 endif
2331 if defined(VBOX_PATH_PREFIX_MINGW32) || defined(VBOX_PATH_PREFIX_MINGW64)
2332 if !defined(VBOX_PATH_PREFIX_MINGW32)
2333 VBOX_PATH_PREFIX_MINGW32 = $(VBOX_PATH_PREFIX_MINGW64)
2334 else if !defined(VBOX_PATH_PREFIX_MINGW64)
2335 VBOX_PATH_PREFIX_MINGW64 = $(VBOX_PATH_PREFIX_MINGW32)
2336 endif
2337 endif
2338 endif # !win
2339endif # VBOX_WITH_EFI
2340
2341# YASM macros
2342ifndef DONT_USE_YASM
2343 include $(KBUILD_PATH)/tools/YASM.kmk
2344 if1of ($(KBUILD_HOST), win os2)
2345 VBOX_YASM_CHECK = $(if-expr "$(shell $(TOOL_YASM_AS) -e -o nul $1 - < /dev/null 2>&1)" == "",$(1),)
2346 else
2347 VBOX_YASM_CHECK = $(if-expr "$(shell $(TOOL_YASM_AS) -e -o /dev/null $1 - < /dev/null 2>&1)" == "",$(1),)
2348 endif
2349else
2350 VBOX_YASM_CHECK =
2351endif
2352
2353# No $(QUIET) here as it's interesting to see what goes into the file.
2354$(PATH_OUT)/DynamicConfig.kmk: \
2355 $(PATH_ROOT)/Config.kmk \
2356 $(LOCALCFG) \
2357 $(AUTOCFG) \
2358 $(VBOX_GCC_PATH_CC) \
2359 $(VBOX_GCC_PATH_CXX) \
2360 $(VBOX_GCC32_PATH_CC) \
2361 $(VBOX_GCC32_PATH_CXX)
2362 $(call MSG_GENERATE,,$@,)
2363 $(QUIET)$(RM) -f '$@'
2364 $(QUIET)$(MKDIR) -p $(@D)
2365
2366# HC compiler switch detection.
2367 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_PATH_CC ?= $(which $(TOOL_$(VBOX_GCC_TOOL)_CC))'
2368 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_PATH_CXX ?= $(which $(TOOL_$(VBOX_GCC_TOOL)_CXX))'
2369 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_VERSION_CC ?= $(call VBOX_GCC_VERSION,$(TOOL_$(VBOX_GCC_TOOL)_CC))'
2370 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_VERSION_CXX ?= $(call VBOX_GCC_VERSION,$(TOOL_$(VBOX_GCC_TOOL)_CXX))'
2371 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_LIBGCC ?= $(shell $(TOOL_$(VBOX_GCC_TOOL)_CC) -print-libgcc-file-name)'
2372 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-pointer-sign ?= $(call VBOX_GCC_CHECK_CC,-Wno-pointer-sign,)'
2373 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-array_bounds ?= $(call VBOX_GCC_CHECK_CC,-Wno-array-bounds,)'
2374# -Wextra produces additional useful warnings but includes -Wno-missing-field-initializers (too noisy)
2375 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wextra ?= $(call VBOX_GCC_CHECK_CC,-Wextra,)'
2376 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wlogical-op ?= $(call VBOX_GCC_CHECK_CC,-Wlogical-op,)'
2377 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-address ?= $(call VBOX_GCC_CHECK_CXX,-Wno-address,)'
2378 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-delete-non-virtual-dtor ?= $(call VBOX_GCC_CHECK_CXX,-Wno-delete-non-virtual-dtor,)'
2379 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-int-to-pointer-cast ?= $(call VBOX_GCC_CHECK_CC,-Wno-int-to-pointer-cast,)'
2380 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-invalid-offsetof ?= $(call VBOX_GCC_CHECK_CXX,-Wno-invalid-offsetof,)'
2381 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-missing-field-initializers ?= $(call VBOX_GCC_CHECK_CC,-Wno-missing-field-initializers,)'
2382 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-pointer-to-int-cast ?= $(call VBOX_GCC_CHECK_CC,-Wno-pointer-to-int-cast,)'
2383 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-variadic-macros ?= $(call VBOX_GCC_CHECK_CXX,-Wno-variadic-macros,)'
2384 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-vla ?= $(call VBOX_GCC_CHECK_CXX,-Wno-vla,)'
2385 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_fno-stack-protector ?= $(call VBOX_GCC_CHECK_CC,-fno-stack-protector,)'
2386 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_fno-dwarf2-cfi-asm ?= $(call VBOX_GCC_CHECK_CC,-fno-dwarf2-cfi-asm,)'
2387 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_fdiagnostics-show-option ?= $(call VBOX_GCC_CHECK_CC,-fdiagnostics-show-option,)'
2388# Produce code optimized for the most common IA32/AMD64/EM64T processors. Introduced with gcc version 4.2.
2389 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_mtune-generic ?= $(call VBOX_GCC_CHECK_CC,-mtune=generic,)'
2390 $(QUIET)$(APPEND) '$@' 'VBOX_LD_as_needed ?= $(call VBOX_GCC_CHECK_LD,--as-needed,)'
2391# gcc version < 3.4 has a bug in handling __attribute__((regparm(3))).
2392# See http://osdir.com/ml/gcc.prs/2002-08/msg00223.html and probably http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20004
2393 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_BUGGY_REGPARM ?= $$(int-lt $$(VBOX_GCC_VERSION_CC),30400)'
2394# Set default attribute for ELF and MACH-O symbols to ``hidden'' to reduce the number
2395# of relocation entries and PLT indirections in shared libraries. Don't allow for gcc version < 4.
2396 $(QUIET)$(APPEND) '$@' 'ifneq ($$(VBOX_GCC_VERSION_CC),)'
2397 $(QUIET)$(APPEND) '$@' ' ifneq ($$(int-ge $$(VBOX_GCC_VERSION_CC),40000),)'
2398 $(QUIET)$(APPEND) '$@' ' VBOX_GCC_fvisibility-hidden ?= $(call VBOX_GCC_CHECK_CC,-fvisibility=hidden -DVBOX_HAVE_VISIBILITY_HIDDEN -DRT_USE_VISIBILITY_DEFAULT,)'
2399 $(QUIET)$(APPEND) '$@' ' endif'
2400 $(QUIET)$(APPEND) '$@' 'endif'
2401ifn1of ($(KBUILD_TARGET),haiku)
2402# Set default attribute for inline functions to ``hidden'' to reduce the number
2403# of relocation entries and PLT indirections in shared libraries. Don't allow for gcc version < 4.
2404 $(QUIET)$(APPEND) '$@' 'ifneq ($$(VBOX_GCC_VERSION_CXX),)'
2405 $(QUIET)$(APPEND) '$@' ' ifneq ($$(int-ge $$(VBOX_GCC_VERSION_CXX),40000),)'
2406 $(QUIET)$(APPEND) '$@' ' VBOX_GCC_fvisibility-inlines-hidden ?= $(call VBOX_GCC_CHECK_CXX,-fvisibility-inlines-hidden,)'
2407 $(QUIET)$(APPEND) '$@' ' endif'
2408 $(QUIET)$(APPEND) '$@' 'endif'
2409endif
2410# Prevent warnings about unused parameters as of gcc-4.8 as this warning is now very verbose
2411 $(QUIET)$(APPEND) '$@' 'ifneq ($$(VBOX_GCC_VERSION_CXX),)'
2412 $(QUIET)$(APPEND) '$@' ' ifneq ($$(int-ge $$(VBOX_GCC_VERSION_CXX),40800),)'
2413 $(QUIET)$(APPEND) '$@' ' VBOX_GCC_Wno-unused-parameter ?= -Wno-unused-parameter'
2414 $(QUIET)$(APPEND) '$@' ' endif'
2415 $(QUIET)$(APPEND) '$@' 'endif'
2416# C++ Std settings
2417 $(QUIET)$(APPEND) '$@' 'ifneq ($$(VBOX_GCC_VERSION_CXX),)'
2418 $(QUIET)$(APPEND) '$@' ' ifneq ($$(int-ge $$(VBOX_GCC_VERSION_CXX),40800),)'
2419 $(QUIET)$(APPEND) '$@' ' VBOX_GCC_std ?= -std=c++11'
2420 $(QUIET)$(APPEND) '$@' ' else ifneq ($$(int-ge $$(VBOX_GCC_VERSION_CXX),40600),)'
2421 $(QUIET)$(APPEND) '$@' ' VBOX_GCC_std ?= -std=c++0x'
2422 $(QUIET)$(APPEND) '$@' ' endif'
2423 $(QUIET)$(APPEND) '$@' 'endif'
2424ifeq ($(KBUILD_TARGET),solaris)
2425 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_msave-args ?= $(call VBOX_GCC_CHECK_CXX,-msave-args,)'
2426# Detect the solaris assembler. It is used by the the 4.x gcc compilers,
2427# apparently. It will not be able to handle IEMAll via a -pipe, only when
2428# passed a file. The solaris assmbler rulez ... not!
2429 $(QUIET)$(APPEND) '$@' 'VBOX_AS_VERSION ?= $(shell `gcc -print-prog-name=as` -V -o /dev/null < /dev/null 2>&1 | kmk_sed -e '1!d' -e 's/^as: *//' )'
2430 $(QUIET)$(APPEND) '$@' 'if $$(pos Sun Compiler Common,$$(VBOX_AS_VERSION)) > 0'
2431 $(QUIET)$(APPEND) '$@' ' VBOX_GCC_USING_SOLARIS_AS=1'
2432 $(QUIET)$(APPEND) '$@' 'endif'
2433 $(QUIET)$(APPEND) '$@' 'ifndef VBOX_GCC_USING_SOLARIS_AS'
2434 $(QUIET)$(APPEND) '$@' ' VBOX_GCC_pipe ?= -pipe'
2435 $(QUIET)$(APPEND) '$@' 'endif'
2436else
2437 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_pipe ?= -pipe'
2438endif
2439# Find the compiler includes for IPRT no-crt.
2440# Note that `$(dir $(gcc -print-libgcc-file-name))/include does not work for a 64-bit cross build on a 32-bit build host.
2441ifeq ($(KBUILD_HOST),win)
2442# With the cygwin issues and gcc on windows returning a useless path, just skip this on windows.
2443 $(QUIET)$(APPEND) '$@' 'VBOX_PATH_GCC_INCS ?= '
2444else
2445 $(QUIET)$(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'
2446endif
2447# 32-bit (GC) compiler switch detection.
2448 $(QUIET)$(APPEND) '$@' 'VBOX_GCC32_PATH_CC ?= $(which $(TOOL_$(VBOX_GCC32_TOOL)_CC))'
2449 $(QUIET)$(APPEND) '$@' 'VBOX_GCC32_PATH_CXX ?= $(which $(TOOL_$(VBOX_GCC32_TOOL)_CXX))'
2450 $(QUIET)$(APPEND) '$@' 'VBOX_GCC32_VERSION_CC ?= $(call VBOX_GCC_VERSION,$(TOOL_$(VBOX_GCC32_TOOL)_CC))'
2451 $(QUIET)$(APPEND) '$@' 'VBOX_GCC32_VERSION_CXX ?= $(call VBOX_GCC_VERSION,$(TOOL_$(VBOX_GCC32_TOOL)_CXX))'
2452 $(QUIET)$(APPEND) '$@' 'VBOX_GCC32_LIBGCC ?= $(shell $(TOOL_$(VBOX_GCC32_TOOL)_CC) -print-libgcc-file-name)'
2453 $(QUIET)$(APPEND) '$@' 'VBOX_GCC32_Wno-variadic-macros ?= $(call VBOX_GCC32_CHECK_CXX,-Wno-variadic-macros,)'
2454# darwin no_compact_linkedit starting at Xcode 3.2
2455ifeq ($(KBUILD_HOST),darwin)
2456 $(QUIET)$(APPEND) '$@' 'VBOX_LD_no_compact_linkedit ?= $(call VBOX_GCC_CHECK_LD,-no_compact_linkedit,)'
2457endif
2458# YASM
2459 $(QUIET)$(APPEND) '$@' 'VBOX_YASM_Wno-segreg-in-64bit ?= $(call VBOX_YASM_CHECK,-Wno-segreg-in-64bit,)'
2460
2461ifdef VBOX_PATH_PREFIX_MINGW32
2462 $(QUIET)$(APPEND) '$@' 'VBOX_MINGW32_VERSION_CC ?= $(call VBOX_GCC_VERSION,$(VBOX_PATH_PREFIX_MINGW32)gcc -m32)'
2463 $(QUIET)$(APPEND) '$@' 'VBOX_MINGW32_VERSION_CXX ?= $(call VBOX_GCC_VERSION,$(VBOX_PATH_PREFIX_MINGW32)g++ -m32)'
2464 $(QUIET)$(APPEND) '$@' 'VBOX_MINGW32_Wno-array-bounds ?= $(call VBOX_GCC_CHECK_EX_CXX,$(VBOX_PATH_PREFIX_MINGW32)g++ -m32,-Wno-array-bounds,)'
2465 $(QUIET)$(APPEND) '$@' 'VBOX_MINGW32_Wno-unused-but-set-variable ?= $(call VBOX_GCC_CHECK_EX_CXX,$(VBOX_PATH_PREFIX_MINGW32)g++ -m32,-Wno-unused-but-set-variable,)'
2466 $(QUIET)$(APPEND) '$@' 'VBOX_MINGW32_Wno-maybe-uninitialized ?= $(call VBOX_GCC_CHECK_EX_CXX,$(VBOX_PATH_PREFIX_MINGW32)g++ -m32,-Wno-maybe-uninitialized,)'
2467 $(QUIET)$(APPEND) '$@' 'VBOX_MINGW32_USER_LABEL_PREFIX ?= $(shell echo "__USER_LABEL_PREFIX__" | $(VBOX_PATH_PREFIX_MINGW32)g++ -m32 -E -xc++ - | $(SED) -e "/^$(HASH)/d")'
2468endif
2469ifdef VBOX_PATH_PREFIX_MINGW64
2470 $(QUIET)$(APPEND) '$@' 'VBOX_MINGW64_VERSION_CC ?= $(call VBOX_GCC_VERSION,$(VBOX_PATH_PREFIX_MINGW64)gcc -m64)'
2471 $(QUIET)$(APPEND) '$@' 'VBOX_MINGW64_VERSION_CXX ?= $(call VBOX_GCC_VERSION,$(VBOX_PATH_PREFIX_MINGW64)g++ -m64)'
2472 $(QUIET)$(APPEND) '$@' 'VBOX_MINGW64_Wno-array-bounds ?= $(call VBOX_GCC_CHECK_EX_CXX,$(VBOX_PATH_PREFIX_MINGW64)g++ -m64,-Wno-array-bounds,)'
2473 $(QUIET)$(APPEND) '$@' 'VBOX_MINGW64_Wno-unused-but-set-variable ?= $(call VBOX_GCC_CHECK_EX_CXX,$(VBOX_PATH_PREFIX_MINGW64)g++ -m64,-Wno-unused-but-set-variable,)'
2474 $(QUIET)$(APPEND) '$@' 'VBOX_MINGW64_Wno-maybe-uninitialized ?= $(call VBOX_GCC_CHECK_EX_CXX,$(VBOX_PATH_PREFIX_MINGW64)g++ -m64,-Wno-maybe-uninitialized,)'
2475 $(QUIET)$(APPEND) '$@' 'VBOX_MINGW64_USER_LABEL_PREFIX ?= $(shell echo "__USER_LABEL_PREFIX__" | $(VBOX_PATH_PREFIX_MINGW64)g++ -m64 -E -xc++ - | $(SED) -e "/^$(HASH)/d")'
2476endif
2477 $(QUIET)$(ECHO) '========= START OF $@ ========='
2478 $(QUIET)$(CAT) $@
2479 $(QUIET)$(ECHO) '=========== END OF $@ ========='
2480
2481include $(PATH_OUT)/DynamicConfig.kmk
2482endif # !VBOX_NOINC_DYNAMIC_CONFIG_KMK
2483
2484#
2485# Warnings as errors.
2486#
2487# GCC: We disable warnings on non-X86 systems because of the variadic
2488# macro usage in the logger.
2489#
2490ifdef VBOX_WITH_WARNINGS_AS_ERRORS
2491 if $(VBOX_GCC_VERSION_CXX) >= 40000
2492 VBOX_GCC_WERR ?= -Werror
2493 endif
2494 VBOX_VCC_WERR ?= -WX
2495 VBOX_VCC_LD_WERR ?= ## @todo later also: -WX
2496endif
2497
2498
2499#
2500# Misc macros.
2501#
2502
2503##
2504# Edits VirtualBox version, vendor and package strings in a text file.
2505#
2506# The rule using this must list $(VBOX_SVN_REV_KMK) as a prerequisite.
2507#
2508# @param 1 The input filename.
2509# @param 2 The output filename.
2510#
2511VBOX_EDIT_VERSION_CMD_FN = $(SED) \
2512 -e 's/@VBOX_VERSION_MAJOR@/$(VBOX_VERSION_MAJOR)/g' \
2513 -e 's/@VBOX_VERSION_MINOR@/$(VBOX_VERSION_MINOR)/g' \
2514 -e 's/@VBOX_VERSION_BUILD@/$(VBOX_VERSION_BUILD)/g' \
2515 -e 's/@VBOX_VERSION_STRING@/$(VBOX_VERSION_STRING)/g' \
2516 -e 's/@VBOX_SVN_REV@/$(VBOX_SVN_REV)/g' \
2517 -e 's/@VBOX_VENDOR@/$(VBOX_VENDOR)/g' \
2518 -e 's/@VBOX_VENDOR_SHORT@/$(VBOX_VENDOR_SHORT)/g' \
2519 -e 's/@VBOX_PRODUCT@/$(VBOX_PRODUCT)/g' \
2520 -e 's/@VBOX_C_YEAR@/$(VBOX_C_YEAR)/g' \
2521 -e 's/@VBOX_PACKAGE_STRING@/$(VBOX_PACKAGE_STRING)/g' \
2522 --output $(2) $(1)
2523
2524##
2525# Generates a rule for editing a file using VBOX_EDIT_VERSION_CMD_FN.
2526#
2527# @param 1 The target name.
2528# @param 2 The input filename relative to the current sub-makefile.
2529# @param 3 The output filename relative to the target output dir.
2530# Optional, defaults to 2.
2531#
2532VBOX_EDIT_VERSION_RULE_FN = $(eval $(value VBOX_EDIT_VERSION_RULE_DEF))
2533define VBOX_EDIT_VERSION_RULE_DEF
2534$$($(1)_0_OUTDIR)/$(if $(3),$(3),$(2)): $(PATH_SUB_CURRENT)/$(2) $(VBOX_SVN_REV_KMK) | $$(dir $$@)
2535 $(call MSG_GENERATE,$(1),$@,$<)
2536 $(QUIET)$(call VBOX_EDIT_VERSION_CMD_FN,$<,$@)
2537endef
2538
2539
2540##
2541# Fill in am import library target based on a somewhat special windows .def file.
2542#
2543# @param 1 The target name of the import library.
2544# @param 2 The name of the real library.
2545# @param 3 The .def-file paths relative to the current makefile.
2546#
2547VBOX_GENERATE_IMPORT_TARGET_FN = $(eval $(VBOX_GENERATE_IMPORT_TARGET_DEF))
2548define VBOX_GENERATE_IMPORT_TARGET_DEF
2549$(1)_TEMPLATE = VBoxR3Dll
2550$(1)_INST = $(INST_LIB)
2551if $(KBUILD_TARGET) == "darwin"
2552 $(1)_LDFLAGS = -install_name $(VBOX_DYLD_EXECUTABLE_PATH)/$(2)$(SUFF_DLL)
2553else ifn1of ($(KBUILD_TARGET), os2 win)
2554 $(1)_SONAME = $(2)$(SUFF_DLL)
2555endif
2556if1of ($(KBUILD_TARGET), os2 win)
2557 $(1)_SOURCES = $$($(1)_0_OUTDIR)/$(1)Imp.def
2558 $(1)_CLEAN = $$($(1)_0_OUTDIR)/$(1)Imp.def
2559else
2560 $(1)_SOURCES = $$($(1)_0_OUTDIR)/$(1)Imp.c
2561 $(1)_CLEAN = $$($(1)_0_OUTDIR)/$(1)Imp.c
2562endif
2563
2564$$$$($(1)_SOURCES): $(addprefix $(PATH_SUB_CURRENT)/,$(3)) $(PATH_ROOT)/src/bldprogs/deftoimp.sed | $$$$(dir $$$$@)
2565 $$(call MSG_GENERATE,,$$@)
2566ifeq ($(KBUILD_TARGET),os2)
2567 $$(SED) \
2568 -e '/not-$(KBUILD_TARGET)/d' \
2569 -e '/not-$(KBUILD_TARGET_ARCH)/d' \
2570 -e 's/^LIBRARY[[:space:]][[:space:]]*\(.*\)\.dll/LIBRARY \1 INITINSTANCE TERMINSTANCE\nDATA MULTIPLE\n/' \
2571 -e 's/^[ \t][ \t]*\([_a-zA-Z]\)/ _\1/' \
2572 -e 's/[ \t]DATA[ \t]*/ /' \
2573 --output $$@ $(addprefix $(PATH_SUB_CURRENT)/,$(3))
2574else ifeq ($(KBUILD_TARGET),win)
2575 $$(SED) \
2576 -e '/not-$(KBUILD_TARGET)/d' \
2577 -e '/not-$(KBUILD_TARGET_ARCH)/d' \
2578 --output $$@ $(addprefix $(PATH_SUB_CURRENT)/,$(3))
2579else
2580 $$(QUIET)$$(APPEND) -tn $$@ \
2581 '#ifdef VBOX_HAVE_VISIBILITY_HIDDEN' \
2582 '# define EXPORT __attribute__((visibility("default")))' \
2583 '# define EXPORT_DATA __attribute__((visibility("default")))' \
2584 '#else' \
2585 '# define EXPORT' \
2586 '# define EXPORT_DATA' \
2587 '#endif' \
2588 ''
2589 $$(SED) \
2590 -e '/not-$(KBUILD_TARGET)/d' \
2591 -e '/not-$(KBUILD_TARGET_ARCH)/d' \
2592 -f $(PATH_ROOT)/src/bldprogs/deftoimp.sed \
2593 --append $$@ $(addprefix $(PATH_SUB_CURRENT)/,$(3))
2594endif
2595endef # VBOX_GENERATE_IMPORT_TARGET_DEF
2596
2597
2598#
2599# Code Signing.
2600#
2601ifdef VBOX_SIGNING_MODE
2602 ifeq ($(KBUILD_HOST),win)
2603 #
2604 # Windows
2605 #
2606
2607 # VBOX_PATH_SELFSIGN points to the Vista WDK bin/SelfSign directory.
2608 ifndef VBOX_PATH_SELFSIGN
2609 VBOX_PATH_SELFSIGN := $(lastword $(sort $(wildcard $(PATH_DEVTOOLS)/win.x86/selfsign/*)))
2610 ifeq ($(VBOX_PATH_SELFSIGN),)
2611 VBOX_PATH_SELFSIGN := $(PATH_DEVTOOLS)/win.x86/selfsign/r1
2612 endif
2613 endif
2614 VBOX_SIGNTOOL ?= $(PATH_DEVTOOLS)/bin/retry.cmd $(VBOX_PATH_SELFSIGN)/SignTool.exe
2615 VBOX_INF2CAT ?= $(VBOX_PATH_SELFSIGN)/Inf2Cat.exe
2616
2617 # There are three signing modes; 'test', 'development' and 'release'.
2618 ifeq ($(strip $(VBOX_SIGNING_MODE)),test)
2619 VBOX_CERTIFICATE_SUBJECT_NAME ?= MyTestCertificate
2620 VBOX_CERTIFICATE_SUBJECT_NAME_ARGS ?= /n "$(VBOX_CERTIFICATE_SUBJECT_NAME)"
2621 else if1of ($(VBOX_SIGNING_MODE), release development)
2622 VBOX_CERTIFICATE_SUBJECT_NAME ?= Oracle Corporation
2623 VBOX_CERTIFICATE_SUBJECT_NAME_ARGS ?= /n "$(VBOX_CERTIFICATE_SUBJECT_NAME)" /a
2624 VBOX_CROSS_CERTIFICATE_FILE ?= $(VBOX_PATH_SELFSIGN)/MSCV-VSClass3.cer
2625 VBOX_CROSS_CERTIFICATE_FILE_ARGS ?= /ac "$(VBOX_CROSS_CERTIFICATE_FILE)"
2626 VBOX_TSA_URL ?= http://timestamp.verisign.com/scripts/timestamp.dll
2627 VBOX_TSA_URL_ARGS ?= /t "$(VBOX_TSA_URL)"
2628 else
2629 $(error VBox: Unknown VBOX_SIGNING_MODE: $(VBOX_SIGNING_MODE))
2630 endif
2631 VBOX_CERTIFICATE_STORE ?= my
2632 VBOX_CERTIFICATE_STORE_ARGS ?= /s "$(VBOX_CERTIFICATE_STORE)"
2633
2634 ## Commands for signing a driver image after link.
2635 VBOX_SIGN_DRIVER_CMDS ?= $(if $(eq $(tool_do),LINK_LIBRARY),,$(call VBOX_SIGN_IMAGE_FN,$(out)))
2636 ## Sign a file (generic).
2637 # @param 1 The file to sign.
2638 # @param 2 File description. Optional.
2639 # @param 3 Additional parameters. Optional.
2640 VBOX_SIGN_FILE_FN ?= $(VBOX_SIGNTOOL) sign \
2641 $(VBOX_CROSS_CERTIFICATE_FILE_ARGS) \
2642 $(VBOX_CERTIFICATE_STORE_ARGS) \
2643 $(VBOX_CERTIFICATE_SUBJECT_NAME_ARGS) \
2644 $(VBOX_TSA_URL_ARGS) \
2645 $(if $(strip $(2)),/d "$(strip $(2))",) \
2646 $(3) \
2647 $(1)
2648 ## Sign an executable image.
2649 # @param 1 The file to sign.
2650 # @param 2 File description. Optional.
2651 VBOX_SIGN_IMAGE_FN ?= $(call VBOX_SIGN_FILE_FN,$(1),$(2),/ph)
2652
2653 ## Create a security catalog file.
2654 # @param 1 The directory containing the stuff to sign.
2655 # @param 2 The expected .cat name. (Inf2Cat lowercases it)
2656 # @param 3 The list of OSes, separated by ';'.
2657 VBOX_MAKE_CAT_HLP_FN ?= \
2658 $(RM) -f $(2)\
2659 $(NL)$(TAB)$(VBOX_INF2CAT) /driver:$(strip $(1)) /os:$(strip $(subst ;,$(COMMA),$(3))) /verbose \
2660 $(NL)$(TAB)$(MV) $(2) $(2) \
2661 $(NL)$(TAB)$(call VBOX_SIGN_FILE_FN,$(2))
2662 VBOX_MAKE_CAT64_FN ?= $(call VBOX_MAKE_CAT_HLP_FN,$(1),$(2),XP_X64;Server2003_X64;Vista_X64)
2663 VBOX_MAKE_CAT32_FN ?= $(call VBOX_MAKE_CAT_HLP_FN,$(1),$(2),2000;XP_X86;Server2003_X86;Vista_X86)
2664 ifeq ($(KBUILD_TARGET_ARCH),x86)
2665 VBOX_MAKE_CAT_FN ?= $(call VBOX_MAKE_CAT32_FN,$(1),$(2))
2666 else
2667 VBOX_MAKE_CAT_FN ?= $(call VBOX_MAKE_CAT64_FN,$(1),$(2))
2668 endif
2669
2670 # Go nuts, sign everything.
2671 if "$(strip $(VBOX_SIGNING_MODE))" == "release" || defined(VBOX_WITH_HARDENING)
2672 ## Commands for signing an executable or a dll image after link.
2673 VBOX_SIGN_IMAGE_CMDS ?= $(if $(eq $(tool_do),LINK_LIBRARY),,$(call VBOX_SIGN_IMAGE_FN,$(out)))
2674 endif
2675 ## Enable signing of the additions.
2676 VBOX_SIGN_ADDITIONS ?= 1
2677
2678 else ifeq ($(KBUILD_HOST),darwin)
2679 #
2680 # Darwin code signing.
2681 #
2682 # Currently release signing is done when packing. This may change later.
2683 # (Installer package signing is done elsewhere (VBOX_MACOSX_INSTALLER_SIGN).)
2684 #
2685 ifeq ($(strip $(VBOX_SIGNING_MODE)),test)
2686 VBOX_CERTIFICATE_SUBJECT_NAME ?= $(error You, need to set VBOX_CERTIFICATE_SUBJECT_NAME in LocalConfig.kmk.)
2687 VBOX_CERTIFICATE_SUBJECT_NAME_ARGS ?= --sign "$(VBOX_CERTIFICATE_SUBJECT_NAME)"
2688 else if1of ($(VBOX_SIGNING_MODE), release development)
2689 VBOX_CERTIFICATE_SUBJECT_NAME ?= Developer ID Application: Oracle America, Inc.
2690 VBOX_CERTIFICATE_SUBJECT_NAME_ARGS ?= --sign "$(VBOX_CERTIFICATE_SUBJECT_NAME)"
2691 else
2692 $(error VBox: Unknown VBOX_SIGNING_MODE: $(VBOX_SIGNING_MODE))
2693 endif
2694
2695 VBOX_CODESIGN ?= codesign
2696
2697 # The above version with complicated requirements is what Xcode 5.0.1GM suggest for kexts.
2698 VBOX_SIGN_BUNDLE_FN = $(VBOX_CODESIGN) \
2699 --verbose=9 \
2700 --force \
2701 --file-list - \
2702 $(VBOX_CERTIFICATE_SUBJECT_NAME_ARGS) \
2703 $(1) $(if $(2),--identifier "$(2)",)
2704
2705 ## Sign a Mach-O image.
2706 # @param 1 The bundle to sign.
2707 # @param 2 Identifier, optional.
2708 VBOX_SIGN_MACHO_FN = $(VBOX_CODESIGN) \
2709 --verbose=9 \
2710 --force \
2711 --file-list - \
2712 $(VBOX_CERTIFICATE_SUBJECT_NAME_ARGS) \
2713 $(1) \
2714 $(if $(2),--identifier "$(2)",)
2715
2716 ## Sign a VMM Mach-O image.
2717 # @param 1 The bundle to sign.
2718 # @param 2 Identifier, optional.
2719 VBOX_SIGN_VMM_MOD_FN = $(VBOX_CODESIGN) \
2720 --verbose=9 \
2721 --force \
2722 --file-list - \
2723 $(VBOX_CERTIFICATE_SUBJECT_NAME_ARGS) \
2724 $(1) -D $(1).codesign \
2725 $(if $(2),--identifier "$(2)",)
2726
2727 else
2728 # Not Windows or mac os x build host, ignore.
2729 VBOX_SIGNING_MODE :=
2730 endif
2731endif
2732
2733#
2734# Windows .inf editing.
2735#
2736ifeq ($(KBUILD_TARGET_ARCH),x86)
2737 VBOX_EDIT_INF_FN = $(call VBOX_EDIT_INF32_FN,$(1),$(2))
2738else
2739 VBOX_EDIT_INF_FN = $(call VBOX_EDIT_INF64_FN,$(1),$(2))
2740endif
2741## Edit an inf file an x86 target.
2742# @param 1 The inf file to edit.
2743# @param 2 The output file.
2744VBOX_EDIT_INF32_FN = $(SED) $(if $(VBOX_SIGNING_MODE),-e 's/^;cat *//', -e '/^;cat /d') \
2745 -e 's/^;x86 *//' \
2746 -e '/^;amd64 /d' \
2747 -e 's/^;edit-DriverVer.*/DriverVer = $(date-utc %m\/%d\/%Y),$(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)/' \
2748 --output $(2) \
2749 $(1)
2750## Edit an inf file an x86 target.
2751# @param 1 The inf file to edit.
2752# @param 2 The output file.
2753VBOX_EDIT_INF64_FN = $(SED) \
2754 $(if $(VBOX_SIGNING_MODE),-e 's/^;cat *//', -e '/^;cat /d')\
2755 -e 's/^;amd64 *//' \
2756 -e '/^;x86 /d' \
2757 -e 's/^;edit-DriverVer.*/DriverVer = $(date-utc %m\/%d\/%Y),$(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)/' \
2758 --output $(2) \
2759 $(1)
2760
2761##
2762# Helper macro for re-signing DLL images from tools that we ship so they won't
2763# cause trouble for the hardened build requirements.
2764#
2765# Invoke via $(call VBOX_RE_SIGN_DLL_FN) inside the SOURCES list. Necessary
2766# _CLEAN entry will be added to the target. If hardening is not enabled or
2767# we're not on windows, the source will be returned.
2768#
2769# @returns Name of the output file name. May have leading space, but no trailing.
2770# @param 1 Target name.
2771# @param 2 The source name.
2772#
2773if defined(VBOX_SIGNING_MODE) && "$(KBUILD_TARGET)" == "win"
2774 VBOX_RE_SIGN_DLL_FN = $(if-expr !defined($(1)_VBOX_RE_SIGNED_$(notdir $(2))),\
2775 $(evalcall VBOX_RE_SIGN_DLL_INTERNAL_FN,$1,$2)\
2776 ,)$($(1)_0_OUTDIR)/$(notdir $2)
2777
2778define VBOX_RE_SIGN_DLL_INTERNAL_FN
2779local n = $(notdir $2)
2780ifndef $(1)_VBOX_RE_SIGNED_$(n)
2781 $(1)_VBOX_RE_SIGNED_$(n) := 1
2782 $(eval $(1)_CLEAN += $$($(1)_0_OUTDIR)/$(n))
2783
2784 $$($(1)_0_OUTDIR)/$(n): $(2) $(VBOX_VERSION_STAMP) | $$(dir $$@)
2785 $(call MSG_TOOL,SIGNTOOL,,$<,$@)
2786 $(RM) -f -- "$@"
2787 $(CP) -- "$<" "$@"
2788 $(VBOX_VCC_EDITBIN) /LargeAddressAware /DynamicBase /NxCompat /Release /IntegrityCheck \
2789 /Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
2790 "$@"
2791 $(call VBOX_SIGN_IMAGE_FN,$@)
2792endif
2793endef # VBOX_RESIGN_DLL_FN
2794else
2795 VBOX_RE_SIGN_DLL_FN = $(2)
2796endif
2797
2798
2799##
2800# @param
2801VBOX_RESIGN_DLL_FN =
2802
2803#
2804# Adjust kBuild defaults.
2805#
2806kBuildGlobalDefaults_DEBUG_NOSTAGE.win = true
2807kBuildGlobalDefaults_DEBUG_NOSTAGE.os2 = true
2808if1of ($(KBUILD_TARGET), darwin win)
2809 kBuildGlobalDefaults_LD_DEBUG = split
2810endif
2811
2812
2813#
2814# Haiku resource and version generation.
2815#
2816ifeq ($(KBUILD_HOST),haiku)
2817 VBOX_HAIKU_RCTOOL := rc
2818 VBOX_HAIKU_XRESTOOL := xres
2819 VBOX_HAIKU_SETVERSIONTOOL := setversion
2820 # XXX: install won't preserve attributes...
2821 VBOX_HAIKU_MIMESETTOOL := mimeset
2822
2823 ## Add optional resources to the program, set its version info, and sniff its mime properties.
2824 # @param 1 The file to add resources to.
2825 # @param 2 The resource files.
2826 # @param 3 The target name.
2827define VBOX_HAIKU_XRES_SETVER_FN
2828 $(if $(2),$(call MSG_TOOL,HaikuAddResources,$(3),$(2))
2829 $(QUIET)$(VBOX_HAIKU_XRESTOOL) -o $(1) $(2),)
2830 $(call MSG_TOOL,HaikuSetVersion,$(3))
2831 $(QUIET)$(VBOX_HAIKU_SETVERSIONTOOL) $(1) \
2832 -app $(VBOX_VERSION_MAJOR) $(VBOX_VERSION_MINOR) $(VBOX_VERSION_BUILD) d $(VBOX_SVN_REV) \
2833 -short "$(VBOX_PRODUCT)" \
2834 -long "$(VBOX_PRODUCT) $(VBOX_VERSION_STRING) $(shell /bin/echo -e '\xC2\xA9')2009-$(VBOX_C_YEAR) $(VBOX_VENDOR)"
2835 $(call MSG_TOOL,HaikuMimeSet,$(3))
2836 $(QUIET)$(VBOX_HAIKU_MIMESETTOOL) -f $(1)
2837endef
2838
2839 VBOX_HAIKU_XRES_SETVER_CMDS ?= $(if $(eq $(tool_do),LINK_PROGRAM),$(call VBOX_HAIKU_XRES_SETVER_FN,$(out),$($(target)_RSRCS),$(target)),)
2840endif
2841
2842#
2843# Default prefixes and suffixes.
2844#
2845VBOX_PREF_LIB =
2846if1of ($(KBUILD_TARGET), os2 win)
2847VBOX_SUFF_LIB = .lib
2848else
2849VBOX_SUFF_LIB = .a
2850endif
2851VBOX_SUFF_DLL = $(SUFF_DLL)
2852ifeq ($(KBUILD_TARGET),os2) # GXX3OMF produces out .o at the moment.
2853VBOX_SUFF_OBJ = .o
2854else
2855VBOX_SUFF_OBJ = $(SUFF_OBJ)
2856endif
2857VBOXW32GUEST_SUFF_LIB = .lib
2858VBOXLNX32GUEST_SUFF_LIB = .a
2859
2860#
2861# SDKs for external libraries.
2862#
2863SDK_VBOX_LIBXML2 = .
2864SDK_VBOX_LIBXML2_INCS ?= $(PATH_ROOT)/src/libs/libxml2-2.6.31/include
2865SDK_VBOX_LIBXML2_DEFS ?= _REENTRANT
2866SDK_VBOX_LIBXML2_DEFS.win += WIN32 _WINDOWS _MBCS
2867# note: no linking to LIB here, we do that explicitly in src/VBox/Runtime/Makefile.kmk to link
2868# libxml against VBoxRT
2869
2870SDK_VBOX_LIBPNG = .
2871SDK_VBOX_LIBPNG_INCS ?= $(PATH_ROOT)/src/libs/libpng-1.2.8
2872SDK_VBOX_LIBPNG_LIBS ?= $(PATH_STAGE_LIB)/VBox-libpng$(VBOX_SUFF_LIB)
2873
2874SDK_VBOX_ZLIB = .
2875if1of ($(KBUILD_TARGET), os2 solaris win)
2876 SDK_VBOX_ZLIB_INCS ?= $(PATH_ROOT)/src/libs/zlib-1.2.6
2877 SDK_VBOX_ZLIB_LIBS ?= $(PATH_STAGE_LIB)/VBox-zlib$(VBOX_SUFF_LIB)
2878else
2879 SDK_VBOX_ZLIB_INCS ?=
2880 SDK_VBOX_ZLIB_LIBS ?= z
2881 SDK_VBOX_ZLIB_DEFS.linux ?= _LARGEFILE64_SOURCE
2882endif
2883
2884SDK_VBOX_ZLIB-x86 = .
2885SDK_VBOX_ZLIB-x86_EXTENDS = VBOX_ZLIB
2886if1of ($(KBUILD_TARGET), os2 solaris win)
2887 SDK_VBOX_ZLIB_LIBS-x86 ?= $(PATH_STAGE_LIB)/VBox-zlib-x86$(VBOX_SUFF_LIB)
2888endif
2889
2890SDK_VBOX_ZLIB_STATIC = .
2891SDK_VBOX_ZLIB_STATIC_EXTENDS ?= VBOX_ZLIB
2892if1of ($(KBUILD_TARGET), os2 win) # Not required on solaris.
2893 SDK_VBOX_ZLIB_STATIC_LIBS ?= $(PATH_STAGE_LIB)/VBox-zlib-static$(VBOX_SUFF_LIB)
2894endif
2895
2896SDK_VBOX_OPENSSL = Only for VBoxRT and/or statically linked programs.
2897SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS := $(PATH_OUT)/obj/crypto-headers/include
2898SDK_VBOX_OPENSSL_INCS ?= $(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)
2899SDK_VBOX_OPENSSL_ORDERDEPS ?= $(crypto-headers_1_TARGET)
2900SDK_VBOX_OPENSSL_LIBS ?= \
2901 $(PATH_STAGE_LIB)/VBox-libssl$(VBOX_SUFF_LIB) \
2902 $(PATH_STAGE_LIB)/VBox-libcrypto$(VBOX_SUFF_LIB)
2903
2904SDK_VBOX_OPENSSL-x86 = Only for VBoxRT and/or statically linked programs.
2905SDK_VBOX_OPENSSL-x86_VBOX_DEFAULT_INCS := $(PATH_OUT)/obj/crypto-headers/include
2906SDK_VBOX_OPENSSL-x86_INCS ?= $(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)
2907SDK_VBOX_OPENSSL-x86_ORDERDEPS ?= $(crypto-headers_1_TARGET)
2908SDK_VBOX_OPENSSL-x86_LIBS ?= \
2909 $(PATH_STAGE_LIB)/VBox-libssl-x86$(VBOX_SUFF_LIB) \
2910 $(PATH_STAGE_LIB)/VBox-libcrypto-x86$(VBOX_SUFF_LIB)
2911
2912SDK_VBOX_OPENSSL2 = What you should be using.
2913SDK_VBOX_OPENSSL2_EXTENDS = VBOX_OPENSSL
2914if "$(SDK_VBOX_OPENSSL_INCS)" == "$(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)"
2915 SDK_VBOX_OPENSSL2_LIBS = $(NO_SUCH_VARIABLE)
2916endif
2917
2918SDK_VBoxOpenSslExtPack = Internal use only.
2919SDK_VBoxOpenSslExtPack_INCS = $(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)
2920SDK_VBoxOpenSslExtPack_ORDERDEPS = $(crypto-headers_1_TARGET)
2921SDK_VBoxOpenSslExtPack_LIBS = \
2922 $(PATH_STAGE_LIB)/VBoxExtPack-libssl$(VBOX_SUFF_LIB) \
2923 $(PATH_STAGE_LIB)/VBoxExtPack-libcrypto$(VBOX_SUFF_LIB)
2924
2925ifdef VBOX_WITH_S3
2926VBOX_WITH_LIBCURL = 1
2927SDK_VBOX_LIBCURL = .
2928SDK_VBOX_LIBCURL_INCS ?= $(PATH_ROOT)/src/libs/curl-7.27.0/include
2929SDK_VBOX_LIBCURL_LIBS ?= $(PATH_STAGE_LIB)/VBox-libcurl$(VBOX_SUFF_LIB)
2930SDK_VBOX_LIBCURL_DEFS ?= BUILDING_LIBCURL
2931
2932SDK_VBOX_LIBCURL-x86 = .
2933SDK_VBOX_LIBCURL-x86_INCS ?= $(PATH_ROOT)/src/libs/curl-7.27.0/include
2934SDK_VBOX_LIBCURL-x86_LIBS.x86 ?= $(PATH_STAGE_LIB)/VBox-libcurl-x86$(VBOX_SUFF_LIB)
2935SDK_VBOX_LIBCURL-x86_DEFS ?= BUILDING_LIBCURL
2936endif
2937
2938SDK_VBOX_VPX = .
2939SDK_VBOX_VPX_DEFAULT_INCS := $(PATH_ROOT)/src/libs/libvpx
2940SDK_VBOX_VPX_INCS ?= $(SDK_VBOX_VPX_DEFAULT_INCS)
2941SDK_VBOX_VPX_LIBS ?= $(PATH_STAGE_LIB)/VBox-libvpx$(VBOX_SUFF_LIB)
2942
2943#
2944# Special SDK for the problematic NTDLL.LIB.
2945#
2946SDK_VBOX_NTDLL = Mini NTDLL import library, required IPRT.
2947SDK_VBOX_NTDLL_LIBS.x86 ?= $(PATH_STAGE_LIB)/RuntimeR3NtDll-x86.lib
2948SDK_VBOX_NTDLL_LIBS.amd64 ?= $(PATH_STAGE_LIB)/RuntimeR3NtDll-amd64.lib
2949
2950#
2951# The linux kernel headers(/sources).
2952#
2953if1of ($(KBUILD_TARGET), linux)
2954 ifeq ($(origin VBOX_LINUX_SRC),undefined)
2955 ifneq ($(wildcard /lib/modules/$(shell uname -r)/build/include/linux/autoconf.h /lib/modules/$(shell uname -r)/build/include/generated/autoconf.h),)
2956 export VBOX_LINUX_SRC := /lib/modules/$(shell uname -r)/build
2957 else
2958 export VBOX_LINUX_SRC := /usr/src/linux
2959 endif
2960 endif
2961 ifneq ($(VBOX_LINUX_SRC),)
2962 ifeq ($(origin VBOX_LINUX_INCS),undefined)
2963 export VBOX_LINUX_INCS := $(VBOX_LINUX_SRC)/include
2964 # XXX hack alert! Support split Linux kernels (make O=<build directory>). kernelpath points to
2965 # the obj directory while VBOX_LINUX_SRC points to the virgin source directory.
2966 # XXX put this crap elsewhere
2967 kernelpath := $(shell $(SED_EXT) -ne 's+^KERNELSRC.*= *\(.*\)+\1+p' $(VBOX_LINUX_SRC)/Makefile)
2968 ifeq ($(kernelpath),)
2969 # Linux >= 2.6.25
2970 kernelpath := $(shell $(SED_EXT) -ne 's+^MAKEARGS *:= *-C *\(\S*\).*+\1+p' $(VBOX_LINUX_SRC)/Makefile)
2971 endif
2972 ifneq ($(kernelpath),)
2973 # absolute path?
2974 ifneq ($(patsubst /%,,$(kernelpath)),)
2975 # no, relative path
2976 kernelpath := $(realpath $(VBOX_LINUX_SRC)/$(kernelpath))
2977 endif
2978 endif
2979 ifneq ($(kernelpath),)
2980 VBOX_LINUX_INCS += $(VBOX_LINUX_SRC)/include2 $(kernelpath)/include
2981 else
2982 kernelpath := $(VBOX_LINUX_SRC)
2983 endif
2984 #
2985 VBOX_LINUX_INCS += $(kernelpath)/include/asm-i386/mach-default \
2986 $(kernelpath)/include/asm-x86/mach-default \
2987 $(kernelpath)/include/drm \
2988 $(kernelpath)/arch/x86/include \
2989 $(kernelpath)/arch/x86/include/asm/mach-default \
2990 $(kernelpath)/arch/x86/include/uapi \
2991 $(VBOX_LINUX_SRC)/arch/x86/include/generated \
2992 $(VBOX_LINUX_SRC)/arch/x86/include/generated/uapi \
2993 $(kernelpath)/include/uapi \
2994 $(VBOX_LINUX_SRC)/include/generated/uapi \
2995 $(kernelpath)/include
2996 endif
2997 endif
2998 # Since Linux 2.6.15, <linux/autoconf.h> is included like this. It cannot hurt to do the
2999 # same for older Linux kernels
3000 ifneq ($(wildcard $(kernelpath)/include/linux/kconfig.h),)
3001 # Linux >= 3.1
3002 export VBOX_LINUX_INCLUDE := -include $(kernelpath)/include/linux/kconfig.h
3003 else ifneq ($(wildcard $(VBOX_LINUX_SRC)/include/generated/autoconf.h),)
3004 # Linux >= 2.6.33
3005 export VBOX_LINUX_INCLUDE := -include $(VBOX_LINUX_SRC)/include/generated/autoconf.h
3006 else ifneq ($(wildcard $(VBOX_LINUX_SRC)/include/linux/autoconf.h),)
3007 # Linux < 2.6.33
3008 export VBOX_LINUX_INCLUDE := -include $(VBOX_LINUX_SRC)/include/linux/autoconf.h
3009 endif
3010endif
3011
3012#
3013# Determine Solaris version.
3014#
3015ifeq ($(KBUILD_TARGET),solaris)
3016 ifeq ($(origin VBOX_SOLARIS_VERSION),undefined)
3017 $(eval export VBOX_SOLARIS_VERSION := $(shell uname -r | $(SED_EXT) 's|\([0-9]*\)\.\([0-9]*\)|$$(int-add $$(int-mul 100, \1), \2)|' ))
3018 endif
3019 ifeq ($(VBOX_SOLARIS_VERSION),510)
3020 DEFS.solaris += RT_OS_SOLARIS_10
3021 # Solaris 10 does not include crossbow.
3022 VBOX_SOLARIS_10 = 1
3023 # We cannot compile additions on Solaris 10, due kernel interface deps
3024 VBOX_WITHOUT_ADDITIONS := 1
3025 VBOX_WITH_ADDITIONS =
3026 else ifeq ($(VBOX_SOLARIS_VERSION),511)
3027 # uname -v can report "snv_XYZ" or "11.X"
3028 VBOX_SOLARIS_11_VERSION = $(shell uname -v | sed 's/snv_//' | cut -f1 -d'.')
3029 ifeq ($(VBOX_SOLARIS_11_VERSION),11)
3030 VBOX_SOLARIS_11_FULLVERSION = $(shell pkg contents -H -t set -o pkg.fmri system/kernel | $(SED_EXT) -e '1!d' -e 's/^.*\@//;s/\:.*//;s/.*,//')
3031 # FULLVERSION format e.g. "5.11-0.175.1.0.0.16.0", we're interested in 175 (VERSION), 1 (UPDATE), 16 (BUILD).
3032 VBOX_SOLARIS_11_VERSION = $(word 2, $(subst ., ,$(word 2,$(subst -, ,$(VBOX_SOLARIS_11_FULLVERSION)))))
3033 VBOX_SOLARIS_11_UPDATE_VERSION = $(word 3, $(subst ., ,$(word 2,$(subst -, ,$(VBOX_SOLARIS_11_FULLVERSION)))))
3034 VBOX_SOLARIS_11_BUILD_VERSION = $(word 6, $(subst ., ,$(word 2,$(subst -, ,$(VBOX_SOLARIS_11_FULLVERSION)))))
3035 endif
3036
3037 # OSS audio support for Solaris
3038 VBOX_WITH_SOLARIS_OSS := $(if-expr $(VBOX_SOLARIS_11_VERSION) >= 115,1,)
3039 endif
3040
3041 # XPCOM namespace cleanup issue with Solaris GCC 4.5.2 and newer, see @bugref{5838}.
3042 if $(VBOX_GCC_VERSION_CXX) >= 40502
3043 VBOX_WITH_XPCOM_NAMESPACE_CLEANUP =
3044 endif
3045endif
3046
3047#
3048# VBoxTpG tool.
3049#
3050TOOL_VBoxTpG = The VirtualBox Tracepoint Generator
3051TOOL_VBoxTpG_DTRACE_DEPORD = $(VBOX_VBOXTPG)
3052TOOL_VBoxTpG_DTRACE_HDR_FLAGS := \
3053 $(if-expr $(intersects $(KBUILD_TARGET_ARCH),$(KBUILD_ARCHES_64)),-64,-32) \
3054 -h --host-$(VBOX_HC_ARCH_BITS)-bit #-vvv
3055define TOOL_VBoxTpG_DTRACE_HDR_CMDS
3056 $(QUIET)$(VBOX_VBOXTPG) $(flags) -o "$(out)" -s "$(source)"
3057endef
3058TOOL_VBoxTpG_DTRACE_OBJ_NOT_NEEDED :=
3059TOOL_VBoxTpG_DTRACE_OBJ_FLAGS := -G --host-$(VBOX_HC_ARCH_BITS)-bit #-vvv
3060define TOOL_VBoxTpG_DTRACE_OBJ_CMDS
3061 $(QUIET)$(VBOX_VBOXTPG) \
3062 $(if-expr $(intersects $(bld_trg_arch),$(KBUILD_ARCHES_64)),-64,-32) \
3063 $(flags) \
3064 -o "$(out)" -s "$(source)"
3065endef
3066
3067
3068#
3069# VBoxTpG tool - Disabled, only generate the header.
3070#
3071TOOL_VBoxTpG-Disabled = The VirtualBox Tracepoint Generator, disabled.
3072TOOL_VBoxTpG-Disabled_DTRACE_DEPORD = $(VBOX_VBOXTPG)
3073TOOL_VBoxTpG-Disabled_DTRACE_HDR_FLAGS := -h
3074define TOOL_VBoxTpG-Disabled_DTRACE_HDR_CMDS
3075 $(QUIET)$(VBOX_VBOXTPG) $(flags) -o "$(out)" -s "$(source)"
3076endef
3077TOOL_VBoxTpG-Disabled_DTRACE_OBJ_NOT_NEEDED := $(KBUILD_OSES)
3078
3079
3080#
3081# dtrace+VBoxTpG tool for ring-3 to ring-0 pointer conversion.
3082#
3083TOOL_DTraceAndVBoxTpG = DTrace and the VirtualBox Tracepoint Generator working together on static ring-3 probes.
3084TOOL_DTraceAndVBoxTpG_EXTENDS = StandardDTrace
3085TOOL_DTraceAndVBoxTpG_DTRACE_DEPORD = $(VBOX_VBOXTPG)
3086TOOL_DTraceAndVBoxTpG_DTRACE_HDR_CMDS =
3087define TOOL_DTraceAndVBoxTpG_DTRACE_HDR_CMDS
3088 $(TOOL_StandardDTrace_DTRACE_HDR_CMDS)
3089 $(QUIET)$(VBOX_VBOXTPG) --generate-wrapper-header --host-$(VBOX_HC_ARCH_BITS)-bit --ring-3-context \
3090 $(filter-out -C, $(filter-out -h,$(flags))) \
3091 -o "$(out).tmp" -s "$(source)"
3092 $(APPEND) "$(out).tmp"
3093 $(SED) -e 's/\(#define.*\)(arg0/\1_ORIGINAL(arg0/' --append "$(out).tmp" "$(out)"
3094 $(MV) -f -- "$(out).tmp" "$(out)"
3095endef
3096TOOL_DTraceAndVBoxTpG_DTRACE_OBJ_NOT_NEEDED = $(TOOL_StandardDTrace_DTRACE_OBJ_NOT_NEEDED)
3097TOOL_DTraceAndVBoxTpG_DTRACE_OBJ_CMDS = $(TOOL_StandardDTrace_DTRACE_OBJ_CMDS)
3098
3099
3100ifdef VBOX_WITH_RAW_MODE
3101 #
3102 # Template for building RC things.
3103 #
3104 TEMPLATE_VBoxRc = VBox Raw-Mode Context
3105 TEMPLATE_VBoxRc_ASTOOL = $(VBOX_ASTOOL)
3106 TEMPLATE_VBoxRc_ASFLAGS = $(VBOX_ASFLAGS32)
3107 TEMPLATE_VBoxRc_DEFS = IN_RC IPRT_NO_CRT RT_WITH_NOCRT_ALIASES $(ARCH_BITS_DEFS)
3108 TEMPLATE_VBoxRc_INCS = $(PATH_ROOT)/include/iprt/nocrt
3109 TEMPLATE_VBoxRc_SYSSUFF = .gc
3110 TEMPLATE_VBoxRc_BLD_TRG_ARCH = x86
3111 TEMPLATE_VBoxRc_MODE = a+r,u+w
3112
3113 TEMPLATE_VBoxRc_USES += dtrace
3114 TEMPLATE_VBoxRc_DTRACE_HDR_FLAGS = --raw-mode-context
3115 TEMPLATE_VBoxRc_DTRACE_OBJ_FLAGS = --raw-mode-context --probe-fn-name "VMMRCProbeFire"
3116 ifdef VBOX_WITH_DTRACE_RC
3117 TEMPLATE_VBoxRc_DTRACETOOL = VBoxTpG
3118 TEMPLATE_VBoxRc_DEFS += VBOX_WITH_DTRACE VBOX_WITH_DTRACE_RC
3119 else
3120 TEMPLATE_VBoxRc_DTRACETOOL = VBoxTpG-Disabled
3121 endif
3122
3123 ifeq ($(VBOX_LDR_FMT32),pe)
3124 TEMPLATE_VBoxRc_TOOL = $(VBOX_VCC_TOOL_STEM)X86
3125 ifdef TODO_MORE_WARNINGS
3126 TEMPLATE_VBoxRc_CXXFLAGS = -Zi -Zl -GR- -EHs- -GF -GS- -Zc:wchar_t- -Gs8192 $(VBOX_VCC_GC_OPT) $(VBOX_VCC_GC_FP) -W4 -wd4244 -wd4996 -wd4127 -wd4100 -wd4214 -wd4706 $(VBOX_VCC_WERR)
3127 else
3128 TEMPLATE_VBoxRc_CXXFLAGS = -Zi -Zl -GR- -EHs- -GF -GS- -Zc:wchar_t- -Gs8192 $(VBOX_VCC_GC_OPT) $(VBOX_VCC_GC_FP) -W3 -wd4244 -wd4996 $(VBOX_VCC_WERR)
3129 endif
3130 TEMPLATE_VBoxRc_CFLAGS = $(TEMPLATE_VBoxRc_CXXFLAGS)
3131 TEMPLATE_VBoxRc_LDFLAGS = \
3132 -Driver -Subsystem:NATIVE -Incremental:NO -Align:64 -MapInfo:Exports -NoD $(VBOX_VCC_LD_WERR) -Release -Debug \
3133 -Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
3134 -Stub:$(PATH_ROOT)/src/VBox/HostDrivers/Support/win/winstub.com
3135 ifdef VBOX_SIGNING_MODE
3136 TEMPLATE_VBoxRc_LDFLAGS += -IntegrityCheck
3137 endif
3138 TEMPLATE_VBoxRc_LIBS = \
3139 $(PATH_SDK_$(VBOX_WINDDK)_LIB.x86)/int64.lib
3140 TEMPLATE_VBoxRc_LIBS += \
3141 $(PATH_STAGE_LIB)/RuntimeRCStub$(VBOX_SUFF_LIB)
3142 TEMPLATE_VBoxRc_POST_CMDS = $(VBOX_SIGN_IMAGE_CMDS)
3143 endif # pe
3144
3145 ifeq ($(VBOX_LDR_FMT32),elf)
3146 TEMPLATE_VBoxRc_TOOL = $(VBOX_GCC32_TOOL)
3147 TEMPLATE_VBoxRc_CXXFLAGS = -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC32_Wno-variadic-macros) -fno-exceptions $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-strict-aliasing $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_fvisibility-inlines-hidden) -fno-rtti
3148 TEMPLATE_VBoxRc_CFLAGS = -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC32_Wno-variadic-macros) -fno-exceptions $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-strict-aliasing $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_fvisibility-hidden)
3149 ifeq ($(KBUILD_TARGET),solaris)
3150 TEMPLATE_VBoxRc_LDFLAGS = -r
3151 else
3152 TEMPLATE_VBoxRc_LDFLAGS = -nostdlib -Bsymbolic -g
3153 ## @todo WTF doesn't the globals work? Debug info is supposed to be split everywhere. GRR
3154 TEMPLATE_VBoxRc_LD_DEBUG = split
3155 endif
3156 ifn1of ($(KBUILD_TARGET), solaris freebsd)
3157 TEMPLATE_VBoxRc_LIBS = \
3158 $(VBOX_GCC32_LIBGCC) # instricts
3159 endif
3160 endif
3161
3162 ifeq ($(VBOX_LDR_FMT32),macho)
3163 TEMPLATE_VBoxRc_TOOL = GXX4MACHO
3164 TEMPLATE_VBoxRc_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS)
3165 TEMPLATE_VBoxRc_CXXFLAGS = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS) -m32 -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC32_Wno-variadic-macros) -fno-common -msoft-float -static $(VBOX_GCC_fno-stack-protector) -fno-exceptions $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing -fno-rtti
3166 TEMPLATE_VBoxRc_CFLAGS = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -m32 -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC32_Wno-variadic-macros) -fno-common -msoft-float -static $(VBOX_GCC_fno-stack-protector) -fno-exceptions $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing
3167 TEMPLATE_VBoxRc_LDFLAGS = $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -m32 -nostdlib
3168 #TEMPLATE_VBoxRc_LDFLAGS.release = -Wl,-S ???
3169 endif
3170
3171 ifeq ($(VBOX_LDR_FMT32),lx)
3172 TEMPLATE_VBoxRc_TOOL = GXX3OMF
3173 TEMPLATE_VBoxRc_CXXFLAGS = -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC32_Wno-variadic-macros) $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing -fno-exceptions -fno-rtti
3174 TEMPLATE_VBoxRc_CFLAGS = -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC32_Wno-variadic-macros) $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing -fno-exceptions
3175 TEMPLATE_VBoxRc_LDFLAGS = -Zdll -nostdlib
3176 TEMPLATE_VBoxRc_LIBS = \
3177 $(VBOX_GCC32_LIBGCC) \
3178 $(VBOX_OBJ_SYS0) \
3179 end
3180 endif
3181
3182
3183 #
3184 # Template for building a RC ring-3 testcase (tstVMStructGC, tstDevStructGC).
3185 #
3186 TEMPLATE_VBoxRcExe = VBox Raw-Mode as ring-3 testcase
3187 TEMPLATE_VBoxRcExe_EXTENDS = VBoxRc
3188 TEMPLATE_VBoxRcExe_DEFS = $(filter-out IPRT_NO_CRT RT_WITH_NOCRT_ALIASES,$(TEMPLATE_VBoxRc_DEFS))
3189 TEMPLATE_VBoxRcExe_INCS = $(NO_SUCH_VARIABLE)
3190 TEMPLATE_VBoxRcExe_MODE = $(NO_SUCH_VARIABLE)
3191
3192 ifeq ($(VBOX_LDR_FMT32),pe)
3193 TEMPLATE_VBoxRcExe_LDFLAGS = \
3194 -Incremental:NO -MapInfo:Exports -NoD -Debug \
3195 -Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
3196 -Stub:$(PATH_ROOT)/src/VBox/HostDrivers/Support/win/winstub.com
3197 TEMPLATE_VBoxRcExe_SDKS = ReorderCompilerIncs $(VBOX_WINPSDK)
3198 TEMPLATE_VBoxRcExe_LIBS = \
3199 $(PATH_TOOL_$(VBOX_VCC_TOOL_STEM)X86_LIB)/libcmt.lib \
3200 $(PATH_TOOL_$(VBOX_VCC_TOOL_STEM)X86_LIB)/oldnames.lib
3201 endif
3202
3203 ifeq ($(VBOX_LDR_FMT32),elf)
3204 TEMPLATE_VBoxRcExe_CFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBoxRc_CFLAGS)) -O0
3205 TEMPLATE_VBoxRcExe_CXXFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBoxRc_CXXFLAGS)) -O0
3206 TEMPLATE_VBoxRcExe_LDFLAGS = -g
3207 TEMPLATE_VBoxRcExe_LDFLAGS.dbgopt = -g
3208 TEMPLATE_VBoxRcExe_LDFLAGS.strict = -g
3209 TEMPLATE_VBoxRcExe_LDFLAGS.release = -g
3210 if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), freebsd.amd64)
3211 # The FreeBSD port of gcc isn't picking up -m32 where it should.
3212 TEMPLATE_VBoxRcExe_DEFS.$(KBUILD_TARGET) = $(TEMPLATE_VBoxRc_DEFS.$(KBUILD_TARGET)) IPRT_DONT_USE_SYSTEM_STDINT_H
3213 TEMPLATE_VBoxRcExe_LDFLAGS.$(KBUILD_TARGET) = /usr/lib32/crt1.o /usr/lib32/crti.o /usr/lib32/crtbegin.o $(TEMPLATE_VBoxRc_LDFLAGS.$(KBUILD_TARGET)) -nostdlib -v
3214 TEMPLATE_VBoxRcExe_LIBPATH.$(KBUILD_TARGET) = /usr/lib32
3215 TEMPLATE_VBoxRcExe_LIBS.$(KBUILD_TARGET) = /usr/lib32/crtend.o /usr/lib32/crtn.o /usr/lib32/libc.so
3216 endif
3217 endif
3218
3219 ifeq ($(VBOX_LDR_FMT32),macho)
3220 TEMPLATE_VBoxRcExe_CFLAGS = $(filter-out -static -nostdinc,$(TEMPLATE_VBoxRc_CFLAGS))
3221 TEMPLATE_VBoxRcExe_CXXFLAGS = $(filter-out -static -nostdinc,$(TEMPLATE_VBoxRc_CXXFLAGS))
3222 TEMPLATE_VBoxRcExe_LDFLAGS = -g -m32
3223 endif
3224
3225 ifeq ($(VBOX_LDR_FMT32),lx)
3226 TEMPLATE_VBoxRcExe_CFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBoxRc_CFLAGS))
3227 TEMPLATE_VBoxRcExe_CXXFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBoxRc_CXXFLAGS))
3228 TEMPLATE_VBoxRcExe_LDFLAGS = -g
3229 TEMPLATE_VBoxRcExe_LIBS = $(NO_SUCH_VARIABLE)
3230 endif
3231endif # VBOX_WITH_RAW_MODE
3232
3233
3234#
3235# Template for building R0 things.
3236#
3237TEMPLATE_VBoxR0 = VBox Ring 0
3238TEMPLATE_VBoxR0_ASTOOL = $(VBOX_ASTOOL)
3239TEMPLATE_VBoxR0_ASFLAGS = $(VBOX_ASFLAGS)
3240TEMPLATE_VBoxR0_DEFS = IN_RING0 IN_RING0_AGNOSTIC IPRT_NO_CRT RT_WITH_NOCRT_ALIASES $(ARCH_BITS_DEFS)
3241TEMPLATE_VBoxR0_INCS = $(PATH_ROOT)/include/iprt/nocrt
3242TEMPLATE_VBoxR0_SYSSUFF = .r0
3243TEMPLATE_VBoxR0_MODE = a+r,u+w
3244
3245TEMPLATE_VBoxR0_USES += dtrace
3246TEMPLATE_VBoxR0_DTRACE_HDR_FLAGS = --ring-0-context-agnostic
3247TEMPLATE_VBoxR0_DTRACE_OBJ_FLAGS = --ring-0-context-agnostic
3248ifdef VBOX_WITH_DTRACE_R0
3249 TEMPLATE_VBoxR0_DTRACETOOL = VBoxTpG
3250 TEMPLATE_VBoxR0_DEFS += VBOX_WITH_DTRACE VBOX_WITH_DTRACE_R0
3251else
3252 TEMPLATE_VBoxR0_DTRACETOOL = VBoxTpG-Disabled
3253endif
3254
3255ifeq ($(VBOX_LDR_FMT),pe)
3256TEMPLATE_VBoxR0_TOOL = $(VBOX_VCC_TOOL)
3257 ifdef TODO_MORE_WARNINGS
3258TEMPLATE_VBoxR0_CXXFLAGS = -Zi -Zl -GR- -EHs- -GF -GS- -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP) -W4 -wd4244 -wd4127 -wd4100 -wd4214 -wd4706 -wd4996 $(VBOX_VCC_WERR)
3259 else
3260TEMPLATE_VBoxR0_CXXFLAGS = -Zi -Zl -GR- -EHs- -GF -GS- -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP) -W3 -wd4244 -wd4996 $(VBOX_VCC_WERR)
3261 endif
3262TEMPLATE_VBoxR0_CFLAGS = $(TEMPLATE_VBoxR0_CXXFLAGS)
3263TEMPLATE_VBoxR0_LDFLAGS = \
3264 -Driver -Subsystem:NATIVE -Incremental:NO -Align:4096 -MapInfo:Exports -NoD $(VBOX_VCC_LD_WERR) -Release -Debug \
3265 -Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
3266 -Stub:$(PATH_ROOT)/src/VBox/HostDrivers/Support/win/winstub.com
3267 ifdef VBOX_WITH_DTRACE_R0
3268TEMPLATE_VBoxR0_LDFLAGS += -Merge:VTGPrLc.Data=VTGPrLc.Begin -Merge:VTGPrLc.End=VTGPrLc.Begin -Merge:VTGPrLc.Begin=VTGObj
3269 endif
3270 ifdef VBOX_SIGNING_MODE
3271 TEMPLATE_VBoxR0_LDFLAGS += -IntegrityCheck
3272 endif
3273TEMPLATE_VBoxR0_LIBS = \
3274 $(PATH_STAGE_LIB)/RuntimeR0Stub$(VBOX_SUFF_LIB)
3275 include $(KBUILD_PATH)/sdks/$(VBOX_WINDDK).kmk ## TODO: Add a kBuild feature for loading SDKs.
3276TEMPLATE_VBoxR0_LIBS.x86 = \
3277 $(PATH_SDK_$(VBOX_WINDDK)_LIB.x86)/int64.lib
3278TEMPLATE_VBoxR0_POST_CMDS = $(VBOX_SIGN_DRIVER_CMDS)
3279endif # pe
3280
3281ifeq ($(VBOX_LDR_FMT),elf)
3282TEMPLATE_VBoxR0_TOOL = $(VBOX_GCC_TOOL)
3283TEMPLATE_VBoxR0_CFLAGS = -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-exceptions $(VBOX_GCC_fno-stack-protector) -fno-common $(VBOX_GCC_fvisibility-hidden) -std=gnu99
3284TEMPLATE_VBoxR0_CXXFLAGS = -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-exceptions $(VBOX_GCC_fno-stack-protector) -fno-common $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_fvisibility-hidden) -fno-rtti
3285TEMPLATE_VBoxR0_CFLAGS.amd64 = -m64 -mno-red-zone -mcmodel=kernel -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-asynchronous-unwind-tables -ffreestanding
3286TEMPLATE_VBoxR0_CXXFLAGS.amd64 = -m64 -mno-red-zone -mcmodel=kernel -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-asynchronous-unwind-tables
3287ifeq ($(KBUILD_TARGET),solaris)
3288 TEMPLATE_VBoxR0_LDFLAGS = -r
3289 TEMPLATE_VBoxR0_LDFLAGS.solaris = -u _init -u _info
3290 TEMPLATE_VBoxR0_LIBS.solaris = \
3291 $(PATH_STAGE_LIB)/RuntimeR0Stub$(VBOX_SUFF_LIB)
3292 ifdef VBOX_GCC_USING_SOLARIS_AS
3293 TEMPLATE_VBoxR0_CFLAGS.amd64 += -Wa,-xmodel=kernel
3294 TEMPLATE_VBoxR0_CXXFLAGS.amd64 += -Wa,-xmodel=kernel
3295 endif
3296else
3297 TEMPLATE_VBoxR0_LDFLAGS = -nostdlib -Bsymbolic -g
3298 ## @todo WTF doesn't the globals work? Debug info is supposed to be split everywhere. GRR
3299 TEMPLATE_VBoxR0_LD_DEBUG = split
3300endif
3301ifn1of ($(KBUILD_TARGET),solaris freebsd)
3302 TEMPLATE_VBoxR0_LIBS = \
3303 $(VBOX_GCC_LIBGCC) # instricts
3304endif
3305endif
3306
3307ifeq ($(VBOX_LDR_FMT),macho)
3308TEMPLATE_VBoxR0_TOOL = GXX4MACHO
3309TEMPLATE_VBoxR0_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS)
3310TEMPLATE_VBoxR0_CXXFLAGS = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS) -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC_Wno-variadic-macros) \
3311 -fno-common -msoft-float -static -fno-rtti -fno-exceptions $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing \
3312 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow $(VBOX_GCC_fno-stack-protector)
3313TEMPLATE_VBoxR0_CXXFLAGS.amd64 = -m64 -mno-red-zone -mno-sse3 -mno-sse4 -mno-sse4.1 -mno-sse4.2 -mno-sse4a -fno-unwind-tables
3314TEMPLATE_VBoxR0_CXXFLAGS.x86 = -m32
3315TEMPLATE_VBoxR0_CFLAGS = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC_Wno-variadic-macros) \
3316 -fno-common -msoft-float -static -fno-exceptions $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing \
3317 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow $(VBOX_GCC_fno-stack-protector)
3318TEMPLATE_VBoxR0_CFLAGS.amd64 = -m64 -mno-red-zone -mno-sse3 -mno-sse4 -mno-sse4.1 -mno-sse4.2 -mno-sse4a -fno-unwind-tables
3319TEMPLATE_VBoxR0_CFLAGS.x86 = -m32
3320TEMPLATE_VBoxR0_LDFLAGS = $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -nostdlib
3321#TEMPLATE_VBoxR0_LDFLAGS.release = -Wl,-S ???
3322TEMPLATE_VBoxR0_LDFLAGS.amd64 = -m64 -static
3323TEMPLATE_VBoxR0_LDFLAGS.x86 = -m32
3324endif
3325
3326ifeq ($(VBOX_LDR_FMT),lx)
3327TEMPLATE_VBoxR0_TOOL = GXX3OMF
3328TEMPLATE_VBoxR0_CFLAGS = -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-exceptions -fno-common
3329TEMPLATE_VBoxR0_CXXFLAGS = -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-exceptions -fno-common -fno-rtti
3330TEMPLATE_VBoxR0_LDFLAGS = -nostdlib -Zdll
3331TEMPLATE_VBoxR0_LIBS = \
3332 $(VBOX_GCC_LIBGCC) \
3333 $(VBOX_OBJ_SYS0) \
3334 end
3335endif
3336
3337
3338#
3339# Template for building SUPDRV R0 things.
3340#
3341TEMPLATE_VBOXR0DRV = VBox SUPDRV Ring 0
3342TEMPLATE_VBOXR0DRV_ASTOOL = $(VBOX_ASTOOL)
3343TEMPLATE_VBOXR0DRV_ASFLAGS = $(VBOX_ASFLAGS)
3344TEMPLATE_VBOXR0DRV_DEFS = IN_RING0 IN_RT_R0 $(ARCH_BITS_DEFS)
3345TEMPLATE_VBOXR0DRV_USES += dtrace
3346ifdef VBOX_WITH_DTRACE_R0DRV
3347 TEMPLATE_VBOXR0DRV_DTRACETOOL = VBoxTpG
3348 TEMPLATE_VBOXR0DRV_DEFS += VBOX_WITH_DTRACE VBOX_WITH_DTRACE_R0DRV
3349 ifdef VBOX_WITH_NATIVE_DTRACE
3350 TEMPLATE_VBOXR0DRV_DEFS += VBOX_WITH_NATIVE_DTRACE
3351 endif
3352else
3353 TEMPLATE_VBOXR0DRV_DTRACETOOL = VBoxTpG-Disabled
3354endif
3355
3356ifeq ($(KBUILD_TARGET),win)
3357 TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_VCC_TOOL)
3358 TEMPLATE_VBOXR0DRV_RCDEFS = \
3359 VBOX_VERSION_MAJOR=\"$(VBOX_VERSION_MAJOR)\" \
3360 VBOX_VERSION_MINOR=\"$(VBOX_VERSION_MINOR)\" \
3361 VBOX_VERSION_BUILD=\"$(VBOX_VERSION_BUILD)\" \
3362 VBOX_SVN_REV=\"$(VBOX_SVN_REV)\" \
3363 VBOX_VERSION_MAJOR_NR=$(VBOX_VERSION_MAJOR) \
3364 VBOX_VERSION_MINOR_NR=$(VBOX_VERSION_MINOR) \
3365 VBOX_VERSION_BUILD_NR=$(VBOX_VERSION_BUILD) \
3366 VBOX_SVN_REV_NR=$(VBOX_SVN_REV)
3367 TEMPLATE_VBOXR0DRV_DEFS.x86 = _X86_
3368 TEMPLATE_VBOXR0DRV_DEFS.x86 += NO_INTERLOCKED_INTRINSICS # Avoids intrisic VC/WDK trouble
3369 TEMPLATE_VBOXR0DRV_DEFS.x86 += WIN9X_COMPAT_SPINLOCK # Avoid multiply defined _KeInitializeSpinLock@4
3370 TEMPLATE_VBOXR0DRV_DEFS.amd64 = _AMD64_
3371 TEMPLATE_VBOXR0DRV_CXXFLAGS = -Zi -Zl -GR- -EHs- -GF -Gz -W3 -GS- -wd4996 -Zc:wchar_t- -Gs4096 $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
3372 TEMPLATE_VBOXR0DRV_CFLAGS = $(TEMPLATE_VBOXR0DRV_CXXFLAGS)
3373 TEMPLATE_VBOXR0DRV_LDFLAGS = \
3374 -Driver -Subsystem:NATIVE -Incremental:NO -Align:4096 -MapInfo:Exports -NoD -Release -Debug \
3375 -Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
3376 -Stub:$(PATH_ROOT)/src/VBox/HostDrivers/Support/win/winstub.com
3377 ifdef VBOX_WITH_DTRACE_R0DRV
3378 TEMPLATE_VBOXR0DRV_LDFLAGS += -Merge:VTGPrLc.Data=VTGPrLc.Begin -Merge:VTGPrLc.End=VTGPrLc.Begin -Merge:VTGPrLc.Begin=VTGObj
3379 endif
3380 ifdef VBOX_SIGNING_MODE
3381 TEMPLATE_VBOXR0DRV_LDFLAGS += -IntegrityCheck
3382 endif
3383 TEMPLATE_VBOXR0DRV_POST_CMDS = $(VBOX_SIGN_DRIVER_CMDS)
3384endif
3385
3386ifeq ($(KBUILD_TARGET),linux)
3387TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_GCC_TOOL)
3388TEMPLATE_VBOXR0DRV_INSTTYPE.linux = none
3389TEMPLATE_VBOXR0DRV_DEFS += __KERNEL__ MODULE
3390TEMPLATE_VBOXR0DRV_INCS = $(VBOX_LINUX_INCS)
3391TEMPLATE_VBOXR0DRV_CFLAGS = -nostdinc -iwithprefix include $(VBOX_LINUX_INCLUDE) \
3392 $(VBOX_GCC_WARN) -Wstrict-prototypes $(VBOX_GCC_Wno-pointer-sign) -Wno-sign-compare $(VBOX_GCC_fdiagnostics-show-option) \
3393 $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
3394 -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration
3395TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -mpreferred-stack-boundary=2 -msoft-float
3396TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 -mno-red-zone -mcmodel=kernel -mno-sse -mno-mmx -mno-sse2 -mno-3dnow \
3397 -fno-reorder-blocks -ffreestanding -fno-asynchronous-unwind-tables -funit-at-a-time \
3398 -Wno-sign-compare -Wdeclaration-after-statement
3399TEMPLATE_VBOXR0DRV_CXXFLAGS = $(filter-out -Wstrict-prototypes -Wno-pointer-sign -ffreestanding -Wdeclaration-after-statement -Werror-implicit-function-declaration,$(TEMPLATE_VBOXR0DRV_CFLAGS) $(TEMPLATE_VBOXR0DRV_CFLAGS.$(KBUILD_TARGET_ARCH))) -fno-exceptions -fno-rtti
3400 ifndef VBOX_LINUX_VERSION_2_4
3401# 2.6
3402TEMPLATE_VBOXR0DRV_SYSSUFF = .ko
3403TEMPLATE_VBOXR0DRV_LDFLAGS.x86 = -m elf_i386 -r
3404TEMPLATE_VBOXR0DRV_LDFLAGS.amd64 = -m elf_x86_64 -r
3405 else
3406# 2.4
3407TEMPLATE_VBOXR0DRV_SYSSUFF = .o
3408TEMPLATE_VBOXR0DRV_LDFLAGS = -r -s
3409 endif
3410endif
3411
3412ifeq ($(KBUILD_TARGET),os2)
3413TEMPLATE_VBOXR0DRV_TOOL = GXX3OMF
3414TEMPLATE_VBOXR0DRV_CXXFLAGS = -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-exceptions -fno-rtti
3415TEMPLATE_VBOXR0DRV_CFLAGS = -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-exceptions
3416TEMPLATE_VBOXR0DRV_LIBS = $(VBOX_GCC_LIBGCC)
3417# wlink thinks physdevice doesn't need fixups and should have a stack - stupid!
3418TEMPLATE_VBOXR0DRV_LDFLAGS = -Zlinker Option -Zlinker internalrelocs, -Zlinker togglerelocs
3419endif
3420
3421ifeq ($(KBUILD_TARGET),darwin)
3422TEMPLATE_VBOXR0DRV_TOOL = GXX4MACHO
3423TEMPLATE_VBOXR0DRV_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS) KERNEL KERNEL_PRIVATE DRIVER_PRIVATE APPLE NeXT
3424TEMPLATE_VBOXR0DRV_INCS += $(VBOX_PATH_MACOSX_SDK)/System/Library/Frameworks/Kernel.framework/Headers
3425## @todo try use VBOX_GCC_PEDANTIC_CXX
3426TEMPLATE_VBOXR0DRV_CXXFLAGS = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS) \
3427 -g $(VBOX_GCC_pipe) $(VBOX_GCC_WARN) -Wno-long-long $(VBOX_GCC_fdiagnostics-show-option) \
3428 -fno-common -nostdinc -fno-builtin -finline $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_fvisibility-hidden) \
3429 -fno-keep-inline-functions -fno-exceptions -msoft-float \
3430 -fapple-kext -fno-rtti -fcheck-new -force_cpusubtype_ALL \
3431 $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fasm-blocks
3432TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64 = -m64 -mkernel -mno-red-zone -gdwarf-2
3433TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = -m32 -static
3434TEMPLATE_VBOXR0DRV_CFLAGS = $(VBOX_DARWIN_DEF_SDK_CFLAGS) \
3435 -g $(VBOX_GCC_pipe) $(VBOX_GCC_WARN) -Wno-long-long -fno-common -nostdinc -fno-builtin -finline \
3436 -fno-keep-inline-functions -fno-exceptions $(VBOX_GCC_fvisibility-hidden) -msoft-float \
3437 -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations \
3438 -Werror-implicit-function-declaration -force_cpusubtype_ALL \
3439 $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fasm-blocks
3440TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 -mkernel -mno-red-zone -gdwarf-2
3441TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -static
3442TEMPLATE_VBOXR0DRV_LDFLAGS = $(filter-out $(VBOX_DARWIN_NO_COMPACT_LINKEDIT),$(VBOX_DARWIN_DEF_SDK_LDFLAGS)) \
3443 -nostdlib -Wl,-kext,-new_linker -Wl,-Y,1455 -keep_private_extern
3444TEMPLATE_VBOXR0DRV_LDFLAGS.amd64 = -m64
3445TEMPLATE_VBOXR0DRV_LDFLAGS.x86 = -m32
3446TEMPLATE_VBOXR0DRV_LIBS = kmodc++ kmod cc_kext cpp_kext $(VBOX_GCC_LIBGCC)
3447endif
3448
3449ifeq ($(KBUILD_TARGET),solaris)
3450## The Solaris /usr/platform/i86pc/include and /usr/include directories.
3451VBOX_SOLARIS_SYS_INCS ?= /usr/platform/i86pc/include /usr/include
3452
3453TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_GCC_TOOL)
3454TEMPLATE_VBOXR0DRV_DEFS += _MACHDEP _KERNEL _STRICT_STDC
3455TEMPLATE_VBOXR0DRV_INCS = $(VBOX_SOLARIS_SYS_INCS)
3456TEMPLATE_VBOXR0DRV_LDFLAGS = -r -dy
3457TEMPLATE_VBOXR0DRV_LDFLAGS.amd64 = $(if $(eq $(KBUILD_HOST),solaris),-64,-m elf_x86_64)
3458# Exclude -Wall because of solaris headers' pragma ident warnings that gcc refuses to supress.
3459TEMPLATE_VBOXR0DRV_CFLAGS = -Wpointer-arith -Winline $(VBOX_GCC_Wno-pointer-sign) \
3460 -Wmissing-prototypes -Wstrict-prototypes $(VBOX_GCC_fdiagnostics-show-option) \
3461 -Wshadow -Wuninitialized -Wunused-function -Wunused-label -Wunused-value -Wunused-variable \
3462 -Wformat -Wimplicit-int -Wimplicit-function-declaration -Werror-implicit-function-declaration -Wparentheses \
3463 -O2 -fno-omit-frame-pointer -ffreestanding -nodefaultlibs -fno-strict-aliasing -fno-common -std=c99
3464TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow
3465TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow $(VBOX_GCC_msave-args) \
3466 -mno-red-zone -mcmodel=kernel $(if-expr defined(VBOX_GCC_USING_SOLARIS_AS),-Wa$(COMMA)-xmodel=kernel,) \
3467 -fno-reorder-blocks -fno-asynchronous-unwind-tables -funit-at-a-time
3468TEMPLATE_VBOXR0DRV_CXXFLAGS = -Wpointer-arith -Winline \
3469 -Wshadow -Wuninitialized -Wunused-function -Wunused-label -Wunused-value -Wunused-variable \
3470 -Wformat \
3471 -O2 -nodefaultlibs -fno-omit-frame-pointer -fno-strict-aliasing -fno-common -fno-exceptions -fno-rtti
3472TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = $(TEMPLATE_VBOXR0DRV_CFLAGS.x86)
3473TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64 = $(TEMPLATE_VBOXR0DRV_CFLAGS.amd64)
3474endif # Solaris
3475
3476ifeq ($(KBUILD_TARGET),freebsd)
3477# x86 FreeBSD (6.2 or something):
3478# cc -O2 -fno-strict-aliasing -pipe -Werror -D_KERNEL -DKLD_MODULE \
3479# -nostdinc -I- -I. -I@ -I@/contrib/altq -I@/../include -I/usr/include \
3480# -finline-limit=8000 -fno-common -mno-align-long-strings -mpreferred-stack-boundary=2 \
3481# -mno-mmx -mno-3dnow -mno-sse -mno-sse2 -ffreestanding -Wall -Wredundant-decls -Wnested-externs \
3482# -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -fformat-extensions \
3483# -std=c99 -c ../my.c
3484# ld -d -warn-common -r -d -o my.kld my.o
3485# :> export_syms
3486# awk -f /usr/src/sys/modules/my/../../conf/kmod_syms.awk my.kld export_syms | xargs -J% objcopy % my.kld
3487# ld -Bsharable -d warn-commnon -o my.ko my.kld
3488#
3489# AMD64 FreeBSD (7.1):
3490# cc -O2 -fno-strict-aliasing -pipe -D_KERNEL -DKLD_MODULE -std=c99 -nostdinc -I. -I@ -I@/contrib/altq \
3491# -finline-limit=8000 --param inline-unit-growth=100 --param large-function-growth=1000 -fno-common \
3492# -fno-omit-frame-pointer -mcmodel=kernel -mno-red-zone -mfpmath=387 -mno-sse -mno-sse2 -mno-mmx \
3493# -mno-3dnow -msoft-float -fno-asynchronous-unwind-tables -ffreestanding \
3494# -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -Wundef -Wno-pointer-sign \
3495# -fformat-extensions -c /usr/src/sys/modules/my/../../dev/my/if_my.c
3496# ld -d -warn-common -r -d -o if_my.ko if_my.o
3497# :> export_syms
3498# awk -f /usr/src/sys/modules/my/../../conf/kmod_syms.awk if_my.ko export_syms | xargs -J% objcopy % if_my.ko
3499
3500# Note: @ -> /usr/src/sys and machine -> /usr/src/sys/i386/include
3501
3502## The location of the FreeBSD kernel source.
3503VBOX_FREEBSD_SRC ?= /usr/src/sys
3504## The FreeBSD /usr/include.
3505VBOX_FREEBSD_SYS_INCS ?= /usr/include
3506
3507TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_GCC_TOOL)
3508TEMPLATE_VBOXR0DRV_LDTOOL = FREEBSDKMODLD
3509TEMPLATE_VBOXR0DRV_DEFS += _KERNEL KLD_MODULE
3510TEMPLATE_VBOXR0DRV_INCS = \
3511 $(VBOX_FREEBSD_SRC) \
3512 $(VBOX_FREEBSD_SRC)/contrib/altq \
3513 $(VBOX_FREEBSD_SRC)/../include \
3514 $(VBOX_FREEBSD_SYS_INCS)
3515# omitting: -Wcast-qual, -Wredundant-decls
3516TEMPLATE_VBOXR0DRV_CFLAGS = \
3517 $(VBOX_GCC_WARN) -Wpointer-arith -Winline $(VBOX_GCC_Wno-pointer-sign) $(VBOX_GCC_fdiagnostics-show-option) \
3518 -Wstrict-prototypes -Wmissing-prototypes -Wstrict-prototypes \
3519 -Wimplicit-function-declaration -Werror-implicit-function-declaration \
3520 -O2 -fformat-extensions -ffreestanding -fno-strict-aliasing -fno-common -finline-limit=8000 \
3521 $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
3522 -nostdinc -std=c99
3523TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -mno-align-long-strings -mpreferred-stack-boundary=2 -mno-mmx -mno-3dnow -mno-sse -mno-sse2
3524TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 --param inline-unit-growth=100 --param large-function-growth=1000 \
3525 -fno-omit-frame-pointer -mcmodel=kernel -mno-red-zone -mfpmath=387 -mno-sse -mno-sse2 -mno-mmx \
3526 -mno-3dnow -msoft-float -fno-asynchronous-unwind-tables -Wundef
3527TEMPLATE_VBOXR0DRV_CXXFLAGS = -fno-exceptions -fno-rtti \
3528 $(VBOX_GCC_WARN) -Wpointer-arith -Winline \
3529 -O2 -fno-format-extensions -fno-strict-aliasing -fno-common -finline-limit=8000 \
3530 $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
3531 -nostdinc
3532TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = $(TEMPLATE_VBOXR0DRV_CFLAGS.x86)
3533TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64 = $(TEMPLATE_VBOXR0DRV_CFLAGS.amd64)
3534TEMPLATE_VBOXR0DRV_SYSSUFF = .ko
3535TEMPLATE_VBOXR0DRV_LDFLAGS = -d --warn-common
3536TEMPLATE_VBOXR0DRV_LDFLAGS.x86 = -m elf_i386_fbsd
3537TEMPLATE_VBOXR0DRV_LDFLAGS.amd64 = -m elf_x86_64_fbsd
3538
3539TOOL_FREEBSDKMODLD = FreeBSD kernel module linker.
3540# See kBuild/tools/GCC3.kmk for docs.
3541TOOL_FREEBSDKMODLD_LINK_SYSMOD_OUTPUT_MAYBE = $(outbase).map
3542TOOL_FREEBSDKMODLD_LINK_SYSMOD_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib)))
3543TOOL_FREEBSDKMODLD_LINK_SYSMOD_DEPORD =
3544 ifeq ($(KBUILD_TARGET_ARCH),amd64)
3545TOOL_FREEBSDKMODLD_LINK_SYSMOD_OUTPUT =
3546define TOOL_FREEBSDKMODLD_LINK_SYSMOD_CMDS
3547# Link intermediate .kld (a relocatable object).
3548 ld $(flags) -r -o $(out) $(objs) \
3549 $(foreach p,$(libpath), -L$(p))\
3550 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(basename $(lib))), $(lib)))
3551# Strip non-exported symbols private and localize the exported ones.
3552 awk -f $(VBOX_FREEBSD_SRC)/conf/kmod_syms.awk $(out) $(if $(othersrc), $(othersrc),/dev/null) \
3553 | xargs -J% objcopy % $(out)
3554
3555## Strip debug info (comment out if debugging or something).
3556 objcopy --strip-debug $(out)
3557endef
3558 else # x86
3559TOOL_FREEBSDKMODLD_LINK_SYSMOD_OUTPUT = $(outbase).kld
3560define TOOL_FREEBSDKMODLD_LINK_SYSMOD_CMDS
3561# Link intermediate .kld (a relocatable object).
3562 ld $(flags) -r -o $(outbase).kld $(objs) \
3563 $(foreach p,$(libpath), -L$(p))\
3564 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(basename $(lib))), $(lib)))
3565# Strip non-exported symbols private and localize the exported ones.
3566 awk -f $(VBOX_FREEBSD_SRC)/conf/kmod_syms.awk $(outbase).kld $(if $(othersrc), $(othersrc),/dev/null) \
3567 | xargs -J% objcopy % $(outbase).kld
3568
3569# Link the final .ko (a shared object).
3570 ld $(flags) -Bshareable -o $(out) $(outbase).kld
3571endef
3572 endif # x86
3573
3574endif # FreeBSD
3575
3576ifeq ($(KBUILD_TARGET),haiku)
3577## The Haiku include directories
3578VBOX_HAIKU_SYS_INCS ?= /boot/develop/headers/os/kernel /boot/develop/headers/os/drivers
3579
3580TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_GCC_TOOL)
3581TEMPLATE_VBOXR0DRV_LDTOOL = $(VBOX_GCC_TOOL)
3582TEMPLATE_VBOXR0DRV_DEFS = _KERNEL_MODE=1 _STRICT_STDC IN_RING0 IN_RT_R0
3583TEMPLATE_VBOXR0DRV_INCS = $(VBOX_HAIKU_SYS_INCS)
3584#TODO: sort this out
3585TEMPLATE_VBOXR0DRV_LDFLAGS = -shared -no-undefined -dc -dy -lroot -rpath-link /boot/system/develop/lib/x86 --no-add-needed /boot/system/develop/lib/_KERNEL_ --no-add-needed /boot/system/develop/lib/haiku_version_glue.o
3586TEMPLATE_VBOXR0DRV_CFLAGS = -fno-PIC \
3587 $(VBOX_GCC_WARN) -Wstrict-prototypes $(VBOX_GCC_Wno-pointer-sign) -Wno-sign-compare \
3588 $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration
3589TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -mno-sse -mno-mmx -mno-sse2 -mno-3dnow
3590TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow
3591TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow \
3592 -fno-reorder-blocks -ffreestanding -fno-asynchronous-unwind-tables -funit-at-a-time \
3593 -Wno-sign-compare -Wdeclaration-after-statement
3594TEMPLATE_VBOXR0DRV_CXXFLAGS = -fno-PIC -Wpointer-arith \
3595 -Wshadow -Wuninitialized -Wunused-function -Wunused-label -Wunused-value -Wunused-variable \
3596 -Wformat \
3597 -O2 -nodefaultlibs -fno-omit-frame-pointer -fno-strict-aliasing -fno-common -fno-exceptions -fno-rtti
3598TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = $(TEMPLATE_VBOXR0DRV_CFLAGS.x86) -fno-exceptions -fno-rtti
3599TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64 = $(TEMPLATE_VBOXR0DRV_CFLAGS.amd64) -fno-exceptions -fno-rtti
3600endif # Haiku
3601
3602ifdef VBOX_WITH_VBOXDRV
3603 ifndef TEMPLATE_VBOXR0DRV_TOOL
3604 $(warning Warning: VBox Build: Target $(KBUILD_HOST) is not officially supported!)
3605 endif
3606endif
3607
3608ifn1of ($(KBUILD_TARGET), darwin os2 win solaris)
3609 # This doesn't work if supdrv is natively loading VMMR0.r0 et al, but
3610 # fortunately it isn't really necessary.
3611 TEMPLATE_VBOXR0DRV_CFLAGS += -include $(PATH_ROOT)/include/VBox/SUPDrvMangling.h
3612 TEMPLATE_VBOXR0DRV_CXXFLAGS += -include $(PATH_ROOT)/include/VBox/SUPDrvMangling.h
3613endif
3614
3615#
3616# Template for building libraries used by ring-0 drivers.
3617#
3618TEMPLATE_VBoxR0DrvLib = VBox Ring 0 Driver Library
3619TEMPLATE_VBoxR0DrvLib_EXTENDS = VBOXR0DRV
3620TEMPLATE_VBoxR0DrvLib_INSTTYPE = stage
3621TEMPLATE_VBoxR0DrvLib_INSTTYPE.linux = stage
3622
3623
3624#
3625# Template for building R3 executables and static libraries which are linked into executables.
3626# Note! This is the base template for a whole lot of other ones, so be careful when changing it.
3627#
3628TEMPLATE_VBOXR3EXE = VBox Ring 3 Exe
3629TEMPLATE_VBOXR3EXE_ASTOOL = $(VBOX_ASTOOL)
3630TEMPLATE_VBOXR3EXE_ASFLAGS.x86 = $(VBOX_ASFLAGS32)
3631TEMPLATE_VBOXR3EXE_ASFLAGS.amd64 = $(VBOX_ASFLAGS64)
3632TEMPLATE_VBOXR3EXE_DEFS = IN_RING3 $(ARCH_BITS_DEFS)
3633TEMPLATE_VBOXR3EXE_DEFS.win = _CRT_SECURE_NO_DEPRECATE
3634TEMPLATE_VBOXR3EXE_USES = dtrace
3635if defined(VBOX_WITH_DTRACE_R3) && defined(VBOX_WITH_NATIVE_DTRACE)
3636 TEMPLATE_VBOXR3EXE_DTRACETOOL = DTraceAndVBoxTpG
3637 TEMPLATE_VBOXR3EXE_DTRACE_OBJ_FLAGS = -C
3638 TEMPLATE_VBOXR3EXE_DTRACE_HDR_FLAGS = -C
3639 TEMPLATE_VBOXR3EXE_DEFS += VBOX_WITH_DTRACE VBOX_WITH_DTRACE_R3 VBOX_WITH_NATIVE_DTRACE
3640else
3641 TEMPLATE_VBOXR3EXE_DTRACE_HDR_FLAGS = --ring-3-context
3642 TEMPLATE_VBOXR3EXE_DTRACE_OBJ_FLAGS = --ring-3-context --pic --probe-fn-imported --probe-fn-name "SUPTracerFireProbe"
3643 if defined(VBOX_WITH_DTRACE_R3)
3644 TEMPLATE_VBOXR3EXE_DTRACETOOL = VBoxTpG
3645 TEMPLATE_VBOXR3EXE_DEFS += VBOX_WITH_DTRACE VBOX_WITH_DTRACE_R3
3646 else
3647 TEMPLATE_VBOXR3EXE_DTRACETOOL = VBoxTpG-Disabled
3648 endif
3649endif
3650TEMPLATE_VBOXR3EXE_LIBS.kprofile = $(LIB_KPROFILE)
3651ifeq ($(KBUILD_TARGET),win)
3652# TEMPLATE_VBOXR3EXE_TOOL = $(VBOX_VCC_TOOL)
3653 TEMPLATE_VBOXR3EXE_TOOL.win.x86 = $(VBOX_VCC_TOOL_STEM)X86
3654 TEMPLATE_VBOXR3EXE_TOOL.win.amd64 = $(VBOX_VCC_TOOL_STEM)AMD64
3655 TEMPLATE_VBOXR3EXE_RCDEFS = \
3656 VBOX_VERSION_MAJOR=\"$(VBOX_VERSION_MAJOR)\" \
3657 VBOX_VERSION_MINOR=\"$(VBOX_VERSION_MINOR)\" \
3658 VBOX_VERSION_BUILD=\"$(VBOX_VERSION_BUILD)\" \
3659 VBOX_SVN_REV=\"$(VBOX_SVN_REV)\" \
3660 VBOX_VERSION_MAJOR_NR=$(VBOX_VERSION_MAJOR) \
3661 VBOX_VERSION_MINOR_NR=$(VBOX_VERSION_MINOR) \
3662 VBOX_VERSION_BUILD_NR=$(VBOX_VERSION_BUILD) \
3663 VBOX_SVN_REV_NR=$(VBOX_SVN_REV)
3664 TEMPLATE_VBOXR3EXE_SDKS = ReorderCompilerIncs $(VBOX_WINPSDK)
3665 TEMPLATE_VBOXR3EXE_CXXFLAGS = -Zi -Zl -GR- -EHsc -GF -MD$(VBOX_VCC_CRT_TYPE) -W3 -wd4065 -wd4244 -wd4996 -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
3666 TEMPLATE_VBOXR3EXE_CXXFLAGS.debug = -RTCsu
3667 TEMPLATE_VBOXR3EXE_CXXFLAGS.dbgopt = $(NO_SUCH_VARIABLE)
3668 TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile = -Gh -GH
3669 TEMPLATE_VBOXR3EXE_CFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS)
3670 TEMPLATE_VBOXR3EXE_CFLAGS.debug = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.debug)
3671 TEMPLATE_VBOXR3EXE_CFLAGS.dbgopt = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.dbgopt)
3672 TEMPLATE_VBOXR3EXE_CFLAGS.kprofile = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile)
3673 TEMPLATE_VBOXR3EXE_LDFLAGS = \
3674 /NOD /INCREMENTAL:NO /MAPINFO:EXPORTS /LargeAddressAware /DynamicBase /NxCompat /Release /Debug \
3675 /Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
3676 /STUB:$(PATH_ROOT)/src/VBox/HostDrivers/Support/win/winstub.com \
3677 /DISALLOWLIB:libc.lib \
3678 /DISALLOWLIB:libcd.lib \
3679 /DISALLOWLIB:libcmt.lib \
3680 /DISALLOWLIB:libcmtd.lib \
3681 /DISALLOWLIB:msvcrt$(VBOX_VCC_CRT_TYPE_N).lib \
3682 /DISALLOWLIB:msvcprt$(VBOX_VCC_CRT_TYPE_N).lib
3683 ifdef VBOX_WITH_DTRACE_R3
3684 TEMPLATE_VBOXR3EXE_LDFLAGS += -Merge:VTGPrLc.Data=VTGPrLc.Begin -Merge:VTGPrLc.End=VTGPrLc.Begin -Merge:VTGPrLc.Begin=VTGObj
3685 endif
3686 if defined(VBOX_SIGNING_MODE) && defined(VBOX_WITH_HARDENING)
3687 TEMPLATE_VBOXR3EXE_LDFLAGS += -IntegrityCheck
3688 endif
3689
3690 TEMPLATE_VBOXR3EXE_LIBS.x86 = \
3691 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.x86)_LIB)/msvcrt$(VBOX_VCC_CRT_TYPE).lib \
3692 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.x86)_LIB)/msvcprt$(VBOX_VCC_CRT_TYPE).lib \
3693 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.x86)_LIB)/oldnames.lib
3694 TEMPLATE_VBOXR3EXE_LIBS.amd64 = \
3695 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.amd64)_LIB)/msvcrt$(VBOX_VCC_CRT_TYPE).lib \
3696 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.amd64)_LIB)/msvcprt$(VBOX_VCC_CRT_TYPE).lib \
3697 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.amd64)_LIB)/oldnames.lib
3698 TEMPLATE_VBOXR3EXE_POST_CMDS = $(VBOX_SIGN_IMAGE_CMDS)
3699
3700else # the gcc guys
3701TEMPLATE_VBOXR3EXE_TOOL = $(VBOX_GCC_TOOL)
3702TEMPLATE_VBOXR3EXE_CXXFLAGS = -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_fvisibility-inlines-hidden)
3703TEMPLATE_VBOXR3EXE_CXXFLAGS.x86 = -m32
3704TEMPLATE_VBOXR3EXE_CXXFLAGS.amd64 = -m64
3705TEMPLATE_VBOXR3EXE_CXXFLAGS.sparc32 = -m32
3706TEMPLATE_VBOXR3EXE_CXXFLAGS.sparc64 = -m64
3707TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile = -finstrument-functions
3708TEMPLATE_VBOXR3EXE_CFLAGS = -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing $(VBOX_GCC_fvisibility-hidden)
3709TEMPLATE_VBOXR3EXE_CFLAGS.x86 = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.x86)
3710TEMPLATE_VBOXR3EXE_CFLAGS.amd64 = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.amd64)
3711TEMPLATE_VBOXR3EXE_CFLAGS.sparc32 = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.sparc32)
3712TEMPLATE_VBOXR3EXE_CFLAGS.sparc64 = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.sparc64)
3713TEMPLATE_VBOXR3EXE_CFLAGS.debug = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.debug)
3714TEMPLATE_VBOXR3EXE_CFLAGS.kprofile = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile)
3715TEMPLATE_VBOXR3EXE_OBJCFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS)
3716TEMPLATE_VBOXR3EXE_OBJCFLAGS.x86 = $(TEMPLATE_VBOXR3EXE_CFLAGS.x86)
3717TEMPLATE_VBOXR3EXE_OBJCFLAGS.amd64 = $(TEMPLATE_VBOXR3EXE_CFLAGS.amd64)
3718TEMPLATE_VBOXR3EXE_OBJCFLAGS.debug = $(TEMPLATE_VBOXR3EXE_CFLAGS.debug)
3719TEMPLATE_VBOXR3EXE_OBJCFLAGS.kprofile = $(TEMPLATE_VBOXR3EXE_CFLAGS.kprofile)
3720TEMPLATE_VBOXR3EXE_OBJCXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS)
3721TEMPLATE_VBOXR3EXE_OBJCXXFLAGS.x86 = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.x86)
3722TEMPLATE_VBOXR3EXE_OBJCXXFLAGS.amd64 = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.amd64)
3723TEMPLATE_VBOXR3EXE_OBJCXXFLAGS.debug = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.debug)
3724TEMPLATE_VBOXR3EXE_OBJCXXFLAGS.kprofile= $(TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile)
3725TEMPLATE_VBOXR3EXE_LDFLAGS.x86 = -m32
3726TEMPLATE_VBOXR3EXE_LDFLAGS.amd64 = -m64
3727TEMPLATE_VBOXR3EXE_LDFLAGS.sparc32 = -m32
3728TEMPLATE_VBOXR3EXE_LDFLAGS.sparc64 = -m64
3729TEMPLATE_VBOXR3EXE_LDFLAGS.linux = -Wl,-z,noexecstack $(VBOX_LD_as_needed)
3730TEMPLATE_VBOXR3EXE_LDFLAGS.solaris = -Wl,-z,ignore # same as VBOX_LD_as_needed
3731
3732 ifeq ($(KBUILD_TARGET),linux)
3733TEMPLATE_VBOXR3EXE_LIBS = pthread m rt dl
3734 else ifeq ($(KBUILD_TARGET),os2)
3735TEMPLATE_VBOXR3EXE_TOOL = GXX3OMF
3736TEMPLATE_VBOXR3EXE_LIBS = socket iconv
3737 else ifeq ($(KBUILD_TARGET),darwin)
3738TEMPLATE_VBOXR3EXE_TOOL = GXX4MACHO
3739TEMPLATE_VBOXR3EXE_LIBS =
3740TEMPLATE_VBOXR3EXE_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_DEFS)
3741TEMPLATE_VBOXR3EXE_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -fno-common
3742TEMPLATE_VBOXR3EXE_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
3743TEMPLATE_VBOXR3EXE_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_OBJCFLAGS)
3744TEMPLATE_VBOXR3EXE_OBJCXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_OBJCXXFLAGS)
3745TEMPLATE_VBOXR3EXE_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_LDFLAGS)
3746TEMPLATE_VBOXR3EXE_LDFLAGS.darwin.x86 = -read_only_relocs suppress
3747 ifdef VBOX_WITH_DTRACE_R3
3748 TEMPLATE_VBOXR3EXE_CXXFLAGS := $(filter-out -pedantic,$(TEMPLATE_VBOXR3EXE_CXXFLAGS)) -fdollars-in-identifiers # annoying gcc option precedence.
3749 endif
3750 else ifeq ($(KBUILD_TARGET),haiku)
3751TEMPLATE_VBOXR3EXE_TOOL = GXX3
3752TEMPLATE_VBOXR3EXE_POST_CMDS = $(VBOX_HAIKU_XRES_SETVER_CMDS)
3753TEMPLATE_VBOXR3EXE_LIBS = network iconv stdc++ supc++
3754TEMPLATE_VBOXR3EXE_LIBPATH += \
3755 /boot/common/lib
3756# Haiku uses PIC by default...
3757TEMPLATE_VBOXR3EXE_CFLAGS += -fno-pic
3758TEMPLATE_VBOXR3EXE_CXXFLAGS += -fno-pic
3759TEMPLATE_VBOXR3EXE_LDFLAGS += -fno-pic
3760 else if1of ($(KBUILD_TARGET), freebsd netbsd openbsd)
3761TEMPLATE_VBOXR3EXE_TOOL = GXX3
3762TEMPLATE_VBOXR3EXE_LIBS = pthread
3763TEMPLATE_VBOXR3EXE_INCS += \
3764 /usr/include \
3765 /usr/X11R6/include \
3766 /usr/local/include
3767TEMPLATE_VBOXR3EXE_LIBPATH += \
3768 /usr/lib \
3769 /usr/X11R6/lib \
3770 /usr/local/lib
3771 else ifeq ($(KBUILD_TARGET),solaris)
3772TEMPLATE_VBOXR3EXE_TOOL = GXX3PLAIN
3773TEMPLATE_VBOXR3EXE_DEFS += LIBICONV_PLUG _REENTRANT # Avoid the GNU libiconv, for now at least.
3774
3775TEMPLATE_VBOXR3EXE_LIBS = rt socket
3776 else
3777$(warning Warning: VBOX Build: Target $(KBUILD_TARGET) is not officially supported!)
3778TEMPLATE_VBOXR3EXE_CXXFLAGS.profile = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.release)
3779TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.krelease)
3780 endif
3781 ifdef VBOX_WITH_RUNPATH
3782 TEMPLATE_VBOXR3EXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)'
3783 else ifdef VBOX_WITH_RELATIVE_RUNPATH
3784 TEMPLATE_VBOXR3EXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)'
3785 endif
3786 ifdef VBOX_WITH_ORIGIN
3787 TEMPLATE_VBOXR3EXE_LDFLAGS.linux += $(VBOX_GCC_ORIGIN_OPT)
3788 endif
3789endif
3790
3791#
3792# Template for building R3 shared objects / DLLs.
3793# This is mostly identical to the VBOXR3EXE template. (Avoid PIC if possible!)
3794# -
3795TEMPLATE_VBOXR3 = VBox Ring 3 SO/DLLs
3796TEMPLATE_VBOXR3_EXTENDS = VBOXR3EXE
3797TEMPLATE_VBOXR3_DEFS.darwin = $(TEMPLATE_VBOXR3EXE_DEFS.darwin) PIC
3798TEMPLATE_VBOXR3_LDFLAGS.darwin = $(TEMPLATE_VBOXR3EXE_LDFLAGS.darwin) \
3799 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
3800 -compatibility_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
3801ifn1of ($(KBUILD_TARGET), darwin win os2)
3802 TEMPLATE_VBOXR3_DEFS = $(TEMPLATE_VBOXR3EXE_DEFS) PIC
3803 TEMPLATE_VBOXR3_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS) -fPIC
3804 TEMPLATE_VBOXR3_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -fPIC
3805 TEMPLATE_VBOXR3_LDFLAGS = $(TEMPLATE_VBOXR3EXE_LDFLAGS) -fPIC
3806endif
3807ifeq ($(KBUILD_TARGET),haiku)
3808 # Haiku uses PIC by default...
3809 TEMPLATE_VBOXR3_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS) -fno-pic
3810 TEMPLATE_VBOXR3_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -fno-pic
3811 TEMPLATE_VBOXR3_LDFLAGS = $(TEMPLATE_VBOXR3EXE_LDFLAGS) -fno-pic
3812endif
3813
3814#
3815# Temporary: Renaming the template and warnings will be errors (soon).
3816#
3817TEMPLATE_VBoxR3Dll += VBox ring-3 SO/DLLs, no warnings
3818TEMPLATE_VBoxR3Dll_EXTENDS += VBOXR3
3819TEMPLATE_VBoxR3Dll_EXTENDS_BY += appending
3820ifeq ($(KBUILD_TARGET),win)
3821 TEMPLATE_VBoxR3Dll_CFLAGS += $(VBOX_VCC_WERR)
3822 TEMPLATE_VBoxR3Dll_CXXFLAGS += $(VBOX_VCC_WERR)
3823 TEMPLATE_VBoxR3Dll_LDFLAGS += $(VBOX_VCC_LD_WERR)
3824else
3825 TEMPLATE_VBoxR3Dll_CFLAGS += $(VBOX_GCC_WERR)
3826 TEMPLATE_VBoxR3Dll_CXXFLAGS += $(VBOX_GCC_WERR)
3827endif
3828
3829# x86 edition of the above template for use on AMD64 targets.
3830TEMPLATE_VBoxR3Dll-x86 = 32-bit VBox ring-3 SO/DLLs, no warnings
3831TEMPLATE_VBoxR3Dll-x86_EXTENDS = VBoxR3Dll
3832TEMPLATE_VBoxR3Dll-x86_BLD_TRG_ARCH = x86
3833TEMPLATE_VBoxR3Dll-x86_DEFS = $(filter-out HC_ARCH_BITS%,$(TEMPLATE_VBoxR3Dll_DEFS)) \
3834 HC_ARCH_BITS=32 ARCH_BITS=32
3835
3836
3837#
3838# Template for building performance critical stuff with warnings-as-errors.
3839#
3840TEMPLATE_VBoxR3DllNoPic = VBox ring-3 SO/DLLs without PIC, without warnings.
3841TEMPLATE_VBoxR3DllNoPic_EXTENDS = VBOXR3
3842if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), linux.x86 freebsd.x86)
3843 TEMPLATE_VBoxR3DllNoPic_DEFS = $(TEMPLATE_VBOXR3EXE_DEFS)
3844 TEMPLATE_VBoxR3DllNoPic_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS) $(VBOX_GCC_WERR)
3845 TEMPLATE_VBoxR3DllNoPic_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) $(VBOX_GCC_WERR)
3846 TEMPLATE_VBoxR3DllNoPic_LDFLAGS = $(TEMPLATE_VBOXR3EXE_LDFLAGS)
3847else ifeq ($(KBUILD_TARGET),win)
3848 TEMPLATE_VBoxR3DllNoPic_CFLAGS = $(TEMPLATE_VBOXR3_CFLAGS) $(VBOX_VCC_WERR)
3849 TEMPLATE_VBoxR3DllNoPic_CFLAGS.debug = $(filter-out -RTC%,$(TEMPLATE_VBOXR3_CFLAGS.debug))
3850 TEMPLATE_VBoxR3DllNoPic_CFLAGS.release = $(TEMPLATE_VBOXR3_CFLAGS.release) -GS-
3851 TEMPLATE_VBoxR3DllNoPic_CXXFLAGS = $(TEMPLATE_VBOXR3_CXXFLAGS) $(VBOX_VCC_WERR)
3852 TEMPLATE_VBoxR3DllNoPic_CXXFLAGS.debug = $(filter-out -RTC%,$(TEMPLATE_VBOXR3_CXXFLAGS.debug)) # RTCsu Prevents IEM opt.
3853 TEMPLATE_VBoxR3DllNoPic_CXXFLAGS.release = $(TEMPLATE_VBOXR3_CXXFLAGS.release) -GS-
3854 TEMPLATE_VBoxR3DllNoPic_LDFLAGS = $(TEMPLATE_VBOXR3_LDFLAGS) $(VBOX_VCC_LD_WERR)
3855else
3856 TEMPLATE_VBoxR3DllNoPic_CFLAGS = $(TEMPLATE_VBOXR3_CFLAGS) $(VBOX_GCC_WERR)
3857 TEMPLATE_VBoxR3DllNoPic_CXXFLAGS = $(TEMPLATE_VBOXR3_CXXFLAGS) $(VBOX_GCC_WERR)
3858endif
3859
3860# x86 edition of the above template for use on AMD64 targets.
3861TEMPLATE_VBoxR3DllNoPic-x86 = 32-bit VBox ring-3 SO/DLLs without PIC, without warnings.
3862TEMPLATE_VBoxR3DllNoPic-x86_EXTENDS = VBoxR3DllNoPic
3863TEMPLATE_VBoxR3DllNoPic-x86_BLD_TRG_ARCH = x86
3864TEMPLATE_VBoxR3DllNoPic-x86_DEFS = $(filter-out HC_ARCH_BITS%,$(TEMPLATE_VBoxR3DllNoPic_DEFS)) \
3865 HC_ARCH_BITS=32 ARCH_BITS=32
3866
3867
3868#
3869# Template for building performance critical stuff without warnings-as-errors.
3870#
3871TEMPLATE_VBoxR3DllWarnNoPic = VBox ring-3 SO/DLLs without PIC, with warnings.
3872TEMPLATE_VBoxR3DllWarnNoPic_EXTENDS = VBOXR3
3873if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), linux.x86 freebsd.x86)
3874 TEMPLATE_VBoxR3DllWarnNoPic_DEFS = $(TEMPLATE_VBOXR3EXE_DEFS)
3875 TEMPLATE_VBoxR3DllWarnNoPic_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS)
3876 TEMPLATE_VBoxR3DllWarnNoPic_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS)
3877 TEMPLATE_VBoxR3DllWarnNoPic_LDFLAGS = $(TEMPLATE_VBOXR3EXE_LDFLAGS)
3878else ifeq ($(KBUILD_TARGET),win)
3879 TEMPLATE_VBoxR3DllWarnNoPic_CFLAGS.release = $(TEMPLATE_VBOXR3_CFLAGS.release) -GS-
3880 TEMPLATE_VBoxR3DllWarnNoPic_CXXFLAGS.release = $(TEMPLATE_VBOXR3_CXXFLAGS.release) -GS-
3881endif
3882
3883#
3884# Template for building static R3 executables and any static
3885# libraries they link with.
3886#
3887TEMPLATE_VBOXR3STATIC = VBox Static Ring 3 EXE
3888TEMPLATE_VBOXR3STATIC_EXTENDS = VBOXR3EXE
3889TEMPLATE_VBOXR3STATIC_DEFS = IN_RT_STATIC IN_RT_R3 IN_SUP_STATIC $(TEMPLATE_VBOXR3EXE_DEFS)
3890ifeq ($(KBUILD_TARGET),win)
3891 TEMPLATE_VBOXR3STATIC_CFLAGS = $(filter-out -MD$(VBOX_VCC_CRT_TYPE), $(TEMPLATE_VBOXR3EXE_CFLAGS)) -MT$(VBOX_VCC_CRT_TYPE)
3892 TEMPLATE_VBOXR3STATIC_CXXFLAGS = $(filter-out -MD$(VBOX_VCC_CRT_TYPE), $(TEMPLATE_VBOXR3EXE_CFLAGS)) -MT$(VBOX_VCC_CRT_TYPE)
3893 TEMPLATE_VBOXR3STATIC_LDFLAGS = $(filter-out /DISALLOWLIB:libcmt$(VBOX_VCC_CRT_TYPE).lib /DISALLOWLIB:libcpmt$(VBOX_VCC_CRT_TYPE).lib, $(TEMPLATE_VBOXR3EXE_LDFLAGS)) \
3894 /DISALLOWLIB:msvcrt.lib \
3895 /DISALLOWLIB:msvcrtd.lib \
3896 /DISALLOWLIB:msvcprt.lib \
3897 /DISALLOWLIB:msvcprtd.lib
3898 TEMPLATE_VBOXR3STATIC_LIBS.x86 = \
3899 $(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL.win.x86)_LIB)/oldnames.lib \
3900 $(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL.win.x86)_LIB)/libcmt$(VBOX_VCC_CRT_TYPE).lib \
3901 $(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL.win.x86)_LIB)/libcpmt$(VBOX_VCC_CRT_TYPE).lib
3902 TEMPLATE_VBOXR3STATIC_LIBS.amd64 = \
3903 $(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL.win.amd64)_LIB)/libcmt$(VBOX_VCC_CRT_TYPE).lib \
3904 $(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL.win.amd64)_LIB)/libcpmt$(VBOX_VCC_CRT_TYPE).lib \
3905 $(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL.win.amd64)_LIB)/oldnames.lib
3906else ifn1of ($(KBUILD_TARGET), darwin linux solaris)
3907 # The gcc guys sans darwin, linux and solaris (don't depend on statically compiled system libs there)
3908 TEMPLATE_VBOXR3STATIC_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS) -static
3909 TEMPLATE_VBOXR3STATIC_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -static
3910 TEMPLATE_VBOXR3STATIC_OBJCFLAGS = $(TEMPLATE_VBOXR3EXE_OBJCFLAGS) -static
3911 TEMPLATE_VBOXR3STATIC_OBJCXXFLAGS = $(TEMPLATE_VBOXR3EXE_OBJCXXFLAGS) -static
3912 TEMPLATE_VBOXR3STATIC_LDFLAGS = $(TEMPLATE_VBOXR3EXE_LDFLAGS) -static
3913else ifeq ($(KBUILD_TARGET),solaris)
3914 TEMPLATE_VBOXR3STATIC_LIBS = $(TEMPLATE_VBOXR3EXE_LIBS) nsl
3915 TEMPLATE_VBOXR3STATIC_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)',$(TEMPLATE_VBOXR3EXE_LDFLAGS))
3916else
3917 TEMPLATE_VBOXR3STATIC_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)',$(TEMPLATE_VBOXR3EXE_LDFLAGS))
3918endif
3919
3920#
3921# Temporary: Renaming the template and warnings will be errors (soon).
3922# Unlike VBOXR3STATIC, this is strict wrt warnings and includes IPRT.
3923#
3924TEMPLATE_VBoxR3Static = New name for VBOXR3STATIC
3925TEMPLATE_VBoxR3Static_EXTENDS = VBOXR3STATIC
3926TEMPLATE_VBoxR3Static_EXTENDS_BY = appending
3927TEMPLATE_VBoxR3Static_SDKS += VBOX_OPENSSL
3928TEMPLATE_VBoxR3Static_SDKS.win += VBOX_NTDLL
3929ifeq ($(KBUILD_TARGET),win)
3930 TEMPLATE_VBoxR3Static_CFLAGS += $(VBOX_VCC_WERR)
3931 TEMPLATE_VBoxR3Static_CXXFLAGS += $(VBOX_VCC_WERR)
3932 TEMPLATE_VBoxR3Static_LDFLAGS += $(VBOX_VCC_LD_WERR)
3933else
3934 TEMPLATE_VBoxR3Static_CFLAGS += $(VBOX_GCC_WERR)
3935 TEMPLATE_VBoxR3Static_CXXFLAGS += $(VBOX_GCC_WERR)
3936endif
3937TEMPLATE_VBoxR3Static_LIBS += \
3938 $(VBOX_LIB_RUNTIME_STATIC)
3939ifndef SDK_VBOX_OPENSSL_LIBS
3940 TEMPLATE_VBoxR3Static_LIBS += \
3941 $(PATH_STAGE_LIB)/VBox-libcrypto$(VBOX_SUFF_LIB) \
3942 $(PATH_STAGE_LIB)/VBox-libssl$(VBOX_SUFF_LIB)
3943endif
3944ifndef SDK_VBOX_LIBXML2_LIBS
3945 TEMPLATE_VBoxR3Static_LIBS += \
3946 $(PATH_STAGE_LIB)/VBox-libxml2-static$(VBOX_SUFF_LIB)
3947endif
3948if1of ($(KBUILD_TARGET),os2 win)
3949 TEMPLATE_VBoxR3Static_LIBS += \
3950 $(PATH_STAGE_LIB)/VBox-liblzf-static$(VBOX_SUFF_LIB) \
3951 $(PATH_STAGE_LIB)/VBox-zlib-static$(VBOX_SUFF_LIB)
3952else
3953 TEMPLATE_VBoxR3Static_LIBS += \
3954 $(PATH_STAGE_LIB)/VBox-liblzf$(VBOX_SUFF_LIB) \
3955 $(SDK_VBOX_ZLIB_LIBS)
3956 ifeq ($(KBUILD_TARGET),linux)
3957 TEMPLATE_VBoxR3Static_LIBS += crypt
3958 else if1of ($(KBUILD_TARGET),darwin freebsd)
3959 TEMPLATE_VBoxR3Static_LIBS += iconv
3960 else ifeq ($(KBUILD_TARGET),solaris)
3961 TEMPLATE_VBoxR3Static_LIBS += kstat
3962 endif
3963endif
3964
3965
3966#
3967# Same as VBOXR3EXE but without C++ exceptions.
3968#
3969# VBOXR3EXE does C++ exceptions and may assumes that extern "C" functions
3970# doesn't throw them. Use this template (and VBOXR3DLLNOXCPT) with care
3971# and only where the C++ overhead is really unwanted.
3972#
3973TEMPLATE_VBOXR3EXENOXCPT = VBox Ring 3 Exe without C++ exception
3974TEMPLATE_VBOXR3EXENOXCPT_EXTENDS = VBOXR3EXE
3975ifeq ($(KBUILD_TARGET),win)
3976 TEMPLATE_VBOXR3EXENOXCPT_CFLAGS = $(filter-out -EH%,$(TEMPLATE_VBOXR3EXE_CFLAGS) ) -EHs-
3977 TEMPLATE_VBOXR3EXENOXCPT_CXXFLAGS = $(filter-out -EH%,$(TEMPLATE_VBOXR3EXE_CXXFLAGS)) -EHs-
3978else
3979 TEMPLATE_VBOXR3EXENOXCPT_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -fno-exceptions
3980endif
3981
3982#
3983# Same as VBOXR3 but without C++ exceptions.
3984#
3985TEMPLATE_VBOXR3DLLNOXCPT = VBox Ring 3 SO/DLLs without C++ exception
3986TEMPLATE_VBOXR3DLLNOXCPT_EXTENDS = VBOXR3
3987ifeq ($(KBUILD_TARGET),win)
3988 TEMPLATE_VBOXR3DLLNOXCPT_CFLAGS = $(filter-out -EH%,$(TEMPLATE_VBOXR3_CFLAGS) ) -EHs-
3989 TEMPLATE_VBOXR3DLLNOXCPT_CXXFLAGS = $(filter-out -EH%,$(TEMPLATE_VBOXR3_CXXFLAGS)) -EHs-
3990else
3991 TEMPLATE_VBOXR3DLLNOXCPT_CXXFLAGS = $(TEMPLATE_VBOXR3_CXXFLAGS) -fno-exceptions
3992endif
3993
3994#
3995# Template for building hardened Ring-3 executables.
3996# These shall have no extra runpaths, esp. not origin ones.
3997#
3998TEMPLATE_VBOXR3HARDENEDEXE = Hardened VBox Ring-3 EXE
3999TEMPLATE_VBOXR3HARDENEDEXE_EXTENDS = VBOXR3EXE
4000TEMPLATE_VBOXR3HARDENEDEXE_DEBUG_INST.win = $(INST_DEBUG)hardened-exes/
4001ifdef VBOX_WITH_HARDENING
4002 TEMPLATE_VBOXR3HARDENEDEXE_LIBS = $(VBOX_LIB_SUPHARDENED) $(TEMPLATE_VBOXR3EXE_LIBS)
4003else
4004 TEMPLATE_VBOXR3HARDENEDEXE_LIBS = $(TEMPLATE_VBOXR3EXE_LIBS)
4005endif
4006TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS.darwin = $(TEMPLATE_VBOXR3EXE_LDFLAGS.darwin) -framework IOKit
4007ifeq ($(KBUILD_TARGET),linux)
4008# not necessary except USE_LIB_PCAP is defined in SUPR3HardenedMain.cpp
4009# TEMPLATE_VBOXR3HARDENEDEXE_LIBS += cap
4010endif
4011ifeq ($(KBUILD_TARGET),win) # No CRT!
4012 TEMPLATE_VBOXR3HARDENEDEXE_SDKS = VBOX_NTDLL $(TEMPLATE_VBOXR3EXE_SDKS)
4013 TEMPLATE_VBOXR3HARDENEDEXE_LIBS.x86 = \
4014 $(PATH_SDK_$(VBOX_WINDDK)_LIB.x86)/int64.lib \
4015 $(PATH_TOOL_$(TEMPLATE_VBOXR3HARDENEDEXE_TOOL.win.x86)_LIB)/chkstk.obj
4016 TEMPLATE_VBOXR3HARDENEDEXE_CXXFLAGS = $(filter-out -RTC% -GZ -GS,$(TEMPLATE_VBOXR3EXE_CXXFLAGS)) -GS-
4017 TEMPLATE_VBOXR3HARDENEDEXE_CXXFLAGS.debug= $(filter-out -RTC% -GZ -GS,$(TEMPLATE_VBOXR3EXE_CXXFLAGS.debug)) -GS- -O2 -Oy-
4018 TEMPLATE_VBOXR3HARDENEDEXE_CFLAGS = $(filter-out -RTC% -GZ -GS,$(TEMPLATE_VBOXR3EXE_CFLAGS)) -GS-
4019 TEMPLATE_VBOXR3HARDENEDEXE_CFLAGS.debug = $(filter-out -RTC% -GZ -GS,$(TEMPLATE_VBOXR3EXE_CFLAGS.debug)) -GS- -O2 -Oy-
4020 TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS = $(TEMPLATE_VBOXR3EXE_LDFLAGS) \
4021 /DISALLOWLIB:msvcrt$(VBOX_VCC_CRT_TYPE).lib \
4022 /DISALLOWLIB:msvcprt$(VBOX_VCC_CRT_TYPE).lib
4023 TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS.win.x86 = $(TEMPLATE_VBOXR3EXE_LDFLAGS.win.x86) /entry:suplibHardenedWindowsMain
4024 TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS.win.amd64 = $(TEMPLATE_VBOXR3EXE_LDFLAGS.win.amd64) /entry:suplibHardenedWindowsMain
4025 TEMPLATE_VBOXR3HARDENEDEXE_LIBS.x86 = $(NOT_SUCH_VARIABLE)
4026 TEMPLATE_VBOXR3HARDENEDEXE_LIBS.amd64 = $(NOT_SUCH_VARIABLE)
4027else ifn1of ($(KBUILD_TARGET), os2)
4028 TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)%,$(TEMPLATE_VBOXR3EXE_LDFLAGS))
4029 TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS.linux = $(filter-out $(VBOX_GCC_ORIGIN_OPT),$(TEMPLATE_VBOXR3EXE_LDFLAGS.linux))
4030endif
4031
4032#
4033# Template for building hardened Ring-3 libraries.
4034#
4035TEMPLATE_VBOXR3HARDENEDLIB = Hardened VBox Ring-3 LIB
4036TEMPLATE_VBOXR3HARDENEDLIB_EXTENDS = VBOXR3HARDENEDEXE
4037TEMPLATE_VBOXR3HARDENEDLIB_LIBS = $(NO_SUCH_VARIABLE)
4038
4039
4040#
4041# Template for building hardened Ring-3 executables.
4042# These shall have no extra runpaths, esp. not origin ones.
4043#
4044TEMPLATE_VBoxR3HardenedTstExe = VBox Ring-3 Hardened Testcase Exe (currently windows only!)
4045TEMPLATE_VBoxR3HardenedTstExe_EXTENDS = VBOXR3HARDENEDEXE
4046TEMPLATE_VBoxR3HardenedTstExe_INST = $(INST_TESTCASE)
4047
4048#
4049# Template for building set-uid-to-root helper programs.
4050# In hardened builds, these may only contain absolute runpaths!
4051#
4052TEMPLATE_VBoxR3SetUidToRoot = Set-uid-to-root helper program.
4053if1of ($(KBUILD_TARGET),win)
4054 TEMPLATE_VBoxR3SetUidToRoot_EXTENDS = VBOXR3EXE
4055else
4056 TEMPLATE_VBoxR3SetUidToRoot_EXTENDS = VBOXR3HARDENEDEXE
4057endif
4058TEMPLATE_VBoxR3SetUidToRoot_LIBS = $(NO_SUCH_VARIABLE)
4059ifdef VBOX_WITH_RUNPATH
4060 TEMPLATE_VBoxR3SetUidToRoot_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)'
4061endif
4062ifndef VBOX_WITH_HARDENING
4063 ifdef VBOX_WITH_RELATIVE_RUNPATH
4064 TEMPLATE_VBoxR3SetUidToRoot_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)'
4065 endif
4066 ifdef VBOX_WITH_ORIGIN
4067 TEMPLATE_VBoxR3SetUidToRoot_LDFLAGS.linux += $(VBOX_GCC_ORIGIN_OPT)
4068 endif
4069endif
4070
4071#
4072# Template for building R3 tools.
4073#
4074TEMPLATE_VBoxR3Tool = VBox Ring 3 Tools
4075TEMPLATE_VBoxR3Tool_EXTENDS = VBOXR3EXE
4076TEMPLATE_VBoxR3Tool_INST = $(VBOX_INST_TOOLS)
4077ifeq ($(KBUILD_TARGET),win)
4078 TEMPLATE_VBoxR3Tool_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS) $(VBOX_VCC_WERR)
4079 TEMPLATE_VBoxR3Tool_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) $(VBOX_VCC_WERR)
4080 TEMPLATE_VBoxR3Tool_LDFLAGS = $(TEMPLATE_VBOXR3EXE_LDFLAGS) $(VBOX_VCC_LD_WERR)
4081else
4082 TEMPLATE_VBoxR3Tool_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS) $(VBOX_GCC_WERR)
4083 TEMPLATE_VBoxR3Tool_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) $(VBOX_GCC_WERR)
4084 ifdef VBOX_WITH_RUNPATH
4085 TEMPLATE_VBoxR3Tool_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' $(TEMPLATE_VBOXR3EXE_LDFLAGS)
4086 else ifdef VBOX_WITH_RELATIVE_RUNPATH
4087 TEMPLATE_VBoxR3Tool_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/..' $(TEMPLATE_VBOXR3EXE_LDFLAGS)
4088 endif
4089endif
4090TEMPLATE_VBoxR3Tool_LIBS = $(LIB_RUNTIME) $(TEMPLATE_VBOXR3EXE_LIBS)
4091
4092#
4093# Template for building R3 shared objects / DLLs with the 10.5 Mac OS X SDK.
4094# Identical to VBOXR3EXE, except for the DYLIB, the classic_linker and SDK bits.
4095#
4096TEMPLATE_VBOXR3OSX105 = VBox Ring 3 SO/DLLs for OS X 10.5
4097TEMPLATE_VBOXR3OSX105_EXTENDS = VBOXR3EXE
4098TEMPLATE_VBOXR3OSX105_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_DEFS) PIC
4099TEMPLATE_VBOXR3OSX105_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_CFLAGS) -fno-common
4100TEMPLATE_VBOXR3OSX105_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_CXXFLAGS)
4101TEMPLATE_VBOXR3OSX105_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_OBJCFLAGS)
4102TEMPLATE_VBOXR3OSX105_OBJCXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_OBJCFLAGS)
4103TEMPLATE_VBOXR3OSX105_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_LDFLAGS) \
4104 -read_only_relocs suppress \
4105 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
4106 -compatibility_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
4107
4108
4109#
4110# Ring-3 testcase, running automatically during the build.
4111# This is the VBOXR3EXE template only with a different install dir.
4112#
4113TEMPLATE_VBOXR3AUTOTST = VBox Ring 3 Testcase Exe
4114ifeq ($(KBUILD_TARGET),win)
4115 TEMPLATE_VBOXR3AUTOTST_EXTENDS = VBoxR3Static
4116 TEMPLATE_VBOXR3AUTOTST_LIBS = $(NO_SUCH_VARIABLE)
4117else
4118 TEMPLATE_VBOXR3AUTOTST_EXTENDS = VBOXR3EXE
4119endif
4120TEMPLATE_VBOXR3AUTOTST_INST = $(INST_TESTCASE)
4121if "$(KBUILD_TARGET)" == "win" && defined(VBOX_SIGNING_MODE)
4122 TEMPLATE_VBOXR3AUTOTST_POST_CMDS = $(NO_SUCH_VARIABLE)
4123 TEMPLATE_VBOXR3AUTOTST_LDFLAGS = $(filter-out -IntegrityCheck, $(TEMPLATE_VBoxR3Static_LDFLAGS))
4124endif
4125
4126#
4127# Ring-3 testcase.
4128# This is the VBOXR3EXE template only with a different install dir.
4129#
4130TEMPLATE_VBOXR3TSTEXE = VBox Ring 3 Testcase Exe
4131TEMPLATE_VBOXR3TSTEXE_EXTENDS = VBOXR3EXE
4132TEMPLATE_VBOXR3TSTEXE_INST = $(INST_TESTCASE)
4133TEMPLATE_VBOXR3TSTEXE_LIBS = $(LIB_RUNTIME) $(TEMPLATE_VBOXR3EXE_LIBS)
4134ifdef VBOX_WITH_RUNPATH
4135 TEMPLATE_VBOXR3TSTEXE_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' $(TEMPLATE_VBOXR3EXE_LDFLAGS)
4136else ifdef VBOX_WITH_RELATIVE_RUNPATH
4137 TEMPLATE_VBOXR3TSTEXE_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/..' $(TEMPLATE_VBOXR3EXE_LDFLAGS)
4138endif
4139if "$(KBUILD_TARGET)" == "win" && defined(VBOX_SIGNING_MODE)
4140 TEMPLATE_VBOXR3TSTEXE_POST_CMDS =
4141 TEMPLATE_VBOXR3TSTEXE_LDFLAGS = $(filter-out -IntegrityCheck, $(TEMPLATE_VBOXR3EXE_LDFLAGS))
4142endif
4143
4144#
4145# Ring-3 testcase (no -pedantic)
4146#
4147TEMPLATE_VBOXR3TSTNPEXE = VBox Ring 3 Testcase Exe Non-pedantic
4148TEMPLATE_VBOXR3TSTNPEXE_EXTENDS = VBOXR3TSTEXE
4149ifneq ($(KBUILD_TARGET),win) # (only gcc)
4150 TEMPLATE_VBOXR3TSTNPEXE_TOOL = $(VBOX_GCC_TOOL)
4151 TEMPLATE_VBOXR3TSTNPEXE_CXXFLAGS = $(filter-out -pedantic -Wshadow,$(TEMPLATE_VBOXR3TSTEXE_CXXFLAGS)) -Wno-sign-compare
4152 TEMPLATE_VBOXR3TSTNPEXE_CFLAGS = $(filter-out -pedantic -Wshadow -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations,$(TEMPLATE_VBOXR3TSTEXE_CFLAGS)) -Wno-sign-compare
4153endif
4154
4155
4156#
4157# Ring-3 testcase DLL.
4158#
4159TEMPLATE_VBoxR3TstDll = VBox Ring-3 Testcase Dll
4160TEMPLATE_VBoxR3TstDll_EXTENDS = VBOXR3TSTEXE
4161ifn1of ($(KBUILD_TARGET), darwin win os2)
4162 TEMPLATE_VBoxR3TstDll_DEFS = $(TEMPLATE_VBOXR3TSTEXE_DEFS) PIC
4163 TEMPLATE_VBoxR3TstDll_CFLAGS = $(TEMPLATE_VBOXR3TSTEXE_CFLAGS) -fPIC
4164 TEMPLATE_VBoxR3TstDll_CXXFLAGS = $(TEMPLATE_VBOXR3TSTEXE_CXXFLAGS) -fPIC
4165 TEMPLATE_VBoxR3TstDll_LDFLAGS = $(TEMPLATE_VBOXR3TSTEXE_LDFLAGS) -fPIC
4166endif
4167
4168
4169#
4170# Template for the CppUnit kind of testcases.
4171#
4172TEMPLATE_VBOXCPPUNITEXE = VBox CppUnit Testcase Exe
4173TEMPLATE_VBOXCPPUNITEXE_EXTENDS = VBOXR3TSTEXE
4174## @todo make a CPPUNIT SDK and add cppunit tools packages for windows, mac, solaris and OS/2.
4175#TEMPLATE_VBOXCPPUNITEXE_SDKS = CPPUNIT -
4176TEMPLATE_VBOXCPPUNITEXE_LIBS = \
4177 $(TEMPLATE_VBOXR3TSTEXE_LIBS) \
4178 cppunit
4179
4180#
4181# Template for building bad C/C++ style R3 executables (no -pedantic).
4182#
4183TEMPLATE_VBOXR3NPEXE = VBox Ring 3 Non-pedantic
4184TEMPLATE_VBOXR3NPEXE_EXTENDS = VBOXR3EXE
4185ifneq ($(KBUILD_TARGET),win) # (only gcc)
4186 TEMPLATE_VBOXR3NPEXE_TOOL = $(VBOX_GCC_TOOL)
4187 TEMPLATE_VBOXR3NPEXE_CXXFLAGS = $(filter-out -pedantic -Wshadow,$(TEMPLATE_VBOXR3EXE_CXXFLAGS)) -Wno-sign-compare
4188 TEMPLATE_VBOXR3NPEXE_CFLAGS = $(filter-out -pedantic -Wshadow -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations,$(TEMPLATE_VBOXR3EXE_CFLAGS)) \
4189 -Wno-sign-compare -Werror-implicit-function-declaration
4190endif
4191
4192
4193#
4194# Template for building bad C/C++ style R3 shared libraries / Dlls (no -pedantic).
4195# (Same transformation as for VBOXR3NPEXE.)
4196#
4197# @deprecated Use VBoxR3DllNonPedantic!
4198#
4199TEMPLATE_VBOXR3NP = VBox Ring 3 Non-pedantic
4200TEMPLATE_VBOXR3NP_EXTENDS = VBOXR3
4201ifneq ($(KBUILD_TARGET),win) # (only gcc)
4202 TEMPLATE_VBOXR3NP_TOOL = $(VBOX_GCC_TOOL)
4203 TEMPLATE_VBOXR3NP_CXXFLAGS = $(filter-out -pedantic -Wshadow,$(TEMPLATE_VBOXR3_CXXFLAGS)) -Wno-sign-compare
4204 TEMPLATE_VBOXR3NP_CFLAGS = $(filter-out -pedantic -Wshadow -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations,$(TEMPLATE_VBOXR3_CFLAGS)) \
4205 -Wno-sign-compare -Werror-implicit-function-declaration
4206endif
4207
4208
4209#
4210# Template for building bad C/C++ style R3 shared libraries / Dlls (no -pedantic).
4211# (Same transformation as for VBoxR3ExeNonPedantic.)
4212#
4213TEMPLATE_VBoxR3DllNonPedantic = VBox ring-3 Non-pedantic, with warnings.
4214TEMPLATE_VBoxR3DllNonPedantic_EXTENDS = VBOXR3
4215ifneq ($(KBUILD_TARGET),win) # (only gcc)
4216 TEMPLATE_VBoxR3DllNonPedantic_TOOL = $(VBOX_GCC_TOOL)
4217 TEMPLATE_VBoxR3DllNonPedantic_CXXFLAGS = $(filter-out -pedantic -Wshadow,$(TEMPLATE_VBOXR3_CXXFLAGS)) -Wno-sign-compare
4218 TEMPLATE_VBoxR3DllNonPedantic_CFLAGS = $(filter-out -pedantic -Wshadow -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations,$(TEMPLATE_VBOXR3_CFLAGS)) \
4219 -Wno-sign-compare -Werror-implicit-function-declaration
4220endif
4221
4222# x86 edition of the above template for use on AMD64 targets.
4223TEMPLATE_VBoxR3DllNonPedantic-x86 = 32-bit VBox ring-3 SO/DLLs, no warnings
4224TEMPLATE_VBoxR3DllNonPedantic-x86_EXTENDS = VBoxR3DllNonPedantic
4225TEMPLATE_VBoxR3DllNonPedantic-x86_BLD_TRG_ARCH = x86
4226TEMPLATE_VBoxR3DllNonPedantic-x86_DEFS = $(filter-out HC_ARCH_BITS%,$(TEMPLATE_VBoxR3Dll_DEFS)) \
4227 HC_ARCH_BITS=32 ARCH_BITS=32
4228
4229
4230
4231#
4232# Template for building libraries, shared libraries / modules
4233# which only depends on IPRT for crt.
4234#
4235TEMPLATE_VBoxNoCrtGccLib = VBox no-crt GCC libraries and modules, yasm/nasm.
4236TEMPLATE_VBoxNoCrtGccLib_DEFS = IN_RING3 IPRT_NO_CRT $(ARCH_BITS_DEFS)
4237TEMPLATE_VBoxNoCrtGccLib_ASDEFS = ASM_CALL64_GCC
4238TEMPLATE_VBoxNoCrtGccLib_CFLAGS = -nostdinc -fno-strict-aliasing -fno-math-errno $(VBOX_GCC_WARN) -Werror-implicit-function-declaration
4239TEMPLATE_VBoxNoCrtGccLib_CFLAGS.x86 = -m32
4240TEMPLATE_VBoxNoCrtGccLib_CFLAGS.amd64 = -m64 -mcmodel=medium -fno-common
4241TEMPLATE_VBoxNoCrtGccLib_CFLAGS.sparc32 = -m32
4242TEMPLATE_VBoxNoCrtGccLib_CFLAGS.sparc64 = -m64
4243TEMPLATE_VBoxNoCrtGccLib_CFLAGS.release = -O2 -fno-strict-aliasing
4244TEMPLATE_VBoxNoCrtGccLib_CFLAGS.profile = $(TEMPLATE_VBoxNoCrtGccLib_CFLAGS.release)
4245TEMPLATE_VBoxNoCrtGccLib_CFLAGS.kprofile = $(TEMPLATE_VBoxNoCrtGccLib_CFLAGS.release)
4246TEMPLATE_VBoxNoCrtGccLib_CFLAGS.darwin = -static
4247TEMPLATE_VBoxNoCrtGccLib_CXXFLAGS = $(TEMPLATE_VBoxNoCrtGccLib_CFLAGS)
4248TEMPLATE_VBoxNoCrtGccLib_CXXFLAGS.$(KBUILD_TARGET) = $(TEMPLATE_VBoxNoCrtGccLib_CFLAGS.$(KBUILD_TARGET))
4249TEMPLATE_VBoxNoCrtGccLib_CXXFLAGS.$(KBUILD_TARGET_ARCH) = $(TEMPLATE_VBoxNoCrtGccLib_CFLAGS.$(KBUILD_TARGET_ARCH))
4250TEMPLATE_VBoxNoCrtGccLib_INCS = $(PATH_ROOT)/include/iprt/nocrt
4251
4252ifeq (disabled-by-mingw-w64 $(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),win.amd64)
4253 # cross compile to 64-bit ELF (linux).
4254 TEMPLATE_VBoxNoCrtGccLib_TOOL = XGCCAMD64LINUX
4255 TEMPLATE_VBoxNoCrtGccLib_ASTOOL = YASM
4256 TEMPLATE_VBoxNoCrtGccLib_ASFLAGS = -f elf64 -DASM_FORMAT_ELF -D__YASM__ -w+orphan-labels -g dwarf2
4257 TEMPLATE_VBoxNoCrtGccLib_LIBS = $(PATH_DEVTOOLS)/win.x86/x86_64-unknown-linux-gnu/20060701-r2/lib/gcc/x86_64-unknown-linux-gnu/3.4.6/libgcc.a
4258 TEMPLATE_VBoxNoCrtGccLib_LDFLAGS = -nostdlib
4259
4260else if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), win.x86 win.amd64)
4261 # Use the default GCC (MinGW) with the Microsoft linker.
4262 # (Drop all '-g' options as we're unable to strip the debug info.)
4263 TEMPLATE_VBoxNoCrtGccLib_TOOL = $(VBOX_GCC_TOOL)
4264 TEMPLATE_VBoxNoCrtGccLib_ASTOOL = $(VBOX_ASTOOL)
4265 TEMPLATE_VBoxNoCrtGccLib_ASFLAGS = $(VBOX_ASFLAGS)
4266 TEMPLATE_VBoxNoCrtGccLib_LDTOOL = $(VBOX_VCC_TOOL)
4267 TEMPLATE_VBoxNoCrtGccLib_LDFLAGS = -Incremental:NO -MapInfo:Exports -NoD
4268 TEMPLATE_VBoxNoCrtGccLib_LIBS = $(VBOX_GCC_LIBGCC)
4269 TEMPLATE_VBoxNoCrtGccLib_CFLAGS := $(filter-out -g,$(TEMPLATE_VBoxNoCrtGccLib_CFLAGS)) -s
4270 TEMPLATE_VBoxNoCrtGccLib_CXXFLAGS := $(filter-out -g,$(TEMPLATE_VBoxNoCrtGccLib_CXXFLAGS)) -s
4271
4272else
4273 # Use the default GCC.
4274 # The use of --exclude-libs ALL is to avoid confusing the linux ld.so.
4275 TEMPLATE_VBoxNoCrtGccLib_TOOL = $(VBOX_GCC_TOOL)
4276 TEMPLATE_VBoxNoCrtGccLib_ASTOOL = $(VBOX_ASTOOL)
4277 TEMPLATE_VBoxNoCrtGccLib_ASFLAGS = $(VBOX_ASFLAGS)
4278 TEMPLATE_VBoxNoCrtGccLib_CFLAGS += $(VBOX_GCC_fno-stack-protector)
4279 TEMPLATE_VBoxNoCrtGccLib_CXXFLAGS += $(VBOX_GCC_fno-stack-protector)
4280 ifeq ($(KBUILD_TARGET_ARCH),amd64)
4281 # in 64-bit mode we'll build a sys-module (VBoxREM2).
4282 if1of ($(KBUILD_TARGET), darwin solaris)
4283 TEMPLATE_VBoxNoCrtGccLib_LDFLAGS.solaris= -64 -r
4284 else
4285 TEMPLATE_VBoxNoCrtGccLib_LDFLAGS = -nostdlib
4286 endif
4287 else # x86:
4288 TEMPLATE_VBoxNoCrtGccLib_LDFLAGS = -nostdlib
4289 ifn1of ($(KBUILD_TARGET), os2 darwin solaris)
4290 TEMPLATE_VBoxNoCrtGccLib_LDFLAGS += -Wl,--no-undefined
4291 endif
4292 endif # x86
4293 TEMPLATE_VBoxNoCrtGccLib_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_LDFLAGS)
4294 TEMPLATE_VBoxNoCrtGccLib_LIBS = # FIXME - has unwind mess.
4295endif
4296
4297
4298#
4299# Same as VBoxNoCrtGccLib only it uses GAS as the assembler instead of yasm/nasm.
4300#
4301TEMPLATE_VBOXNOCRTGAS = VBox no-crt GCC libraries and modules, gas.
4302TEMPLATE_VBOXNOCRTGAS_EXTENDS = VBoxNoCrtGccLib
4303TEMPLATE_VBOXNOCRTGAS_ASTOOL = $(TEMPLATE_VBoxNoCrtGccLib_TOOL)
4304ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),win.x86)
4305 TEMPLATE_VBOXNOCRTGAS_ASFLAGS = -s
4306else
4307 TEMPLATE_VBOXNOCRTGAS_ASFLAGS = -g
4308endif
4309TEMPLATE_VBOXNOCRTGAS_ASFLAGS.x86 = -m32
4310TEMPLATE_VBOXNOCRTGAS_ASFLAGS.amd64 = -m64
4311
4312
4313#
4314# Template for building executables that are part of the VBox Main component
4315# (COM/XPCOM interface to VirtualBox).
4316#
4317TEMPLATE_VBOXMAINEXE = VBox Main Executable
4318TEMPLATE_VBOXMAINEXE_ASTOOL = $(VBOX_ASTOOL)
4319TEMPLATE_VBOXMAINEXE_ASFLAGS = $(VBOX_ASFLAGS)
4320TEMPLATE_VBOXMAINEXE_DEFS = IN_RING3 UNICODE NDEBUG=1
4321TEMPLATE_VBOXMAINEXE_DEFS.win = _UNICODE
4322TEMPLATE_VBOXMAINEXE_RCDEFS = $(TEMPLATE_VBOXR3EXE_RCDEFS)
4323TEMPLATE_VBOXMAINEXE_LIBS.kprofile = $(LIB_KPROFILE)
4324
4325ifeq ($(KBUILD_TARGET),win)
4326 TEMPLATE_VBOXMAINEXE_SDKS = ReorderCompilerIncs $(VBOX_WINPSDK) $(VBOX_WINDDK)
4327 # Note: C4250 is the dominance warning, see r32789.
4328 # C4065 is about default only switches.
4329 # C4996 is about deprected function (CRT only?).
4330 #TEMPLATE_VBOXMAINEXE_TOOL = $(VBOX_VCC_TOOL)
4331 TEMPLATE_VBOXMAINEXE_TOOL.win.x86 = $(VBOX_VCC_TOOL_STEM)X86
4332 TEMPLATE_VBOXMAINEXE_TOOL.win.amd64 = $(VBOX_VCC_TOOL_STEM)AMD64
4333 TEMPLATE_VBOXMAINEXE_CXXFLAGS = -Zi -Zl -GR -EHsc -GF -MD$(VBOX_VCC_CRT_TYPE) -W3 -wd4065 -wd4996 -wd4250 -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
4334 TEMPLATE_VBOXMAINEXE_CXXFLAGS.debug = -RTCsu
4335 TEMPLATE_VBOXMAINEXE_CXXFLAGS.dbgopt = $(NO_SUCH_VARIABLE)
4336 TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile = -Gh -GH
4337 TEMPLATE_VBOXMAINEXE_CFLAGS = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS)
4338 TEMPLATE_VBOXMAINEXE_CFLAGS.debug = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.debug)
4339 TEMPLATE_VBOXMAINEXE_CFLAGS.dbgopt = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.dbgopt)
4340 TEMPLATE_VBOXMAINEXE_CFLAGS.kprofile = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile)
4341 TEMPLATE_VBOXMAINEXE_LDFLAGS = \
4342 /NOD /INCREMENTAL:NO /MAPINFO:EXPORTS /LargeAddressAware /DynamicBase /NxCompat /Release /Debug \
4343 /Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
4344 /STUB:$(PATH_ROOT)/src/VBox/HostDrivers/Support/win/winstub.com \
4345 /DISALLOWLIB:libc.lib \
4346 /DISALLOWLIB:libcd.lib \
4347 /DISALLOWLIB:libcmt.lib \
4348 /DISALLOWLIB:libcmtd.lib \
4349 /DISALLOWLIB:msvcrt$(VBOX_VCC_CRT_TYPE_N).lib \
4350 /DISALLOWLIB:msvcprt$(VBOX_VCC_CRT_TYPE_N).lib
4351 if defined(VBOX_SIGNING_MODE) && defined(VBOX_WITH_HARDENING)
4352 TEMPLATE_VBOXMAINEXE_LDFLAGS += -IntegrityCheck
4353 endif
4354 TEMPLATE_VBOXMAINEXE_LIBS = \
4355 $(LIB_RUNTIME)
4356 TEMPLATE_VBOXMAINEXE_LIBS.x86 = \
4357 $(PATH_TOOL_$(TEMPLATE_VBOXMAINEXE_TOOL.win.x86)_LIB)/msvcrt$(VBOX_VCC_CRT_TYPE).lib \
4358 $(PATH_TOOL_$(TEMPLATE_VBOXMAINEXE_TOOL.win.x86)_LIB)/msvcprt$(VBOX_VCC_CRT_TYPE).lib \
4359 $(PATH_TOOL_$(TEMPLATE_VBOXMAINEXE_TOOL.win.x86)_LIB)/oldnames.lib \
4360 $(PATH_TOOL_$(TEMPLATE_VBOXMAINEXE_TOOL.win.x86)_ATLMFC_LIB)/atls$(VBOX_VCC_CRT_TYPE).lib
4361 TEMPLATE_VBOXMAINEXE_LIBS.amd64 = \
4362 $(PATH_TOOL_$(TEMPLATE_VBOXMAINEXE_TOOL.win.amd64)_LIB)/msvcrt$(VBOX_VCC_CRT_TYPE).lib \
4363 $(PATH_TOOL_$(TEMPLATE_VBOXMAINEXE_TOOL.win.amd64)_LIB)/msvcprt$(VBOX_VCC_CRT_TYPE).lib \
4364 $(PATH_TOOL_$(TEMPLATE_VBOXMAINEXE_TOOL.win.amd64)_LIB)/oldnames.lib \
4365 $(PATH_TOOL_$(TEMPLATE_VBOXMAINEXE_TOOL.win.amd64)_ATLMFC_LIB)/atls$(VBOX_VCC_CRT_TYPE).lib
4366 TEMPLATE_VBOXMAINEXE_POST_CMDS = $(VBOX_SIGN_IMAGE_CMDS)
4367
4368else # the GCC guys:
4369
4370TEMPLATE_VBOXMAINEXE_TOOL = $(VBOX_GCC_TOOL)
4371TEMPLATE_VBOXMAINEXE_CXXFLAGS = -g $(VBOX_GCC_pipe) \
4372 $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC_Wno-variadic-macros) -Wno-long-long -Wno-non-virtual-dtor -Wshadow \
4373 -fshort-wchar -fpermissive -fexceptions -frtti $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing \
4374 $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_std)
4375TEMPLATE_VBOXMAINEXE_CXXFLAGS.x86 = -m32
4376TEMPLATE_VBOXMAINEXE_CXXFLAGS.amd64 = -m64
4377TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile = -finstrument-functions
4378TEMPLATE_VBOXMAINEXE_CFLAGS = -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC_Wno-variadic-macros) \
4379 $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing $(VBOX_GCC_fvisibility-hidden)
4380TEMPLATE_VBOXMAINEXE_CFLAGS.x86 = -m32
4381TEMPLATE_VBOXMAINEXE_CFLAGS.amd64 = -m64
4382TEMPLATE_VBOXMAINEXE_CFLAGS.kprofile = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile)
4383TEMPLATE_VBOXMAINEXE_OBJCFLAGS = $(TEMPLATE_VBOXMAINEXE_CFLAGS)
4384TEMPLATE_VBOXMAINEXE_OBJCFLAGS.x86 = $(TEMPLATE_VBOXMAINEXE_CFLAGS.x86)
4385TEMPLATE_VBOXMAINEXE_OBJCFLAGS.amd64 = $(TEMPLATE_VBOXMAINEXE_CFLAGS.amd64)
4386TEMPLATE_VBOXMAINEXE_OBJCFLAGS.kprofile = $(TEMPLATE_VBOXMAINEXE_CFLAGS.kprofile)
4387TEMPLATE_VBOXMAINEXE_OBJCXXFLAGS = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS)
4388TEMPLATE_VBOXMAINEXE_OBJCXXFLAGS.x86 = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.x86)
4389TEMPLATE_VBOXMAINEXE_OBJCXXFLAGS.amd64 = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.amd64)
4390TEMPLATE_VBOXMAINEXE_OBJCXXFLAGS.kprofile= $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile)
4391TEMPLATE_VBOXMAINEXE_LDFLAGS.x86 = -m32
4392TEMPLATE_VBOXMAINEXE_LDFLAGS.amd64 = -m64
4393 ifeq ($(KBUILD_TARGET),linux)
4394TEMPLATE_VBOXMAINEXE_LIBS = pthread m rt $(LIB_RUNTIME) dl
4395TEMPLATE_VBOXMAINEXE_LDFLAGS.linux = -Wl,-z,noexecstack $(VBOX_LD_as_needed)
4396 else ifeq ($(KBUILD_TARGET),os2)
4397TEMPLATE_VBOXMAINEXE_TOOL = GXX3OMF
4398TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME)
4399 else ifeq ($(KBUILD_TARGET),darwin)
4400TEMPLATE_VBOXMAINEXE_TOOL = GXX4MACHO
4401TEMPLATE_VBOXMAINEXE_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS)
4402TEMPLATE_VBOXMAINEXE_CFLAGS += $(VBOX_DARWIN_DEF_SDK_CFLAGS)
4403TEMPLATE_VBOXMAINEXE_CXXFLAGS += $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
4404TEMPLATE_VBOXMAINEXE_OBJCFLAGS += $(VBOX_DARWIN_DEF_SDK_OBJCFLAGS)
4405TEMPLATE_VBOXMAINEXE_OBJCXXFLAGS += $(VBOX_DARWIN_DEF_SDK_OBJCXXFLAGS)
4406TEMPLATE_VBOXMAINEXE_LDFLAGS.darwin += -bind_at_load
4407TEMPLATE_VBOXMAINEXE_LDFLAGS += $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -framework Carbon
4408TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME)
4409 else ifeq ($(KBUILD_TARGET),haiku)
4410TEMPLATE_VBOXMAINEXE_TOOL = GXX3
4411TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME) network stdc++ supc++
4412 else if1of ($(KBUILD_TARGET), freebsd netbsd openbsd)
4413TEMPLATE_VBOXMAINEXE_TOOL = GXX3
4414TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME)
4415TEMPLATE_VBOXMAINEXE_INCS += \
4416 /usr/include \
4417 /usr/X11R6/include \
4418 /usr/local/include
4419TEMPLATE_VBOXMAINEXE_LIBPATH += \
4420 /usr/lib \
4421 /usr/X11R6/lib \
4422 /usr/local/lib
4423else ifeq ($(KBUILD_TARGET),solaris)
4424TEMPLATE_VBOXMAINEXE_TOOL = GXX3PLAIN
4425TEMPLATE_VBOXMAINEXE_DEFS += _REENTRANT
4426TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME) rt thread
4427 else
4428$(warning Warning: VBOX Build: Target $(KBUILD_TARGET) is not officially supported!)
4429TEMPLATE_VBOXMAINEXE_LIBS =
4430 endif
4431TEMPLATE_VBOXMAINEXE_LDFLAGS.solaris = -Wl,-z,ignore # Same as VBOX_LD_as_needed.
4432 ifdef VBOX_WITH_RUNPATH
4433TEMPLATE_VBOXMAINEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)'
4434 else ifdef VBOX_WITH_RELATIVE_RUNPATH
4435TEMPLATE_VBOXMAINEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)'
4436 endif
4437 ifdef VBOX_WITH_ORIGIN
4438TEMPLATE_VBOXMAINEXE_LDFLAGS.linux += $(VBOX_GCC_ORIGIN_OPT)
4439 endif
4440
4441endif # !win
4442
4443# Add COM/XPCOM stuff
4444TEMPLATE_VBOXMAINEXE_LIBS += \
4445 $(PATH_STAGE_LIB)/VBoxCOM$(VBOX_SUFF_LIB)
4446ifdef VBOX_WITH_XPCOM
4447 ## @todo may be worth creating the VBOX_XPCOM SDK def
4448 TEMPLATE_VBOXMAINEXE_DEFS += VBOX_WITH_XPCOM
4449 ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
4450 TEMPLATE_VBOXMAINEXE_DEFS += VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
4451 endif
4452 TEMPLATE_VBOXMAINEXE_INCS += \
4453 $(VBOX_XPCOM_INCS)
4454 TEMPLATE_VBOXMAINEXE_LIBS += \
4455 $(LIB_XPCOM)
4456 TEMPLATE_VBOXMAINEXE_INTERMEDIATES += \
4457 $(VBOX_PATH_SDK)/bindings/xpcom/include/VirtualBox_XPCOM.h
4458
4459else # COM
4460 TEMPLATE_VBOXMAINEXE_INCS += \
4461 $(VBOX_PATH_SDK)/bindings/mscom/include
4462 TEMPLATE_VBOXMAINEXE_INTERMEDIATES += \
4463 $(VBOX_PATH_SDK)/bindings/mscom/include/VirtualBox.h
4464endif # COM
4465
4466#
4467# Template for building the Main DLL modules (such as in-process COM/XPCOM
4468# components for Main).
4469#
4470# This differs from VBOXMAINEXE only in PIC handling and similar DLL stuff.
4471#
4472TEMPLATE_VBOXMAINDLL = VBox Main Component (shared library)
4473TEMPLATE_VBOXMAINDLL_EXTENDS = VBOXMAINEXE
4474ifn1of ($(KBUILD_TARGET), darwin haiku os2 win)
4475 TEMPLATE_VBOXMAINDLL_DEFS = PIC $(TEMPLATE_VBOXMAINEXE_DEFS)
4476 TEMPLATE_VBOXMAINDLL_CFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_CFLAGS)
4477 TEMPLATE_VBOXMAINDLL_CXXFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_CXXFLAGS)
4478 TEMPLATE_VBOXMAINDLL_LDFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_LDFLAGS)
4479endif
4480TEMPLATE_VBOXMAINDLL_LDFLAGS.darwin = $(filter-out -bind_at_load,$(TEMPLATE_VBOXMAINEXE_LDFLAGS.darwin)) \
4481 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
4482 -compatibility_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
4483
4484#
4485# Template identical to VBOXMAINDLL except for where the stuff is
4486# installed when using XPCOM (components/).
4487#
4488# Note! In the hardened build this gets a bit ugly since $ORIGIN/..
4489# doesn't work. So, we keep the $ORIGIN from VBOXMAINEXE and let
4490# the installers do the necessary .so symlinking.
4491#
4492# (No difference when building against COM on Windows.)
4493#
4494TEMPLATE_VBOXMAINCOMP = VBox Main COM/XPCOM Component (shared library)
4495TEMPLATE_VBOXMAINCOMP_EXTENDS = VBOXMAINEXE
4496ifn1of ($(KBUILD_TARGET), win)
4497 TEMPLATE_VBOXMAINCOMP_INST = $(INST_BIN)components/
4498endif
4499ifneq ($(KBUILD_TARGET),win)
4500 ifeq ($(filter-out solaris.x86 %.amd64 %.sparc32 %.sparc64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),) ## TODO: cleanup!
4501 TEMPLATE_VBOXMAINCOMP_DEFS = PIC $(TEMPLATE_VBOXMAINEXE_DEFS)
4502 TEMPLATE_VBOXMAINCOMP_CFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_CFLAGS)
4503 TEMPLATE_VBOXMAINCOMP_CXXFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_CXXFLAGS)
4504 if defined(VBOX_WITH_RELATIVE_RUNPATH) && !defined(VBOX_WITH_HARDENING)
4505 TEMPLATE_VBOXMAINCOMP_LDFLAGS = -fPIC $(filter-out '$(VBOX_GCC_RPATH_OPT)%',$(TEMPLATE_VBOXMAINEXE_LDFLAGS)) '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/..'
4506 else
4507 TEMPLATE_VBOXMAINCOMP_LDFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_LDFLAGS)
4508 endif
4509 else ifndef VBOX_WITH_HARDENING
4510 ifdef VBOX_WITH_RELATIVE_RUNPATH
4511 TEMPLATE_VBOXMAINCOMP_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)%',$(TEMPLATE_VBOXMAINEXE_LDFLAGS)) '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/..'
4512 endif
4513 endif
4514endif
4515TEMPLATE_VBOXMAINCOMP_LDFLAGS.darwin = $(filter-out -bind_at_load,$(TEMPLATE_VBOXMAINEXE_LDFLAGS.darwin)) \
4516 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
4517 -compatibility_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
4518
4519TEMPLATE_VBoxMainComp-x86 = 32-bit VBox Main Component (shared library)
4520TEMPLATE_VBoxMainComp-x86_EXTENDS = VBOXMAINCOMP
4521TEMPLATE_VBoxMainComp-x86_BLD_TRG_ARCH = x86
4522TEMPLATE_VBoxMainComp-x86_DEFS = $(filter-out HC_ARCH_BITS%,$(TEMPLATE_VBOXMAINCOMP_DEFS)) HC_ARCH_BIT=32 ARCH_BITS=32 \
4523 VBOX_IN_32_ON_64_MAIN_API
4524TEMPLATE_VBoxMainComp-x86_LIBS = \
4525 $(subst $(PATH_STAGE_LIB)/VBoxCOM$(VBOX_SUFF_LIB),$(PATH_STAGE_LIB)/VBoxCOM-x86$(VBOX_SUFF_LIB),\
4526 $(subst $(LIB_RUNTIME),$(VBOX_LIB_RUNTIME_X86),\
4527 $(subst $(LIB_XPCOM),$(VBOX_LIB_XPCOM_X86),\
4528 $(TEMPLATE_VBOXMAINCOMP_LIBS))))
4529
4530
4531#
4532# Template for building the Main static libraries.
4533#
4534# This differs from VBOXMAINDLL only that it zeroes out the _LIBS definition.
4535#
4536TEMPLATE_VBoxMainLib = VBox Main Component (static library)
4537TEMPLATE_VBoxMainLib_EXTENDS = VBOXMAINDLL
4538TEMPLATE_VBoxMainLib_LIBS =
4539
4540TEMPLATE_VBoxMainLib-x86 = 32-bit VBox Main Component (static library)
4541TEMPLATE_VBoxMainLib-x86_EXTENDS = VBoxMainLib
4542TEMPLATE_VBoxMainLib-x86_BLD_TRG_ARCH = x86
4543TEMPLATE_VBoxMainLib-x86_DEFS = $(filter-out HC_ARCH_BITS%,$(TEMPLATE_VBoxMainLib_DEFS)) HC_ARCH_BIT=32 ARCH_BITS=32 \
4544 VBOX_IN_32_ON_64_MAIN_API
4545
4546#
4547# Main unit testing, for compiling API implementation files into a testcase.
4548# This is the VBOXMAINEXE template only with a different install dir.
4549#
4550TEMPLATE_VBOXMAINTSTEXE = VBox Main Testcase Exe
4551TEMPLATE_VBOXMAINTSTEXE_EXTENDS = VBOXMAINEXE
4552TEMPLATE_VBOXMAINTSTEXE_INST = $(INST_TESTCASE)
4553ifdef VBOX_WITH_RUNPATH
4554 TEMPLATE_VBOXMAINTSTEXE_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' $(TEMPLATE_VBOXMAINEXE_LDFLAGS)
4555else ifdef VBOX_WITH_RELATIVE_RUNPATH
4556 TEMPLATE_VBOXMAINTSTEXE_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/..' $(TEMPLATE_VBOXMAINEXE_LDFLAGS)
4557endif
4558if "$(KBUILD_TARGET)" == "win" && defined(VBOX_SIGNING_MODE)
4559 TEMPLATE_VBOXMAINTSTEXE_POST_CMDS =
4560endif
4561
4562#
4563# Template for building executables that use the VBox Main component.
4564#
4565TEMPLATE_VBOXMAINCLIENTEXE = VBox Main Client (executable)
4566TEMPLATE_VBOXMAINCLIENTEXE_EXTENDS = VBOXMAINEXE
4567ifeq ($(KBUILD_TARGET),win)
4568 TEMPLATE_VBOXMAINCLIENTEXE_DEPS = $(VBOX_PATH_SDK)/bindings/mscom/include/VirtualBox.h
4569 TEMPLATE_VBOXMAINCLIENTEXE_LIBS.win = $(TEMPLATE_VBOXMAINEXE_LIBS.win) \
4570 $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/User32.Lib \
4571 $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/Shell32.Lib \
4572 $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/ShLwApi.Lib \
4573 $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/Ole32.Lib \
4574 $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/OleAut32.Lib \
4575 $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/Uuid.Lib
4576else
4577 TEMPLATE_VBOXMAINCLIENTEXE_DEPS = $(VBOX_PATH_SDK)/bindings/xpcom/include/VirtualBox_XPCOM.h
4578 TEMPLATE_VBOXMAINCLIENTEXE_DEFS = $(TEMPLATE_VBOXMAINEXE_DEFS) \
4579 NDEBUG TRIMMED
4580 TEMPLATE_VBOXMAINCLIENTEXE_CXXFLAGS.linux = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.linux) \
4581 -pthread
4582endif
4583
4584#
4585# Template for building shared libraries / DLLs that use the VBox Main component.
4586#
4587# This differs from VBOXMAINCLIENTEXE only in PIC handling and similar DLL stuff.
4588#
4589TEMPLATE_VBOXMAINCLIENTDLL = VBox MAIN Client (shared library)
4590TEMPLATE_VBOXMAINCLIENTDLL_EXTENDS = VBOXMAINCLIENTEXE
4591ifn1of ($(KBUILD_TARGET), darwin os2 win)
4592 TEMPLATE_VBOXMAINCLIENTDLL_DEFS = PIC $(TEMPLATE_VBOXMAINCLIENTEXE_DEFS)
4593 TEMPLATE_VBOXMAINCLIENTDLL_CFLAGS = -fPIC $(TEMPLATE_VBOXMAINCLIENTEXE_CFLAGS)
4594 TEMPLATE_VBOXMAINCLIENTDLL_CXXFLAGS = -fPIC $(TEMPLATE_VBOXMAINCLIENTEXE_CXXFLAGS)
4595 TEMPLATE_VBOXMAINCLIENTDLL_LDFLAGS = -fPIC $(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS)
4596endif
4597TEMPLATE_VBOXMAINCLIENTDLL_LDFLAGS.darwin = $(filter-out -bind_at_load,$(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS.darwin))
4598
4599#
4600# Template for building testcases which are API clients.
4601#
4602TEMPLATE_VBOXMAINCLIENTTSTEXE = VBox Main Client Testcase (executable)
4603TEMPLATE_VBOXMAINCLIENTTSTEXE_EXTENDS = VBOXMAINCLIENTEXE
4604TEMPLATE_VBOXMAINCLIENTTSTEXE_INST = $(INST_TESTCASE)
4605ifdef VBOX_WITH_RUNPATH
4606 TEMPLATE_VBOXMAINCLIENTTSTEXE_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' $(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS)
4607else ifdef VBOX_WITH_RELATIVE_RUNPATH
4608 TEMPLATE_VBOXMAINCLIENTTSTEXE_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/..' $(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS)
4609endif
4610if "$(KBUILD_TARGET)" == "win" && defined(VBOX_SIGNING_MODE)
4611 TEMPLATE_VBOXMAINCLIENTTSTEXE_POST_CMDS =
4612endif
4613
4614
4615
4616#
4617# Templates used for building the extension packs.
4618#
4619ifdef VBOX_WITH_EXTPACK
4620 # Base templates (native or portable).
4621 TEMPLATE_VBoxR3ExtPack = For the ring-3 context extension pack modules.
4622 if 1 # Native for now.
4623 TEMPLATE_VBoxR3ExtPack_EXTENDS = VBOXR3DLLNOXCPT
4624 TEMPLATE_VBoxR3ExtPack_DEFS = $(TEMPLATE_VBOXR3DLLNOXCPT_DEFS) VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R3
4625 else
4626 TEMPLATE_VBoxR3ExtPack_EXTENDS = VBoxNoCrtGccLib
4627 TEMPLATE_VBoxR3ExtPack_DEFS = $(TEMPLATE_VBoxNoCrtGccLib_DEFS) VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R3 IPRT_NO_CRT IN_RING3
4628 TEMPLATE_VBoxR3ExtPack_INCS = $(PATH_ROOT)/include/iprt/nocrt $(TEMPLATE_VBOXR3DLLNOXCPT_INCS)
4629 endif
4630 ifneq ($(KBUILD_TARGET),win)
4631 TEMPLATE_VBoxR3ExtPack_CXXFLAGS = $(TEMPLATE_VBOXR3DLLNOXCPT_CXXFLAGS) -fno-rtti
4632 endif
4633 TEMPLATE_VBoxR3ExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
4634 ifeq ($(KBUILD_TARGET),linux)
4635 TEMPLATE_VBoxR3ExtPack_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)', $(TEMPLATE_VBOXR3DLLNOXCPT_LDFLAGS))
4636 else
4637 if !defined(VBOX_WITH_RUNPATH) && defined(VBOX_WITH_RELATIVE_RUNPATH)
4638 TEMPLATE_VBoxR3ExtPack_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/../../..' $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)', $(TEMPLATE_VBOXR3DLLNOXCPT_LDFLAGS))
4639 endif
4640 endif
4641 ifdef VBOX_ONLY_EXTPACKS_USE_IMPLIBS
4642 if1of ($(KBUILD_TARGET), win os2)
4643 TEMPLATE_VBoxR3ExtPack_LIBS = \
4644 $(TEMPLATE_LIBS_VBOXR3) \
4645 $(if-expr "$(VBOX_LIB_VMM_LAZY)" == "$(LIB_VMM)", $(PATH_STAGE_LIB)/VMMR3Imp$(VBOX_SUFF_LIB), $(VBOX_LIB_VMM_LAZY)) \
4646 $(PATH_STAGE_LIB)/VBoxRTImp$(VBOX_SUFF_LIB)
4647 else
4648 TEMPLATE_VBoxR3ExtPack_LIBS = \
4649 $(TEMPLATE_LIBS_VBOXR3) \
4650 $(if-expr "$(VBOX_LIB_VMM_LAZY)" == "$(LIB_VMM)", $(PATH_STAGE_LIB)/VMMR3Imp$(VBOX_SUFF_DLL), $(VBOX_LIB_VMM_LAZY)) \
4651 $(PATH_STAGE_LIB)/VBoxRTImp$(VBOX_SUFF_DLL)
4652 endif
4653 else
4654 TEMPLATE_VBoxR3ExtPack_LIBS = \
4655 $(TEMPLATE_LIBS_VBOXR3) \
4656 $(LIB_RUNTIME) \
4657 $(VBOX_LIB_VMM_LAZY)
4658 endif
4659
4660 TEMPLATE_VBoxR0ExtPack = For the ring-0 context extension pack modules.
4661 TEMPLATE_VBoxR0ExtPack_EXTENDS = VBoxR0
4662 TEMPLATE_VBoxR0ExtPack_EXTENDS_BY = appending
4663 TEMPLATE_VBoxR0ExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
4664 TEMPLATE_VBoxR0ExtPack_DEFS = VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R0
4665 if1of ($(VBOX_LDR_FMT), pe lx)
4666 TEMPLATE_VBoxR0ExtPack_LIBS = \
4667 $(PATH_STAGE_LIB)/VMMR0Imp$(VBOX_SUFF_LIB) \
4668 $(PATH_STAGE_LIB)/SUPR0$(VBOX_SUFF_LIB)
4669 endif
4670
4671 TEMPLATE_VBoxRcExtPack = For the raw-mode context extension pack modules.
4672 TEMPLATE_VBoxRcExtPack_EXTENDS = VBoxRc
4673 TEMPLATE_VBoxRcExtPack_EXTENDS_BY = appending
4674 TEMPLATE_VBoxRcExtPack_SYSSUFF = .rc
4675 TEMPLATE_VBoxRcExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
4676 TEMPLATE_VBoxRcExtPack_DEFS = VBOX_IN_EXTPACK VBOX_IN_EXTPACK_RC
4677 if1of ($(VBOX_LDR_FMT32), pe lx)
4678 TEMPLATE_VBoxRcExtPack_LIBS = \
4679 $(PATH_STAGE_LIB)/VMMRCBuiltin$(VBOX_SUFF_LIB) \
4680 $(PATH_STAGE_LIB)/VMMRCImp$(VBOX_SUFF_LIB)
4681 endif
4682
4683 TEMPLATE_VBoxInsExtPack = For the install targets of an extension pack.
4684 TEMPLATE_VBoxInsExtPack_MODE = 0644
4685 TEMPLATE_VBoxInsExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
4686
4687 # For each individual extension pack
4688 ifdef VBOX_WITH_EXTPACK_PUEL
4689 TEMPLATE_VBoxR3ExtPackPuel = For the ring-3 context modules in the PUEL extension pack.
4690 TEMPLATE_VBoxR3ExtPackPuel_EXTENDS = VBoxR3ExtPack
4691 TEMPLATE_VBoxR3ExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/
4692
4693 TEMPLATE_VBoxR0ExtPackPuel = For the ring-0 context modules in the PUEL extension pack.
4694 TEMPLATE_VBoxR0ExtPackPuel_EXTENDS = VBoxR0ExtPack
4695 TEMPLATE_VBoxR0ExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/
4696
4697 TEMPLATE_VBoxRcExtPackPuel = For the raw-mode context modules in the PUEL extension pack.
4698 TEMPLATE_VBoxRcExtPackPuel_EXTENDS = VBoxRcExtPack
4699 TEMPLATE_VBoxRcExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/
4700
4701 TEMPLATE_VBoxInsExtPackPuel = For the install targets of an extension pack.
4702 TEMPLATE_VBoxInsExtPackPuel_EXTENDS = VBoxR0ExtPack
4703 TEMPLATE_VBoxInsExtPackPuel_INST = $(INST_EXTPACK_PUEL)
4704endif
4705endif # VBOX_WITH_EXTPACK
4706
4707
4708#
4709# Qt 4
4710# Qt 4
4711# Qt 4
4712#
4713ifdef VBOX_WITH_QTGUI
4714
4715 # Guess VBOX_WITH_QT4_SUN
4716 ifndef VBOX_WITH_QT4_SUN
4717 ifndef VBOX_OSE
4718 if1of ($(KBUILD_TARGET), darwin solaris win)
4719 VBOX_WITH_QT4_SUN := 1
4720 endif
4721 endif
4722 endif
4723
4724 #
4725 # Handmade configuration of qt4 - very annoying, this needs to
4726 # be cleaned up properly later some time (not important now).
4727 #
4728 ifeq ($(VBOX_PATH_QT4),)
4729 ifeq ($(KBUILD_TARGET),darwin)
4730 VBOX_PATH_QT4 := $(lastword $(sort $(wildcard $(PATH_DEVTOOLS_TRG)/qt/v4*)))
4731 ifeq ($(VBOX_PATH_QT4),)
4732 ifneq ($(wildcard /Library/Frameworks/QtCore.framework),)
4733 # Using the global installation (for OSE).
4734 VBOX_PATH_QT4 ?= /usr
4735 VBOX_PATH_QT4_FRAMEWORKS ?= /Library/Frameworks
4736 endif
4737 endif
4738 else if1of ($(KBUILD_TARGET), win)
4739 VBOX_PATH_QT4 ?= $(lastword $(filter %-$(tolower $(VBOX_VCC_TOOL_STEM)),$(sort $(wildcard $(PATH_DEVTOOLS_TRG)/qt/v4*))))
4740 else if1of ($(KBUILD_TARGET), linux solaris)
4741 VBOX_PATH_QT4 ?= $(lastword $(sort $(wildcard $(PATH_DEVTOOLS_TRG)/qt/v4*)))
4742 ifneq ($(VBOX_PATH_QT4),)
4743 VBOX_WITH_QT4_SUN = 1
4744 endif
4745 endif
4746 endif
4747 ifeq ($(VBOX_PATH_QT4),)
4748 if1of ($(USERNAME), bird)
4749 # gentoo (64-bit)
4750 VBOX_PATH_QT4 ?= /usr
4751 VBOX_PATH_QT4_LIB ?= /usr/lib/qt4
4752 endif
4753 endif
4754 VBOX_PATH_QT4 ?= /usr
4755 VBOX_PATH_QT4_LIB ?= $(VBOX_PATH_QT4)/lib
4756
4757 ifdef VBOX_WITH_QT4_SUN
4758 VBOX_QT4_INFIX=VBox
4759 endif
4760
4761 VBOX_QT4_MOD = QtCore QtGui QtNetwork $(if $(VBOX_GUI_USE_QGL),QtOpenGL,)
4762 VBOX_QT4_MOD_NAMES = $(foreach qtmod,$(VBOX_QT4_MOD),$(qtmod)$(VBOX_QT4_INFIX))
4763
4764 # Hack LD_LIBRARY_PATH for stuff in tools.
4765 ifdef VBOX_WITH_QT4_SUN
4766 if1of ($(KBUILD_TARGET), linux)
4767 export LD_LIBRARY_PATH := $(VBOX_PATH_QT4_LIB):$(LD_LIBRARY_PATH)
4768 endif
4769 endif
4770
4771
4772 #
4773 # Template for building Qt GUI executables.
4774 #
4775 TEMPLATE_VBOXQT4GUIEXE = VBox Qt GUI Executable
4776 TEMPLATE_VBOXQT4GUIEXE_USES = qt4
4777 TEMPLATE_VBOXQT4GUIEXE_QTTOOL = QT4
4778 TEMPLATE_VBOXQT4GUIEXE_MOCTOOL = QT4
4779 TEMPLATE_VBOXQT4GUIEXE_UICTOOL = QT4
4780 TEMPLATE_VBOXQT4GUIEXE_RCCTOOL = QT4
4781 TEMPLATE_VBOXQT4GUIEXE_LRCTOOL = QT4
4782 TEMPLATE_VBOXQT4GUIEXE_SDKS = QT4
4783 TEMPLATE_VBOXQT4GUIEXE_QT_INFIX = $(VBOX_QT4_INFIX)
4784 TEMPLATE_VBOXQT4GUIEXE_DEFS = IN_RING3 QT_NO_DEBUG QT_THREAD_SUPPORT QT_SHARED HAVE_CONFIG_H $(ARCH_BITS_DEFS)
4785 TEMPLATE_VBOXQT4GUIEXE_RCDEFS = $(TEMPLATE_VBOXR3EXE_RCDEFS)
4786
4787 ifeq ($(KBUILD_TARGET),win)
4788 # Note! No use of VBOX_VCC_CRT_TYPE here yet as it requires a /MDd build of Qt as well.
4789 TEMPLATE_VBOXQT4GUIEXE_TOOL = $(VBOX_VCC_TOOL)
4790 TEMPLATE_VBOXQT4GUIEXE_DEFS += \
4791 _WIN32_WINNT=0x0500 UNICODE _UNICODE \
4792 QT_DLL _CRT_SECURE_NO_DEPRECATE \
4793 $(QMAKE_PRL_DEFINES)
4794 TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS = -nologo -Zm200 -W3 -MD -Zi -EHsc -Zc:wchar_t-
4795 TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS.debug = -RTCsu
4796 TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS.dbgopt = $(NO_SUCH_VARIABLE)
4797 TEMPLATE_VBOXQT4GUIEXE_INCS += \
4798 $(PATH_TOOL_$(VBOX_VCC_TOOL)_ATLMFC_INC)
4799 TEMPLATE_VBOXQT4GUIEXE_LDFLAGS = \
4800 /NOD /INCREMENTAL:NO /MAPINFO:EXPORTS /LargeAddressAware /DynamicBase /NxCompat /Release /Debug \
4801 /Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
4802 /STUB:$(PATH_ROOT)/src/VBox/HostDrivers/Support/win/winstub.com
4803 if defined(VBOX_SIGNING_MODE) && defined(VBOX_WITH_HARDENING)
4804 TEMPLATE_VBOXQT4GUIEXE_LDFLAGS += -IntegrityCheck
4805 endif
4806 TEMPLATE_VBOXQT4GUIEXE_SDKS += $(VBOX_WINPSDK)
4807 TEMPLATE_VBOXQT4GUIEXE_LIBS = \
4808 $(VBOX_LIBS_QT4) \
4809 $(LIB_RUNTIME) \
4810 $(VBOX_LIB_VMM_LAZY) \
4811 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcprt.lib \
4812 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcrt.lib \
4813 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/oldnames.lib \
4814 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/delayimp.lib \
4815 $(PATH_TOOL_$(VBOX_VCC_TOOL)_ATLMFC_LIB)/atls.lib
4816 ifdef VBOX_WITH_DEBUG_VCC_CRT # VBoxCOM (static) is causing trouble of course.
4817 TEMPLATE_VBOXQT4GUIEXE_LIBS += \
4818 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcrt$(VBOX_VCC_CRT_TYPE).lib \
4819 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcprt$(VBOX_VCC_CRT_TYPE).lib
4820 endif
4821 TEMPLATE_VBOXQT4GUIEXE_POST_CMDS = $(VBOX_SIGN_IMAGE_CMDS)
4822
4823 else # the gcc guys:
4824 TEMPLATE_VBOXQT4GUIEXE_TOOL = $(VBOX_GCC_TOOL)
4825 TEMPLATE_VBOXQT4GUIEXE_DEFS.linux = _REENTRANT
4826
4827 TEMPLATE_VBOXQT4GUIEXE_DEFS.solaris = _REENTRANT
4828
4829 ## @todo Use VBOX_GCC_PEDANTIC_CXX?
4830 TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS = \
4831 -g $(VBOX_GCC_pipe) $(filter-out -Wno-unused,$(VBOX_GCC_WARN)) -frtti -fno-exceptions -Wno-non-virtual-dtor \
4832 -Wno-long-long -fshort-wchar -fno-strict-aliasing \
4833 $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_fvisibility-inlines-hidden) \
4834 $(VBOX_GCC_Wno-delete-non-virtual-dtor) $(VBOX_GCC_std)
4835 TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS.x86 = -m32
4836 TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS.amd64 = -m64
4837 TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS.linux = -pthread
4838 TEMPLATE_VBOXQT4GUIEXE_OBJCFLAGS = -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_C) -Wno-long-long -fno-exceptions
4839 TEMPLATE_VBOXQT4GUIEXE_OBJCFLAGS.x86 = $(TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS.x86)
4840 TEMPLATE_VBOXQT4GUIEXE_OBJCFLAGS.amd64 = $(TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS.amd64)
4841 TEMPLATE_VBOXQT4GUIEXE_OBJCXXFLAGS = \
4842 -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_CXX) -Wno-non-virtual-dtor -Wno-long-long \
4843 -frtti -fno-exceptions $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_fvisibility-inlines-hidden)
4844 TEMPLATE_VBOXQT4GUIEXE_OBJCXXFLAGS.x86 = $(TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS.x86)
4845 TEMPLATE_VBOXQT4GUIEXE_OBJCXXFLAGS.amd64 = $(TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS.amd64)
4846 TEMPLATE_VBOXQT4GUIEXE_LDFLAGS.x86 = -m32
4847 TEMPLATE_VBOXQT4GUIEXE_LDFLAGS.amd64 = -m64
4848 TEMPLATE_VBOXQT4GUIEXE_LIBS = \
4849 $(VBOX_LIBS_QT4) \
4850 $(LIB_SDL) \
4851 $(LIB_RUNTIME) \
4852 $(if-expr "$(LIB_VMM)" == "$(VBOX_LIB_VMM_LAZY)",$(LIB_REM),) \
4853 $(VBOX_LIB_VMM_LAZY)
4854
4855 ifeq ($(KBUILD_TARGET),linux)
4856 TEMPLATE_VBOXQT4GUIEXE_LDFLAGS += -Wl,-z,noexecstack $(VBOX_LD_as_needed)
4857 TEMPLATE_VBOXQT4GUIEXE_LIBS += \
4858 $(VBOX_XCURSOR_LIBS) \
4859 Xext \
4860 X11
4861 TEMPLATE_VBOXQT4GUIEXE_LIBPATH += \
4862 $(VBOX_LIBPATH_X11)
4863 else ifeq ($(KBUILD_TARGET),darwin)
4864 TEMPLATE_VBOXQT4GUIEXE_DEFS.darwin += $(VBOX_DARWIN_DEF_SDK_DEFS)
4865 TEMPLATE_VBOXQT4GUIEXE_CFLAGS.darwin += $(VBOX_DARWIN_DEF_SDK_CFLAGS)
4866 TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS.darwin += $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
4867 TEMPLATE_VBOXQT4GUIEXE_OBJCFLAGS.darwin += $(VBOX_DARWIN_DEF_SDK_OBJCFLAGS)
4868 TEMPLATE_VBOXQT4GUIEXE_OBJCXXFLAGS.darwin += $(VBOX_DARWIN_DEF_SDK_OBJCXXFLAGS)
4869 TEMPLATE_VBOXQT4GUIEXE_LDFLAGS.darwin += $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -bind_at_load
4870 TEMPLATE_VBOXQT4GUIEXE_LIBS +=
4871 TEMPLATE_VBOXQT4GUIEXE_LIBPATH +=
4872 else
4873 TEMPLATE_VBOXQT4GUIEXE_INCS += \
4874 $(VBOX_XCURSOR_INCS)
4875 TEMPLATE_VBOXQT4GUIEXE_LIBS += \
4876 $(VBOX_XCURSOR_LIBS) \
4877 Xext \
4878 X11 \
4879 m \
4880 $(LIB_PTHREAD)
4881 TEMPLATE_VBOXQT4GUIEXE_LIBPATH += \
4882 $(VBOX_LIBPATH_X11)
4883 ifeq ($(KBUILD_TARGET),freebsd)
4884 TEMPLATE_VBOXQT4GUIEXE_INCS += \
4885 /usr/include \
4886 /usr/X11R6/include \
4887 /usr/local/include
4888 TEMPLATE_VBOXQT4GUIEXE_LIBPATH += \
4889 /usr/lib \
4890 /usr/X11R6/lib \
4891 /usr/local/lib
4892 endif
4893 ifeq ($(KBUILD_TARGET),solaris)
4894 TEMPLATE_VBOXQT4GUIEXE_LDFLAGS.solaris = -Wl,-z,ignore # Same as VBOX_LD_as_needed.
4895 TEMPLATE_VBOXQT4GUIEXE_LIBS += \
4896 rt socket nsl
4897 endif
4898 endif
4899 # Assume the Qt shared objects are in the same directory as the executable, on Solaris too.
4900 ifdef VBOX_WITH_RUNPATH
4901 TEMPLATE_VBOXQT4GUIEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)'
4902 else ifdef VBOX_WITH_RELATIVE_RUNPATH
4903 TEMPLATE_VBOXQT4GUIEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)'
4904 endif
4905
4906 endif
4907
4908 # Add COM/XPCOM stuff
4909 TEMPLATE_VBOXQT4GUIEXE_LIBS += \
4910 $(PATH_STAGE_LIB)/VBoxCOM$(VBOX_SUFF_LIB)
4911 ifdef VBOX_WITH_XPCOM
4912 ## @todo may be worth creating the VBOX_XPCOM SDK def, or just a SDK_VBOXXPCOM.
4913 TEMPLATE_VBOXQT4GUIEXE_DEFS += VBOX_WITH_XPCOM
4914 ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
4915 TEMPLATE_VBOXQT4GUIEXE_DEFS += VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
4916 endif
4917 TEMPLATE_VBOXQT4GUIEXE_INCS += \
4918 $(VBOX_XPCOM_INCS)
4919 TEMPLATE_VBOXQT4GUIEXE_LIBS += \
4920 $(LIB_XPCOM)
4921 TEMPLATE_VBOXQT4GUIEXE_INTERMEDIATES += \
4922 $(VBOX_PATH_SDK)/bindings/xpcom/include/VirtualBox_XPCOM.h
4923 else # COM
4924 TEMPLATE_VBOXQT4GUIEXE_INCS += \
4925 $(VBOX_PATH_SDK)/bindings/mscom/include
4926 TEMPLATE_VBOXQT4GUIEXE_INTERMEDIATES += \
4927 $(VBOX_PATH_SDK)/bindings/mscom/include/VirtualBox.h
4928 endif # COM
4929
4930
4931 #
4932 # Template for building Qt GUI components.
4933 #
4934 TEMPLATE_VBOXQT4GUI = VBox Qt GUI Components
4935 TEMPLATE_VBOXQT4GUI_EXTENDS = VBOXQT4GUIEXE
4936 TEMPLATE_VBOXQT4GUI_LIBS = $(filter-out $(QTMAIN),$(TEMPLATE_VBOXQT4GUIEXE_LIBS))
4937 ifeq ($(KBUILD_TARGET),darwin)
4938 TEMPLATE_VBOXQT4GUI_LDFLAGS.darwin += $(filter-out -bind_at_load,$(TEMPLATE_VBOXQT4GUIEXE_LDFLAGS.darwin)) \
4939 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
4940 -compatibility_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
4941 endif
4942 ifn1of ($(KBUILD_TARGET), darwin os2 win)
4943 TEMPLATE_VBOXQT4GUI_DEFS = PIC $(TEMPLATE_VBOXQT4GUIEXE_DEFS)
4944 TEMPLATE_VBOXQT4GUI_CFLAGS = -fPIC $(TEMPLATE_VBOXQT4GUIEXE_CFLAGS)
4945 TEMPLATE_VBOXQT4GUI_CXXFLAGS = -fPIC $(TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS)
4946 TEMPLATE_VBOXQT4GUI_LDFLAGS = -fPIC $(TEMPLATE_VBOXQT4GUIEXE_LDFLAGS)
4947 endif
4948
4949endif # VBOX_WITH_QTGUI
4950
4951
4952#
4953# Template for installing symbol files that we wish to ship.
4954#
4955TEMPLATE_VBoxDbgSyms = Symbol files for VBoxDbg and gurus.
4956TEMPLATE_VBoxDbgSyms_INST = $(INST_VBOXDBG_SYMS)
4957
4958
4959#
4960# Template for building build bldprogs.
4961#
4962# HACK ALERT! The BLD_TRG_* is a hack to allow building libraries as well.
4963#
4964TEMPLATE_VBoxBldProg = VBox Build Program
4965TEMPLATE_VBoxBldProg_BLD_TRG := $(KBUILD_HOST)
4966TEMPLATE_VBoxBldProg_BLD_TRG_ARCH := $(KBUILD_HOST_ARCH)
4967TEMPLATE_VBoxBldProg_BLD_TRG_CPU := $(KBUILD_HOST_CPU)
4968TEMPLATE_VBoxBldProg_DEFS := IN_RING3 LOG_DISABLED
4969TEMPLATE_VBoxBldProg_DEFS.win := _CRT_SECURE_NO_DEPRECATE
4970TEMPLATE_VBoxBldProg_ASTOOL := $(VBOX_ASTOOL)
4971TEMPLATE_VBoxBldProg_ASFLAGS.x86 := $(VBOX_ASFLAGS32)
4972TEMPLATE_VBoxBldProg_ASFLAGS.amd64 := $(VBOX_ASFLAGS64)
4973ifeq ($(KBUILD_HOST),win)
4974 TEMPLATE_VBoxBldProg_TOOL := $(VBOX_VCC_TOOL_STEM)$(toupper $(KBUILD_HOST_ARCH))
4975 TEMPLATE_VBoxBldProg_SDKS := ReorderCompilerIncs $(VBOX_WINPSDK)
4976 TEMPLATE_VBoxBldProg_CXXFLAGS := -Zi -Zl -GR- -EHsc -GF -W3 -wd4065 -wd4244 -wd4996 -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP) -MT$(VBOX_VCC_CRT_TYPE)
4977 TEMPLATE_VBoxBldProg_CXXFLAGS.debug := -RTCsu
4978 TEMPLATE_VBoxBldProg_CXXFLAGS.dbgopt = $(NO_SUCH_VARIABLE)
4979 TEMPLATE_VBoxBldProg_CXXFLAGS.profile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.release)
4980 TEMPLATE_VBoxBldProg_CXXFLAGS.kprofile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.release)
4981 TEMPLATE_VBoxBldProg_CFLAGS = $(TEMPLATE_VBoxBldProg_CXXFLAGS)
4982 TEMPLATE_VBoxBldProg_CFLAGS.debug = $(TEMPLATE_VBoxBldProg_CXXFLAGS.debug)
4983 TEMPLATE_VBoxBldProg_CFLAGS.dbgopt = $(TEMPLATE_VBoxBldProg_CXXFLAGS.dbgopt)
4984 TEMPLATE_VBoxBldProg_CFLAGS.release = $(TEMPLATE_VBoxBldProg_CXXFLAGS.release)
4985 TEMPLATE_VBoxBldProg_CFLAGS.profile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.profile)
4986 TEMPLATE_VBoxBldProg_CFLAGS.kprofile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.kprofile)
4987 TEMPLATE_VBoxBldProg_LDFLAGS = \
4988 /NOD /INCREMENTAL:NO /MAPINFO:EXPORTS /LargeAddressAware /DynamicBase /NxCompat /Release /Debug \
4989 /Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
4990 /DISALLOWLIB:libc$(VBOX_VCC_CRT_TYPE_N).lib \
4991 /DISALLOWLIB:libcmt$(VBOX_VCC_CRT_TYPE_N).lib \
4992 /DISALLOWLIB:msvcrt.lib \
4993 /DISALLOWLIB:msvcrtd.lib \
4994 /DISALLOWLIB:msvcprt.lib \
4995 /DISALLOWLIB:msvcprtd.lib
4996 TEMPLATE_VBoxBldProg_LIBS = \
4997 $(PATH_TOOL_$(TEMPLATE_VBoxBldProg_TOOL)_LIB)/oldnames.lib \
4998 $(PATH_TOOL_$(TEMPLATE_VBoxBldProg_TOOL)_LIB)/libcmt$(VBOX_VCC_CRT_TYPE).lib \
4999 $(PATH_TOOL_$(TEMPLATE_VBoxBldProg_TOOL)_LIB)/libcpmt$(VBOX_VCC_CRT_TYPE).lib
5000
5001else
5002# (gcc of some kind )
5003TEMPLATE_VBoxBldProg_TOOL = GXX3
5004TEMPLATE_VBoxBldProg_CFLAGS = -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC_Wno-variadic-macros)
5005TEMPLATE_VBoxBldProg_CFLAGS.x86 = -m32
5006TEMPLATE_VBoxBldProg_CFLAGS.sparc32 = -m32
5007TEMPLATE_VBoxBldProg_CFLAGS.amd64 = -m64
5008TEMPLATE_VBoxBldProg_CFLAGS.sparc64 = -m64
5009TEMPLATE_VBoxBldProg_CFLAGS.release = -O2 -fno-omit-frame-pointer -fno-strict-aliasing
5010TEMPLATE_VBoxBldProg_CFLAGS.profile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.profile)
5011TEMPLATE_VBoxBldProg_CFLAGS.kprofile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.kprofile)
5012TEMPLATE_VBoxBldProg_CXXFLAGS = -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC_Wno-variadic-macros)
5013TEMPLATE_VBoxBldProg_CXXFLAGS.x86 = -m32
5014TEMPLATE_VBoxBldProg_CXXFLAGS.sparc32 = -m32
5015TEMPLATE_VBoxBldProg_CXXFLAGS.amd64 = -m64
5016TEMPLATE_VBoxBldProg_CXXFLAGS.sparc64 = -m64
5017TEMPLATE_VBoxBldProg_CXXFLAGS.release = -O2 -fno-omit-frame-pointer -fno-strict-aliasing
5018TEMPLATE_VBoxBldProg_CXXFLAGS.profile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.release)
5019TEMPLATE_VBoxBldProg_CXXFLAGS.kprofile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.release)
5020TEMPLATE_VBoxBldProg_OBJCFLAGS = $(TEMPLATE_VBoxBldProg_CFLAGS)
5021TEMPLATE_VBoxBldProg_OBJCFLAGS.x86 = $(TEMPLATE_VBoxBldProg_CFLAGS.x86)
5022TEMPLATE_VBoxBldProg_OBJCFLAGS.amd64 = $(TEMPLATE_VBoxBldProg_CFLAGS.amd64)
5023TEMPLATE_VBoxBldProg_OBJCFLAGS.release = $(TEMPLATE_VBoxBldProg_CFLAGS.release)
5024TEMPLATE_VBoxBldProg_OBJCFLAGS.profile = $(TEMPLATE_VBoxBldProg_CFLAGS.profile)
5025TEMPLATE_VBoxBldProg_OBJCFLAGS.kprofile = $(TEMPLATE_VBoxBldProg_CFLAGS.kprofile)
5026TEMPLATE_VBoxBldProg_OBJCXXFLAGS = $(TEMPLATE_VBoxBldProg_CXXFLAGS)
5027TEMPLATE_VBoxBldProg_OBJCXXFLAGS.x86 = $(TEMPLATE_VBoxBldProg_CXXFLAGS.x86)
5028TEMPLATE_VBoxBldProg_OBJCXXFLAGS.amd64 = $(TEMPLATE_VBoxBldProg_CXXFLAGS.amd64)
5029TEMPLATE_VBoxBldProg_OBJCXXFLAGS.release = $(TEMPLATE_VBoxBldProg_CXXFLAGS.release)
5030TEMPLATE_VBoxBldProg_OBJCXXFLAGS.profile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.profile)
5031TEMPLATE_VBoxBldProg_OBJCXXFLAGS.kprofile= $(TEMPLATE_VBoxBldProg_CXXFLAGS.kprofile)
5032TEMPLATE_VBoxBldProg_LDFLAGS.x86 = -m32
5033TEMPLATE_VBoxBldProg_LDFLAGS.sparc32 = -m32
5034TEMPLATE_VBoxBldProg_LDFLAGS.amd64 = -m64
5035TEMPLATE_VBoxBldProg_LDFLAGS.sparc64 = -m64
5036 ifeq ($(KBUILD_HOST),linux)
5037TEMPLATE_VBoxBldProg_LIBS = pthread m rt dl
5038 else ifeq ($(KBUILD_HOST),os2)
5039TEMPLATE_VBoxBldProg_TOOL = GXX3OMF
5040TEMPLATE_VBoxBldProg_LIBS = socket iconv
5041 else ifeq ($(KBUILD_HOST),darwin)
5042TEMPLATE_VBoxBldProg_TOOL = GXX4MACHO
5043 if "$(VBOX_DEF_MACOSX_VERSION_MIN)" == "10.7" || "$(VBOX_DARWIN_HOST_VERSION_MAJOR)" == "7"
5044TEMPLATE_VBoxBldProg_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_DEFS)
5045TEMPLATE_VBoxBldProg_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_CFLAGS) -fno-common
5046TEMPLATE_VBoxBldProg_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_CXXFLAGS)
5047TEMPLATE_VBoxBldProg_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_OBJCFLAGS) $(VBOX_GCC_PEDANTIC_C)
5048TEMPLATE_VBoxBldProg_OBJCXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_OBJCXXFLAGS) $(VBOX_GCC_PEDANTIC_CXX)
5049TEMPLATE_VBoxBldProg_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_LDFLAGS)
5050 else if "$(VBOX_DEF_MACOSX_VERSION_MIN)" == "10.6" || "$(VBOX_DARWIN_HOST_VERSION_MAJOR)" == "6"
5051TEMPLATE_VBoxBldProg_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_10_6_DEFS)
5052TEMPLATE_VBoxBldProg_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_6_CFLAGS) -fno-common
5053TEMPLATE_VBoxBldProg_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_6_CXXFLAGS)
5054TEMPLATE_VBoxBldProg_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_6_OBJCFLAGS) $(VBOX_GCC_PEDANTIC_C)
5055TEMPLATE_VBoxBldProg_OBJCXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_6_OBJCXXFLAGS) $(VBOX_GCC_PEDANTIC_CXX)
5056TEMPLATE_VBoxBldProg_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_6_LDFLAGS)
5057 else if "$(VBOX_DEF_MACOSX_VERSION_MIN)" == "10.5" || "$(VBOX_DARWIN_HOST_VERSION_MAJOR)" == "5" || defined(VBOX_MACOS_10_5_WORKAROUND)
5058TEMPLATE_VBoxBldProg_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_DEFS)
5059TEMPLATE_VBoxBldProg_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_CFLAGS) -fno-common
5060TEMPLATE_VBoxBldProg_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_CXXFLAGS)
5061TEMPLATE_VBoxBldProg_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_OBJCFLAGS) $(VBOX_GCC_PEDANTIC_C)
5062TEMPLATE_VBoxBldProg_OBJCXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_OBJCXXFLAGS) $(VBOX_GCC_PEDANTIC_CXX)
5063TEMPLATE_VBoxBldProg_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_LDFLAGS)
5064 else
5065TEMPLATE_VBoxBldProg_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_DEFS)
5066TEMPLATE_VBoxBldProg_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -fno-common
5067TEMPLATE_VBoxBldProg_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
5068TEMPLATE_VBoxBldProg_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_OBJCFLAGS) $(VBOX_GCC_PEDANTIC_C)
5069TEMPLATE_VBoxBldProg_OBJCXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_OBJCXXFLAGS) $(VBOX_GCC_PEDANTIC_CXX)
5070TEMPLATE_VBoxBldProg_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_LDFLAGS)
5071 endif
5072TEMPLATE_VBoxBldProg_LIBS =
5073 else ifeq ($(KBUILD_HOST),haiku)
5074TEMPLATE_VBoxBldProg_TOOL = GXX3
5075TEMPLATE_VBoxBldProg_LIBS = network iconv
5076TEMPLATE_VBoxBldProg_LIBPATH += \
5077 /boot/common/lib
5078 else if1of ($(KBUILD_HOST), freebsd netbsd openbsd)
5079TEMPLATE_VBoxBldProg_TOOL = GXX3
5080TEMPLATE_VBoxBldProg_LIBS = pthread
5081TEMPLATE_VBoxBldProg_INCS += \
5082 /usr/include \
5083 /usr/X11R6/include \
5084 /usr/local/include
5085TEMPLATE_VBoxBldProg_LIBPATH += \
5086 /usr/lib \
5087 /usr/X11R6/lib \
5088 /usr/local/lib
5089 else ifeq ($(KBUILD_HOST),solaris)
5090TEMPLATE_VBoxBldProg_TOOL = GXX3PLAIN
5091TEMPLATE_VBoxBldProg_LIBS = rt
5092 else
5093$(warning Warning: VBOX Build: Target $(KBUILD_HOST) is not officially supported!)
5094 endif
5095
5096endif # !win
5097
5098
5099#
5100# Advanced build programs using IPRT and stuff.
5101#
5102TEMPLATE_VBoxAdvBldProg = Advanced VBox Build Program
5103TEMPLATE_VBoxAdvBldProg_EXTENDS = VBoxBldProg
5104TEMPLATE_VBoxAdvBldProg_SDKS = $(TEMPLATE_VBoxBldProg_SDKS)
5105TEMPLATE_VBoxAdvBldProg_SDKS.win= $(TEMPLATE_VBoxBldProg_SDKS.win) VBOX_NTDLL
5106TEMPLATE_VBoxAdvBldProg_DEFS = $(TEMPLATE_VBoxBldProg_DEFS) IN_RT_R3
5107ifeq ($(KBUILD_HOST),win)
5108 TEMPLATE_VBoxAdvBldProg_CFLAGS = $(TEMPLATE_VBoxBldProg_CFLAGS) $(VBOX_VCC_WERR)
5109 TEMPLATE_VBoxAdvBldProg_CXXFLAGS = $(TEMPLATE_VBoxBldProg_CXXFLAGS) $(VBOX_VCC_WERR)
5110endif
5111TEMPLATE_VBoxAdvBldProg_LIBS = \
5112 $(PATH_STAGE_LIB)/RuntimeBldProg$(VBOX_SUFF_LIB) \
5113 $(if-expr defined(IPRT_WITH_KSTUFF), \
5114 $(PATH_STAGE_LIB)/VBox-kStuffStaticBldProg$(VBOX_SUFF_LIB) \
5115 $(PATH_STAGE_LIB)/RuntimeBldProg$(VBOX_SUFF_LIB) \
5116 ,) \
5117 $(TEMPLATE_VBoxBldProg_LIBS)
5118TEMPLATE_VBoxAdvBldProg_LIBS.darwin = \
5119 $(TEMPLATE_VBoxAdvBldProg_LIBS) \
5120 iconv \
5121 $(TEMPLATE_VBoxBldProg_LIBS.darwin)
5122TEMPLATE_VBoxAdvBldProg_LIBS.freebsd = \
5123 $(TEMPLATE_VBoxAdvBldProg_LIBS) \
5124 iconv \
5125 rt \
5126 $(TEMPLATE_VBoxBldProg_LIBS.freebsd)
5127TEMPLATE_VBoxAdvBldProg_LIBS.linux = \
5128 $(TEMPLATE_VBoxAdvBldProg_LIBS) \
5129 crypt \
5130 $(TEMPLATE_VBoxBldProg_LIBS.linux)
5131TEMPLATE_VBoxAdvBldProg_LIBS.solaris = \
5132 $(TEMPLATE_VBoxAdvBldProg_LIBS) \
5133 contract \
5134 kstat \
5135 rt \
5136 socket \
5137 nsl \
5138 $(TEMPLATE_VBoxBldProg_LIBS.solaris)
5139
5140
5141#
5142# Windows rc workaround for crosscompiling.
5143# (Some (old) Wine versions fails loading msvcrt.dll from the VCC bin directory.)
5144#
5145ifneq ($(KBUILD_HOST),win)
5146 TOOL_VCC80X86_RC := $(EXEC_X86_WIN32) $(PATH_DEVTOOLS)/win.x86/bin/rc.exe
5147 TOOL_VCC80AMD64_RC := $(EXEC_X86_WIN32) $(PATH_DEVTOOLS)/win.x86/bin/rc.exe
5148 TOOL_VCC70_RC := $(EXEC_X86_WIN32) $(PATH_DEVTOOLS)/win.x86/bin/rc.exe
5149 WIN32_MC = $(EXEC_X86_WIN32) $(PATH_DEVTOOLS)/win.x86/bin/mc.exe
5150else
5151 WIN32_MC = $(EXEC_X86_WIN32) $(firstword $(wildcard \
5152 $(PATH_SDK_$(VBOX_WINPSDK)_BIN)/MC.Exe\
5153 $(PATH_SDK_WINPSDK_BIN)/MC.Exe\
5154 $(PATH_SDK_WINPSDK)/Bin/MC.Exe\
5155 $(PATH_SDK_WIN32SDK_BIN)/MC.Exe\
5156 $(PATH_SDK_WIN64SDK_BIN)/MC.Exe\
5157 $(PATH_DEVTOOLS)/win.x86/bin/mc.exe\
5158 ) Sorry_Cannot_find_mc_in_the_PSDK)
5159endif
5160
5161
5162#
5163# Template for building R3 programs for the guest additions.
5164#
5165TEMPLATE_VBOXGUESTR3EXE = VBox Guest Program
5166ifeq ($(KBUILD_TARGET),win)
5167 TEMPLATE_VBOXGUESTR3EXE_EXTENDS = VBOXR3EXE
5168 TEMPLATE_VBOXGUESTR3EXE_SDKS = ReorderCompilerIncs $(VBOX_WINPSDK_GST) VBOX_NTDLL
5169 TEMPLATE_VBOXGUESTR3EXE_CFLAGS = $(filter-out -MD$(VBOX_VCC_CRT_TYPE), $(TEMPLATE_VBOXR3EXE_CFLAGS)) -MT$(VBOX_VCC_CRT_TYPE)
5170 TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS = $(filter-out -MD$(VBOX_VCC_CRT_TYPE), $(TEMPLATE_VBOXR3EXE_CFLAGS)) -MT$(VBOX_VCC_CRT_TYPE)
5171 TEMPLATE_VBOXGUESTR3EXE_LDFLAGS = $(filter-out /DISALLOWLIB:libcmt$(VBOX_VCC_CRT_TYPE).lib /DISALLOWLIB:libcpmt$(VBOX_VCC_CRT_TYPE).lib, $(TEMPLATE_VBOXR3EXE_LDFLAGS)) \
5172 /DISALLOWLIB:msvcrt$(VBOX_VCC_CRT_TYPE).lib \
5173 /DISALLOWLIB:msvcprt$(VBOX_VCC_CRT_TYPE).lib
5174 TEMPLATE_VBOXGUESTR3EXE_LIBS.x86 = \
5175 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL.win.x86)_LIB)/oldnames.lib \
5176 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL.win.x86)_LIB)/libcmt$(VBOX_VCC_CRT_TYPE).lib \
5177 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL.win.x86)_LIB)/libcpmt$(VBOX_VCC_CRT_TYPE).lib
5178 TEMPLATE_VBOXGUESTR3EXE_LIBS.amd64 = \
5179 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL.win.amd64)_LIB)/oldnames.lib \
5180 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL.win.amd64)_LIB)/libcmt$(VBOX_VCC_CRT_TYPE).lib \
5181 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL.win.amd64)_LIB)/libcpmt$(VBOX_VCC_CRT_TYPE).lib
5182 # Hack for running on NT4, W2K and XP w/o SP: Change OS and subsystem version in the image.
5183 # HACK ALERT! Double expansion of $$(NLTAB).
5184 TEMPLATE_VBOXGUESTR3EXE_POST_CMDS.win.x86 = $(if $(eq $(tool_do),LINK_LIBRARY),,$(VBOX_PE_SET_VERSION) $(out)$$(NLTAB)$(TEMPLATE_VBOXR3EXE_POST_CMDS))
5185 TEMPLATE_VBOXGUESTR3EXE_LNK_DEPS.win.x86 = $(if $(eq $(tool_do),LINK_LIBRARY),,$(VBOX_PE_SET_VERSION))
5186else # the gcc guys
5187 ifneq ($(VBOX_WITH_COMPATIBLE_LINUX_GUEST_PACKAGE),)
5188 ifneq ($(KBUILD_TARGET),linux)
5189 override VBOX_WITH_COMPATIBLE_LINUX_GUEST_PACKAGE :=
5190 endif
5191 endif
5192 TEMPLATE_VBOXGUESTR3EXE_EXTENDS = VBOXR3EXE
5193 TEMPLATE_VBOXGUESTR3EXE_TOOL := $(subst GXX,GCC,$(TEMPLATE_VBOXR3EXE_TOOL))
5194 TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -fno-exceptions
5195 TEMPLATE_VBOXGUESTR3EXE_LDFLAGS.linux = $(filter-out $(VBOX_GCC_ORIGIN_OPT),$(TEMPLATE_VBOXR3EXE_LDFLAGS.linux))
5196 ifneq ($(VBOX_WITH_COMPATIBLE_LINUX_GUEST_PACKAGE),)
5197 ifeq ($(KBUILD_TARGET_ARCH),x86)
5198 TEMPLATE_VBOXGUESTR3EXE_TOOL := VBoxXGccX86RedHatLinux
5199 else ifeq ($(KBUILD_TARGET_ARCH),amd64)
5200 TEMPLATE_VBOXGUESTR3EXE_TOOL := VBoxXGccAmd64LinuxGnu
5201 TEMPLATE_VBOXGUESTR3EXE_TOOL.x86 := VBoxXGccX86RedHatLinux
5202 endif
5203 TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS := $(filter-out $(VBOX_GCC_pipe) $(VBOX_GCC_Wextra) $(VBOX_GCC_Wno-missing-field-initializers) $(VBOX_GCC_fdiagnostics-show-option) $(VBOX_GCC_Wno-delete-non-virtual-dtor) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_fvisibility-inlines-hidden),$(TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS)) -pipe
5204 TEMPLATE_VBOXGUESTR3EXE_CFLAGS := $(TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS)
5205 TEMPLATE_VBOXGUESTR3EXE_LDFLAGS.linux := $(filter-out $(VBOX_GCC_ORIGIN_OPT) $(VBOX_LD_as_needed),$(TEMPLATE_VBOXGUESTR3EXE_LDFLAGS.linux))
5206 endif
5207 TEMPLATE_VBOXGUESTR3EXE_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)%,$(TEMPLATE_VBOXR3EXE_LDFLAGS))
5208endif
5209TEMPLATE_VBOXGUESTR3EXE_INST = $(INST_ADDITIONS)
5210TEMPLATE_VBOXGUESTR3EXE_DEFS := $(filter-out $(ARCH_BITS_DEFS), $(TEMPLATE_VBOXR3EXE_DEFS)) IN_GUEST IN_GUEST_R3 IN_RT_R3 $(VBOX_GC_ARCH_BITS_DEFS)
5211TEMPLATE_VBOXGUESTR3EXE_DEFS.linux := $(TEMPLATE_VBOXR3EXE_DEFS.linux) LOG_USE_C99 RT_WITHOUT_EXEC_ALLOC
5212ifeq ($(KBUILD_TARGET),linux) # As few libs as possible on linux.
5213 TEMPLATE_VBOXGUESTR3EXE_LIBS = pthread rt m dl
5214else if1of ($(KBUILD_TARGET), darwin freebsd netbsd openbsd)
5215 TEMPLATE_VBOXGUESTR3EXE_LIBS = $(TEMPLATE_VBOXR3EXE_LIBS) iconv
5216else ifeq ($(KBUILD_TARGET), solaris)
5217 TEMPLATE_VBOXGUESTR3EXE_LIBS = $(TEMPLATE_VBOXR3EXE_LIBS) nsl
5218endif
5219
5220#
5221# Template for building normal R3 programs for the guest additions.
5222#
5223TEMPLATE_NewVBoxGuestR3Exe = VBox Guest Program w/ IPRT and VBGL.
5224TEMPLATE_NewVBoxGuestR3Exe_EXTENDS = VBOXGUESTR3EXE
5225TEMPLATE_NewVBoxGuestR3Exe_LIBS = \
5226 $(VBOX_LIB_IPRT_GUEST_R3) \
5227 $(VBOX_LIB_VBGL_R3) \
5228 $(VBOX_LIB_IPRT_GUEST_R3) \
5229 $(TEMPLATE_VBOXGUESTR3EXE_LIBS)
5230
5231#
5232# Template for building R3 (dynamic) libraries for the guest additions.
5233#
5234TEMPLATE_VBOXGUESTR3DLL = VBox Guest User Dynamic Libraries
5235TEMPLATE_VBOXGUESTR3DLL_EXTENDS = VBOXGUESTR3EXE
5236## @todo add a INSTFUN that separates dlls and libs.
5237ifn1of ($(KBUILD_TARGET), darwin os2 win)
5238 TEMPLATE_VBOXGUESTR3DLL_DEFS = $(TEMPLATE_VBOXGUESTR3EXE_DEFS) PIC
5239 TEMPLATE_VBOXGUESTR3DLL_CFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_CFLAGS) -fPIC
5240 TEMPLATE_VBOXGUESTR3DLL_CXXFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS) -fPIC -fno-exceptions
5241 TEMPLATE_VBOXGUESTR3DLL_LDFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_LDFLAGS) -fPIC
5242endif
5243
5244#
5245# Template for building normal R3 (dynamic) libraries for the guest additions, allows warnings.
5246#
5247## @todo rename to VBoxGuestR3DllWarn
5248TEMPLATE_NewVBoxGuestR3Dll = VBox Guest User Dynamic Libraries w/ IPRT and VBGL.
5249TEMPLATE_NewVBoxGuestR3Dll_EXTENDS = VBOXGUESTR3DLL
5250TEMPLATE_NewVBoxGuestR3Dll_LIBS = \
5251 $(VBOX_LIB_IPRT_GUEST_R3_SHARED) \
5252 $(VBOX_LIB_VBGL_R3_SHARED) \
5253 $(VBOX_LIB_IPRT_GUEST_R3_SHARED) \
5254 $(TEMPLATE_VBOXGUESTR3EXE_LIBS)
5255
5256#
5257# Template for building normal R3 (dynamic) libraries for the guest additions, strict.
5258#
5259TEMPLATE_VBoxGuestR3Dll = VBox Guest User Dynamic Libraries w/ IPRT and VBGL.
5260TEMPLATE_VBoxGuestR3Dll_EXTENDS = NewVBoxGuestR3Dll
5261TEMPLATE_VBoxGuestR3Dll_EXTENDS_BY = appending
5262ifeq ($(KBUILD_TARGET),win)
5263 TEMPLATE_VBoxGuestR3Dll_CFLAGS += $(VBOX_VCC_WERR)
5264 TEMPLATE_VBoxGuestR3Dll_CXXFLAGS += $(VBOX_VCC_WERR)
5265 TEMPLATE_VBoxGuestR3Dll_LDFLAGS += $(VBOX_VCC_LD_WERR)
5266else ifeq ($(VBOX_WITH_COMPATIBLE_LINUX_GUEST_PACKAGE),)
5267 TEMPLATE_VBoxGuestR3Dll_CFLAGS += $(VBOX_GCC_WERR)
5268 TEMPLATE_VBoxGuestR3Dll_CXXFLAGS += $(VBOX_GCC_WERR)
5269endif
5270
5271#
5272# Template for building R3 (static) libraries for the guest additions, allows warnings.
5273#
5274## @todo rename to VBoxGuestR3LibWarn.
5275TEMPLATE_VBOXGUESTR3LIB = VBox Guest User Libraries
5276TEMPLATE_VBOXGUESTR3LIB_EXTENDS = VBOXGUESTR3EXE
5277TEMPLATE_VBOXGUESTR3LIB_INST = $(INST_ADDITIONS_LIB)
5278
5279#
5280# Template for building R3 (static) libraries for the guest additions, strict.
5281#
5282TEMPLATE_VBoxGuestR3Lib = VBox Guest User Dynamic Libraries w/ IPRT and VBGL.
5283TEMPLATE_VBoxGuestR3Lib_EXTENDS = VBOXGUESTR3LIB
5284TEMPLATE_VBoxGuestR3Lib_EXTENDS_BY = appending
5285ifeq ($(KBUILD_TARGET),win)
5286 TEMPLATE_VBoxGuestR3Lib_CFLAGS += $(VBOX_VCC_WERR)
5287 TEMPLATE_VBoxGuestR3Lib_CXXFLAGS += $(VBOX_VCC_WERR)
5288 TEMPLATE_VBoxGuestR3Lib_LDFLAGS += $(VBOX_VCC_LD_WERR)
5289else ifeq ($(VBOX_WITH_COMPATIBLE_LINUX_GUEST_PACKAGE),)
5290 TEMPLATE_VBoxGuestR3Lib_CFLAGS += $(VBOX_GCC_WERR)
5291 TEMPLATE_VBoxGuestR3Lib_CXXFLAGS += $(VBOX_GCC_WERR)
5292endif
5293
5294#
5295# Template for building R3 programs for the guest additions (no -pedantic)
5296#
5297TEMPLATE_VBOXGUESTR3NPEXE = VBox Guest Program Non-pedantic
5298TEMPLATE_VBOXGUESTR3NPEXE_EXTENDS = VBOXGUESTR3EXE
5299ifneq ($(KBUILD_TARGET),win) # gcc only
5300TEMPLATE_VBOXGUESTR3NPEXE_CXXFLAGS = $(filter-out -pedantic -Wshadow,$(TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS)) -Wno-sign-compare
5301TEMPLATE_VBOXGUESTR3NPEXE_CFLAGS = $(filter-out -pedantic -Wshadow -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations,$(TEMPLATE_VBOXGUESTR3EXE_CFLAGS)) -Wno-sign-compare
5302endif
5303
5304#
5305# Template for building R3 (dynamic) libraries for the guest additions (no -pedantic)
5306#
5307TEMPLATE_VBOXGUESTR3NPDLL = VBox Guest User Dynamic Libraries Non-pedantic
5308TEMPLATE_VBOXGUESTR3NPDLL_EXTENDS = VBOXGUESTR3NPEXE
5309## @todo add a INSTFUN that separates dlls and libs.
5310ifn1of ($(KBUILD_TARGET), darwin os2 win)
5311 TEMPLATE_VBOXGUESTR3NPDLL_DEFS = $(TEMPLATE_VBOXGUESTR3NPEXE_DEFS) PIC
5312 TEMPLATE_VBOXGUESTR3NPDLL_CFLAGS = $(TEMPLATE_VBOXGUESTR3NPEXE_CFLAGS) -fPIC
5313 TEMPLATE_VBOXGUESTR3NPDLL_CXXFLAGS = $(TEMPLATE_VBOXGUESTR3NPEXE_CXXFLAGS) -fPIC -fno-exceptions
5314 TEMPLATE_VBOXGUESTR3NPDLL_LDFLAGS = $(TEMPLATE_VBOXGUESTR3NPEXE_LDFLAGS) -fPIC
5315endif
5316
5317#
5318# Template for building R3 (static) libraries for the guest additions (no -pedantic)
5319#
5320TEMPLATE_VBOXGUESTR3NPLIB = VBox Guest User Libraries Non-pedantic
5321TEMPLATE_VBOXGUESTR3NPLIB_EXTENDS = VBOXGUESTR3NPEXE
5322TEMPLATE_VBOXGUESTR3NPLIB_INST = $(INST_ADDITIONS_LIB)
5323
5324
5325#
5326# Template for XFree86 guest modules (relocatable module, i.e. sysmod).
5327# This mostly about zapping the VBOXR3EXE linker flags and libraries.
5328#
5329TEMPLATE_VBOXGUESTR3XF86MOD = VBox XFree86 Guest Module
5330TEMPLATE_VBOXGUESTR3XF86MOD_EXTENDS = VBOXGUESTR3EXE
5331TEMPLATE_VBOXGUESTR3XF86MOD_LIBS.$(KBUILD_TYPE) = $(NO_SUCH_VARIABLE)
5332TEMPLATE_VBOXGUESTR3XF86MOD_LIBS.$(KBUILD_TARGET) = $(NO_SUCH_VARIABLE)
5333TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.$(KBUILD_TARGET) = $(NO_SUCH_VARIABLE)
5334TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.$(KBUILD_TYPE) = $(NO_SUCH_VARIABLE)
5335TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS = -r
5336if1of ($(KBUILD_TARGET), dragonfly freebsd linux netbsd openbsd) # the gnu ld guys.
5337 TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.release = -S
5338 TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.x86 = -m elf_i386
5339 TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.amd64 = -m elf_x86_64
5340endif
5341TEMPLATE_VBOXGUESTR3XF86MOD_CFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_CFLAGS) -fno-merge-constants -std=c99 -ffreestanding
5342TEMPLATE_VBOXGUESTR3XF86MOD_CXXFLAGS= $(TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS) -fno-merge-constants -ffreestanding
5343ifeq ($(VBOX_WITH_COMPATIBLE_LINUX_GUEST_PACKAGE),)
5344 TEMPLATE_VBOXGUESTR3XF86MOD_CFLAGS += $(VBOX_GCC_fno-stack-protector)
5345 TEMPLATE_VBOXGUESTR3XF86MOD_CXXFLAGS += $(VBOX_GCC_fno-stack-protector)
5346endif
5347TEMPLATE_VBOXGUESTR3XF86MOD_SYSSUFF = .o
5348TEMPLATE_VBOXGUESTR3XF86MOD_LIBS = \
5349 $(VBOX_LIB_VBGL_R3_XFREE86)
5350TEMPLATE_VBOXGUESTR3XF86MOD_DEFS = $(TEMPLATE_VBOXGUESTR3DLL_DEFS) VBOX_GUESTR3XF86MOD RTMEM_NO_WRAP_TO_EF_APIS
5351
5352
5353#
5354# Template for XFree86 guest libraries.
5355#
5356TEMPLATE_VBOXGUESTR3XF86LIB = VBox XFree86 Guest Library
5357TEMPLATE_VBOXGUESTR3XF86LIB_EXTENDS = VBOXGUESTR3XF86MOD
5358TEMPLATE_VBOXGUESTR3XF86LIB_INST = $(INST_ADDITIONS_LIB)
5359
5360
5361#
5362# Template for X.org guest modules (shared libs).
5363# This mostly about zapping unnecessary LIBS from VBOXGUESTR3DLL and adding some flags.
5364#
5365TEMPLATE_VBOXGUESTR3XORGMOD = VBox X.org Guest Module
5366TEMPLATE_VBOXGUESTR3XORGMOD_EXTENDS = VBOXGUESTR3DLL
5367TEMPLATE_VBOXGUESTR3XORGMOD_LIBS.$(KBUILD_TYPE) = $(NO_SUCH_VARIABLE)
5368TEMPLATE_VBOXGUESTR3XORGMOD_LIBS.$(KBUILD_TARGET) = $(NO_SUCH_VARIABLE)
5369TEMPLATE_VBOXGUESTR3XORGMOD_CFLAGS = $(TEMPLATE_VBOXGUESTR3DLL_CFLAGS) -std=c99
5370if1of ($(KBUILD_TARGET), linux)
5371 TEMPLATE_VBOXGUESTR3XORGMOD_CFLAGS += -Wno-conversion -Wno-unused-parameter
5372 ifeq ($(VBOX_WITH_COMPATIBLE_LINUX_GUEST_PACKAGE),)
5373 TEMPLATE_VBOXGUESTR3XORGMOD_CFLAGS += $(VBOX_GCC_Wno-variadic-macros)
5374 endif
5375endif
5376TEMPLATE_VBOXGUESTR3XORGMOD_DEFS = $(TEMPLATE_VBOXGUESTR3DLL_DEFS) VBOX_GUESTR3XORGMOD RTMEM_NO_WRAP_TO_EF_APIS
5377ifeq ($(KBUILD_TARGET_ARCH),amd64)
5378 TEMPLATE_VBOXGUESTR3XORGMOD_DEFS += _XSERVER64
5379endif
5380TEMPLATE_VBOXGUESTR3XORGMOD_LIBS = \
5381 $(VBOX_LIB_VBGL_R3_XORG)
5382TEMPLATE_VBOXGUESTR3XORGMOD_LIBS.freebsd += \
5383 iconv
5384
5385
5386#
5387# Template for X.Org guest libraries.
5388#
5389TEMPLATE_VBOXGUESTR3XORGLIB = VBox X.Org Guest Library
5390TEMPLATE_VBOXGUESTR3XORGLIB_EXTENDS = VBOXGUESTR3XORGMOD
5391TEMPLATE_VBOXGUESTR3XORGLIB_INST = $(INST_ADDITIONS_LIB)
5392
5393
5394#
5395# Template for building R0 drivers for the guest additions.
5396#
5397TEMPLATE_VBOXGUESTR0 = VBox Guest Driver
5398TEMPLATE_VBOXGUESTR0_EXTENDS = VBOXR0DRV
5399TEMPLATE_VBOXGUESTR0_INST = $(INST_ADDITIONS)
5400TEMPLATE_VBOXGUESTR0_SDKS.win.x86 = ReorderCompilerIncs $(VBOX_WINDDK_GST) $(VBOX_WINPSDK_GST)INCS
5401TEMPLATE_VBOXGUESTR0_SDKS.win.amd64 = ReorderCompilerIncs $(VBOX_WINDDK_GST) $(VBOX_WINPSDK_GST)INCS
5402TEMPLATE_VBOXGUESTR0_LIBS.win.x86 = \
5403 $(PATH_SDK_$(VBOX_WINDDK)_LIB)/int64.lib
5404TEMPLATE_VBOXGUESTR0_DEFS = $(TEMPLATE_VBOXR0DRV_DEFS) IN_GUEST IN_GUEST_R0
5405TEMPLATE_VBOXGUESTR0_DEFS.linux = RT_NO_EXPORT_SYMBOL
5406ifeq ($(KBUILD_TARGET),solaris)
5407 TEMPLATE_VBOXGUESTR0_LDFLAGS = -r -dy
5408endif
5409ifn1of (darwin os2 win, $(KBUILD_TARGET))
5410 TEMPLATE_VBOXGUESTR0_CFLAGS = $(patsubst %/VBox/SUPDrvMangling.h,%/VBox/VBoxGuestMangling.h,$(TEMPLATE_VBOXR0DRV_CFLAGS))
5411 TEMPLATE_VBOXGUESTR0_CXXFLAGS = $(patsubst %/VBox/SUPDrvMangling.h,%/VBox/VBoxGuestMangling.h,$(TEMPLATE_VBOXR0DRV_CXXFLAGS))
5412endif
5413
5414#
5415# Template for building R0 libraries for the guest additions.
5416#
5417TEMPLATE_VBOXGUESTR0LIB = VBox Guest Driver Libraries
5418TEMPLATE_VBOXGUESTR0LIB_EXTENDS = VBOXGUESTR0
5419TEMPLATE_VBOXGUESTR0LIB_INSTTYPE = stage
5420TEMPLATE_VBOXGUESTR0LIB_INSTTYPE.linux = stage
5421TEMPLATE_VBOXGUESTR0LIB_INST = $(INST_ADDITIONS_LIB)
5422ifeq ($(KBUILD_TARGET),haiku)
5423 TEMPLATE_VBOXGUESTR0LIB_LDFLAGS = -r -dy
5424endif
5425
5426#
5427# Template for building OpenGL host dlls.
5428#
5429TEMPLATE_VBOXCROGLR3HOSTDLL = VBox OpenGL Host DLLs
5430TEMPLATE_VBOXCROGLR3HOSTDLL_EXTENDS = VBOXR3NP
5431TEMPLATE_VBOXCROGLR3HOSTDLL_EXTENDS_BY = prepending
5432TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS = CHROMIUM_THREADSAFE VBOX_WITH_HGCM UNPACKS
5433TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS.win = _WIN32_WINNT=0x0500 WINDOWS=1
5434TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS.linux = Linux=1 _GNU_SOURCE
5435TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS.solaris = SunOS=1 _GNU_SOURCE #GLEXT_64_TYPES_DEFINED
5436TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS.darwin = DARWIN=1 GL_GLEXT_LEGACY _GNU_SOURCE VBOX_WITH_COCOA_QT
5437TEMPLATE_VBOXCROGLR3HOSTDLL_LDFLAGS.darwin = -framework AppKit
5438TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS.freebsd = FreeBSD=1 _GNU_SOURCE
5439TEMPLATE_VBOXCROGLR3HOSTDLL_INCS = $(VBOX_PATH_CROGL_INCLUDE) $(VBOX_PATH_CROGL_GENFILES)
5440TEMPLATE_VBOXCROGLR3HOSTDLL_SDKS.darwin = DARWIN-OPENGL
5441TEMPLATE_VBOXCROGLR3HOSTDLL_LDFLAGS.darwin += \
5442 -framework OpenGL \
5443 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
5444 -compatibility_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
5445TEMPLATE_VBOXCROGLR3HOSTDLL_LDFLAGS.linux = -Wl,--no-as-needed
5446TEMPLATE_VBOXCROGLR3HOSTDLL_BLDDIRS = $(VBOX_PATH_CROGL_GENFILES)/
5447
5448#
5449# Template for building OpenGL host libraries.
5450#
5451TEMPLATE_VBOXCROGLR3HOSTLIB = VBox OpenGL Host Libraries
5452TEMPLATE_VBOXCROGLR3HOSTLIB_EXTENDS = VBOXCROGLR3HOSTDLL
5453TEMPLATE_VBOXCROGLR3HOSTLIB_INST = $(INST_LIB)
5454
5455#
5456# Template for building OpenGL guest dlls.
5457#
5458TEMPLATE_VBOXCROGLR3GUESTDLL = VBox OpenGL Guest DLLs
5459TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS = VBOXGUESTR3NPDLL
5460TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS_BY = prepending
5461TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS = CHROMIUM_THREADSAFE VBOX_WITH_HGCM
5462TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS.win = WINDOWS=1
5463TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS.linux = Linux=1 _GNU_SOURCE
5464TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS.solaris = SunOS=1 _GNU_SOURCE #GLEXT_64_TYPES_DEFINED
5465TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS.darwin = DARWIN=1 GL_GLEXT_LEGACY _GNU_SOURCE VBOX_WITH_COCOA_QT
5466TEMPLATE_VBOXCROGLR3GUESTDLL_LDFLAGS.darwin = -framework AppKit
5467TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS.freebsd = FreeBSD=1 _GNU_SOURCE
5468TEMPLATE_VBOXCROGLR3GUESTDLL_INCS = $(VBOX_PATH_CROGL_INCLUDE) $(VBOX_PATH_CROGL_GENFILES)
5469TEMPLATE_VBOXCROGLR3GUESTDLL_SDKS.darwin = DARWIN-OPENGL
5470TEMPLATE_VBOXCROGLR3GUESTDLL_LDFLAGS.darwin += \
5471 -framework OpenGL \
5472 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
5473 -compatibility_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
5474TEMPLATE_VBOXCROGLR3GUESTDLL_BLDDIRS = $(VBOX_PATH_CROGL_GENFILES)/
5475
5476#
5477# Template for building OpenGL guest libraries.
5478#
5479TEMPLATE_VBOXCROGLR3GUESTLIB = VBox OpenGL Guest Libraries
5480TEMPLATE_VBOXCROGLR3GUESTLIB_EXTENDS = VBOXCROGLR3GUESTDLL
5481TEMPLATE_VBOXCROGLR3GUESTLIB_INST = $(INST_ADDITIONS_LIB)
5482
5483
5484#
5485# Template for building Mesa guest library, Linux-only so far.
5486#
5487TEMPLATE_VBOXMESAR3GUESTLIB = VBox Mesa Guest Library
5488TEMPLATE_VBOXMESAR3GUESTLIB_EXTENDS = VBOXCROGLR3GUESTDLL
5489TEMPLATE_VBOXMESAR3GUESTLIB_INST = $(INST_ADDITIONS_LIB)
5490TEMPLATE_VBOXMESAR3GUESTLIB_DEFS.linux = Linux=1
5491TEMPLATE_VBOXMESAR3GUESTLIB_DEFS.solaris = SunOS=1
5492TEMPLATE_VBOXMESAR3GUESTLIB_DEFS.darwin = DARWIN=1 GL_GLEXT_LEGACY
5493ifeq ($(KBUILD_TARGET),linux)
5494 TEMPLATE_VBOXMESAR3GUESTLIB_ASTOOL = $(TEMPLATE_VBOXCROGLR3GUESTDLL_TOOL)
5495 TEMPLATE_VBOXMESAR3GUESTLIB_ASFLAGS = $(NO_SUCH_VARIABLE)
5496 TEMPLATE_VBOXMESAR3GUESTLIB_ASFLAGS.x86 = -m32
5497 TEMPLATE_VBOXMESAR3GUESTLIB_ASFLAGS.amd64 = -m64
5498 TEMPLATE_VBOXMESAR3GUESTLIB_ASDEFS = $(NO_SUCH_VARIABLE)
5499endif
5500
5501
5502#
5503# Guest additions libraries (all static).
5504# The _MINI and _SHARED are both compiled as PIC and intended for linking into a .so/.dll/.dylib.
5505#
5506VBOX_LIB_IPRT_GUEST_R3 = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR3$(VBOX_SUFF_LIB)
5507VBOX_LIB_IPRT_GUEST_R3_SHARED = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR3Shared$(VBOX_SUFF_LIB)
5508VBOX_LIB_IPRT_GUEST_R0 = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR0$(VBOX_SUFF_LIB)
5509ifeq ($(KBUILD_TARGET_ARCH),x86)
5510 VBOX_LIB_IPRT_GUEST_R0_NT4 = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR0NT4$(VBOX_SUFF_LIB)
5511else
5512 VBOX_LIB_IPRT_GUEST_R0_NT4 = $(VBOX_LIB_IPRT_GUEST_R0)
5513endif
5514VBOX_LIB_VBGL_R3 = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3Lib$(VBOX_SUFF_LIB) \
5515 $(if $(VBOX_WITH_DRAG_AND_DROP),$(VBOX_PATH_ADDITIONS_LIB)/VBoxDnDGuestR3Lib$(VBOX_SUFF_LIB))
5516VBOX_LIB_VBGL_R3_XFREE86 = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3LibXFree86$(VBOX_SUFF_LIB)
5517VBOX_LIB_VBGL_R3_XORG = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3LibXOrg$(VBOX_SUFF_LIB)
5518VBOX_LIB_VBGL_R3_SHARED = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3LibShared$(VBOX_SUFF_LIB)
5519VBOX_LIB_VBGL_R0BASE = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR0LibBase$(VBOX_SUFF_LIB)
5520VBOX_LIB_VBGL_R0 = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR0Lib$(VBOX_SUFF_LIB)
5521ifeq ($(KBUILD_TARGET),x86)
5522 VBOX_LIB_IPRT_GUEST_R3_X86 = $(VBOX_LIB_IPRT_GUEST_R3)
5523 VBOX_LIB_IPRT_GUEST_R3_SHARED_X86 = $(VBOX_LIB_IPRT_GUEST_R3_SHARED)
5524 VBOX_LIB_VBGL_R3_X86 = $(VBOX_LIB_VBGL_R3)
5525 VBOX_LIB_VBGL_R3_SHARED_X86 = $(VBOX_LIB_VBGL_R3_SHARED)
5526else
5527 VBOX_LIB_IPRT_GUEST_R3_X86 = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR3-x86$(VBOX_SUFF_LIB)
5528 VBOX_LIB_IPRT_GUEST_R3_SHARED_X86 = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR3Shared-x86$(VBOX_SUFF_LIB)
5529 VBOX_LIB_VBGL_R3_X86 = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3Lib-x86$(VBOX_SUFF_LIB)
5530 VBOX_LIB_VBGL_R3_SHARED_X86 = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3LibShared-x86$(VBOX_SUFF_LIB)
5531endif
5532
5533
5534#
5535# Check the publisher and version string.
5536#
5537# We are being very strict because the version string is visible in various
5538# APIs and logs and must be machine readable.
5539#
5540VBOX_VERSION_COMP_VALID_CHAR_SET = ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz()[]{}+-.,
5541ifneq ($(VBOX_BUILD_PUBLISHER),)
5542 if $(length $(VBOX_BUILD_PUBLISHER)) > 10
5543 $(error VBox: VBOX_BUILD_PUBLISHER must not be longer than 10 characters!)
5544 endif
5545 if "$(substr $(VBOX_BUILD_PUBLISHER), 1, 1)" != "_"
5546 $(error VBox: VBOX_BUILD_PUBLISHER must start with an underscore!)
5547 endif
5548 if "$(translate $(substr $(VBOX_BUILD_PUBLISHER),2),$(VBOX_VERSION_COMP_VALID_CHAR_SET),)" != ""
5549 $(error VBox: VBOX_BUILD_PUBLISHER='$(VBOX_BUILD_PUBLISHER)' contains bad characters! Valid set is:$(NLTAB)$(VBOX_VERSION_COMP_VALID_CHAR_SET))
5550 endif
5551endif
5552
5553if $(words $(VBOX_VERSION_STRING)) != 1
5554 $(error VBox: VBOX_VERSION_STRING='$(VBOX_VERSION_STRING)' contains spaces or is empty.)
5555endif
5556if "$(subst __,-,$(VBOX_VERSION_STRING))" != "$(VBOX_VERSION_STRING)"
5557 $(error VBox: VBOX_VERSION_STRING='$(VBOX_VERSION_STRING)' contains double underscores.)
5558endif
5559
5560VBOX_VER_TMP1 := $(subst _,$(SP),$(VBOX_VERSION_STRING))
5561
5562if $(words $(VBOX_VER_TMP1)) > 3
5563 $(error VBox: VBOX_VERSION_STRING='$(VBOX_VERSION_STRING)' contains too many parts (underscores), max 3!)
5564endif
5565if "$(translate $(word 1,$(VBOX_VER_TMP1)),0123456789,)" != ".."
5566 $(error VBox: The x.y.z part of VBOX_VERSION_STRING='$(VBOX_VERSION_STRING)' is malformed: '$(word 1,$(VBOX_VER_TMP1))')
5567endif
5568if "$(word 1,$(VBOX_VER_TMP1))" != "$(VBOX_VERSION_STRING_RAW)"
5569 $(error VBox: VBOX_VERSION_STRING='$(VBOX_VERSION_STRING)' does not start with VBOX_VERSION_STRING_RAW='$(VBOX_VERSION_STRING_RAW)')
5570endif
5571
5572if $(words $(VBOX_VER_TMP1)) == 3 || ($(words $(VBOX_VER_TMP1)) == 2 && "$(VBOX_BUILD_PUBLISHER)" == "")
5573 if "$(substr $(word 2,$(VBOX_VER_TMP1)),1,4)" == "BETA"
5574 VBOX_VER_TMP2 = 5
5575 else if "$(substr $(word 2,$(VBOX_VER_TMP1)),1,5)" == "ALPHA"
5576 VBOX_VER_TMP2 = 6
5577 else if "$(substr $(word 2,$(VBOX_VER_TMP1)),1,2)" == "RC"
5578 VBOX_VER_TMP2 = 3
5579 else
5580 $(error VBox: VBOX_VERSION_STRING='$(VBOX_VERSION_STRING)' uses an unknown build type: '$(word 2,$(VBOX_VER_TMP1))')
5581 endif
5582 if "$(translate $(substr $(word 2,$(VBOX_VER_TMP1)),$(VBOX_VER_TMP2)),0123456789)" != ""
5583 $(error VBox: VBOX_VERSION_STRING='$(VBOX_VERSION_STRING)' uses an unknown build type: '$(word 2,$(VBOX_VER_TMP1))')
5584 endif
5585endif
5586
5587VBOX_VER_TMP1 :=
5588VBOX_VER_TMP2 :=
5589
5590
5591#
5592# Two targets to coordinate version number changes properly. Note that the
5593# only way to get a really consistent build is to run 'kmk' in the top-level
5594# directory. If you don't run it there, you get a consistent sub-tree only.
5595#
5596VBOX_BAD_CHAR_SET = ,;:/\$(SP)$(TAB)$(HASH)=![]@%&''()*""<>?^{}|~
5597VBOX_VERSION_STAMP = $(PATH_OUT)/version-stamp-raw-api-$(translate $(VBOX_VERSION_STRING)-$(VBOX_C_YEAR)-$(VBOX_VENDOR)-$(VBOX_PRODUCT)-$(VBOX_API_VERSION)-$(VBOX_BUILD_PUBLISHER),$(VBOX_BAD_CHAR_SET),,_)
5598VBOX_VERSION_HEADER = $(PATH_OUT)/version-generated.h
5599VBOX_VERSION_MK = $(PATH_OUT)/version-generated.mk
5600
5601$(VBOX_VERSION_STAMP): | $(PATH_ROOT)/Config.kmk
5602 $(call MSG_GENERATE,,$@)
5603 $(QUIET)$(MKDIR) -p $(@D)
5604 $(QUIET)$(RM) -f $(wildcard $(PATH_OUT)/version-stamp-*)
5605 $(QUIET)$(APPEND) $@ $(VBOX_VERSION_STRING)
5606
5607$(VBOX_VERSION_HEADER): $(VBOX_VERSION_STAMP)
5608 $(call MSG_GENERATE,,$@)
5609 $(QUIET)$(MKDIR) -p $(@D)
5610 $(QUIET)$(RM) -f $@ [email protected]
5611 $(QUIET)$(APPEND) [email protected] '#ifndef ___version_generated_h___'
5612 $(QUIET)$(APPEND) [email protected] '#define ___version_generated_h___'
5613 $(QUIET)$(APPEND) [email protected] ''
5614 $(QUIET)$(APPEND) [email protected] '#define VBOX_VERSION_MAJOR $(VBOX_VERSION_MAJOR)'
5615 $(QUIET)$(APPEND) [email protected] '#define VBOX_VERSION_MINOR $(VBOX_VERSION_MINOR)'
5616 $(QUIET)$(APPEND) [email protected] '#define VBOX_VERSION_BUILD $(VBOX_VERSION_BUILD)'
5617 $(QUIET)$(APPEND) [email protected] '#define VBOX_VERSION_STRING_RAW "$(VBOX_VERSION_STRING_RAW)"'
5618 $(QUIET)$(APPEND) [email protected] '#define VBOX_VERSION_STRING "$(VBOX_VERSION_STRING)"'
5619 $(QUIET)$(APPEND) [email protected] '#define VBOX_API_VERSION_STRING "$(VBOX_API_VERSION)"'
5620 $(QUIET)$(APPEND) [email protected] ''
5621 $(QUIET)$(APPEND) [email protected] '#endif'
5622 $(QUIET)$(MV) -f [email protected] $@
5623
5624
5625VBOX_PACKAGE_HEADER = $(PATH_OUT)/package-generated.h
5626
5627$(VBOX_PACKAGE_HEADER):
5628 $(call MSG_GENERATE,,$@)
5629 $(QUIET)$(MKDIR) -p $(@D)
5630 $(QUIET)$(RM) -f $@ [email protected]
5631 $(QUIET)$(APPEND) [email protected] '#ifndef ___package_generated_h___'
5632 $(QUIET)$(APPEND) [email protected] '#define ___package_generated_h___'
5633 $(QUIET)$(APPEND) [email protected] ''
5634 $(QUIET)$(APPEND) [email protected] '#define VBOX_PACKAGE_STRING "$(VBOX_PACKAGE_STRING)"'
5635 $(QUIET)$(APPEND) [email protected] ''
5636 $(QUIET)$(APPEND) [email protected] '#endif'
5637 $(QUIET)$(MV) -f [email protected] $@
5638
5639VBOX_PRODUCT_HEADER = $(PATH_OUT)/product-generated.h
5640
5641$(VBOX_PRODUCT_HEADER): $(VBOX_VERSION_STAMP)
5642 $(call MSG_GENERATE,,$@)
5643 $(QUIET)$(MKDIR) -p $(@D)
5644 $(QUIET)$(RM) -f $@ [email protected]
5645 $(QUIET)$(APPEND) [email protected] '#ifndef ___product_generated_h___'
5646 $(QUIET)$(APPEND) [email protected] '#define ___product_generated_h___'
5647 $(QUIET)$(APPEND) [email protected] ''
5648 $(QUIET)$(APPEND) [email protected] '#define VBOX_VENDOR "$(VBOX_VENDOR)"'
5649 $(QUIET)$(APPEND) [email protected] '#define VBOX_VENDOR_SHORT "$(VBOX_VENDOR_SHORT)"'
5650 $(QUIET)$(APPEND) [email protected] '#define VBOX_PRODUCT "$(VBOX_PRODUCT)"'
5651 $(QUIET)$(APPEND) [email protected] '#define VBOX_BUILD_PUBLISHER "$(VBOX_BUILD_PUBLISHER)"'
5652 $(QUIET)$(APPEND) [email protected] '#define VBOX_C_YEAR "$(VBOX_C_YEAR)"'
5653 $(QUIET)$(APPEND) [email protected] ''
5654 $(QUIET)$(APPEND) [email protected] '#endif'
5655 $(QUIET)$(MV) -f [email protected] $@
5656
5657#
5658# Used for external makefiles which cannot include Config.kmk
5659#
5660$(VBOX_VERSION_MK): $(VBOX_VERSION_STAMP)
5661 $(call MSG_GENERATE,,$@)
5662 $(QUIET)$(RM) -f $@ [email protected]
5663 $(QUIET)$(MKDIR) -p $(@D)
5664 $(QUIET)$(APPEND) [email protected] 'VBOX_VERSION_MAJOR = $(VBOX_VERSION_MAJOR)'
5665 $(QUIET)$(APPEND) [email protected] 'VBOX_VERSION_MINOR = $(VBOX_VERSION_MINOR)'
5666 $(QUIET)$(APPEND) [email protected] 'VBOX_VERSION_BUILD = $(VBOX_VERSION_BUILD)'
5667 $(QUIET)$(APPEND) [email protected] 'VBOX_VERSION_STRING = $(VBOX_VERSION_STRING)'
5668 $(QUIET)$(APPEND) [email protected] 'VBOX_VENDOR = $(VBOX_VENDOR)'
5669 $(QUIET)$(APPEND) [email protected] 'VBOX_VENDOR_SHORT = $(VBOX_VENDOR_SHORT)'
5670 $(QUIET)$(APPEND) [email protected] 'VBOX_PRODUCT = $(VBOX_PRODUCT)'
5671 $(QUIET)$(APPEND) [email protected] 'VBOX_C_YEAR = $(VBOX_C_YEAR)'
5672 $(QUIET)$(MV) -f [email protected] $@
5673
5674if !defined(VBOX_OSE) && !defined(VBOX_NOINC_LICENSE_VER_KMK)
5675 if1of ($(KBUILD_TARGET), freebsd linux netbsd openbsd solaris)
5676 # VBOX_LICENSE_VER is used in several Makefiles
5677 VBOX_LICENSE_VER_KMK = $(PATH_OUT)/license-version.kmk
5678$(VBOX_LICENSE_VER_KMK): $(VBOX_BRAND_LICENSE_HTML)
5679 $(call MSG_GENERATE,,$(VBOX_LICENSE_VER_KMK))
5680 $(QUIET)$(MKDIR) -p $(@D)
5681 ifdef VBOX_BRAND_LICENSE_VER
5682 $(QUIET)$(RM) -f '$@'
5683 $(APPEND) '$@' 'VBOX_LICENSE_VER=$(VBOX_BRAND_LICENSE_VER)'
5684 else
5685 $(QUIET)$(SED) -e "s/.*License version \([0-9.]*\) *[,&].*/VBOX_LICENSE_VER=\1/;t;d" --output $@ $(VBOX_BRAND_LICENSE_HTML)
5686 endif
5687 -include $(VBOX_LICENSE_VER_KMK)
5688 ifdef VBOX_LICENSE_VER
5689 VBOX_LICENSE_FILES = \
5690 License-$(VBOX_LICENSE_VER).html \
5691 $(foreach f,$(VBOX_INSTALLER_ADD_LANGUAGES),License-$(VBOX_LICENSE_VER)-$(f).html)
5692 VBOX_LICENSE_BINS = $(addprefix $(PATH_STAGE_BIN)/,$(VBOX_LICENSE_FILES))
5693 endif
5694 endif
5695endif
5696
5697
5698ifndef VBOX_NOINC_MISC
5699# Force building of the version header file as the first thing anywhere in
5700# the tree. This eliminates the need for manual dependencies on it.
5701## @todo there gotta be a better way of doing this.
5702Makefile.kmk: | $(VBOX_VERSION_HEADER) $(VBOX_VERSION_MK) $(VBOX_PRODUCT_HEADER) $(VBOX_PACKAGE_HEADER)
5703endif
5704
5705
5706#
5707# Subversion tree revision.
5708#
5709# The VBOX_SVN_REV contains our best guess. Use svn info on the root of the
5710# tree to determine this it if .svn/wc.db or .svn/entries is found (the former
5711# also up to two directory levels higher to allow for checkouts of the entire
5712# repository), otherwise fall back on the Config.kmk revision.
5713#
5714# Makefile rules using this information shall list $(VBOX_SVN_REV_KMK) as a
5715# prerequisite.
5716#
5717SVN ?= svn$(HOSTSUFF_EXE)
5718VBOX_SVN_REV_KMK = $(PATH_OUT)/revision.kmk
5719ifndef VBOX_SVN_REV
5720 VBOX_SVN_REV_FALLBACK := $(patsubst %:,, $Rev: 52447 $ )
5721 VBOX_SVN_DEP := $(firstword $(wildcard $(PATH_ROOT)/.svn/wc.db $(abspath $(PATH_ROOT)/../.svn/wc.db) $(abspath $(PATH_ROOT)/../../.svn/wc.db) $(PATH_ROOT)/.svn/entries))
5722 ifeq ($(which $(SVN)),)
5723 VBOX_SVN_DEP :=
5724 endif
5725
5726# Rule for generating a timestamp and updating the real thing on change.
5727$(VBOX_SVN_REV_KMK).ts +| $(VBOX_SVN_REV_KMK): $(if $(VBOX_SVN_DEP), $(VBOX_SVN_DEP), $(PATH_ROOT)/Config.kmk)
5728 $(call MSG_GENERATE,,$(VBOX_SVN_REV_KMK))
5729 $(QUIET)$(RM) -f $@ [email protected]
5730 $(QUIET)$(MKDIR) -p $(@D)
5731 ifneq ($(VBOX_SVN_DEP),)
5732 $(REDIRECT) -E 'LC_ALL=C' -wo [email protected] -- $(SVN) info $(PATH_ROOT)
5733 $(SED) -e '/^Last Changed Rev/!d' -e 's/Last Changed Rev\: */export VBOX_SVN_REV=/' --output $@ [email protected]
5734 $(QUIET)$(RM) -f [email protected]
5735 else
5736 $(QUIET)$(APPEND) $@ 'export VBOX_SVN_REV=$(VBOX_SVN_REV_FALLBACK)'
5737 endif
5738 $(QUIET)$(CP) --changed -fv $@ $(VBOX_SVN_REV_KMK)
5739
5740 ifndef VBOX_NOINC_SVN_REV_KMK
5741 include $(VBOX_SVN_REV_KMK)
5742 endif
5743else
5744# allow to overwrite VBOX_SVN_REV externally (mainly for building .debs/.rpms)
5745$(VBOX_SVN_REV_KMK):
5746 $(call MSG_GENERATE,,$(VBOX_SVN_REV_KMK))
5747 $(QUIET)$(RM) -f $@
5748 $(QUIET)$(MKDIR) -p $(@D)
5749 $(QUIET)$(APPEND) $@ 'export VBOX_SVN_REV=$(VBOX_SVN_REV)'
5750 $(QUIET)echo '* $(VBOX_SVN_REV_KMK) was externally overwritten:'
5751 $(QUIET)$(CAT) $(VBOX_SVN_REV_KMK)
5752endif
5753
5754# only needed for VBoxGuest for Linux/FreeBSD guests
5755VBOX_SVN_REV_HEADER = $(PATH_OUT)/revision-generated.h
5756$(VBOX_SVN_REV_HEADER): $(VBOX_SVN_REV_KMK)
5757 $(call MSG_GENERATE,,$@)
5758 $(QUIET)$(RM) -f $@ [email protected]
5759 $(QUIET)$(MKDIR) -p $(@D)
5760 $(QUIET)$(APPEND) [email protected] '#define VBOX_SVN_REV $(VBOX_SVN_REV)'
5761 $(QUIET)$(MV) -f [email protected] $@
5762
5763#
5764# Shared definitions of the XIDL file to use as a source for
5765# generating various other files (VBoxSVC, webservice, docs, front-ends, ...)
5766#
5767
5768# Real XIDL source file; from this we strip the <desc> elements to generate
5769# a second XIDL file, from which the COM/XPCOM IDL files are then generated:
5770VBOX_XIDL_FILE_SRC = $(PATH_ROOT)/src/VBox/Main/idl/VirtualBox.xidl
5771# second XIDL file to use as source for COM/XPCOM IDL (with stripped docs):
5772VBOX_XIDL_FILE = $(PATH_OUT)/obj/VirtualBox_stripped.xidl
5773
5774# Java stuff.
5775ifeq ($(KBUILD_TARGET), darwin)
5776 VBOX_JAVA_COMMANDS = $(firstword $(wildcard \
5777 /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Commands \
5778 /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Commands \
5779 $(if-expr $(VBOX_XCODE_VERSION_MAJOR) >= 4,/System/Library/Frameworks/JavaVM.framework/Versions/A/Commands,) \
5780 ) /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Commands)
5781 VBOX_JAVAC = $(VBOX_JAVA_COMMANDS)/javac
5782 VBOX_JAVAH = $(VBOX_JAVA_COMMANDS)/javah
5783 VBOX_JAR = $(VBOX_JAVA_COMMANDS)/jar
5784 VBOX_JAVADOC = $(VBOX_JAVA_COMMANDS)/javadoc
5785 VBOX_WSIMPORT = $(VBOX_JAVA_COMMANDS)/wsimport
5786 if $(VBOX_XCODE_VERSION_MAJOR) >= 4 # Lion (4.1-preview 5) has a broken CurrentJDK link. Blindly applying it to 4.0.
5787 VBOX_JAVA_INC = $(VBOX_PATH_MACOSX_SDK)/System/Library/Frameworks/JavaVM.framework/Versions/A/Headers
5788 else
5789 VBOX_JAVA_INC = $(VBOX_PATH_MACOSX_SDK)/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Headers
5790 endif
5791
5792else
5793
5794 ifeq ($(KBUILD_TARGET),linux)
5795 ifeq ($(origin VBOX_JAVA_HOME),undefined)
5796 # Add correct detection for you distro after the /usr/../java-6-sun line.
5797 VBOX_JAVA_HOME := $(firstword $(wildcard \
5798 $(PATH_DEVTOOLS)/linux.x86/jdk1.6.0_27 \
5799 /usr/lib/jvm/java-6-sun \
5800 /usr/lib/jvm/java-6-openjdk \
5801 /usr/lib/jvm/java-6-openjdk-i386 \
5802 /usr/lib/jvm/java-6-openjdk-amd64 \
5803 /usr/lib/jvm/java-7-openjdk-i386 \
5804 /usr/lib/jvm/java-7-openjdk-amd64 \
5805 /usr/lib/jvm/default-java \
5806 /usr/lib/jvm/java \
5807 \
5808 /usr/lib/jvm/sun-jdk-1.6 \
5809 ) /usr/lib/jvm/java-6-sun)
5810 endif
5811 endif
5812
5813 ifeq ($(KBUILD_TARGET),solaris)
5814 # VBOX_JAVA_HOME ?= /usr/jdk/jdk1.6.0
5815 VBOX_JAVA_HOME ?= /usr/java
5816 endif
5817
5818 ifeq ($(KBUILD_TARGET),win)
5819 VBOX_JAVA_HOME ?= c:/jdk
5820 endif
5821
5822 VBOX_JAVAC = $(VBOX_JAVA_HOME)/bin/javac
5823 VBOX_JAVAH = $(VBOX_JAVA_HOME)/bin/javah
5824 VBOX_JAR = $(VBOX_JAVA_HOME)/bin/jar
5825 VBOX_JAVADOC = $(VBOX_JAVA_HOME)/bin/javadoc
5826 VBOX_WSIMPORT = $(VBOX_JAVA_HOME)/bin/wsimport
5827 # correct for targets we care about
5828 VBOX_MD_OS = $(KBUILD_TARGET)
5829 VBOX_JAVA_INC = \
5830 $(VBOX_JAVA_HOME)/include \
5831 $(VBOX_JAVA_HOME)/include/$(VBOX_MD_OS)
5832endif
5833
5834
5835#
5836# VBOX_SEP needs to be quoted when used on the shell command line.
5837#
5838if1of ($(KBUILD_TARGET), os2 win)
5839 VBOX_SEP = $(SEMICOLON)
5840else
5841 VBOX_SEP = $(COLON)
5842endif
5843VBOX_JAVAC_OPTS = -encoding UTF-8 -source 1.5 -target 1.5 -Xlint:unchecked
5844VBOX_JAVADOC_OPTS = -encoding UTF-8
5845
5846
5847#
5848# Legacy.
5849#
5850## @todo try remove this.
5851ifneq ($(LOCALCFG),)
5852 include $(LOCALCFG)
5853endif
5854
5855
5856#
5857# Some extra goals.
5858#
5859.PHONY: up update st stat status
5860up update::
5861 $(SVN) up
5862
5863up2 update2::
5864 $(SVN) up --ignore-externals
5865
5866st stat status:
5867 $(SVN) status
5868
5869quick:
5870 $(MAKE) VBOX_QUICK=1
5871
Note: See TracBrowser for help on using the repository browser.

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