VirtualBox

source: vbox/trunk/Config.kmk@ 69569

Last change on this file since 69569 was 69569, checked in by vboxsync, 7 years ago

Linux kernel module make files: better kernel header selection.
bugref:4567: Linux kernel driver maintenance

r118872/r69529 changed our Linux kernel module test builds to use the most
recent kernel headers found on the system. However, we used the GNU Make
sort function, which sorts alphanumerically but does not understand software
versions. As I could not find a good fix for this problem, this change
switches to using the most recent headers by modification date of the
folder. While this is likely to get it wrong sometimes too, it is much less
likely to get it badly wrong.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id Revision
File size: 317.0 KB
Line 
1# $Id: Config.kmk 69569 2017-11-03 14:57:25Z 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-2017 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 by 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 INST_UNATTENDED_TEMPLATES = $(INST_BIN)UnattendedTemplates/
103
104 INST_VBOXDBG_SYMS = $(INST_VIRTUALBOX)Contents/Resources/VBoxDbgSyms/
105
106 # other paths
107 INST_LIB = lib/
108 INST_ADDITIONS_LIB = $(INST_LIB)additions/
109 VBOX_INST_DTRACE_LIB = $(INST_BIN)dtrace/lib/
110 VBOX_INST_DTRACE_TST = $(INST_BIN)dtrace/testcase/
111 VBOX_INST_TOOLS = $(INST_BIN)tools/
112
113else
114
115 INST_BIN = bin/
116 INST_DIST = $(INST_BIN)
117 INST_SDK = $(INST_BIN)sdk/
118
119 INST_VIRTUALBOX = $(INST_BIN)
120 INST_VBOXDRV = $(INST_BIN)
121 INST_VBOXNETFLT = $(INST_BIN)
122 INST_VBOXNETADP = $(INST_BIN)
123 INST_VBOXUSB = $(INST_BIN)
124
125 INST_DLL = $(INST_BIN)
126 INST_SYS = $(INST_BIN)
127 INST_TESTCASE = $(INST_BIN)testcase/
128 INST_ADDITIONS = $(INST_BIN)additions/
129 INST_ADDITIONS_ISO = $(INST_ADDITIONS)
130 INST_UNATTENDED_TEMPLATES = $(INST_BIN)UnattendedTemplates/
131
132 INST_LIB = lib/
133 INST_ADDITIONS_LIB = $(INST_LIB)additions/
134 VBOX_INST_DTRACE_LIB = $(INST_BIN)dtrace/lib/
135 VBOX_INST_DTRACE_TST = $(INST_BIN)dtrace/testcase/
136
137 INST_VBOXDBG_SYMS = $(INST_BIN)VBoxDbgSyms/
138 VBOX_INST_TOOLS = $(INST_BIN)tools/
139endif
140
141
142INST_VALIDATIONKIT = validationkit/
143INST_TESTBOXSCRIPT = testboxscript/
144
145INST_DOC = doc/
146INST_EXTPACK = $(INST_BIN)ExtensionPacks/
147INST_EXTPACK_CERTS = $(INST_BIN)ExtPackCertificates/
148INST_EXTPACK_PUEL = $(INST_EXTPACK)$(VBOX_PUEL_MANGLED_NAME)/
149INST_PACKAGES = packages/
150
151VBOX_PATH_SDK = $(patsubst %/,%,$(PATH_STAGE)/$(INST_SDK))
152VBOX_PATH_DIST = $(patsubst %/,%,$(PATH_STAGE)/$(INST_DIST))
153VBOX_PATH_VALIDATIONKIT = $(patsubst %/,%,$(PATH_STAGE)/$(INST_VALIDATIONKIT))
154VBOX_PATH_ADDITIONS = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS))
155VBOX_PATH_ADDITIONS_ISO = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS_ISO))
156VBOX_PATH_ADDITIONS_LIB = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS_LIB))
157VBOX_PATH_EXTPACK_PUEL= $(patsubst %/,%,$(PATH_STAGE)/$(INST_EXTPACK_PUEL))
158VBOX_PATH_PACKAGES = $(patsubst %/,%,$(PATH_STAGE)/$(INST_PACKAGES))
159VBOX_PATH_TOOLS = $(patsubst %/,%,$(PATH_STAGE)/$(VBOX_INST_TOOLS))
160
161
162# Delete targets on failure.
163.DELETE_ON_ERROR:
164
165# Notify about important kBuild updates.
166if $(KBUILD_VERSION_MAJOR) == 0 \
167 && ( $(KBUILD_VERSION_MINOR) >= 2 \
168 || ( $(KBUILD_VERSION_MINOR) == 1 \
169 && $(KBUILD_VERSION_PATCH) >= 999))
170 VBOX_MIN_KMK_REVISION := 3093
171 VBOX_MIN_KBUILD_KMK_REVISION := $(if-expr "$(KBUILD_HOST)" == "win",3097,3074)
172 if $(KMK_REVISION) >= $(VBOX_MIN_KMK_REVISION)
173 if $(KBUILD_KMK_REVISION) >= $(VBOX_MIN_KBUILD_KMK_REVISION)
174 # OK.
175 else
176 $(error You must update kBuild! Requires kBuild binaries $(VBOX_MIN_KBUILD_KMK_REVISION) or later, kmk says $(KBUILD_KMK_REVISION) ($(KBUILD_VERSION)))
177 endif
178 else
179 $(error You must update kBuild! Requires kBuild revision $(VBOX_MIN_KMK_REVISION) or later, found $(KMK_REVISION) ($(KBUILD_VERSION)))
180 endif
181else
182 $(error You must update kBuild! Requires 0.1.999 or later, found $(KBUILD_VERSION))
183endif
184
185#
186# Define USERNAME early on.
187#
188ifndef USERNAME
189 ifdef USER
190 USERNAME = $(USER)
191 else
192 $(warning Warning: You must have USERNAME or USER in your environment.)
193 endif
194endif
195
196#
197# Detect the darwin host version number so we can disable stuff that doesn't
198# currently build on Lion.
199#
200ifeq ($(KBUILD_HOST),darwin)
201 VBOX_DARWIN_HOST_VERSION := $(subst ., ,$(shell uname -r))
202 VBOX_DARWIN_HOST_VERSION_MAJOR := $(expr $(word 1, $(VBOX_DARWIN_HOST_VERSION)) - 4)
203 VBOX_DARWIN_HOST_VERSION_MINOR := $(word 2, $(VBOX_DARWIN_HOST_VERSION))
204 VBOX_DARWIN_HOST_VERSION_PATCH := $(word 3, $(VBOX_DARWIN_HOST_VERSION))
205 VBOX_DARWIN_HOST_VERSION := 10.$(VBOX_DARWIN_HOST_VERSION_MAJOR).$(VBOX_DARWIN_HOST_VERSION_MINOR)
206endif
207
208include $(PATH_ROOT)/Version.kmk
209
210# The raw version string. This *must not* contain any other information/fields than
211# major, minor and build revision (as it is now) -- also will be used for host/guest version
212# comparison.
213VBOX_VERSION_STRING_RAW = $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
214# Full version string (may include more than just x.y.z, but no spaces or other problematic chars).
215# Note! The BETA[n],ALPHA[n],RC[n] indicators should be inserted before the
216# publisher so that RTStrVersionCompare have a chance of comparing
217# prerelease from different publishers correctly.
218VBOX_VERSION_STRING = $(VBOX_VERSION_STRING_RAW)$(addprefix _,$(VBOX_VERSION_PRERELEASE))$(VBOX_BUILD_PUBLISHER)
219
220# Force the additions.sh script to get an exact additions build when we're doing the release.
221ifeq ($(int-mod $(VBOX_VERSION_BUILD),2),0)
222 ifeq ($(VBOX_VERSION_PRERELEASE),)
223 VBOX_RELEASE_EXACT_MATCH=1
224 endif
225endif
226ifneq ($(VBOX_RELEASE_EXACT_MATCH),)
227 export VBOX_ADDITIONS_SH_MODE = release
228 export VBOX_DOCUMENTATION_SH_MODE = release
229 export VBOX_EFI_SH_MODE = release
230 export VBOX_EXTPACKS_SH_MODE = release
231endif
232
233# Some info on the vendor
234VBOX_VENDOR = Oracle Corporation
235VBOX_VENDOR_SHORT = Oracle
236VBOX_PRODUCT = Oracle VM VirtualBox
237# Not all could be done automatically. Here is a list of known places which
238# have to be updated manually, please keep this up to date:
239# src/VBox/Devices/PC/PXE/client/uinit.asm
240# src/VBox/RDP/webclient/flash/com/sun/network/rdp/Version.as
241# src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
242# src/VBox/Frontends/VirtualBox/src/settings/global/VBoxGLSettingsLanguage.cpp
243# src/VBox/Frontends/VirtualBox/nls/*.ts
244# debian/control
245# src/VBox/Installer/linux/{debian,rpm}
246# src/VBox/Installer/linux/virtualbox.desktop
247# src/VBox/Additions/WINNT/Installer/ISO/ReadmeDrivers.txt
248# */*.inf, */*.rc
249
250# Maybe we want set this manually.
251VBOX_C_YEAR = $(date-utc %Y)
252
253#
254# The VirtualBox package type.
255#
256ifeq ($(KBUILD_TARGET),win)
257 VBOX_PACKAGE_OS = WINDOWS
258else ifeq ($(KBUILD_TARGET),linux)
259 VBOX_PACKAGE_OS = LINUX
260else ifeq ($(KBUILD_TARGET),darwin)
261 VBOX_PACKAGE_OS = DARWIN
262else ifeq ($(KBUILD_TARGET),solaris)
263 VBOX_PACKAGE_OS = SOLARIS
264else ifeq ($(KBUILD_TARGET),os2)
265 VBOX_PACKAGE_OS = OS2
266else ifeq ($(KBUILD_TARGET),haiku)
267 VBOX_PACKAGE_OS = HAIKU
268else if1of ($(KBUILD_TARGET), dragonfly freebsd netbsd openbsd)
269 VBOX_PACKAGE_OS = BSD
270else
271 $(error Cannot determine VBOX_PACKAGE_OS)
272endif
273ifeq ($(KBUILD_TARGET_ARCH),x86)
274 VBOX_PACKAGE_ARCH = 32BITS
275else
276 VBOX_PACKAGE_ARCH = 64BITS
277endif
278# distribution, mostly for Linux/Solaris where we support different distributions
279# this strip will be overridden by the Linux packaging scripts
280VBOX_PACKAGE_DIST ?= GENERIC
281# Full string
282VBOX_PACKAGE_STRING = $(VBOX_PACKAGE_OS)_$(VBOX_PACKAGE_ARCH)_$(VBOX_PACKAGE_DIST)
283
284
285#
286# The VirtualBox Configuration Defaults.
287#
288# We try to document all the build configuration options here, thing which
289# aren't enabled by default is left commented out just to show that they
290# exist and which value they should have (usually 1, but anyway).
291#
292
293# Select new Xcode based on host OS X version.
294ifeq ($(KBUILD_HOST),darwin)
295 if !defined(VBOX_WITH_NEW_XCODE) && !defined(VBOX_WITHOUT_NEW_XCODE) && $(KBUILD_HOST_VERSION_MAJOR) >= 13 # (OS X 10.9 Mavericks)
296 VBOX_WITH_NEW_XCODE = 1
297 endif
298endif
299
300## @name Additions
301## @{
302# This indicates that additions (of some kind or another) is being _built_.
303# VBOX_WITHOUT_ADDITIONS overrides it.
304VBOX_WITH_ADDITIONS = 1
305# Build the optional ring-0 part of the additions for syntax checking.
306# On linux we build this as a test case instead.
307ifneq ($(KBUILD_TARGET), linux)
308 VBOX_WITH_ADDITION_DRIVERS = 1
309endif
310# Build X11 additions. Can be disabled separately.
311if1of ($(KBUILD_TARGET), dragonfly freebsd linux netbsd openbsd solaris)
312 VBOX_WITH_X11_ADDITIONS = 1
313endif
314# Enable the building of shared folders in the windows additions.
315VBOX_WITH_WIN32_ADDITIONS_SHAREDFOLDERS = 1
316# Take the binaries of the OS/2 Additions.
317VBOX_WITH_OS2_ADDITIONS_BIN = 1
318# Use additions from the build server.
319#VBOX_WITH_ADDITIONS_FROM_BUILD_SERVER = 1
320# Include additions in the package
321VBOX_WITH_ADDITIONS_PACKING = 1
322# Only build the additions (for the additions build server).
323#VBOX_ONLY_ADDITIONS = 1
324ifdef VBOX_ADDITIONS_ONLY # typical mistake.
325 $(error It is VBOX_ONLY_ADDITIONS=1 not VBOX_ADDITIONS_ONLY!)
326endif
327# Don't bother with additions, overrides VBOX_WITH_ADDITIONS.
328# This is not used by makefiles, only Config.kmk, see below.
329ifdef VBOX_ONLY_SDK
330 VBOX_WITHOUT_ADDITIONS = 1
331endif
332# Don't create the additions ISO.
333# (Used by the additions build server, don't invert it.)
334#VBOX_WITHOUT_ADDITIONS_ISO = 1
335## @}
336
337## @name Documentation
338## @{
339# The documentation
340VBOX_WITH_DOCS = 1
341# Use documentation from the build server.
342#VBOX_WITH_DOCS_FROM_BUILD_SERVER = 1
343# Include documentation in the package
344VBOX_WITH_DOCS_PACKING = 1
345# Include CHM when building docs (unset in LocalConfig.kmk to suppress CHM)
346if1of ($(KBUILD_TARGET), win)
347 VBOX_WITH_DOCS_CHM = 1
348endif
349# By default only include translations in documentation-only builds
350ifdef VBOX_ONLY_DOCS
351 ifndef VBOX_NO_DOCS_TRANSLATIONS
352 VBOX_WITH_DOCS_TRANSLATIONS = 1
353 endif
354endif
355# Default languages
356VBOX_MANUAL_LANGUAGES = en_US
357ifdef VBOX_WITH_DOCS_TRANSLATIONS
358 VBOX_MANUAL_ADD_LANGUAGES = fr_FR
359endif
360# Don't bother with documentation, overrides VBOX_WITH_DOCS.
361# This is not used by makefiles, only Config.kmk, see below.
362#VBOX_WITHOUT_DOCS = 1
363# Only build the documentation (for the documentation build server).
364#VBOX_ONLY_DOCS = 1
365ifdef VBOX_DOCS_ONLY # typical mistake.
366 $(error It is VBOX_ONLY_DOCS=1 not VBOX_DOCS_ONLY!)
367endif
368## @}
369
370## @name VMM related settings.
371## @{
372# Enable the tradition raw-mode virtualization.
373if !$(intersects $(KBUILD_TARGET), darwin) || defined(VBOX_ONLY_EXTPACKS)
374 VBOX_WITH_RAW_MODE = 1
375endif
376# Enable the ring-1 compression option (mainly for QNX).
377VBOX_WITH_RAW_RING1 = 1
378# Enable safe STR (store task register) emulation for raw-mode.
379VBOX_WITH_SAFE_STR = 1
380# Enable support for 64-bit guests.
381VBOX_WITH_64_BITS_GUESTS = 1
382# Enable multi-core VCPUs.
383VBOX_WITH_MULTI_CORE = 1
384# Activate this to force the VM to pre-allocate the guest RAM before startup
385VBOX_WITH_PREALLOC_RAM_BY_DEFAULT =
386# Enable the debugger.
387VBOX_WITH_DEBUGGER = 1
388# Enable the debugger GUI.
389VBOX_WITH_DEBUGGER_GUI = 1
390# Enables the second step using IEM (the interpreter).
391VBOX_WITH_2ND_IEM_STEP = 1
392# Enables the third step using IEM (the interpreter).
393VBOX_WITH_3RD_IEM_STEP = 1
394# Enables nested hardware virtualization support
395#VBOX_WITH_NESTED_HWVIRT = 1
396# Enables nested hardware virtualization support only in IEM
397#VBOX_WITH_NESTED_HWVIRT_ONLY_IN_IEM = 1
398ifdef VBOX_WITH_NESTED_HWVIRT_ONLY_IN_IEM
399 ifndef VBOX_WITH_NESTED_HWVIRT
400 VBOX_WITH_NESTED_HWVIRT = 1
401 endif
402endif
403## @}
404
405
406## @name Devices, Drivers, ...
407## @{
408# Build the Host Guest Communication Manager component.
409VBOX_WITH_HGCM = 1
410## Build the bugcheck detection code.
411#VBOX_WITH_GUEST_BUGCHECK_DETECTION =
412# Enable the USB feature. This includes VBOX_WITH_VUSB!
413VBOX_WITH_USB = 1
414# Enable the USB 1.1 controller plus virtual USB HID devices.
415VBOX_WITH_VUSB = 1
416# Enable the USB 2.0 controller.
417VBOX_WITH_EHCI = 1
418# Enable the ISCSI feature.
419VBOX_WITH_ISCSI = 1
420# Enable INIP support in the ISCSI feature.
421VBOX_WITH_INIP = 1
422# Enables lwip as a core of NAT service
423VBOX_WITH_LWIP_NAT = 1
424# Enables compilation of NAT service
425VBOX_WITH_NAT_SERVICE = 1
426# Enable the E1000 feature.
427VBOX_WITH_E1000 = 1
428# Enable the Virtio feature.
429VBOX_WITH_VIRTIO = 1
430ifn1of ($(KBUILD_TARGET), win darwin)
431 # Enable OSS audio support.
432 VBOX_WITH_AUDIO_OSS = 1
433endif
434if1of ($(KBUILD_TARGET), linux)
435 # Enable ALSA audio support.
436 VBOX_WITH_AUDIO_ALSA = 1
437endif
438if1of ($(KBUILD_TARGET), linux)
439 # Enable PulseAudio audio support.
440 VBOX_WITH_AUDIO_PULSE = 1
441endif
442# Enable building debugging backend.
443# Only will be used at runtime when "VBoxInternal2/Audio/Debug/Enabled" (VM / global) is set.
444VBOX_WITH_AUDIO_DEBUG = 1
445# Enables the audio endpoint detection on Windows hosts.
446VBOX_WITH_AUDIO_MMNOTIFICATION_CLIENT = 1
447# Enable PCI passthrough support.
448VBOX_WITH_PCI_PASSTHROUGH = 1
449# Enable statically linked dbus support.
450if1of ($(KBUILD_TARGET), linux solaris)
451 VBOX_WITH_DBUS = 1
452endif
453# Enable building PAM modules.
454if1of ($(KBUILD_TARGET), linux solaris)
455 VBOX_WITH_PAM = 1
456endif
457# Enable internal networking.
458VBOX_WITH_INTERNAL_NETWORKING = 1
459# Enable vmsvga (svga2) graphics device variant, 2D part
460VBOX_WITH_VMSVGA = 1
461# Enable vmsvga (svga2) graphics device variant, 3D part
462if1of ($(KBUILD_TARGET), darwin win)
463 VBOX_WITH_VMSVGA3D = 1
464endif
465# Enable Host Guest Shared Memory Interface.
466VBOX_WITH_HGSMI = 1
467# Enable Video 2D Acceleration.
468if1of ($(KBUILD_TARGET), darwin linux win freebsd)
469 VBOX_WITH_VIDEOHWACCEL = 1
470endif
471# Enable Wddm Video driver for Vista+ guests.
472VBOX_WITH_WDDM = 1
473# Enable Wddm Video driver for Windows 8 guests.
474VBOX_WITH_WDDM_W8 = 1
475# Lazy developer!!
476VBOXWDDM_WITH_VBVA = 1
477# Lazy developer!!
478ifdef VBOX_WITH_WDDM
479 VBOX_WITH_VDMA = 1
480else ifdef VBOX_WITH_VDMA
481 undef VBOX_WITH_VDMA
482endif
483# Disable the Intel PXE ROM (uses Etherboot).
484VBOX_WITH_INTEL_PXE =
485# Enable EFI support
486VBOX_WITH_EFI = 1
487# Fetch EFI firmware image from the build server
488#VBOX_WITH_EFIFW_FROM_BUILD_SERVER = 1
489# Include the EFI firmware into the package
490VBOX_WITH_EFIFW_PACKING = 1
491# Use kStuff for MACH-O and LX binary loading.
492if1of ($(KBUILD_TARGET_ARCH), x86 amd64)
493 IPRT_WITH_KSTUFF = 1
494endif
495# Enable setuid wrapper for Solaris host DVD.
496#VBOX_WITH_SUID_WRAPPER = 1
497# Enable the virtual SATA/AHCI controller
498VBOX_WITH_AHCI = 1
499# Enable the new async completion manager
500VBOX_WITH_PDM_ASYNC_COMPLETION = 1
501ifdef VBOX_WITH_USB
502 VBOX_WITH_VUSB = 1
503 VBOX_WITH_XHCI_IMPL=1
504endif
505ifdef VBOX_WITH_EHCI
506 VBOX_WITH_EHCI_IMPL = 1
507endif
508ifdef VBOX_WITH_PCI_PASSTHROUGH
509 VBOX_WITH_PCI_PASSTHROUGH_IMPL = 1
510endif
511ifndef VBOX_WITHOUT_HOSTWEBCAM
512 VBOX_WITH_USB_VIDEO_IMPL = 1
513endif
514# Enable the hal/sysfs USB code on Linux.
515ifeq ($(KBUILD_TARGET),linux)
516 VBOX_USB_WITH_SYSFS = 1
517 # Disabled for now
518 # VBOX_USB_WITH_DBUS = 1
519 VBOX_USB_WITH_INOTIFY = 1
520endif
521# Enable performance API.
522VBOX_WITH_RESOURCE_USAGE_API = 1
523# Use VBoxVolInfo for getting FS dependecies.
524if1of ($(KBUILD_TARGET), linux)
525 VBOX_WITH_DEVMAPPER = 1
526endif
527# Enable unattended installation API
528VBOX_WITH_UNATTENDED = 1
529# Enable BusLogic SCSI host adapter
530VBOX_WITH_BUSLOGIC = 1
531# Enable LsiLogic SCSI host adapter
532VBOX_WITH_LSILOGIC = 1
533# Enable SCSI drivers
534VBOX_WITH_SCSI = 1
535# Enable this setting to force a fallback to default DMI data on configuration errors
536VBOX_BIOS_DMI_FALLBACK =
537# Enable the builtin PXE ROM
538VBOX_WITH_PXE_ROM = 1
539# Enable MSI support in devices
540VBOX_WITH_MSI_DEVICES = 1
541# Enable host network interface API.
542if1of ($(KBUILD_TARGET), darwin freebsd linux solaris win)
543 VBOX_WITH_HOSTNETIF_API = 1
544endif
545# Emulated USB smart card reader
546VBOX_WITH_USB_CARDREADER = 1
547# Disk crypt plugin
548VBOX_WITH_PLUGIN_CRYPT = 1
549# VirtualKD stub/loader device, only relevant on Windows host
550VBOX_WITH_VIRTUALKD = 1
551# NVMe device emulation
552VBOX_WITH_NVME_IMPL = 1
553# Storage related debug driver - Windows disabled because of some linker issue
554ifn1of ($(KBUILD_TARGET), win)
555 VBOX_WITH_DRV_DISK_INTEGRITY = 1
556endif
557## @}
558
559# legacy
560ifdef VBOX_ONLY_TESTSUITE
561 $(warning VBOX_ONLY_TESTSUITE was renamed to VBOX_ONLY_VALIDATIONKIT)
562 VBOX_ONLY_VALIDATIONKIT = $(VBOX_ONLY_TESTSUITE)
563endif
564
565## @name Other Component
566## @{
567# Build the installer.
568VBOX_WITH_INSTALLER = 1
569# The kernel driver/module and related runtime libraries.
570# On Linux we build this as a test case instead.
571ifneq ($(KBUILD_TARGET), linux)
572 VBOX_WITH_VBOXDRV = 1
573endif
574# The main api.
575VBOX_WITH_MAIN = 1
576# Enables proxy stub for MS COM (speeds up setting IPC for objects).
577# (The VBOX_MIDL_PROXY_CLSID and VBOX_MIDL_PROXY_CLSID_IS are just two
578# representations of the class ID for the proxy stub.)
579VBOX_WITH_MIDL_PROXY_STUB = 1
580VBOX_MIDL_PROXY_CLSID := {0bb3b78c-1807-4249-5ba5-ea42d66af0bf}
581VBOX_MIDL_PROXY_CLSID_IS := {0x0bb3b78c,0x1807,0x4249,{0x5b,0xa5,0xea,0x42,0xd6,0x6a,0xf0,0xbf}}
582# Whether to also ship 32-bit main API on 64-bit systems.
583if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), solaris.amd64 win.amd64)
584 if !defined(VBOX_ONLY_VALIDATIONKIT) && !defined(VBOX_ONLY_ADDITIONS) && !defined(VBOX_ONLY_DOCS)
585 VBOX_WITH_32_ON_64_MAIN_API = 1
586 endif
587endif
588# Whether to generate a database of USB vendor IDs and device IDs into VBoxSVC.
589VBOX_WITH_MAIN_USB_ID_DATABASE = 1
590# The recompiler.
591if !defined(VBOX_WITH_NEW_XCODE) || "$(KBUILD_TARGET)" != "darwin"
592 VBOX_WITH_REM = 1
593endif
594# Set this to prefix all C symbols in XPCOM, to avoid dynamic linking problems
595# caused by our XPCOM library polluting the symbol namespace for system libs.
596if1of ($(KBUILD_TARGET), linux solaris)
597 VBOX_WITH_XPCOM_NAMESPACE_CLEANUP = 1
598endif
599# The webservices api.
600VBOX_WITH_WEBSERVICES = 1
601VBOX_WITH_WEBSERVICES_SSL = 1
602# The Qt GUI.
603VBOX_WITH_QTGUI = 1
604# Indicates the Qt is Cocoa based on the Mac.
605ifeq ($(KBUILD_TARGET),darwin)
606 VBOX_WITH_COCOA_QT = 1
607endif
608# HiDPI support for OS X
609VBOX_GUI_WITH_HIDPI = 1
610# The SDL based GUI.
611VBOX_WITH_VBOXSDL = 1
612# Build VBoxSDL with secure label support.
613ifeq ($(filter win.amd64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),) # too much work with freetype and all that.
614VBOX_WITH_SECURELABEL = 1
615endif
616# The headless frontend.
617VBOX_WITH_HEADLESS = 1
618# Enable the build of VRDP server.
619VBOX_WITH_VRDP = 1
620# Build the VRDP authentication modules.
621VBOX_WITH_VRDP_AUTHMOD = 1
622# Build enhanced version of rdesktop.
623VBOX_WITH_VRDP_RDESKTOP = 1
624## The Direct Framebuffer GUI.
625#VBOX_WITH_VBOXFB = 1
626# Enables the Python<->XPCOM, Python<->COM and (WS enabled) Python<->WS bindings.
627VBOX_WITH_PYTHON ?= 1
628# Enables the PERL<->WS binding (if WS enabled).
629#VBOX_WITH_PERL ?= 1
630# Enables the PHP<->WS binding (if WS enabled).
631VBOX_WITH_PHP ?= 1
632if1of ($(KBUILD_TARGET), darwin linux solaris)
633 # Enable Java<->XPCOM bridge + glue code
634 VBOX_WITH_JXPCOM ?= 1
635endif
636if1of ($(KBUILD_TARGET), )
637 # Enable Java<->MSCOM glue, bridge is provided by an external lib (Jacob)
638 VBOX_WITH_JMSCOM ?= 1
639endif
640if1of ($(KBUILD_TARGET), darwin linux solaris)
641 # Enable Java<->JAX-WS bridge
642 VBOX_WITH_JWS ?= 1
643endif
644# Use XPIDL instead of XSLT stylesheet
645VBOX_WITH_JAVA_SUPPORT_IN_XPIDL ?=
646# Build against multiple Python versions present in the system
647VBOX_WITH_MULTIVERSION_PYTHON ?= 1
648# Enable the kchmviewer.
649VBOX_WITH_KCHMVIEWER = 1
650# Build the Validation Kit.
651VBOX_WITH_VALIDATIONKIT = 1
652# Build the testcases.
653VBOX_WITH_TESTCASES = 1
654# Enable this to build vditool even if VBOX_WITH_TESTCASES is disabled
655VBOX_WITH_VDITOOL =
656# Enable this to build vbox-img even if VBOX_WITH_TESTCASES is disabled
657VBOX_WITH_VBOX_IMG =
658if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), darwin.x86 darwin.amd64 linux.x86 linux.amd64 solaris.amd64 win.x86 win.amd64)
659 # Enables the video capturing support.
660 VBOX_WITH_VIDEOREC = 1
661 # Enable VPX (VP8 / VP9 codec), used for video capturing.
662 VBOX_WITH_LIBVPX = 1
663 if1of ($(KBUILD_TYPE), debug dbgopt) # Not enabled for release builds yet.
664 # Enables audio support for VM video capturing.
665 VBOX_WITH_AUDIO_VIDEOREC = 1
666 # Enables libopus (Opus), used for encoding audio into VM video capturing files.
667 VBOX_WITH_LIBOPUS = 1
668 # Enable SEE (+ AVX) optimizations for Opus.
669 VBOX_WITH_OPUS_SSE = 1
670 endif
671endif
672# Enable shared folders
673VBOX_WITH_SHARED_FOLDERS = 1
674# Enable shared clipboard
675VBOX_WITH_SHARED_CLIPBOARD = 1
676# Enable the host/guest information service (aka guest properties).
677VBOX_WITH_GUEST_PROPS = 1
678# Enable this to prevent the guest from writing guest properties.
679VBOX_WITH_GUEST_PROPS_RDONLY_GUEST =
680# Compile the host channel
681VBOX_WITH_HOST_CHANNEL = 1
682# Enable the guest control service.
683if1of ($(KBUILD_TARGET), darwin freebsd linux solaris win)
684 VBOX_WITH_GUEST_CONTROL = 1
685endif
686# Enable ballooning
687VBOX_WITH_MEMBALLOON = 1
688# Enable crOpenGL service
689if1of ($(KBUILD_TARGET), darwin freebsd linux solaris win)
690 VBOX_WITH_CROGL = 1
691endif
692# Enable cURL (required for the network part of the GUI)
693VBOX_WITH_LIBCURL = 1
694# Enable Host=>Guest Drag'n'Drop
695if1of ($(KBUILD_TARGET), darwin linux solaris win)
696 VBOX_WITH_DRAG_AND_DROP = 1
697 if1of ($(KBUILD_TARGET), darwin linux solaris win)
698 VBOX_WITH_DRAG_AND_DROP_GH = $(VBOX_WITH_DRAG_AND_DROP)
699 endif
700 ifdef VBOX_WITH_DRAG_AND_DROP_GH
701 ifeq ($(KBUILD_TARGET),darwin)
702 # On OS X (Darwin) this needs to be set in order to get proper
703 # guest->host support.
704 # Note: Setting this requires Qt also having this feature enabled!
705 VBOX_WITH_DRAG_AND_DROP_PROMISES = $(VBOX_WITH_DRAG_AND_DROP)
706 endif
707 endif
708endif
709# Enable audio support for VRDE.
710VBOX_WITH_VRDE_AUDIO = 1
711# Use the VRDE external authentication library from VBoxSVC.
712if1of ($(KBUILD_TARGET), win)
713 VBOX_WITH_VRDEAUTH_IN_VBOXSVC = 1
714endif
715# Enables use of merge modules in the windows installer. This will increase
716# the overall installer size significantly because merge modules are not able
717# to use a common .cab file to reduce their size.
718#VBOX_WITH_MSM_INSTALL = 1
719## @}
720
721
722## @name Networking
723## @{
724# Use VBoxNetFlt for host interface networking.
725if1of ($(KBUILD_TARGET), darwin freebsd linux solaris win)
726 VBOX_WITH_NETFLT = 1
727 ifeq ($(KBUILD_TARGET),solaris)
728 # requires snv_159+.
729 VBOX_WITH_NETFLT_CROSSBOW = 1
730 endif
731 # Use VBoxNetAdp for host only networking.
732 if1of ($(KBUILD_TARGET), darwin freebsd linux solaris win)
733 VBOX_WITH_NETADP = 1
734 endif
735endif
736# Enables the UDP tunnel transport.
737VBOX_WITH_UDPTUNNEL = 1
738# Enable the netshaper support
739VBOX_WITH_NETSHAPER = 1
740# Enable Virtual Distributed Ethernet or not.
741if1of ($(KBUILD_TARGET), freebsd linux)
742 VBOX_WITH_VDE = 1
743endif
744## @}
745
746
747## @name Extension pack
748## @{
749# Enables the extension pack feature.
750VBOX_WITH_EXTPACK = 1
751# Enables separating code into the Oracle VM VirtualBox Extension Pack, dubbed PUEL.
752VBOX_WITH_EXTPACK_PUEL = 1
753# Enables building+packing the Oracle VM VirtualBox Extension Pack, includes VBOX_WITH_EXTPACK_PUEL
754VBOX_WITH_EXTPACK_PUEL_BUILD = 1
755# Enable the BusMouse sample extension pack.
756#VBOX_WITH_EXTPACK_BUSMOUSESAMPLE = 1
757# Enable the VNC server extension pack (GPL only).
758#VBOX_WITH_EXTPACK_VNC = 1
759# Enables the VBoxDTrace extension pack.
760VBOX_WITH_EXTPACK_VBOXDTRACE = 1
761## @}
762
763## @name Misc
764## @{
765# Enable to compile with OpenSSL 1.0 (only relevant for Windows, see src/VBox/Runtime/Makefile.kmk)
766#VBOX_WITH_OPENSSL_PRE_1_1 = 1
767# Enable Seamless mode
768VBOX_X11_SEAMLESS_GUEST = 1
769# Enables all the doxgen bits.
770VBOX_WITH_ALL_DOXYGEN_TARGETS = 1
771# Set this to skip installing the redistributable compiler runtime.
772#VBOX_WITHOUT_COMPILER_REDIST = 1
773# Enables VMMR0.r0 (++) loading using the native loader on solaris.
774# Good for debugging and analysis. Experimental.
775#VBOX_WITH_NATIVE_SOLARIS_LOADING = 1
776# Set this to enable user mode dtrace probes.
777if1of ($(KBUILD_TARGET), darwin linux solaris)
778 VBOX_WITH_DTRACE_R3 = 1
779 VBOX_WITH_DTRACE_R3_MAIN = 1
780endif
781# Set this to enable kernel driver dtrace probes.
782if1of ($(KBUILD_TARGET), darwin solaris)
783 VBOX_WITH_DTRACE_R0DRV = 1
784endif
785# Set this to enable dtrace probes in platform agnostic kernel code.
786ifn1of ($(KBUILD_TARGET), os2)
787 VBOX_WITH_DTRACE_R0 = 1
788endif
789# Set this to enable dtrace probes raw-mode context code.
790if1of ($(KBUILD_TARGET), linux solaris)
791 VBOX_WITH_DTRACE_RC = 1
792endif
793# Set this to enable support for dtrace probes in guest code.
794#VBOX_WITH_DTRACE_GST = 1
795# Set this to indicate that the host ships with DTrace.
796if1of ($(KBUILD_TARGET), darwin solaris)
797 VBOX_WITH_NATIVE_DTRACE = 1
798endif
799# Makes it possible to run some of the testcases and tools on older
800# windows versions (only define when buildling win.x86).
801#VBOX_WITH_MORE_NT4_COMPAT_BINARIES = 1
802## @}
803
804
805## @name Compiler and linker config
806## @{
807# For treating compiler and linker warnings as errors where possible.
808if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), darwin.x86 darwin.amd64 linux.x86 linux.amd64 win.x86 win.amd64)
809 VBOX_WITH_WARNINGS_AS_ERRORS = 1
810endif
811# Whether we can use Open Watcom to build stuff.
812if1of ($(KBUILD_TARGET), darwin linux os2 win)
813 VBOX_WITH_OPEN_WATCOM = 1
814endif
815## @}
816
817
818## @name Hardening
819## @{
820# Enables hardening.
821# Most developers will want to disable this in their LocalConfig.kmk.
822VBOX_WITH_HARDENING = 1
823# Where the application files are (going to be) installed.
824#VBOX_PATH_APP_PRIVATE = /usr/lib/virtualbox
825ifdef VBOX_WITH_HARDENING
826 if1of ($(KBUILD_TARGET), linux solaris)
827 VBOX_PATH_APP_PRIVATE = /opt/VirtualBox
828 else ifeq ($(KBUILD_TARGET),darwin)
829 VBOX_PATH_APP_PRIVATE = /Applications/VirtualBox.app/Contents/MacOS
830 else ifeq ($(KBUILD_TARGET),freebsd)
831 VBOX_PATH_APP_PRIVATE = /usr/local/lib/virtualbox
832 else ifeq ($(KBUILD_TARGET),haiku)
833 VBOX_PATH_APP_PRIVATE = /boot/system/apps/VirtualBox
834 endif
835endif
836# Where the architecture specific application files are (going to be) installed.
837#VBOX_PATH_APP_PRIVATE_ARCH = /usr/lib/virtualbox
838ifdef VBOX_WITH_HARDENING
839 if1of ($(KBUILD_TARGET), solaris)
840 VBOX_PATH_APP_PRIVATE_ARCH_TOP = $(VBOX_PATH_APP_PRIVATE)
841 VBOX_PATH_APP_PRIVATE_ARCH = $(VBOX_PATH_APP_PRIVATE_ARCH_TOP)/$(if-expr $(KBUILD_TARGET_ARCH) == "amd64",amd64,i386)
842 else ifdef VBOX_PATH_APP_PRIVATE
843 VBOX_PATH_APP_PRIVATE_ARCH = $(VBOX_PATH_APP_PRIVATE)
844 endif
845endif
846# Where the shared libraries are (going to be) installed.
847#VBOX_PATH_SHARED_LIBS = /usr/lib
848ifdef VBOX_WITH_HARDENING
849 if1of ($(KBUILD_TARGET), solaris)
850 VBOX_PATH_SHARED_LIBS = $(VBOX_PATH_APP_PRIVATE)/$(if-expr $(KBUILD_TARGET_ARCH) == "amd64",amd64,i386)
851 else ifdef VBOX_PATH_APP_PRIVATE
852 VBOX_PATH_SHARED_LIBS = $(VBOX_PATH_APP_PRIVATE)
853 endif
854endif
855# Where the documentation is (going to be) installed.
856#VBOX_PATH_APP_DOCS = /usr/share/doc/virtualbox
857ifdef VBOX_WITH_HARDENING
858 ifdef VBOX_PATH_APP_PRIVATE
859 VBOX_PATH_APP_DOCS = $(VBOX_PATH_APP_PRIVATE)
860 endif
861endif
862# The DT_RPATH/DT_RUNPATH to embed into the binaries (ELF).
863# (This one is used for all binaries, there is no need to adjust this
864# depending on the location of the object.)
865#VBOX_WITH_RUNPATH = /usr/lib/virtualbox
866ifdef VBOX_WITH_HARDENING
867 if1of ($(KBUILD_TARGET), solaris)
868 VBOX_WITH_RUNPATH = $(VBOX_PATH_APP_PRIVATE)/$(if-expr $(KBUILD_TARGET_ARCH) == "amd64",amd64,i386)
869 else if1of ($(KBUILD_TARGET), freebsd linux)
870 VBOX_WITH_RUNPATH = $(VBOX_PATH_APP_PRIVATE)
871 endif
872endif
873# Enable use of the $ORIGIN DT_RPATH/DT_RUNPATH feature (ELF).
874# Because of the setuid usage on all ELF platforms when hardening the build
875# things gets a bit complicated since the $ORIGIN+setuid policy differs.
876#VBOX_WITH_ORIGIN = 1
877ifndef VBOX_WITH_HARDENING
878 if1of ($(KBUILD_TARGET), linux solaris)
879 VBOX_WITH_ORIGIN = 1
880 endif
881endif
882# Enable the system wide support service/daemon.
883# Very sketchy work in progress.
884#VBOX_WITH_SUPSVC = 1
885
886# Continue to support Vista w/o any service pack, at least for now.
887VBOX_WITH_VISTA_NO_SP = 1
888## @}
889
890
891# Strip binaries of release and profile builds before packing them into the installer
892# archive. When building .deb/.rpms, don't strip the symbols as they are required for
893# the debug packages containing symbols for gdb located in /usr/lib/debug.
894VBOX_DO_STRIP := $(if $(filter release profile,$(KBUILD_TYPE)),1,)
895
896
897#
898# Config items for enabling work in progress.
899#
900# It's good pratice to add stuff here even if it is currently disabled by
901# default.
902#
903# Note! Please, do *not* add stuff to the global DEFS unless it is *really*
904# necessary! The other guys will hate for it you when they have to
905# recompile everything when the feature is enabled or disabled. Put
906# the ifdefs in target or template definitions.
907#
908
909# Mask all Local APIC interrupt vectors which are set up to NMI mode when switching
910# to/from the guest in raw mode. Modern Linux kernels use the performance counter
911# to raise an NMI from time to time.
912if1of ($(KBUILD_TARGET), linux)
913 VBOX_WITH_VMMR0_DISABLE_LAPIC_NMI = 1
914endif
915## For testing deadlock detection and lock order validation.
916# If issues are found, create high priority defects and temporarily comment
917# the next line.
918VBOX_WITH_STRICT_LOCKS = 1
919## VBoxSDS is the bridge windows service that sits between
920# VirtualBox object client and VBoxSVC that fixes problem
921# when multiple VBoxSVC starts for the same user
922# it is enabled for windows build only
923ifeq ($(KBUILD_TARGET),win)
924 VBOX_WITH_SDS =
925endif
926
927
928#
929# Branding
930#
931VBOX_BRAND_BIOS_LOGO := $(PATH_ROOT)/src/VBox/Devices/Graphics/BIOS/puel_logo.bmp
932VBOX_BRAND_LICENSE_HTML := $(PATH_ROOT)/doc/License-gpl-2.0.html
933VBOX_BRAND_LICENSE_RTF := $(PATH_ROOT)/doc/License-gpl-2.0.rtf
934VBOX_BRAND_LICENSE_TXT := $(PATH_ROOT)/doc/License-gpl-2.0.txt
935VBOX_BRAND_LICENSE_VER :=
936VBOX_BRAND_GUI_ABOUT_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/NonOSE/about.png
937VBOX_BRAND_GUI_ABOUT_HIDPI_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/hidpi/NonOSE/about_hidpi.png
938VBOX_BRAND_GUI_ABOUT_16PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/NonOSE/about_16px.png
939VBOX_BRAND_GUI_ABOUT_16PX_HIDPI_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/hidpi/NonOSE/about_16px_hidpi.png
940VBOX_BRAND_GUI_VBOX_16PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/NonOSE/VirtualBox_16px.png
941VBOX_BRAND_GUI_VBOX_20PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/NonOSE/VirtualBox_20px.png
942VBOX_BRAND_GUI_VBOX_32PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/NonOSE/VirtualBox_32px.png
943VBOX_BRAND_GUI_VBOX_40PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/NonOSE/VirtualBox_40px.png
944VBOX_BRAND_GUI_VBOX_48PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/NonOSE/VirtualBox_48px.png
945VBOX_BRAND_GUI_VBOX_64PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/NonOSE/VirtualBox_64px.png
946VBOX_BRAND_GUI_VBOX_SVG := $(PATH_ROOT)/src/VBox/Artwork/NonOSE/virtualbox.svg
947VBOX_BRAND_WIN_INST_DLGJPG := $(PATH_ROOT)/src/VBox/Installer/win/Binary/Dialog.jpg
948VBOX_BRAND_WIN_INST_EXT :=
949VBOX_BRAND_WIN_ADD_INST_DLGBMP := $(PATH_ROOT)/src/VBox/Additions/WINNT/Installer/welcome.bmp
950VBOX_BRAND_DARWIN_DISKIMAGE_DS_STORE := $(PATH_ROOT)/src/VBox/Installer/darwin/DiskImage/DS_Store
951VBOX_BRAND_DARWIN_DISKIMAGE_BG := $(PATH_ROOT)/src/VBox/Installer/darwin/DiskImage/vbox_folder.tiff
952VBOX_BRAND_DARWIN_INSTALLER_BG := $(PATH_ROOT)/src/VBox/Installer/darwin/VirtualBox_mpkg/background.tif
953
954#
955# Skip stuff.
956#
957
958ifdef VBOX_ONLY_EXTPACKS
959 # Clear some VBOX_WITH_XXX variables instead of adding ifdefs all over the place.
960 VBOX_WITH_DEBUGGER =
961 VBOX_WITH_ADDITIONS =
962 VBOX_WITH_VBOXDRV =
963 VBOX_WITH_TESTCASES =
964endif
965
966# VBOX_QUICK can be used by core developers to speed to the build
967ifdef VBOX_QUICK
968 # undefine variables by assigning blank.
969 VBOX_WITH_VALIDATIONKIT=
970 VBOX_WITH_TESTCASES=
971 VBOX_WITH_MAIN=
972 VBOX_WITH_VBOXSDL=
973 VBOX_WITH_QTGUI=
974 VBOX_WITH_DEBUGGER_GUI=
975 VBOX_WITH_DOCS=
976endif # VBOX_QUICK
977
978ifeq ($(KBUILD_TARGET),darwin)
979 # Don't bother with SDL ttf for now.
980 VBOX_WITH_SECURELABEL=
981 # We'll use the native html/help viewer.
982 VBOX_WITH_KCHMVIEWER=
983 VBOX_WITH_VRDP_RDESKTOP=
984 # Permanent (no working SDL).
985 VBOX_WITH_VBOXSDL=
986endif
987
988ifeq ($(KBUILD_TARGET),freebsd)
989 VBOX_WITH_DOCS=
990endif
991
992ifeq ($(KBUILD_TARGET),haiku)
993 # Don't bother with SDL ttf for now.
994 VBOX_WITH_SECURELABEL=
995 # We'll use the native html/help viewer.
996 VBOX_WITH_KCHMVIEWER=
997 VBOX_WITH_VRDP_RDESKTOP=
998 # Permanent (no working SDL).
999 VBOX_WITH_VBOXSDL=
1000 VBOX_WITH_DOCS=
1001 VBOX_WITH_VBOXDRV=
1002 VBOX_WITH_VRDP=
1003 VBOX_WITH_HEADLESS=
1004 VBOX_WITH_VBOXSDL=
1005 VBOX_WITH_QTGUI=
1006# VBOX_WITH_MAIN=
1007 VBOX_WITH_DOCS=
1008 VBOX_WITH_ISCSI=
1009 VBOX_WITH_INIP=
1010 VBOX_WITH_INTERNAL_NETWORKING=
1011 VBOX_WITH_PDM_ASYNC_COMPLETION=
1012 VBOX_WITH_KCHMVIEWER=
1013 VBOX_WITH_HARDENING=
1014endif
1015
1016
1017ifeq ($(KBUILD_TARGET),os2)
1018 VBOX_WITH_WEBSERVICES=
1019 VBOX_WITH_INSTALLER=
1020 VBOX_WITH_SECURELABEL=
1021 VBOX_WITH_VRDP_AUTHMOD=
1022 VBOX_WITH_VRDP_RDESKTOP=
1023 VBOX_WITH_VALIDATIONKIT=
1024 VBOX_WITH_QTGUI=
1025 VBOX_WITH_USB=
1026 VBOX_WITH_EHCI=
1027 VBOX_WITH_DOCS=
1028 VBOX_WITH_PDM_ASYNC_COMPLETION=
1029 VBOX_WITH_KCHMVIEWER=
1030 VBOX_WITH_HARDENING=
1031endif
1032
1033ifeq ($(KBUILD_TARGET),solaris)
1034 VBOX_WITH_SECURELABEL=
1035 VBOX_WITH_OGL=
1036endif
1037
1038ifeq ($(KBUILD_TARGET),win)
1039 VBOX_WITH_VRDP_RDESKTOP=
1040 VBOX_WITH_KCHMVIEWER=
1041endif
1042
1043ifn1of ($(KBUILD_TARGET_ARCH), x86 amd64)
1044 VBOX_WITH_ADDITION_DRIVERS=
1045 VBOX_WITH_CROGL=
1046 VBOX_WITH_DEBUGGER=
1047 VBOX_WITH_DOCS=
1048 VBOX_WITH_EHCI=
1049 VBOX_WITH_HARDENING=
1050 VBOX_WITH_HEADLESS=
1051 VBOX_WITH_HGCM=
1052 VBOX_WITH_HGSMI=
1053 VBOX_WITH_INIP=
1054 VBOX_WITH_INSTALLER=
1055 VBOX_WITH_INTERNAL_NETWORKING=
1056 VBOX_WITH_ISCSI=
1057 VBOX_WITH_KCHMVIEWER=
1058 VBOX_WITH_MAIN=
1059 VBOX_WITH_PDM_ASYNC_COMPLETION=
1060 VBOX_WITH_QTGUI=
1061 VBOX_WITH_RAW_MODE=
1062 VBOX_WITH_SECURELABEL=
1063 VBOX_WITH_VALIDATIONKIT=
1064 VBOX_WITH_USB=
1065 VBOX_WITH_VBOXDRV=
1066 VBOX_WITH_VBOXSDL=
1067 VBOX_WITH_WEBSERVICES=
1068 VBOX_WITH_XPCOM=
1069 VBOX_WITHOUT_HARDENING=1
1070 # remove later:
1071 VBOX_WITH_VRDP=
1072 VBOX_WITH_VRDP_AUTHMOD=
1073 VBOX_WITH_VRDP_RDESKTOP=
1074endif
1075
1076
1077#
1078# Include automatic and local config file to override the above settings
1079# and to provide defaults for the settings below this point.
1080#
1081ifndef AUTOCFG
1082 AUTOCFG := $(wildcard $(PATH_ROOT)/AutoConfig.kmk)
1083endif
1084ifneq ($(AUTOCFG),)
1085 include $(AUTOCFG)
1086endif
1087
1088ifndef LOCALCFG
1089 LOCALCFG := $(wildcard $(PATH_ROOT)/LocalConfig.kmk)
1090 ifneq ($(LOCALCFG),)
1091 include $(LOCALCFG)
1092 endif
1093else
1094 # Ignore it if it doesn't exist.
1095 if exists "$(LOCALCFG)"
1096 include $(LOCALCFG)
1097 else
1098 $(warning LOCALCFG='$(LOCALCFG)' does not exist)
1099 override LOCALCFG :=
1100 endif
1101endif
1102
1103#
1104# Allow to overwrite the branding information from an external file
1105#
1106ifdef VBOX_BRANDING_CFG
1107 include $(VBOX_BRANDING_CFG)
1108endif
1109
1110#
1111# Bitch about old settings.
1112#
1113ifdef VBOX_WITHOUT_LINUX_COMPILER_H
1114 $(warning VBOX_WITHOUT_LINUX_COMPILER_H was renamed to VBOX_WITH_LINUX_COMPILER_H, the meaning is inverted.)
1115endif
1116
1117#
1118# Indicate VBOX_ONLY build if any of the VBOX_ONLY_* variables are set.
1119#
1120VBOX_ONLY_BUILD := $(strip $(foreach x, ADDITIONS DOCS EXTPACKS SDK VALIDATIONKIT\
1121 , $(if-expr defined(VBOX_ONLY_$(x)),VBOX_ONLY_$(x))))
1122if $(words $(VBOX_ONLY_BUILD)) > 1
1123 $(error VBox: More than one VBOX_ONLY build enabled! $(VBOX_ONLY_BUILD))
1124endif
1125
1126#
1127# For the docs build box.
1128#
1129ifdef VBOX_ONLY_DOCS
1130 VBOX_WITH_DOCS_CHM = 1
1131endif
1132
1133#
1134# Disable components that are not open sourced.
1135#
1136ifdef VBOX_OSE
1137 VBOX_WITH_VRDP=
1138 VBOX_WITH_EHCI_IMPL=
1139 VBOX_WITH_XHCI_IMPL=
1140 VBOX_WITH_USB_VIDEO_IMPL=
1141 VBOX_WITH_NVME_IMPL=
1142 VBOX_WITH_EXTPACK_PUEL=
1143 VBOX_WITH_EXTPACK_PUEL_BUILD=
1144 VBOX_WITH_PCI_PASSTHROUGH_IMPL=
1145 VBOX_WITH_OS2_ADDITIONS_BIN=
1146 # not yet
1147 VBOX_WITH_SECURELABEL=
1148 VBOX_WITH_KCHMVIEWER=
1149 VBOX_WITH_PLUGIN_CRYPT=
1150 VBOX_WITH_DRAG_AND_DROP_PROMISES=
1151 ifn1of ($(KBUILD_TARGET), linux)
1152 VBOX_WITH_DOCS=
1153 VBOX_WITH_DOCS_PACKING=
1154 endif
1155 if1of ($(KBUILD_TARGET), solaris)
1156 VBOX_WITH_32_ON_64_MAIN_API=
1157 endif
1158 if1of ($(KBUILD_TARGET), win)
1159 # tar/gzip uncommon on Windows
1160 VBOX_WITH_EXTPACK_VBOXDTRACE=
1161 endif
1162 # Enable any translations in OSE, even partial ones.
1163 ifndef ($(VBOX_NO_DOCS_TRANSLATIONS))
1164 VBOX_WITH_DOCS_TRANSLATIONS = 1
1165 endif
1166 VBOX_WITH_INTEL_PXE=
1167 # Disable for OSE, requires snv_159+.
1168 VBOX_WITH_NETFLT_CROSSBOW=
1169 ifn1of ($(KBUILD_TARGET), darwin linux solaris win)
1170 VBOX_WITH_INSTALLER=
1171 endif
1172 if1of ($(KBUILD_TARGET), win)
1173 # Undefine codec libraries which are not needed.
1174 VBOX_WITH_LIBVPX=
1175 VBOX_WITH_LIBOPUS=
1176 # Disable video recording (with audio support).
1177 VBOX_WITH_VIDEOREC=
1178 VBOX_WITH_AUDIO_VIDEOREC=
1179 endif
1180 VBOX_GUI_WITH_HIDPI=
1181 # branding
1182 VBOX_BRAND_LICENSE_HTML := $(PATH_ROOT)/doc/License-gpl-2.0.html
1183 VBOX_BRAND_LICENSE_RTF := $(PATH_ROOT)/doc/License-gpl-2.0.rtf
1184 VBOX_BRAND_LICENSE_TXT := $(PATH_ROOT)/doc/License-gpl-2.0.txt
1185 VBOX_BRAND_BIOS_LOGO := $(PATH_ROOT)/src/VBox/Devices/Graphics/BIOS/ose_logo.bmp
1186 VBOX_BRAND_GUI_ABOUT_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/about.png
1187 VBOX_BRAND_GUI_ABOUT_HIDPI_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/about_hidpi.png
1188 VBOX_BRAND_GUI_ABOUT_16PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/about_16px.png
1189 VBOX_BRAND_GUI_ABOUT_16PX_HIDPI_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/about_16px.png
1190 VBOX_BRAND_GUI_VBOX_16PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_16px.png
1191 VBOX_BRAND_GUI_VBOX_20PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_20px.png
1192 VBOX_BRAND_GUI_VBOX_32PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_32px.png
1193 VBOX_BRAND_GUI_VBOX_40PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_40px.png
1194 VBOX_BRAND_GUI_VBOX_48PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_48px.png
1195 VBOX_BRAND_GUI_VBOX_64PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_64px.png
1196 VBOX_BRAND_GUI_CUBE_42PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_cube_42px.png
1197 VBOX_BRAND_GUI_VBOX_SVG := $(PATH_ROOT)/src/VBox/Artwork/OSE/virtualbox.svg
1198endif
1199
1200#
1201# VBOX_WITHOUT_HARDENING is for developers (put in LocalConfig.kmk).
1202# Note that this is a bit rough since hardening governs more than one
1203# variable... Also note that we allow VBOX_WITH_HARDENING=1 on the
1204# command line to overrule VBOX_WITHOUT_HARDENING (the check below).
1205#
1206ifdef VBOX_WITHOUT_HARDENING
1207 VBOX_WITH_HARDENING=
1208 ifeq ($(VBOX_WITH_HARDENING),)
1209 VBOX_PATH_APP_PRIVATE=
1210 VBOX_PATH_APP_PRIVATE_ARCH=
1211 VBOX_PATH_APP_PRIVATE_ARCH_TOP=
1212 VBOX_PATH_SHARED_LIBS=
1213 VBOX_PATH_APP_DOCS=
1214 VBOX_WITH_RUNPATH=
1215 if1of ($(KBUILD_TARGET), linux solaris)
1216 VBOX_WITH_ORIGIN=1
1217 endif
1218 endif
1219endif
1220
1221#
1222# Sanitize the additions build config variables.
1223#
1224ifdef VBOX_WITH_ADDITIONS_FROM_BUILD_SERVER
1225 VBOX_WITHOUT_ADDITIONS := 1
1226 ifdef VBOX_ONLY_ADDITIONS
1227 $(error VBOX_ONLY_ADDITIONS + VBOX_WITH_ADDITIONS_FROM_BUILD_SERVER does not add up!)
1228 endif
1229endif
1230
1231ifdef VBOX_ONLY_ADDITIONS
1232 ifdef VBOX_WITHOUT_ADDITIONS
1233 $(error VBOX_ONLY_ADDITIONS + VBOX_WITHOUT_ADDITIONS does not add up!)
1234 endif
1235endif
1236
1237ifdef VBOX_WITHOUT_ADDITIONS
1238 # Zap anything that could be contradicting this.
1239 VBOX_WITH_ADDITIONS :=
1240endif
1241
1242#
1243# Sanitize the documentation build config variables.
1244#
1245ifdef VBOX_WITH_DOCS_FROM_BUILD_SERVER
1246 VBOX_WITHOUT_DOCS := 1
1247 ifdef VBOX_ONLY_DOCS
1248 $(error VBOX_ONLY_DOCS + VBOX_WITH_DOCS_FROM_BUILD_SERVER does not add up!)
1249 endif
1250endif
1251
1252ifdef VBOX_ONLY_DOCS
1253 ifdef VBOX_WITHOUT_DOCS
1254 $(error VBOX_ONLY_DOCS + VBOX_WITHOUT_DOCS does not add up!)
1255 endif
1256endif
1257
1258ifdef VBOX_WITHOUT_DOCS
1259 # Zap anything that could be contradicting this.
1260 VBOX_WITH_DOCS :=
1261 VBOX_WITH_DOCS_CHM :=
1262endif
1263
1264#
1265# Disable components for headless
1266#
1267ifdef VBOX_HEADLESS
1268 VBOX_WITH_QTGUI=
1269 VBOX_WITH_VBOXSDL=
1270 VBOX_WITH_OGL=
1271 VBOX_WITH_KCHMVIEWER=
1272 VBOX_WITH_VRDP_RDESKTOP=
1273endif
1274
1275#
1276# Undefined VBOX_WITH_MAIN implies exclusion of a few more items.
1277#
1278ifndef VBOX_WITH_MAIN
1279 VBOX_WITH_VBOXSDL=
1280 VBOX_WITH_QTGUI=
1281 VBOX_WITH_DEBUGGER_GUI=
1282 VBOX_WITH_HEADLESS=
1283 ifdef VBOX_ONLY_DOCS
1284 $(error Oh, does VBOX_ONLY_DOCS actually end up here. sweet.)
1285 endif
1286 VBOX_WITH_DOCS=
1287endif
1288
1289ifndef VBOX_WITH_QTGUI
1290 VBOX_WITH_KCHMVIEWER=
1291endif
1292
1293ifdef VBOX_WITH_EXTPACK_PUEL_BUILD
1294 VBOX_WITH_EXTPACK_PUEL = 1
1295endif
1296
1297ifdef VBOX_WITH_TESTSUITE
1298 $(warning VBOX_WITH_TESTSUITE was renamed to VBOX_WITH_VALIDATIONKIT)
1299 VBOX_WITH_VALIDATIONKIT = $(VBOX_WITH_TESTSUITE)
1300endif
1301
1302#
1303# Mark OSE builds clearly, helps figuring out limitations more easily.
1304#
1305ifdef VBOX_OSE
1306# This can be overridden (e.g. in LocalConfig.kmk) by whoever publishes a set
1307# of VirtualBox binaries. We request though that you always use something that
1308# clearly identifies your build and makes it clear that it is not one done by
1309# the VirtualBox team.
1310 VBOX_BUILD_PUBLISHER ?= _OSE
1311endif
1312
1313# Keep in sync with G_virtualBoxPackage in glue-jaxws.xsl and glue-java.xsl
1314# Changed with every new version, so beware!
1315if $(VBOX_VERSION_BUILD) < 51
1316 VBOX_API_VERSION = $(VBOX_VERSION_MAJOR)_$(VBOX_VERSION_MINOR)
1317else
1318 VBOX_API_VERSION = $(VBOX_VERSION_MAJOR)_$(expr $(VBOX_VERSION_MINOR) + 1)
1319endif
1320VBOX_API_SUFFIX = _$(VBOX_API_VERSION)
1321VBOX_JAVA_PACKAGE = org.virtualbox$(VBOX_API_SUFFIX)
1322
1323#
1324# Derived / helper config indicators. Not configurable.
1325#
1326
1327# Use the OpenGL module in qt when the video hardware acceleartion feature
1328# is enabled.
1329if defined(VBOX_WITH_VIDEOHWACCEL) && defined(VBOX_WITH_QTGUI)
1330 VBOX_GUI_USE_QGL = 1
1331else
1332 VBOX_GUI_USE_QGL=
1333endif
1334
1335# Collection macro mainly for deciding whether VBoxDTrace needs shipping.
1336VBOX_WITH_DTRACE := $(if-expr defined(VBOX_WITH_DTRACE_R0) || defined(VBOX_WITH_DTRACE_R0DRV) \
1337 || defined(VBOX_WITH_DTRACE_R3) || defined(VBOX_WITH_DTRACE_RC),1,)
1338
1339# kSubmit / kWorker is only available on windows.
1340ifdef VBOX_USE_KSUBMIT
1341 ifeq ($(KBUILD_HOST),win)
1342 TOOL_VCC120AMD64_USE_KSUBMIT := 1
1343 TOOL_VCC120X86_USE_KSUBMIT := 1
1344 TOOL_VCC100AMD64_USE_KSUBMIT := 1
1345 TOOL_VCC100X86_USE_KSUBMIT := 1
1346 TOOL_OPENWATCOM_USE_KSUBMIT := 1
1347 TOOL_YASM_USE_KSUBMIT := 1
1348 TOOL_NASM_USE_KSUBMIT := 1
1349 TOOL_VBoxNasm_USE_KSUBMIT := 1
1350 else
1351 VBOX_USE_KSUBMIT :=
1352 endif
1353endif
1354
1355#
1356# Image and object format config.
1357#
1358if1of ($(KBUILD_TARGET), freebsd haiku linux netbsd openbsd solaris)
1359 VBOX_LDR_FMT = elf
1360endif
1361ifeq ($(KBUILD_TARGET),darwin)
1362 VBOX_LDR_FMT = macho
1363endif
1364ifeq ($(KBUILD_TARGET),os2)
1365 VBOX_LDR_FMT = lx
1366 VBOX_LDR_FMT32 = lx
1367 VBOX_LDR_FMT64 = elf
1368 DONT_USE_YASM = 1 # yasm doesn't implement omf yet.
1369endif
1370ifeq ($(KBUILD_TARGET),win)
1371 VBOX_LDR_FMT = pe
1372endif
1373VBOX_LDR_FMT32 ?= $(VBOX_LDR_FMT)
1374VBOX_LDR_FMT64 ?= $(VBOX_LDR_FMT)
1375
1376#
1377# Assembler setup.
1378#
1379# This is a bit complicated since we have to support two different assmblers
1380# (yasm/nasm) and possibly two different formats (32-bit/64-bit).
1381#
1382ifeq ($(VBOX_LDR_FMT),elf)
1383 ifeq ($(KBUILD_TARGET_ARCH),x86)
1384VBOX_ASFLAGS_FMT = -f elf32 -DASM_FORMAT_ELF
1385 else
1386VBOX_ASFLAGS_FMT = -f elf64 -DASM_FORMAT_ELF
1387 endif
1388 VBOX_ASFLAGS_DBFINFO = -g dwarf2
1389endif
1390ifeq ($(VBOX_LDR_FMT),lx)
1391 VBOX_ASFLAGS_FMT = -f obj -DASM_FORMAT_OMF
1392 VBOX_ASFLAGS_DBFINFO = -g stabs
1393endif
1394ifeq ($(VBOX_LDR_FMT),macho)
1395 ifeq ($(KBUILD_TARGET_ARCH),x86)
1396 VBOX_ASFLAGS_FMT = -f macho32 -DASM_FORMAT_MACHO
1397 else
1398 VBOX_ASFLAGS_FMT = -f macho64 -DASM_FORMAT_MACHO
1399 endif
1400 VBOX_ASFLAGS_DBFINFO = -g dwarf2
1401endif
1402ifeq ($(VBOX_LDR_FMT),pe)
1403 ifeq ($(KBUILD_TARGET_ARCH),x86)
1404VBOX_ASFLAGS_FMT = -f win32 -DASM_FORMAT_PE
1405 else
1406VBOX_ASFLAGS_FMT = -f win64 -DASM_FORMAT_PE
1407 endif
1408VBOX_ASFLAGS_DBFINFO = -g cv8
1409endif
1410ifndef VBOX_ASFLAGS_FMT
1411 $(error VBOX_ASFLAGS_FMT is not defined. VBOX_LDR_FMT=$(VBOX_LDR_FMT))
1412endif
1413
1414ifeq ($(VBOX_LDR_FMT32),elf)
1415 VBOX_ASFLAGS_FMT32 = -f elf32 -DASM_FORMAT_ELF
1416 VBOX_ASFLAGS_DBFINFO32 = -g dwarf2
1417endif
1418ifeq ($(VBOX_LDR_FMT32),lx)
1419 VBOX_ASFLAGS_FMT32 = -f obj -DASM_FORMAT_OMF
1420 VBOX_ASFLAGS_DBFINFO32 = -g stabs
1421endif
1422ifeq ($(VBOX_LDR_FMT32),macho)
1423 VBOX_ASFLAGS_FMT32 = -f macho32 -DASM_FORMAT_MACHO
1424 VBOX_ASFLAGS_DBFINFO32 = -g dwarf2
1425endif
1426ifeq ($(VBOX_LDR_FMT32),pe)
1427 VBOX_ASFLAGS_FMT32 = -f win32 -DASM_FORMAT_PE
1428 VBOX_ASFLAGS_DBFINFO32 = -g cv8
1429endif
1430ifndef VBOX_ASFLAGS_FMT32
1431 $(error VBOX_ASFLAGS_FMT32 is not defined. VBOX_LDR_FMT32=$(VBOX_LDR_FMT32))
1432endif
1433
1434ifeq ($(VBOX_LDR_FMT64),elf)
1435 VBOX_ASFLAGS_FMT64 = -f elf64 -DASM_FORMAT_ELF
1436 VBOX_ASFLAGS_DBFINFO64 = -g dwarf2
1437endif
1438ifeq ($(VBOX_LDR_FMT64),macho)
1439 VBOX_ASFLAGS_FMT64 = -f macho64 -DASM_FORMAT_MACHO
1440 VBOX_ASFLAGS_DBFINFO64 = -g dwarf2
1441endif
1442ifeq ($(VBOX_LDR_FMT64),pe)
1443 VBOX_ASFLAGS_FMT64 = -f win64 -DASM_FORMAT_PE
1444 VBOX_ASFLAGS_DBFINFO64 = -g cv8
1445endif
1446ifndef VBOX_ASFLAGS_FMT64
1447 $(error VBOX_ASFLAGS_FMT64 is not defined. VBOX_LDR_FMT64=$(VBOX_LDR_FMT64))
1448endif
1449
1450ifndef DONT_USE_YASM
1451 VBOX_ASTOOL = YASM
1452 VBOX_LDR_FMT_2_YASM_DBGINFO.elf = -g dwarf2
1453 VBOX_LDR_FMT_2_YASM_DBGINFO.lx = -g stabs
1454 VBOX_LDR_FMT_2_YASM_DBGINFO.macho =
1455 VBOX_LDR_FMT_2_YASM_DBGINFO.pe = -g cv8
1456 VBOX_ASFLAGS = $(VBOX_ASFLAGS_FMT) -D__YASM__ -Worphan-labels $(VBOX_YASM_Wno-segreg-in-64bit) $(VBOX_LDR_FMT_2_YASM_DBGINFO.$(VBOX_LDR_FMT))
1457 VBOX_ASFLAGS32 = $(VBOX_ASFLAGS_FMT32) -D__YASM__ -Worphan-labels $(VBOX_YASM_Wno-segreg-in-64bit) $(VBOX_LDR_FMT_2_YASM_DBGINFO.$(VBOX_LDR_FMT32))
1458 VBOX_ASFLAGS64 = $(VBOX_ASFLAGS_FMT64) -D__YASM__ -Worphan-labels $(VBOX_YASM_Wno-segreg-in-64bit) $(VBOX_LDR_FMT_2_YASM_DBGINFO.$(VBOX_LDR_FMT64))
1459else
1460 VBOX_ASTOOL = NASM
1461 VBOX_ASFLAGS = $(subst elf32,elf,$(VBOX_ASFLAGS_FMT)) -D__NASM__ -w+orphan-labels -g
1462 VBOX_ASFLAGS32 = $(subst elf32,elf,$(VBOX_ASFLAGS_FMT32)) -D__NASM__ -w+orphan-labels -g
1463 VBOX_ASFLAGS64 = $(VBOX_ASFLAGS_FMT64) -D__NASM__ -w+orphan-labels -g
1464endif
1465
1466#
1467# Windows only has mingw handy. On *nix we have to deal with cross compiling
1468# 32-bit targets on 64-bit platforms, meaning we'll be using gcc32/g++32.
1469# In the latter case we'll also have to disable all the all the R0 driver related stuff.
1470#
1471ifndef VBOX_GCC_TOOL
1472 ifeq ($(KBUILD_TARGET),win)
1473 ifeq ($(KBUILD_TARGET_ARCH),x86)
1474 VBOX_GCC_TOOL := MINGW32
1475 TOOL_MINGW32_CFLAGS := $(UNDEFINED) # override -g
1476 else
1477 VBOX_GCC_TOOL := MINGWW64
1478 endif
1479 else ifeq ($(KBUILD_TARGET),os2)
1480 VBOX_GCC_TOOL := GXX3OMF
1481 else ifeq ($(KBUILD_TARGET),darwin)
1482 ifdef VBOX_WITH_NEW_XCODE
1483 VBOX_GCC_TOOL := VBoxXcode62
1484 else
1485 VBOX_GCC_TOOL := GXX4MACHO
1486 endif
1487 else ifeq ($(KBUILD_TARGET),haiku)
1488 # Haiku shouldn't pass '-r' to the linker by default
1489 VBOX_GCC_TOOL := GXX3PLAIN
1490 else ifeq ($(KBUILD_TARGET),solaris)
1491 VBOX_GCC_TOOL := GXX3PLAIN
1492 VBOX_GCC32_TOOL := GCC3PLAIN
1493 ifeq ($(KBUILD_HOST),solaris)
1494 TOOL_GXX3PLAIN_LD_SYSMOD ?= /usr/ccs/bin/ld
1495 endif
1496 else
1497 VBOX_GCC_TOOL := GXX3
1498 ifeq ($(KBUILD_TARGET_ARCH).$(KBUILD_HOST_ARCH),x86.amd64) ## @todo mixing target/host here!
1499 VBOX_GCC_TOOL := GXX32
1500 VBOX_WITH_VBOXDRV=
1501 else ifeq ($(KBUILD_TARGET_ARCH).$(KBUILD_HOST_ARCH),amd64.x86)
1502 VBOX_GCC_TOOL := GXX64
1503 VBOX_WITH_VBOXDRV=
1504 endif
1505 endif
1506endif
1507ifndef VBOX_GCC32_TOOL
1508 ifeq ($(KBUILD_TARGET_ARCH),x86)
1509 VBOX_GCC32_TOOL := $(VBOX_GCC_TOOL)
1510 else ifeq ($(KBUILD_TARGET),win)
1511 VBOX_GCC32_TOOL := MINGW32
1512 else
1513 VBOX_GCC32_TOOL := GCC32
1514 endif
1515endif
1516
1517#
1518# Decide which Visual C++ compiler version we're using by default.
1519#
1520ifndef VBOX_VCC_TOOL_STEM
1521 VBOX_VCC_TOOL_STEM := VCC100
1522else ifn1of ($(VBOX_VCC_TOOL_STEM), VCC100 VCC110 VCC120)
1523 $(error VBox: VBOX_VCC_TOOL_STEM='$(VBOX_VCC_TOOL_STEM)' is not supported, only VCC100 and VCC110 is)
1524endif
1525ifndef VBOX_VCC_TOOL
1526 VBOX_VCC_TOOL := $(VBOX_VCC_TOOL_STEM)$(toupper $(KBUILD_TARGET_ARCH))
1527endif
1528
1529#
1530# Decide which Visual C++ compiler version we're using for newer stuff.
1531#
1532ifndef VBOX_NEWER_VCC_TOOL_STEM
1533 VBOX_NEWER_VCC_TOOL_STEM := VCC120
1534else ifn1of ($(VBOX_NEWER_VCC_TOOL_STEM), VCC120)
1535 $(error VBox: VBOX_NEWER_VCC_TOOL_STEM='$(VBOX_NEWER_VCC_TOOL_STEM)' is not supported, only VCC120 is)
1536endif
1537ifndef VBOX_NEWER_VCC_TOOL
1538 VBOX_NEWER_VCC_TOOL := $(VBOX_NEWER_VCC_TOOL_STEM)$(toupper $(KBUILD_TARGET_ARCH))
1539endif
1540
1541#
1542# Default too nonsense.
1543#
1544## @todo Remove the default tool crap here!
1545TOOL = $(VBOX_GCC_TOOL)
1546TOOL.win.x86 = $(VBOX_VCC_TOOL_STEM)X86
1547TOOL.win.amd64 = $(VBOX_VCC_TOOL_STEM)AMD64
1548ASTOOL = $(VBOX_ASTOOL)
1549
1550
1551#
1552# Setup the global defines and includes.
1553#
1554# Note! The __SOMETHING__ #defines are deprecated as they violate the C/C++ specs.
1555#
1556INCS += $(PATH_ROOT)/include $(PATH_OUT)
1557DEFS += VBOX
1558DEFS.debug := DEBUG DEBUG_$(subst $(subst _, ,_),_,$(USERNAME)) DEBUG_USERNAME=$(subst $(subst _, ,_),_,$(USERNAME))
1559DEFS.dbgopt = $(DEFS.debug)
1560DEFS.profile = VBOX_WITH_STATISTICS
1561DEFS.strict = RT_STRICT VBOX_STRICT
1562DEFS.x86 = RT_ARCH_X86 __X86__
1563DEFS.amd64 = RT_ARCH_AMD64 __AMD64__
1564DEFS.darwin = RT_OS_DARWIN __DARWIN__
1565DEFS.freebsd = RT_OS_FREEBSD __FREEBSD__
1566DEFS.haiku = RT_OS_HAIKU
1567DEFS.linux = RT_OS_LINUX _FILE_OFFSET_BITS=64
1568DEFS.netbsd = RT_OS_NETBSD
1569DEFS.openbsd = RT_OS_OPENBSD
1570DEFS.os2 = RT_OS_OS2 __OS2__
1571DEFS.os-agnostic = RT_OS_AGNOSTIC
1572DEFS.solaris = RT_OS_SOLARIS _FILE_OFFSET_BITS=64
1573DEFS.win = RT_OS_WINDOWS __WIN__
1574DEFS.win.x86 = __WIN32__
1575DEFS.win.amd64 = __WIN64__
1576# optional defines (use environment or make commandline)
1577ifdef VBOX_WITH_STATISTICS
1578 DEFS += VBOX_WITH_STATISTICS
1579endif
1580ifdef VBOX_STRICT
1581 DEFS += VBOX_STRICT
1582endif
1583ifdef LOG_ENABLED
1584 DEFS += LOG_ENABLED
1585endif
1586ifdef VBOX_OSE
1587 DEFS += VBOX_OSE
1588endif
1589ifdef VBOX_WITH_64_BITS_GUESTS
1590 DEFS += VBOX_WITH_64_BITS_GUESTS
1591endif
1592ifdef VBOX_WITH_REM
1593 DEFS += VBOX_WITH_REM
1594endif
1595ifdef VBOX_WITH_RAW_MODE
1596 DEFS += VBOX_WITH_RAW_MODE
1597endif
1598
1599# Don't flood CDEFS, old MASMs doesn't like too many defines.
1600ifdef VBOX_WITH_DEBUGGER
1601 CDEFS += VBOX_WITH_DEBUGGER
1602endif
1603ifdef VBOX_WITH_HARDENING
1604 CDEFS += VBOX_WITH_HARDENING
1605endif
1606if defined(VBOX_WITH_STRICT_LOCKS) && ($(KBUILD_TYPE) == "debug" || $(KBUILD_TYPE) == "strict")
1607 CDEFS += RT_LOCK_STRICT RT_LOCK_STRICT_ORDER
1608endif
1609ifdef VBOX_WITH_EF_WRAPS
1610 CDEFS += RTMEM_WRAP_TO_EF_APIS RTMEM_WRAP_SOME_NEW_AND_DELETE_TO_EF
1611endif
1612
1613# Quoted strings should not be passed to the assemblers since they might not
1614# subscribe to C preprocessing semantics.
1615ifdef VBOX_PATH_APP_PRIVATE
1616 CDEFS += RTPATH_APP_PRIVATE=\"$(VBOX_PATH_APP_PRIVATE)\"
1617endif
1618ifdef VBOX_PATH_APP_PRIVATE_ARCH
1619 CDEFS += RTPATH_APP_PRIVATE_ARCH=\"$(VBOX_PATH_APP_PRIVATE_ARCH)\"
1620endif
1621ifdef VBOX_PATH_APP_PRIVATE_ARCH_TOP
1622 CDEFS += RTPATH_APP_PRIVATE_ARCH_TOP=\"$(VBOX_PATH_APP_PRIVATE_ARCH_TOP)\"
1623endif
1624ifdef VBOX_PATH_SHARED_LIBS
1625 CDEFS += RTPATH_SHARED_LIBS=\"$(VBOX_PATH_SHARED_LIBS)\"
1626endif
1627ifdef VBOX_PATH_APP_DOCS
1628 CDEFS += RTPATH_APP_DOCS=\"$(VBOX_PATH_APP_DOCS)\"
1629endif
1630CXXDEFS += $(CDEFS)
1631OBJCDEFS += $(CDEFS)
1632
1633USES += dtrace
1634
1635
1636#
1637# Decide which Windows DDK to use by default.
1638#
1639if1of ($(VBOX_VCC_TOOL_STEM), VCC110)
1640 VBOX_WINDDK ?= WINDDK80
1641else
1642 VBOX_WINDDK ?= WINDDK71
1643endif
1644VBOX_WINDDK_WLH ?= $(VBOX_WINDDK)WLH
1645
1646VBOX_WINDDK_GST ?= $(VBOX_WINDDK)
1647VBOX_WINDDK_GST_W8 ?= WINDDK80W8
1648VBOX_WINDDK_GST_W7 ?= $(VBOX_WINDDK_GST)W7
1649VBOX_WINDDK_GST_WLH ?= $(VBOX_WINDDK_GST)WLH
1650VBOX_WINDDK_GST_W2K3 ?= WINDDK71WNET
1651ifeq ($(KBUILD_TARGET_ARCH),x86)
1652 VBOX_WINDDK_GST_WXP ?= WINDDK71WXP
1653 VBOX_WINDDK_GST_W2K ?= $(VBOX_WINDDK_GST_WXP)
1654 VBOX_WINDDK_GST_NT4 ?= $(VBOX_WINDDK_GST_WXP)
1655else
1656 VBOX_WINDDK_GST_WXP ?= $(VBOX_WINDDK_GST_W2K3)
1657 VBOX_WINDDK_GST_W2K ?= $(VBOX_WINDDK_GST_W2K3)
1658 VBOX_WINDDK_GST_NT4 ?= $(VBOX_WINDDK_GST_W2K3)
1659endif
1660
1661
1662#
1663# Decide which Windows SDK to use by default.
1664#
1665if1of ($(VBOX_VCC_TOOL_STEM), VCC110)
1666 VBOX_WINPSDK ?= WINPSDK80
1667else
1668 VBOX_WINPSDK ?= WINPSDK71
1669endif
1670VBOX_WINPSDK_GST ?= $(VBOX_WINPSDK)
1671VBOX_WINPSDK_GST_W8 ?= WINPSDK80
1672VBOX_WINPSDK_GST_W7 ?= $(VBOX_WINPSDK_GST)
1673VBOX_WINPSDK_GST_WLH ?= $(VBOX_WINPSDK_GST)
1674VBOX_WINPSDK_GST_WXP ?= $(VBOX_WINPSDK_GST)
1675ifeq ($(KBUILD_TARGET_ARCH),x86)
1676 VBOX_WINPSDK_GST_W2K ?= $(VBOX_WINPSDK_GST)
1677 VBOX_WINPSDK_GST_NT4 ?= $(VBOX_WINPSDK_GST)
1678else
1679 VBOX_WINPSDK_GST_W2K ?= $(VBOX_WINPSDK_GST_WXP)
1680 VBOX_WINPSDK_GST_NT4 ?= $(VBOX_WINPSDK_GST_WXP)
1681endif
1682
1683
1684#
1685# ARCH_BITS_DEFS.
1686#
1687if1of ($(KBUILD_TARGET_ARCH),amd64 sparc64)
1688 VBOX_HC_ARCH_BITS := 64
1689 ARCH_BITS_DEFS := HC_ARCH_BITS=64
1690else if1of ($(KBUILD_TARGET_ARCH),x86 sparc32)
1691 VBOX_HC_ARCH_BITS := 32
1692 ARCH_BITS_DEFS := HC_ARCH_BITS=32
1693else
1694 $(error VBox: KBUILD_TARGET_ARCH=$(KBUILD_TARGET_ARCH))
1695endif
1696
1697ifdef VBOX_WITH_64_BITS_GUESTS
1698 VBOX_GC_ARCH_BITS_DEFS := GC_ARCH_BITS=64
1699else
1700 VBOX_GC_ARCH_BITS_DEFS := GC_ARCH_BITS=32
1701endif
1702ARCH_BITS_DEFS += $(VBOX_GC_ARCH_BITS_DEFS)
1703
1704#
1705# Add the output dir(s) to the dynamic loader search path.
1706#
1707if1of ($(KBUILD_HOST), freebsd linux netbsd openbsd solaris)
1708 export LD_LIBRARY_PATH:=$(PATH_STAGE_BIN):$(PATH_STAGE_LIB):$(LD_LIBRARY_PATH)
1709endif
1710ifeq ($(KBUILD_HOST),haiku)
1711 export LIBRARY_PATH:=$(PATH_STAGE_BIN):$(PATH_STAGE_LIB):$(LIBRARY_PATH)
1712endif
1713ifeq ($(KBUILD_HOST),os2)
1714 #fixme! export BEGINLIBPATH:=$(PATH_STAGE_BIN);$(PATH_STAGE_LIB);$(BEGINLIBPATH)
1715endif
1716ifeq ($(KBUILD_HOST),win)
1717 # This check is a bit hacky, but avoids problems with PATH being changed
1718 # again when the makefiles are reread because some automatically generated
1719 # makefile has been modified.
1720 ifeq ($(findstring $(PATH_STAGE_BIN);$(PATH_STAGE_LIB);,$(PATH)),)
1721 export PATH:=$(PATH_STAGE_BIN);$(PATH_STAGE_LIB);$(PATH)
1722 endif
1723endif
1724
1725#
1726# Common libraries and tools.
1727#
1728ifeq ($(KBUILD_TARGET),darwin)
1729 LIB_RUNTIME = $(PATH_STAGE_BIN)/VBoxRT.dylib
1730 LIB_RUNTIME_EF = #$(PATH_STAGE_LIB)/RuntimeEFCPP.a
1731 VBOX_LIB_RUNTIME_X86 = $(PATH_STAGE_BIN)/VBoxRT-x86.dylib
1732 LIB_KPROFILE = $(PATH_STAGE_BIN)/kPrf2.dylib
1733 LIB_VMM = $(PATH_STAGE_BIN)/VBoxVMM.dylib
1734 LIB_VMMRC = $(PATH_STAGE_BIN)/VMMRC.rc
1735 LIB_REM = $(PATH_STAGE_LIB)/VBoxREM.dylib
1736 LIB_XPCOM = $(PATH_STAGE_BIN)/VBoxXPCOM.dylib
1737 VBOX_LIB_XPCOM_X86 = $(PATH_STAGE_BIN)/VBoxXPCOM-x86.dylib
1738 LIB_DDU = $(PATH_STAGE_BIN)/VBoxDDU.dylib
1739endif
1740if1of ($(KBUILD_TARGET), freebsd haiku linux netbsd openbsd solaris)
1741 LIB_RUNTIME = $(PATH_STAGE_BIN)/VBoxRT.so
1742 LIB_RUNTIME_EF = $(PATH_STAGE_LIB)/RuntimeEFCPP.a
1743 VBOX_LIB_RUNTIME_X86 = $(PATH_STAGE_BIN)/VBoxRT-x86.so
1744 LIB_KPROFILE = $(PATH_STAGE_BIN)/kPrf2.so
1745 LIB_VMM = $(PATH_STAGE_BIN)/VBoxVMM.so
1746 LIB_VMMRC = $(PATH_STAGE_BIN)/VMMRC.rc
1747 LIB_REM = $(PATH_STAGE_LIB)/VBoxREM.so
1748 LIB_XPCOM = $(PATH_STAGE_BIN)/VBoxXPCOM.so
1749 VBOX_LIB_XPCOM_X86 = $(PATH_STAGE_BIN)/VBoxXPCOM-x86.so
1750 LIB_DDU = $(PATH_STAGE_BIN)/VBoxDDU.so
1751endif
1752ifeq ($(KBUILD_TARGET),os2)
1753 LIB_RUNTIME = $(PATH_STAGE_BIN)/VBoxRT.dll
1754 LIB_RUNTIME_EF = #$(PATH_STAGE_LIB)/RuntimeEFCPP.a
1755 VBOX_LIB_RUNTIME_X86 = $(PATH_STAGE_BIN)/VBoxRT-x86.dll
1756 LIB_KPROFILE = $(PATH_STAGE_BIN)/kPrf2.dll
1757 LIB_VMM = $(PATH_STAGE_BIN)/VBoxVMM.dll
1758 LIB_VMMRC = $(PATH_STAGE_LIB)/VMMRCImp.lib
1759 LIB_REM = $(PATH_STAGE_LIB)/VBoxREMImp.lib
1760 LIB_XPCOM = $(PATH_STAGE_BIN)/VBoxXCOM.dll
1761 VBOX_LIB_XPCOM_X86 = $(PATH_STAGE_BIN)/VBoxXPCOM-x86.dll
1762 LIB_DDU = $(PATH_STAGE_BIN)/VBoxDDU.dll
1763 VBOX_OBJ_SYS0 = $(PATH_OBJ)/RuntimeR0/os2/sys0.obj
1764endif
1765ifeq ($(KBUILD_TARGET),win)
1766 LIB_RUNTIME = $(PATH_STAGE_LIB)/VBoxRT.lib
1767 LIB_RUNTIME_EF = #$(PATH_STAGE_LIB)/RuntimeEFCPP.lib
1768 VBOX_LIB_RUNTIME_X86 = $(PATH_STAGE_LIB)/VBoxRT-x86.lib
1769 LIB_KPROFILE = $(PATH_STAGE_LIB)/kPrf2.lib
1770 LIB_VMM = $(PATH_STAGE_LIB)/VBoxVMM.lib
1771 LIB_VMMRC = $(PATH_OBJ)/VMMRC/VMMRC.lib
1772 LIB_REM = $(PATH_STAGE_LIB)/VBoxREMImp.lib
1773 LIB_XPCOM = $(PATH_STAGE_BIN)/VBoxXPCOM.lib
1774 VBOX_LIB_XPCOM_X86 = $(PATH_STAGE_BIN)/VBoxXPCOM-x86.lib
1775 LIB_DDU = $(PATH_STAGE_LIB)/VBoxDDU.lib
1776endif
1777if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), win.amd64 linux.amd64)
1778 VBOX_LIB_VMM_LAZY = $(PATH_STAGE_LIB)/VMMR3LazyImp$(VBOX_SUFF_LIB)
1779else
1780 VBOX_LIB_VMM_LAZY = $(LIB_VMM)
1781endif
1782VBOX_LIB_SUPHARDENED = $(PATH_STAGE_LIB)/SUPR3HardenedStatic$(VBOX_SUFF_LIB)
1783VBOX_LIB_RUNTIME_STATIC = $(PATH_STAGE_LIB)/RuntimeR3$(VBOX_SUFF_LIB)
1784
1785ifndef VBOX_WITH_REM
1786 LIB_REM :=
1787endif
1788
1789# Python
1790ifndef VBOX_BLD_PYTHON
1791 if1of ($(KBUILD_HOST), win)
1792 VBOX_BLD_PYTHON := $(firstword $(rsort $(wildcard $(KBUILD_DEVTOOLS)/win.x86/python/v*/python$(HOSTSUFF_EXE))) \
1793 python-not-found.exe)
1794 else
1795 VBOX_BLD_PYTHON := $(firstword $(which python2.7$(HOSTSUFF_EXE)) $(which python2.6$(HOSTSUFF_EXE)) \
1796 $(which python$(HOSTSUFF_EXE)) $(which python3$(HOSTSUFF_EXE)) \
1797 python-not-found)
1798 endif
1799endif
1800
1801#
1802# pylint setup, see https://www.pylint.org/.
1803#
1804# Disabled:
1805# W0301 - Unnecessary semicolon.
1806# W0511 - TODO/XXX/FIXME/+++.
1807# W0603 - Using the global statement.
1808# W0702 - No exception type(s) specified.
1809# W0703 - Catch "Exception".
1810# I0011 - Locally disabling XXXXX.
1811# C0321 - More than one statement on a single line.
1812# R0201 - Method could be a function.
1813# C0326 - ????
1814# W0123 - ????
1815# C0330:bad-continuation - Wrong continued indentation (add X spaces).
1816# * Triggering on perfectly legal comments in array initializers and stuff.
1817# C0413:wrong-import-position - Import "YYYYY XXXXX" should be placed at the top of the module.
1818# * False positives due to __copyright__, __version__, probably.
1819# E0012:bad-option-value - Bad option value XXXXX.
1820# * Newer pylint doesn't grok older warning disables in sources (e.g. W0142 in db.py). Wonderful!
1821# I0012:locally-enabled - Locally enabling XXXXX.
1822# * We temporarily disable stuff and then renabled it. Very tedious.
1823#
1824# Note! Yes, --max-branchs is a typo, but not by me.
1825#
1826# Note! Users of older pylint release (< 1.0) needs to define
1827# VBOX_WITH_PYLINT_PRE_V1_0 in LocalConfig because they changed the
1828# output arguments in an backwards incompatible way and added more
1829# attribute regex options.
1830#
1831ifndef VBOX_PYLINT
1832 VBOX_PYLINT := $(firstword $(which pylint-2.7) $(which pylint-2.6) $(which pylint2) $(which pylint))
1833 ifdef VBOX_PYLINT
1834 VBOX_PYLINT := $(VBOX_BLD_PYTHON) $(VBOX_PYLINT)
1835 endif
1836endif
1837if !defined(VBOX_WITH_PYLINT) && defined(VBOX_PYLINT)
1838 VBOX_WITH_PYLINT := 1
1839 ifndef VBOX_PYLINT_VERSION
1840 ifdef VBOX_WITH_PYLINT_PRE_V1_0
1841 VBOX_PYLINT_VERSION = 9999
1842 else ifdef VBOX_WITH_PYLINT_V1_2_1_PLUS
1843 VBOX_PYLINT_VERSION = 10201
1844 else ifdef VBOX_WITH_PYLINT_V1_1_PLUS
1845 VBOX_PYLINT_VERSION = 10100
1846 else
1847 VBOX_PYLINT_VERSION = 10000
1848 endif
1849 endif
1850endif
1851VBOX_PYLINT_FLAGS = $(if-expr $(VBOX_PYLINT_VERSION) >= 10500,--reports=n,--report=n) \
1852 $(if-expr $(VBOX_PYLINT_VERSION) >= 10000\
1853 ,--msg-template='{path}:{line}: <{msg_id}>({obj}:{symbol}): {msg}' \
1854 ,--output-format=msvs --include-ids=y) \
1855 --persistent=n \
1856 --rcfile=$(PATH_ROOT)/tools/pylintrc \
1857 --max-line-length=130 \
1858 --max-attributes=32 \
1859 --max-branch$(if-expr $(VBOX_PYLINT_VERSION) >= 10000,e,)s=50 \
1860 --max-statements=100 \
1861 --max-returns=100 \
1862 --max-public-methods=139 \
1863 --max-args=9 \
1864 --max-module-lines=4096 \
1865 --max-locals=32 \
1866 $(if-expr $(VBOX_PYLINT_VERSION) >= 10500,--max-bool-expr=99,) \
1867 --min-public-methods=0 \
1868 --function-rgx='[a-z_][a-zA-Z0-9_]{2,40}$(DOLLAR)' \
1869 --method-rgx='[a-z_][a-zA-Z0-9_]{2,40}$(DOLLAR)' \
1870 --argument-rgx='([a-z_][a-zA-Z0-9_]{2,30}|rc|hr|s|c|ch|cx|cy|cb|fn)$(DOLLAR)' \
1871 --variable-rgx='([a-z_][a-zA-Z0-9_]{2,30}|rc|hr|s|c|ch|cx|cy|cb|fn)$(DOLLAR)' \
1872 --attr-rgx='([a-z_][a-zA-Z0-9_]{2,30}|rc|hr|o)$(DOLLAR)' \
1873 --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)' \
1874 --class-rgx='(td|)[A-Z_][a-zA-Z0-9_]+$(DOLLAR)' \
1875 --const-rgx='(g_(k|)[abcdefhmnpilorstu]+[A-Z][a-zA-Z0-9]+|[A-Z_][A-Z0-9_]+|__copyright__|__version__|__file__|__all__)$(DOLLAR)' \
1876 --good-names='i,j,k,t,o,c,e,ch,s,_' \
1877 $(if-expr $(VBOX_PYLINT_VERSION) >= 10000,--class-attribute-rgx='(k[abcdefhmnpilorstu]+[A-Z0-9][a-zA-Z0-9_]{0,32}|[A-Z_][A-Z0-9_]{2,32})',) \
1878 $(if-expr $(VBOX_PYLINT_VERSION) >= 10500,--max-nested-blocks=9,) \
1879 $(if-expr $(VBOX_PYLINT_VERSION) >= 10100,--disable=bad-whitespace,) \
1880 $(if-expr $(VBOX_PYLINT_VERSION) >= 10201,--disable=bad-continuation --disable=eval-used,) \
1881 $(if-expr $(VBOX_PYLINT_VERSION) >= 10201 && $(VBOX_PYLIN_VERSION) < 10500,--disable=bad-option-value,) \
1882 $(if-expr $(VBOX_PYLINT_VERSION) >= 10500,--disable=wrong-import-position --disable=E0012 --disable=locally-enabled,) \
1883 $(if-expr $(VBOX_PYLINT_VERSION) >= 10600,--disable=missing-docstring --disable=trailing-newlines --disable=ungrouped-imports,) \
1884 --disable=unnecessary-semicolon,invalid-encoded-data,global-statement,bare-except,broad-except,multiple-statements,no-self-use,fixme \
1885 --disable=I0011 \
1886 --ignored-classes=testdriver.vboxcon \
1887
1888
1889# Define the macro for win path conversion.
1890ifndef VBOX_ONLY_SDK
1891 VBOX_FN_MAKE_WIN_PATH = $(subst /,\\,$(1))
1892else
1893 # on Wine Z: is always FS root
1894 VBOX_FN_MAKE_WIN_PATH = $(subst /,\\,$(patsubst /%,Z:/%,$(1)))
1895endif #!VBOX_ONLY_SDK
1896
1897# The kprofile build automagically links with kProfile.
1898ifeq ($(KBUILD_TYPE),kprofile)
1899 LIB_RUNTIME += $(LIB_KPROFILE)
1900endif
1901
1902# Enable C++ electric fence heap. (Warning: will easily run out of virtual memory / kernel stuff on Linux/Windows.)
1903ifdef VBOX_WITH_CPP_EF
1904 LIB_RUNTIME <= $(LIB_RUNTIME_EF)
1905endif
1906
1907# Overridable libraries (unix).
1908LIB_PTHREAD ?= pthread
1909
1910# Xcursor (consider an SDK for this).
1911ifeq ($(VBOX_XCURSOR_LIBS),)
1912 ifeq ($(KBUILD_TARGET),solaris)
1913 VBOX_XCURSOR_LIBS := $(lastword $(wildcard $(KBUILD_DEVTOOLS_TRG)/libXcursor/*/lib/libXcursor.a))
1914 ifneq ($(VBOX_XCURSOR_LIBS),)
1915 VBOX_XCURSOR_INCS := $(patsubst %/lib/libXcursor.a,%/include, $(VBOX_XCURSOR_LIBS))
1916 VBOX_XCURSOR_LIBS += X11 Xrender Xfixes
1917 endif
1918 endif
1919 ifeq ($(VBOX_XCURSOR_LIBS),)
1920 VBOX_XCURSOR_LIBS := Xcursor
1921 endif
1922endif
1923
1924
1925# Intel ASL compiler for ACPI
1926VBOX_IASLCMD ?= $(firstword $(wildcard $(KBUILD_DEVTOOLS_HST)/bin/iasl$(HOSTSUFF_EXE)) iasl$(HOSTSUFF_EXE))
1927
1928# libxslt XSLT processor. (see PATH_TOOL_YASM for explanation why it's temporarily located in bin.)
1929ifeq ($(VBOX_XSLTPROC),)
1930 ifeq ($(KBUILD_HOST),win)
1931 VBOX_XSLTPROC := $(wildcard $(KBUILD_DEVTOOLS)/$(KBUILD_HOST).$(KBUILD_HOST_ARCH)/libxslt/10128/bin/xsltproc.exe)
1932 ifeq ($(VBOX_XSLTPROC),)
1933 VBOX_XSLTPROC := $(KBUILD_DEVTOOLS)/win.x86/bin/xsltproc.exe
1934 endif
1935 else ifeq ($(KBUILD_HOST),os2)
1936 VBOX_XSLTPROC := BEGINLIBPATH="$(KBUILD_DEVTOOLS_HST)/bin;$$BEGINLIBPATH" $(KBUILD_DEVTOOLS_HST)/bin/xsltproc.exe
1937 else ifeq ($(KBUILD_HOST),haiku)
1938 VBOX_XSLTPROC := $(KBUILD_DEVTOOLS)/haiku.x86/bin/xsltproc
1939 else
1940 VBOX_XSLTPROC := xsltproc$(HOSTSUFF_EXE)
1941 endif
1942endif
1943
1944# bin2c (convert binary files into C arrays)
1945VBOX_BIN2C ?= $(PATH_OBJ)/bin2c/bin2c$(HOSTSUFF_EXE)
1946
1947# RTManifest (extension pack manifest utility)
1948VBOX_RTMANIFEST ?= $(PATH_OBJ)/bldRTManifest/bldRTManifest$(HOSTSUFF_EXE)
1949
1950# RTSignTool (certificate extraction tool)
1951VBOX_RTSIGNTOOL ?= $(PATH_OBJ)/bldRTSignTool/bldRTSignTool$(HOSTSUFF_EXE)
1952
1953# RTIsoMaker - our own ISO maker.
1954VBOX_RTISOMAKER ?= $(PATH_OBJ)/bldRTIsoMaker/bldRTIsoMaker$(HOSTSUFF_EXE)
1955
1956# VBoxCmp (simple /bin/cmp with more sensible output)
1957VBOX_VBOXCMP ?= $(PATH_OBJ)/VBoxCmp/VBoxCmp$(HOSTSUFF_EXE)
1958
1959# VBoxCPP (special purpose C preprocessor)
1960VBOX_VBOXCPP ?= $(PATH_OBJ)/VBoxCPP/VBoxCPP$(HOSTSUFF_EXE)
1961
1962# VBoxTpG (tracepoint generator)
1963VBOX_VBOXTPG ?= $(PATH_OBJ)/VBoxTpG/VBoxTpG$(HOSTSUFF_EXE)
1964
1965# VBoxPeSetVersion (changes the minimum OS version of an image)
1966VBOX_PE_SET_VERSION ?= $(PATH_OBJ)/VBoxPeSetVersion/VBoxPeSetVersion$(HOSTSUFF_EXE)
1967
1968# Visual C++ EditBin.exe.
1969VBOX_VCC_EDITBIN = $(if $(PATH_TOOL_$(VBOX_VCC_TOOL)_BIN),$(PATH_TOOL_$(VBOX_VCC_TOOL)_BIN)/,)editbin.exe /NoLogo
1970
1971# filesplitter (splits java files)
1972VBOX_FILESPLIT ?= $(PATH_OBJ)/filesplitter/filesplitter$(HOSTSUFF_EXE)
1973
1974# biossums (set BIOS checksums)
1975VBOX_BIOSSUMS ?= $(PATH_OBJ)/biossums/biossums$(HOSTSUFF_EXE)
1976
1977# MakeAlternativeSource (for BIOSes)
1978VBOX_MAKE_ALTERNATIVE_SOURCE ?= $(PATH_OBJ)/MakeAlternativeSource/MakeAlternativeSource$(HOSTSUFF_EXE)
1979
1980# VBoxDef2LazyLoad (lazy dynamic library loader assembly generator)
1981VBOX_DEF_2_LAZY_LOAD ?= $(PATH_OBJ)/VBoxDef2LazyLoad/VBoxDef2LazyLoad$(HOSTSUFF_EXE)
1982
1983# VBoxCheckImports (checks what we imports from on windows)
1984VBOX_CHECK_IMPORTS ?= $(PATH_OBJ)/VBoxCheckImports/VBoxCheckImports$(HOSTSUFF_EXE)
1985
1986# GNU tar if present.
1987if1of ($(KBUILD_TARGET), linux os2 win)
1988 VBOX_GTAR ?= tar
1989else if1of ($(KBUILD_TARGET), freebsd netbsd solaris)
1990 VBOX_GTAR ?= gtar
1991endif
1992
1993# zip
1994VBOX_ZIP ?= zip$(HOSTSUFF_EXE)
1995
1996ifeq ($(KBUILD_TARGET),win)
1997 ifeq ($(KBUILD_TARGET_ARCH),x86) # Normally we should test for KBUILD_HOST_ARCH but we only require MINGWW64 for 64-bit _targets_
1998 VBOX_NM ?= $(PATH_TOOL_MINGW32)/bin/nm.exe -p
1999 else
2000 VBOX_NM ?= $(PATH_TOOL_MINGWW64)/bin/nm.exe -p
2001 endif
2002else ifeq ($(KBUILD_HOST),darwin) # Xcode 7.3.1 nm doesn't like -t, and -x behaves very differently. Throwing in -B (bsd) to make sure.
2003 VBOX_NM ?= $(subst $(REDIRECT_INT),$(REDIRECT_EXT),$(TOOL_$(VBOX_GCC_TOOL)_ENV_SETUP) $(PATH_TOOL_$(VBOX_GCC_TOOL)_TOOLCHAIN_BIN_SLASH)nm) -p \
2004 $(if-expr $(VBOX_XCODE_VERSION_MAJOR) > 7 || ($(VBOX_XCODE_VERSION_MAJOR) == 7 && $(VBOX_XCODE_VERSION_MINOR) >= 3),-B,)
2005else
2006 VBOX_NM ?= nm -p -t x
2007endif
2008
2009# Makeself for the linux installers.
2010VBOX_MAKESELF ?= $(KBUILD_DEVTOOLS)/common/makeself/v2.1.5/makeself.sh
2011
2012# Microsoft HTML Help Workshop.
2013VBOX_PATH_HTML_HELP_WORKSHOP ?= $(KBUILD_DEVTOOLS)/win.x86/HTML_Help_Workshop/v1.3/
2014
2015# Path to the null soft installer.
2016VBOX_PATH_NSIS ?= $(KBUILD_DEVTOOLS)/win.x86/nsis/v2.51-log-nsscm-r2
2017
2018# Path to AutoIt3.
2019VBOX_PATH_AUTOIT3 ?= $(KBUILD_DEVTOOLS)/win.x86/autoit/v3.2.10.0
2020
2021# Windows install tools...
2022# Note! The scripts has been moved to Bin in v8.0.
2023VBOX_PATH_WIX ?= $(KBUILD_DEVTOOLS)/win.x86/wix/v3.8.1128.0
2024VBOX_PATH_MSITRAN ?= $(KBUILD_DEVTOOLS)/win.x86/sdk/v7.1/Bin/MsiTran.Exe
2025VBOX_PATH_MSIDB ?= $(KBUILD_DEVTOOLS)/win.x86/sdk/v7.1/Bin/MsiDb.Exe
2026VBOX_PATH_WISUBSTG ?= $(KBUILD_DEVTOOLS)/win.x86/sdk/v7.1/Samples/sysmgmt/msi/scripts/WiSubStg.vbs
2027VBOX_PATH_WISUMINFO ?= $(KBUILD_DEVTOOLS)/win.x86/sdk/v7.1/Samples/sysmgmt/msi/scripts/WiSumInf.vbs
2028VBOX_PATH_DIFX ?= $(KBUILD_DEVTOOLS)/win.$(KBUILD_TARGET_ARCH)/DIFx/v2.1-r3
2029VBOX_PATH_CABSDK ?= $(KBUILD_DEVTOOLS)/win.x86/cabsdk/r1
2030VBOX_PATH_MAKECAB ?= $(VBOX_PATH_CABSDK)/BIN/MAKECAB.EXE
2031
2032ifdef VBOX_OSE ## @todo try get rid of this crap! People can use the latest and greatest Yasm release, no need to check in the binary for OSE.
2033 # We need to export YASM for OSE, but since it was converted to .zip we need to
2034 # allow for the location used by the zip to be properly cleaned up first.
2035 if1of ($(KBUILD_HOST).$(KBUILD_HOST_ARCH), linux.x86 solaris.x86 win.x86)
2036 PATH_TOOL_YASM ?= $(KBUILD_DEVTOOLS_HST)/bin
2037 endif
2038endif
2039
2040# The Microsoft IDL compiler (the SDK build needs this on non-Windows).
2041VBOX_WIN_MIDL ?= $(EXEC_X86_WIN32) $(call VBOX_FN_MAKE_WIN_PATH,$(firstword $(wildcard $(addsuffix /[Mm][Ii][Dd][Ll].[Ee][Xx][Ee], \
2042 $(KBUILD_DEVTOOLS)/win.x86/sdk/v7.1/Bin$(if-expr "$(KBUILD_HOST).$(KBUILD_HOST_ARCH)" == "win.amd64",/x64,) \
2043 $(KBUILD_DEVTOOLS)/win.x86/ddk/7600.16385.1/bin/x86 \
2044 $(KBUILD_DEVTOOLS)/win.x86/bin \
2045 $(PATH_SDK_$(VBOX_WINPSDK)_BIN) \
2046 $(PATH_SDK_$(VBOX_WINPSDK)) \
2047 $(PATH_SDK_WINPSDK_BIN) \
2048 $(PATH_SDK_WINPSDK) \
2049 )) Sorry_Cannot_Find_The_Midl_Compiler_In_The_PSDK))
2050
2051# XPCOM setup for all but win32.
2052ifneq ($(KBUILD_TARGET),win)
2053 VBOX_WITH_XPCOM = 1
2054 # if updating, also update xpidl_INST var in src/libs/xpcom18a4/Makefile.kmk
2055 VBOX_XPIDL ?= $(PATH_STAGE_BIN)/xpidl$(HOSTSUFF_EXE)
2056 ifeq ($(KBUILD_TARGET),os2)
2057 VBOX_XPIDL_ENV = BEGINLIBPATH="$(dir $(VBOX_XPIDL));$$BEGINLIBPATH"$(SP)
2058 endif
2059 VBOX_PATH_XPCOM_IDL ?= $(VBOX_PATH_SDK)/bindings/xpcom/idl
2060 VBOX_XPCOM_INCS ?= \
2061 $(VBOX_PATH_SDK)/bindings/xpcom/include \
2062 $(VBOX_PATH_SDK)/bindings/xpcom/include/xpcom \
2063 $(VBOX_PATH_SDK)/bindings/xpcom/include/string \
2064 $(VBOX_PATH_SDK)/bindings/xpcom/include/xpcom \
2065 $(VBOX_PATH_SDK)/bindings/xpcom/include/nsprpub \
2066 $(VBOX_PATH_SDK)/bindings/xpcom/include/ipcd
2067 ifneq ($(KBUILD_TARGET),os2)
2068 # libIDL-config (for xpcom18a4)
2069 ifeq ($(origin VBOX_LIBIDL_CONFIG),undefined)
2070 export VBOX_LIBIDL_CONFIG := $(firstword $(shell which libIDL-config-2 libIDL-config 2> /dev/null))
2071 endif
2072 endif
2073endif
2074
2075# The X11 LIBPATH. (The amd64 hack is for RHEL4.)
2076ifeq ($(KBUILD_TARGET_ARCH),amd64)
2077 VBOX_LIBPATH_X11 ?= /usr/X11R6/lib64 /usr/X11R6/lib
2078else
2079 VBOX_LIBPATH_X11 ?= /usr/X11R6/lib
2080endif
2081
2082# 32bit X11 LIBPATH for building 32bit guest additions
2083VBOX_LIBPATH32_X11 ?= /usr/X11R6/lib32 /usr/X11R6/lib
2084
2085# Good windows shell.
2086VBOX_GOOD_COMSPEC = $(subst \,/,$(SystemRoot))/System32/cmd.exe
2087VBOX_GOOD_COMSPEC_BS ?= $(subst /,\,$(VBOX_GOOD_COMSPEC))
2088
2089#
2090# Macros dealing with the darwin version we're targeting.
2091# The DEF in VBOX_DEF_MACOSX_VERSION_MIN mean default. The default min
2092# version is assumed to be the
2093#
2094ifeq ($(KBUILD_TARGET),darwin)
2095 ifdef VBOX_WITH_NEW_XCODE
2096 VBOX_DEF_MACOSX_VERSION_MIN ?= 10.9
2097 else
2098 VBOX_DEF_MACOSX_VERSION_MIN ?= 10.6
2099 endif
2100
2101 ifdef VBOX_WITH_NEW_XCODE
2102 # Use the tool path of the compiler (it's clang, not gcc in this instance).
2103 include $(KBUILD_TOOL_PATHS)/$(VBOX_GCC_TOOL).kmk
2104 VBOX_PATH_MACOSX_DEVEL_ROOT := $(PATH_TOOL_$(VBOX_GCC_TOOL))
2105 else
2106 # Check for the Xcode 4.1 bits in tools/darwin.x86.
2107 if !defined(VBOX_WITH_MACOSX_COMPILERS_FROM_DEVEL) \
2108 && !defined(VBOX_XCODE_VERSION) \
2109 && exists "$(KBUILD_DEVTOOLS)/darwin.x86/xcode/v4.1"
2110 VBOX_WITH_MACOSX_COMPILERS_FROM_DEVEL := 1
2111 VBOX_PATH_MACOSX_DEVEL_ROOT := $(KBUILD_DEVTOOLS)/darwin.x86/xcode/v4.1
2112 VBOX_XCODE_VERSION := 4.1
2113 endif
2114 endif
2115
2116 # Fallback - system / LocalConfig.kmk.
2117 ifdef VBOX_WITH_NEW_XCODE
2118 ifndef VBOX_PATH_MACOSX_DEVEL_ROOT
2119 VBOX_PATH_MACOSX_DEVEL_ROOT := $(firstword $(wildcard /Applications/Xcode.app/Contents/Developer /Developer))
2120 endif
2121 ifndef VBOX_PATH_MACOSX_SDK_ROOT
2122 VBOX_PATH_MACOSX_SDK_ROOT := $(firstword $(wildcard \
2123 $(PATH_TOOL_$(VBOX_GCC_TOOL)_SDKS) \
2124 $(VBOX_PATH_MACOSX_DEVEL_ROOT)/SDKs/. \
2125 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/. \
2126 /Developer/SDKs/. ))
2127 endif
2128 ifndef VBOX_PATH_MACOSX_TOOLCHAIN_ROOT
2129 VBOX_PATH_MACOSX_TOOLCHAIN_ROOT := $(firstword $(wildcard \
2130 $(PATH_TOOL_$(VBOX_GCC_TOOL)_TOOLCHAIN) \
2131 $(VBOX_PATH_MACOSX_DEVEL_ROOT)/Library/Developer/CommandLineTools/. \
2132 $(VBOX_PATH_MACOSX_DEVEL_ROOT)/Toolchains/XcodeDefault.xctoolchain/. \
2133 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/. \
2134 /Library/Developer/CommandLineTools/. \
2135 ) /. )
2136 endif
2137 else
2138 VBOX_PATH_MACOSX_DEVEL_ROOT ?= /Developer
2139 VBOX_PATH_MACOSX_SDK_ROOT ?= $(VBOX_PATH_MACOSX_DEVEL_ROOT)/SDKs
2140 VBOX_PATH_MACOSX_TOOLCHAIN_ROOT ?= $(VBOX_PATH_MACOSX_DEVEL_ROOT)
2141 endif
2142
2143 # Figure the default SDK location and obsolete linker tricks.
2144 ifeq ($(VBOX_DEF_MACOSX_VERSION_MIN),10.4)
2145 ifeq ($(origin VBOX_DARWIN_CLASSIC_LINKER),undefined)
2146 VBOX_DARWIN_CLASSIC_LINKER := $(shell ld -v 2>&1 )
2147 ifneq ($(filter ld64%, $(subst :, , $(VBOX_DARWIN_CLASSIC_LINKER))),)
2148 export VBOX_DARWIN_CLASSIC_LINKER := -Wl,-classic_linker
2149 else
2150 export VBOX_DARWIN_CLASSIC_LINKER :=
2151 endif
2152 endif
2153 VBOX_PATH_MACOSX_SDK ?= $(VBOX_PATH_MACOSX_SDK_ROOT)/MacOSX$(VBOX_DEF_MACOSX_VERSION_MIN)u.sdk
2154 else
2155 VBOX_PATH_MACOSX_SDK ?= $(VBOX_PATH_MACOSX_SDK_ROOT)/MacOSX$(VBOX_DEF_MACOSX_VERSION_MIN).sdk
2156 endif
2157
2158 ## The Xcode version.
2159 ifeq ($(KBUILD_HOST),darwin)
2160 ifndef VBOX_XCODE_VERSION
2161 ifdef VBOX_WITH_NEW_XCODE
2162 VBOX_XCODE_VERSION := $(word 2, $(shell $(VBOX_PATH_MACOSX_DEVEL_ROOT)/usr/bin/xcodebuild -version))
2163 else ifdef VBOX_WITH_MACOSX_COMPILERS_FROM_DEVEL
2164 VBOX_XCODE_VERSION := $(word 2, $(shell $(VBOX_PATH_MACOSX_DEVEL_ROOT)/usr/bin/xcodebuild -version))
2165 else
2166 VBOX_XCODE_VERSION := $(word 2, $(shell xcodebuild -version))
2167 endif
2168 ifdef VBOX_WITH_NEW_XCODE
2169 VBOX_XCODE_VERSION ?= 6.2
2170 else
2171 VBOX_XCODE_VERSION ?= 4.1
2172 endif
2173 endif
2174 ifdef VBOX_WITH_NEW_XCODE
2175 if defined(VBOX_WITH_REM) && "$(VBOX_XCODE_VERSION)" >= "4.2"
2176 $(warning Xcode $(VBOX_XCODE_VERSION) is not able to correctly build the recompiler! Please disabled it: 'VBOX_WITH_REM=')
2177 endif
2178 ifdef KBUILD_USE_KOBJCACHE
2179 $(warning KBUILD_USE_KOBJCACHE does _not_ currently work with this version of Xcode)
2180 endif
2181 else
2182 ifeq ($(VBOX_XCODE_VERSION),4.2)
2183 $(warning Xcode 4.2 is not able to correctly build the recompiler!)
2184 $(warning Please downgrade to Xcode 4.1 if you want a working VMM!)
2185 endif
2186 endif
2187 else
2188 VBOX_XCODE_VERSION ?= 4.1
2189 endif
2190 VBOX_XCODE_VERSION_MAJOR := $(word 1, $(subst ., ,$(VBOX_XCODE_VERSION)))
2191 VBOX_XCODE_VERSION_MINOR := $(word 2, $(subst ., ,$(VBOX_XCODE_VERSION)))
2192 VBOX_XCODE_VERSION := $(VBOX_XCODE_VERSION_MAJOR).$(VBOX_XCODE_VERSION_MINOR)
2193
2194 ifeq ($(KBUILD_TARGET_ARCH),x86)
2195 if1of ($(VBOX_DEF_MACOSX_VERSION_MIN), 10.4 10.5)
2196 VBOX_DARWIN_NO_COMPACT_LINKEDIT ?= $(VBOX_LD_no_compact_linkedit)
2197 TOOL_GXX4MACHO_SUFFIX ?= -4.0
2198 endif
2199 else
2200 if $(VBOX_XCODE_VERSION_MAJOR) < 4 && "$(VBOX_XCODE_VERSION)" != "3.2"
2201 ifeq ($(PATH_CURRENT),$(PATH_ROOT)/tools)
2202 $(warning VBox: 64-bit darwin builds require Xcode 3.2 or later, you have $(VBOX_XCODE_VERSION))
2203 else
2204 $(error VBox: 64-bit darwin builds require Xcode 3.2 or later, you have $(VBOX_XCODE_VERSION))
2205 endif
2206 endif
2207 endif
2208 ifdef VBOX_WITH_NEW_XCODE
2209 override TOOL_StandardDTrace_DTRACE := $(TOOL_$(VBOX_GCC_TOOL)_ENV_SETUP) dtrace "-xcpppath=$(VBOX_PATH_MACOSX_DEVEL_ROOT)/usr/bin/gcc"
2210 export PATH:=$(VBOX_PATH_MACOSX_SDK)/usr/bin:$(PATH)
2211 else
2212 if $(VBOX_XCODE_VERSION_MAJOR) > 4 || ($(VBOX_XCODE_VERSION_MAJOR) == 4 && $(VBOX_XCODE_VERSION_MINOR) >= 2)
2213 TOOL_GXX4MACHO_PREFIX ?= llvm-
2214 endif
2215 if $(VBOX_XCODE_VERSION_MAJOR) < 5
2216 TOOL_GXX4MACHO_SUFFIX ?= -4.2
2217 endif
2218 VBOX_DARWIN_NO_COMPACT_LINKEDIT ?=
2219
2220 TOOL_GCC4MACHO_SUFFIX ?= $(TOOL_GXX4MACHO_SUFFIX)$(HOSTSUFF_EXE)
2221 TOOL_GCC4MACHO_PREFIX ?= $(TOOL_GXX4MACHO_PREFIX)
2222 if defined(VBOX_WITH_MACOSX_COMPILERS_FROM_DEVEL)
2223 TOOL_GCC4MACHO_PREFIX := $(VBOX_PATH_MACOSX_TOOLCHAIN_ROOT)/usr/bin/$(TOOL_GCC4MACHO_PREFIX)
2224 TOOL_GXX4MACHO_PREFIX := $(VBOX_PATH_MACOSX_TOOLCHAIN_ROOT)/usr/bin/$(TOOL_GXX4MACHO_PREFIX)
2225 TOOL_GCC4MACHO_SUFFIX := $(TOOL_GCC4MACHO_SUFFIX) -isysroot $(VBOX_PATH_MACOSX_SDK)
2226 TOOL_GXX4MACHO_SUFFIX := $(TOOL_GXX4MACHO_SUFFIX) -isysroot $(VBOX_PATH_MACOSX_SDK)
2227 ifndef SVN # must expand first so we won't be using old svn.
2228 SVN := $(firstword $(which svn) svn)
2229 endif
2230 if $(VBOX_XCODE_VERSION_MAJOR) > 4 || ($(VBOX_XCODE_VERSION_MAJOR) == 4 && $(VBOX_XCODE_VERSION_MINOR) >= 2)
2231 export PATH:=$(VBOX_PATH_MACOSX_DEVEL_ROOT)/usr/bin/:$(VBOX_PATH_MACOSX_SDK)/usr/bin:$(VBOX_PATH_MACOSX_TOOLCHAIN_ROOT)/usr/bin:$(PATH)
2232 export DEVELOPER_DIR:=$(VBOX_PATH_MACOSX_DEVEL_ROOT)
2233 else
2234 export PATH:=$(VBOX_PATH_MACOSX_DEVEL_ROOT)/usr/bin/:$(PATH)
2235 endif
2236 TOOL_GXX32_CC = $(TOOL_GCC4MACHO_PREFIX)gcc$(TOOL_GCC4MACHO_SUFFIX) -m32
2237 TOOL_GXX32_CXX = $(TOOL_GCC4MACHO_PREFIX)g++$(TOOL_GCC4MACHO_SUFFIX) -m32
2238 TOOL_GXX32_LD = $(TOOL_GXX32_CXX)
2239 override TOOL_StandardDTrace_DTRACE := dtrace "-xcpppath=$(TOOL_GCC4MACHO_PREFIX)cpp-4.2"
2240 endif
2241 if $(VBOX_XCODE_VERSION_MAJOR) < 5
2242 ## @todo WTF do we do the -m32/64 stuff here for these compilers? Also the visibility should be elsewhere...
2243 TOOL_GXX4MACHO_OBJC = $(TOOL_GCC4MACHO_PREFIX)gcc$(TOOL_GCC4MACHO_SUFFIX) $(if-expr $(KBUILD_TARGET_ARCH) == "x86",-m32,-m64) -fvisibility=hidden
2244 TOOL_GXX4MACHO_OBJCXX = $(TOOL_GCC4MACHO_PREFIX)gcc$(TOOL_GCC4MACHO_SUFFIX) $(if-expr $(KBUILD_TARGET_ARCH) == "x86",-m32,-m64) -fvisibility=hidden -fvisibility-inlines-hidden
2245 endif
2246 endif
2247
2248 VBOX_DARWIN_DEF_SDK_DEFS := MAC_OS_X_VERSION_MIN_REQUIRED=$(subst .,,$(VBOX_DEF_MACOSX_VERSION_MIN))0 \
2249 MAC_OS_X_VERSION_MAX_ALLOWED=$(subst .,,$(VBOX_DEF_MACOSX_VERSION_MIN))0
2250 VBOX_DARWIN_DEF_SDK_CFLAGS := -mmacosx-version-min=$(VBOX_DEF_MACOSX_VERSION_MIN) -isysroot $(VBOX_PATH_MACOSX_SDK)
2251 VBOX_DARWIN_DEF_SDK_CXXFLAGS := -mmacosx-version-min=$(VBOX_DEF_MACOSX_VERSION_MIN) -isysroot $(VBOX_PATH_MACOSX_SDK)
2252 VBOX_DARWIN_DEF_SDK_OBJCFLAGS := -mmacosx-version-min=$(VBOX_DEF_MACOSX_VERSION_MIN) -isysroot $(VBOX_PATH_MACOSX_SDK)
2253 VBOX_DARWIN_DEF_SDK_OBJCXXFLAGS := -mmacosx-version-min=$(VBOX_DEF_MACOSX_VERSION_MIN) -isysroot $(VBOX_PATH_MACOSX_SDK)
2254 VBOX_DARWIN_DEF_SDK_LDFLAGS = -mmacosx-version-min=$(VBOX_DEF_MACOSX_VERSION_MIN) -Wl,-syslibroot,$(VBOX_PATH_MACOSX_SDK) \
2255 -Wl,-headerpad_max_install_names $(VBOX_DARWIN_CLASSIC_LINKER) $(VBOX_DARWIN_NO_COMPACT_LINKEDIT)
2256
2257 # specific versions.
2258 ## @todo s/VBOX_DARWIN_DEF_SDK_10/VBOX_DARWIN_SDK_10/g
2259
2260 if1of ($(VBOX_DEF_MACOSX_VERSION_MIN), 10.4) # classic linker detection is bust otherwise
2261 VBOX_PATH_MACOSX_SDK_10_4 ?= $(VBOX_PATH_MACOSX_SDK_ROOT)/MacOSX10.4u.sdk
2262 VBOX_DARWIN_DEF_SDK_10_4_DEFS := MAC_OS_X_VERSION_MIN_REQUIRED=1040 MAC_OS_X_VERSION_MAX_ALLOWED=1040
2263 VBOX_DARWIN_DEF_SDK_10_4_CFLAGS := -mmacosx-version-min=10.4 -isysroot $(VBOX_PATH_MACOSX_SDK_10_4)
2264 VBOX_DARWIN_DEF_SDK_10_4_CXXFLAGS := -mmacosx-version-min=10.4 -isysroot $(VBOX_PATH_MACOSX_SDK_10_4)
2265 VBOX_DARWIN_DEF_SDK_10_4_OBJCFLAGS := -mmacosx-version-min=10.4 -isysroot $(VBOX_PATH_MACOSX_SDK_10_4)
2266 VBOX_DARWIN_DEF_SDK_10_4_OBJCXXFLAGS := -mmacosx-version-min=10.4 -isysroot $(VBOX_PATH_MACOSX_SDK_10_4)
2267 VBOX_DARWIN_DEF_SDK_10_4_LDFLAGS := -mmacosx-version-min=10.4 -Wl,-syslibroot,$(VBOX_PATH_MACOSX_SDK_10_4) \
2268 -Wl,-headerpad_max_install_names $(VBOX_DARWIN_CLASSIC_LINKER)
2269 else
2270 VBOX_PATH_MACOSX_SDK_10_4 = $(error VBox: $(if $(target),$(target): ,)Using 10.4 SDK)
2271 VBOX_DARWIN_DEF_SDK_10_4_CXXFLAGS = $(error VBox: $(if $(target),$(target): ,)Using 10.4 SDK)
2272 VBOX_DARWIN_DEF_SDK_10_4_LDFLAGS = $(error VBox: $(if $(target),$(target): ,)Using 10.4 SDK)
2273 endif
2274
2275 if1of ($(VBOX_DEF_MACOSX_VERSION_MIN), 10.4 10.5)
2276 VBOX_PATH_MACOSX_SDK_10_5 ?= $(VBOX_PATH_MACOSX_SDK_ROOT)/MacOSX10.5.sdk
2277 VBOX_DARWIN_DEF_SDK_10_5_DEFS := MAC_OS_X_VERSION_MIN_REQUIRED=1050 MAC_OS_X_VERSION_MAX_ALLOWED=1050
2278 VBOX_DARWIN_DEF_SDK_10_5_CFLAGS := -mmacosx-version-min=10.5 -isysroot $(VBOX_PATH_MACOSX_SDK_10_5)
2279 VBOX_DARWIN_DEF_SDK_10_5_CXXFLAGS := -mmacosx-version-min=10.5 -isysroot $(VBOX_PATH_MACOSX_SDK_10_5)
2280 VBOX_DARWIN_DEF_SDK_10_5_OBJCFLAGS := -mmacosx-version-min=10.5 -isysroot $(VBOX_PATH_MACOSX_SDK_10_5)
2281 VBOX_DARWIN_DEF_SDK_10_5_OBJCXXFLAGS := -mmacosx-version-min=10.5 -isysroot $(VBOX_PATH_MACOSX_SDK_10_5)
2282 VBOX_DARWIN_DEF_SDK_10_5_LDFLAGS := -mmacosx-version-min=10.5 -Wl,-syslibroot,$(VBOX_PATH_MACOSX_SDK_10_5) \
2283 -Wl,-headerpad_max_install_names $(VBOX_DARWIN_NO_COMPACT_LINKEDIT)
2284 else
2285 VBOX_PATH_MACOSX_SDK_10_5 = $(error VBox: $(if $(target),$(target): ,)Using 10.5 SDK)
2286 VBOX_DARWIN_DEF_SDK_10_5_CXXFLAGS = $(error VBox: $(if $(target),$(target): ,)Using 10.5 SDK)
2287 VBOX_DARWIN_DEF_SDK_10_5_LDFLAGS = $(error VBox: $(if $(target),$(target): ,)Using 10.5 SDK)
2288 endif
2289
2290 if1of ($(VBOX_DEF_MACOSX_VERSION_MIN), 10.4 10.5 10.6)
2291 VBOX_PATH_MACOSX_SDK_10_6 ?= $(VBOX_PATH_MACOSX_SDK_ROOT)/MacOSX10.6.sdk
2292 VBOX_DARWIN_DEF_SDK_10_6_DEFS := MAC_OS_X_VERSION_MIN_REQUIRED=1060 MAC_OS_X_VERSION_MAX_ALLOWED=1060
2293 VBOX_DARWIN_DEF_SDK_10_6_CFLAGS := -mmacosx-version-min=10.6 -isysroot $(VBOX_PATH_MACOSX_SDK_10_6)
2294 VBOX_DARWIN_DEF_SDK_10_6_CXXFLAGS := -mmacosx-version-min=10.6 -isysroot $(VBOX_PATH_MACOSX_SDK_10_6)
2295 VBOX_DARWIN_DEF_SDK_10_6_OBJCFLAGS := -mmacosx-version-min=10.6 -isysroot $(VBOX_PATH_MACOSX_SDK_10_6)
2296 VBOX_DARWIN_DEF_SDK_10_6_OBJCXXFLAGS := -mmacosx-version-min=10.6 -isysroot $(VBOX_PATH_MACOSX_SDK_10_6)
2297 VBOX_DARWIN_DEF_SDK_10_6_LDFLAGS := -mmacosx-version-min=10.6 -Wl,-syslibroot,$(VBOX_PATH_MACOSX_SDK_10_6) \
2298 -Wl,-headerpad_max_install_names
2299 else
2300 VBOX_PATH_MACOSX_SDK_10_6 = $(error VBox: $(if $(target),$(target): ,)Using 10.6 SDK)
2301 VBOX_DARWIN_DEF_SDK_10_6_CXXFLAGS = $(error VBox: $(if $(target),$(target): ,)Using 10.6 SDK)
2302 VBOX_DARWIN_DEF_SDK_10_6_LDFLAGS = $(error VBox: $(if $(target),$(target): ,)Using 10.6 SDK)
2303 endif
2304
2305 if1of ($(VBOX_DEF_MACOSX_VERSION_MIN), 10.4 10.5 10.6 10.7)
2306 ifndef VBOX_PATH_MACOSX_SDK_10_7
2307 ifneq ($(wildcard $(VBOX_PATH_MACOSX_SDK_ROOT)/MacOSX10.7.sdk),)
2308 VBOX_PATH_MACOSX_SDK_10_7 = $(VBOX_PATH_MACOSX_SDK_ROOT)/MacOSX10.7.sdk
2309 else
2310 VBOX_PATH_MACOSX_SDK_10_7 = $(KBUILD_DEVTOOLS)/darwin.x86/SDKs/MacOSX10.7.sdk
2311 endif
2312 endif
2313 VBOX_DARWIN_DEF_SDK_10_7_DEFS := MAC_OS_X_VERSION_MIN_REQUIRED=1070 MAC_OS_X_VERSION_MAX_ALLOWED=1070
2314 VBOX_DARWIN_DEF_SDK_10_7_CFLAGS := -mmacosx-version-min=10.7 -isysroot $(VBOX_PATH_MACOSX_SDK_10_7)
2315 VBOX_DARWIN_DEF_SDK_10_7_CXXFLAGS := -mmacosx-version-min=10.7 -isysroot $(VBOX_PATH_MACOSX_SDK_10_7)
2316 VBOX_DARWIN_DEF_SDK_10_7_OBJCFLAGS := -mmacosx-version-min=10.7 -isysroot $(VBOX_PATH_MACOSX_SDK_10_7)
2317 VBOX_DARWIN_DEF_SDK_10_7_OBJCXXFLAGS := -mmacosx-version-min=10.7 -isysroot $(VBOX_PATH_MACOSX_SDK_10_7)
2318 VBOX_DARWIN_DEF_SDK_10_7_LDFLAGS := -mmacosx-version-min=10.7 -Wl,-syslibroot,$(VBOX_PATH_MACOSX_SDK_10_7) \
2319 -Wl,-headerpad_max_install_names
2320 else
2321 VBOX_PATH_MACOSX_SDK_10_7 = $(error VBox: $(if $(target),$(target): ,)Using 10.7 SDK)
2322 VBOX_DARWIN_DEF_SDK_10_7_CXXFLAGS = $(error VBox: $(if $(target),$(target): ,)Using 10.7 SDK)
2323 VBOX_DARWIN_DEF_SDK_10_7_LDFLAGS = $(error VBox: $(if $(target),$(target): ,)Using 10.7 SDK)
2324 endif
2325
2326 #
2327 # Use bison and flex from Xcode to avoid linking issues (bison).
2328 #
2329 TOOL_BISON_YACC ?= $(TOOL_$(VBOX_GCC_TOOL)_ENV_SETUP) $(PATH_TOOL_$(VBOX_GCC_TOOL)_TOOLCHAIN_BIN_SLASH)bison
2330 TOOL_FLEX_LEX ?= $(TOOL_$(VBOX_GCC_TOOL)_ENV_SETUP) $(PATH_TOOL_$(VBOX_GCC_TOOL)_TOOLCHAIN_BIN_SLASH)flex
2331
2332endif # target=darwin
2333
2334#
2335# Macro switching between @executable_path, @rpath and /Applications/VirtualBox.app
2336# depending on whether the build is hardened or not (dylib install_name).
2337#
2338ifeq ($(KBUILD_TARGET),darwin)
2339 ifndef VBOX_DYLD_EXECUTABLE_PATH
2340 ifdef VBOX_WITH_HARDENING
2341 VBOX_DYLD_EXECUTABLE_PATH = $(VBOX_PATH_APP_PRIVATE_ARCH)
2342 else if 0
2343 VBOX_DYLD_EXECUTABLE_PATH = @executable_path
2344 else
2345 VBOX_DYLD_EXECUTABLE_PATH = @rpath
2346 VBOX_WITH_RELATIVE_RUNPATH = @loader_path/
2347 endif
2348 endif
2349endif
2350
2351#
2352# Check for incompatible rpath combinations.
2353#
2354if defined(VBOX_WITH_RUNPATH) && defined(VBOX_WITH_ORIGIN)
2355 $(error VBox: VBOX_WITH_RUNPATH and VBOX_WITH_ORIGIN are mutually exclusive)
2356endif
2357if defined(VBOX_WITH_RELATIVE_RUNPATH) && defined(VBOX_WITH_ORIGIN)
2358 $(error VBox: VBOX_WITH_RELATIVE_RUNPATH and VBOX_WITH_ORIGIN are mutually exclusive)
2359endif
2360if defined(VBOX_WITH_RUNPATH) && defined(VBOX_WITH_RELATIVE_RUNPATH)
2361 $(error VBox: VBOX_WITH_RUNPATH and VBOX_WITH_RELATIVE_RUNPATH are mutually exclusive)
2362endif
2363if defined(VBOX_WITH_RELATIVE_RUNPATH) && defined(VBOX_WITH_HARDENING)
2364 $(error VBox: VBOX_WITH_RELATIVE_RUNPATH and VBOX_WITH_HARDENING are mutually exclusive)
2365endif
2366
2367#
2368# VBOX_WITH_ORIGIN translates into VBOX_WITH_RELATIVE_RUNPATH.
2369#
2370# We use two helper variables for the VBOX_WITH_ORIGIN stuff:
2371# VBOX_ORIGIN - Indirect expansion trick.
2372# VBOX_GCC_RPATH_OPT - Different GCC/LD combinations needs different options.
2373#
2374VBOX_ORIGIN = $$ORIGIN
2375ifeq ($(KBUILD_TARGET),solaris)
2376 VBOX_GCC_RPATH_OPT = -R
2377else
2378 VBOX_GCC_RPATH_OPT = -Wl,-rpath,
2379 VBOX_GCC_ORIGIN_OPT = -Wl,-z,origin
2380endif
2381ifdef VBOX_WITH_ORIGIN
2382 VBOX_WITH_RELATIVE_RUNPATH = $$(VBOX_ORIGIN)
2383endif
2384
2385
2386#
2387# The X11 headers.
2388#
2389VBOX_PATH_X11_ROOT = $(PATH_ROOT)/src/VBox/Additions/x11/x11include
2390
2391
2392#
2393# Miscellaneous includes
2394#
2395VBOX_GRAPHICS_INCS = $(PATH_ROOT)/include/VBox/Graphics
2396VBOX_JPEG_INCS = $(PATH_ROOT)/src/libs/jpeg-9b
2397
2398
2399#
2400# crOpenGL related paths and variables.
2401#
2402ifdef VBOX_WITH_CROGL
2403 ifdef VBOX_WITH_WDDM
2404 VBOX_WITH_CRHGSMI = 1
2405 endif
2406
2407 if1of ($(KBUILD_TARGET),darwin)
2408 #VBOX_WITH_CR_DISPLAY_LISTS = 1
2409 endif
2410
2411 VBOX_PATH_CROGL_GLAPI = $(PATH_ROOT)/src/VBox/GuestHost/OpenGL/glapi_parser
2412 VBOX_PATH_CROGL_GENFILES = $(PATH_OBJ)/VBoxOGLgen
2413 VBOX_PATH_CROGL_INCLUDE = $(PATH_ROOT)/src/VBox/GuestHost/OpenGL/include
2414 VBOX_CROGL_API_FILES = $(VBOX_PATH_CROGL_GLAPI)/apiutil.py $(VBOX_PATH_CROGL_GLAPI)/APIspec.txt
2415 VBOX_CROGL_PYTHON_ENV = $(REDIRECT) $(if $1,-E 'PYTHONPATH=$1',) $(if $2,-o $2,) $(if $3,-i $3) --
2416
2417 if1of ($(KBUILD_HOST), os2 win)
2418 VBOX_PATH_CROGL_PYTHON_INCLUDE = $(VBOX_PATH_CROGL_GLAPI);$(PATH_ROOT)/src/VBox/GuestHost/OpenGL/packer;$(PATH_ROOT)/src/VBox/HostServices/SharedOpenGL/crserverlib
2419 else
2420 VBOX_PATH_CROGL_PYTHON_INCLUDE = $(VBOX_PATH_CROGL_GLAPI):$(PATH_ROOT)/src/VBox/GuestHost/OpenGL/packer:$(PATH_ROOT)/src/VBox/HostServices/SharedOpenGL/crserverlib
2421 endif
2422
2423 ifeq ($(KBUILD_TARGET),win)
2424 VBOX_LIB_OGL_CRUTIL = $(PATH_OBJ)/VBoxOGLcrutil/VBoxOGLcrutil$(VBOX_SUFF_LIB)
2425 VBOX_LIB_OGL_HOSTCRUTIL = $(PATH_OBJ)/VBoxOGLhostcrutil/VBoxOGLhostcrutil$(VBOX_SUFF_LIB)
2426 ifeq ($(KBUILD_TARGET),x86)
2427 VBOX_LIB_OGL_CRUTIL_X86 = $(VBOX_LIB_OGL_CRUTIL)
2428 else
2429 VBOX_LIB_OGL_CRUTIL_X86 = $(PATH_OBJ)/VBoxOGLcrutil-x86/VBoxOGLcrutil-x86$(VBOX_SUFF_LIB)
2430 endif
2431 else
2432 VBOX_LIB_OGL = $(VBOX_PATH_ADDITIONS)/VBoxOGL$(VBOX_SUFF_DLL)
2433 VBOX_LIB_OGL_CRUTIL = $(VBOX_PATH_ADDITIONS)/VBoxOGLcrutil$(VBOX_SUFF_DLL)
2434 VBOX_LIB_OGL_HOSTCRUTIL = $(PATH_STAGE_BIN)/VBoxOGLhostcrutil$(VBOX_SUFF_DLL)
2435 endif
2436
2437 if1of ($(KBUILD_TARGET), freebsd linux solaris)
2438 ifndef VBOX_USE_SYSTEM_GL_HEADERS
2439 VBOX_GL_INCS = \
2440 $(VBOX_PATH_X11_ROOT)/glproto-1.4.10 \
2441 $(VBOX_PATH_X11_ROOT)/mesa-7.2
2442 endif
2443 endif
2444
2445 VBOX_DARWIN_OPENGL_INST = obj/VBoxOGL/GL/
2446 VBOX_DARWIN_OPENGL_HEADERS = gl.h glu.h
2447 SDK_DARWIN-OPENGL = Workaround SDK for the darwin OpenGL include directorly layout layout.
2448 SDK_DARWIN-OPENGL_INCS = $(PATH_OUT)/obj/VBoxOGL
2449 SDK_DARWIN-OPENGL_ORDERDEPS = $(addprefix $(PATH_OUT)/obj/VBoxOGL/GL/,$(VBOX_DARWIN_OPENGL_HEADERS))
2450 ## @todo kBuild: Using INTERMEDIATES doesn't work!
2451endif
2452
2453# The icons to use.
2454ifdef VBOX_OSE
2455 VBOX_WINDOWS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/win/OSE/VirtualBox_win.ico
2456 VBOX_WINDOWS_ADDITIONS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/win/OSE/VirtualBox_win.ico
2457 VBOX_NSIS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/win/OSE/VirtualBox_win.ico
2458 VBOX_MACOSX_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/darwin/OSE/VirtualBox.icns
2459else
2460 ifeq ($(KBUILD_HOST),win)
2461 VBOX_WINDOWS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/win/NonOSE/VirtualBox-vista.ico
2462 VBOX_WINDOWS_ADDITIONS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/win/NonOSE/VirtualBoxGA-vista.ico
2463 VBOX_NSIS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/win/NonOSE/VirtualBoxGA-nsis.ico
2464 TOOL_VCC80X86_RC := $(KBUILD_DEVTOOLS)/win.x86/ddk/6000/bin/x86/rc.exe
2465 TOOL_VCC80AMD64_RC := $(KBUILD_DEVTOOLS)/win.x86/ddk/6000/bin/x86/rc.exe
2466 TOOL_VCC70_RC := $(KBUILD_DEVTOOLS)/win.x86/ddk/6000/bin/x86/rc.exe
2467 else
2468 VBOX_WINDOWS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/win/NonOSE/VirtualBox-winxp.ico
2469 VBOX_WINDOWS_ADDITIONS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/win/NonOSE/VirtualBoxGA-winxp.ico
2470 VBOX_NSIS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/win/NonOSE/VirtualBox-nsis.ico
2471 endif
2472 VBOX_MACOSX_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/darwin/NonOSE/VirtualBox.icns
2473endif
2474
2475
2476ifndef VBOX_NOINC_DYNAMIC_CONFIG_KMK
2477#
2478# GCC and YASM dynamic properties.
2479# Most of this is resolved on first kmk invocation and cached in PATH_OUT.
2480#
2481# Note! That a harmless warning is printed if the file doesn't exist.
2482# Note! Changes in GCC are not detected automatically (yet).
2483#
2484if $(pos VBox,$(VBOX_GCC_TOOL)) > 0
2485 include $(KBUILD_TOOL_PATHS)/$(VBOX_GCC_TOOL).kmk
2486else
2487 include $(KBUILD_PATH)/tools/$(VBOX_GCC_TOOL).kmk
2488endif
2489ifneq ($(VBOX_GCC_TOOL),$(VBOX_GCC32_TOOL))
2490 if $(pos VBox,$(VBOX_GCC32_TOOL)) > 0
2491 include $(KBUILD_TOOL_PATHS)/$(VBOX_GCC32_TOOL).kmk
2492 else
2493 include $(KBUILD_PATH)/tools/$(VBOX_GCC32_TOOL).kmk
2494 endif
2495endif
2496
2497# These tests never worked on Windows because of /dev/null, so, there
2498# can be no harm in just dropping them until cygwin is mp safe.
2499ifeq ($(KBUILD_HOST),win)
2500 VBOX_GCC_CHECK_EX_CC = $(3)
2501 VBOX_GCC_CHECK_EX_CXX = $(3)
2502 VBOX_GCC_CHECK_EX_LD = $(3)
2503 VBOX_GCC_CHECK_CC = $(2)
2504 VBOX_GCC_CHECK_CXX = $(2)
2505 VBOX_GCC_CHECK_LD = $(2)
2506 VBOX_GCC32_CHECK_CXX = $(2)
2507else
2508 # Note! The chcking for 'error: unknown warning option' is for clang on darwin not giving us a
2509 # non-zero exit code when using an invalid option here, but it does later on.
2510 ifndef CLOSEPAR
2511 CLOSEPAR := )
2512 endif
2513 VBOX_GCC_CHECK_EX_CC_CXX = $(shell \
2514 if $(1) $(subst -Wno-,-W,$(2)) -Werror -c -o /dev/null $(4) > /dev/null 2>&1; then \
2515 case "`LC_ALL=C $(1) $(subst -Wno-,-W,$(2)) -Werror -c -o /dev/null $(4) 2>&1`" in \
2516 "error: unknown warning option"*$(CLOSEPAR) echo "$(3)";; \
2517 *$(CLOSEPAR) echo "$(2)";; \
2518 esac; \
2519 else echo "$(3)"; fi; )
2520 VBOX_GCC_CHECK_EX_CC = $(call VBOX_GCC_CHECK_EX_CC_CXX,$(1),$(2),$(3),-xc $(PATH_OUT)/DynamicConfig.c)
2521 VBOX_GCC_CHECK_EX_CXX = $(call VBOX_GCC_CHECK_EX_CC_CXX,$(1),$(2),$(3),-xc++ $(PATH_OUT)/DynamicConfig.cpp)
2522 VBOX_GCC_CHECK_EX_LD = $(shell \
2523 if $(1) -Wl,$(2) $(if $(eq $(KBUILD_HOST),darwin),-Wl$(COMMA)-u$(COMMA)start -Wl$(COMMA)-undefined$(COMMA)dynamic_lookup,) \
2524 -nostdlib -o /dev/null -xc /dev/null > /dev/null 2>&1; \
2525 then echo "-Wl,$(2)"; else echo "$(3)"; fi; )
2526
2527 VBOX_GCC_CHECK_CC = $(call VBOX_GCC_CHECK_EX_CC, $(TOOL_$(VBOX_GCC_TOOL)_ENV_SETUP) $(TOOL_$(VBOX_GCC_TOOL)_CC),$1,$2)
2528 VBOX_GCC_CHECK_CXX = $(call VBOX_GCC_CHECK_EX_CXX, $(TOOL_$(VBOX_GCC_TOOL)_ENV_SETUP) $(TOOL_$(VBOX_GCC_TOOL)_CXX),$1,$2)
2529 VBOX_GCC_CHECK_LD = $(call VBOX_GCC_CHECK_EX_LD, $(TOOL_$(VBOX_GCC_TOOL)_ENV_SETUP) $(TOOL_$(VBOX_GCC_TOOL)_LD),$1,$2)
2530 VBOX_GCC32_CHECK_CXX = $(call VBOX_GCC_CHECK_EX_CXX, $(TOOL_$(VBOX_GCC32_TOOL)_ENV_SETUP) $(TOOL_$(VBOX_GCC32_TOOL)_CXX),$1,$2)
2531endif
2532
2533ifeq ($(KBUILD_HOST),win) ## @todo can drop this now, we're not using cygwin.
2534 # This isn't important (yet) on windows, so cook the result until
2535 # cygwin is feeling better.
2536 VBOX_GCC_VERSION := $(int-add $(int-mul 10000, 3), $(int-mul 100, 3), 3)
2537else
2538 # This is kind of bad, the returned string needs to be re-evaluated before use.
2539 # The reason for this hack is that the windows kmk_ash cannot deal with $((1+1)).
2540 # Some versions of gcc (e.g. openSUSE11) return only major.minor on `gcc -dumpversion`.
2541 # gcc-5 of openSUSE42.1 only returns the major version on `gcc -dumpversion`!
2542 VBOX_GCC_VERSION = $(shell ($(1) -dumpfullversion 2>/dev/null || $(1) -dumpversion) | \
2543 $(SED_EXT) 's|\([0-9]\)\.\{0,1\}\([0-9]\{0,1\}\)\.\{0,1\}\([0-9]\{0,1\}\).*|$$(int-add $$(int-mul 10000, \1), $$(int-mul 100, $$(firstword \2 0)), $$(firstword \3 0))|' )
2544endif
2545
2546# Find MinGW cross compilers for EFI on non-windows systems. We need to probe
2547# them for supported options in the Dynamic Config.kmk section below.
2548ifdef VBOX_WITH_EFI
2549 ifneq ($(KBUILD_HOST),win)
2550 ifndef VBOX_PATH_PREFIX_MINGW32
2551 VBOX_PATH_PREFIX_MINGW32 := $(firstword \
2552 $(which i686-w64-mingw32-gcc) \
2553 $(which i686-w32-mingw32-gcc) \
2554 $(which i686-pc-mingw32-gcc) \
2555 $(which i586-mingw32msvc-gcc) \
2556 )# Add more variants.
2557 ifdef VBOX_PATH_PREFIX_MINGW32
2558 VBOX_PATH_PREFIX_MINGW32 := $(substr $(VBOX_PATH_PREFIX_MINGW32), 1, $(expr $(length-var VBOX_PATH_PREFIX_MINGW32) - 3))
2559 endif
2560 endif
2561 ifndef VBOX_PATH_PREFIX_MINGW64
2562 VBOX_PATH_PREFIX_MINGW64 := $(firstword \
2563 $(which x86_64-w64-mingw64-gcc) \
2564 $(which x86_64-w64-mingw32-gcc) \
2565 $(which x86_64-pc-mingw64-gcc) \
2566 $(which x86_64-pc-mingw32-gcc) \
2567 $(which x86_64-w32-mingw32-gcc) \
2568 )# Add more variants.
2569 ifdef VBOX_PATH_PREFIX_MINGW64
2570 VBOX_PATH_PREFIX_MINGW64 := $(substr $(VBOX_PATH_PREFIX_MINGW64), 1, $(expr $(length-var VBOX_PATH_PREFIX_MINGW64) - 3))
2571 endif
2572 endif
2573 if defined(VBOX_PATH_PREFIX_MINGW32) || defined(VBOX_PATH_PREFIX_MINGW64)
2574 if !defined(VBOX_PATH_PREFIX_MINGW32)
2575 VBOX_PATH_PREFIX_MINGW32 = $(VBOX_PATH_PREFIX_MINGW64)
2576 else if !defined(VBOX_PATH_PREFIX_MINGW64)
2577 VBOX_PATH_PREFIX_MINGW64 = $(VBOX_PATH_PREFIX_MINGW32)
2578 endif
2579 endif
2580 endif # !win
2581endif # VBOX_WITH_EFI
2582
2583# YASM macros
2584ifndef DONT_USE_YASM
2585 include $(KBUILD_PATH)/tools/YASM.kmk
2586 if1of ($(KBUILD_HOST), win os2)
2587 VBOX_YASM_CHECK = $(if-expr "$(shell $(TOOL_YASM_AS) -e -o nul $1 - < /dev/null 2>&1)" == "",$(1),)
2588 else
2589 VBOX_YASM_CHECK = $(if-expr "$(shell $(TOOL_YASM_AS) -e -o /dev/null $1 - < /dev/null 2>&1)" == "",$(1),)
2590 endif
2591else
2592 VBOX_YASM_CHECK =
2593endif
2594
2595# NASM macros (input and output must differ with recent versions (strcmp)).
2596ifndef DONT_USE_NASM
2597 include $(KBUILD_PATH)/tools/NASM.kmk
2598 if1of ($(KBUILD_HOST), win os2)
2599 VBOX_NASM_CHECK = $(if-expr "$(shell $(TOOL_NASM_AS) -e -o nul $1 NUL 2>&1)" == "",$(1),$(2))
2600 else
2601 VBOX_NASM_CHECK = $(if-expr "$(shell $(TOOL_NASM_AS) -e -o /dev/./null $1 /dev/null 2>&1)" == "",$(1),$(2))
2602 endif
2603else
2604 VBOX_NASM_CHECK =
2605endif
2606
2607# Figures the pylin version.
2608VBOX_PYLINT_FIGURE_VERSION = $(shell $(1) --version 2> /dev/null \
2609 | $(SED_EXT) -n -e 's|^ *pylint *\([0-9][0-9]*\).\([0-9][0-9]*\)\.\([0-9][0-9]*\).*$(DOLLAR)|$$(expr \1 * 10000 + \2 * 100 + \3)|p' )
2610
2611# Test C and C++ files.
2612$(PATH_OUT)/DynamicConfig.c $(PATH_OUT)/DynamicConfig.cpp:
2613 $(QUIET)$(MKDIR) -p $(@D)
2614 $(QUIET)$(APPEND) -tn "$@" "int foobar(void)" "{" " return 42;" "}" ""
2615
2616# No $(QUIET) here as it's interesting to see what goes into the file.
2617$(PATH_OUT)/DynamicConfig.kmk: \
2618 $(PATH_ROOT)/Config.kmk \
2619 $(LOCALCFG) \
2620 $(AUTOCFG) \
2621 $(VBOX_GCC_PATH_CC) \
2622 $(VBOX_GCC_PATH_CXX) \
2623 $(VBOX_GCC32_PATH_CC) \
2624 $(VBOX_GCC32_PATH_CXX) \
2625 $(if-expr "$(KBUILD_HOST).$(KBUILD_HOST_ARCH)" == "solaris.amd64" && $(KBUILD_HOST_VERSION_MINOR) >= 11 \
2626 , /platform/i86pc/kernel/$(KBUILD_HOST_ARCH)/unix,) \
2627 | $(PATH_OUT)/DynamicConfig.c $(PATH_OUT)/DynamicConfig.cpp
2628 $(call MSG_GENERATE,,$@,)
2629 $(QUIET)$(RM) -f '$@'
2630 $(QUIET)$(MKDIR) -p $(@D)
2631
2632# HC compiler switch detection.
2633 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_PATH_CC ?= $(which $(TOOL_$(VBOX_GCC_TOOL)_CC))'
2634 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_PATH_CXX ?= $(which $(TOOL_$(VBOX_GCC_TOOL)_CXX))'
2635 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_VERSION_CC ?= $(call VBOX_GCC_VERSION,$(TOOL_$(VBOX_GCC_TOOL)_CC))'
2636 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_VERSION_CXX ?= $(call VBOX_GCC_VERSION,$(TOOL_$(VBOX_GCC_TOOL)_CXX))'
2637 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_LIBGCC ?= $(shell $(TOOL_$(VBOX_GCC_TOOL)_CC) -print-libgcc-file-name)'
2638 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-pointer-sign ?= $(call VBOX_GCC_CHECK_CC,-Wno-pointer-sign,)'
2639 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-array_bounds ?= $(call VBOX_GCC_CHECK_CC,-Wno-array-bounds,)'
2640# -Wextra produces additional useful warnings but includes -Wno-missing-field-initializers (too noisy)
2641 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wextra ?= $(call VBOX_GCC_CHECK_CC,-Wextra,)'
2642 $(QUIET)$(APPEND) '$@' 'ifneq ($$(VBOX_GCC_VERSION_CC),)'
2643 $(QUIET)$(APPEND) '$@' ' ifneq ($$(int-ge $$(VBOX_GCC_VERSION_CC),40500),)'
2644 $(QUIET)$(APPEND) '$@' ' VBOX_GCC_Wlogical-op ?= $(call VBOX_GCC_CHECK_CC,-Wlogical-op,)'
2645 $(QUIET)$(APPEND) '$@' ' endif'
2646 $(QUIET)$(APPEND) '$@' 'endif'
2647 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-address ?= $(call VBOX_GCC_CHECK_CXX,-Wno-address,)'
2648 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-delete-non-virtual-dtor ?= $(call VBOX_GCC_CHECK_CXX,-Wno-delete-non-virtual-dtor,)'
2649 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-int-in-bool-context ?= $(call VBOX_GCC_CHECK_CC,-Wno-int-in-bool-context,)'
2650 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-int-to-pointer-cast ?= $(call VBOX_GCC_CHECK_CC,-Wno-int-to-pointer-cast,)'
2651 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-invalid-offsetof ?= $(call VBOX_GCC_CHECK_CXX,-Wno-invalid-offsetof,)'
2652 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-literal-suffix ?= $(call VBOX_GCC_CHECK_CXX,-Wno-literal-suffix,)'
2653 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-misleading-indentation ?= $(call VBOX_GCC_CHECK_CC,-Wno-misleading-indentation,)'
2654 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-missing-field-initializers ?= $(call VBOX_GCC_CHECK_CC,-Wno-missing-field-initializers,)'
2655 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-pointer-to-int-cast ?= $(call VBOX_GCC_CHECK_CC,-Wno-pointer-to-int-cast,)'
2656 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-variadic-macros ?= $(call VBOX_GCC_CHECK_CXX,-Wno-variadic-macros,)'
2657 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-vla ?= $(call VBOX_GCC_CHECK_CXX,-Wno-vla,)'
2658 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-overlength-strings?= $(call VBOX_GCC_CHECK_CC,-Wno-overlength-strings,)'
2659 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-overloaded-virtual?= $(call VBOX_GCC_CHECK_CXX,-Wno-overloaded-virtual,)'
2660 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_fno-stack-protector ?= $(call VBOX_GCC_CHECK_CC,-fno-stack-protector,)'
2661 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_fno-dwarf2-cfi-asm ?= $(call VBOX_GCC_CHECK_CC,-fno-dwarf2-cfi-asm,)'
2662 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_m64 ?= $(call VBOX_GCC_CHECK_CC,-m64,)'
2663 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_no-pie ?= $(call VBOX_GCC_CHECK_CC,-no-pie,)'
2664 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_fdiagnostics-show-option ?= $(call VBOX_GCC_CHECK_CC,-fdiagnostics-show-option,)'
2665 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wa_cma_nocompress_debug_sections ?= $(call VBOX_GCC_CHECK_CC,-Wa$(COMMA)--nocompress-debug-sections,)'
2666# Produce code optimized for the most common IA32/AMD64/EM64T processors. Introduced with gcc version 4.2.
2667 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_mtune-generic ?= $(call VBOX_GCC_CHECK_CC,-mtune=generic,)'
2668 $(QUIET)$(APPEND) '$@' 'VBOX_LD_as_needed ?= $(call VBOX_GCC_CHECK_LD,--as-needed,)'
2669# gcc version < 3.4 has a bug in handling __attribute__((regparm(3))).
2670# See http://osdir.com/ml/gcc.prs/2002-08/msg00223.html and probably http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20004
2671 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_BUGGY_REGPARM ?= $$(int-lt $$(VBOX_GCC_VERSION_CC),30400)'
2672# Set default attribute for ELF and MACH-O symbols to ``hidden'' to reduce the number
2673# of relocation entries and PLT indirections in shared libraries. Don't allow for gcc version < 4.
2674 $(QUIET)$(APPEND) '$@' 'ifneq ($$(VBOX_GCC_VERSION_CC),)'
2675 $(QUIET)$(APPEND) '$@' ' ifneq ($$(int-ge $$(VBOX_GCC_VERSION_CC),40000),)'
2676 $(QUIET)$(APPEND) '$@' ' VBOX_GCC_fvisibility-hidden ?= $(call VBOX_GCC_CHECK_CC,-fvisibility=hidden -DVBOX_HAVE_VISIBILITY_HIDDEN -DRT_USE_VISIBILITY_DEFAULT,)'
2677 $(QUIET)$(APPEND) '$@' ' endif'
2678 $(QUIET)$(APPEND) '$@' 'endif'
2679ifn1of ($(KBUILD_TARGET),haiku)
2680# Set default attribute for inline functions to ``hidden'' to reduce the number
2681# of relocation entries and PLT indirections in shared libraries. Don't allow for gcc version < 4.
2682 $(QUIET)$(APPEND) '$@' 'ifneq ($$(VBOX_GCC_VERSION_CXX),)'
2683 $(QUIET)$(APPEND) '$@' ' ifneq ($$(int-ge $$(VBOX_GCC_VERSION_CXX),40000),)'
2684 $(QUIET)$(APPEND) '$@' ' VBOX_GCC_fvisibility-inlines-hidden ?= $(call VBOX_GCC_CHECK_CXX,-fvisibility-inlines-hidden,)'
2685 $(QUIET)$(APPEND) '$@' ' endif'
2686 $(QUIET)$(APPEND) '$@' 'endif'
2687endif
2688# Prevent warnings about unused parameters as of gcc-4.8 / clang 6 as this warning is now very verbose
2689 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-unused-parameter ?= $(call VBOX_GCC_CHECK_CC,-Wno-unused-parameter,)'
2690# Clang 6.
2691 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-language-extension-token ?= $(call VBOX_GCC_CHECK_CC,-Wno-language-extension-token,)'
2692 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-extended-offsetof ?= $(call VBOX_GCC_CHECK_CC,-Wno-extended-offsetof,)'
2693 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-gnu-folding-constant ?= $(call VBOX_GCC_CHECK_CC,-Wno-gnu-folding-constant,)'
2694 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-return-type-c-linkage ?= $(call VBOX_GCC_CHECK_CXX,-Wno-return-type-c-linkage,)'
2695 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-string-plus-int ?= $(call VBOX_GCC_CHECK_CC,-Wno-string-plus-int,)'
2696 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-nested-anon-types ?= $(call VBOX_GCC_CHECK_CC,-Wno-nested-anon-types,)'
2697# C++ Std settings
2698 $(QUIET)$(APPEND) '$@' 'ifneq ($$(VBOX_GCC_VERSION_CXX),)'
2699 $(QUIET)$(APPEND) '$@' ' ifneq ($$(int-ge $$(VBOX_GCC_VERSION_CXX),40800),)'
2700 $(QUIET)$(APPEND) '$@' ' VBOX_GCC_std ?= -std=c++11'
2701 $(QUIET)$(APPEND) '$@' ' else ifneq ($$(int-ge $$(VBOX_GCC_VERSION_CXX),40600),)'
2702 $(QUIET)$(APPEND) '$@' ' VBOX_GCC_std ?= -std=c++0x'
2703 $(QUIET)$(APPEND) '$@' ' endif'
2704 $(QUIET)$(APPEND) '$@' 'endif'
2705ifeq ($(KBUILD_TARGET),solaris)
2706 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_msave-args ?= $(call VBOX_GCC_CHECK_CXX,-msave-args,)'
2707# Detect the solaris assembler. It is used by the the 4.x gcc compilers,
2708# apparently. It will not be able to handle IEMAll via a -pipe, only when
2709# passed a file. The solaris assmbler rulez ... not!
2710 $(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: *//' )'
2711 $(QUIET)$(APPEND) '$@' 'if $$(pos Sun Compiler Common,$$(VBOX_AS_VERSION)) > 0'
2712 $(QUIET)$(APPEND) '$@' ' VBOX_GCC_USING_SOLARIS_AS=1'
2713 $(QUIET)$(APPEND) '$@' 'endif'
2714 $(QUIET)$(APPEND) '$@' 'ifndef VBOX_GCC_USING_SOLARIS_AS'
2715 $(QUIET)$(APPEND) '$@' ' VBOX_GCC_pipe ?= -pipe'
2716 $(QUIET)$(APPEND) '$@' 'endif'
2717else
2718 $(QUIET)$(APPEND) '$@' 'VBOX_GCC_pipe ?= -pipe'
2719endif
2720# Find the compiler includes for IPRT no-crt.
2721# Note that `$(dir $(gcc -print-libgcc-file-name))/include does not work for a 64-bit cross build on a 32-bit build host.
2722ifeq ($(KBUILD_HOST),win)
2723# With the cygwin issues and gcc on windows returning a useless path, just skip this on windows.
2724 $(QUIET)$(APPEND) '$@' 'VBOX_PATH_GCC_INCS ?= '
2725else
2726 $(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'
2727endif
2728# 32-bit (GC) compiler switch detection.
2729 $(QUIET)$(APPEND) '$@' 'VBOX_GCC32_PATH_CC ?= $(which $(TOOL_$(VBOX_GCC32_TOOL)_CC))'
2730 $(QUIET)$(APPEND) '$@' 'VBOX_GCC32_PATH_CXX ?= $(which $(TOOL_$(VBOX_GCC32_TOOL)_CXX))'
2731 $(QUIET)$(APPEND) '$@' 'VBOX_GCC32_VERSION_CC ?= $(call VBOX_GCC_VERSION,$(TOOL_$(VBOX_GCC32_TOOL)_CC))'
2732 $(QUIET)$(APPEND) '$@' 'VBOX_GCC32_VERSION_CXX ?= $(call VBOX_GCC_VERSION,$(TOOL_$(VBOX_GCC32_TOOL)_CXX))'
2733 $(QUIET)$(APPEND) '$@' 'VBOX_GCC32_LIBGCC ?= $(shell $(TOOL_$(VBOX_GCC32_TOOL)_CC) -print-libgcc-file-name)'
2734 $(QUIET)$(APPEND) '$@' 'VBOX_GCC32_Wno-variadic-macros ?= $(call VBOX_GCC32_CHECK_CXX,-Wno-variadic-macros,)'
2735# darwin no_compact_linkedit starting at Xcode 3.2
2736ifeq ($(KBUILD_HOST),darwin)
2737 $(QUIET)$(APPEND) '$@' 'VBOX_LD_no_compact_linkedit ?= $(call VBOX_GCC_CHECK_LD,-no_compact_linkedit,)'
2738endif
2739# YASM
2740 $(QUIET)$(APPEND) '$@' '# debug: TOOL_YASM_AS="$(TOOL_YASM_AS)"'
2741 $(QUIET)$(APPEND) '$@' 'VBOX_YASM_Wno-segreg-in-64bit ?= $(call VBOX_YASM_CHECK,-Wno-segreg-in-64bit,)'
2742# NASM (--allow-64-bit: 2.12rc2)
2743 $(QUIET)$(APPEND) '$@' 'VBOX_NASM_allow_64_bit ?= $(call VBOX_NASM_CHECK,--allow-64-bit,)'
2744ifeq ($(KBUILD_HOST),linux)
2745 $(QUIET)$(APPEND) '$@' 'VBOX_LD_HAS_LIBXCB ?= $(shell /sbin/ldconfig -p|grep -q "\<libxcb\.so\.1\>" && echo "1")'
2746endif
2747
2748ifdef VBOX_PATH_PREFIX_MINGW32
2749 $(QUIET)$(APPEND) '$@' 'VBOX_MINGW32_VERSION_CC ?= $(call VBOX_GCC_VERSION,$(VBOX_PATH_PREFIX_MINGW32)gcc -m32)'
2750 $(QUIET)$(APPEND) '$@' 'VBOX_MINGW32_VERSION_CXX ?= $(call VBOX_GCC_VERSION,$(VBOX_PATH_PREFIX_MINGW32)g++ -m32)'
2751 $(QUIET)$(APPEND) '$@' 'VBOX_MINGW32_Wno-array-bounds ?= $(call VBOX_GCC_CHECK_EX_CXX,$(VBOX_PATH_PREFIX_MINGW32)g++ -m32,-Wno-array-bounds,)'
2752 $(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,)'
2753 $(QUIET)$(APPEND) '$@' 'VBOX_MINGW32_Wno-maybe-uninitialized ?= $(call VBOX_GCC_CHECK_EX_CXX,$(VBOX_PATH_PREFIX_MINGW32)g++ -m32,-Wno-maybe-uninitialized,)'
2754 $(QUIET)$(APPEND) '$@' 'VBOX_MINGW32_USER_LABEL_PREFIX ?= $(shell echo "__USER_LABEL_PREFIX__" | $(VBOX_PATH_PREFIX_MINGW32)g++ -m32 -E -xc++ - | $(SED) -e "/^$(HASH)/d")'
2755endif
2756ifdef VBOX_PATH_PREFIX_MINGW64
2757 $(QUIET)$(APPEND) '$@' 'VBOX_MINGW64_VERSION_CC ?= $(call VBOX_GCC_VERSION,$(VBOX_PATH_PREFIX_MINGW64)gcc -m64)'
2758 $(QUIET)$(APPEND) '$@' 'VBOX_MINGW64_VERSION_CXX ?= $(call VBOX_GCC_VERSION,$(VBOX_PATH_PREFIX_MINGW64)g++ -m64)'
2759 $(QUIET)$(APPEND) '$@' 'VBOX_MINGW64_Wno-array-bounds ?= $(call VBOX_GCC_CHECK_EX_CXX,$(VBOX_PATH_PREFIX_MINGW64)g++ -m64,-Wno-array-bounds,)'
2760 $(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,)'
2761 $(QUIET)$(APPEND) '$@' 'VBOX_MINGW64_Wno-maybe-uninitialized ?= $(call VBOX_GCC_CHECK_EX_CXX,$(VBOX_PATH_PREFIX_MINGW64)g++ -m64,-Wno-maybe-uninitialized,)'
2762 $(QUIET)$(APPEND) '$@' 'VBOX_MINGW64_USER_LABEL_PREFIX ?= $(shell echo "__USER_LABEL_PREFIX__" | $(VBOX_PATH_PREFIX_MINGW64)g++ -m64 -E -xc++ - | $(SED) -e "/^$(HASH)/d")'
2763endif
2764ifeq ($(KBUILD_HOST),darwin)
2765 $(QUIET)$(APPEND) '$@' 'VBOX_HAVE_FLEX ?= 1'
2766 $(QUIET)$(APPEND) '$@' 'VBOX_HAVE_BISON ?= 1'
2767else
2768 $(QUIET)$(APPEND) '$@' 'VBOX_HAVE_FLEX ?= $(if $(which flex),1,)'
2769 $(QUIET)$(APPEND) '$@' 'VBOX_HAVE_BISON ?= $(if $(which bison),1,)'
2770endif
2771 $(QUIET)$(APPEND) '$@' 'VBOX_HAVE_XMLLINT ?= $(which xmllint)'
2772if "$(KBUILD_HOST)" == "solaris" && $(KBUILD_HOST_VERSION_MAJOR) == 5 && $(KBUILD_HOST_VERSION_MINOR) == 11
2773# uname -v can report "snv_XYZ" or "11.X"
2774 $(QUIET)$(APPEND) '$@' 'VBOX_SOLARIS_11_VERSION ?= $(shell uname -v | sed "s/snv_//" | cut -f1 -d".")'
2775# FULLVERSION format e.g. "5.11-0.175.1.0.0.16.0", we're interested in 175 (VERSION), 1 (UPDATE), 16 (BUILD).
2776 $(QUIET)$(APPEND) '$@' "VBOX_SOLARIS_11_FULLVERSION := $(shell pkg contents -H -t set -o pkg.fmri system/kernel | $(SED_EXT) -e '1!d' -e 's/^.*\@//;s/\:.*//;s/.*,//')"
2777 $(QUIET)$(APPEND) '$@' 'ifeq ($$(VBOX_SOLARIS_11_VERSION),11)'
2778 $(QUIET)$(APPEND) '$@' ' VBOX_SOLARIS_11_VERSION := $$(word 2, $$(subst ., ,$$(word 2,$$(subst -, ,$$(VBOX_SOLARIS_11_FULLVERSION)))))'
2779 $(QUIET)$(APPEND) '$@' 'endif'
2780 $(QUIET)$(APPEND) '$@' 'VBOX_SOLARIS_11_UPDATE_VERSION := $$(word 3, $$(subst ., ,$$(word 2,$$(subst -, ,$$(VBOX_SOLARIS_11_FULLVERSION)))))'
2781 $(QUIET)$(APPEND) '$@' 'VBOX_SOLARIS_11_BUILD_VERSION := $$(word 6, $$(subst ., ,$$(word 2,$$(subst -, ,$$(VBOX_SOLARIS_11_FULLVERSION)))))'
2782endif
2783if defined(VBOX_PYLINT) && !defined(VBOX_WITH_PYLINT_PRE_V1_0) && !defined(VBOX_WITH_PYLINT_V1_1_PLUS) && !defined(VBOX_WITH_PYLINT_V1_2_1_PLUS)
2784 $(QUIET)$(APPEND) '$@' "VBOX_PYLINT_VERSION := $(call VBOX_PYLINT_FIGURE_VERSION, $(VBOX_PYLINT))"
2785endif
2786
2787 $(QUIET)$(ECHO) '========= START OF $@ ========='
2788 $(QUIET)$(CAT) $@
2789 $(QUIET)$(ECHO) '=========== END OF $@ ========='
2790
2791include $(PATH_OUT)/DynamicConfig.kmk
2792endif # !VBOX_NOINC_DYNAMIC_CONFIG_KMK
2793
2794
2795#
2796# Compiler warning control.
2797#
2798VBOX_GCC_WARN ?= -Wall $(VBOX_GCC_Wextra) $(VBOX_GCC_Wno-missing-field-initializers) -Wno-unused -Wno-trigraphs \
2799 $(VBOX_GCC_fdiagnostics-show-option) $(VBOX_GCC_Wno-unused-parameter) $(VBOX_GCC_Wno-language-extension-token) \
2800 $(VBOX_GCC_Wno-extended-offsetof) $(VBOX_GCC_Wno-gnu-folding-constant) $(VBOX_GCC_Wlogical-op) \
2801 $(VBOX_GCC_Wno-string-plus-int) $(VBOX_GCC_Wno-nested-anon-types) $(VBOX_GCC_Wno-variadic-macros)
2802VBOX_GCC_WARN_PEDANTIC = -Wshadow $(VBOX_GCC_WARN) -Wno-long-long
2803if $(VBOX_GCC_VERSION_CXX) >= 40200 || defined(VBOX_WITH_MASOCHISTIC_WARNINGS) # gcc 4.2.x+ (4.1.2 is causing trouble with the extpack & add builds)
2804 VBOX_GCC_WARN_MASOCHISTIC ?= -Wunused-variable -Wunused-function -Wunused-label -Wunused-parameter
2805endif
2806if $(KBUILD_TARGET) == "linux" \
2807 || ($(KBUILD_TARGET) == "darwin" && defined(VBOX_WITH_NEW_XCODE)) \
2808 || defined(VBOX_WITH_MASOCHISTIC_WARNINGS)
2809 VBOX_GCC_WARN_PEDANTIC += $(VBOX_GCC_WARN_MASOCHISTIC)
2810endif
2811
2812VBOX_GCC_PEDANTIC_CXX ?= -pedantic $(VBOX_GCC_WARN_PEDANTIC) $(VBOX_GCC_Wno-return-type-c-linkage) $(VBOX_GCC_Wno-overloaded-virtual)
2813VBOX_GCC_PEDANTIC_C ?= -pedantic $(VBOX_GCC_WARN_PEDANTIC) -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -Werror-implicit-function-declaration
2814
2815VBOX_GCC_NON_PEDANTIC_CXX ?= -Wno-sign-compare
2816VBOX_GCC_NON_PEDANTIC_C ?= -Wno-sign-compare -Werror-implicit-function-declaration
2817
2818ifdef VBOX_WITH_NEW_XCODE
2819 VBOX_GCC_PEDANTIC_CXX += -Wno-c99-extensions
2820 VBOX_GCC_NON_PEDANTIC_CXX += -Wno-c99-extensions
2821endif
2822
2823# The address sanitiser library intercepts dlopen() and breaks RPATH $ORIGIN,
2824# so we need to link it statically.
2825ifdef VBOX_WITH_GCC_SANITIZER
2826 VBOX_GCC_SANITIZER_FLAGS := \
2827 -fsanitize=undefined \
2828 -fsanitize=address \
2829 -fsanitize=return \
2830 -fsanitize=bounds \
2831 -fsanitize=object-size \
2832 -fno-sanitize=alignment \
2833 -fno-sanitize=vptr \
2834 -fno-common \
2835 -static-libasan
2836else
2837 VBOX_GCC_SANITIZER_FLAGS =
2838endif
2839
2840# -libasan-static is currently not supported in combination with -no-undefined.
2841ifdef VBOX_WITH_GCC_SANITIZER
2842 VBOX_GCC_NO_UNDEFINED :=
2843 VBOX_GCC_NO_UNDEFINED_R0 :=
2844else
2845 VBOX_GCC_NO_UNDEFINED := -Wl,--no-undefined
2846 VBOX_GCC_NO_UNDEFINED_R0 := -no-undefined
2847endif
2848
2849# Disabled Visual C++ warnings, W4:
2850# -wd4065: switch statement contains 'default' but no 'case' labels
2851# -wd4996: deprecated / insecure.
2852# -wd4127: conditional expression is constant [level 4]
2853# -wd4706: assignment within conditional expression [level 4]
2854# -wd4201: nonstandard extension used : nameless struct/union [level 4]
2855# -wd4214: nonstandard extension used : bit field types other than int [level 4]
2856# -wd4510: 'VM::<unnamed-tag>' : default constructor could not be generated
2857# -wd4512: 'VM' : assignment operator could not be generated
2858# -wd4610: union 'VM::<unnamed-tag>' can never be instantiated - user defined constructor required
2859# Disabled Visual C++ warnings, Wall:
2860# -wd4514: unreferenced inline function has been removed
2861# -wd4820: 'RTSTRSPACECORE' : '7' bytes padding added after data member 'RTSTRSPACECORE::uchHeight'
2862# -wd4365: '=' : conversion from 'unsigned char' to 'char', signed/unsigned mismatch
2863# -wd4987: nonstandard extension used: 'throw (...)' (setjmp.h + our stuff)
2864# -wd4710: 'std::string std::_Narrow_str(std::wstring)' : function not inlined
2865# -wd4061: enumerator 'RTASN1TYPE_END' in switch of enum 'RTASN1TYPE' is not explicitly handled by a case label
2866# Note! C4062 checks for the same but includes the 'default' case, just like gcc. So, no trouble disabling this.
2867# -wd4986: 'operator new[]': exception specification does not match previous declaration (crtdbg.h vs new, exception specification only)
2868# -wd4191: 'type cast' : unsafe conversion from 'int (__cdecl *)(gzFile)' to 'PFNRT'
2869# -wd4574: 'INCL_WINSOCK_API_TYPEDEFS' is defined to be '0': did you mean to use '#if INCL_WINSOCK_API_TYPEDEFS'?
2870# -wd4917: 'OLE_XPOS_HIMETRIC' : a GUID can only be associated with a class, interface or namespace
2871# -wd4711: function 'void __cdecl rtMemCacheFreeOne(struct RTMEMCACHEINT * __ptr64,void * __ptr64)' selected for automatic inline expansion
2872# -wd4571: Informational: catch(...) semantics changed since Visual C++ 7.1; structured exceptions (SEH) are no longer caught
2873# -wd4611: interaction between '_setjmp' and C++ object destruction is non-portable
2874# -wd4324: '_TDI_PNP_CONTEXT_XP' : structure was padded due to __declspec(align())
2875# -wd4505: VBoxNetFltNobj.h(45) : warning C4505: 'VBoxNetFltNobj::Release' : unreferenced local function has been removed
2876# Probably related to http://stackoverflow.com/questions/3051992/compiler-warning-at-c-template-base-class
2877# -wd4263: 'int VRDPChannelClipboard::SendPacket(const void *,uint32_t)' : member function does not override any base class virtual member function
2878# Probably useful, but impractical, just like the next one.
2879# -wd4264: 'int VRDPOutputCtx::SendPacket(void)' : no override available for virtual member function from base 'VRDPOutputCtx'; function is hidden
2880# -wd4738: storing 32-bit float result in memory, possible loss of performance
2881# -wd4371: UIActionPool.h(393) : warning C4371: 'UIActionPool::PointerToFunction' : layout of class may have changed from a previous version of the compiler due to better packing of member 'UIActionPool::PointerToFunction::ptfr'
2882# Want to enable these:
2883# -wd4242: '=' : conversion from 'uint32_t' to 'uint8_t', possible loss of data
2884# -wd4244: 'conversion' conversion from 'type1' to 'type2', possible loss of data
2885# -wd4200: nonstandard extension used : zero-sized array in struct/union
2886# Cannot generate copy-ctor or copy-assignment operator when UDT contains a zero-sized array
2887VBOX_VCC_WARN_ALL ?= -W4 -Wall -wd4065 -wd4996 -wd4127 -wd4706 -wd4201 -wd4214 -wd4510 -wd4512 -wd4610 \
2888 -wd4514 -wd4820 -wd4365 -wd4987 -wd4710 -wd4061 -wd4986 -wd4191 -wd4574 -wd4917 -wd4711 -wd4611 -wd4571 -wd4324 -wd4505 \
2889 -wd4263 -wd4264 -wd4738 -wd4200 -wd4371
2890if1of ($(VBOX_VCC_TOOL_STEM), VCC120)
2891 # -wd4350: behavior change: 'std::_Wrap_alloc<std::allocator<char>>::_Wrap_alloc(const std::_Wrap_alloc<std::allocator<char>> &) throw()' called instead of 'std::_Wrap_alloc<std::allocator<char>>::_Wrap_alloc<std::_Wrap_alloc<std::allocator<char>>>(_Other &) throw()'
2892 # -wd4435: iprt/cpp/xml.h(185) : warning C4435: 'xml::Input' : Object layout under /vd2 will change due to virtual base 'xml::Stream'
2893 VBOX_VCC_WARN_ALL += -wd4350 -wd4435
2894 VBOX_VCC120_WARN_ALL ?= $(VBOX_VCC_WARN_ALL)
2895endif
2896VBOX_VCC_WARN_ALL += -wd4242 -wd4244
2897ifndef VBOX_NEWER_VCC_WARN_ALL
2898 if "$(VBOX_VCC_TOOL_STEM)" < "VCC120"
2899 VBOX_NEWER_VCC_WARN_ALL := $(VBOX_VCC_WARN_ALL) -wd4350 -wd4435
2900 else
2901 VBOX_NEWER_VCC_WARN_ALL := $(VBOX_VCC_WARN_ALL)
2902 endif
2903endif
2904
2905
2906# Disable pedantic warnings for NP/NonPedantic templates.
2907# -wd4131: 'bi_flush' : uses old-style declarator
2908# -wd4255: 'tr_static_init' : no function prototype given: converting '()' to '(void)'
2909# -wd4668: '_WIN32_WCE' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif'/
2910# -wd4100: 'cinfo' : unreferenced formal parameter
2911# -wd4189: 'sz' : local variable is initialized but not referenced
2912# -wd4132: 'xmlStringComment' : const object should be initialized
2913# -wd4152: nonstandard extension, function/data pointer conversion in expression
2914# -wd4702: unreachable code
2915# -wd4057: '=' : 'xmlChar *' differs in indirection to slightly different base types from 'char *'
2916# -wd4296: '>=' : expression is always true
2917# -wd4389: '==' : signed/unsigned mismatch
2918# -wd4018: '<=' : signed/unsigned mismatch
2919# -wd4245: '=' : conversion from 'int' to 'unsigned int', signed/unsigned mismatch
2920# -wd4267: '+=' : conversion from 'size_t' to 'long', possible loss of data
2921# -wd4295: 'vendor_string' : array is too small to include a terminating null character
2922VBOX_VCC_NON_PEDANTIC = -wd4131 -wd4255 -wd4668 -wd4100 -wd4189 -wd4132 -wd4152 -wd4702 -wd4057 -wd4296 -wd4389 -wd4018 -wd4245 \
2923 -wd4267 -wd4295
2924VBOX_NEWER_VCC_NON_PEDANTIC = $(VBOX_VCC_NON_PEDANTIC)
2925
2926ifeq ($(KBUILD_TARGET),win)
2927 VBOX_C_CXX_FLAGS_NO_UNUSED_PARAMETERS = -wd4100
2928else
2929 VBOX_C_CXX_FLAGS_NO_UNUSED_PARAMETERS = -Wno-unused-parameter
2930endif
2931
2932#
2933# Compiler optimization flags.
2934#
2935ifeq ($(KBUILD_TYPE),debug)
2936 VBOX_GCC_FP ?= -fno-omit-frame-pointer
2937 VBOX_GCC_OPT ?= -O0
2938 VBOX_VCC_FP ?= -Oy-
2939 VBOX_VCC_OPT ?=
2940 VBOX_GCC_R0_FP ?= -fno-omit-frame-pointer -fno-optimize-sibling-calls
2941 VBOX_GCC_R0_OPT ?= -O2
2942 VBOX_VCC_R0_FP ?= -Oy-
2943 VBOX_VCC_R0_OPT ?=
2944 VBOX_GCC_GC_FP ?= -fno-omit-frame-pointer -fno-optimize-sibling-calls
2945 VBOX_GCC_GC_OPT ?= -O2
2946 VBOX_VCC_GC_FP ?= -Oy-
2947 VBOX_VCC_GC_OPT ?=
2948else
2949 # We should use -fomit-frame-pointer for GCC / -Oy for VCC.
2950 # -funwind-tables provides support for backtraces in gdb then.
2951 VBOX_GCC_FP ?= -fno-omit-frame-pointer
2952 VBOX_GCC_OPT ?= -O2 $(VBOX_GCC_mtune-generic)
2953 VBOX_VCC_FP ?= -Oy-
2954 VBOX_VCC_OPT ?= -O2
2955 VBOX_GCC_R0_FP ?= -fno-omit-frame-pointer
2956 VBOX_GCC_R0_OPT ?= -O2 $(VBOX_GCC_mtune-generic)
2957 VBOX_VCC_R0_FP ?= -Oy-
2958 VBOX_VCC_R0_OPT ?= -O2
2959 VBOX_GCC_GC_FP ?= -fno-omit-frame-pointer
2960 VBOX_GCC_GC_OPT ?= -O2 $(VBOX_GCC_mtune-generic)
2961 VBOX_VCC_GC_FP ?= -Oy-
2962 VBOX_VCC_GC_OPT ?= -O2
2963endif
2964ifeq ($(KBUILD_TARGET_ARCH),x86)
2965 ifneq ($(KBUILD_TARGET),darwin)
2966 # (The '<=' operator is for prepending (kmk specific).)
2967 VBOX_GCC_OPT <= -march=i586
2968 endif
2969endif
2970
2971
2972#
2973# Select the CRT type we're using with Microsoft Visual C++.
2974#
2975if1of ($(KBUILD_TYPE), debug dbgopt strict)
2976#not yet# VBOX_WITH_DEBUG_VCC_CRT = 1
2977endif
2978ifdef VBOX_WITH_DEBUG_VCC_CRT
2979 VBOX_VCC_CRT_TYPE = d
2980 VBOX_VCC_CRT_TYPE_N =
2981else
2982 VBOX_VCC_CRT_TYPE =
2983 VBOX_VCC_CRT_TYPE_N = d
2984endif
2985
2986
2987#
2988# Warnings as errors.
2989#
2990# GCC: We disable warnings on non-X86 systems because of the variadic
2991# macro usage in the logger.
2992#
2993ifdef VBOX_WITH_WARNINGS_AS_ERRORS
2994 if $(VBOX_GCC_VERSION_CXX) >= 40000
2995 VBOX_GCC_WERR ?= -Werror
2996 endif
2997 VBOX_VCC_WERR ?= -WX
2998 VBOX_VCC_LD_WERR ?= ## @todo later also: -WX
2999endif
3000
3001#
3002# The general GCC/Clang no warning policy.
3003#
3004# Note! This doesn't control everything. Instead set VBOX_GCC_WERR=$(NO_SUCH_VARIABLE) to
3005# completely disable -Werror.
3006#
3007if !defined(VBOX_WITHOUT_NO_GCC_WARNING_POLICY) && !defined(VBOX_WITH_NO_GCC_WARNING_POLICY)
3008 if defined(VBOX_WITH_MASOCHISTIC_WARNINGS) # gcc 4.6.x+
3009 VBOX_WITH_NO_GCC_WARNING_POLICY = 1
3010 else if $(KBUILD_TARGET) == "darwin" && defined(VBOX_WITH_NEW_XCODE)
3011 VBOX_WITH_NO_GCC_WARNING_POLICY = 1
3012 else if1of ($(KBUILD_TARGET), linux)
3013 if $(VBOX_GCC_VERSION_CXX) >= 40600 # gcc 4.6.x+
3014 VBOX_WITH_NO_GCC_WARNING_POLICY = 1
3015 endif
3016 endif
3017endif
3018ifdef VBOX_WITH_NO_GCC_WARNING_POLICY
3019 $(info build debug: VBOX_WITH_NO_GCC_WARNING_POLICY is enabled)
3020endif
3021
3022#
3023# Misc stuff that should be after including DynamicConfig.kmk.
3024#
3025
3026# libxml XML linter.
3027ifeq ($(VBOX_XMLLINT),)
3028 ifeq ($(KBUILD_HOST),win)
3029 VBOX_XMLLINT := $(wildcard $(KBUILD_DEVTOOLS)/$(KBUILD_HOST).$(KBUILD_HOST_ARCH)/libxslt/10128/bin/xmllint.exe)
3030 endif
3031 ifeq ($(VBOX_XMLLINT),)
3032 VBOX_XMLLINT := $(VBOX_HAVE_XMLLINT)
3033 endif
3034 ifneq ($(VBOX_XMLLINT),)
3035 VBOX_HAVE_XMLLINT := 1
3036 else
3037 VBOX_XMLLINT := xmllint
3038 VBOX_HAVE_XMLLINT :=
3039 endif
3040else
3041 VBOX_HAVE_XMLLINT := 1
3042endif
3043
3044
3045
3046#
3047# Misc macros.
3048#
3049
3050##
3051# Edits VirtualBox version, vendor and package strings in a text file.
3052#
3053# The rule using this must list $(VBOX_SVN_REV_KMK) as a prerequisite.
3054#
3055# @param 1 The input filename.
3056# @param 2 The output filename.
3057#
3058VBOX_EDIT_VERSION_CMD_FN = $(SED) \
3059 -e 's/@VBOX_VERSION_MAJOR@/$(VBOX_VERSION_MAJOR)/g' \
3060 -e 's/@VBOX_VERSION_MINOR@/$(VBOX_VERSION_MINOR)/g' \
3061 -e 's/@VBOX_VERSION_BUILD@/$(VBOX_VERSION_BUILD)/g' \
3062 -e 's/@VBOX_VERSION_STRING@/$(VBOX_VERSION_STRING)/g' \
3063 -e 's/@VBOX_SVN_REV@/$(VBOX_SVN_REV)/g' \
3064 -e 's/@VBOX_VENDOR@/$(VBOX_VENDOR)/g' \
3065 -e 's/@VBOX_VENDOR_SHORT@/$(VBOX_VENDOR_SHORT)/g' \
3066 -e 's/@VBOX_PRODUCT@/$(VBOX_PRODUCT)/g' \
3067 -e 's/@VBOX_C_YEAR@/$(VBOX_C_YEAR)/g' \
3068 -e 's/@VBOX_PACKAGE_STRING@/$(VBOX_PACKAGE_STRING)/g' \
3069 --output $(2) $(1)
3070
3071##
3072# Generates a rule for editing a file using VBOX_EDIT_VERSION_CMD_FN.
3073#
3074# @param 1 The target name.
3075# @param 2 The input filename relative to the current sub-makefile.
3076# @param 3 The output filename relative to the target output dir.
3077# Optional, defaults to 2.
3078#
3079VBOX_EDIT_VERSION_RULE_FN = $(eval $(value VBOX_EDIT_VERSION_RULE_DEF))
3080define VBOX_EDIT_VERSION_RULE_DEF
3081$$($(1)_0_OUTDIR)/$(if $(3),$(3),$(2)): $(PATH_SUB_CURRENT)/$(2) $(VBOX_SVN_REV_KMK) | $$(dir $$@)
3082 $(call MSG_GENERATE,$(1),$@,$<)
3083 $(QUIET)$(call VBOX_EDIT_VERSION_CMD_FN,$<,$@)
3084endef
3085
3086
3087##
3088# Fill in am import library target based on a somewhat special windows .def file.
3089#
3090# @param 1 The target name of the import library.
3091# @param 2 The name of the real library.
3092# @param 3 The .def-file paths relative to the current makefile.
3093#
3094VBOX_GENERATE_IMPORT_TARGET_FN = $(eval $(VBOX_GENERATE_IMPORT_TARGET_DEF))
3095define VBOX_GENERATE_IMPORT_TARGET_DEF
3096$(1)_TEMPLATE = VBoxR3Dll
3097$(1)_INST = $(INST_LIB)
3098if $(KBUILD_TARGET) == "darwin"
3099 $(1)_LDFLAGS = -install_name $(VBOX_DYLD_EXECUTABLE_PATH)/$(2)$(SUFF_DLL)
3100else ifn1of ($(KBUILD_TARGET), os2 win)
3101 $(1)_SONAME = $(2)$(SUFF_DLL)
3102endif
3103if1of ($(KBUILD_TARGET), os2 win)
3104 $(1)_SOURCES = $$($(1)_0_OUTDIR)/$(1)Imp.def
3105 $(1)_CLEAN = $$($(1)_0_OUTDIR)/$(1)Imp.def
3106else
3107 $(1)_SOURCES = $$($(1)_0_OUTDIR)/$(1)Imp.c
3108 $(1)_CLEAN = $$($(1)_0_OUTDIR)/$(1)Imp.c
3109endif
3110
3111$$$$($(1)_SOURCES): $(addprefix $(PATH_SUB_CURRENT)/,$(3)) $(PATH_ROOT)/src/bldprogs/deftoimp.sed | $$$$(dir $$$$@)
3112 $$(call MSG_GENERATE,,$$@)
3113ifeq ($(KBUILD_TARGET),os2)
3114 $$(SED) \
3115 -e '/not-$(KBUILD_TARGET)/d' \
3116 -e '/not-$(KBUILD_TARGET_ARCH)/d' \
3117 -e 's/^LIBRARY[[:space:]][[:space:]]*\(.*\)\.dll/LIBRARY \1 INITINSTANCE TERMINSTANCE\nDATA MULTIPLE\n/' \
3118 -e 's/^[ \t][ \t]*\([_a-zA-Z]\)/ _\1/' \
3119 -e 's/[ \t]DATA[ \t]*/ /' \
3120 --output $$@ $(addprefix $(PATH_SUB_CURRENT)/,$(3))
3121else ifeq ($(KBUILD_TARGET),win)
3122 $$(SED) \
3123 -e '/not-$(KBUILD_TARGET)/d' \
3124 -e '/not-$(KBUILD_TARGET_ARCH)/d' \
3125 --output $$@ $(addprefix $(PATH_SUB_CURRENT)/,$(3))
3126else
3127 $$(QUIET)$$(APPEND) -tn $$@ \
3128 '#ifdef VBOX_HAVE_VISIBILITY_HIDDEN' \
3129 '# define EXPORT __attribute__((visibility("default")))' \
3130 '# define EXPORT_DATA __attribute__((visibility("default")))' \
3131 '#else' \
3132 '# define EXPORT' \
3133 '# define EXPORT_DATA' \
3134 '#endif' \
3135 ''
3136 $$(SED) \
3137 -e '/not-$(KBUILD_TARGET)/d' \
3138 -e '/not-$(KBUILD_TARGET_ARCH)/d' \
3139 -f $(PATH_ROOT)/src/bldprogs/deftoimp.sed \
3140 --append $$@ $(addprefix $(PATH_SUB_CURRENT)/,$(3))
3141endif
3142endef # VBOX_GENERATE_IMPORT_TARGET_DEF
3143
3144
3145#
3146# Code Signing.
3147#
3148# There are two signing modes; 'test' and 'release'.
3149# - The 'test' mode is tailored local development, where typically test
3150# certificates are involved. Only the bar minimum of files are signed and
3151# nothing is timestamped (if we can control timestamping) in order to reduce
3152# build time and to allow working offline.
3153# - The 'release' mode is tailored for creating builds that are give to other
3154# people, like the ones the build servers create. As much as possible is
3155# signed and timestamped.
3156#
3157ifdef VBOX_SIGNING_MODE
3158 VBOX_SIGNING_MODE := $(strip $(VBOX_SIGNING_MODE))
3159 ifn1of ($(VBOX_SIGNING_MODE), test release)
3160 $(error VBOX_SIGNING_MODE must be either 'test' or 'release'. The value '$(VBOX_SIGNING_MODE)' is not recognized.)
3161 endif
3162 # Corp code signing client.
3163 VBOX_CCS_CLIENT_JAR := $(firstword $(rsort \
3164 $(wildcard $(KBUILD_DEVTOOLS)/common/ccs/v*/Client.jar)) \
3165 $(KBUILD_DEVTOOLS)/common/ccs/notfound/Client.jar )
3166 VBOX_CCS_USER ?= virtualbox_grp
3167 VBOX_CCS_GLOBAL_UID ?= non-of-your-business
3168 VBOX_CCS_SERVER ?= UK
3169 ##
3170 # Corp Code Signing command line.
3171 # @param $1 Signing method: solaris_elf, solaris_pkg, driver (microsoft), ...
3172 # @param $2 The file to be submitted for signing.
3173 # @param $3 The directory to put the signed file in. Defaults to $(dir $2).
3174 # @param $4 Additional options.
3175 VBOX_CCS_SIGN_CMD = $(VBOX_RETRY) $(VBOX_JAVA) -jar "$(VBOX_CCS_CLIENT_JAR)" \
3176 sign -user "$(VBOX_CCS_USER)" -global_uid "$(VBOX_CCS_GLOBAL_UID)" -server "$(VBOX_CCS_SERVER)" \
3177 -sign_method "$1" -file_to_sign "$2" -signed_location "$(if $3,$3,$(dir $2))" $4
3178
3179 ifeq ($(KBUILD_HOST),win)
3180 #
3181 # Windows
3182 #
3183
3184 # VBOX_PATH_SELFSIGN points to the Vista WDK bin/SelfSign directory.
3185 ifndef VBOX_PATH_SELFSIGN
3186 VBOX_PATH_SELFSIGN := $(firstword $(rsort $(wildcard $(KBUILD_DEVTOOLS)/win.x86/selfsign/*)))
3187 ifeq ($(VBOX_PATH_SELFSIGN),)
3188 VBOX_PATH_SELFSIGN := $(KBUILD_DEVTOOLS)/win.x86/selfsign/r1
3189 endif
3190 endif
3191 ifndef VBOX_PATH_SIGN_TOOLS
3192 VBOX_PATH_SIGN_TOOLS := $(firstword $(rsort $(wildcard \
3193 $(addprefix $(KBUILD_DEVTOOLS)/win.x86/sdk/v8.1*/Bin/, x86 $(if-expr $(KBUILD_HOST_ARCH)=="amd64",x64,) ) )))
3194 ifeq ($(VBOX_PATH_SIGN_TOOLS),)
3195 VBOX_PATH_SIGN_TOOLS := $(firstword $(rsort $(wildcard \
3196 $(addprefix $(KBUILD_DEVTOOLS)/win.x86/sdk/v10*/Bin/, x86 $(if-expr $(KBUILD_HOST_ARCH)=="amd64",x64,) ) )))
3197 ifeq ($(VBOX_PATH_SIGN_TOOLS),)
3198 VBOX_PATH_SIGN_TOOLS := $(VBOX_PATH_SELFSIGN)
3199 endif
3200 endif
3201 endif
3202
3203 VBOX_RETRY ?= $(ASH) $(KBUILD_DEVTOOLS)/bin/retry.sh
3204 VBOX_SIGNTOOL ?= $(VBOX_RETRY) "$(VBOX_PATH_SIGN_TOOLS)/signtool.exe"
3205 VBOX_INF2CAT ?= $(VBOX_PATH_SELFSIGN)/inf2cat.exe
3206
3207 ifeq ($(VBOX_SIGNING_MODE),test)
3208 VBOX_CERTIFICATE_SUBJECT_NAME ?= MyTestCertificate
3209 VBOX_CERTIFICATE_SUBJECT_NAME_ARGS ?= /n "$(VBOX_CERTIFICATE_SUBJECT_NAME)"
3210 else # release
3211 VBOX_CERTIFICATE_SUBJECT_NAME ?= Oracle Corporation
3212 VBOX_CERTIFICATE_SUBJECT_NAME_ARGS ?= /n "$(VBOX_CERTIFICATE_SUBJECT_NAME)" /a
3213 #VBOX_CERTIFICATE_FINGERPRINT ?= 7e 92 b6 6b e5 1b 79 d8 ce 3f f2 5c 15 c2 df 6a b8 c7 f2 f2
3214 VBOX_CERTIFICATE_FINGERPRINT ?= 5b de fe 58 0a 81 66 61 cd b5 7a 57 10 7b f4 18 74 86 ef cc
3215 VBOX_CROSS_CERTIFICATE_FILE ?= $(VBOX_PATH_SELFSIGN)/VeriSign Class 3 Public Primary Certification Authority - G5.cer
3216 VBOX_TSA_URL ?= http://timestamp.verisign.com/scripts/timestamp.dll
3217 endif
3218 if !defined(VBOX_CROSS_CERTIFICATE_FILE_ARGS) && defined(VBOX_CROSS_CERTIFICATE_FILE)
3219 VBOX_CROSS_CERTIFICATE_FILE_ARGS = /ac "$(VBOX_CROSS_CERTIFICATE_FILE)"
3220 endif
3221 if !defined(VBOX_TSA_URL_ARGS) && defined(VBOX_TSA_URL)
3222 VBOX_TSA_URL_ARGS = /t "$(VBOX_TSA_URL)"
3223 endif
3224 VBOX_CERTIFICATE_STORE ?= my
3225 VBOX_CERTIFICATE_STORE_ARGS ?= /s "$(VBOX_CERTIFICATE_STORE)"
3226 VBOX_CERTIFICATE_FINGERPRINT_ARGS := $(if-expr "$(VBOX_CERTIFICATE_FINGERPRINT)" != "" \
3227 ,/sha1 "$(subst $(SP),,$(VBOX_CERTIFICATE_FINGERPRINT))",)
3228
3229 ifeq ($(VBOX_SIGNING_MODE),test)
3230 #VBOX_CERTIFICATE_SHA2_SUBJECT_NAME ?= MyTestCertificateSha2
3231 VBOX_CERTIFICATE_SHA2_SUBJECT_NAME_ARGS ?= /n "$(VBOX_CERTIFICATE_SHA2_SUBJECT_NAME)"
3232 else # release
3233 VBOX_CERTIFICATE_SHA2_SUBJECT_NAME ?= Oracle Corporation
3234 VBOX_CERTIFICATE_SHA2_SUBJECT_NAME_ARGS ?= /n "$(VBOX_CERTIFICATE_SHA2_SUBJECT_NAME)" /a
3235 #VBOX_CERTIFICATE_SHA2_FINGERPRINT ?= 31 31 bb 58 8b 19 9e 6e 85 0f d3 35 82 b0 c5 82 55 e1 6c 49
3236 VBOX_CERTIFICATE_SHA2_FINGERPRINT ?= 22 05 6a 4d 46 2e 3d 2b b2 c3 2f bf b0 5b 84 c4 65 9c f7 fe
3237 VBOX_CROSS_CERTIFICATE_SHA2_FILE ?= $(VBOX_PATH_SELFSIGN)/VeriSign Class 3 Public Primary Certification Authority - G5.cer
3238 VBOX_TSA_SHA2_URL ?= http://sha256timestamp.ws.symantec.com/sha256/timestamp
3239 endif
3240 if !defined(VBOX_CROSS_CERTIFICATE_SHA2_FILE_ARGS) && defined(VBOX_CROSS_CERTIFICATE_SHA2_FILE)
3241 VBOX_CROSS_CERTIFICATE_SHA2_FILE_ARGS = /ac "$(VBOX_CROSS_CERTIFICATE_SHA2_FILE)"
3242 endif
3243 if !defined(VBOX_TSA_SHA2_URL_ARGS) && defined(VBOX_TSA_SHA2_URL)
3244 VBOX_TSA_SHA2_URL_ARGS = /tr "$(VBOX_TSA_SHA2_URL)"
3245 endif
3246 VBOX_CERTIFICATE_SHA2_STORE ?= my
3247 VBOX_CERTIFICATE_SHA2_STORE_ARGS ?= /s "$(VBOX_CERTIFICATE_SHA2_STORE)"
3248 VBOX_CERTIFICATE_SHA2_FINGERPRINT_ARGS := $(if-expr "$(VBOX_CERTIFICATE_SHA2_FINGERPRINT)" != "" \
3249 ,/sha1 "$(subst $(SP),,$(VBOX_CERTIFICATE_SHA2_FINGERPRINT))",) # Still using SHA-1 for fingerprinting, it's good enough for that!
3250
3251 ## Sign a file (generic).
3252 # @param 1 The file to sign.
3253 # @param 2 File description. Optional.
3254 # @param 3 Additional parameters. Optional.
3255 # @param 4 Set to 2 if the expression will be expanded twice before chopped into commands (for _CMDS).
3256 # @param 5 Disables dual signing if non-empty.
3257 ifndef VBOX_SIGN_FILE_FN
3258 ifeq ($(VBOX_WITH_CORP_CODE_SIGNING),all)
3259 VBOX_SIGN_FILE_FN = $(call VBOX_CCS_SIGN_CMD,driver,$1,$(dir $1))
3260 else ifdef VBOX_CERTIFICATE_SHA2_SUBJECT_NAME
3261 VBOX_SIGN_FILE_FN = $(VBOX_SIGNTOOL) \
3262 sign /fd sha1\
3263 $(VBOX_CROSS_CERTIFICATE_FILE_ARGS) \
3264 $(VBOX_CERTIFICATE_STORE_ARGS) \
3265 $(VBOX_CERTIFICATE_SUBJECT_NAME_ARGS) \
3266 $(VBOX_CERTIFICATE_FINGERPRINT_ARGS) \
3267 $(VBOX_TSA_URL_ARGS) \
3268 $(if $(strip $(2)),/d "$(strip $(2))",) \
3269 $(3) \
3270 $(1) \
3271 $(if-expr "$5" == "",\
3272 $(if-expr "$4" == "2",$$(NLTAB),$(NLTAB))$(VBOX_SIGNTOOL) \
3273 sign /as /fd sha256 \
3274 $(VBOX_CROSS_CERTIFICATE_SHA2_FILE_ARGS) \
3275 $(VBOX_CERTIFICATE_SHA2_STORE_ARGS) \
3276 $(VBOX_CERTIFICATE_SHA2_SUBJECT_NAME_ARGS) \
3277 $(VBOX_CERTIFICATE_SHA2_FINGERPRINT_ARGS) \
3278 $(VBOX_TSA_SHA2_URL_ARGS) \
3279 $(if $(strip $(2)),/d "$(strip $(2))",) \
3280 $(3) \
3281 $(1),)
3282 else
3283 VBOX_SIGN_FILE_FN = $(VBOX_SIGNTOOL) sign \
3284 $(VBOX_CROSS_CERTIFICATE_FILE_ARGS) \
3285 $(VBOX_CERTIFICATE_STORE_ARGS) \
3286 $(VBOX_CERTIFICATE_SUBJECT_NAME_ARGS) \
3287 $(VBOX_CERTIFICATE_FINGERPRINT_ARGS) \
3288 $(VBOX_TSA_URL_ARGS) \
3289 $(if $(strip $(2)),/d "$(strip $(2))",) \
3290 $(3) \
3291 $(1)
3292 endif
3293 endif
3294
3295 ## Corp code signing for drivers and catalogs, plan B.
3296 #
3297 # Since the corp code signing cannot dual signing and doesn't even have a
3298 # SHA-1 cert, we have to get creative:
3299 # 1. Sign $1 using local SHA-1 certificate.
3300 # 2. Make temporary copy of $1 as $1.ccs
3301 # 3. Do SHA-256 corp code signing of $1.ccs
3302 # 4. Add the SHA-256 signature from $1.ccs to $1 using bldRTSignTool.
3303 # 5. Delete $1.ccs.
3304 #
3305 # @param 1 The file to sign.
3306 # @param 2 File description. Optional.
3307 # @param 3 Additional parameters. Optional.
3308 # @param 4 Set to 2 if the expression will be expanded twice before chopped into commands (for _CMDS).
3309 # @param 5 Disables dual signing if non-empty.
3310 #
3311 # @remarks The parameters are the same as VBOX_SIGN_FILE_FN.
3312 VBOX_SIGN_IMAGE_PLAN_B_FN = $(warning VBOX_SIGN_IMAGE_PLAN_B_FN: 1=$1 2=$2 3=$3 4=$4 5=$5)$(VBOX_SIGNTOOL) \
3313 sign /fd sha1\
3314 $(VBOX_CROSS_CERTIFICATE_FILE_ARGS) \
3315 $(VBOX_CERTIFICATE_STORE_ARGS) \
3316 $(VBOX_CERTIFICATE_SUBJECT_NAME_ARGS) \
3317 $(VBOX_CERTIFICATE_FINGERPRINT_ARGS) \
3318 $(VBOX_TSA_URL_ARGS) \
3319 $(if $(strip $(2)),/d "$(strip $(2))",) \
3320 $(3) \
3321 $(1) \
3322 $(if-expr "$5" == "",\
3323 $(if-expr "$4" == "2",$$(NLTAB),$(NLTAB))$(RM) -f -- "$1.ccs" \
3324 $(if-expr "$4" == "2",$$(NLTAB),$(NLTAB))$(CP) -- "$1" "$1.ccs" \
3325 $(if-expr "$4" == "2",$$(NLTAB),$(NLTAB))$(call VBOX_CCS_SIGN_CMD,driver$(if-expr "$3" == "/ph",_pagehash,),$1.ccs,$(dir $1.ccs),-digest_algo SHA2) \
3326 $(if-expr "$4" == "2",$$(NLTAB),$(NLTAB))$(VBOX_RTSIGNTOOL) add-nested-$(if-expr "$(suffix $1)" == ".cat",cat,exe)-signature -v "$1" "$1.ccs" \
3327 $(if-expr "$4" == "2",$$(NLTAB),$(NLTAB))$(RM) -f -- "$1.ccs" \
3328 ,)
3329
3330 ## Sign an executable image.
3331 # @param 1 The file to sign.
3332 # @param 2 File description. Optional.
3333 # @param 3 Set to 2 if the expression will be expanded twice before chopped into commands (for _CMDS).
3334 VBOX_SIGN_IMAGE_FN ?= $(call VBOX_SIGN_FILE_FN,$(1),$(2),/ph,$(3))
3335
3336 ## Commands for signing a driver image after link.
3337 if defined(VBOX_WITH_CORP_CODE_SIGNING) && "$(VBOX_WITH_CORP_CODE_SIGNING)" != "all"
3338 VBOX_SIGN_DRIVER_CMDS ?= $(if $(eq $(tool_do),LINK_LIBRARY),,$(call VBOX_SIGN_IMAGE_PLAN_B_FN,$(out),,/ph,2))
3339 VBOX_SIGN_DRIVER_ORDERDEPS ?= $(VBOX_RTSIGNTOOL)
3340 else
3341 VBOX_SIGN_DRIVER_CMDS ?= $(if $(eq $(tool_do),LINK_LIBRARY),,$(call VBOX_SIGN_IMAGE_FN,$(out),,2))
3342 endif
3343
3344 ## Create a security catalog file.
3345 # @param 1 The directory containing the stuff to sign.
3346 # @param 2 The expected .cat name. (Inf2Cat lowercases it)
3347 # @param 3 The list of OSes, separated by ';'.
3348 ifndef VBOX_MAKE_CAT_HLP_FN
3349 VBOX_MAKE_CAT_HLP_FN = \
3350 $(RM) -f -- "$(2)"\
3351 $(NL)$(TAB)$(VBOX_INF2CAT) "/driver:$(strip $(1))" "/os:$(strip $(subst ;,$(COMMA),$(3)))" /verbose \
3352 $(NL)$(TAB)$(MV) -- "$(2)" "$(2)"
3353 if defined(VBOX_WITH_CORP_CODE_SIGNING) && "$(VBOX_WITH_CORP_CODE_SIGNING)" != "all"
3354 VBOX_MAKE_CAT_HLP_FN += $(NL)$(TAB)$(call VBOX_SIGN_IMAGE_PLAN_B_FN,$(2),,,$(NL)$(TAB))
3355 else
3356 VBOX_MAKE_CAT_HLP_FN += $(NL)$(TAB)$(call VBOX_SIGN_FILE_FN,$(2),,,$(NL)$(TAB))
3357 endif
3358 endif
3359 VBOX_MAKE_CAT64_FN ?= $(call VBOX_MAKE_CAT_HLP_FN,$(1),$(2),XP_X64;Server2003_X64;Vista_X64)
3360 VBOX_MAKE_CAT32_FN ?= $(call VBOX_MAKE_CAT_HLP_FN,$(1),$(2),2000;XP_X86;Server2003_X86;Vista_X86)
3361 ifeq ($(KBUILD_TARGET_ARCH),x86)
3362 VBOX_MAKE_CAT_FN ?= $(call VBOX_MAKE_CAT32_FN,$(1),$(2))
3363 else
3364 VBOX_MAKE_CAT_FN ?= $(call VBOX_MAKE_CAT64_FN,$(1),$(2))
3365 endif
3366
3367 # Go nuts, sign everything.
3368 if "$(VBOX_SIGNING_MODE)" == "release" || defined(VBOX_WITH_HARDENING)
3369 ## Commands for signing an executable or a dll image after link.
3370 VBOX_SIGN_IMAGE_CMDS ?= $(if $(eq $(tool_do),LINK_LIBRARY),,$(call VBOX_SIGN_IMAGE_FN,$(out),,2))
3371 endif
3372 ## Enable signing of the additions.
3373 VBOX_SIGN_ADDITIONS ?= 1
3374
3375 else ifeq ($(KBUILD_HOST),darwin)
3376 #
3377 # Darwin code signing.
3378 #
3379 # Currently release signing is done when packing. This may change later.
3380 # (Installer package signing is done elsewhere (VBOX_MACOSX_INSTALLER_SIGN).)
3381 #
3382 if defined(VBOX_CERTIFICATE_FINGERPRINT) && !defined(VBOX_CERTIFICATE_SUBJECT_NAME)
3383 VBOX_CERTIFICATE_SUBJECT_NAME = $(subst $(SP),,$(VBOX_CERTIFICATE_FINGERPRINT))
3384 endif
3385 ifeq ($(VBOX_SIGNING_MODE),test)
3386 VBOX_CERTIFICATE_SUBJECT_NAME ?= $(error You need to set VBOX_CERTIFICATE_SUBJECT_NAME in LocalConfig.kmk.)
3387 VBOX_CERTIFICATE_SUBJECT_NAME_ARGS ?= --sign "$(VBOX_CERTIFICATE_SUBJECT_NAME)"
3388 else
3389 VBOX_CERTIFICATE_SUBJECT_NAME ?= Developer ID Application: Oracle America, Inc.
3390 VBOX_CERTIFICATE_SUBJECT_NAME_ARGS ?= --sign "$(VBOX_CERTIFICATE_SUBJECT_NAME)"
3391 endif
3392
3393 VBOX_CODESIGN ?= codesign
3394 if 0
3395 VBOX_DARWIN_KEXT_SIGN_FILES = CodeDirectory CodeRequirement CodeResources CodeSignature
3396 else
3397 VBOX_DARWIN_KEXT_SIGN_FILES = CodeResources
3398 endif
3399
3400 # The above version with complicated requirements is what Xcode 5.0.1GM suggest for kexts.
3401 VBOX_SIGN_BUNDLE_FN = $(call MSG_TOOL,SIGNTOOL,,$(1),$(2))$(NLTAB)$(VBOX_CODESIGN) \
3402 --verbose=9 \
3403 --force \
3404 --file-list - \
3405 $(3) \
3406 $(VBOX_CERTIFICATE_SUBJECT_NAME_ARGS) \
3407 $(1) $(if $(2),--identifier "$(2)",)
3408
3409 ## Sign a Mach-O image.
3410 # @param 1 The bundle to sign.
3411 # @param 2 Identifier, optional.
3412 VBOX_SIGN_MACHO_FN = $(call MSG_TOOL,SIGNTOOL,,$(1),$(2))$(NLTAB)$(VBOX_CODESIGN) \
3413 --verbose=9 \
3414 --force \
3415 --file-list - \
3416 $(VBOX_CERTIFICATE_SUBJECT_NAME_ARGS) \
3417 $(1) \
3418 $(if $(2),--identifier "$(2)",)
3419
3420 ## Sign a VMM Mach-O image.
3421 # @param 1 The bundle to sign.
3422 # @param 2 Identifier, optional.
3423 VBOX_SIGN_VMM_MOD_FN = $(VBOX_SIGN_MACHO_FN)
3424
3425 ## Sign a non-executable file.
3426 # @param 1 The bundle to sign.
3427 # @param 2 Identifier, optional.
3428 VBOX_SIGN_FILE_FN = $(call MSG_TOOL,SIGNTOOL,,$(1),$(2))$(NLTAB)$(VBOX_CODESIGN) \
3429 --verbose=9 \
3430 --force \
3431 --file-list - \
3432 $(VBOX_CERTIFICATE_SUBJECT_NAME_ARGS) \
3433 $(1) \
3434 $(if $(2),--identifier "$(2)",)
3435
3436 ## @def VBOX_TEST_SIGN_KEXT
3437 # Adds test signing to a $1.kext target (the plist installer target).
3438 #
3439 # After both targets has been defined:
3440 # $(evalcall2 VBOX_TEST_SIGN_KEXT,VBoxDrv)
3441 #
3442 # @param 1 The kext name. Assumes there is a SYSMODS target of name $1
3443 # as well as an .plist installer by the name of '$1.kext'.
3444 # @remarks Currently assumes only binary + Info.plist in the bundle, no
3445 # other files. Should that be requirement, add them as a list
3446 # in the 2nd parameter.
3447 # @note This is only for the 'test' signing mode, we skip this in
3448 # 'release' signing mode as to not waste time on the build boxes.
3449 ifeq ($(VBOX_SIGNING_MODE),test) ## @todo when kBuild is updated to r2742+, this should be enabled for both modes.
3450 define VBOX_TEST_SIGN_KEXT
3451 $1_INSTTYPE.darwin = none
3452
3453 $1.kext_SOURCES += $$($1.kext_0_OUTDIR)/Contents/MacOS/$1=>MacOS/$1 \
3454 $(foreach extfile, $(VBOX_DARWIN_KEXT_SIGN_FILES) \
3455 , $$($1.kext_0_OUTDIR)/Contents/_CodeSignature/$(extfile)=>_CodeSignature/$(extfile))
3456 $1.kext_SYMLINKS += $(foreach symfile, $(VBOX_DARWIN_KEXT_SIGN_SYMLINKS), $(symfile)=>_CodeSignature/$(symfile))
3457 $1.kext_CLEAN += \
3458 $(foreach extfile, $(VBOX_DARWIN_KEXT_SIGN_FILES) , $$($1.kext_0_OUTDIR)/Contents/_CodeSignature/$(extfile)) \
3459 $(foreach symfile, $(VBOX_DARWIN_KEXT_SIGN_SYMLINKS), $$($1.kext_0_OUTDIR)/Contents/$(symfile)) \
3460 $$($1.kext_0_OUTDIR)/Contents/MacOS/$1 \
3461 $$($1.kext_0_OUTDIR)/$1.kext/Contents/_CodeSignature/
3462 $1.kext_BLDDIRS += $$($1.kext_0_OUTDIR)/Contents/MacOS/
3463
3464 $$$$($1.kext_0_OUTDIR)/Contents/MacOS/$1 \
3465 + $(foreach file,$(VBOX_DARWIN_KEXT_SIGN_FILES), $$$$($1.kext_0_OUTDIR)/Contents/_CodeSignature/$(file)): \
3466 $$$$($1.kext_0_OUTDIR)/Contents/Info.plist $$$$($1_1_TARGET) | $$$$($1.kext_0_OUTDIR)/
3467 $(RM) -Rf -- "$$($1.kext_0_OUTDIR)/Contents/_CodeSignature/" "$$($1.kext_0_OUTDIR)/Contents/MacOS/"
3468 $(MKDIR) -p -- "$$($1.kext_0_OUTDIR)/Contents/MacOS/"
3469 $(INSTALL) -m 644 $$($1_1_TARGET) $$($1.kext_0_OUTDIR)/Contents/MacOS/$1
3470 $(call VBOX_SIGN_BUNDLE_FN,$$($1.kext_0_OUTDIR),org.virtualbox.app.kext.$1,)
3471 endef
3472 else
3473 VBOX_TEST_SIGN_KEXT =
3474 endif
3475
3476
3477 else ifeq ($(KBUILD_HOST),solaris)
3478 #
3479 # Solaris code signing.
3480 #
3481 ifeq ($(VBOX_SIGNING_MODE),test)
3482 VBOX_CERTIFICATE_FILE ?= $(error You need to set VBOX_CERTIFICATE_FILE in LocalConfig.kmk.)
3483 VBOX_TOKEN_NAME ?= $(error You need to set VBOX_TOKEN_NAME in LocalConfig.kmk.)
3484 VBOX_PIN_FILE ?= $(error You need to set VBOX_PIN_FILE in LocalConfig.kmk.)
3485 else
3486 VBOX_CERTIFICATE_FILE ?= $(PATH_ROOT)/oracle.pem
3487 VBOX_TOKEN_NAME ?= "Sun Software PKCS\#11 softtoken"
3488 VBOX_PIN_FILE ?= $(PATH_ROOT)/oracle.pin
3489 endif
3490 VBOX_CERTIFICATE_FILE_ARGS ?= -c $(VBOX_CERTIFICATE_FILE)
3491 VBOX_TOKEN_NAME_ARGS ?= -T $(VBOX_TOKEN_NAME)
3492 VBOX_PIN_ARGS ?= -P $(VBOX_PIN_FILE)
3493
3494 VBOX_ELFSIGN ?= elfsign
3495
3496 # Sign an ELF image.
3497 # @param 1 The elf object file to sign.
3498 VBOX_SIGN_ELF_FN ?= $(VBOX_ELFSIGN) \
3499 sign \
3500 $(VBOX_CERTIFICATE_FILE_ARGS) \
3501 $(VBOX_TOKEN_NAME_ARGS) \
3502 $(VBOX_PIN_ARGS) \
3503 -e $(1)
3504
3505 ## Commands for signing a driver image after link.
3506 ifdef VBOX_WITH_CORP_CODE_SIGNING
3507 VBOX_SIGN_DRIVER_CMDS ?= $(if $(eq $(tool_do),LINK_LIBRARY),,$(call VBOX_CCS_SIGN_CMD,solaris_elf,$(out)))
3508 else
3509 VBOX_SIGN_DRIVER_CMDS ?= $(if $(eq $(tool_do),LINK_LIBRARY),,$(call VBOX_SIGN_ELF_FN,$(out)))
3510 endif
3511
3512 else
3513 # Not Windows, Mac OS X or Solaris build host, ignore.
3514 VBOX_SIGNING_MODE :=
3515 endif
3516
3517#
3518# Complain if windows hardening is enabled but not code signing.
3519#
3520else if "$(KBUILD_TARGET)" == "win" && defined(VBOX_WITH_HARDENING) && !defined(VBOX_ONLY_BUILD)
3521 $(error You need to enable code signing for a hardened windows build to work.)
3522endif
3523
3524#
3525# Windows .inf editing.
3526#
3527ifeq ($(KBUILD_TARGET_ARCH),x86)
3528 VBOX_EDIT_INF_FN = $(call VBOX_EDIT_INF32_FN,$(1),$(2))
3529else
3530 VBOX_EDIT_INF_FN = $(call VBOX_EDIT_INF64_FN,$(1),$(2))
3531endif
3532## Edit an inf file an x86 target.
3533# @param 1 The inf file to edit.
3534# @param 2 The output file.
3535VBOX_EDIT_INF32_FN = $(SED) $(if $(VBOX_SIGNING_MODE),-e 's/^;cat *//', -e '/^;cat /d') \
3536 -e 's/^;x86 *//' \
3537 -e '/^;amd64 /d' \
3538 -e 's/^;edit-DriverVer.*/DriverVer = $(date-utc %m\/%d\/%Y),$(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)/' \
3539 --output $(2) \
3540 $(1)
3541## Edit an inf file an x86 target.
3542# @param 1 The inf file to edit.
3543# @param 2 The output file.
3544VBOX_EDIT_INF64_FN = $(SED) \
3545 $(if $(VBOX_SIGNING_MODE),-e 's/^;cat *//', -e '/^;cat /d')\
3546 -e 's/^;amd64 *//' \
3547 -e '/^;x86 /d' \
3548 -e 's/^;edit-DriverVer.*/DriverVer = $(date-utc %m\/%d\/%Y),$(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)/' \
3549 --output $(2) \
3550 $(1)
3551
3552##
3553# Helper macro for re-signing DLL images from tools that we ship so they won't
3554# cause trouble for the hardened build requirements.
3555#
3556# Invoke via $(call VBOX_RE_SIGN_DLL_FN) inside the SOURCES list. Necessary
3557# _CLEAN entry will be added to the target. If hardening is not enabled or
3558# we're not on windows, the source will be returned.
3559#
3560# @returns Name of the output file name. May have leading space, but no trailing.
3561# @param 1 Target name.
3562# @param 2 The source name.
3563# @param 3 Optional prefix to avoid name collisions.
3564#
3565if defined(VBOX_SIGNING_MODE) && "$(KBUILD_TARGET)" == "win"
3566 VBOX_RE_SIGN_DLL_FN = $(if-expr !defined($(1)_VBOX_RE_SIGNED_$(3)$(notdir $(2))),\
3567 $(evalcall VBOX_RE_SIGN_DLL_INTERNAL_FN,$1,$2,$3)\
3568 ,)$($(1)_0_OUTDIR)/$(3)$(notdir $2)
3569
3570define VBOX_RE_SIGN_DLL_INTERNAL_FN
3571local n = $(3)$(notdir $2)
3572ifndef $(1)_VBOX_RE_SIGNED_$(n)
3573 $(1)_VBOX_RE_SIGNED_$(n) := 1
3574 $(eval $(1)_CLEAN += $$($(1)_0_OUTDIR)/$(n))
3575
3576 $$($(1)_0_OUTDIR)/$(n): $(2) $(VBOX_VERSION_STAMP) | $$(dir $$@)
3577 $(call MSG_TOOL,SIGNTOOL,,$<,$@)
3578 $(RM) -f -- "$@"
3579 $(CP) -- "$<" "$@"
3580 $(VBOX_VCC_EDITBIN) /LargeAddressAware /DynamicBase /NxCompat /Release /IntegrityCheck \
3581 /Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
3582 "$@"
3583 $(call VBOX_SIGN_IMAGE_FN,$@)
3584endif
3585endef # VBOX_RESIGN_DLL_FN
3586else
3587 VBOX_RE_SIGN_DLL_FN = $(2)
3588endif
3589
3590
3591##
3592# @param
3593VBOX_RESIGN_DLL_FN =
3594
3595
3596#
3597# File version info and description macros (ignored on most OSes).
3598#
3599
3600##
3601# Internal macro.
3602#
3603# @param 1 The target name.
3604# @param 2 The description
3605# @param 3 Optional icon file.
3606# @param 4 The template base name.
3607# @param 5 Additional RC options.
3608#
3609# @remarks ASSUMES RCFLAGS isn't a simple variable (var := value).
3610define VBOX_SET_VER_INFO_INTERNAL
3611ifeq ($(KBUILD_TARGET),win)
3612$(1)_SOURCES.win += $(PATH_ROOT)/src/VBox/Artwork/win/$(4)
3613$(1)_RCFLAGS += /nologo /dIN_INTERNAL_NAME="\"$(1)\"" /dIN_FILE_DESCRIPTION="\"$(2)\"" \
3614 /dIN_ORIGINAL_NAME="\"$$(notdir $$($(1)_1_INST_TARGET))\"" \
3615 $(if $(3), /dIN_ICON_FILE="\"$(subst \\,/,$(strip $(3)))\"") $(5)
3616$$$$($(1)_0_OUTDIR)/src/VBox/Artwork/win/$(basename $(4)).res: \
3617 $(PATH_ROOT)/include/VBox/version.h $$$$(VBOX_VERSION_HEADER)
3618endif
3619endef
3620
3621##
3622# Macro for setting DLL/SO/DYLIB version information and description.
3623#
3624# The macro must be invoked using evalcall2 after the whole target has
3625# been declared.
3626#
3627# @param 1 The target name.
3628# @param 2 The description
3629# @param 3 Optional icon file.
3630VBOX_SET_VER_INFO_DLL = $(evalcall2 VBOX_SET_VER_INFO_INTERNAL,$1,$2,$3,TemplateDll.rc,)
3631
3632##
3633# Macro for setting EXE version information and description.
3634#
3635# The macro must be invoked using call after the whole target has been declared.
3636#
3637# @param 1 The target name.
3638# @param 2 The description
3639# @param 3 Optional icon file.
3640VBOX_SET_VER_INFO_EXE = $(evalcall2 VBOX_SET_VER_INFO_INTERNAL,$1,$2,$3,TemplateExe.rc,)
3641
3642##
3643# Macro for setting driver version information and description.
3644#
3645# The macro must be invoked using call after the whole target has been declared.
3646#
3647# @param 1 The target name.
3648# @param 2 The description
3649# @param 3 Optional icon file.
3650# @param 4 Optional VFT2_DRV_xxx define for windows. Uses VFT2_UNKNOWN by default.
3651VBOX_SET_VER_INFO_DRV = $(evalcall2 VBOX_SET_VER_INFO_INTERNAL,$1,$2,$3,TemplateDrv.rc,$(if $(4), /dIN_FILE_SUBTYPE=$(4)))
3652
3653##
3654# Macro for setting the version information and description for a ring-0 module.
3655#
3656# The macro must be invoked using call after the whole target has been declared.
3657#
3658# @param 1 The target name.
3659# @param 2 The description
3660# @param 3 Optional icon file.
3661VBOX_SET_VER_INFO_R0 = $(evalcall2 VBOX_SET_VER_INFO_INTERNAL,$1,$2,$3,TemplateR0.rc,)
3662
3663##
3664# Macro for setting the version information and description for a raw-mode context module.
3665#
3666# The macro must be invoked using call after the whole target has been declared.
3667#
3668# @param 1 The target name.
3669# @param 2 The description
3670# @param 3 Optional icon file.
3671VBOX_SET_VER_INFO_RC = $(evalcall2 VBOX_SET_VER_INFO_INTERNAL,$1,$2,$3,TemplateRc.rc,)
3672
3673
3674
3675#
3676# Adjust kBuild defaults.
3677#
3678kBuildGlobalDefaults_DEBUG_NOSTAGE.win = true
3679kBuildGlobalDefaults_DEBUG_NOSTAGE.os2 = true
3680if1of ($(KBUILD_TARGET), darwin win)
3681 kBuildGlobalDefaults_LD_DEBUG = split
3682endif
3683
3684
3685#
3686# Haiku resource and version generation.
3687#
3688ifeq ($(KBUILD_HOST),haiku)
3689 VBOX_HAIKU_RCTOOL := rc
3690 VBOX_HAIKU_XRESTOOL := xres
3691 VBOX_HAIKU_SETVERSIONTOOL := setversion
3692 # XXX: install won't preserve attributes...
3693 VBOX_HAIKU_MIMESETTOOL := mimeset
3694
3695 ## Add optional resources to the program, set its version info, and sniff its mime properties.
3696 # @param 1 The file to add resources to.
3697 # @param 2 The resource files.
3698 # @param 3 The target name.
3699define VBOX_HAIKU_XRES_SETVER_FN
3700 $(if $(2),$(call MSG_TOOL,HaikuAddResources,$(3),$(2))
3701 $(QUIET)$(VBOX_HAIKU_XRESTOOL) -o $(1) $(2),)
3702 $(call MSG_TOOL,HaikuSetVersion,$(3))
3703 $(QUIET)$(VBOX_HAIKU_SETVERSIONTOOL) $(1) \
3704 -app $(VBOX_VERSION_MAJOR) $(VBOX_VERSION_MINOR) $(VBOX_VERSION_BUILD) d $(VBOX_SVN_REV) \
3705 -short "$(VBOX_PRODUCT)" \
3706 -long "$(VBOX_PRODUCT) $(VBOX_VERSION_STRING) $(shell /bin/echo -e '\xC2\xA9')2009-$(VBOX_C_YEAR) $(VBOX_VENDOR)"
3707 $(call MSG_TOOL,HaikuMimeSet,$(3))
3708 $(QUIET)$(VBOX_HAIKU_MIMESETTOOL) -f $(1)
3709endef
3710
3711 VBOX_HAIKU_XRES_SETVER_CMDS ?= $(if $(eq $(tool_do),LINK_PROGRAM),$(call VBOX_HAIKU_XRES_SETVER_FN,$(out),$($(target)_RSRCS),$(target)),)
3712endif
3713
3714#
3715# Default prefixes and suffixes.
3716#
3717VBOX_PREF_LIB =
3718if1of ($(KBUILD_TARGET), os2 win)
3719VBOX_SUFF_LIB = .lib
3720else
3721VBOX_SUFF_LIB = .a
3722endif
3723if1of ($(KBUILD_HOST), os2 win)
3724VBOX_HOSTSUFF_LIB = .lib
3725else
3726VBOX_HOSTSUFF_LIB = .a
3727endif
3728VBOX_SUFF_DLL = $(SUFF_DLL)
3729ifeq ($(KBUILD_TARGET),os2) # GXX3OMF produces out .o at the moment.
3730VBOX_SUFF_OBJ = .o
3731else
3732VBOX_SUFF_OBJ = $(SUFF_OBJ)
3733endif
3734VBOXW32GUEST_SUFF_LIB = .lib
3735VBOXLNX32GUEST_SUFF_LIB = .a
3736
3737#
3738# SDKs for external libraries.
3739#
3740SDK_VBOX_LIBXML2 = .
3741SDK_VBOX_LIBXML2_INCS ?= $(PATH_ROOT)/src/libs/libxml2-2.9.4/include
3742SDK_VBOX_LIBXML2_DEFS ?= _REENTRANT
3743SDK_VBOX_LIBXML2_DEFS.win += WIN32 _WINDOWS _MBCS
3744# note: no linking to LIB here, we do that explicitly in src/VBox/Runtime/Makefile.kmk to link
3745# libxml against VBoxRT
3746
3747SDK_VBOX_LIBPNG = .
3748SDK_VBOX_LIBPNG_INCS ?= $(PATH_ROOT)/src/libs/libpng-1.2.54
3749SDK_VBOX_LIBPNG_LIBS ?= $(PATH_STAGE_LIB)/VBox-libpng$(VBOX_SUFF_LIB)
3750
3751SDK_VBOX_ZLIB = .
3752if1of ($(KBUILD_TARGET), os2 solaris win)
3753 SDK_VBOX_ZLIB_INCS ?= $(PATH_ROOT)/src/libs/zlib-1.2.8
3754 SDK_VBOX_ZLIB_LIBS ?= $(PATH_STAGE_LIB)/VBox-zlib$(VBOX_SUFF_LIB)
3755else
3756 SDK_VBOX_ZLIB_INCS ?=
3757 SDK_VBOX_ZLIB_LIBS ?= z
3758 SDK_VBOX_ZLIB_DEFS.linux ?= _LARGEFILE64_SOURCE
3759endif
3760
3761SDK_VBOX_ZLIB-x86 = .
3762SDK_VBOX_ZLIB-x86_EXTENDS = VBOX_ZLIB
3763if1of ($(KBUILD_TARGET), os2 solaris win)
3764 SDK_VBOX_ZLIB_LIBS-x86 ?= $(PATH_STAGE_LIB)/VBox-zlib-x86$(VBOX_SUFF_LIB)
3765endif
3766
3767SDK_VBOX_ZLIB_STATIC = .
3768SDK_VBOX_ZLIB_STATIC_EXTENDS ?= VBOX_ZLIB
3769if1of ($(KBUILD_TARGET), os2 win) # Not required on solaris.
3770 SDK_VBOX_ZLIB_STATIC_LIBS ?= $(PATH_STAGE_LIB)/VBox-zlib-static$(VBOX_SUFF_LIB)
3771endif
3772
3773SDK_VBOX_OPENSSL = Only for VBoxRT and/or statically linked programs.
3774SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS := $(PATH_OUT)/obj/crypto-1.1.0-headers/include
3775SDK_VBOX_OPENSSL_INCS ?= $(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)
3776SDK_VBOX_OPENSSL_ORDERDEPS ?= $(crypto-headers_1_TARGET)
3777SDK_VBOX_OPENSSL_LIBS ?= \
3778 $(PATH_STAGE_LIB)/VBox-libssl$(VBOX_SUFF_LIB) \
3779 $(PATH_STAGE_LIB)/VBox-libcrypto$(VBOX_SUFF_LIB)
3780
3781SDK_VBOX_OPENSSL-x86 = Only for VBoxRT and/or statically linked programs.
3782SDK_VBOX_OPENSSL-x86_VBOX_DEFAULT_INCS := $(PATH_OUT)/obj/crypto-1.1.0-headers/include
3783SDK_VBOX_OPENSSL-x86_INCS ?= $(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)
3784SDK_VBOX_OPENSSL-x86_ORDERDEPS ?= $(crypto-headers_1_TARGET)
3785SDK_VBOX_OPENSSL-x86_LIBS ?= \
3786 $(PATH_STAGE_LIB)/VBox-libssl-x86$(VBOX_SUFF_LIB) \
3787 $(PATH_STAGE_LIB)/VBox-libcrypto-x86$(VBOX_SUFF_LIB)
3788
3789SDK_VBOX_OPENSSL2 = What you should be using.
3790SDK_VBOX_OPENSSL2_EXTENDS = VBOX_OPENSSL
3791if "$(SDK_VBOX_OPENSSL_INCS)" == "$(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)"
3792 SDK_VBOX_OPENSSL2_LIBS = $(NO_SUCH_VARIABLE)
3793endif
3794
3795ifdef VBOX_WITH_LIBCURL
3796SDK_VBOX_LIBCURL = .
3797SDK_VBOX_LIBCURL_INCS ?= $(PATH_ROOT)/src/libs/curl-7.50.3/include
3798SDK_VBOX_LIBCURL_LIBS ?= $(PATH_STAGE_LIB)/VBox-libcurl$(VBOX_SUFF_LIB)
3799SDK_VBOX_LIBCURL_DEFS ?= BUILDING_LIBCURL
3800
3801SDK_VBOX_LIBCURL-x86 = .
3802SDK_VBOX_LIBCURL-x86_INCS ?= $(PATH_ROOT)/src/libs/curl-7.50.3/include
3803SDK_VBOX_LIBCURL-x86_LIBS.x86 ?= $(PATH_STAGE_LIB)/VBox-libcurl-x86$(VBOX_SUFF_LIB)
3804SDK_VBOX_LIBCURL-x86_DEFS ?= BUILDING_LIBCURL
3805endif
3806
3807ifdef VBOX_WITH_LIBVPX
3808 SDK_VBOX_VPX = .
3809 SDK_VBOX_VPX_DEFAULT_INCS := $(PATH_ROOT)/src/libs/libvpx-1.1.0
3810 SDK_VBOX_VPX_INCS ?= $(SDK_VBOX_VPX_DEFAULT_INCS)
3811 SDK_VBOX_VPX_LIBS ?= $(PATH_STAGE_LIB)/VBox-libvpx$(VBOX_SUFF_LIB)
3812endif
3813
3814ifdef VBOX_WITH_LIBOPUS
3815 SDK_VBOX_OPUS = .
3816 SDK_VBOX_OPUS_DEFAULT_INCS := $(PATH_ROOT)/src/libs/libopus-1.2.1/include
3817 SDK_VBOX_OPUS_INCS ?= $(SDK_VBOX_OPUS_DEFAULT_INCS)
3818 SDK_VBOX_OPUS_LIBS ?= $(PATH_STAGE_LIB)/VBox-libopus$(VBOX_SUFF_LIB)
3819endif
3820
3821#
3822# Special SDK for the problematic NTDLL.LIB.
3823#
3824SDK_VBOX_NTDLL = Mini NTDLL import library, required IPRT.
3825SDK_VBOX_NTDLL_LIBS.x86 ?= $(PATH_STAGE_LIB)/RuntimeR3NtDll-x86.lib
3826SDK_VBOX_NTDLL_LIBS.amd64 ?= $(PATH_STAGE_LIB)/RuntimeR3NtDll-amd64.lib
3827
3828#
3829# Determine Solaris version.
3830#
3831ifeq ($(KBUILD_TARGET),solaris)
3832 VBOX_SOLARIS_VERSION := $(expr $(KBUILD_HOST_VERSION_MAJOR) * 100 + $(KBUILD_HOST_VERSION_MINOR))
3833 ifeq ($(VBOX_SOLARIS_VERSION),510)
3834 DEFS.solaris += RT_OS_SOLARIS_10
3835 # Solaris 10 does not include crossbow.
3836 VBOX_SOLARIS_10 = 1
3837 # We cannot compile additions on Solaris 10, due kernel interface deps
3838 VBOX_WITHOUT_ADDITIONS := 1
3839 VBOX_WITH_ADDITIONS =
3840 else ifeq ($(VBOX_SOLARIS_VERSION),511)
3841 # OSS audio support for Solaris
3842 VBOX_WITH_AUDIO_OSS := $(if-expr $(VBOX_SOLARIS_11_VERSION) >= 115,1,)
3843 endif
3844
3845 # XPCOM namespace cleanup issue with Solaris GCC 4.5.2 and newer, see @bugref{5838}.
3846 if $(VBOX_GCC_VERSION_CXX) >= 40502
3847 VBOX_WITH_XPCOM_NAMESPACE_CLEANUP =
3848 endif
3849endif
3850
3851#
3852# VBoxTpG tool.
3853#
3854TOOL_VBoxTpG = The VirtualBox Tracepoint Generator
3855TOOL_VBoxTpG_DTRACE_DEPORD = $(VBOX_VBOXTPG)
3856TOOL_VBoxTpG_DTRACE_HDR_FLAGS := \
3857 $(if-expr $(intersects $(KBUILD_TARGET_ARCH),$(KBUILD_ARCHES_64)),-64,-32) \
3858 -h --host-$(VBOX_HC_ARCH_BITS)-bit #-vvv
3859define TOOL_VBoxTpG_DTRACE_HDR_CMDS
3860 $(QUIET)$(VBOX_VBOXTPG) $(flags) -o "$(out)" -s "$(source)"
3861endef
3862TOOL_VBoxTpG_DTRACE_OBJ_NOT_NEEDED :=
3863TOOL_VBoxTpG_DTRACE_OBJ_FLAGS := -G --host-$(VBOX_HC_ARCH_BITS)-bit #-vvv
3864define TOOL_VBoxTpG_DTRACE_OBJ_CMDS
3865 $(QUIET)$(VBOX_VBOXTPG) \
3866 $(if-expr $(intersects $(bld_trg_arch),$(KBUILD_ARCHES_64)),-64,-32) \
3867 $(flags) \
3868 -o "$(out)" -s "$(source)"
3869endef
3870
3871
3872#
3873# VBoxTpG tool - Disabled, only generate the header.
3874#
3875TOOL_VBoxTpG-Disabled = The VirtualBox Tracepoint Generator, disabled.
3876TOOL_VBoxTpG-Disabled_DTRACE_DEPORD = $(VBOX_VBOXTPG)
3877TOOL_VBoxTpG-Disabled_DTRACE_HDR_FLAGS := -h
3878define TOOL_VBoxTpG-Disabled_DTRACE_HDR_CMDS
3879 $(QUIET)$(VBOX_VBOXTPG) $(flags) -o "$(out)" -s "$(source)"
3880endef
3881TOOL_VBoxTpG-Disabled_DTRACE_OBJ_NOT_NEEDED := $(KBUILD_OSES)
3882
3883
3884#
3885# dtrace+VBoxTpG tool for ring-3 to ring-0 pointer conversion.
3886#
3887TOOL_DTraceAndVBoxTpG = DTrace and the VirtualBox Tracepoint Generator working together on static ring-3 probes.
3888TOOL_DTraceAndVBoxTpG_EXTENDS = StandardDTrace
3889TOOL_DTraceAndVBoxTpG_DTRACE_DEPORD = $(VBOX_VBOXTPG)
3890TOOL_DTraceAndVBoxTpG_DTRACE_HDR_CMDS =
3891define TOOL_DTraceAndVBoxTpG_DTRACE_HDR_CMDS
3892 $(TOOL_StandardDTrace_DTRACE_HDR_CMDS)
3893 $(QUIET)$(VBOX_VBOXTPG) --generate-wrapper-header --host-$(VBOX_HC_ARCH_BITS)-bit --ring-3-context \
3894 $(filter-out -C, $(filter-out -h,$(flags))) \
3895 -o "$(out).tmp" -s "$(source)"
3896 $(APPEND) "$(out).tmp"
3897 $(SED) -e 's/\(#define.*\)(arg0/\1_ORIGINAL(arg0/' --append "$(out).tmp" "$(out)"
3898 $(MV) -f -- "$(out).tmp" "$(out)"
3899endef
3900TOOL_DTraceAndVBoxTpG_DTRACE_OBJ_NOT_NEEDED = $(TOOL_StandardDTrace_DTRACE_OBJ_NOT_NEEDED)
3901TOOL_DTraceAndVBoxTpG_DTRACE_OBJ_CMDS = $(TOOL_StandardDTrace_DTRACE_OBJ_CMDS)
3902
3903
3904ifdef VBOX_WITH_RAW_MODE
3905 #
3906 # Template for building RC things.
3907 #
3908 # Disabled Visual C++ warnings:
3909 # -wd4505: 'iemRaisePageFaultJmp' : unreferenced local function has been removed
3910 #
3911 TEMPLATE_VBoxRc = VBox Raw-Mode Context
3912 TEMPLATE_VBoxRc_ASTOOL = $(VBOX_ASTOOL)
3913 TEMPLATE_VBoxRc_ASFLAGS = $(VBOX_ASFLAGS32)
3914 TEMPLATE_VBoxRc_DEFS = IN_RC IPRT_NO_CRT RT_WITH_NOCRT_ALIASES $(ARCH_BITS_DEFS)
3915 TEMPLATE_VBoxRc_INCS = $(PATH_ROOT)/include/iprt/nocrt
3916 TEMPLATE_VBoxRc_SYSSUFF = .rc
3917 TEMPLATE_VBoxRc_BLD_TRG_ARCH = x86
3918 TEMPLATE_VBoxRc_MODE = a+r,u+w
3919
3920 TEMPLATE_VBoxRc_USES += dtrace
3921 TEMPLATE_VBoxRc_DTRACE_HDR_FLAGS = --raw-mode-context
3922 TEMPLATE_VBoxRc_DTRACE_OBJ_FLAGS = --raw-mode-context --probe-fn-name "VMMRCProbeFire"
3923 ifdef VBOX_WITH_DTRACE_RC
3924 TEMPLATE_VBoxRc_DTRACETOOL = VBoxTpG
3925 TEMPLATE_VBoxRc_DEFS += VBOX_WITH_DTRACE VBOX_WITH_DTRACE_RC
3926 else
3927 TEMPLATE_VBoxRc_DTRACETOOL = VBoxTpG-Disabled
3928 endif
3929
3930 ifeq ($(VBOX_LDR_FMT32),pe)
3931 TEMPLATE_VBoxRc_TOOL = $(VBOX_VCC_TOOL_STEM)X86
3932 TEMPLATE_VBoxRc_RCDEFS = VBOX_SVN_REV=$(VBOX_SVN_REV) VBOX_SVN_REV_MOD_5K=$(expr $(VBOX_SVN_REV) % 50000)
3933 TEMPLATE_VBoxRc_CXXFLAGS = -Zi -Zl -GR- -EHs- -GF -GS- -Zc:wchar_t- -Gs8192 $(VBOX_VCC_GC_OPT) $(VBOX_VCC_GC_FP) \
3934 $(VBOX_VCC_WARN_ALL) -wd4505 $(VBOX_VCC_WERR)
3935 TEMPLATE_VBoxRc_CFLAGS = $(TEMPLATE_VBoxRc_CXXFLAGS)
3936 TEMPLATE_VBoxRc_LDFLAGS = -Ignore:4197 \
3937 -Driver -Subsystem:NATIVE -Incremental:NO -Align:64 -MapInfo:Exports -NoD $(VBOX_VCC_LD_WERR) -Release -Debug -Opt:Ref -Opt:Icf \
3938 -Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
3939 -Stub:$(PATH_ROOT)/src/VBox/HostDrivers/Support/win/winstub.com
3940 ifdef VBOX_SIGNING_MODE
3941 TEMPLATE_VBoxRc_LDFLAGS += -IntegrityCheck
3942 endif
3943 TEMPLATE_VBoxRc_LIBS = \
3944 $(PATH_SDK_$(VBOX_WINDDK)_LIB.x86)/int64.lib
3945 TEMPLATE_VBoxRc_LIBS += \
3946 $(PATH_STAGE_LIB)/RuntimeRCStub$(VBOX_SUFF_LIB)
3947 TEMPLATE_VBoxRc_POST_CMDS = $(VBOX_SIGN_IMAGE_CMDS)
3948 endif # pe
3949
3950 ifeq ($(VBOX_LDR_FMT32),elf)
3951 TEMPLATE_VBoxRc_TOOL = $(VBOX_GCC32_TOOL)
3952 TEMPLATE_VBoxRc_CXXFLAGS = -fno-pie -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 $(VBOX_GCC_IPRT_FMT_CHECK)
3953 TEMPLATE_VBoxRc_CFLAGS = -fno-pie -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) $(VBOX_GCC_IPRT_FMT_CHECK)
3954 ifeq ($(KBUILD_TARGET),solaris)
3955 TEMPLATE_VBoxRc_LDFLAGS = -r
3956 else
3957 TEMPLATE_VBoxRc_LDFLAGS = -nostdlib -Bsymbolic -g
3958 ## @todo WTF doesn't the globals work? Debug info is supposed to be split everywhere. GRR
3959 TEMPLATE_VBoxRc_LD_DEBUG = split
3960 endif
3961 ifn1of ($(KBUILD_TARGET), solaris freebsd)
3962 TEMPLATE_VBoxRc_LIBS = \
3963 $(VBOX_GCC32_LIBGCC) # intrinsics
3964 endif
3965 if1of ($(KBUILD_TARGET),linux)
3966 TEMPLATE_VBoxRc_POST_CMDS = $(if $(eq $(tool_do),LINK_SYSMOD),if readelf -S $(out)|grep -q "[cd]tors"; then echo "Found ctors/dtors in $(out)!"; exit 1; fi)
3967 endif
3968 endif
3969
3970 ifeq ($(VBOX_LDR_FMT32),macho)
3971 TEMPLATE_VBoxRc_TOOL = $(VBOX_GCC_TOOL)
3972 TEMPLATE_VBoxRc_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS)
3973 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
3974 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
3975 TEMPLATE_VBoxRc_LDFLAGS = $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -m32 -nostdlib
3976 #TEMPLATE_VBoxRc_LDFLAGS.release = -Wl,-S ???
3977 endif
3978
3979 ifeq ($(VBOX_LDR_FMT32),lx)
3980 TEMPLATE_VBoxRc_TOOL = GXX3OMF
3981 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
3982 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
3983 TEMPLATE_VBoxRc_LDFLAGS = -Zdll -nostdlib
3984 TEMPLATE_VBoxRc_LIBS = \
3985 $(VBOX_GCC32_LIBGCC) \
3986 $(VBOX_OBJ_SYS0) \
3987 end
3988 endif
3989
3990
3991 #
3992 # Template for building a RC ring-3 testcase (tstVMStructGC, tstDevStructGC).
3993 #
3994 TEMPLATE_VBoxRcExe = VBox Raw-Mode as ring-3 testcase
3995 TEMPLATE_VBoxRcExe_EXTENDS = VBoxRc
3996 TEMPLATE_VBoxRcExe_DEFS = $(filter-out IPRT_NO_CRT RT_WITH_NOCRT_ALIASES,$(TEMPLATE_VBoxRc_DEFS))
3997 TEMPLATE_VBoxRcExe_INCS = $(NO_SUCH_VARIABLE)
3998 TEMPLATE_VBoxRcExe_MODE = $(NO_SUCH_VARIABLE)
3999
4000 ifeq ($(VBOX_LDR_FMT32),pe)
4001 TEMPLATE_VBoxRcExe_LDFLAGS = -Ignore:4197 \
4002 -Incremental:NO -MapInfo:Exports -NoD -Debug -Opt:Ref -Opt:Icf \
4003 -Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
4004 -Stub:$(PATH_ROOT)/src/VBox/HostDrivers/Support/win/winstub.com
4005 TEMPLATE_VBoxRcExe_SDKS = ReorderCompilerIncs $(VBOX_WINPSDK)
4006 TEMPLATE_VBoxRcExe_LIBS = \
4007 $(PATH_TOOL_$(VBOX_VCC_TOOL_STEM)X86_LIB)/libcmt.lib \
4008 $(PATH_TOOL_$(VBOX_VCC_TOOL_STEM)X86_LIB)/oldnames.lib
4009 endif
4010
4011 ifeq ($(VBOX_LDR_FMT32),elf)
4012 TEMPLATE_VBoxRcExe_CFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBoxRc_CFLAGS)) -O0
4013 TEMPLATE_VBoxRcExe_CXXFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBoxRc_CXXFLAGS)) -O0
4014 TEMPLATE_VBoxRcExe_LDFLAGS = -g
4015 TEMPLATE_VBoxRcExe_LDFLAGS.dbgopt = -g
4016 TEMPLATE_VBoxRcExe_LDFLAGS.strict = -g
4017 TEMPLATE_VBoxRcExe_LDFLAGS.release = -g
4018 if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), freebsd.amd64)
4019 # The FreeBSD port of gcc isn't picking up -m32 where it should.
4020 TEMPLATE_VBoxRcExe_DEFS.$(KBUILD_TARGET) = $(TEMPLATE_VBoxRc_DEFS.$(KBUILD_TARGET)) IPRT_DONT_USE_SYSTEM_STDINT_H
4021 TEMPLATE_VBoxRcExe_LDFLAGS.$(KBUILD_TARGET) = /usr/lib32/crt1.o /usr/lib32/crti.o /usr/lib32/crtbegin.o $(TEMPLATE_VBoxRc_LDFLAGS.$(KBUILD_TARGET)) -nostdlib -v
4022 TEMPLATE_VBoxRcExe_LIBPATH.$(KBUILD_TARGET) = /usr/lib32
4023 TEMPLATE_VBoxRcExe_LIBS.$(KBUILD_TARGET) = /usr/lib32/crtend.o /usr/lib32/crtn.o /usr/lib32/libc.so
4024 endif
4025 endif
4026
4027 ifeq ($(VBOX_LDR_FMT32),macho)
4028 TEMPLATE_VBoxRcExe_CFLAGS = $(filter-out -static -nostdinc,$(TEMPLATE_VBoxRc_CFLAGS))
4029 TEMPLATE_VBoxRcExe_CXXFLAGS = $(filter-out -static -nostdinc,$(TEMPLATE_VBoxRc_CXXFLAGS))
4030 TEMPLATE_VBoxRcExe_LDFLAGS = -g -m32
4031 endif
4032
4033 ifeq ($(VBOX_LDR_FMT32),lx)
4034 TEMPLATE_VBoxRcExe_CFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBoxRc_CFLAGS))
4035 TEMPLATE_VBoxRcExe_CXXFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBoxRc_CXXFLAGS))
4036 TEMPLATE_VBoxRcExe_LDFLAGS = -g
4037 TEMPLATE_VBoxRcExe_LIBS = $(NO_SUCH_VARIABLE)
4038 endif
4039endif # VBOX_WITH_RAW_MODE
4040
4041
4042#
4043# Template for building R0 things.
4044#
4045# Disabled Visual C++ warnings:
4046# -wd4505: 'iemRaisePageFaultJmp' : unreferenced local function has been removed
4047#
4048TEMPLATE_VBoxR0 = VBox Ring 0
4049TEMPLATE_VBoxR0_ASTOOL = $(VBOX_ASTOOL)
4050TEMPLATE_VBoxR0_ASFLAGS = $(VBOX_ASFLAGS)
4051TEMPLATE_VBoxR0_DEFS = IN_RING0 IN_RING0_AGNOSTIC IPRT_NO_CRT RT_WITH_NOCRT_ALIASES $(ARCH_BITS_DEFS)
4052TEMPLATE_VBoxR0_INCS = $(PATH_ROOT)/include/iprt/nocrt
4053TEMPLATE_VBoxR0_SYSSUFF = .r0
4054TEMPLATE_VBoxR0_MODE = a+r,u+w
4055
4056TEMPLATE_VBoxR0_USES += dtrace
4057TEMPLATE_VBoxR0_DTRACE_HDR_FLAGS = --ring-0-context-agnostic
4058TEMPLATE_VBoxR0_DTRACE_OBJ_FLAGS = --ring-0-context-agnostic
4059ifdef VBOX_WITH_DTRACE_R0
4060 TEMPLATE_VBoxR0_DTRACETOOL = VBoxTpG
4061 TEMPLATE_VBoxR0_DEFS += VBOX_WITH_DTRACE VBOX_WITH_DTRACE_R0
4062else
4063 TEMPLATE_VBoxR0_DTRACETOOL = VBoxTpG-Disabled
4064endif
4065
4066ifeq ($(VBOX_LDR_FMT),pe)
4067TEMPLATE_VBoxR0_TOOL = $(VBOX_VCC_TOOL)
4068TEMPLATE_VBoxR0_RCDEFS = VBOX_SVN_REV=$(VBOX_SVN_REV) VBOX_SVN_REV_MOD_5K=$(expr $(VBOX_SVN_REV) % 50000)
4069TEMPLATE_VBoxR0_CXXFLAGS = -Zi -Zl -GR- -EHs- -GF -GS- -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP) \
4070 $(VBOX_VCC_WARN_ALL) -wd4505 $(VBOX_VCC_WERR)
4071TEMPLATE_VBoxR0_CFLAGS = $(TEMPLATE_VBoxR0_CXXFLAGS)
4072TEMPLATE_VBoxR0_LDFLAGS = -Ignore:4197 \
4073 -Driver -Subsystem:NATIVE -Incremental:NO -Align:4096 -MapInfo:Exports -NoD $(VBOX_VCC_LD_WERR) -Release -Debug -Opt:Ref -Opt:Icf \
4074 -Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
4075 -Stub:$(PATH_ROOT)/src/VBox/HostDrivers/Support/win/winstub.com
4076 ifdef VBOX_WITH_DTRACE_R0
4077TEMPLATE_VBoxR0_LDFLAGS += -Merge:VTGPrLc.Data=VTGPrLc.Begin -Merge:VTGPrLc.End=VTGPrLc.Begin -Merge:VTGPrLc.Begin=VTGObj
4078 endif
4079 ifdef VBOX_SIGNING_MODE
4080 TEMPLATE_VBoxR0_LDFLAGS += -IntegrityCheck
4081 endif
4082TEMPLATE_VBoxR0_LIBS = \
4083 $(PATH_STAGE_LIB)/RuntimeR0Stub$(VBOX_SUFF_LIB)
4084 include $(KBUILD_PATH)/sdks/$(VBOX_WINDDK).kmk ## TODO: Add a kBuild feature for loading SDKs.
4085TEMPLATE_VBoxR0_LIBS.x86 = \
4086 $(PATH_SDK_$(VBOX_WINDDK)_LIB.x86)/int64.lib
4087TEMPLATE_VBoxR0_ORDERDEPS = $(VBOX_SIGN_DRIVER_ORDERDEPS)
4088TEMPLATE_VBoxR0_POST_CMDS = $(VBOX_SIGN_DRIVER_CMDS)
4089endif # pe
4090
4091ifeq ($(VBOX_LDR_FMT),elf)
4092TEMPLATE_VBoxR0_TOOL = $(VBOX_GCC_TOOL)
4093TEMPLATE_VBoxR0_CFLAGS = -fno-pie -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 $(VBOX_GCC_IPRT_FMT_CHECK)
4094TEMPLATE_VBoxR0_CXXFLAGS = -fno-pie -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 $(VBOX_GCC_IPRT_FMT_CHECK)
4095TEMPLATE_VBoxR0_CFLAGS.amd64 = -m64 -mno-red-zone -mcmodel=kernel -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-asynchronous-unwind-tables -ffreestanding
4096TEMPLATE_VBoxR0_CXXFLAGS.amd64 = -m64 -mno-red-zone -mcmodel=kernel -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-asynchronous-unwind-tables
4097ifeq ($(KBUILD_TARGET),solaris)
4098 TEMPLATE_VBoxR0_LDFLAGS = -r
4099 TEMPLATE_VBoxR0_LDFLAGS.solaris = -u _init -u _info
4100 TEMPLATE_VBoxR0_LIBS.solaris = \
4101 $(PATH_STAGE_LIB)/RuntimeR0Stub$(VBOX_SUFF_LIB)
4102 ifdef VBOX_GCC_USING_SOLARIS_AS
4103 TEMPLATE_VBoxR0_CFLAGS.amd64 += -Wa,-xmodel=kernel
4104 TEMPLATE_VBoxR0_CXXFLAGS.amd64 += -Wa,-xmodel=kernel
4105 endif
4106 # Solaris driver signing.
4107 TEMPLATE_VBoxR0_POST_CMDS = $(VBOX_SIGN_DRIVER_CMDS)
4108else
4109 TEMPLATE_VBoxR0_LDFLAGS = -nostdlib -Bsymbolic -g
4110 ## @todo WTF doesn't the globals work? Debug info is supposed to be split everywhere. GRR
4111 TEMPLATE_VBoxR0_LD_DEBUG = split
4112endif
4113ifn1of ($(KBUILD_TARGET),solaris freebsd)
4114 TEMPLATE_VBoxR0_LIBS = \
4115 $(VBOX_GCC_LIBGCC) # intrinsics
4116endif
4117if1of ($(KBUILD_TARGET),linux)
4118 TEMPLATE_VBoxR0_POST_CMDS = $(if $(eq $(tool_do),LINK_SYSMOD),if readelf -S $(out)|grep -q "[cd]tors"; then echo "Found ctors/dtors in $(out)!"; exit 1; fi)
4119endif
4120endif
4121
4122ifeq ($(VBOX_LDR_FMT),macho)
4123TEMPLATE_VBoxR0_TOOL = $(VBOX_GCC_TOOL)
4124TEMPLATE_VBoxR0_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS)
4125TEMPLATE_VBoxR0_CXXFLAGS = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS) -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC_Wno-variadic-macros) \
4126 -fno-common -msoft-float -static -fno-rtti -fno-exceptions $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing \
4127 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow $(VBOX_GCC_fno-stack-protector)
4128TEMPLATE_VBoxR0_CXXFLAGS.amd64 = -m64 -mno-red-zone -mno-sse3 -mno-sse4 -mno-sse4.1 -mno-sse4.2 -mno-sse4a -fno-unwind-tables
4129TEMPLATE_VBoxR0_CXXFLAGS.x86 = -m32
4130TEMPLATE_VBoxR0_CFLAGS = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC_Wno-variadic-macros) \
4131 -fno-common -msoft-float -static -fno-exceptions $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing \
4132 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow $(VBOX_GCC_fno-stack-protector)
4133TEMPLATE_VBoxR0_CFLAGS.amd64 = -m64 -mno-red-zone -mno-sse3 -mno-sse4 -mno-sse4.1 -mno-sse4.2 -mno-sse4a -fno-unwind-tables
4134TEMPLATE_VBoxR0_CFLAGS.x86 = -m32
4135TEMPLATE_VBoxR0_LDFLAGS = $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -nostdlib
4136#TEMPLATE_VBoxR0_LDFLAGS.release = -Wl,-S ???
4137TEMPLATE_VBoxR0_LDFLAGS.amd64 = -m64 -static
4138TEMPLATE_VBoxR0_LDFLAGS.x86 = -m32
4139endif
4140
4141ifeq ($(VBOX_LDR_FMT),lx)
4142TEMPLATE_VBoxR0_TOOL = GXX3OMF
4143TEMPLATE_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
4144TEMPLATE_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
4145TEMPLATE_VBoxR0_LDFLAGS = -nostdlib -Zdll
4146TEMPLATE_VBoxR0_LIBS = \
4147 $(VBOX_GCC_LIBGCC) \
4148 $(VBOX_OBJ_SYS0) \
4149 end
4150endif
4151
4152
4153#
4154# Template for building SUPDRV R0 things.
4155#
4156# Disabled Visual C++ warnings:
4157# -wd4996: deprecated / insecure.
4158# -wd4127: conditional expression is constant [level 4]
4159# -wd4201: nonstandard extension used : nameless struct/union [level 4]
4160# -wd4214: nonstandard extension used : bit field types other than int [level 4]
4161# -wd4706: assignment within conditional expression [level 4]
4162# -wd4324: '_TDI_PNP_CONTEXT_XP' : structure was padded due to __declspec(align())
4163#
4164# -wd4100: 'identifier' : unreferenced formal parameter [level 4] --- TODO: Enable this one!
4165#
4166TEMPLATE_VBOXR0DRV = VBox SUPDRV Ring 0
4167TEMPLATE_VBOXR0DRV_ASTOOL = $(VBOX_ASTOOL)
4168TEMPLATE_VBOXR0DRV_ASFLAGS = $(VBOX_ASFLAGS)
4169TEMPLATE_VBOXR0DRV_DEFS = IN_RING0 IN_RT_R0 $(ARCH_BITS_DEFS)
4170TEMPLATE_VBOXR0DRV_USES += dtrace
4171ifdef VBOX_WITH_DTRACE_R0DRV
4172 TEMPLATE_VBOXR0DRV_DTRACETOOL = VBoxTpG
4173 TEMPLATE_VBOXR0DRV_DEFS += VBOX_WITH_DTRACE VBOX_WITH_DTRACE_R0DRV
4174 ifdef VBOX_WITH_NATIVE_DTRACE
4175 TEMPLATE_VBOXR0DRV_DEFS += VBOX_WITH_NATIVE_DTRACE
4176 endif
4177else
4178 TEMPLATE_VBOXR0DRV_DTRACETOOL = VBoxTpG-Disabled
4179endif
4180
4181ifeq ($(KBUILD_TARGET),win)
4182 TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_VCC_TOOL)
4183 TEMPLATE_VBOXR0DRV_RCDEFS = VBOX_SVN_REV=$(VBOX_SVN_REV) VBOX_SVN_REV_MOD_5K=$(expr $(VBOX_SVN_REV) % 50000)
4184 TEMPLATE_VBOXR0DRV_DEFS.x86 = _X86_
4185 TEMPLATE_VBOXR0DRV_DEFS.x86 += NO_INTERLOCKED_INTRINSICS # Avoids intrisic VC/WDK trouble
4186 TEMPLATE_VBOXR0DRV_DEFS.x86 += WIN9X_COMPAT_SPINLOCK # Avoid multiply defined _KeInitializeSpinLock@4
4187 TEMPLATE_VBOXR0DRV_DEFS.amd64 = _AMD64_
4188 TEMPLATE_VBOXR0DRV_CXXFLAGS = -Zi -Zl -GR- -EHs- -GF -Gz -GS- -Zc:wchar_t- $(VBOX_VCC_FP) -Gs4096 $(VBOX_VCC_OPT) \
4189 $(VBOX_VCC_WARN_ALL) $(VBOX_VCC_WERR)
4190 TEMPLATE_VBOXR0DRV_CFLAGS = $(TEMPLATE_VBOXR0DRV_CXXFLAGS)
4191 TEMPLATE_VBOXR0DRV_LDFLAGS = -Ignore:4197 \
4192 -Driver -Subsystem:NATIVE -Incremental:NO -Align:4096 -MapInfo:Exports -NoD -Release -Debug -Opt:Ref -Opt:Icf \
4193 -Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
4194 -Stub:$(PATH_ROOT)/src/VBox/HostDrivers/Support/win/winstub.com
4195 ifdef VBOX_WITH_DTRACE_R0DRV
4196 TEMPLATE_VBOXR0DRV_LDFLAGS += -Merge:VTGPrLc.Data=VTGPrLc.Begin -Merge:VTGPrLc.End=VTGPrLc.Begin -Merge:VTGPrLc.Begin=VTGObj
4197 endif
4198 ifdef VBOX_SIGNING_MODE
4199 TEMPLATE_VBOXR0DRV_LDFLAGS += -IntegrityCheck
4200 endif
4201 TEMPLATE_VBOXR0DRV_ORDERDEPS = $(VBOX_SIGN_DRIVER_ORDERDEPS)
4202 TEMPLATE_VBOXR0DRV_POST_CMDS = $(VBOX_SIGN_DRIVER_CMDS)
4203endif
4204
4205ifeq ($(KBUILD_TARGET),linux)
4206 TEMPLATE_VBOXR0DRV_TOOL = $(NO_SUCH_VARIABLE)
4207
4208 ifndef KERN_DIR
4209 ifndef KERN_VER
4210 KERN_VER=$(notdir $(lastword $(shell LC_ALL=C ls -t /lib/modules/)))
4211 endif
4212 ifneq ($(KERN_VER),)
4213 KERN_DIR=/lib/modules/$(KERN_VER)/build
4214 endif
4215 endif
4216
4217##
4218# Using the extra expansion to replace $(module) before eval, thus everything
4219# else needs escaped dollars.
4220 define VBOX_LINUX_GENERATE_KMOD_TEST
4221 VBOX_TARGET_$(module) = $$(PATH_TARGET)/tst$(module)$(subst /,_,$(KERN_DIR))_mod.run
4222 TESTING += $$(VBOX_TARGET_$(module))
4223 OTHERS += $$(VBOX_TARGET_$(module))
4224 OTHERS_CLEAN += $$(VBOX_TARGET_$(module))
4225 $$(VBOX_TARGET_$(module)): $$$$($(module)_2_STAGE_TARGETS)
4226 $(QUIET)$$(call MSG_L1,Doing a test build of the $(module) kernel module)
4227 $(QUIET)$$(RM) -f -- "$$@"
4228 $(QUIET)$$(RM) -Rf -- "$$(PATH_TARGET)/tst$(module)_mod"
4229 $(QUIET)$$(MKDIR) -p -- "$$(PATH_TARGET)/tst$(module)_mod"
4230 $(QUIET)$$(CP) -R -- "$$(PATH_STAGE_BIN)/../$$($(module)_INST)" "$$(PATH_TARGET)/tst$(module)_mod/"
4231 + $(QUIET)make KBUILD_VERBOSE=$(KBUILD_VERBOSE) KERN_DIR=$(KERN_DIR) -C $$(PATH_TARGET)/tst$(module)_mod clean
4232 + $(QUIET)make KBUILD_VERBOSE=$(KBUILD_VERBOSE) KERN_DIR=$(KERN_DIR) $(if-expr $(KMK_OPTS_JOBS) != 1,JOBS=$(KMK_OPTS_JOBS),) -C $$(PATH_TARGET)/tst$(module)_mod
4233 $(QUIET)$$(RM) -Rf -- $$(PATH_TARGET)/tst$(module)_mod
4234 $(QUIET)$$(APPEND) -t "$$@" "done"
4235 endef
4236
4237endif
4238
4239ifeq ($(KBUILD_TARGET),os2)
4240TEMPLATE_VBOXR0DRV_TOOL = GXX3OMF
4241TEMPLATE_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
4242TEMPLATE_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
4243TEMPLATE_VBOXR0DRV_LIBS = $(VBOX_GCC_LIBGCC)
4244# wlink thinks physdevice doesn't need fixups and should have a stack - stupid!
4245TEMPLATE_VBOXR0DRV_LDFLAGS = -Zlinker Option -Zlinker internalrelocs, -Zlinker togglerelocs
4246endif
4247
4248ifeq ($(KBUILD_TARGET),darwin)
4249TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_GCC_TOOL)
4250TEMPLATE_VBOXR0DRV_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS) KERNEL KERNEL_PRIVATE DRIVER_PRIVATE APPLE NeXT
4251 ifdef VBOX_WITH_NEW_XCODE # Note xcode uses -fstrict-aliasing, we currently don't dare... We also add -mno-red-zone.
4252TEMPLATE_VBOXR0DRV_INCS += \
4253 $(VBOX_PATH_MACOSX_SDK)/System/Library/Frameworks/Kernel.framework/PrivateHeaders \
4254 $(VBOX_PATH_MACOSX_SDK)/System/Library/Frameworks/Kernel.framework/Headers
4255## @todo try use VBOX_GCC_PEDANTIC_CXX
4256# -Wno-c++11-extensions -Wno-c99-extensions -Wno-extra-semi -Wno-zero-length-array
4257TEMPLATE_VBOXR0DRV_CXXFLAGS = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS) -mkernel \
4258 -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_CXX) -Wno-long-long $(VBOX_GCC_fdiagnostics-show-option) \
4259 -Wno-c++11-extensions -Wno-c99-extensions -Wno-extra-semi -Wno-zero-length-array \
4260 -Wno-gnu-zero-variadic-macro-arguments -Wno-four-char-constants \
4261 -fno-common -nostdinc -fno-builtin $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_fvisibility-hidden) \
4262 -fno-exceptions -msoft-float -fapple-kext -fno-rtti -mkernel \
4263 -fmodules -fmodules-prune-interval=86400 -fmodules-prune-after=345600 -Wnon-modular-include-in-framework-module \
4264 -Werror=non-modular-include-in-framework-module \
4265 $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fasm-blocks -fno-strict-aliasing -stdlib=libc++
4266# also used by xcode 6.2: \
4267# -Werror=return-type \
4268# -Werror=deprecated-objc-isa-usage \
4269# -Werror=objc-root-class \
4270# -Wno-missing-field-initializers -Wno-missing-prototypes -Wunreachable-code \
4271# -Wno-overloaded-virtual -Wno-exit-time-destructors -Wno-missing-braces -Wparentheses -Wswitch -Wunused-function \
4272# -Wno-unused-label -Wno-unused-parameter -Wunused-variable -Wunused-value -Wempty-body \
4273# -Wconditional-uninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants \
4274# -Wno-conversion -Wconstant-conversion -Wint-conversion -Wbool-conversion -Wenum-conversion \
4275# -Wshorten-64-to-32 -Wno-newline-eof -Wno-c++11-extensions -Wdeprecated-declarations -Winvalid-offsetof -Wno-sign-conversion
4276TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64 = -m64 -mno-red-zone
4277TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = -m32
4278TEMPLATE_VBOXR0DRV_CFLAGS = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -mkernel \
4279 -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_C) -Wno-long-long $(VBOX_GCC_fdiagnostics-show-option) \
4280 -fno-common -nostdinc -fno-builtin $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_fvisibility-hidden) \
4281 -fno-exceptions -msoft-float -fapple-kext -fno-rtti \
4282 -fmodules -fmodules-prune-interval=86400 -fmodules-prune-after=345600 -Wnon-modular-include-in-framework-module \
4283 -Werror=non-modular-include-in-framework-module \
4284 $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fasm-blocks -fno-strict-aliasing
4285TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 -mno-red-zone
4286TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32
4287 if 1
4288 TEMPLATE_VBOXR0DRV_CFLAGS += $(VBOX_GCC_WERR)
4289 TEMPLATE_VBOXR0DRV_CXXFLAGS += $(VBOX_GCC_WERR)
4290 endif
4291TEMPLATE_VBOXR0DRV_LDFLAGS = $(filter-out $(VBOX_DARWIN_NO_COMPACT_LINKEDIT),$(VBOX_DARWIN_DEF_SDK_LDFLAGS)) \
4292 -nostdlib -stdlib=libc++ -Wl,-kext -Wl,-keep_private_externs
4293TEMPLATE_VBOXR0DRV_LDFLAGS.amd64 = -m64
4294TEMPLATE_VBOXR0DRV_LDFLAGS.x86 = -m32
4295TEMPLATE_VBOXR0DRV_LIBS = kmodc++ kmod cc_kext
4296 else
4297TEMPLATE_VBOXR0DRV_INCS += \
4298 $(VBOX_PATH_MACOSX_SDK)/System/Library/Frameworks/Kernel.framework/PrivateHeaders \
4299 $(VBOX_PATH_MACOSX_SDK)/System/Library/Frameworks/Kernel.framework/Headers
4300## @todo try use VBOX_GCC_PEDANTIC_CXX
4301TEMPLATE_VBOXR0DRV_CXXFLAGS = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS) \
4302 -g $(VBOX_GCC_pipe) $(VBOX_GCC_WARN) -Wno-long-long $(VBOX_GCC_fdiagnostics-show-option) \
4303 -fno-common -nostdinc -fno-builtin -finline $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_fvisibility-hidden) \
4304 -fno-keep-inline-functions -fno-exceptions -msoft-float \
4305 -fapple-kext -fno-rtti -fcheck-new -force_cpusubtype_ALL \
4306 $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fasm-blocks
4307TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64 = -m64 -mkernel -mno-red-zone -gdwarf-2
4308TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = -m32 -static
4309TEMPLATE_VBOXR0DRV_CFLAGS = $(VBOX_DARWIN_DEF_SDK_CFLAGS) \
4310 -g $(VBOX_GCC_pipe) $(VBOX_GCC_WARN) -Wno-long-long -fno-common -nostdinc -fno-builtin -finline \
4311 -fno-keep-inline-functions -fno-exceptions $(VBOX_GCC_fvisibility-hidden) -msoft-float \
4312 -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations \
4313 -Werror-implicit-function-declaration -force_cpusubtype_ALL \
4314 $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fasm-blocks
4315TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 -mkernel -mno-red-zone -gdwarf-2
4316TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -static
4317TEMPLATE_VBOXR0DRV_LDFLAGS = $(filter-out $(VBOX_DARWIN_NO_COMPACT_LINKEDIT),$(VBOX_DARWIN_DEF_SDK_LDFLAGS)) \
4318 -nostdlib -Wl,-kext,-new_linker -Wl,-Y,1455 -keep_private_extern
4319TEMPLATE_VBOXR0DRV_LDFLAGS.amd64 = -m64
4320TEMPLATE_VBOXR0DRV_LDFLAGS.x86 = -m32
4321TEMPLATE_VBOXR0DRV_LIBS = kmodc++ kmod cc_kext cpp_kext $(VBOX_GCC_LIBGCC)
4322 endif
4323endif
4324
4325ifeq ($(KBUILD_TARGET),solaris)
4326## The Solaris /usr/platform/i86pc/include and /usr/include directories.
4327VBOX_SOLARIS_SYS_INCS ?= /usr/platform/i86pc/include /usr/include
4328
4329TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_GCC_TOOL)
4330TEMPLATE_VBOXR0DRV_DEFS += _MACHDEP _KERNEL _STRICT_STDC
4331TEMPLATE_VBOXR0DRV_INCS = $(VBOX_SOLARIS_SYS_INCS)
4332TEMPLATE_VBOXR0DRV_LDFLAGS = -r -dy
4333TEMPLATE_VBOXR0DRV_LDFLAGS.amd64 = $(if $(eq $(KBUILD_HOST),solaris),-64,-m elf_x86_64)
4334# Exclude -Wall because of solaris headers' pragma ident warnings that gcc refuses to supress.
4335TEMPLATE_VBOXR0DRV_CFLAGS = -Wpointer-arith -Winline $(VBOX_GCC_Wno-pointer-sign) \
4336 -Wmissing-prototypes -Wstrict-prototypes $(VBOX_GCC_fdiagnostics-show-option) \
4337 -Wshadow -Wuninitialized -Wunused-function -Wunused-label -Wunused-value -Wunused-variable \
4338 -Wformat -Wimplicit-int -Wimplicit-function-declaration -Werror-implicit-function-declaration -Wparentheses \
4339 -O2 -fno-omit-frame-pointer -ffreestanding -nodefaultlibs -fno-strict-aliasing -fno-common -std=c99
4340TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow
4341TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow $(VBOX_GCC_msave-args) \
4342 -mno-red-zone -mcmodel=kernel $(if-expr defined(VBOX_GCC_USING_SOLARIS_AS),-Wa$(COMMA)-xmodel=kernel,) \
4343 -fno-reorder-blocks -fno-asynchronous-unwind-tables -funit-at-a-time
4344TEMPLATE_VBOXR0DRV_CXXFLAGS = -Wpointer-arith -Winline \
4345 -Wshadow -Wuninitialized -Wunused-function -Wunused-label -Wunused-value -Wunused-variable \
4346 -Wformat \
4347 -O2 -nodefaultlibs -fno-omit-frame-pointer -fno-strict-aliasing -fno-common -fno-exceptions -fno-rtti
4348TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = $(TEMPLATE_VBOXR0DRV_CFLAGS.x86)
4349TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64 = $(TEMPLATE_VBOXR0DRV_CFLAGS.amd64)
4350TEMPLATE_VBOXR0DRV_POST_CMDS = $(VBOX_SIGN_DRIVER_CMDS)
4351endif # Solaris
4352
4353ifeq ($(KBUILD_TARGET),freebsd)
4354# x86 FreeBSD (6.2 or something):
4355# cc -O2 -fno-strict-aliasing -pipe -Werror -D_KERNEL -DKLD_MODULE \
4356# -nostdinc -I- -I. -I@ -I@/contrib/altq -I@/../include -I/usr/include \
4357# -finline-limit=8000 -fno-common -mno-align-long-strings -mpreferred-stack-boundary=2 \
4358# -mno-mmx -mno-3dnow -mno-sse -mno-sse2 -ffreestanding -Wall -Wredundant-decls -Wnested-externs \
4359# -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -fformat-extensions \
4360# -std=c99 -c ../my.c
4361# ld -d -warn-common -r -d -o my.kld my.o
4362# :> export_syms
4363# awk -f /usr/src/sys/modules/my/../../conf/kmod_syms.awk my.kld export_syms | xargs -J% objcopy % my.kld
4364# ld -Bsharable -d warn-commnon -o my.ko my.kld
4365#
4366# AMD64 FreeBSD (7.1):
4367# cc -O2 -fno-strict-aliasing -pipe -D_KERNEL -DKLD_MODULE -std=c99 -nostdinc -I. -I@ -I@/contrib/altq \
4368# -finline-limit=8000 --param inline-unit-growth=100 --param large-function-growth=1000 -fno-common \
4369# -fno-omit-frame-pointer -mcmodel=kernel -mno-red-zone -mfpmath=387 -mno-sse -mno-sse2 -mno-mmx \
4370# -mno-3dnow -msoft-float -fno-asynchronous-unwind-tables -ffreestanding \
4371# -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -Wundef -Wno-pointer-sign \
4372# -fformat-extensions -c /usr/src/sys/modules/my/../../dev/my/if_my.c
4373# ld -d -warn-common -r -d -o if_my.ko if_my.o
4374# :> export_syms
4375# awk -f /usr/src/sys/modules/my/../../conf/kmod_syms.awk if_my.ko export_syms | xargs -J% objcopy % if_my.ko
4376
4377# Note: @ -> /usr/src/sys and machine -> /usr/src/sys/i386/include
4378
4379## The location of the FreeBSD kernel source.
4380VBOX_FREEBSD_SRC ?= /usr/src/sys
4381## The FreeBSD /usr/include.
4382VBOX_FREEBSD_SYS_INCS ?= /usr/include
4383
4384TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_GCC_TOOL)
4385TEMPLATE_VBOXR0DRV_LDTOOL = FREEBSDKMODLD
4386TEMPLATE_VBOXR0DRV_DEFS += _KERNEL KLD_MODULE
4387TEMPLATE_VBOXR0DRV_INCS = \
4388 $(VBOX_FREEBSD_SRC) \
4389 $(VBOX_FREEBSD_SRC)/contrib/altq \
4390 $(VBOX_FREEBSD_SRC)/../include \
4391 $(VBOX_FREEBSD_SYS_INCS)
4392# omitting: -Wcast-qual, -Wredundant-decls
4393TEMPLATE_VBOXR0DRV_CFLAGS = \
4394 $(VBOX_GCC_WARN) -Wpointer-arith -Winline $(VBOX_GCC_Wno-pointer-sign) $(VBOX_GCC_fdiagnostics-show-option) \
4395 -Wstrict-prototypes -Wmissing-prototypes -Wstrict-prototypes \
4396 -Wimplicit-function-declaration -Werror-implicit-function-declaration \
4397 -O2 -ffreestanding -fno-strict-aliasing -fno-common -finline-limit=8000 \
4398 $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
4399 -nostdinc -std=c99
4400TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -mno-align-long-strings -mpreferred-stack-boundary=2 -mno-mmx -mno-3dnow -mno-sse -mno-sse2
4401TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 --param inline-unit-growth=100 --param large-function-growth=1000 \
4402 -fno-omit-frame-pointer -mcmodel=kernel -mno-red-zone -mfpmath=387 -mno-sse -mno-sse2 -mno-mmx \
4403 -mno-3dnow -msoft-float -fno-asynchronous-unwind-tables -Wundef
4404TEMPLATE_VBOXR0DRV_CXXFLAGS = -fno-exceptions -fno-rtti \
4405 $(VBOX_GCC_WARN) -Wpointer-arith -Winline \
4406 -O2 -fno-strict-aliasing -fno-common -finline-limit=8000 \
4407 $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
4408 -nostdinc
4409TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = $(TEMPLATE_VBOXR0DRV_CFLAGS.x86)
4410TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64 = $(TEMPLATE_VBOXR0DRV_CFLAGS.amd64)
4411TEMPLATE_VBOXR0DRV_SYSSUFF = .ko
4412TEMPLATE_VBOXR0DRV_LDFLAGS = -d --warn-common
4413TEMPLATE_VBOXR0DRV_LDFLAGS.x86 = -m elf_i386_fbsd
4414TEMPLATE_VBOXR0DRV_LDFLAGS.amd64 = -m elf_x86_64_fbsd
4415
4416TOOL_FREEBSDKMODLD = FreeBSD kernel module linker.
4417# See kBuild/tools/GCC3.kmk for docs.
4418TOOL_FREEBSDKMODLD_LINK_SYSMOD_OUTPUT_MAYBE = $(outbase).map
4419TOOL_FREEBSDKMODLD_LINK_SYSMOD_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib)))
4420TOOL_FREEBSDKMODLD_LINK_SYSMOD_DEPORD =
4421 ifeq ($(KBUILD_TARGET_ARCH),amd64)
4422TOOL_FREEBSDKMODLD_LINK_SYSMOD_OUTPUT =
4423define TOOL_FREEBSDKMODLD_LINK_SYSMOD_CMDS
4424# Link intermediate .kld (a relocatable object).
4425 ld $(flags) -r -o $(out) $(objs) \
4426 $(foreach p,$(libpath), -L$(p))\
4427 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(basename $(lib))), $(lib)))
4428# Strip non-exported symbols private and localize the exported ones.
4429 awk -f $(VBOX_FREEBSD_SRC)/conf/kmod_syms.awk $(out) $(if $(othersrc), $(othersrc),/dev/null) \
4430 | xargs -J% objcopy % $(out)
4431
4432## Strip debug info (comment out if debugging or something).
4433 objcopy --strip-debug $(out)
4434endef
4435 else # x86
4436TOOL_FREEBSDKMODLD_LINK_SYSMOD_OUTPUT = $(outbase).kld
4437define TOOL_FREEBSDKMODLD_LINK_SYSMOD_CMDS
4438# Link intermediate .kld (a relocatable object).
4439 ld $(flags) -r -o $(outbase).kld $(objs) \
4440 $(foreach p,$(libpath), -L$(p))\
4441 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(basename $(lib))), $(lib)))
4442# Strip non-exported symbols private and localize the exported ones.
4443 awk -f $(VBOX_FREEBSD_SRC)/conf/kmod_syms.awk $(outbase).kld $(if $(othersrc), $(othersrc),/dev/null) \
4444 | xargs -J% objcopy % $(outbase).kld
4445
4446# Link the final .ko (a shared object).
4447 ld $(flags) -Bshareable -o $(out) $(outbase).kld
4448endef
4449 endif # x86
4450
4451endif # FreeBSD
4452
4453ifeq ($(KBUILD_TARGET),netbsd)
4454
4455# The location of the NetBSD sources.
4456VBOX_NETBSD_SRC ?= /usr/src
4457
4458# NetBSD uses "i386" for 32-bit, "x86" for common 32- and 64-bit code.
4459ifeq ($(KBUILD_TARGET_ARCH),amd64)
4460VBOX_NETBSD_TARGET_ARCH=amd64
4461else
4462VBOX_NETBSD_TARGET_ARCH=i386
4463endif
4464
4465VBOX_NETBSD_TARGET_SRC=$(VBOX_NETBSD_SRC)/sys/arch/$(VBOX_NETBSD_TARGET_ARCH)
4466
4467TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_GCC_TOOL)
4468TEMPLATE_VBOXR0DRV_DEFS += _KERNEL _MODULE
4469TEMPLATE_VBOXR0DRV_INCS = \
4470 $(VBOX_NETBSD_SRC)/sys \
4471 $(VBOX_NETBSD_SRC)/common/include \
4472 $(PATH_OBJ)/netbsd/include
4473
4474TEMPLATE_VBOXR0DRV_CFLAGS = \
4475 $(VBOX_GCC_WARN) -Wpointer-arith -Winline $(VBOX_GCC_Wno-pointer-sign) \
4476 $(VBOX_GCC_fdiagnostics-show-option) \
4477 -Wstrict-prototypes -Wmissing-prototypes -Wstrict-prototypes \
4478 -Wimplicit-function-declaration -Werror-implicit-function-declaration \
4479 -O2 -ffreestanding -fno-strict-aliasing -fno-common -finline-limit=8000 \
4480 $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
4481 -nostdinc -std=c99 -msoft-float
4482TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 \
4483 -mpreferred-stack-boundary=2 -mno-mmx -mno-sse -mno-avx \
4484 -mno-fp-ret-in-387
4485TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 --param inline-unit-growth=100 \
4486 --param large-function-growth=1000 -fno-omit-frame-pointer \
4487 -mcmodel=kernel -mno-red-zone -mno-sse -mno-mmx -mno-avx \
4488 -fno-asynchronous-unwind-tables -mno-fp-ret-in-387
4489TEMPLATE_VBOXR0DRV_CXXFLAGS = -fno-exceptions -fno-rtti \
4490 $(VBOX_GCC_WARN) -Wpointer-arith -Winline \
4491 -O2 -fno-strict-aliasing -fno-common -finline-limit=8000 \
4492 $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
4493 -nostdinc -msoft-float
4494TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = $(TEMPLATE_VBOXR0DRV_CFLAGS.x86)
4495TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64 = $(TEMPLATE_VBOXR0DRV_CFLAGS.amd64)
4496TEMPLATE_VBOXR0DRV_SYSSUFF = .kmod
4497TEMPLATE_VBOXR0DRV_LDFLAGS = -d --warn-common
4498TEMPLATE_VBOXR0DRV_LDFLAGS.x86 = -m elf_i386
4499TEMPLATE_VBOXR0DRV_LDFLAGS.amd64 = -m elf_x86_64
4500
4501# symlink kernel includes
4502TEMPLATE_VBOXR0DRV_ORDERDEPS += \
4503 $(PATH_OBJ)/netbsd/include/$(VBOX_NETBSD_TARGET_ARCH) \
4504 $(PATH_OBJ)/netbsd/include/x86 \
4505 $(PATH_OBJ)/netbsd/include/machine
4506
4507$$(PATH_OBJ)/netbsd/include/$(VBOX_NETBSD_TARGET_ARCH):
4508 $(QUIET)$(MKDIR) -p $(@D)
4509 $(QUIET)$(LN_SYMLINK) $(VBOX_NETBSD_TARGET_SRC)/include $@
4510
4511$$(PATH_OBJ)/netbsd/include/x86:
4512 $(QUIET)$(MKDIR) -p $(@D)
4513 $(QUIET)$(LN_SYMLINK) $(VBOX_NETBSD_SRC)/sys/arch/x86/include $@
4514
4515$$(PATH_OBJ)/netbsd/include/machine:
4516 $(QUIET)$(MKDIR) -p $(@D)
4517 $(QUIET)$(LN_SYMLINK) $(VBOX_NETBSD_TARGET_ARCH) $@
4518
4519endif # NetBSD
4520
4521ifeq ($(KBUILD_TARGET),haiku)
4522## The Haiku include directories
4523VBOX_HAIKU_SYS_INCS ?= /boot/develop/headers/os/kernel /boot/develop/headers/os/drivers
4524
4525TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_GCC_TOOL)
4526TEMPLATE_VBOXR0DRV_LDTOOL = $(VBOX_GCC_TOOL)
4527TEMPLATE_VBOXR0DRV_DEFS = _KERNEL_MODE=1 _STRICT_STDC IN_RING0 IN_RT_R0
4528TEMPLATE_VBOXR0DRV_INCS = $(VBOX_HAIKU_SYS_INCS)
4529#TODO: sort this out
4530TEMPLATE_VBOXR0DRV_LDFLAGS = -shared $(VBOX_GCC_NO_UNDEFINED_R0) -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
4531TEMPLATE_VBOXR0DRV_CFLAGS = -fno-PIC \
4532 $(VBOX_GCC_WARN) -Wstrict-prototypes $(VBOX_GCC_Wno-pointer-sign) -Wno-sign-compare \
4533 $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration
4534TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -mno-sse -mno-mmx -mno-sse2 -mno-3dnow
4535TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow
4536TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow \
4537 -fno-reorder-blocks -ffreestanding -fno-asynchronous-unwind-tables -funit-at-a-time \
4538 -Wno-sign-compare
4539TEMPLATE_VBOXR0DRV_CXXFLAGS = -fno-PIC -Wpointer-arith \
4540 -Wshadow -Wuninitialized -Wunused-function -Wunused-label -Wunused-value -Wunused-variable \
4541 -Wformat \
4542 -O2 -nodefaultlibs -fno-omit-frame-pointer -fno-strict-aliasing -fno-common -fno-exceptions -fno-rtti
4543TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = $(TEMPLATE_VBOXR0DRV_CFLAGS.x86) -fno-exceptions -fno-rtti
4544TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64 = $(TEMPLATE_VBOXR0DRV_CFLAGS.amd64) -fno-exceptions -fno-rtti
4545endif # Haiku
4546
4547ifdef VBOX_WITH_VBOXDRV
4548 ifndef TEMPLATE_VBOXR0DRV_TOOL
4549 $(warning Warning: VBox Build: Target $(KBUILD_HOST) is not officially supported!)
4550 endif
4551endif
4552
4553ifn1of ($(KBUILD_TARGET), darwin os2 win solaris)
4554 # This doesn't work if supdrv is natively loading VMMR0.r0 et al, but
4555 # fortunately it isn't really necessary.
4556 TEMPLATE_VBOXR0DRV_CFLAGS += -include $(PATH_ROOT)/include/VBox/SUPDrvMangling.h
4557 TEMPLATE_VBOXR0DRV_CXXFLAGS += -include $(PATH_ROOT)/include/VBox/SUPDrvMangling.h
4558endif
4559
4560#
4561# Template for building libraries used by ring-0 drivers.
4562#
4563TEMPLATE_VBoxR0DrvLib = VBox Ring 0 Driver Library
4564TEMPLATE_VBoxR0DrvLib_EXTENDS = VBOXR0DRV
4565TEMPLATE_VBoxR0DrvLib_INSTTYPE = stage
4566TEMPLATE_VBoxR0DrvLib_INSTTYPE.linux = stage
4567
4568
4569#
4570# Template for building R3 executables and static libraries which are linked into executables.
4571# Note! This is the base template for a whole lot of other ones, so be careful when changing it.
4572#
4573# Disabled Visual C++ warnings:
4574# -wd4065: switch statement contains 'default' but no 'case' labels
4575# -wd4244: 'conversion' conversion from 'type1' to 'type2', possible loss of data
4576# -wd4996: deprecated / insecure.
4577#
4578TEMPLATE_VBOXR3EXE = VBox Ring 3 Exe
4579TEMPLATE_VBOXR3EXE_ASTOOL = $(VBOX_ASTOOL)
4580TEMPLATE_VBOXR3EXE_ASFLAGS.x86 = $(VBOX_ASFLAGS32)
4581TEMPLATE_VBOXR3EXE_ASFLAGS.amd64 = $(VBOX_ASFLAGS64)
4582TEMPLATE_VBOXR3EXE_DEFS = IN_RING3 $(ARCH_BITS_DEFS)
4583TEMPLATE_VBOXR3EXE_DEFS.win = _CRT_SECURE_NO_DEPRECATE
4584TEMPLATE_VBOXR3EXE_USES = dtrace
4585if defined(VBOX_WITH_DTRACE_R3) && defined(VBOX_WITH_NATIVE_DTRACE)
4586 TEMPLATE_VBOXR3EXE_DTRACETOOL = DTraceAndVBoxTpG
4587 TEMPLATE_VBOXR3EXE_DTRACE_OBJ_FLAGS = -C
4588 TEMPLATE_VBOXR3EXE_DTRACE_HDR_FLAGS = -C
4589 TEMPLATE_VBOXR3EXE_DEFS += VBOX_WITH_DTRACE VBOX_WITH_DTRACE_R3 VBOX_WITH_NATIVE_DTRACE
4590else
4591 TEMPLATE_VBOXR3EXE_DTRACE_HDR_FLAGS = --ring-3-context
4592 TEMPLATE_VBOXR3EXE_DTRACE_OBJ_FLAGS = --ring-3-context --pic --probe-fn-imported --probe-fn-name "SUPTracerFireProbe"
4593 if defined(VBOX_WITH_DTRACE_R3)
4594 TEMPLATE_VBOXR3EXE_DTRACETOOL = VBoxTpG
4595 TEMPLATE_VBOXR3EXE_DEFS += VBOX_WITH_DTRACE VBOX_WITH_DTRACE_R3
4596 else
4597 TEMPLATE_VBOXR3EXE_DTRACETOOL = VBoxTpG-Disabled
4598 endif
4599endif
4600TEMPLATE_VBOXR3EXE_LIBS.kprofile = $(LIB_KPROFILE)
4601ifeq ($(KBUILD_TARGET),win)
4602# TEMPLATE_VBOXR3EXE_TOOL = $(VBOX_VCC_TOOL)
4603 TEMPLATE_VBOXR3EXE_TOOL.win.x86 = $(VBOX_VCC_TOOL_STEM)X86
4604 TEMPLATE_VBOXR3EXE_TOOL.win.amd64 = $(VBOX_VCC_TOOL_STEM)AMD64
4605 TEMPLATE_VBOXR3EXE_RCDEFS = VBOX_SVN_REV=$(VBOX_SVN_REV) VBOX_SVN_REV_MOD_5K=$(expr $(VBOX_SVN_REV) % 50000)
4606 TEMPLATE_VBOXR3EXE_SDKS = ReorderCompilerIncs $(VBOX_WINPSDK)
4607 TEMPLATE_VBOXR3EXE_CXXFLAGS = -Zi -Zl -GR- -EHsc -GF -MD$(VBOX_VCC_CRT_TYPE) -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP) \
4608 $(VBOX_VCC_WARN_ALL) $(VBOX_VCC_WERR)
4609 TEMPLATE_VBOXR3EXE_CXXFLAGS.debug = -RTCsu
4610 TEMPLATE_VBOXR3EXE_CXXFLAGS.dbgopt = $(NO_SUCH_VARIABLE)
4611 TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile = -Gh -GH
4612 TEMPLATE_VBOXR3EXE_CFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS)
4613 TEMPLATE_VBOXR3EXE_CFLAGS.debug = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.debug)
4614 TEMPLATE_VBOXR3EXE_CFLAGS.dbgopt = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.dbgopt)
4615 TEMPLATE_VBOXR3EXE_CFLAGS.kprofile = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile)
4616 TEMPLATE_VBOXR3EXE_LDFLAGS = -Ignore:4197 \
4617 /NOD /INCREMENTAL:NO /MAPINFO:EXPORTS /LargeAddressAware /DynamicBase /NxCompat /Release /Debug /Opt:Ref /Opt:Icf \
4618 /Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
4619 /STUB:$(PATH_ROOT)/src/VBox/HostDrivers/Support/win/winstub.com \
4620 /DISALLOWLIB:libc.lib \
4621 /DISALLOWLIB:libcd.lib \
4622 /DISALLOWLIB:libcmt.lib \
4623 /DISALLOWLIB:libcmtd.lib \
4624 /DISALLOWLIB:msvcrt$(VBOX_VCC_CRT_TYPE_N).lib \
4625 /DISALLOWLIB:msvcprt$(VBOX_VCC_CRT_TYPE_N).lib
4626 ifdef VBOX_WITH_DTRACE_R3
4627 TEMPLATE_VBOXR3EXE_LDFLAGS += -Merge:VTGPrLc.Data=VTGPrLc.Begin -Merge:VTGPrLc.End=VTGPrLc.Begin -Merge:VTGPrLc.Begin=VTGObj
4628 endif
4629 if defined(VBOX_SIGNING_MODE) && defined(VBOX_WITH_HARDENING)
4630 TEMPLATE_VBOXR3EXE_LDFLAGS += -IntegrityCheck
4631 endif
4632
4633 TEMPLATE_VBOXR3EXE_LIBS.x86 = \
4634 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.x86)_LIB)/msvcrt$(VBOX_VCC_CRT_TYPE).lib \
4635 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.x86)_LIB)/msvcprt$(VBOX_VCC_CRT_TYPE).lib \
4636 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.x86)_LIB)/oldnames.lib
4637 TEMPLATE_VBOXR3EXE_LIBS.amd64 = \
4638 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.amd64)_LIB)/msvcrt$(VBOX_VCC_CRT_TYPE).lib \
4639 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.amd64)_LIB)/msvcprt$(VBOX_VCC_CRT_TYPE).lib \
4640 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.amd64)_LIB)/oldnames.lib
4641 TEMPLATE_VBOXR3EXE_POST_CMDS = $(VBOX_SIGN_IMAGE_CMDS)
4642 if defined(VBOX_WITH_MORE_NT4_COMPAT_BINARIES) && "$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)" == "win.x86"
4643 TEMPLATE_VBOXR3EXE_POST_CMDS.win.x86 = $(if $(eq $(tool_do),LINK_LIBRARY),,$(VBOX_PE_SET_VERSION) $(out)$$(NLTAB)$(TEMPLATE_VBOXR3EXE_POST_CMDS))
4644 TEMPLATE_VBOXR3EXE_LNK_DEPS.win.x86 = $(if $(eq $(tool_do),LINK_LIBRARY),,$(VBOX_PE_SET_VERSION))
4645 TEMPLATE_VBOXR3EXE_LDFLAGS.win.x86 = \
4646 -Include:_vcc100_kernel32_fakes_cpp \
4647 -Include:_vcc100_kernel32_fakes_asm
4648 TEMPLATE_VBOXR3EXE_LIBS.win.x86 = \
4649 $(PATH_STAGE_LIB)/RuntimeR3VccTricks2$(VBOX_SUFF_LIB)
4650 TEMPLATE_VBOXR3EXE_LIBS.x86 = \
4651 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.x86)_LIB)/oldnames.lib \
4652 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.x86)_LIB)/libcmt$(VBOX_VCC_CRT_TYPE).lib \
4653 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.x86)_LIB)/libcpmt$(VBOX_VCC_CRT_TYPE).lib
4654 endif
4655
4656else # the gcc guys
4657TEMPLATE_VBOXR3EXE_TOOL = $(VBOX_GCC_TOOL)
4658TEMPLATE_VBOXR3EXE_CXXFLAGS = -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_OPT) \
4659 $(VBOX_GCC_FP) -fno-strict-aliasing $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_IPRT_FMT_CHECK)
4660 ifdef VBOX_WITH_NO_GCC_WARNING_POLICY
4661 TEMPLATE_VBOXR3EXE_CXXFLAGS += $(VBOX_GCC_WERR)
4662 endif
4663TEMPLATE_VBOXR3EXE_CXXFLAGS.x86 = -m32
4664TEMPLATE_VBOXR3EXE_CXXFLAGS.amd64 = -m64
4665TEMPLATE_VBOXR3EXE_CXXFLAGS.sparc32 = -m32
4666TEMPLATE_VBOXR3EXE_CXXFLAGS.sparc64 = -m64
4667TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile = -finstrument-functions
4668TEMPLATE_VBOXR3EXE_CXXFLAGS.debug = $(VBOX_GCC_SANITIZER_FLAGS)
4669TEMPLATE_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) $(VBOX_GCC_IPRT_FMT_CHECK)
4670 ifdef VBOX_WITH_NO_GCC_WARNING_POLICY
4671 TEMPLATE_VBOXR3EXE_CFLAGS += $(VBOX_GCC_WERR)
4672 endif
4673TEMPLATE_VBOXR3EXE_CFLAGS.x86 = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.x86)
4674TEMPLATE_VBOXR3EXE_CFLAGS.amd64 = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.amd64)
4675TEMPLATE_VBOXR3EXE_CFLAGS.sparc32 = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.sparc32)
4676TEMPLATE_VBOXR3EXE_CFLAGS.sparc64 = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.sparc64)
4677TEMPLATE_VBOXR3EXE_CFLAGS.debug = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.debug)
4678TEMPLATE_VBOXR3EXE_CFLAGS.kprofile = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile)
4679TEMPLATE_VBOXR3EXE_OBJCFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS)
4680TEMPLATE_VBOXR3EXE_OBJCFLAGS.x86 = $(TEMPLATE_VBOXR3EXE_CFLAGS.x86)
4681TEMPLATE_VBOXR3EXE_OBJCFLAGS.amd64 = $(TEMPLATE_VBOXR3EXE_CFLAGS.amd64)
4682TEMPLATE_VBOXR3EXE_OBJCFLAGS.debug = $(TEMPLATE_VBOXR3EXE_CFLAGS.debug)
4683TEMPLATE_VBOXR3EXE_OBJCFLAGS.kprofile = $(TEMPLATE_VBOXR3EXE_CFLAGS.kprofile)
4684TEMPLATE_VBOXR3EXE_OBJCXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS)
4685TEMPLATE_VBOXR3EXE_OBJCXXFLAGS.x86 = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.x86)
4686TEMPLATE_VBOXR3EXE_OBJCXXFLAGS.amd64 = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.amd64)
4687TEMPLATE_VBOXR3EXE_OBJCXXFLAGS.debug = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.debug)
4688TEMPLATE_VBOXR3EXE_OBJCXXFLAGS.kprofile= $(TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile)
4689TEMPLATE_VBOXR3EXE_LDFLAGS.x86 = -m32
4690TEMPLATE_VBOXR3EXE_LDFLAGS.amd64 = -m64
4691TEMPLATE_VBOXR3EXE_LDFLAGS.sparc32 = -m32
4692TEMPLATE_VBOXR3EXE_LDFLAGS.sparc64 = -m64
4693TEMPLATE_VBOXR3EXE_LDFLAGS.linux = -Wl,-z,noexecstack,-z,relro $(VBOX_LD_as_needed)
4694TEMPLATE_VBOXR3EXE_LDFLAGS.solaris = -Wl,-z,ignore # same as VBOX_LD_as_needed
4695TEMPLATE_VBOXR3EXE_LDFLAGS.debug = $(VBOX_GCC_SANITIZER_FLAGS)
4696
4697 ifeq ($(KBUILD_TARGET),linux)
4698TEMPLATE_VBOXR3EXE_LIBS = pthread m rt dl
4699 else ifeq ($(KBUILD_TARGET),os2)
4700TEMPLATE_VBOXR3EXE_TOOL = GXX3OMF
4701TEMPLATE_VBOXR3EXE_LIBS = socket iconv
4702 else ifeq ($(KBUILD_TARGET),darwin)
4703TEMPLATE_VBOXR3EXE_TOOL = $(VBOX_GCC_TOOL)
4704TEMPLATE_VBOXR3EXE_LIBS =
4705TEMPLATE_VBOXR3EXE_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_DEFS)
4706TEMPLATE_VBOXR3EXE_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -fno-common
4707TEMPLATE_VBOXR3EXE_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
4708TEMPLATE_VBOXR3EXE_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_OBJCFLAGS)
4709TEMPLATE_VBOXR3EXE_OBJCXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_OBJCXXFLAGS)
4710TEMPLATE_VBOXR3EXE_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_LDFLAGS)
4711TEMPLATE_VBOXR3EXE_LDFLAGS.darwin.x86 = -read_only_relocs suppress
4712 ifdef VBOX_WITH_DTRACE_R3
4713 TEMPLATE_VBOXR3EXE_CXXFLAGS := $(filter-out -pedantic,$(TEMPLATE_VBOXR3EXE_CXXFLAGS)) -fdollars-in-identifiers # annoying gcc option precedence.
4714 endif
4715 else ifeq ($(KBUILD_TARGET),haiku)
4716TEMPLATE_VBOXR3EXE_TOOL = GXX3
4717TEMPLATE_VBOXR3EXE_POST_CMDS = $(VBOX_HAIKU_XRES_SETVER_CMDS)
4718TEMPLATE_VBOXR3EXE_LIBS = network iconv stdc++ supc++
4719TEMPLATE_VBOXR3EXE_LIBPATH += \
4720 /boot/common/lib
4721# Haiku uses PIC by default...
4722TEMPLATE_VBOXR3EXE_CFLAGS += -fno-pic
4723TEMPLATE_VBOXR3EXE_CXXFLAGS += -fno-pic
4724TEMPLATE_VBOXR3EXE_LDFLAGS += -fno-pic
4725 else if1of ($(KBUILD_TARGET), freebsd openbsd)
4726TEMPLATE_VBOXR3EXE_TOOL = GXX3
4727TEMPLATE_VBOXR3EXE_LIBS = pthread
4728TEMPLATE_VBOXR3EXE_INCS += \
4729 /usr/include \
4730 /usr/X11R6/include \
4731 /usr/local/include
4732TEMPLATE_VBOXR3EXE_LIBPATH += \
4733 /usr/lib \
4734 /usr/X11R6/lib \
4735 /usr/local/lib
4736 else ifeq ($(KBUILD_TARGET),netbsd)
4737TEMPLATE_VBOXR3EXE_TOOL = GXX3
4738TEMPLATE_VBOXR3EXE_LIBS = pthread
4739TEMPLATE_VBOXR3EXE_INCS += \
4740 /usr/include \
4741 /usr/X11R7/include
4742TEMPLATE_VBOXR3EXE_LIBPATH += \
4743 /usr/lib \
4744 /usr/X11R7/lib
4745 else ifeq ($(KBUILD_TARGET),solaris)
4746TEMPLATE_VBOXR3EXE_TOOL = GXX3PLAIN
4747TEMPLATE_VBOXR3EXE_DEFS += LIBICONV_PLUG _REENTRANT # Avoid the GNU libiconv, for now at least.
4748TEMPLATE_VBOXR3EXE_LIBS = rt socket
4749 else
4750$(warning Warning: VBOX Build: Target $(KBUILD_TARGET) is not officially supported!)
4751TEMPLATE_VBOXR3EXE_CXXFLAGS.profile = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.release)
4752TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.krelease)
4753 endif
4754 ifdef VBOX_WITH_RUNPATH
4755 TEMPLATE_VBOXR3EXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)'
4756 else ifdef VBOX_WITH_RELATIVE_RUNPATH
4757 TEMPLATE_VBOXR3EXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)'
4758 endif
4759 ifdef VBOX_WITH_ORIGIN
4760 TEMPLATE_VBOXR3EXE_LDFLAGS.linux += $(VBOX_GCC_ORIGIN_OPT)
4761 endif
4762endif
4763
4764#
4765# Template for building R3 shared objects / DLLs.
4766# This is mostly identical to the VBOXR3EXE template. (Avoid PIC if possible!)
4767# -
4768TEMPLATE_VBOXR3 = VBox Ring 3 SO/DLLs
4769TEMPLATE_VBOXR3_EXTENDS = VBOXR3EXE
4770TEMPLATE_VBOXR3_DEFS.darwin = $(TEMPLATE_VBOXR3EXE_DEFS.darwin) PIC
4771TEMPLATE_VBOXR3_LDFLAGS.darwin = $(TEMPLATE_VBOXR3EXE_LDFLAGS.darwin) \
4772 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
4773 -compatibility_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
4774ifn1of ($(KBUILD_TARGET), darwin win os2)
4775 TEMPLATE_VBOXR3_DEFS = $(TEMPLATE_VBOXR3EXE_DEFS) PIC
4776 TEMPLATE_VBOXR3_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS) -fPIC
4777 TEMPLATE_VBOXR3_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -fPIC
4778 TEMPLATE_VBOXR3_LDFLAGS = $(TEMPLATE_VBOXR3EXE_LDFLAGS) -fPIC
4779endif
4780ifeq ($(KBUILD_TARGET),haiku)
4781 # Haiku uses PIC by default...
4782 TEMPLATE_VBOXR3_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS) -fno-pic
4783 TEMPLATE_VBOXR3_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -fno-pic
4784 TEMPLATE_VBOXR3_LDFLAGS = $(TEMPLATE_VBOXR3EXE_LDFLAGS) -fno-pic
4785endif
4786
4787#
4788# Temporary: Renaming the template and warnings will be errors ("soon").
4789#
4790TEMPLATE_VBoxR3Dll += VBox ring-3 SO/DLLs, no warnings
4791TEMPLATE_VBoxR3Dll_EXTENDS += VBOXR3
4792TEMPLATE_VBoxR3Dll_EXTENDS_BY += appending
4793ifeq ($(KBUILD_TARGET),win)
4794 TEMPLATE_VBoxR3Dll_CFLAGS += $(VBOX_VCC_WERR)
4795 TEMPLATE_VBoxR3Dll_CXXFLAGS += $(VBOX_VCC_WERR)
4796 TEMPLATE_VBoxR3Dll_LDFLAGS += $(VBOX_VCC_LD_WERR)
4797else
4798 TEMPLATE_VBoxR3Dll_CFLAGS += $(VBOX_GCC_WERR)
4799 TEMPLATE_VBoxR3Dll_CXXFLAGS += $(VBOX_GCC_WERR)
4800endif
4801
4802# x86 edition of the above template for use on AMD64 targets.
4803TEMPLATE_VBoxR3Dll-x86 = 32-bit VBox ring-3 SO/DLLs, no warnings
4804TEMPLATE_VBoxR3Dll-x86_EXTENDS = VBoxR3Dll
4805TEMPLATE_VBoxR3Dll-x86_BLD_TRG_ARCH = x86
4806TEMPLATE_VBoxR3Dll-x86_DEFS = $(filter-out HC_ARCH_BITS%,$(TEMPLATE_VBoxR3Dll_DEFS)) \
4807 HC_ARCH_BITS=32 ARCH_BITS=32
4808ifeq ($(KBUILD_TARGET),solaris)
4809 ifdef VBOX_WITH_RUNPATH
4810 TEMPLATE_VBoxR3Dll-x86_LDFLAGS = \
4811 $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)',$(TEMPLATE_VBoxR3Dll_LDFLAGS)) \
4812 '$(VBOX_GCC_RPATH_OPT)$(VBOX_PATH_APP_PRIVATE)' \
4813 '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)'
4814 endif
4815endif
4816
4817
4818#
4819# Template for building performance critical stuff with warnings-as-errors.
4820#
4821TEMPLATE_VBoxR3DllNoPic = VBox ring-3 SO/DLLs without PIC, without warnings.
4822TEMPLATE_VBoxR3DllNoPic_EXTENDS = VBOXR3
4823if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), linux.x86 freebsd.x86)
4824 TEMPLATE_VBoxR3DllNoPic_DEFS = $(TEMPLATE_VBOXR3EXE_DEFS)
4825 TEMPLATE_VBoxR3DllNoPic_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS) $(VBOX_GCC_WERR)
4826 TEMPLATE_VBoxR3DllNoPic_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) $(VBOX_GCC_WERR)
4827 TEMPLATE_VBoxR3DllNoPic_LDFLAGS = $(TEMPLATE_VBOXR3EXE_LDFLAGS)
4828else ifeq ($(KBUILD_TARGET),win)
4829 TEMPLATE_VBoxR3DllNoPic_CFLAGS = $(filter-out -W3 -wd%,$(TEMPLATE_VBOXR3_CFLAGS)) $(VBOX_VCC_WARN_ALL) $(VBOX_VCC_WERR)
4830 TEMPLATE_VBoxR3DllNoPic_CFLAGS.debug = $(filter-out -RTC%,$(TEMPLATE_VBOXR3_CFLAGS.debug))
4831 TEMPLATE_VBoxR3DllNoPic_CFLAGS.release = $(TEMPLATE_VBOXR3_CFLAGS.release) -GS-
4832 TEMPLATE_VBoxR3DllNoPic_CXXFLAGS = $(filter-out -W3 -wd%,$(TEMPLATE_VBOXR3_CXXFLAGS)) $(VBOX_VCC_WARN_ALL) $(VBOX_VCC_WERR)
4833 TEMPLATE_VBoxR3DllNoPic_CXXFLAGS.debug = $(filter-out -RTC%,$(TEMPLATE_VBOXR3_CXXFLAGS.debug)) # RTCsu Prevents IEM opt.
4834 TEMPLATE_VBoxR3DllNoPic_CXXFLAGS.release = $(TEMPLATE_VBOXR3_CXXFLAGS.release) -GS-
4835 TEMPLATE_VBoxR3DllNoPic_LDFLAGS = $(TEMPLATE_VBOXR3_LDFLAGS) $(VBOX_VCC_LD_WERR)
4836else
4837 TEMPLATE_VBoxR3DllNoPic_CFLAGS = $(TEMPLATE_VBOXR3_CFLAGS) $(VBOX_GCC_WERR)
4838 TEMPLATE_VBoxR3DllNoPic_CXXFLAGS = $(TEMPLATE_VBOXR3_CXXFLAGS) $(VBOX_GCC_WERR)
4839endif
4840
4841# x86 edition of the above template for use on AMD64 targets.
4842TEMPLATE_VBoxR3DllNoPic-x86 = 32-bit VBox ring-3 SO/DLLs without PIC, without warnings.
4843TEMPLATE_VBoxR3DllNoPic-x86_EXTENDS = VBoxR3DllNoPic
4844TEMPLATE_VBoxR3DllNoPic-x86_BLD_TRG_ARCH = x86
4845TEMPLATE_VBoxR3DllNoPic-x86_DEFS = $(filter-out HC_ARCH_BITS%,$(TEMPLATE_VBoxR3DllNoPic_DEFS)) \
4846 HC_ARCH_BITS=32 ARCH_BITS=32
4847
4848
4849#
4850# Template for building performance critical stuff without warnings-as-errors.
4851#
4852TEMPLATE_VBoxR3DllWarnNoPic = VBox ring-3 SO/DLLs without PIC, with warnings.
4853TEMPLATE_VBoxR3DllWarnNoPic_EXTENDS = VBOXR3
4854if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), linux.x86 freebsd.x86)
4855 TEMPLATE_VBoxR3DllWarnNoPic_DEFS = $(TEMPLATE_VBOXR3EXE_DEFS)
4856 TEMPLATE_VBoxR3DllWarnNoPic_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS)
4857 TEMPLATE_VBoxR3DllWarnNoPic_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS)
4858 TEMPLATE_VBoxR3DllWarnNoPic_LDFLAGS = $(TEMPLATE_VBOXR3EXE_LDFLAGS)
4859else ifeq ($(KBUILD_TARGET),win)
4860 TEMPLATE_VBoxR3DllWarnNoPic_CFLAGS.release = $(TEMPLATE_VBOXR3_CFLAGS.release) -GS-
4861 TEMPLATE_VBoxR3DllWarnNoPic_CXXFLAGS.release = $(TEMPLATE_VBOXR3_CXXFLAGS.release) -GS-
4862endif
4863
4864#
4865# Template for building static R3 executables and any static
4866# libraries they link with.
4867#
4868TEMPLATE_VBOXR3STATIC = VBox Static Ring 3 EXE
4869TEMPLATE_VBOXR3STATIC_EXTENDS = VBOXR3EXE
4870TEMPLATE_VBOXR3STATIC_DEFS = IN_RT_STATIC IN_RT_R3 IN_SUP_STATIC $(TEMPLATE_VBOXR3EXE_DEFS)
4871ifeq ($(KBUILD_TARGET),win)
4872 TEMPLATE_VBOXR3STATIC_CFLAGS = $(filter-out -MD$(VBOX_VCC_CRT_TYPE), $(TEMPLATE_VBOXR3EXE_CFLAGS)) -MT$(VBOX_VCC_CRT_TYPE)
4873 TEMPLATE_VBOXR3STATIC_CXXFLAGS = $(filter-out -MD$(VBOX_VCC_CRT_TYPE), $(TEMPLATE_VBOXR3EXE_CFLAGS)) -MT$(VBOX_VCC_CRT_TYPE)
4874 TEMPLATE_VBOXR3STATIC_LDFLAGS = $(filter-out /DISALLOWLIB:libcmt$(VBOX_VCC_CRT_TYPE).lib /DISALLOWLIB:libcpmt$(VBOX_VCC_CRT_TYPE).lib, $(TEMPLATE_VBOXR3EXE_LDFLAGS)) \
4875 /DISALLOWLIB:msvcrt.lib \
4876 /DISALLOWLIB:msvcrtd.lib \
4877 /DISALLOWLIB:msvcprt.lib \
4878 /DISALLOWLIB:msvcprtd.lib
4879 TEMPLATE_VBOXR3STATIC_LIBS.x86 = \
4880 $(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL.win.x86)_LIB)/oldnames.lib \
4881 $(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL.win.x86)_LIB)/libcmt$(VBOX_VCC_CRT_TYPE).lib \
4882 $(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL.win.x86)_LIB)/libcpmt$(VBOX_VCC_CRT_TYPE).lib
4883 TEMPLATE_VBOXR3STATIC_LIBS.amd64 = \
4884 $(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL.win.amd64)_LIB)/libcmt$(VBOX_VCC_CRT_TYPE).lib \
4885 $(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL.win.amd64)_LIB)/libcpmt$(VBOX_VCC_CRT_TYPE).lib \
4886 $(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL.win.amd64)_LIB)/oldnames.lib
4887else ifn1of ($(KBUILD_TARGET), darwin linux solaris)
4888 # The gcc guys sans darwin, linux and solaris (don't depend on statically compiled system libs there)
4889 TEMPLATE_VBOXR3STATIC_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS) -static
4890 TEMPLATE_VBOXR3STATIC_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -static
4891 TEMPLATE_VBOXR3STATIC_OBJCFLAGS = $(TEMPLATE_VBOXR3EXE_OBJCFLAGS) -static
4892 TEMPLATE_VBOXR3STATIC_OBJCXXFLAGS = $(TEMPLATE_VBOXR3EXE_OBJCXXFLAGS) -static
4893 TEMPLATE_VBOXR3STATIC_LDFLAGS = $(TEMPLATE_VBOXR3EXE_LDFLAGS) -static
4894else ifeq ($(KBUILD_TARGET),solaris)
4895 TEMPLATE_VBOXR3STATIC_LIBS = $(TEMPLATE_VBOXR3EXE_LIBS) nsl
4896 TEMPLATE_VBOXR3STATIC_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)',$(TEMPLATE_VBOXR3EXE_LDFLAGS))
4897else
4898 TEMPLATE_VBOXR3STATIC_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)',$(TEMPLATE_VBOXR3EXE_LDFLAGS))
4899endif
4900
4901#
4902# Temporary: Renaming the template and warnings will be errors (soon).
4903# Unlike VBOXR3STATIC, this is strict wrt warnings and includes IPRT.
4904#
4905TEMPLATE_VBoxR3Static = New name for VBOXR3STATIC
4906TEMPLATE_VBoxR3Static_EXTENDS = VBOXR3STATIC
4907TEMPLATE_VBoxR3Static_EXTENDS_BY = appending
4908TEMPLATE_VBoxR3Static_SDKS += VBOX_OPENSSL
4909TEMPLATE_VBoxR3Static_SDKS.win += VBOX_NTDLL
4910ifeq ($(KBUILD_TARGET),win)
4911 TEMPLATE_VBoxR3Static_CFLAGS += $(VBOX_VCC_WERR)
4912 TEMPLATE_VBoxR3Static_CXXFLAGS += $(VBOX_VCC_WERR)
4913 TEMPLATE_VBoxR3Static_LDFLAGS += $(VBOX_VCC_LD_WERR)
4914else
4915 TEMPLATE_VBoxR3Static_CFLAGS += $(VBOX_GCC_WERR)
4916 TEMPLATE_VBoxR3Static_CXXFLAGS += $(VBOX_GCC_WERR)
4917endif
4918TEMPLATE_VBoxR3Static_LIBS += \
4919 $(VBOX_LIB_RUNTIME_STATIC)
4920ifndef SDK_VBOX_OPENSSL_LIBS
4921 TEMPLATE_VBoxR3Static_LIBS += \
4922 $(PATH_STAGE_LIB)/VBox-libcrypto$(VBOX_SUFF_LIB) \
4923 $(PATH_STAGE_LIB)/VBox-libssl$(VBOX_SUFF_LIB)
4924endif
4925ifndef SDK_VBOX_LIBXML2_LIBS
4926 TEMPLATE_VBoxR3Static_LIBS += \
4927 $(PATH_STAGE_LIB)/VBox-libxml2-static$(VBOX_SUFF_LIB)
4928endif
4929if1of ($(KBUILD_TARGET),os2 win)
4930 TEMPLATE_VBoxR3Static_LIBS += \
4931 $(PATH_STAGE_LIB)/VBox-liblzf-static$(VBOX_SUFF_LIB) \
4932 $(PATH_STAGE_LIB)/VBox-zlib-static$(VBOX_SUFF_LIB)
4933else
4934 TEMPLATE_VBoxR3Static_LIBS += \
4935 $(PATH_STAGE_LIB)/VBox-liblzf$(VBOX_SUFF_LIB) \
4936 $(SDK_VBOX_ZLIB_LIBS)
4937 ifeq ($(KBUILD_TARGET),linux)
4938 TEMPLATE_VBoxR3Static_LIBS += crypt
4939 else if1of ($(KBUILD_TARGET),darwin freebsd)
4940 TEMPLATE_VBoxR3Static_LIBS += iconv
4941 else ifeq ($(KBUILD_TARGET),solaris)
4942 TEMPLATE_VBoxR3Static_LIBS += kstat
4943 endif
4944endif
4945
4946#
4947# Non-pedantic variation of VBoxR3Static
4948#
4949TEMPLATE_VBoxR3StaticNonPedantic = VBox Static Ring-3 EXE, non-pedantic.
4950TEMPLATE_VBoxR3StaticNonPedantic_EXTENDS = VBoxR3Static
4951ifeq ($(KBUILD_TARGET),win)
4952 TEMPLATE_VBoxR3StaticNonPedantic_CXXFLAGS = $(TEMPLATE_VBoxR3Static_CXXFLAGS) $(VBOX_VCC_NON_PEDANTIC)
4953 TEMPLATE_VBoxR3StaticNonPedantic_CFLAGS = $(TEMPLATE_VBoxR3Static_CFLAGS) $(VBOX_VCC_NON_PEDANTIC)
4954else # gcc:
4955 TEMPLATE_VBoxR3StaticNonPedantic_TOOL = $(VBOX_GCC_TOOL)
4956 TEMPLATE_VBoxR3StaticNonPedantic_CXXFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_CXX),$(TEMPLATE_VBoxR3Static_CXXFLAGS)) \
4957 $(VBOX_GCC_NON_PEDANTIC_CXX)
4958 TEMPLATE_VBoxR3StaticNonPedantic_CFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_C) ,$(TEMPLATE_VBoxR3Static_CFLAGS)) \
4959 $(VBOX_GCC_NON_PEDANTIC_CXX)
4960endif
4961
4962
4963#
4964# Same as VBOXR3EXE but without C++ exceptions.
4965#
4966# VBOXR3EXE does C++ exceptions and may assumes that extern "C" functions
4967# doesn't throw them. Use this template (and VBOXR3DLLNOXCPT) with care
4968# and only where the C++ overhead is really unwanted.
4969#
4970TEMPLATE_VBOXR3EXENOXCPT = VBox Ring 3 Exe without C++ exception
4971TEMPLATE_VBOXR3EXENOXCPT_EXTENDS = VBOXR3EXE
4972ifeq ($(KBUILD_TARGET),win)
4973 TEMPLATE_VBOXR3EXENOXCPT_CFLAGS = $(filter-out -EH%,$(TEMPLATE_VBOXR3EXE_CFLAGS) ) -EHs-
4974 TEMPLATE_VBOXR3EXENOXCPT_CXXFLAGS = $(filter-out -EH%,$(TEMPLATE_VBOXR3EXE_CXXFLAGS)) -EHs-
4975else
4976 TEMPLATE_VBOXR3EXENOXCPT_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -fno-exceptions
4977endif
4978
4979#
4980# Same as VBOXR3 but without C++ exceptions.
4981#
4982TEMPLATE_VBOXR3DLLNOXCPT = VBox Ring 3 SO/DLLs without C++ exception
4983TEMPLATE_VBOXR3DLLNOXCPT_EXTENDS = VBOXR3
4984ifeq ($(KBUILD_TARGET),win)
4985 TEMPLATE_VBOXR3DLLNOXCPT_CFLAGS = $(filter-out -EH%,$(TEMPLATE_VBOXR3_CFLAGS) ) -EHs-
4986 TEMPLATE_VBOXR3DLLNOXCPT_CXXFLAGS = $(filter-out -EH%,$(TEMPLATE_VBOXR3_CXXFLAGS)) -EHs-
4987else
4988 TEMPLATE_VBOXR3DLLNOXCPT_CXXFLAGS = $(TEMPLATE_VBOXR3_CXXFLAGS) -fno-exceptions
4989endif
4990
4991#
4992# Template for building hardened Ring-3 executables.
4993# These shall have no extra runpaths, esp. not origin ones.
4994#
4995TEMPLATE_VBOXR3HARDENEDEXE = Hardened VBox Ring-3 EXE
4996TEMPLATE_VBOXR3HARDENEDEXE_EXTENDS = VBOXR3EXE
4997TEMPLATE_VBOXR3HARDENEDEXE_DEBUG_INST.win = $(INST_DEBUG)hardened-exes/
4998ifdef VBOX_WITH_HARDENING
4999 TEMPLATE_VBOXR3HARDENEDEXE_LIBS = $(VBOX_LIB_SUPHARDENED) $(TEMPLATE_VBOXR3EXE_LIBS)
5000else
5001 TEMPLATE_VBOXR3HARDENEDEXE_LIBS = $(TEMPLATE_VBOXR3EXE_LIBS)
5002endif
5003TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS.darwin = $(TEMPLATE_VBOXR3EXE_LDFLAGS.darwin) -framework IOKit
5004ifeq ($(KBUILD_TARGET),linux)
5005# not necessary except USE_LIB_PCAP is defined in SUPR3HardenedMain.cpp
5006# TEMPLATE_VBOXR3HARDENEDEXE_LIBS += cap
5007endif
5008ifeq ($(KBUILD_TARGET),win) # No CRT!
5009 TEMPLATE_VBOXR3HARDENEDEXE_SDKS = VBOX_NTDLL $(TEMPLATE_VBOXR3EXE_SDKS)
5010 TEMPLATE_VBOXR3HARDENEDEXE_LIBS.x86 = \
5011 $(PATH_SDK_$(VBOX_WINDDK)_LIB.x86)/int64.lib \
5012 $(PATH_TOOL_$(TEMPLATE_VBOXR3HARDENEDEXE_TOOL.win.x86)_LIB)/chkstk.obj
5013 TEMPLATE_VBOXR3HARDENEDEXE_CXXFLAGS = $(filter-out -RTC% -GZ -GS,$(TEMPLATE_VBOXR3EXE_CXXFLAGS)) -GS-
5014 TEMPLATE_VBOXR3HARDENEDEXE_CXXFLAGS.debug= $(filter-out -RTC% -GZ -GS,$(TEMPLATE_VBOXR3EXE_CXXFLAGS.debug)) -GS- #-O2 -Oy-
5015 TEMPLATE_VBOXR3HARDENEDEXE_CFLAGS = $(filter-out -RTC% -GZ -GS,$(TEMPLATE_VBOXR3EXE_CFLAGS)) -GS-
5016 TEMPLATE_VBOXR3HARDENEDEXE_CFLAGS.debug = $(filter-out -RTC% -GZ -GS,$(TEMPLATE_VBOXR3EXE_CFLAGS.debug)) -GS- -O2 -Oy-
5017 TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS = $(TEMPLATE_VBOXR3EXE_LDFLAGS) \
5018 /DISALLOWLIB:msvcrt$(VBOX_VCC_CRT_TYPE).lib \
5019 /DISALLOWLIB:msvcprt$(VBOX_VCC_CRT_TYPE).lib
5020 TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS.win.x86 = $(TEMPLATE_VBOXR3EXE_LDFLAGS.win.x86) /entry:suplibHardenedWindowsMain
5021 TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS.win.amd64 = $(TEMPLATE_VBOXR3EXE_LDFLAGS.win.amd64) /entry:suplibHardenedWindowsMain
5022 TEMPLATE_VBOXR3HARDENEDEXE_LIBS.x86 = $(NOT_SUCH_VARIABLE)
5023 TEMPLATE_VBOXR3HARDENEDEXE_LIBS.amd64 = $(NOT_SUCH_VARIABLE)
5024else ifn1of ($(KBUILD_TARGET), os2 solaris)
5025 # We want to keep the RPATH on Solaris to be able to find libgcc_1/libstdc++ within $(VBOX_WITH_RUNPATH)
5026 TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)%,$(TEMPLATE_VBOXR3EXE_LDFLAGS))
5027 TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS.linux = $(filter-out $(VBOX_GCC_ORIGIN_OPT),$(TEMPLATE_VBOXR3EXE_LDFLAGS.linux))
5028endif
5029
5030#
5031# Template for building hardened Ring-3 libraries.
5032#
5033TEMPLATE_VBOXR3HARDENEDLIB = Hardened VBox Ring-3 LIB
5034TEMPLATE_VBOXR3HARDENEDLIB_EXTENDS = VBOXR3HARDENEDEXE
5035TEMPLATE_VBOXR3HARDENEDLIB_LIBS = $(NO_SUCH_VARIABLE)
5036
5037
5038#
5039# Template for building hardened Ring-3 testcase executables.
5040#
5041TEMPLATE_VBoxR3HardenedTstExe = VBox Ring-3 Hardened Testcase Exe (currently windows only!)
5042TEMPLATE_VBoxR3HardenedTstExe_EXTENDS = VBOXR3HARDENEDEXE
5043TEMPLATE_VBoxR3HardenedTstExe_INST = $(INST_TESTCASE)
5044
5045#
5046# Template for building hardened Ring-3 testcase DLLs (pairs with VBoxR3HardenedTstExe).
5047#
5048TEMPLATE_VBoxR3HardenedTstDll = VBox Ring-3 Hardened Testcase Dll (currently windows only!)
5049TEMPLATE_VBoxR3HardenedTstDll_EXTENDS = VBoxR3TstDll
5050TEMPLATE_VBoxR3HardenedTstDll_INST = $(INST_TESTCASE)
5051 TEMPLATE_VBoxR3HardenedTstDll_LDFLAGS.win = $(TEMPLATE_VBoxR3TstDll_LDFLAGS.win) -IntegrityCheck
5052ifn1of ($(KBUILD_TARGET), win os2)
5053 TEMPLATE_VBoxR3HardenedTstDll_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)%,$(TEMPLATE_VBoxR3TstDll_LDFLAGS))
5054 TEMPLATE_VBoxR3HardenedTstDll_LDFLAGS.linux = $(filter-out $(VBOX_GCC_ORIGIN_OPT),$(TEMPLATE_VBoxR3TstDll_LDFLAGS.linux))
5055endif
5056
5057#
5058# Template for building set-uid-to-root helper programs.
5059# In hardened builds, these may only contain absolute runpaths!
5060#
5061TEMPLATE_VBoxR3SetUidToRoot = Set-uid-to-root helper program.
5062if1of ($(KBUILD_TARGET),win)
5063 TEMPLATE_VBoxR3SetUidToRoot_EXTENDS = VBOXR3EXE
5064else
5065 TEMPLATE_VBoxR3SetUidToRoot_EXTENDS = VBOXR3HARDENEDEXE
5066endif
5067TEMPLATE_VBoxR3SetUidToRoot_LIBS = $(NO_SUCH_VARIABLE)
5068ifdef VBOX_WITH_RUNPATH
5069 TEMPLATE_VBoxR3SetUidToRoot_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)'
5070endif
5071ifndef VBOX_WITH_HARDENING
5072 ifdef VBOX_WITH_RELATIVE_RUNPATH
5073 TEMPLATE_VBoxR3SetUidToRoot_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)'
5074 endif
5075 ifdef VBOX_WITH_ORIGIN
5076 TEMPLATE_VBoxR3SetUidToRoot_LDFLAGS.linux += $(VBOX_GCC_ORIGIN_OPT)
5077 endif
5078endif
5079
5080#
5081# Template for building R3 tools.
5082#
5083TEMPLATE_VBoxR3Tool = VBox Ring 3 Tools
5084TEMPLATE_VBoxR3Tool_EXTENDS = VBOXR3EXE
5085TEMPLATE_VBoxR3Tool_INST = $(VBOX_INST_TOOLS)
5086ifeq ($(KBUILD_TARGET),win)
5087 TEMPLATE_VBoxR3Tool_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS) $(VBOX_VCC_WERR)
5088 TEMPLATE_VBoxR3Tool_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) $(VBOX_VCC_WERR)
5089 TEMPLATE_VBoxR3Tool_LDFLAGS = $(TEMPLATE_VBOXR3EXE_LDFLAGS) $(VBOX_VCC_LD_WERR)
5090else
5091 TEMPLATE_VBoxR3Tool_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS) $(VBOX_GCC_WERR)
5092 TEMPLATE_VBoxR3Tool_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) $(VBOX_GCC_WERR)
5093 ifdef VBOX_WITH_RUNPATH
5094 TEMPLATE_VBoxR3Tool_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' $(TEMPLATE_VBOXR3EXE_LDFLAGS)
5095 else ifdef VBOX_WITH_RELATIVE_RUNPATH
5096 TEMPLATE_VBoxR3Tool_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/..' $(TEMPLATE_VBOXR3EXE_LDFLAGS)
5097 endif
5098endif
5099TEMPLATE_VBoxR3Tool_LIBS = $(LIB_RUNTIME) $(TEMPLATE_VBOXR3EXE_LIBS)
5100if defined(VBOX_WITH_MORE_NT4_COMPAT_BINARIES) && "$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)" == "win.x86"
5101 TEMPLATE_VBoxR3Tool_LIBS.x86 = \
5102 $(PATH_STAGE_LIB)/RuntimeR3VccTricks2$(VBOX_SUFF_LIB) \
5103 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.x86)_LIB)/oldnames.lib
5104endif
5105
5106#
5107# Template for building R3 shared objects / DLLs with the 10.5 Mac OS X SDK.
5108# Identical to VBOXR3EXE, except for the DYLIB, the classic_linker and SDK bits.
5109#
5110TEMPLATE_VBOXR3OSX105 = VBox Ring 3 SO/DLLs for OS X 10.5
5111TEMPLATE_VBOXR3OSX105_EXTENDS = VBOXR3EXE
5112TEMPLATE_VBOXR3OSX105_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_DEFS) PIC
5113TEMPLATE_VBOXR3OSX105_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_CFLAGS) -fno-common
5114TEMPLATE_VBOXR3OSX105_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_CXXFLAGS)
5115TEMPLATE_VBOXR3OSX105_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_OBJCFLAGS)
5116TEMPLATE_VBOXR3OSX105_OBJCXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_OBJCFLAGS)
5117TEMPLATE_VBOXR3OSX105_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_LDFLAGS) \
5118 -read_only_relocs suppress \
5119 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
5120 -compatibility_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
5121
5122#
5123# Template for building R3 shared objects / DLLs with the 10.7 Mac OS X SDK.
5124# Identical to VBoxR3Dll, except for the DYLIB, the classic_linker and SDK bits.
5125#
5126TEMPLATE_VBoxR3DllOsX107 = VBox Ring 3 SO/DLLs for OS X 10.7
5127TEMPLATE_VBoxR3DllOsX107_EXTENDS = VBoxR3Dll
5128TEMPLATE_VBoxR3DllOsX107_TOOL = LLVMGXX42MACHO
5129TEMPLATE_VBoxR3DllOsX107_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_DEFS) PIC
5130TEMPLATE_VBoxR3DllOsX107_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_CFLAGS) -fno-common
5131TEMPLATE_VBoxR3DllOsX107_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_CXXFLAGS)
5132TEMPLATE_VBoxR3DllOsX107_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_OBJCFLAGS)
5133TEMPLATE_VBoxR3DllOsX107_OBJCXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_OBJCFLAGS)
5134TEMPLATE_VBoxR3DllOsX107_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_LDFLAGS) \
5135 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
5136 -compatibility_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
5137
5138
5139#
5140# Ring-3 testcase, running automatically during the build.
5141# This is the VBOXR3EXE template only with a different install dir.
5142#
5143TEMPLATE_VBOXR3AUTOTST = VBox Ring 3 Testcase Exe
5144ifeq ($(KBUILD_TARGET),win)
5145 TEMPLATE_VBOXR3AUTOTST_EXTENDS = VBoxR3Static
5146 TEMPLATE_VBOXR3AUTOTST_LIBS = $(NO_SUCH_VARIABLE)
5147else
5148 TEMPLATE_VBOXR3AUTOTST_EXTENDS = VBOXR3EXE
5149endif
5150TEMPLATE_VBOXR3AUTOTST_INST = $(INST_TESTCASE)
5151if "$(KBUILD_TARGET)" == "win" && defined(VBOX_SIGNING_MODE)
5152 TEMPLATE_VBOXR3AUTOTST_POST_CMDS = $(NO_SUCH_VARIABLE)
5153 TEMPLATE_VBOXR3AUTOTST_LDFLAGS = $(filter-out -IntegrityCheck, $(TEMPLATE_VBoxR3Static_LDFLAGS))
5154endif
5155
5156#
5157# Ring-3 testcase.
5158# This is the VBOXR3EXE template only with a different install dir.
5159#
5160TEMPLATE_VBOXR3TSTEXE = VBox Ring 3 Testcase Exe
5161TEMPLATE_VBOXR3TSTEXE_EXTENDS = VBOXR3EXE
5162TEMPLATE_VBOXR3TSTEXE_INST = $(INST_TESTCASE)
5163TEMPLATE_VBOXR3TSTEXE_LIBS = $(LIB_RUNTIME) $(TEMPLATE_VBOXR3EXE_LIBS)
5164ifdef VBOX_WITH_RUNPATH
5165 TEMPLATE_VBOXR3TSTEXE_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' $(TEMPLATE_VBOXR3EXE_LDFLAGS)
5166else ifdef VBOX_WITH_RELATIVE_RUNPATH
5167 TEMPLATE_VBOXR3TSTEXE_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/..' $(TEMPLATE_VBOXR3EXE_LDFLAGS)
5168endif
5169if "$(KBUILD_TARGET)" == "win" && defined(VBOX_SIGNING_MODE)
5170 TEMPLATE_VBOXR3TSTEXE_POST_CMDS =
5171 TEMPLATE_VBOXR3TSTEXE_LDFLAGS = $(filter-out -IntegrityCheck, $(TEMPLATE_VBOXR3EXE_LDFLAGS))
5172endif
5173if defined(VBOX_WITH_MORE_NT4_COMPAT_BINARIES) && "$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)" == "win.x86"
5174 TEMPLATE_VBOXR3TSTEXE_POST_CMDS.win.x86 = $(if $(eq $(tool_do),LINK_LIBRARY),,$(VBOX_PE_SET_VERSION) $(out))
5175 TEMPLATE_VBOXR3TSTEXE_LIBS.x86 = \
5176 $(PATH_STAGE_LIB)/RuntimeR3VccTricks2$(VBOX_SUFF_LIB) \
5177 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.x86)_LIB)/oldnames.lib
5178endif
5179
5180#
5181# Ring-3 testcase (no -pedantic)
5182#
5183TEMPLATE_VBOXR3TSTNPEXE = VBox Ring 3 Testcase Exe Non-pedantic
5184TEMPLATE_VBOXR3TSTNPEXE_EXTENDS = VBOXR3TSTEXE
5185ifneq ($(KBUILD_TARGET),win) # (only gcc)
5186 TEMPLATE_VBOXR3TSTNPEXE_TOOL = $(VBOX_GCC_TOOL)
5187 TEMPLATE_VBOXR3TSTNPEXE_CXXFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_CXX),$(TEMPLATE_VBOXR3TSTEXE_CXXFLAGS)) \
5188 -Wno-sign-compare
5189 TEMPLATE_VBOXR3TSTNPEXE_CFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_C) ,$(TEMPLATE_VBOXR3TSTEXE_CFLAGS)) \
5190 -Wno-sign-compare
5191endif
5192
5193
5194#
5195# Ring-3 testcase DLL.
5196#
5197TEMPLATE_VBoxR3TstDll = VBox Ring-3 Testcase Dll
5198TEMPLATE_VBoxR3TstDll_EXTENDS = VBOXR3TSTEXE
5199ifn1of ($(KBUILD_TARGET), darwin win os2)
5200 TEMPLATE_VBoxR3TstDll_DEFS = $(TEMPLATE_VBOXR3TSTEXE_DEFS) PIC
5201 TEMPLATE_VBoxR3TstDll_CFLAGS = $(TEMPLATE_VBOXR3TSTEXE_CFLAGS) -fPIC
5202 TEMPLATE_VBoxR3TstDll_CXXFLAGS = $(TEMPLATE_VBOXR3TSTEXE_CXXFLAGS) -fPIC
5203 TEMPLATE_VBoxR3TstDll_LDFLAGS = $(TEMPLATE_VBOXR3TSTEXE_LDFLAGS) -fPIC
5204endif
5205
5206
5207#
5208# Template for the CppUnit kind of testcases.
5209#
5210TEMPLATE_VBOXCPPUNITEXE = VBox CppUnit Testcase Exe
5211TEMPLATE_VBOXCPPUNITEXE_EXTENDS = VBOXR3TSTEXE
5212## @todo make a CPPUNIT SDK and add cppunit tools packages for windows, mac, solaris and OS/2.
5213#TEMPLATE_VBOXCPPUNITEXE_SDKS = CPPUNIT -
5214TEMPLATE_VBOXCPPUNITEXE_LIBS = \
5215 $(TEMPLATE_VBOXR3TSTEXE_LIBS) \
5216 cppunit
5217
5218#
5219# Template for building bad C/C++ style R3 executables (no -pedantic).
5220#
5221TEMPLATE_VBOXR3NPEXE = VBox Ring 3 Non-pedantic
5222TEMPLATE_VBOXR3NPEXE_EXTENDS = VBOXR3EXE
5223ifneq ($(KBUILD_TARGET),win) # (only gcc)
5224 TEMPLATE_VBOXR3NPEXE_TOOL = $(VBOX_GCC_TOOL)
5225 TEMPLATE_VBOXR3NPEXE_CXXFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_CXX),$(TEMPLATE_VBOXR3EXE_CXXFLAGS)) \
5226 $(VBOX_GCC_NON_PEDANTIC_CXX)
5227 TEMPLATE_VBOXR3NPEXE_CFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_C) ,$(TEMPLATE_VBOXR3EXE_CFLAGS)) \
5228 $(VBOX_GCC_NON_PEDANTIC_C)
5229endif
5230
5231
5232#
5233# Template for building bad C/C++ style R3 shared libraries / Dlls (no -pedantic).
5234# (Same transformation as for VBOXR3NPEXE.)
5235#
5236# @deprecated Use VBoxR3DllNonPedantic!
5237#
5238TEMPLATE_VBOXR3NP = VBox Ring 3 Non-pedantic
5239TEMPLATE_VBOXR3NP_EXTENDS = VBOXR3
5240ifneq ($(KBUILD_TARGET),win) # (only gcc)
5241 TEMPLATE_VBOXR3NP_TOOL = $(VBOX_GCC_TOOL)
5242 TEMPLATE_VBOXR3NP_CXXFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_CXX),$(TEMPLATE_VBOXR3_CXXFLAGS)) \
5243 $(VBOX_GCC_NON_PEDANTIC_CXX)
5244 TEMPLATE_VBOXR3NP_CFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_C) ,$(TEMPLATE_VBOXR3_CFLAGS)) \
5245 $(VBOX_GCC_NON_PEDANTIC_C)
5246 TEMPLATE_VBOXR3NP_OBJCFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) -pedantic -Wstrict-prototypes,$(TEMPLATE_VBOXR3_OBJCFLAGS))
5247 TEMPLATE_VBOXR3NP_OBJCXXFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) -pedantic,$(TEMPLATE_VBOXR3_OBJCXXFLAGS))
5248endif
5249
5250
5251#
5252# Template for building bad C/C++ style R3 shared libraries / Dlls (no -pedantic).
5253# (Same transformation as for VBoxR3ExeNonPedantic.)
5254#
5255TEMPLATE_VBoxR3DllNonPedantic = VBox ring-3 Non-pedantic, with warnings.
5256TEMPLATE_VBoxR3DllNonPedantic_EXTENDS = VBOXR3
5257ifeq ($(KBUILD_TARGET),win)
5258 TEMPLATE_VBoxR3DllNonPedantic_CXXFLAGS = $(TEMPLATE_VBOXR3_CXXFLAGS) $(VBOX_VCC_NON_PEDANTIC)
5259 TEMPLATE_VBoxR3DllNonPedantic_CFLAGS = $(TEMPLATE_VBOXR3_CFLAGS) $(VBOX_VCC_NON_PEDANTIC)
5260else # gcc:
5261 TEMPLATE_VBoxR3DllNonPedantic_TOOL = $(VBOX_GCC_TOOL)
5262 TEMPLATE_VBoxR3DllNonPedantic_CXXFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_CXX),$(TEMPLATE_VBOXR3_CXXFLAGS)) \
5263 $(VBOX_GCC_NON_PEDANTIC_CXX)
5264 TEMPLATE_VBoxR3DllNonPedantic_CFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_C) ,$(TEMPLATE_VBOXR3_CFLAGS)) \
5265 $(VBOX_GCC_NON_PEDANTIC_C)
5266endif
5267
5268# x86 edition of the above template for use on AMD64 targets.
5269TEMPLATE_VBoxR3DllNonPedantic-x86 = 32-bit VBox ring-3 SO/DLLs, no warnings
5270TEMPLATE_VBoxR3DllNonPedantic-x86_EXTENDS = VBoxR3DllNonPedantic
5271TEMPLATE_VBoxR3DllNonPedantic-x86_BLD_TRG_ARCH = x86
5272TEMPLATE_VBoxR3DllNonPedantic-x86_DEFS = $(filter-out HC_ARCH_BITS%,$(TEMPLATE_VBoxR3DllNonPedantic_DEFS)) \
5273 HC_ARCH_BITS=32 ARCH_BITS=32
5274
5275
5276
5277#
5278# Same as VBoxR3DllNonPedantic, only it optimizes debug builds.
5279#
5280TEMPLATE_VBoxR3DllNonPedanticFast = VBox ring-3 Non-pedantic, with warnings, optimized debug.
5281TEMPLATE_VBoxR3DllNonPedanticFast_EXTENDS = VBoxR3DllNonPedantic
5282ifeq ($(KBUILD_TYPE),debug)
5283 ifeq ($(KBUILD_TARGET),win)
5284 TEMPLATE_VBoxR3DllNonPedanticFast_CXXFLAGS = $(filter-out -O0, $(TEMPLATE_VBoxR3DllNonPedantic_CXXFLAGS)) -O2 -Oy-
5285 TEMPLATE_VBoxR3DllNonPedanticFast_CXXFLAGS.debug = $(filter-out -RTC%, $(TEMPLATE_VBoxR3DllNonPedantic_CXXFLAGS.debug))
5286 TEMPLATE_VBoxR3DllNonPedanticFast_CFLAGS = $(filter-out -O0, $(TEMPLATE_VBoxR3DllNonPedantic_CFLAGS)) -O2 -Oy-
5287 TEMPLATE_VBoxR3DllNonPedanticFast_CFLAGS.debug = $(filter-out -RTC%, $(TEMPLATE_VBoxR3DllNonPedantic_CFLAGS.debug))
5288 else
5289 TEMPLATE_VBoxR3DllNonPedanticFast_CXXFLAGS = $(TEMPLATE_VBoxR3DllNonPedantic_CXXFLAGS) -O2 -fno-omit-frame-pointer
5290 TEMPLATE_VBoxR3DllNonPedanticFast_CFLAGS = $(TEMPLATE_VBoxR3DllNonPedantic_CFLAGS) -O2 -fno-omit-frame-pointer
5291 endif
5292endif
5293
5294
5295#
5296# Template for building libraries that are linked into VBoxRT.dll
5297# and it's variations, pedantic variation.
5298#
5299TEMPLATE_VBoxR3RuntimeDll = For libraries that are linked into VBoxRT.
5300TEMPLATE_VBoxR3RuntimeDll_EXTENDS = VBoxR3Dll
5301if defined(VBOX_WITH_MORE_NT4_COMPAT_BINARIES) && "$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)" == "win.x86"
5302 TEMPLATE_VBoxR3RuntimeDll_CFLAGS = $(filter-out -MD$(VBOX_VCC_CRT_TYPE), $(TEMPLATE_VBoxR3Dll_CFLAGS)) -MT$(VBOX_VCC_CRT_TYPE)
5303 TEMPLATE_VBoxR3RuntimeDll_CXXFLAGS = $(filter-out -MD$(VBOX_VCC_CRT_TYPE), $(TEMPLATE_VBoxR3Dll_CXXFLAGS)) -MT$(VBOX_VCC_CRT_TYPE)
5304 TEMPLATE_VBoxR3RuntimeDll_LIBS.x86 = $(filter-out $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.x86)_LIB)/%, $(TEMPLATE_VBoxR3Dll_LIBS.x86)) \
5305 $(PATH_TOOL_$(TEMPLATE_VBoxR3RuntimeDll_TOOL.win.x86)_LIB)/oldnames.lib \
5306 $(PATH_TOOL_$(TEMPLATE_VBoxR3RuntimeDll_TOOL.win.x86)_LIB)/libcmt$(VBOX_VCC_CRT_TYPE).lib \
5307 $(PATH_TOOL_$(TEMPLATE_VBoxR3RuntimeDll_TOOL.win.x86)_LIB)/libcpmt$(VBOX_VCC_CRT_TYPE).lib
5308endif
5309
5310#
5311# Template for building libraries that are linked into VBoxRT.dll
5312# and it's variations, non-pedantic variation.
5313#
5314TEMPLATE_VBoxR3RuntimeDllNonPedantic = For libraries that are linked into VBoxRT, but must be excluded from -pedantic warnings.
5315TEMPLATE_VBoxR3RuntimeDllNonPedantic_EXTENDS = VBoxR3DllNonPedantic
5316if defined(VBOX_WITH_MORE_NT4_COMPAT_BINARIES) && $(KBUILD_TARGET_ARCH) == "x86"
5317 TEMPLATE_VBoxR3RuntimeDllNonPedantic_CFLAGS = $(filter-out -MD$(VBOX_VCC_CRT_TYPE), $(TEMPLATE_VBoxR3DllNonPedantic_CFLAGS)) -MT$(VBOX_VCC_CRT_TYPE)
5318 TEMPLATE_VBoxR3RuntimeDllNonPedantic_CXXFLAGS = $(filter-out -MD$(VBOX_VCC_CRT_TYPE), $(TEMPLATE_VBoxR3DllNonPedantic_CXXFLAGS)) -MT$(VBOX_VCC_CRT_TYPE)
5319endif
5320
5321#
5322# Same as VBoxR3RuntimeDllNonPedantic, only it optimized debug builds too.
5323#
5324TEMPLATE_VBoxR3RuntimeDllNonPedanticFast = For libraries that are linked into VBoxRT, but must be excluded from -pedantic warnings, optmized debug.
5325TEMPLATE_VBoxR3RuntimeDllNonPedanticFast_EXTENDS = VBoxR3RuntimeDllNonPedantic
5326ifeq ($(KBUILD_TYPE),debug)
5327 ifeq ($(KBUILD_TARGET),win)
5328 TEMPLATE_VBoxR3RuntimeDllNonPedanticFast_CXXFLAGS = $(filter-out -O0, $(TEMPLATE_VBoxR3RuntimeDllNonPedantic_CXXFLAGS)) -O2 -Oy-
5329 TEMPLATE_VBoxR3RuntimeDllNonPedanticFast_CXXFLAGS.debug = $(filter-out -RTC%, $(TEMPLATE_VBoxR3RuntimeDllNonPedantic_CXXFLAGS.debug))
5330 TEMPLATE_VBoxR3RuntimeDllNonPedanticFast_CFLAGS = $(filter-out -O0, $(TEMPLATE_VBoxR3RuntimeDllNonPedantic_CFLAGS)) -O2 -Oy-
5331 TEMPLATE_VBoxR3RuntimeDllNonPedanticFast_CFLAGS.debug = $(filter-out -RTC%, $(TEMPLATE_VBoxR3RuntimeDllNonPedantic_CFLAGS.debug))
5332 else
5333 TEMPLATE_VBoxR3RuntimeDllNonPedanticFast_CXXFLAGS = $(TEMPLATE_VBoxR3RuntimeDllNonPedantic_CXXFLAGS) -O2 -fno-omit-frame-pointer
5334 TEMPLATE_VBoxR3RuntimeDllNonPedanticFast_CFLAGS = $(TEMPLATE_VBoxR3RuntimeDllNonPedantic_CFLAGS) -O2 -fno-omit-frame-pointer
5335 endif
5336endif
5337
5338
5339#
5340# Template for building libraries, shared libraries / modules
5341# which only depends on IPRT for crt.
5342#
5343TEMPLATE_VBoxNoCrtGccLib = VBox no-crt GCC libraries and modules, yasm/nasm.
5344TEMPLATE_VBoxNoCrtGccLib_DEFS = IN_RING3 IPRT_NO_CRT $(ARCH_BITS_DEFS)
5345TEMPLATE_VBoxNoCrtGccLib_ASDEFS = ASM_CALL64_GCC
5346TEMPLATE_VBoxNoCrtGccLib_CFLAGS = -nostdinc -fno-strict-aliasing -fno-math-errno $(VBOX_GCC_WARN) -Werror-implicit-function-declaration
5347TEMPLATE_VBoxNoCrtGccLib_CFLAGS.x86 = -m32
5348TEMPLATE_VBoxNoCrtGccLib_CFLAGS.amd64 = -m64 -mcmodel=medium -fno-common
5349TEMPLATE_VBoxNoCrtGccLib_CFLAGS.sparc32 = -m32
5350TEMPLATE_VBoxNoCrtGccLib_CFLAGS.sparc64 = -m64
5351TEMPLATE_VBoxNoCrtGccLib_CFLAGS.release = -O2 -fno-strict-aliasing
5352TEMPLATE_VBoxNoCrtGccLib_CFLAGS.profile = $(TEMPLATE_VBoxNoCrtGccLib_CFLAGS.release)
5353TEMPLATE_VBoxNoCrtGccLib_CFLAGS.kprofile = $(TEMPLATE_VBoxNoCrtGccLib_CFLAGS.release)
5354TEMPLATE_VBoxNoCrtGccLib_CFLAGS.darwin = -static
5355TEMPLATE_VBoxNoCrtGccLib_CXXFLAGS = $(filter-out -Werror-implicit-function-declaration,$(TEMPLATE_VBoxNoCrtGccLib_CFLAGS))
5356TEMPLATE_VBoxNoCrtGccLib_CXXFLAGS.$(KBUILD_TARGET) = $(TEMPLATE_VBoxNoCrtGccLib_CFLAGS.$(KBUILD_TARGET))
5357TEMPLATE_VBoxNoCrtGccLib_CXXFLAGS.$(KBUILD_TARGET_ARCH) = $(TEMPLATE_VBoxNoCrtGccLib_CFLAGS.$(KBUILD_TARGET_ARCH))
5358TEMPLATE_VBoxNoCrtGccLib_INCS = $(PATH_ROOT)/include/iprt/nocrt
5359
5360ifeq (disabled-by-mingw-w64 $(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),win.amd64)
5361 # cross compile to 64-bit ELF (linux).
5362 TEMPLATE_VBoxNoCrtGccLib_TOOL = XGCCAMD64LINUX
5363 TEMPLATE_VBoxNoCrtGccLib_ASTOOL = YASM
5364 TEMPLATE_VBoxNoCrtGccLib_ASFLAGS = -f elf64 -DASM_FORMAT_ELF -D__YASM__ -g dwarf2 -w+orphan-labels $(VBOX_YASM_Wno-segreg-in-64bit)
5365 TEMPLATE_VBoxNoCrtGccLib_LIBS = $(KBUILD_DEVTOOLS)/win.x86/x86_64-unknown-linux-gnu/20060701-r2/lib/gcc/x86_64-unknown-linux-gnu/3.4.6/libgcc.a
5366 TEMPLATE_VBoxNoCrtGccLib_LDFLAGS = -nostdlib
5367
5368else if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), win.x86 win.amd64)
5369 # Use the default GCC (MinGW) with the Microsoft linker.
5370 # (Drop all '-g' options as we're unable to strip the debug info.)
5371 TEMPLATE_VBoxNoCrtGccLib_TOOL = $(VBOX_GCC_TOOL)
5372 TEMPLATE_VBoxNoCrtGccLib_ASTOOL = $(VBOX_ASTOOL)
5373 TEMPLATE_VBoxNoCrtGccLib_ASFLAGS = $(VBOX_ASFLAGS)
5374 TEMPLATE_VBoxNoCrtGccLib_LDTOOL = $(VBOX_VCC_TOOL)
5375 TEMPLATE_VBoxNoCrtGccLib_LDFLAGS = -Incremental:NO -MapInfo:Exports -NoD -Ignore:4197
5376 TEMPLATE_VBoxNoCrtGccLib_LIBS = $(VBOX_GCC_LIBGCC)
5377 TEMPLATE_VBoxNoCrtGccLib_CFLAGS := $(filter-out -g,$(TEMPLATE_VBoxNoCrtGccLib_CFLAGS)) -s
5378 TEMPLATE_VBoxNoCrtGccLib_CXXFLAGS := $(filter-out -g,$(TEMPLATE_VBoxNoCrtGccLib_CXXFLAGS)) -s
5379
5380else
5381 # Use the default GCC.
5382 # The use of --exclude-libs ALL is to avoid confusing the linux ld.so.
5383 TEMPLATE_VBoxNoCrtGccLib_TOOL = $(VBOX_GCC_TOOL)
5384 TEMPLATE_VBoxNoCrtGccLib_ASTOOL = $(VBOX_ASTOOL)
5385 TEMPLATE_VBoxNoCrtGccLib_ASFLAGS = $(VBOX_ASFLAGS)
5386 TEMPLATE_VBoxNoCrtGccLib_CFLAGS += $(VBOX_GCC_fno-stack-protector)
5387 TEMPLATE_VBoxNoCrtGccLib_CXXFLAGS += $(VBOX_GCC_fno-stack-protector)
5388 ifeq ($(KBUILD_TARGET_ARCH),amd64)
5389 # in 64-bit mode we'll build a sys-module (VBoxREM2).
5390 if1of ($(KBUILD_TARGET), darwin solaris)
5391 TEMPLATE_VBoxNoCrtGccLib_LDFLAGS.solaris= -64 -r
5392 else
5393 TEMPLATE_VBoxNoCrtGccLib_LDFLAGS = -nostdlib
5394 endif
5395 else # x86:
5396 TEMPLATE_VBoxNoCrtGccLib_LDFLAGS = -nostdlib
5397 ifn1of ($(KBUILD_TARGET), os2 darwin solaris)
5398 TEMPLATE_VBoxNoCrtGccLib_LDFLAGS += $(VBOX_GCC_NO_UNDEFINED)
5399 endif
5400 endif # x86
5401 TEMPLATE_VBoxNoCrtGccLib_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_LDFLAGS)
5402 TEMPLATE_VBoxNoCrtGccLib_LIBS = # FIXME - has unwind mess.
5403endif
5404
5405
5406#
5407# Same as VBoxNoCrtGccLib only it uses GAS as the assembler instead of yasm/nasm.
5408#
5409TEMPLATE_VBOXNOCRTGAS = VBox no-crt GCC libraries and modules, gas.
5410TEMPLATE_VBOXNOCRTGAS_EXTENDS = VBoxNoCrtGccLib
5411TEMPLATE_VBOXNOCRTGAS_ASTOOL = $(TEMPLATE_VBoxNoCrtGccLib_TOOL)
5412ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),win.x86)
5413 TEMPLATE_VBOXNOCRTGAS_ASFLAGS = -s
5414else
5415 TEMPLATE_VBOXNOCRTGAS_ASFLAGS = -g
5416endif
5417TEMPLATE_VBOXNOCRTGAS_ASFLAGS.x86 = -m32
5418TEMPLATE_VBOXNOCRTGAS_ASFLAGS.amd64 = -m64
5419
5420
5421#
5422# Template for building executables that are part of the VBox Main component
5423# (COM/XPCOM interface to VirtualBox).
5424#
5425TEMPLATE_VBOXMAINEXE = VBox Main Executable
5426TEMPLATE_VBOXMAINEXE_ASTOOL = $(VBOX_ASTOOL)
5427TEMPLATE_VBOXMAINEXE_ASFLAGS = $(VBOX_ASFLAGS)
5428TEMPLATE_VBOXMAINEXE_DEFS = IN_RING3 UNICODE NDEBUG=1
5429TEMPLATE_VBOXMAINEXE_DEFS.win = _UNICODE
5430TEMPLATE_VBOXMAINEXE_RCDEFS = $(TEMPLATE_VBOXR3EXE_RCDEFS)
5431TEMPLATE_VBOXMAINEXE_LIBS.kprofile = $(LIB_KPROFILE)
5432TEMPLATE_VBOXMAINEXE_USES = dtrace
5433if defined(VBOX_WITH_DTRACE_R3_MAIN) && defined(VBOX_WITH_NATIVE_DTRACE)
5434 TEMPLATE_VBOXMAINEXE_DTRACETOOL = DTraceAndVBoxTpG
5435 TEMPLATE_VBOXMAINEXE_DTRACE_OBJ_FLAGS = -C
5436 TEMPLATE_VBOXMAINEXE_DTRACE_HDR_FLAGS = -C
5437 TEMPLATE_VBOXMAINEXE_DEFS += VBOX_WITH_DTRACE VBOX_WITH_DTRACE_R3 VBOX_WITH_DTRACE_R3_MAIN VBOX_WITH_NATIVE_DTRACE
5438else
5439 TEMPLATE_VBOXMAINEXE_DTRACE_HDR_FLAGS = --ring-3-context
5440 TEMPLATE_VBOXMAINEXE_DTRACE_OBJ_FLAGS = --ring-3-context --pic --probe-fn-imported --probe-fn-name "SUPTracerFireProbe"
5441 if defined(VBOX_WITH_DTRACE_R3_MAIN)
5442 TEMPLATE_VBOXMAINEXE_DTRACETOOL = VBoxTpG
5443 TEMPLATE_VBOXMAINEXE_DEFS += VBOX_WITH_DTRACE VBOX_WITH_DTRACE_R3 VBOX_WITH_DTRACE_R3_MAIN
5444 else
5445 TEMPLATE_VBOXMAINEXE_DTRACETOOL = VBoxTpG-Disabled
5446 endif
5447endif
5448
5449ifeq ($(KBUILD_TARGET),win)
5450 TEMPLATE_VBOXMAINEXE_SDKS = ReorderCompilerIncs $(VBOX_WINPSDK) $(VBOX_WINDDK)
5451 #TEMPLATE_VBOXMAINEXE_TOOL = $(VBOX_VCC_TOOL)
5452 TEMPLATE_VBOXMAINEXE_TOOL.win.x86 = $(VBOX_VCC_TOOL_STEM)X86
5453 TEMPLATE_VBOXMAINEXE_TOOL.win.amd64 = $(VBOX_VCC_TOOL_STEM)AMD64
5454 TEMPLATE_VBOXMAINEXE_CXXFLAGS = -Zi -Zl -GR -EHsc -GF -MD$(VBOX_VCC_CRT_TYPE) -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
5455 # -wd4625: 'DisplaySourceBitmap' : copy constructor could not be generated because a base class copy constructor is inaccessible
5456 # -wd4626: 'DisplaySourceBitmap' : assignment operator could not be generated because a base class assignment operator is inaccessible
5457 # The two above can be cured by adding private: DECLARE_CLS_COPY_CTOR_ASSIGN_NOOP(xxxx); but too much work.
5458 # -wd4355: 'this' : used in base member initializer list (e.g. VirtualBoxBase.cpp)
5459 TEMPLATE_VBOXMAINEXE_CXXFLAGS += $(VBOX_VCC_WARN_ALL) -wd4625 -wd4626 -wd4355 $(VBOX_VCC_WERR)
5460 TEMPLATE_VBOXMAINEXE_CXXFLAGS.debug = -RTCsu
5461 TEMPLATE_VBOXMAINEXE_CXXFLAGS.dbgopt = $(NO_SUCH_VARIABLE)
5462 TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile = -Gh -GH
5463 TEMPLATE_VBOXMAINEXE_CFLAGS = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS)
5464 TEMPLATE_VBOXMAINEXE_CFLAGS.debug = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.debug)
5465 TEMPLATE_VBOXMAINEXE_CFLAGS.dbgopt = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.dbgopt)
5466 TEMPLATE_VBOXMAINEXE_CFLAGS.kprofile = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile)
5467 TEMPLATE_VBOXMAINEXE_LDFLAGS = -Ignore:4197 \
5468 /NOD /INCREMENTAL:NO /MAPINFO:EXPORTS /LargeAddressAware /DynamicBase /NxCompat /Release /Debug /Opt:Ref /Opt:Icf \
5469 /Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
5470 /STUB:$(PATH_ROOT)/src/VBox/HostDrivers/Support/win/winstub.com \
5471 /DISALLOWLIB:libc.lib \
5472 /DISALLOWLIB:libcd.lib \
5473 /DISALLOWLIB:libcmt.lib \
5474 /DISALLOWLIB:libcmtd.lib \
5475 /DISALLOWLIB:msvcrt$(VBOX_VCC_CRT_TYPE_N).lib \
5476 /DISALLOWLIB:msvcprt$(VBOX_VCC_CRT_TYPE_N).lib
5477 if defined(VBOX_SIGNING_MODE) && defined(VBOX_WITH_HARDENING)
5478 TEMPLATE_VBOXMAINEXE_LDFLAGS += -IntegrityCheck
5479 endif
5480 ifdef VBOX_WITH_DTRACE_R3_MAIN
5481 TEMPLATE_VBOXMAINEXE_LDFLAGS += -Merge:VTGPrLc.Data=VTGPrLc.Begin -Merge:VTGPrLc.End=VTGPrLc.Begin -Merge:VTGPrLc.Begin=VTGObj
5482 endif
5483 TEMPLATE_VBOXMAINEXE_LIBS = \
5484 $(LIB_RUNTIME)
5485 TEMPLATE_VBOXMAINEXE_LIBS.x86 = \
5486 $(PATH_TOOL_$(TEMPLATE_VBOXMAINEXE_TOOL.win.x86)_LIB)/msvcrt$(VBOX_VCC_CRT_TYPE).lib \
5487 $(PATH_TOOL_$(TEMPLATE_VBOXMAINEXE_TOOL.win.x86)_LIB)/msvcprt$(VBOX_VCC_CRT_TYPE).lib \
5488 $(PATH_TOOL_$(TEMPLATE_VBOXMAINEXE_TOOL.win.x86)_LIB)/oldnames.lib
5489 TEMPLATE_VBOXMAINEXE_LIBS.amd64 = \
5490 $(PATH_TOOL_$(TEMPLATE_VBOXMAINEXE_TOOL.win.amd64)_LIB)/msvcrt$(VBOX_VCC_CRT_TYPE).lib \
5491 $(PATH_TOOL_$(TEMPLATE_VBOXMAINEXE_TOOL.win.amd64)_LIB)/msvcprt$(VBOX_VCC_CRT_TYPE).lib \
5492 $(PATH_TOOL_$(TEMPLATE_VBOXMAINEXE_TOOL.win.amd64)_LIB)/oldnames.lib
5493 TEMPLATE_VBOXMAINEXE_POST_CMDS = $(VBOX_SIGN_IMAGE_CMDS)
5494
5495else # the GCC guys:
5496
5497TEMPLATE_VBOXMAINEXE_TOOL = $(VBOX_GCC_TOOL)
5498TEMPLATE_VBOXMAINEXE_CXXFLAGS = -g $(VBOX_GCC_pipe) \
5499 $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC_Wno-variadic-macros) -Wshadow \
5500 -fshort-wchar -fpermissive -fexceptions -frtti $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing \
5501 $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_std) $(VBOX_GCC_IPRT_FMT_CHECK)
5502 ifdef VBOX_WITH_NO_GCC_WARNING_POLICY
5503 TEMPLATE_VBOXMAINEXE_CXXFLAGS += $(VBOX_GCC_WERR)
5504 endif
5505 ifdef VBOX_WITH_DTRACE_R3_MAIN
5506 TEMPLATE_VBOXMAINEXE_CXXFLAGS := $(filter-out -pedantic,$(TEMPLATE_VBOXMAINEXE_CXXFLAGS)) -fdollars-in-identifiers # annoying gcc option precedence.
5507 endif
5508TEMPLATE_VBOXMAINEXE_CXXFLAGS.x86 = -m32
5509TEMPLATE_VBOXMAINEXE_CXXFLAGS.amd64 = -m64
5510TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile = -finstrument-functions
5511TEMPLATE_VBOXMAINEXE_CXXFLAGS.debug = $(VBOX_GCC_SANITIZER_FLAGS)
5512TEMPLATE_VBOXMAINEXE_CFLAGS = -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC_Wno-variadic-macros) \
5513 $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_IPRT_FMT_CHECK)
5514 ifdef VBOX_WITH_NO_GCC_WARNING_POLICY
5515 TEMPLATE_VBOXMAINEXE_CFLAGS += $(VBOX_GCC_WERR)
5516 endif
5517TEMPLATE_VBOXMAINEXE_CFLAGS.x86 = -m32
5518TEMPLATE_VBOXMAINEXE_CFLAGS.amd64 = -m64
5519TEMPLATE_VBOXMAINEXE_CFLAGS.kprofile = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile)
5520TEMPLATE_VBOXMAINEXE_CFLAGS.debug = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.debug)
5521TEMPLATE_VBOXMAINEXE_OBJCFLAGS = $(TEMPLATE_VBOXMAINEXE_CFLAGS)
5522TEMPLATE_VBOXMAINEXE_OBJCFLAGS.x86 = $(TEMPLATE_VBOXMAINEXE_CFLAGS.x86)
5523TEMPLATE_VBOXMAINEXE_OBJCFLAGS.amd64 = $(TEMPLATE_VBOXMAINEXE_CFLAGS.amd64)
5524TEMPLATE_VBOXMAINEXE_OBJCFLAGS.kprofile = $(TEMPLATE_VBOXMAINEXE_CFLAGS.kprofile)
5525TEMPLATE_VBOXMAINEXE_OBJCXXFLAGS = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS)
5526TEMPLATE_VBOXMAINEXE_OBJCXXFLAGS.x86 = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.x86)
5527TEMPLATE_VBOXMAINEXE_OBJCXXFLAGS.amd64 = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.amd64)
5528TEMPLATE_VBOXMAINEXE_OBJCXXFLAGS.kprofile= $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile)
5529TEMPLATE_VBOXMAINEXE_LDFLAGS.x86 = -m32
5530TEMPLATE_VBOXMAINEXE_LDFLAGS.amd64 = -m64
5531TEMPLATE_VBOXMAINEXE_LDFLAGS.debug = $(VBOX_GCC_SANITIZER_FLAGS)
5532 ifeq ($(KBUILD_TARGET),linux)
5533TEMPLATE_VBOXMAINEXE_LIBS = pthread m rt $(LIB_RUNTIME) dl
5534TEMPLATE_VBOXMAINEXE_LDFLAGS.linux = -Wl,-z,noexecstack,-z,relro $(VBOX_LD_as_needed)
5535 else ifeq ($(KBUILD_TARGET),os2)
5536TEMPLATE_VBOXMAINEXE_TOOL = GXX3OMF
5537TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME)
5538 else ifeq ($(KBUILD_TARGET),darwin)
5539TEMPLATE_VBOXMAINEXE_TOOL = $(VBOX_GCC_TOOL)
5540TEMPLATE_VBOXMAINEXE_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS)
5541TEMPLATE_VBOXMAINEXE_CFLAGS += $(VBOX_DARWIN_DEF_SDK_CFLAGS)
5542TEMPLATE_VBOXMAINEXE_CXXFLAGS += $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
5543TEMPLATE_VBOXMAINEXE_OBJCFLAGS += $(VBOX_DARWIN_DEF_SDK_OBJCFLAGS)
5544TEMPLATE_VBOXMAINEXE_OBJCXXFLAGS += $(VBOX_DARWIN_DEF_SDK_OBJCXXFLAGS)
5545TEMPLATE_VBOXMAINEXE_LDFLAGS.darwin += -bind_at_load
5546TEMPLATE_VBOXMAINEXE_LDFLAGS += $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -framework Carbon
5547TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME)
5548 else ifeq ($(KBUILD_TARGET),haiku)
5549TEMPLATE_VBOXMAINEXE_TOOL = GXX3
5550TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME) network stdc++ supc++
5551 else if1of ($(KBUILD_TARGET), freebsd openbsd)
5552TEMPLATE_VBOXMAINEXE_TOOL = GXX3
5553TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME)
5554TEMPLATE_VBOXMAINEXE_INCS += \
5555 /usr/include \
5556 /usr/X11R6/include \
5557 /usr/local/include
5558TEMPLATE_VBOXMAINEXE_LIBPATH += \
5559 /usr/lib \
5560 /usr/X11R6/lib \
5561 /usr/local/lib
5562 else ifeq ($(KBUILD_TARGET),netbsd)
5563TEMPLATE_VBOXMAINEXE_TOOL = GXX3
5564TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME)
5565TEMPLATE_VBOXMAINEXE_INCS += \
5566 /usr/include \
5567 /usr/X11R7/include
5568TEMPLATE_VBOXMAINEXE_LIBPATH += \
5569 /usr/lib \
5570 /usr/X11R7/lib
5571else ifeq ($(KBUILD_TARGET),solaris)
5572TEMPLATE_VBOXMAINEXE_TOOL = GXX3PLAIN
5573TEMPLATE_VBOXMAINEXE_DEFS += _REENTRANT
5574TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME) rt thread
5575 else
5576$(warning Warning: VBOX Build: Target $(KBUILD_TARGET) is not officially supported!)
5577TEMPLATE_VBOXMAINEXE_LIBS =
5578 endif
5579TEMPLATE_VBOXMAINEXE_LDFLAGS.solaris = -Wl,-z,ignore # Same as VBOX_LD_as_needed.
5580 ifdef VBOX_WITH_RUNPATH
5581TEMPLATE_VBOXMAINEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)'
5582 else ifdef VBOX_WITH_RELATIVE_RUNPATH
5583TEMPLATE_VBOXMAINEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)'
5584 endif
5585 ifdef VBOX_WITH_ORIGIN
5586TEMPLATE_VBOXMAINEXE_LDFLAGS.linux += $(VBOX_GCC_ORIGIN_OPT)
5587 endif
5588
5589endif # !win
5590
5591# Add COM/XPCOM stuff
5592TEMPLATE_VBOXMAINEXE_LIBS += \
5593 $(PATH_STAGE_LIB)/VBoxCOM$(VBOX_SUFF_LIB)
5594ifdef VBOX_WITH_XPCOM
5595 ## @todo may be worth creating the VBOX_XPCOM SDK def
5596 TEMPLATE_VBOXMAINEXE_DEFS += VBOX_WITH_XPCOM
5597 ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
5598 TEMPLATE_VBOXMAINEXE_DEFS += VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
5599 endif
5600 TEMPLATE_VBOXMAINEXE_INCS += \
5601 $(VBOX_XPCOM_INCS)
5602 TEMPLATE_VBOXMAINEXE_LIBS += \
5603 $(LIB_XPCOM)
5604 TEMPLATE_VBOXMAINEXE_INTERMEDIATES += \
5605 $(VBOX_PATH_SDK)/bindings/xpcom/include/VirtualBox_XPCOM.h
5606
5607else # COM
5608 TEMPLATE_VBOXMAINEXE_INCS += \
5609 $(VBOX_PATH_SDK)/bindings/mscom/include
5610 TEMPLATE_VBOXMAINEXE_INTERMEDIATES += \
5611 $(VBOX_PATH_SDK)/bindings/mscom/include/VirtualBox.h
5612endif # COM
5613
5614#
5615# Template for building the Main DLL modules (such as in-process COM/XPCOM
5616# components for Main).
5617#
5618# This differs from VBOXMAINEXE only in PIC handling and similar DLL stuff.
5619#
5620TEMPLATE_VBOXMAINDLL = VBox Main Component (shared library)
5621TEMPLATE_VBOXMAINDLL_EXTENDS = VBOXMAINEXE
5622ifn1of ($(KBUILD_TARGET), darwin haiku os2 win)
5623 TEMPLATE_VBOXMAINDLL_DEFS = PIC $(TEMPLATE_VBOXMAINEXE_DEFS)
5624 TEMPLATE_VBOXMAINDLL_CFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_CFLAGS)
5625 TEMPLATE_VBOXMAINDLL_CXXFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_CXXFLAGS)
5626 TEMPLATE_VBOXMAINDLL_LDFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_LDFLAGS)
5627endif
5628TEMPLATE_VBOXMAINDLL_LDFLAGS.darwin = $(filter-out -bind_at_load,$(TEMPLATE_VBOXMAINEXE_LDFLAGS.darwin)) \
5629 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
5630 -compatibility_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
5631
5632#
5633# Template identical to VBOXMAINDLL except for where the stuff is
5634# installed when using XPCOM (components/).
5635#
5636# Note! In the hardened build this gets a bit ugly since $ORIGIN/..
5637# doesn't work. So, we keep the $ORIGIN from VBOXMAINEXE and let
5638# the installers do the necessary .so symlinking.
5639#
5640# (No difference when building against COM on Windows.)
5641#
5642TEMPLATE_VBOXMAINCOMP = VBox Main COM/XPCOM Component (shared library)
5643TEMPLATE_VBOXMAINCOMP_EXTENDS = VBOXMAINEXE
5644ifn1of ($(KBUILD_TARGET), win)
5645 TEMPLATE_VBOXMAINCOMP_INST = $(INST_BIN)components/
5646endif
5647ifneq ($(KBUILD_TARGET),win)
5648 ifeq ($(filter-out solaris.x86 %.amd64 %.sparc32 %.sparc64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),) ## TODO: cleanup!
5649 TEMPLATE_VBOXMAINCOMP_DEFS = PIC $(TEMPLATE_VBOXMAINEXE_DEFS)
5650 TEMPLATE_VBOXMAINCOMP_CFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_CFLAGS)
5651 TEMPLATE_VBOXMAINCOMP_CXXFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_CXXFLAGS)
5652 if defined(VBOX_WITH_RELATIVE_RUNPATH) && !defined(VBOX_WITH_HARDENING)
5653 TEMPLATE_VBOXMAINCOMP_LDFLAGS = -fPIC $(filter-out '$(VBOX_GCC_RPATH_OPT)%',$(TEMPLATE_VBOXMAINEXE_LDFLAGS)) '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/..'
5654 else
5655 TEMPLATE_VBOXMAINCOMP_LDFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_LDFLAGS)
5656 endif
5657 else ifndef VBOX_WITH_HARDENING
5658 ifdef VBOX_WITH_RELATIVE_RUNPATH
5659 TEMPLATE_VBOXMAINCOMP_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)%',$(TEMPLATE_VBOXMAINEXE_LDFLAGS)) '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/..'
5660 endif
5661 endif
5662endif
5663TEMPLATE_VBOXMAINCOMP_LDFLAGS.darwin = $(filter-out -bind_at_load,$(TEMPLATE_VBOXMAINEXE_LDFLAGS.darwin)) \
5664 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
5665 -compatibility_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
5666
5667TEMPLATE_VBoxMainComp-x86 = 32-bit VBox Main Component (shared library)
5668TEMPLATE_VBoxMainComp-x86_EXTENDS = VBOXMAINCOMP
5669TEMPLATE_VBoxMainComp-x86_BLD_TRG_ARCH = x86
5670TEMPLATE_VBoxMainComp-x86_INST.win = $(INST_DLL)x86/
5671TEMPLATE_VBoxMainComp-x86_DEFS = $(filter-out HC_ARCH_BITS%,$(TEMPLATE_VBOXMAINCOMP_DEFS)) HC_ARCH_BIT=32 ARCH_BITS=32 \
5672 VBOX_IN_32_ON_64_MAIN_API
5673TEMPLATE_VBoxMainComp-x86_LIBS = \
5674 $(subst $(PATH_STAGE_LIB)/VBoxCOM$(VBOX_SUFF_LIB),$(PATH_STAGE_LIB)/VBoxCOM-x86$(VBOX_SUFF_LIB),\
5675 $(subst $(LIB_RUNTIME),$(VBOX_LIB_RUNTIME_X86),\
5676 $(subst $(LIB_XPCOM),$(VBOX_LIB_XPCOM_X86),\
5677 $(TEMPLATE_VBOXMAINCOMP_LIBS))))
5678ifeq ($(KBUILD_TARGET),solaris)
5679 ifdef VBOX_WITH_RUNPATH
5680 TEMPLATE_VBoxMainComp-x86_LDFLAGS = \
5681 $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)',$(TEMPLATE_VBOXMAINCOMP_LDFLAGS)) \
5682 '$(VBOX_GCC_RPATH_OPT)$(VBOX_PATH_APP_PRIVATE)' \
5683 '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)'
5684 endif
5685endif
5686
5687
5688#
5689# Template for building the Main static libraries.
5690#
5691# This differs from VBOXMAINDLL only that it zeroes out the _LIBS definition.
5692#
5693TEMPLATE_VBoxMainLib = VBox Main Component (static library)
5694TEMPLATE_VBoxMainLib_EXTENDS = VBOXMAINDLL
5695TEMPLATE_VBoxMainLib_LIBS =
5696
5697TEMPLATE_VBoxMainLib-x86 = 32-bit VBox Main Component (static library)
5698TEMPLATE_VBoxMainLib-x86_EXTENDS = VBoxMainLib
5699TEMPLATE_VBoxMainLib-x86_BLD_TRG_ARCH = x86
5700TEMPLATE_VBoxMainLib-x86_DEFS = $(filter-out HC_ARCH_BITS%,$(TEMPLATE_VBoxMainLib_DEFS)) HC_ARCH_BIT=32 ARCH_BITS=32 \
5701 VBOX_IN_32_ON_64_MAIN_API
5702
5703#
5704# Main unit testing, for compiling API implementation files into a testcase.
5705# This is the VBOXMAINEXE template only with a different install dir.
5706#
5707TEMPLATE_VBOXMAINTSTEXE = VBox Main Testcase Exe
5708TEMPLATE_VBOXMAINTSTEXE_EXTENDS = VBOXMAINEXE
5709TEMPLATE_VBOXMAINTSTEXE_INST = $(INST_TESTCASE)
5710ifdef VBOX_WITH_RUNPATH
5711 TEMPLATE_VBOXMAINTSTEXE_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' $(TEMPLATE_VBOXMAINEXE_LDFLAGS)
5712else ifdef VBOX_WITH_RELATIVE_RUNPATH
5713 TEMPLATE_VBOXMAINTSTEXE_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/..' $(TEMPLATE_VBOXMAINEXE_LDFLAGS)
5714endif
5715if "$(KBUILD_TARGET)" == "win" && defined(VBOX_SIGNING_MODE)
5716 TEMPLATE_VBOXMAINTSTEXE_POST_CMDS =
5717endif
5718
5719#
5720# Template for building executables that use the VBox Main component.
5721#
5722TEMPLATE_VBOXMAINCLIENTEXE = VBox Main Client (executable)
5723TEMPLATE_VBOXMAINCLIENTEXE_EXTENDS = VBOXMAINEXE
5724ifeq ($(KBUILD_TARGET),win)
5725 TEMPLATE_VBOXMAINCLIENTEXE_DEPS = $(VBOX_PATH_SDK)/bindings/mscom/include/VirtualBox.h
5726 TEMPLATE_VBOXMAINCLIENTEXE_LIBS.win = $(TEMPLATE_VBOXMAINEXE_LIBS.win) \
5727 $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/User32.Lib \
5728 $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/Shell32.Lib \
5729 $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/ShLwApi.Lib \
5730 $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/Ole32.Lib \
5731 $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/OleAut32.Lib \
5732 $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/Uuid.Lib
5733else
5734 TEMPLATE_VBOXMAINCLIENTEXE_DEPS = $(VBOX_PATH_SDK)/bindings/xpcom/include/VirtualBox_XPCOM.h
5735 TEMPLATE_VBOXMAINCLIENTEXE_DEFS = $(TEMPLATE_VBOXMAINEXE_DEFS) \
5736 NDEBUG TRIMMED
5737 TEMPLATE_VBOXMAINCLIENTEXE_CXXFLAGS.linux = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.linux) \
5738 -pthread
5739endif
5740
5741#
5742# Template for building shared libraries / DLLs that use the VBox Main component.
5743#
5744# This differs from VBOXMAINCLIENTEXE only in PIC handling and similar DLL stuff.
5745#
5746TEMPLATE_VBOXMAINCLIENTDLL = VBox MAIN Client (shared library)
5747TEMPLATE_VBOXMAINCLIENTDLL_EXTENDS = VBOXMAINCLIENTEXE
5748ifn1of ($(KBUILD_TARGET), darwin os2 win)
5749 TEMPLATE_VBOXMAINCLIENTDLL_DEFS = PIC $(TEMPLATE_VBOXMAINCLIENTEXE_DEFS)
5750 TEMPLATE_VBOXMAINCLIENTDLL_CFLAGS = -fPIC $(TEMPLATE_VBOXMAINCLIENTEXE_CFLAGS)
5751 TEMPLATE_VBOXMAINCLIENTDLL_CXXFLAGS = -fPIC $(TEMPLATE_VBOXMAINCLIENTEXE_CXXFLAGS)
5752 TEMPLATE_VBOXMAINCLIENTDLL_LDFLAGS = -fPIC $(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS)
5753endif
5754TEMPLATE_VBOXMAINCLIENTDLL_LDFLAGS.darwin = $(filter-out -bind_at_load,$(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS.darwin))
5755
5756#
5757# Template for building testcases which are API clients.
5758#
5759TEMPLATE_VBOXMAINCLIENTTSTEXE = VBox Main Client Testcase (executable)
5760TEMPLATE_VBOXMAINCLIENTTSTEXE_EXTENDS = VBOXMAINCLIENTEXE
5761TEMPLATE_VBOXMAINCLIENTTSTEXE_INST = $(INST_TESTCASE)
5762ifdef VBOX_WITH_RUNPATH
5763 TEMPLATE_VBOXMAINCLIENTTSTEXE_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' $(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS)
5764else ifdef VBOX_WITH_RELATIVE_RUNPATH
5765 TEMPLATE_VBOXMAINCLIENTTSTEXE_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/..' $(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS)
5766endif
5767if "$(KBUILD_TARGET)" == "win" && defined(VBOX_SIGNING_MODE)
5768 TEMPLATE_VBOXMAINCLIENTTSTEXE_POST_CMDS =
5769endif
5770
5771
5772
5773#
5774# Templates used for building the extension packs.
5775#
5776ifdef VBOX_WITH_EXTPACK
5777 # Base templates (native or portable).
5778 TEMPLATE_VBoxR3ExtPack = For the ring-3 context extension pack modules.
5779 if 1 # Native for now.
5780 TEMPLATE_VBoxR3ExtPack_EXTENDS = VBOXR3DLLNOXCPT
5781 TEMPLATE_VBoxR3ExtPack_DEFS = $(TEMPLATE_VBOXR3DLLNOXCPT_DEFS) VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R3
5782 else
5783 TEMPLATE_VBoxR3ExtPack_EXTENDS = VBoxNoCrtGccLib
5784 TEMPLATE_VBoxR3ExtPack_DEFS = $(TEMPLATE_VBoxNoCrtGccLib_DEFS) VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R3 IPRT_NO_CRT IN_RING3
5785 TEMPLATE_VBoxR3ExtPack_INCS = $(PATH_ROOT)/include/iprt/nocrt $(TEMPLATE_VBOXR3DLLNOXCPT_INCS)
5786 endif
5787 ifneq ($(KBUILD_TARGET),win)
5788 TEMPLATE_VBoxR3ExtPack_CXXFLAGS = $(TEMPLATE_VBOXR3DLLNOXCPT_CXXFLAGS) -fno-rtti
5789 endif
5790 TEMPLATE_VBoxR3ExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
5791 ifeq ($(KBUILD_TARGET),linux)
5792 TEMPLATE_VBoxR3ExtPack_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)', $(TEMPLATE_VBOXR3DLLNOXCPT_LDFLAGS))
5793 else
5794 if !defined(VBOX_WITH_RUNPATH) && defined(VBOX_WITH_RELATIVE_RUNPATH)
5795 TEMPLATE_VBoxR3ExtPack_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/../../..' $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)', $(TEMPLATE_VBOXR3DLLNOXCPT_LDFLAGS))
5796 endif
5797 endif
5798 ifdef VBOX_ONLY_EXTPACKS_USE_IMPLIBS
5799 if1of ($(KBUILD_TARGET), win os2)
5800 TEMPLATE_VBoxR3ExtPack_LIBS = \
5801 $(TEMPLATE_LIBS_VBOXR3) \
5802 $(if-expr "$(VBOX_LIB_VMM_LAZY)" == "$(LIB_VMM)", $(PATH_STAGE_LIB)/VMMR3Imp$(VBOX_SUFF_LIB), $(VBOX_LIB_VMM_LAZY)) \
5803 $(PATH_STAGE_LIB)/VBoxRTImp$(VBOX_SUFF_LIB)
5804 else
5805 TEMPLATE_VBoxR3ExtPack_LIBS = \
5806 $(TEMPLATE_LIBS_VBOXR3) \
5807 $(if-expr "$(VBOX_LIB_VMM_LAZY)" == "$(LIB_VMM)", $(PATH_STAGE_LIB)/VMMR3Imp$(VBOX_SUFF_DLL), $(VBOX_LIB_VMM_LAZY)) \
5808 $(PATH_STAGE_LIB)/VBoxRTImp$(VBOX_SUFF_DLL)
5809 endif
5810 else
5811 TEMPLATE_VBoxR3ExtPack_LIBS = \
5812 $(TEMPLATE_LIBS_VBOXR3) \
5813 $(LIB_RUNTIME) \
5814 $(VBOX_LIB_VMM_LAZY)
5815 endif
5816
5817 TEMPLATE_VBoxR0ExtPack = For the ring-0 context extension pack modules.
5818 TEMPLATE_VBoxR0ExtPack_EXTENDS = VBoxR0
5819 TEMPLATE_VBoxR0ExtPack_EXTENDS_BY = appending
5820 TEMPLATE_VBoxR0ExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
5821 TEMPLATE_VBoxR0ExtPack_DEFS = VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R0
5822 if1of ($(VBOX_LDR_FMT), pe lx)
5823 TEMPLATE_VBoxR0ExtPack_LIBS = \
5824 $(PATH_STAGE_LIB)/VMMR0Imp$(VBOX_SUFF_LIB) \
5825 $(PATH_STAGE_LIB)/SUPR0$(VBOX_SUFF_LIB)
5826 endif
5827
5828 TEMPLATE_VBoxRcExtPack = For the raw-mode context extension pack modules.
5829 TEMPLATE_VBoxRcExtPack_EXTENDS = VBoxRc
5830 TEMPLATE_VBoxRcExtPack_EXTENDS_BY = appending
5831 TEMPLATE_VBoxRcExtPack_SYSSUFF = .rc
5832 TEMPLATE_VBoxRcExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
5833 TEMPLATE_VBoxRcExtPack_DEFS = VBOX_IN_EXTPACK VBOX_IN_EXTPACK_RC
5834 if1of ($(VBOX_LDR_FMT32), pe lx)
5835 TEMPLATE_VBoxRcExtPack_LIBS = \
5836 $(PATH_STAGE_LIB)/VMMRCBuiltin$(VBOX_SUFF_LIB) \
5837 $(PATH_STAGE_LIB)/VMMRCImp$(VBOX_SUFF_LIB)
5838 endif
5839
5840 TEMPLATE_VBoxInsExtPack = For the install targets of an extension pack.
5841 TEMPLATE_VBoxInsExtPack_MODE = 0644
5842 TEMPLATE_VBoxInsExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
5843
5844 # For each individual extension pack
5845 ifdef VBOX_WITH_EXTPACK_PUEL
5846 TEMPLATE_VBoxR3ExtPackPuel = For the ring-3 context modules in the PUEL extension pack.
5847 TEMPLATE_VBoxR3ExtPackPuel_EXTENDS = VBoxR3ExtPack
5848 TEMPLATE_VBoxR3ExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/
5849 TEMPLATE_VBoxR3ExtPackPuel_DEFS = $(TEMPLATE_VBoxR3ExtPack_DEFS) VBOX_IN_PUEL_EXTPACK
5850
5851 TEMPLATE_VBoxR3ExtPackPuelWithOpenSsl = For the ring-3 context modules in the PUEL extension pack using ExtPack OpenSSL.
5852 TEMPLATE_VBoxR3ExtPackPuelWithOpenSsl_EXTENDS = VBoxR3ExtPackPuel
5853 TEMPLATE_VBoxR3ExtPackPuelWithOpenSsl_INCS = \
5854 $(TEMPLATE_VBoxR3ExtPack_INCS) \
5855 $(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)
5856 TEMPLATE_VBoxR3ExtPackPuelWithOpenSsl_LIBS = \
5857 $(PATH_STAGE_LIB)/VBoxExtPack-libssl$(VBOX_SUFF_LIB) \
5858 $(PATH_STAGE_LIB)/VBoxExtPack-libcrypto$(VBOX_SUFF_LIB) \
5859 $(TEMPLATE_VBoxR3ExtPack_LIBS) # Must come after the two libraries or we'll pick up SSL from VBoxRT!
5860
5861 TEMPLATE_VBoxR0ExtPackPuel = For the ring-0 context modules in the PUEL extension pack.
5862 TEMPLATE_VBoxR0ExtPackPuel_EXTENDS = VBoxR0ExtPack
5863 TEMPLATE_VBoxR0ExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/
5864 TEMPLATE_VBoxR0ExtPackPuel_DEFS = $(TEMPLATE_VBoxR0ExtPack_DEFS) VBOX_IN_PUEL_EXTPACK
5865
5866 TEMPLATE_VBoxRcExtPackPuel = For the raw-mode context modules in the PUEL extension pack.
5867 TEMPLATE_VBoxRcExtPackPuel_EXTENDS = VBoxRcExtPack
5868 TEMPLATE_VBoxRcExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/
5869 TEMPLATE_VBoxRcExtPackPuel_DEFS = $(TEMPLATE_VBoxRcExtPack_DEFS) VBOX_IN_PUEL_EXTPACK
5870
5871 TEMPLATE_VBoxInsExtPackPuel = For the install targets of an extension pack.
5872 TEMPLATE_VBoxInsExtPackPuel_EXTENDS = VBoxR0ExtPack
5873 TEMPLATE_VBoxInsExtPackPuel_INST = $(INST_EXTPACK_PUEL)
5874 endif
5875
5876endif # VBOX_WITH_EXTPACK
5877
5878
5879#
5880# Qt
5881# Qt
5882# Qt
5883#
5884ifdef VBOX_WITH_QTGUI
5885
5886 # Guess VBOX_WITH_ORACLE_QT
5887 ifndef VBOX_WITH_ORACLE_QT
5888 ifndef VBOX_OSE
5889 if1of ($(KBUILD_TARGET), darwin solaris win)
5890 VBOX_WITH_ORACLE_QT := 1
5891 endif
5892 endif
5893 endif
5894
5895 #
5896 # Handmade configuration of Qt - very annoying, this needs to
5897 # be cleaned up properly later some time (not important now).
5898 #
5899 ifeq ($(VBOX_PATH_QT),)
5900 ifeq ($(KBUILD_TARGET),darwin)
5901 VBOX_PATH_QT := $(lastword $(sort $(wildcard $(KBUILD_DEVTOOLS_TRG)/qt/v5*)))
5902 ifeq ($(VBOX_PATH_QT),)
5903 ifneq ($(wildcard /Library/Frameworks/QtCore.framework),)
5904 # Using the global installation (for OSE).
5905 VBOX_PATH_QT ?= /usr
5906 VBOX_PATH_QT_FRAMEWORKS ?= /Library/Frameworks
5907 endif
5908 endif
5909 else if1of ($(KBUILD_TARGET), win)
5910 VBOX_PATH_QT ?= $(lastword $(filter %-$(tolower $(VBOX_VCC_TOOL_STEM)),$(sort $(wildcard $(KBUILD_DEVTOOLS_TRG)/qt/v5*))))
5911 else if1of ($(KBUILD_TARGET), linux solaris)
5912 VBOX_PATH_QT ?= $(lastword $(sort $(wildcard $(KBUILD_DEVTOOLS_TRG)/qt/v5*)))
5913 ifneq ($(VBOX_PATH_QT),)
5914 VBOX_WITH_ORACLE_QT = 1
5915 endif
5916 endif
5917 endif
5918 ifeq ($(VBOX_PATH_QT),)
5919 if1of ($(USERNAME), bird)
5920 # gentoo (64-bit)
5921 VBOX_PATH_QT ?= /usr
5922 VBOX_PATH_QT_LIB ?= /usr/lib/qt5
5923 endif
5924 endif
5925 VBOX_PATH_QT ?= /usr
5926 VBOX_PATH_QT_LIB ?= $(VBOX_PATH_QT)/lib
5927
5928 ifdef VBOX_WITH_ORACLE_QT
5929 VBOX_QT_INFIX=VBox
5930 endif
5931
5932 ifeq ($(KBUILD_TARGET), darwin)
5933 VBOX_QT_MOD = \
5934 QtCore QtGui QtWidgets QtPrintSupport QtMacExtras \
5935 $(if $(VBOX_GUI_USE_QGL),QtOpenGL,)
5936 else if1of ($(KBUILD_TARGET), linux freebsd netbsd openbsd solaris win)
5937 VBOX_QT_MOD += \
5938 Qt5Core Qt5Gui Qt5Widgets Qt5PrintSupport \
5939 $(if $(VBOX_GUI_USE_QGL),Qt5OpenGL,)
5940 if1of ($(KBUILD_TARGET), linux freebsd netbsd openbsd solaris)
5941 VBOX_QT_MOD += \
5942 Qt5DBus Qt5XcbQpa Qt5X11Extras
5943 # legacy libraries required to be installed on EL5
5944 VBOX_QT_LEGACY_LIBS = \
5945 $(if $(VBOX_LD_HAS_LIBXCB),,libxcb.so.1 libX11.so.6 libX11-xcb.so.1)
5946 VBOX_QT_PLUGINS = \
5947 plugins/platforms/libqxcb.so \
5948 plugins/xcbglintegrations/libqxcb-glx-integration.so
5949 else ifeq ($(KBUILD_TARGET), win)
5950 VBOX_QT_MOD += \
5951 Qt5WinExtras
5952 endif # win
5953 endif # linux freebsd netbsd openbsd solaris win
5954
5955 VBOX_QT_MOD_NAMES = $(foreach qtmod,$(VBOX_QT_MOD),$(qtmod)$(VBOX_QT_INFIX))
5956
5957 # Hack LD_LIBRARY_PATH for stuff in tools.
5958 ifdef VBOX_WITH_ORACLE_QT
5959 if1of ($(KBUILD_TARGET), linux solaris)
5960 export LD_LIBRARY_PATH := $(VBOX_PATH_QT_LIB):$(LD_LIBRARY_PATH)
5961 endif
5962 endif
5963
5964
5965 #
5966 # Template for building Qt GUI executables.
5967 #
5968 TEMPLATE_VBOXQTGUIEXE = VBox Qt GUI Executable
5969 TEMPLATE_VBOXQTGUIEXE_USES = qt5
5970 TEMPLATE_VBOXQTGUIEXE_QTTOOL = QT5
5971 TEMPLATE_VBOXQTGUIEXE_MOCTOOL = QT5
5972 TEMPLATE_VBOXQTGUIEXE_UICTOOL = QT5
5973 TEMPLATE_VBOXQTGUIEXE_RCCTOOL = QT5
5974 TEMPLATE_VBOXQTGUIEXE_LRCTOOL = QT5
5975 TEMPLATE_VBOXQTGUIEXE_SDKS = QT5
5976 TEMPLATE_VBOXQTGUIEXE_MOCDEFS.darwin += QT_VERSION=0x050602
5977 TEMPLATE_VBOXQTGUIEXE_QT_INFIX = $(VBOX_QT_INFIX)
5978 TEMPLATE_VBOXQTGUIEXE_DEFS = IN_RING3 QT_NO_DEBUG QT_THREAD_SUPPORT QT_SHARED HAVE_CONFIG_H $(ARCH_BITS_DEFS)
5979 TEMPLATE_VBOXQTGUIEXE_RCDEFS = $(TEMPLATE_VBOXR3EXE_RCDEFS)
5980
5981 ifeq ($(KBUILD_TARGET),win)
5982 # Note! No use of VBOX_VCC_CRT_TYPE here yet as it requires a /MDd build of Qt as well.
5983 TEMPLATE_VBOXQTGUIEXE_TOOL = $(VBOX_VCC_TOOL)
5984 TEMPLATE_VBOXQTGUIEXE_DEFS += \
5985 _WIN32_WINNT=0x0500 UNICODE _UNICODE \
5986 QT_DLL _CRT_SECURE_NO_DEPRECATE \
5987 $(QMAKE_PRL_DEFINES)
5988 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS = -nologo -Zm200 -MD -Zi -EHsc -Zc:wchar_t-
5989 # -wd4481: nonstandard extension used: override specifier 'override'
5990 # -wd4625: 'QRubberBand' : copy constructor could not be generated because a base class copy constructor is inaccessible
5991 # -wd4626: 'QRubberBand' : assignment operator could not be generated because a base class assignment operator is inaccessible
5992 # -wd4640: qmetatype.h(2210): warning C4640: 'f' : construction of local static object is not thread-safe [too bad]
5993 # -wd4350: behavior change: 'int QStringList::indexOf(const QRegExp &,int) const' called instead of 'int QStringList::indexOf(QRegExp &,int) const'
5994 # -wd4121: UIActionPool.h(393) : warning C4121: 'UIActionPool::PointerToFunction' : alignment of a member was sensitive to packing
5995 # -wd4718: qmap.h(222) : warning C4718: 'QMapNode<enum DetailsElementType,bool>::destroySubTree' : recursive call has no side effects, deleting
5996 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS += $(VBOX_VCC_WARN_ALL) -wd4481 -wd4625 -wd4626 -wd4640 -wd4350 -wd4371 -wd4121 -wd4718 $(VBOX_VCC_WERR)
5997 if1of ($(VBOX_VCC_TOOL_STEM), VCC120)
5998 # -wd4619: qvectro.h(305 : warning C4619: #pragma warning : there is no warning number '4345'
5999 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS += -wd4619
6000 endif
6001 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.debug = -RTCsu
6002 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.dbgopt = $(NO_SUCH_VARIABLE)
6003 TEMPLATE_VBOXQTGUIEXE_LDFLAGS = -Ignore:4197 \
6004 /NOD /INCREMENTAL:NO /MAPINFO:EXPORTS /LargeAddressAware /DynamicBase /NxCompat /Release /Debug /Opt:Ref /Opt:Icf \
6005 /Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
6006 /STUB:$(PATH_ROOT)/src/VBox/HostDrivers/Support/win/winstub.com
6007 if defined(VBOX_SIGNING_MODE) && defined(VBOX_WITH_HARDENING)
6008 TEMPLATE_VBOXQTGUIEXE_LDFLAGS += -IntegrityCheck
6009 endif
6010 TEMPLATE_VBOXQTGUIEXE_SDKS += $(VBOX_WINPSDK)
6011 TEMPLATE_VBOXQTGUIEXE_LIBS = \
6012 $(VBOX_LIBS_QT) \
6013 $(LIB_RUNTIME) \
6014 $(VBOX_LIB_VMM_LAZY) \
6015 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcprt.lib \
6016 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcrt.lib \
6017 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/oldnames.lib \
6018 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/delayimp.lib
6019 TEMPLATE_VBOXQTGUIEXE_POST_CMDS = $(VBOX_SIGN_IMAGE_CMDS)
6020
6021 else # the gcc guys:
6022 TEMPLATE_VBOXQTGUIEXE_TOOL = $(VBOX_GCC_TOOL)
6023 TEMPLATE_VBOXQTGUIEXE_DEFS.linux = _REENTRANT
6024
6025 TEMPLATE_VBOXQTGUIEXE_DEFS.solaris = _REENTRANT
6026
6027 ## @todo Use VBOX_GCC_PEDANTIC_CXX?
6028 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS = \
6029 -g $(VBOX_GCC_pipe) $(filter-out -Wno-unused,$(VBOX_GCC_WARN)) -frtti -fno-exceptions \
6030 -Wno-long-long -fshort-wchar -fno-strict-aliasing \
6031 $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_fvisibility-inlines-hidden) \
6032 $(VBOX_GCC_Wno-return-type-c-linkage) $(VBOX_GCC_std) $(VBOX_GCC_IPRT_FMT_CHECK)
6033 ifdef VBOX_WITH_NO_GCC_WARNING_POLICY
6034 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS += $(VBOX_GCC_WERR)
6035 endif
6036 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.x86 = -m32
6037 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.amd64 = -m64
6038 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.linux = -pthread
6039 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.debug = $(VBOX_GCC_SANITIZER_FLAGS)
6040 TEMPLATE_VBOXQTGUIEXE_OBJCFLAGS = -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_C) -fno-exceptions $(VBOX_GCC_IPRT_FMT_CHECK)
6041 TEMPLATE_VBOXQTGUIEXE_OBJCFLAGS.x86 = $(TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.x86)
6042 TEMPLATE_VBOXQTGUIEXE_OBJCFLAGS.amd64 = $(TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.amd64)
6043 TEMPLATE_VBOXQTGUIEXE_OBJCXXFLAGS = \
6044 -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_CXX) \
6045 -frtti -fno-exceptions $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_IPRT_FMT_CHECK)
6046 ifdef VBOX_WITH_NO_GCC_WARNING_POLICY
6047 TEMPLATE_VBOXQTGUIEXE_OBJCXXFLAGS += $(VBOX_GCC_WERR)
6048 endif
6049 TEMPLATE_VBOXQTGUIEXE_OBJCXXFLAGS.x86 = $(TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.x86)
6050 TEMPLATE_VBOXQTGUIEXE_OBJCXXFLAGS.amd64 = $(TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.amd64)
6051 TEMPLATE_VBOXQTGUIEXE_LDFLAGS.x86 = -m32
6052 TEMPLATE_VBOXQTGUIEXE_LDFLAGS.amd64 = -m64
6053 TEMPLATE_VBOXQTGUIEXE_LDFLAGS.debug = $(VBOX_GCC_SANITIZER_FLAGS)
6054 TEMPLATE_VBOXQTGUIEXE_LIBS = \
6055 $(VBOX_LIBS_QT) \
6056 $(LIB_RUNTIME) \
6057 $(if-expr "$(LIB_VMM)" == "$(VBOX_LIB_VMM_LAZY)",$(LIB_REM),) \
6058 $(VBOX_LIB_VMM_LAZY)
6059
6060 ifeq ($(KBUILD_TARGET),linux)
6061 TEMPLATE_VBOXQTGUIEXE_LDFLAGS += -Wl,-z,noexecstack,-z,relro $(VBOX_LD_as_needed)
6062 TEMPLATE_VBOXQTGUIEXE_LIBS += \
6063 $(VBOX_XCURSOR_LIBS) \
6064 Xext \
6065 X11
6066 TEMPLATE_VBOXQTGUIEXE_LIBPATH += \
6067 $(VBOX_LIBPATH_X11)
6068 if defined(VBOX_WITH_ORACLE_QT) && !defined(VBOX_LD_HAS_LIBXCB)
6069 TEMPLATE_VBOXQTGUIEXE_LIBPATH += $(PATH_SDK_QT5_LIB)/legacy
6070 TEMPLATE_VBOXQTGUIEXE_INCS += $(PATH_SDK_QT5_INC)/legacy
6071 endif
6072 else ifeq ($(KBUILD_TARGET),darwin)
6073 TEMPLATE_VBOXQTGUIEXE_DEFS.darwin += $(VBOX_DARWIN_DEF_SDK_DEFS)
6074 TEMPLATE_VBOXQTGUIEXE_CFLAGS.darwin += $(VBOX_DARWIN_DEF_SDK_CFLAGS)
6075 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.darwin += $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
6076 TEMPLATE_VBOXQTGUIEXE_OBJCFLAGS.darwin += $(VBOX_DARWIN_DEF_SDK_OBJCFLAGS)
6077 TEMPLATE_VBOXQTGUIEXE_OBJCXXFLAGS.darwin += $(VBOX_DARWIN_DEF_SDK_OBJCXXFLAGS)
6078 TEMPLATE_VBOXQTGUIEXE_LDFLAGS.darwin += $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -bind_at_load
6079 TEMPLATE_VBOXQTGUIEXE_LIBS +=
6080 TEMPLATE_VBOXQTGUIEXE_LIBPATH +=
6081 else
6082 TEMPLATE_VBOXQTGUIEXE_INCS += \
6083 $(VBOX_XCURSOR_INCS)
6084 TEMPLATE_VBOXQTGUIEXE_LIBS += \
6085 $(VBOX_XCURSOR_LIBS) \
6086 Xext \
6087 X11 \
6088 m \
6089 $(LIB_PTHREAD)
6090 TEMPLATE_VBOXQTGUIEXE_LIBPATH += \
6091 $(VBOX_LIBPATH_X11)
6092 ifeq ($(KBUILD_TARGET),freebsd)
6093 TEMPLATE_VBOXQTGUIEXE_INCS += \
6094 /usr/include \
6095 /usr/X11R6/include \
6096 /usr/local/include
6097 TEMPLATE_VBOXQTGUIEXE_LIBPATH += \
6098 /usr/lib \
6099 /usr/X11R6/lib \
6100 /usr/local/lib
6101 endif
6102 ifeq ($(KBUILD_TARGET),solaris)
6103 TEMPLATE_VBOXQTGUIEXE_LDFLAGS.solaris = -Wl,-z,ignore # Same as VBOX_LD_as_needed.
6104 TEMPLATE_VBOXQTGUIEXE_LIBS += \
6105 rt socket nsl
6106 endif
6107 endif
6108 # Assume the Qt shared objects are in the same directory as the executable, on Solaris too.
6109 ifdef VBOX_WITH_RUNPATH
6110 TEMPLATE_VBOXQTGUIEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)'
6111 else ifdef VBOX_WITH_RELATIVE_RUNPATH
6112 TEMPLATE_VBOXQTGUIEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)'
6113 endif
6114
6115 endif
6116
6117 # Add COM/XPCOM stuff
6118 TEMPLATE_VBOXQTGUIEXE_LIBS += \
6119 $(PATH_STAGE_LIB)/VBoxCOM$(if-expr defined(VBOX_WITH_DEBUG_VCC_CRT) && $(KBUILD_TARGET) == win,-GUI,)$(VBOX_SUFF_LIB)
6120 ifdef VBOX_WITH_XPCOM
6121 ## @todo may be worth creating the VBOX_XPCOM SDK def, or just a SDK_VBOXXPCOM.
6122 TEMPLATE_VBOXQTGUIEXE_DEFS += VBOX_WITH_XPCOM
6123 ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
6124 TEMPLATE_VBOXQTGUIEXE_DEFS += VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
6125 endif
6126 TEMPLATE_VBOXQTGUIEXE_INCS += \
6127 $(VBOX_XPCOM_INCS)
6128 TEMPLATE_VBOXQTGUIEXE_LIBS += \
6129 $(LIB_XPCOM)
6130 TEMPLATE_VBOXQTGUIEXE_INTERMEDIATES += \
6131 $(VBOX_PATH_SDK)/bindings/xpcom/include/VirtualBox_XPCOM.h
6132 else # COM
6133 TEMPLATE_VBOXQTGUIEXE_INCS += \
6134 $(VBOX_PATH_SDK)/bindings/mscom/include
6135 TEMPLATE_VBOXQTGUIEXE_INTERMEDIATES += \
6136 $(VBOX_PATH_SDK)/bindings/mscom/include/VirtualBox.h
6137 endif # COM
6138
6139 ifn1of ($(KBUILD_TARGET), darwin os2 win)
6140 TEMPLATE_VBOXQTGUIEXE_DEFS += PIC
6141 TEMPLATE_VBOXQTGUIEXE_CFLAGS += -fPIC
6142 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS += -fPIC
6143 TEMPLATE_VBOXQTGUIEXE_LDFLAGS += -fPIC
6144 endif # not darwin, os2 or win
6145
6146
6147 #
6148 # Template for building Qt GUI components.
6149 #
6150 TEMPLATE_VBOXQTGUI = VBox Qt GUI Components
6151 TEMPLATE_VBOXQTGUI_EXTENDS = VBOXQTGUIEXE
6152 TEMPLATE_VBOXQTGUI_LIBS = $(filter-out $(QTMAIN),$(TEMPLATE_VBOXQTGUIEXE_LIBS))
6153 ifeq ($(KBUILD_TARGET),darwin)
6154 TEMPLATE_VBOXQTGUI_LDFLAGS.darwin += $(filter-out -bind_at_load,$(TEMPLATE_VBOXQTGUIEXE_LDFLAGS.darwin)) \
6155 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
6156 -compatibility_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
6157 endif
6158 ifn1of ($(KBUILD_TARGET), darwin os2 win)
6159 TEMPLATE_VBOXQTGUI_DEFS = PIC $(TEMPLATE_VBOXQTGUIEXE_DEFS)
6160 TEMPLATE_VBOXQTGUI_CFLAGS = -fPIC $(TEMPLATE_VBOXQTGUIEXE_CFLAGS)
6161 TEMPLATE_VBOXQTGUI_CXXFLAGS = -fPIC $(TEMPLATE_VBOXQTGUIEXE_CXXFLAGS)
6162 TEMPLATE_VBOXQTGUI_LDFLAGS = -fPIC $(TEMPLATE_VBOXQTGUIEXE_LDFLAGS)
6163 endif
6164
6165endif # VBOX_WITH_QTGUI
6166
6167
6168#
6169# Template for installing symbol files that we wish to ship.
6170#
6171TEMPLATE_VBoxDbgSyms = Symbol files for VBoxDbg and gurus.
6172TEMPLATE_VBoxDbgSyms_INST = $(INST_VBOXDBG_SYMS)
6173
6174
6175#
6176# Template for building build bldprogs.
6177# HACK ALERT! The BLD_TRG_* is a hack to allow building libraries as well.
6178#
6179TEMPLATE_VBoxBldProg = VBox Build Program
6180TEMPLATE_VBoxBldProg_BLD_TRG := $(KBUILD_HOST)
6181TEMPLATE_VBoxBldProg_BLD_TRG_ARCH := $(KBUILD_HOST_ARCH)
6182TEMPLATE_VBoxBldProg_BLD_TRG_CPU := $(KBUILD_HOST_CPU)
6183TEMPLATE_VBoxBldProg_DEFS := IN_RING3 LOG_DISABLED IN_BLD_PROG
6184TEMPLATE_VBoxBldProg_DEFS.win := _CRT_SECURE_NO_DEPRECATE
6185ifeq ($(KBUILD_TARGET),$(KBUILD_HOST))
6186 TEMPLATE_VBoxBldProg_ASTOOL := $(VBOX_ASTOOL)
6187 TEMPLATE_VBoxBldProg_ASFLAGS.x86 := $(VBOX_ASFLAGS32)
6188 TEMPLATE_VBoxBldProg_ASFLAGS.amd64 := $(VBOX_ASFLAGS64)
6189else
6190 TEMPLATE_VBoxBldProg_ASTOOL := YASM
6191 TEMPLATE_VBoxBldProg_ASFLAGS := -D__YASM__ -Worphan-labels $(VBOX_YASM_Wno-segreg-in-64bit)
6192 if1of ($(KBUILD_HOST),win)
6193 TEMPLATE_VBoxBldProg_ASFLAGS += -g cv8 -DASM_FORMAT_ELF
6194 TEMPLATE_VBoxBldProg_ASFLAGS.x86 := -f win32
6195 TEMPLATE_VBoxBldProg_ASFLAGS.amd64 := -f win64
6196 else if1of ($(KBUILD_HOST),darwin)
6197 TEMPLATE_VBoxBldProg_ASFLAGS += -DASM_FORMAT_MACHO
6198 TEMPLATE_VBoxBldProg_ASFLAGS.x86 := -f macho32
6199 TEMPLATE_VBoxBldProg_ASFLAGS.amd64 := -f macho64
6200 else
6201 TEMPLATE_VBoxBldProg_ASFLAGS += -g dwarf2 -DASM_FORMAT_ELF
6202 TEMPLATE_VBoxBldProg_ASFLAGS.x86 := -f elf32
6203 TEMPLATE_VBoxBldProg_ASFLAGS.amd64 := -f elf64
6204 endif
6205endif
6206ifeq ($(KBUILD_HOST),win)
6207 TEMPLATE_VBoxBldProg_TOOL := $(VBOX_VCC_TOOL_STEM)$(toupper $(KBUILD_HOST_ARCH))
6208 TEMPLATE_VBoxBldProg_SDKS := ReorderCompilerIncs $(VBOX_WINPSDK)
6209 TEMPLATE_VBoxBldProg_CXXFLAGS := -Zi -Zl -GR- -EHsc -GF -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP) -MT$(VBOX_VCC_CRT_TYPE) \
6210 $(VBOX_VCC_WARN_ALL) $(VBOX_VCC_WERR)
6211 TEMPLATE_VBoxBldProg_CXXFLAGS.debug := -RTCsu
6212 TEMPLATE_VBoxBldProg_CXXFLAGS.dbgopt = $(NO_SUCH_VARIABLE)
6213 TEMPLATE_VBoxBldProg_CXXFLAGS.profile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.release)
6214 TEMPLATE_VBoxBldProg_CXXFLAGS.kprofile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.release)
6215 TEMPLATE_VBoxBldProg_CFLAGS = $(TEMPLATE_VBoxBldProg_CXXFLAGS)
6216 TEMPLATE_VBoxBldProg_CFLAGS.debug = $(TEMPLATE_VBoxBldProg_CXXFLAGS.debug)
6217 TEMPLATE_VBoxBldProg_CFLAGS.dbgopt = $(TEMPLATE_VBoxBldProg_CXXFLAGS.dbgopt)
6218 TEMPLATE_VBoxBldProg_CFLAGS.release = $(TEMPLATE_VBoxBldProg_CXXFLAGS.release)
6219 TEMPLATE_VBoxBldProg_CFLAGS.profile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.profile)
6220 TEMPLATE_VBoxBldProg_CFLAGS.kprofile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.kprofile)
6221 TEMPLATE_VBoxBldProg_LDFLAGS = -Ignore:4197 \
6222 /NOD /INCREMENTAL:NO /MAPINFO:EXPORTS /LargeAddressAware /DynamicBase /NxCompat /Release /Debug /Opt:Ref /Opt:Icf \
6223 /Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
6224 /DISALLOWLIB:libc$(VBOX_VCC_CRT_TYPE_N).lib \
6225 /DISALLOWLIB:libcmt$(VBOX_VCC_CRT_TYPE_N).lib \
6226 /DISALLOWLIB:msvcrt.lib \
6227 /DISALLOWLIB:msvcrtd.lib \
6228 /DISALLOWLIB:msvcprt.lib \
6229 /DISALLOWLIB:msvcprtd.lib
6230 TEMPLATE_VBoxBldProg_LIBS = \
6231 $(PATH_TOOL_$(TEMPLATE_VBoxBldProg_TOOL)_LIB)/oldnames.lib \
6232 $(PATH_TOOL_$(TEMPLATE_VBoxBldProg_TOOL)_LIB)/libcmt$(VBOX_VCC_CRT_TYPE).lib \
6233 $(PATH_TOOL_$(TEMPLATE_VBoxBldProg_TOOL)_LIB)/libcpmt$(VBOX_VCC_CRT_TYPE).lib
6234
6235else
6236# (gcc of some kind )
6237TEMPLATE_VBoxBldProg_TOOL = GXX3
6238TEMPLATE_VBoxBldProg_CFLAGS = -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC_Wno-variadic-macros)
6239 ifdef VBOX_WITH_NO_GCC_WARNING_POLICY
6240 TEMPLATE_VBoxBldProg_CFLAGS += $(VBOX_GCC_WERR)
6241 endif
6242TEMPLATE_VBoxBldProg_CFLAGS.x86 = -m32
6243TEMPLATE_VBoxBldProg_CFLAGS.sparc32 = -m32
6244TEMPLATE_VBoxBldProg_CFLAGS.amd64 = -m64
6245TEMPLATE_VBoxBldProg_CFLAGS.sparc64 = -m64
6246TEMPLATE_VBoxBldProg_CFLAGS.release = -O2 -fno-omit-frame-pointer -fno-strict-aliasing
6247TEMPLATE_VBoxBldProg_CFLAGS.profile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.profile)
6248TEMPLATE_VBoxBldProg_CFLAGS.kprofile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.kprofile)
6249TEMPLATE_VBoxBldProg_CXXFLAGS = -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC_Wno-variadic-macros)
6250 ifdef VBOX_WITH_NO_GCC_WARNING_POLICY
6251 TEMPLATE_VBoxBldProg_CXXFLAGS += $(VBOX_GCC_WERR)
6252 endif
6253TEMPLATE_VBoxBldProg_CXXFLAGS.x86 = -m32
6254TEMPLATE_VBoxBldProg_CXXFLAGS.sparc32 = -m32
6255TEMPLATE_VBoxBldProg_CXXFLAGS.amd64 = -m64
6256TEMPLATE_VBoxBldProg_CXXFLAGS.sparc64 = -m64
6257TEMPLATE_VBoxBldProg_CXXFLAGS.release = -O2 -fno-omit-frame-pointer -fno-strict-aliasing
6258TEMPLATE_VBoxBldProg_CXXFLAGS.profile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.release)
6259TEMPLATE_VBoxBldProg_CXXFLAGS.kprofile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.release)
6260TEMPLATE_VBoxBldProg_OBJCFLAGS = $(TEMPLATE_VBoxBldProg_CFLAGS)
6261TEMPLATE_VBoxBldProg_OBJCFLAGS.x86 = $(TEMPLATE_VBoxBldProg_CFLAGS.x86)
6262TEMPLATE_VBoxBldProg_OBJCFLAGS.amd64 = $(TEMPLATE_VBoxBldProg_CFLAGS.amd64)
6263TEMPLATE_VBoxBldProg_OBJCFLAGS.release = $(TEMPLATE_VBoxBldProg_CFLAGS.release)
6264TEMPLATE_VBoxBldProg_OBJCFLAGS.profile = $(TEMPLATE_VBoxBldProg_CFLAGS.profile)
6265TEMPLATE_VBoxBldProg_OBJCFLAGS.kprofile = $(TEMPLATE_VBoxBldProg_CFLAGS.kprofile)
6266TEMPLATE_VBoxBldProg_OBJCXXFLAGS = $(TEMPLATE_VBoxBldProg_CXXFLAGS)
6267TEMPLATE_VBoxBldProg_OBJCXXFLAGS.x86 = $(TEMPLATE_VBoxBldProg_CXXFLAGS.x86)
6268TEMPLATE_VBoxBldProg_OBJCXXFLAGS.amd64 = $(TEMPLATE_VBoxBldProg_CXXFLAGS.amd64)
6269TEMPLATE_VBoxBldProg_OBJCXXFLAGS.release = $(TEMPLATE_VBoxBldProg_CXXFLAGS.release)
6270TEMPLATE_VBoxBldProg_OBJCXXFLAGS.profile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.profile)
6271TEMPLATE_VBoxBldProg_OBJCXXFLAGS.kprofile= $(TEMPLATE_VBoxBldProg_CXXFLAGS.kprofile)
6272TEMPLATE_VBoxBldProg_LDFLAGS.x86 = -m32
6273TEMPLATE_VBoxBldProg_LDFLAGS.sparc32 = -m32
6274TEMPLATE_VBoxBldProg_LDFLAGS.amd64 = -m64
6275TEMPLATE_VBoxBldProg_LDFLAGS.sparc64 = -m64
6276 ifeq ($(KBUILD_HOST),linux)
6277TEMPLATE_VBoxBldProg_LIBS = pthread m rt dl
6278 else ifeq ($(KBUILD_HOST),os2)
6279TEMPLATE_VBoxBldProg_TOOL = GXX3OMF
6280TEMPLATE_VBoxBldProg_LIBS = socket iconv
6281 else ifeq ($(KBUILD_HOST),darwin)
6282TEMPLATE_VBoxBldProg_TOOL = $(VBOX_GCC_TOOL)
6283 if "$(VBOX_DEF_MACOSX_VERSION_MIN)" == "10.7" || "$(VBOX_DARWIN_HOST_VERSION_MAJOR)" == "7"
6284TEMPLATE_VBoxBldProg_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_DEFS)
6285TEMPLATE_VBoxBldProg_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_CFLAGS) -fno-common
6286TEMPLATE_VBoxBldProg_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_CXXFLAGS)
6287TEMPLATE_VBoxBldProg_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_OBJCFLAGS) $(VBOX_GCC_PEDANTIC_C)
6288TEMPLATE_VBoxBldProg_OBJCXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_OBJCXXFLAGS) $(VBOX_GCC_PEDANTIC_CXX)
6289TEMPLATE_VBoxBldProg_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_LDFLAGS)
6290 else if "$(VBOX_DEF_MACOSX_VERSION_MIN)" == "10.6" || "$(VBOX_DARWIN_HOST_VERSION_MAJOR)" == "6"
6291TEMPLATE_VBoxBldProg_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_10_6_DEFS)
6292TEMPLATE_VBoxBldProg_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_6_CFLAGS) -fno-common
6293TEMPLATE_VBoxBldProg_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_6_CXXFLAGS)
6294TEMPLATE_VBoxBldProg_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_6_OBJCFLAGS) $(VBOX_GCC_PEDANTIC_C)
6295TEMPLATE_VBoxBldProg_OBJCXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_6_OBJCXXFLAGS) $(VBOX_GCC_PEDANTIC_CXX)
6296TEMPLATE_VBoxBldProg_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_6_LDFLAGS)
6297 else if "$(VBOX_DEF_MACOSX_VERSION_MIN)" == "10.5" || "$(VBOX_DARWIN_HOST_VERSION_MAJOR)" == "5" || defined(VBOX_MACOS_10_5_WORKAROUND)
6298TEMPLATE_VBoxBldProg_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_DEFS)
6299TEMPLATE_VBoxBldProg_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_CFLAGS) -fno-common
6300TEMPLATE_VBoxBldProg_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_CXXFLAGS)
6301TEMPLATE_VBoxBldProg_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_OBJCFLAGS) $(VBOX_GCC_PEDANTIC_C)
6302TEMPLATE_VBoxBldProg_OBJCXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_OBJCXXFLAGS) $(VBOX_GCC_PEDANTIC_CXX)
6303TEMPLATE_VBoxBldProg_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_LDFLAGS)
6304 else
6305TEMPLATE_VBoxBldProg_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_DEFS)
6306TEMPLATE_VBoxBldProg_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -fno-common
6307TEMPLATE_VBoxBldProg_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
6308TEMPLATE_VBoxBldProg_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_OBJCFLAGS) $(VBOX_GCC_PEDANTIC_C)
6309TEMPLATE_VBoxBldProg_OBJCXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_OBJCXXFLAGS) $(VBOX_GCC_PEDANTIC_CXX)
6310TEMPLATE_VBoxBldProg_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_LDFLAGS)
6311 endif
6312TEMPLATE_VBoxBldProg_LIBS =
6313 else ifeq ($(KBUILD_HOST),haiku)
6314TEMPLATE_VBoxBldProg_TOOL = GXX3
6315TEMPLATE_VBoxBldProg_LIBS = network iconv
6316TEMPLATE_VBoxBldProg_LIBPATH += \
6317 /boot/common/lib
6318 else if1of ($(KBUILD_HOST), freebsd openbsd)
6319TEMPLATE_VBoxBldProg_TOOL = GXX3
6320TEMPLATE_VBoxBldProg_LIBS = pthread
6321TEMPLATE_VBoxBldProg_INCS += \
6322 /usr/include \
6323 /usr/X11R6/include \
6324 /usr/local/include
6325TEMPLATE_VBoxBldProg_LIBPATH += \
6326 /usr/lib \
6327 /usr/X11R6/lib \
6328 /usr/local/lib
6329 else ifeq ($(KBUILD_HOST),netbsd)
6330TEMPLATE_VBoxBldProg_TOOL = GXX3
6331TEMPLATE_VBoxBldProg_LIBS = pthread
6332TEMPLATE_VBoxBldProg_INCS += \
6333 /usr/include \
6334 /usr/X11R7/include
6335TEMPLATE_VBoxBldProg_LIBPATH += \
6336 /usr/lib \
6337 /usr/X11R7/lib
6338 else ifeq ($(KBUILD_HOST),solaris)
6339TEMPLATE_VBoxBldProg_TOOL = GXX3PLAIN
6340TEMPLATE_VBoxBldProg_LIBS = rt
6341 else
6342$(warning Warning: VBOX Build: Target $(KBUILD_HOST) is not officially supported!)
6343 endif
6344
6345endif # !win
6346
6347
6348#
6349# Advanced build programs using IPRT and stuff.
6350#
6351TEMPLATE_VBoxAdvBldProg = Advanced VBox Build Program
6352TEMPLATE_VBoxAdvBldProg_EXTENDS = VBoxBldProg
6353TEMPLATE_VBoxAdvBldProg_SDKS = $(TEMPLATE_VBoxBldProg_SDKS)
6354TEMPLATE_VBoxAdvBldProg_SDKS.win= $(TEMPLATE_VBoxBldProg_SDKS.win) VBOX_NTDLL
6355TEMPLATE_VBoxAdvBldProg_DEFS = $(TEMPLATE_VBoxBldProg_DEFS) IN_RT_R3 IN_ADV_BLD_PROG
6356ifeq ($(KBUILD_HOST),win)
6357 TEMPLATE_VBoxAdvBldProg_CFLAGS = $(TEMPLATE_VBoxBldProg_CFLAGS) $(VBOX_VCC_WERR)
6358 TEMPLATE_VBoxAdvBldProg_CXXFLAGS = $(TEMPLATE_VBoxBldProg_CXXFLAGS) $(VBOX_VCC_WERR)
6359endif
6360TEMPLATE_VBoxAdvBldProg_LIBS = \
6361 $(PATH_STAGE_LIB)/RuntimeBldProg$(VBOX_HOSTSUFF_LIB) \
6362 $(if-expr defined(IPRT_WITH_KSTUFF), \
6363 $(PATH_STAGE_LIB)/VBox-kStuffStaticBldProg$(VBOX_HOSTSUFF_LIB) \
6364 $(PATH_STAGE_LIB)/RuntimeBldProg$(VBOX_HOSTSUFF_LIB) \
6365 ,) \
6366 $(TEMPLATE_VBoxBldProg_LIBS)
6367TEMPLATE_VBoxAdvBldProg_LIBS.darwin = \
6368 $(TEMPLATE_VBoxAdvBldProg_LIBS) \
6369 iconv \
6370 $(TEMPLATE_VBoxBldProg_LIBS.darwin)
6371TEMPLATE_VBoxAdvBldProg_LIBS.freebsd = \
6372 $(TEMPLATE_VBoxAdvBldProg_LIBS) \
6373 iconv \
6374 rt \
6375 $(TEMPLATE_VBoxBldProg_LIBS.freebsd)
6376TEMPLATE_VBoxAdvBldProg_LIBS.linux = \
6377 $(TEMPLATE_VBoxAdvBldProg_LIBS) \
6378 crypt \
6379 $(TEMPLATE_VBoxBldProg_LIBS.linux)
6380TEMPLATE_VBoxAdvBldProg_LIBS.solaris = \
6381 $(TEMPLATE_VBoxAdvBldProg_LIBS) \
6382 contract \
6383 kstat \
6384 rt \
6385 socket \
6386 nsl \
6387 $(TEMPLATE_VBoxBldProg_LIBS.solaris)
6388
6389
6390#
6391# Windows rc workaround for crosscompiling.
6392# (Some (old) Wine versions fails loading msvcrt.dll from the VCC bin directory.)
6393#
6394ifneq ($(KBUILD_HOST),win)
6395 TOOL_VCC80X86_RC := $(EXEC_X86_WIN32) $(KBUILD_DEVTOOLS)/win.x86/bin/rc.exe
6396 TOOL_VCC80AMD64_RC := $(EXEC_X86_WIN32) $(KBUILD_DEVTOOLS)/win.x86/bin/rc.exe
6397 TOOL_VCC70_RC := $(EXEC_X86_WIN32) $(KBUILD_DEVTOOLS)/win.x86/bin/rc.exe
6398 WIN32_MC = $(EXEC_X86_WIN32) $(KBUILD_DEVTOOLS)/win.x86/bin/mc.exe
6399else
6400 WIN32_MC = $(EXEC_X86_WIN32) $(firstword $(wildcard \
6401 $(PATH_SDK_$(VBOX_WINPSDK)_BIN)/MC.Exe\
6402 $(PATH_SDK_WINPSDK_BIN)/MC.Exe\
6403 $(PATH_SDK_WINPSDK)/Bin/MC.Exe\
6404 $(PATH_SDK_WIN32SDK_BIN)/MC.Exe\
6405 $(PATH_SDK_WIN64SDK_BIN)/MC.Exe\
6406 $(KBUILD_DEVTOOLS)/win.x86/bin/mc.exe\
6407 ) Sorry_Cannot_find_mc_in_the_PSDK)
6408endif
6409
6410
6411#
6412# Template for building R3 programs for the guest additions.
6413#
6414TEMPLATE_VBOXGUESTR3EXE = VBox Guest Program
6415ifeq ($(KBUILD_TARGET),win)
6416 TEMPLATE_VBOXGUESTR3EXE_EXTENDS = VBOXR3EXE
6417 TEMPLATE_VBOXGUESTR3EXE_SDKS = ReorderCompilerIncs $(VBOX_WINPSDK_GST) VBOX_NTDLL
6418 TEMPLATE_VBOXGUESTR3EXE_CFLAGS = $(filter-out -MD$(VBOX_VCC_CRT_TYPE), $(TEMPLATE_VBOXR3EXE_CFLAGS)) -MT$(VBOX_VCC_CRT_TYPE)
6419 TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS = $(filter-out -MD$(VBOX_VCC_CRT_TYPE), $(TEMPLATE_VBOXR3EXE_CFLAGS)) -MT$(VBOX_VCC_CRT_TYPE)
6420 TEMPLATE_VBOXGUESTR3EXE_LDFLAGS = $(filter-out /DISALLOWLIB:libcmt$(VBOX_VCC_CRT_TYPE).lib /DISALLOWLIB:libcpmt$(VBOX_VCC_CRT_TYPE).lib, $(TEMPLATE_VBOXR3EXE_LDFLAGS)) \
6421 /DISALLOWLIB:msvcrt$(VBOX_VCC_CRT_TYPE).lib \
6422 /DISALLOWLIB:msvcprt$(VBOX_VCC_CRT_TYPE).lib
6423 TEMPLATE_VBOXGUESTR3EXE_LIBS.x86 = \
6424 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL.win.x86)_LIB)/oldnames.lib \
6425 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL.win.x86)_LIB)/libcmt$(VBOX_VCC_CRT_TYPE).lib \
6426 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL.win.x86)_LIB)/libcpmt$(VBOX_VCC_CRT_TYPE).lib
6427 TEMPLATE_VBOXGUESTR3EXE_LIBS.amd64 = \
6428 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL.win.amd64)_LIB)/oldnames.lib \
6429 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL.win.amd64)_LIB)/libcmt$(VBOX_VCC_CRT_TYPE).lib \
6430 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL.win.amd64)_LIB)/libcpmt$(VBOX_VCC_CRT_TYPE).lib
6431 # Hack for running on NT4, W2K and XP w/o SP: Change OS and subsystem version in the image.
6432 # HACK ALERT! Double expansion of $$(NLTAB).
6433 TEMPLATE_VBOXGUESTR3EXE_POST_CMDS.win.x86 = $(if $(eq $(tool_do),LINK_LIBRARY),,$(VBOX_PE_SET_VERSION) $(out)$$(NLTAB)$(TEMPLATE_VBOXR3EXE_POST_CMDS))
6434 TEMPLATE_VBOXGUESTR3EXE_LNK_DEPS.win.x86 = $(if $(eq $(tool_do),LINK_LIBRARY),,$(VBOX_PE_SET_VERSION))
6435 if defined(VBOX_WITH_MORE_NT4_COMPAT_BINARIES) && "$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)" == "win.x86"
6436 TEMPLATE_VBOXGUESTR3EXE_LIBS.win.x86 = $(NO_SUCH_VARIABLE)# Ditch RuntimeR3VccTricks2
6437 endif
6438else # the gcc guys
6439 ifdef VBOX_WITH_COMPATIBLE_LINUX_GUEST_PACKAGE
6440 ifneq ($(KBUILD_TARGET),linux)
6441 override VBOX_WITH_COMPATIBLE_LINUX_GUEST_PACKAGE :=
6442 endif
6443 endif
6444 TEMPLATE_VBOXGUESTR3EXE_EXTENDS = VBOXR3EXE
6445 TEMPLATE_VBOXGUESTR3EXE_TOOL := $(subst GXX,GCC,$(TEMPLATE_VBOXR3EXE_TOOL))
6446 TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -fno-exceptions
6447 # Do not inherit sanitizer flags from VBOXR3EXE in guest executables. Deal with them separately.
6448 TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS.debug = $(NO_SUCH_VARIABLE)
6449 TEMPLATE_VBOXGUESTR3EXE_CFLAGS.debug = $(NO_SUCH_VARIABLE)
6450 TEMPLATE_VBOXGUESTR3EXE_LDFLAGS.linux = $(filter-out $(VBOX_GCC_ORIGIN_OPT),$(TEMPLATE_VBOXR3EXE_LDFLAGS.linux))
6451 TEMPLATE_VBOXGUESTR3EXE_LDFLAGS.debug = $(NO_SUCH_VARIABLE)
6452 ifdef VBOX_WITH_COMPATIBLE_LINUX_GUEST_PACKAGE
6453 ifeq ($(KBUILD_TARGET_ARCH),x86)
6454 TEMPLATE_VBOXGUESTR3EXE_TOOL := VBoxXGccX86RedHatLinux
6455 else ifeq ($(KBUILD_TARGET_ARCH),amd64)
6456 TEMPLATE_VBOXGUESTR3EXE_TOOL := VBoxXGccAmd64LinuxGnu
6457 TEMPLATE_VBOXGUESTR3EXE_TOOL.x86 := VBoxXGccX86RedHatLinux
6458 endif
6459 TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS := $(filter-out $(VBOX_GCC_Wextra) $(VBOX_GCC_WERR) \
6460 $(VBOX_GCC_Wno-missing-field-initializers) $(VBOX_GCC_fdiagnostics-show-option) $(VBOX_GCC_Wno-variadic-macros) \
6461 $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_mtune-generic) $(VBOX_GCC_Wlogical-op)\
6462 ,$(TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS)) -pipe
6463 TEMPLATE_VBOXGUESTR3EXE_CFLAGS := $(filter-out $(VBOX_GCC_Wextra) $(VBOX_GCC_WERR) \
6464 $(VBOX_GCC_Wno-missing-field-initializers) $(VBOX_GCC_fdiagnostics-show-option) $(VBOX_GCC_Wno-variadic-macros) \
6465 $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_mtune-generic) $(VBOX_GCC_Wlogical-op)\
6466 ,$(TEMPLATE_VBOXGUESTR3EXE_CFLAGS)) -pipe
6467 TEMPLATE_VBOXGUESTR3EXE_LDFLAGS.linux := $(filter-out $(VBOX_GCC_ORIGIN_OPT) $(VBOX_LD_as_needed),$(TEMPLATE_VBOXGUESTR3EXE_LDFLAGS.linux))
6468 endif
6469 TEMPLATE_VBOXGUESTR3EXE_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)%,$(TEMPLATE_VBOXR3EXE_LDFLAGS))
6470endif
6471TEMPLATE_VBOXGUESTR3EXE_INST = $(INST_ADDITIONS)
6472TEMPLATE_VBOXGUESTR3EXE_DEFS := $(filter-out $(ARCH_BITS_DEFS), $(TEMPLATE_VBOXR3EXE_DEFS)) IN_GUEST IN_GUEST_R3 IN_RT_R3 $(VBOX_GC_ARCH_BITS_DEFS)
6473TEMPLATE_VBOXGUESTR3EXE_DEFS.linux := $(TEMPLATE_VBOXR3EXE_DEFS.linux) LOG_USE_C99 RT_WITHOUT_EXEC_ALLOC
6474ifeq ($(KBUILD_TARGET),linux) # As few libs as possible on linux.
6475 TEMPLATE_VBOXGUESTR3EXE_LIBS = pthread rt m dl
6476else if1of ($(KBUILD_TARGET), darwin freebsd openbsd)
6477 TEMPLATE_VBOXGUESTR3EXE_LIBS = $(TEMPLATE_VBOXR3EXE_LIBS) iconv
6478else ifeq ($(KBUILD_TARGET), solaris)
6479 TEMPLATE_VBOXGUESTR3EXE_LIBS = $(TEMPLATE_VBOXR3EXE_LIBS) nsl
6480endif
6481
6482#
6483# Template for building normal R3 programs for the guest additions.
6484#
6485TEMPLATE_NewVBoxGuestR3Exe = VBox Guest Program w/ IPRT and VBGL.
6486TEMPLATE_NewVBoxGuestR3Exe_EXTENDS = VBOXGUESTR3EXE
6487TEMPLATE_NewVBoxGuestR3Exe_LIBS = \
6488 $(VBOX_LIB_IPRT_GUEST_R3) \
6489 $(VBOX_LIB_VBGL_R3) \
6490 $(VBOX_LIB_IPRT_GUEST_R3) \
6491 $(TEMPLATE_VBOXGUESTR3EXE_LIBS)
6492
6493#
6494# Template for building normal R3 programs for the guest additions, strict.
6495#
6496TEMPLATE_VBoxGuestR3Exe = VBox Guest Program w/ IPRT and VBGL.
6497TEMPLATE_VBoxGuestR3Exe_EXTENDS = NewVBoxGuestR3Exe
6498TEMPLATE_VBoxGuestR3Exe_EXTENDS_BY = appending
6499ifeq ($(KBUILD_TARGET),win)
6500 TEMPLATE_VBoxGuestR3Exe_CFLAGS += $(VBOX_VCC_WERR)
6501 TEMPLATE_VBoxGuestR3Exe_CXXFLAGS += $(VBOX_VCC_WERR)
6502 if1of ($(VBOX_VCC_TOOL_STEM), VCC120)
6503 # VBoxDrvInst.cpp(520) : warning C4313: 'wprintf' : '%d' in format string conflicts with argument 1 of type 'const TCHAR *' [false positive - buggy compiler?]
6504 TEMPLATE_VBoxGuestR3Exe_CXXFLAGS += -wd4313
6505 endif
6506 TEMPLATE_VBoxGuestR3Exe_LDFLAGS += $(VBOX_VCC_LD_WERR)
6507else ifndef VBOX_WITH_COMPATIBLE_LINUX_GUEST_PACKAGE
6508 TEMPLATE_VBoxGuestR3Exe_CFLAGS += $(VBOX_GCC_WERR)
6509 TEMPLATE_VBoxGuestR3Exe_CXXFLAGS += $(VBOX_GCC_WERR)
6510endif
6511
6512#
6513# Template for building R3 (dynamic) libraries for the guest additions.
6514#
6515TEMPLATE_VBOXGUESTR3DLL = VBox Guest User Dynamic Libraries
6516TEMPLATE_VBOXGUESTR3DLL_EXTENDS = VBOXGUESTR3EXE
6517## @todo add a INSTFUN that separates dlls and libs.
6518ifn1of ($(KBUILD_TARGET), darwin os2 win)
6519 TEMPLATE_VBOXGUESTR3DLL_DEFS = $(TEMPLATE_VBOXGUESTR3EXE_DEFS) PIC
6520 TEMPLATE_VBOXGUESTR3DLL_CFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_CFLAGS) -fPIC
6521 TEMPLATE_VBOXGUESTR3DLL_CXXFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS) -fPIC -fno-exceptions
6522 TEMPLATE_VBOXGUESTR3DLL_LDFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_LDFLAGS) -fPIC
6523endif
6524
6525#
6526# Template for building normal R3 (dynamic) libraries for the guest additions, allows warnings.
6527#
6528## @todo rename to VBoxGuestR3DllWarn
6529TEMPLATE_NewVBoxGuestR3Dll = VBox Guest User Dynamic Libraries w/ IPRT and VBGL.
6530TEMPLATE_NewVBoxGuestR3Dll_EXTENDS = VBOXGUESTR3DLL
6531TEMPLATE_NewVBoxGuestR3Dll_LIBS = \
6532 $(VBOX_LIB_IPRT_GUEST_R3_SHARED) \
6533 $(VBOX_LIB_VBGL_R3_SHARED) \
6534 $(VBOX_LIB_IPRT_GUEST_R3_SHARED) \
6535 $(TEMPLATE_VBOXGUESTR3DLL_LIBS)
6536
6537#
6538# Template for building normal R3 (dynamic) libraries for the guest additions, strict.
6539#
6540TEMPLATE_VBoxGuestR3Dll = VBox Guest User Dynamic Libraries w/ IPRT and VBGL.
6541TEMPLATE_VBoxGuestR3Dll_EXTENDS = NewVBoxGuestR3Dll
6542TEMPLATE_VBoxGuestR3Dll_EXTENDS_BY = appending
6543ifeq ($(KBUILD_TARGET),win)
6544 TEMPLATE_VBoxGuestR3Dll_CFLAGS += $(VBOX_VCC_WERR)
6545 TEMPLATE_VBoxGuestR3Dll_CXXFLAGS += $(VBOX_VCC_WERR)
6546 TEMPLATE_VBoxGuestR3Dll_LDFLAGS += $(VBOX_VCC_LD_WERR)
6547else ifndef VBOX_WITH_COMPATIBLE_LINUX_GUEST_PACKAGE
6548 TEMPLATE_VBoxGuestR3Dll_CFLAGS += $(VBOX_GCC_WERR)
6549 TEMPLATE_VBoxGuestR3Dll_CXXFLAGS += $(VBOX_GCC_WERR)
6550endif
6551
6552#
6553# Template for building normal R3 (dynamic) libraries for the guest additions with Visual C++ 2013 or later, strict.
6554#
6555TEMPLATE_NewerVccVBoxGuestR3Dll = VBoxGuestR3Dll with the newer Visual C++ version (2013 or later).
6556TEMPLATE_NewerVccVBoxGuestR3Dll_EXTENDS = VBoxGuestR3Dll
6557ifeq ($(KBUILD_TARGET),win)
6558 TEMPLATE_NewerVccVBoxGuestR3Dll_TOOL.win.x86 = $(VBOX_NEWER_VCC_TOOL_STEM)X86
6559 TEMPLATE_NewerVccVBoxGuestR3Dll_TOOL.win.amd64 = $(VBOX_NEWER_VCC_TOOL_STEM)AMD64
6560 TEMPLATE_NewerVccVBoxGuestR3Dll_CXXFLAGS = \
6561 $(filter-out $(VBOX_VCC_WARN_ALL) $(VBOX_VCC_WERR), $(TEMPLATE_VBoxGuestR3Dll_CXXFLAGS)) \
6562 $(VBOX_NEWER_VCC_WARN_ALL) $(VBOX_VCC_WERR)
6563 TEMPLATE_NewerVccVBoxGuestR3Dll_CFLAGS = $(TEMPLATE_NewerVccVBoxGuestR3Dll_CXXFLAGS)
6564 TEMPLATE_NewerVccVBoxGuestR3Dll_LIBS.x86 = \
6565 $(subst $(PATH_TOOL_$(TEMPLATE_VBoxGuestR3Dll_TOOL.win.x86)_LIB),$(PATH_TOOL_$(TEMPLATE_NewerVccVBoxGuestR3Dll_TOOL.win.x86)_LIB), $(TEMPLATE_VBoxGuestR3Dll_LIBS.x86))
6566 TEMPLATE_NewerVccVBoxGuestR3Dll_LIBS.amd64 = \
6567 $(subst $(PATH_TOOL_$(TEMPLATE_VBoxGuestR3Dll_TOOL.win.amd64)_LIB),$(PATH_TOOL_$(TEMPLATE_NewerVccVBoxGuestR3Dll_TOOL.win.amd64)_LIB), $(TEMPLATE_VBoxGuestR3Dll_LIBS.amd64))
6568endif
6569
6570#
6571# Template for building R3 (static) libraries for the guest additions, allows warnings.
6572#
6573## @todo rename to VBoxGuestR3LibWarn.
6574TEMPLATE_VBOXGUESTR3LIB = VBox Guest User Libraries
6575TEMPLATE_VBOXGUESTR3LIB_EXTENDS = VBOXGUESTR3EXE
6576TEMPLATE_VBOXGUESTR3LIB_INST = $(INST_ADDITIONS_LIB)
6577
6578#
6579# Template for building R3 (static) libraries for the guest additions, strict.
6580#
6581TEMPLATE_VBoxGuestR3Lib = VBox Guest User Dynamic Libraries w/ IPRT and VBGL.
6582TEMPLATE_VBoxGuestR3Lib_EXTENDS = VBOXGUESTR3LIB
6583TEMPLATE_VBoxGuestR3Lib_EXTENDS_BY = appending
6584ifeq ($(KBUILD_TARGET),win)
6585 TEMPLATE_VBoxGuestR3Lib_CFLAGS += $(VBOX_VCC_WERR)
6586 TEMPLATE_VBoxGuestR3Lib_CXXFLAGS += $(VBOX_VCC_WERR)
6587 TEMPLATE_VBoxGuestR3Lib_LDFLAGS += $(VBOX_VCC_LD_WERR)
6588else ifndef VBOX_WITH_COMPATIBLE_LINUX_GUEST_PACKAGE
6589 TEMPLATE_VBoxGuestR3Lib_CFLAGS += $(VBOX_GCC_WERR)
6590 TEMPLATE_VBoxGuestR3Lib_CXXFLAGS += $(VBOX_GCC_WERR)
6591endif
6592
6593#
6594# Template for building R3 programs for the guest additions (no -pedantic)
6595#
6596TEMPLATE_VBOXGUESTR3NPEXE = VBox Guest Program Non-pedantic
6597TEMPLATE_VBOXGUESTR3NPEXE_EXTENDS = VBOXGUESTR3EXE
6598ifneq ($(KBUILD_TARGET),win) # gcc only
6599 TEMPLATE_VBOXGUESTR3NPEXE_CXXFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_CXX),$(TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS)) \
6600 -Wno-sign-compare
6601 TEMPLATE_VBOXGUESTR3NPEXE_CFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_C) ,$(TEMPLATE_VBOXGUESTR3EXE_CFLAGS)) \
6602 -Wno-sign-compare
6603endif
6604
6605#
6606# Template for building R3 (dynamic) libraries for the guest additions (no -pedantic)
6607#
6608TEMPLATE_VBOXGUESTR3NPDLL = VBox Guest User Dynamic Libraries Non-pedantic
6609TEMPLATE_VBOXGUESTR3NPDLL_EXTENDS = VBOXGUESTR3NPEXE
6610## @todo add a INSTFUN that separates dlls and libs.
6611ifn1of ($(KBUILD_TARGET), darwin os2 win)
6612 TEMPLATE_VBOXGUESTR3NPDLL_DEFS = $(TEMPLATE_VBOXGUESTR3NPEXE_DEFS) PIC
6613 TEMPLATE_VBOXGUESTR3NPDLL_CFLAGS = $(TEMPLATE_VBOXGUESTR3NPEXE_CFLAGS) -fPIC
6614 TEMPLATE_VBOXGUESTR3NPDLL_CXXFLAGS = $(TEMPLATE_VBOXGUESTR3NPEXE_CXXFLAGS) -fPIC -fno-exceptions
6615 TEMPLATE_VBOXGUESTR3NPDLL_LDFLAGS = $(TEMPLATE_VBOXGUESTR3NPEXE_LDFLAGS) -fPIC
6616endif
6617
6618#
6619# Template for building R3 (static) libraries for the guest additions (no -pedantic)
6620#
6621TEMPLATE_VBOXGUESTR3NPLIB = VBox Guest User Libraries Non-pedantic
6622TEMPLATE_VBOXGUESTR3NPLIB_EXTENDS = VBOXGUESTR3NPEXE
6623TEMPLATE_VBOXGUESTR3NPLIB_INST = $(INST_ADDITIONS_LIB)
6624
6625
6626#
6627# Template for XFree86 guest modules (relocatable module, i.e. sysmod).
6628# This mostly about zapping the VBOXR3EXE linker flags and libraries.
6629#
6630TEMPLATE_VBOXGUESTR3XF86MOD = VBox XFree86 Guest Module
6631TEMPLATE_VBOXGUESTR3XF86MOD_EXTENDS = VBOXGUESTR3EXE
6632TEMPLATE_VBOXGUESTR3XF86MOD_LIBS.$(KBUILD_TYPE) = $(NO_SUCH_VARIABLE)
6633TEMPLATE_VBOXGUESTR3XF86MOD_LIBS.$(KBUILD_TARGET) = $(NO_SUCH_VARIABLE)
6634TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.$(KBUILD_TARGET) = $(NO_SUCH_VARIABLE)
6635TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.$(KBUILD_TYPE) = $(NO_SUCH_VARIABLE)
6636TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS = -r
6637if1of ($(KBUILD_TARGET), dragonfly freebsd linux netbsd openbsd) # the gnu ld guys.
6638 TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.release = -S
6639 TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.x86 = -m elf_i386
6640 TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.amd64 = -m elf_x86_64
6641endif
6642TEMPLATE_VBOXGUESTR3XF86MOD_CFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_CFLAGS) -fno-pie -fno-merge-constants -std=c99 -ffreestanding
6643TEMPLATE_VBOXGUESTR3XF86MOD_CXXFLAGS= $(TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS) -fno-pie -fno-merge-constants -ffreestanding
6644ifndef VBOX_WITH_COMPATIBLE_LINUX_GUEST_PACKAGE
6645 TEMPLATE_VBOXGUESTR3XF86MOD_CFLAGS += $(VBOX_GCC_fno-stack-protector)
6646 TEMPLATE_VBOXGUESTR3XF86MOD_CXXFLAGS += $(VBOX_GCC_fno-stack-protector)
6647endif
6648TEMPLATE_VBOXGUESTR3XF86MOD_SYSSUFF = .o
6649TEMPLATE_VBOXGUESTR3XF86MOD_LIBS = \
6650 $(VBOX_LIB_VBGL_R3_XFREE86)
6651TEMPLATE_VBOXGUESTR3XF86MOD_DEFS = $(TEMPLATE_VBOXGUESTR3DLL_DEFS) VBOX_GUESTR3XF86MOD RTMEM_NO_WRAP_TO_EF_APIS
6652
6653
6654#
6655# Template for XFree86 guest libraries.
6656#
6657TEMPLATE_VBOXGUESTR3XF86LIB = VBox XFree86 Guest Library
6658TEMPLATE_VBOXGUESTR3XF86LIB_EXTENDS = VBOXGUESTR3XF86MOD
6659TEMPLATE_VBOXGUESTR3XF86LIB_INST = $(INST_ADDITIONS_LIB)
6660
6661
6662#
6663# Template for X.org guest modules (shared libs).
6664# This mostly about zapping unnecessary LIBS from VBOXGUESTR3DLL and adding some flags.
6665#
6666TEMPLATE_VBOXGUESTR3XORGMOD = VBox X.org Guest Module
6667TEMPLATE_VBOXGUESTR3XORGMOD_EXTENDS = VBOXGUESTR3DLL
6668TEMPLATE_VBOXGUESTR3XORGMOD_LIBS.$(KBUILD_TYPE) = $(NO_SUCH_VARIABLE)
6669TEMPLATE_VBOXGUESTR3XORGMOD_LIBS.$(KBUILD_TARGET) = $(NO_SUCH_VARIABLE)
6670TEMPLATE_VBOXGUESTR3XORGMOD_CFLAGS = $(TEMPLATE_VBOXGUESTR3DLL_CFLAGS) -std=c99
6671if1of ($(KBUILD_TARGET), linux)
6672 TEMPLATE_VBOXGUESTR3XORGMOD_CFLAGS += -Wno-conversion -Wno-unused-parameter
6673 ifndef VBOX_WITH_COMPATIBLE_LINUX_GUEST_PACKAGE
6674 TEMPLATE_VBOXGUESTR3XORGMOD_CFLAGS += $(VBOX_GCC_Wno-variadic-macros)
6675 endif
6676endif
6677TEMPLATE_VBOXGUESTR3XORGMOD_DEFS = $(TEMPLATE_VBOXGUESTR3DLL_DEFS) VBOX_GUESTR3XORGMOD RTMEM_NO_WRAP_TO_EF_APIS
6678ifeq ($(KBUILD_TARGET_ARCH),amd64)
6679 TEMPLATE_VBOXGUESTR3XORGMOD_DEFS += _XSERVER64
6680endif
6681TEMPLATE_VBOXGUESTR3XORGMOD_LIBS = \
6682 $(VBOX_LIB_VBGL_R3_XORG)
6683TEMPLATE_VBOXGUESTR3XORGMOD_LIBS.freebsd += \
6684 iconv
6685
6686
6687#
6688# Template for X.Org guest libraries.
6689#
6690TEMPLATE_VBOXGUESTR3XORGLIB = VBox X.Org Guest Library
6691TEMPLATE_VBOXGUESTR3XORGLIB_EXTENDS = VBOXGUESTR3XORGMOD
6692TEMPLATE_VBOXGUESTR3XORGLIB_INST = $(INST_ADDITIONS_LIB)
6693
6694
6695#
6696# Template for building R0 drivers for the guest additions.
6697#
6698TEMPLATE_VBOXGUESTR0 = VBox Guest Driver
6699TEMPLATE_VBOXGUESTR0_EXTENDS = VBOXR0DRV
6700TEMPLATE_VBOXGUESTR0_INST = $(INST_ADDITIONS)
6701TEMPLATE_VBOXGUESTR0_SDKS.win.x86 = ReorderCompilerIncs $(VBOX_WINDDK_GST) $(VBOX_WINPSDK_GST)INCS
6702TEMPLATE_VBOXGUESTR0_SDKS.win.amd64 = ReorderCompilerIncs $(VBOX_WINDDK_GST) $(VBOX_WINPSDK_GST)INCS
6703TEMPLATE_VBOXGUESTR0_LIBS.win.x86 = \
6704 $(PATH_SDK_$(VBOX_WINDDK)_LIB)/int64.lib
6705TEMPLATE_VBOXGUESTR0_DEFS = $(TEMPLATE_VBOXR0DRV_DEFS) IN_GUEST IN_GUEST_R0
6706TEMPLATE_VBOXGUESTR0_DEFS.linux = RT_NO_EXPORT_SYMBOL
6707ifeq ($(KBUILD_TARGET),solaris)
6708 TEMPLATE_VBOXGUESTR0_LDFLAGS = -r -dy
6709endif
6710ifn1of (darwin os2 win, $(KBUILD_TARGET))
6711 TEMPLATE_VBOXGUESTR0_CFLAGS = $(patsubst %/VBox/SUPDrvMangling.h,%/VBox/VBoxGuestMangling.h,$(TEMPLATE_VBOXR0DRV_CFLAGS))
6712 TEMPLATE_VBOXGUESTR0_CXXFLAGS = $(patsubst %/VBox/SUPDrvMangling.h,%/VBox/VBoxGuestMangling.h,$(TEMPLATE_VBOXR0DRV_CXXFLAGS))
6713endif
6714
6715#
6716# Template for building R0 libraries for the guest additions.
6717#
6718TEMPLATE_VBOXGUESTR0LIB = VBox Guest Driver Libraries
6719TEMPLATE_VBOXGUESTR0LIB_EXTENDS = VBOXGUESTR0
6720TEMPLATE_VBOXGUESTR0LIB_INSTTYPE = stage
6721TEMPLATE_VBOXGUESTR0LIB_INSTTYPE.linux = stage
6722TEMPLATE_VBOXGUESTR0LIB_INST = $(INST_ADDITIONS_LIB)
6723ifeq ($(KBUILD_TARGET),haiku)
6724 TEMPLATE_VBOXGUESTR0LIB_LDFLAGS = -r -dy
6725endif
6726
6727#
6728# Template for building OpenGL host dlls.
6729#
6730TEMPLATE_VBOXCROGLR3HOSTDLL = VBox OpenGL Host DLLs
6731TEMPLATE_VBOXCROGLR3HOSTDLL_EXTENDS := $(if-expr "$(KBUILD_TARGET)" == "win",VBOXR3,VBOXR3NP)
6732TEMPLATE_VBOXCROGLR3HOSTDLL_EXTENDS_BY = prepending
6733TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS = CHROMIUM_THREADSAFE VBOX_WITH_HGCM UNPACKS
6734TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS.win = _WIN32_WINNT=0x0500 WINDOWS=1
6735TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS.linux = Linux=1 _GNU_SOURCE
6736TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS.solaris = SunOS=1 _GNU_SOURCE #GLEXT_64_TYPES_DEFINED
6737TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS.darwin = DARWIN=1 GL_GLEXT_LEGACY _GNU_SOURCE VBOX_WITH_COCOA_QT
6738TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS.freebsd = FreeBSD=1 _GNU_SOURCE
6739TEMPLATE_VBOXCROGLR3HOSTDLL_INCS = $(VBOX_PATH_CROGL_INCLUDE) $(VBOX_PATH_CROGL_GENFILES)
6740TEMPLATE_VBOXCROGLR3HOSTDLL_SDKS.darwin = DARWIN-OPENGL
6741TEMPLATE_VBOXCROGLR3HOSTDLL_LDFLAGS.darwin = -framework AppKit
6742TEMPLATE_VBOXCROGLR3HOSTDLL_LDFLAGS.darwin += \
6743 -framework OpenGL \
6744 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
6745 -compatibility_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
6746TEMPLATE_VBOXCROGLR3HOSTDLL_LDFLAGS.linux = -Wl,--no-as-needed
6747TEMPLATE_VBOXCROGLR3HOSTDLL_BLDDIRS = $(VBOX_PATH_CROGL_GENFILES)/
6748ifeq ($(KBUILD_TARGET),darwin)
6749 TEMPLATE_VBOXCROGLR3HOSTDLL_CFLAGS = $(TEMPLATE_VBOXR3NP_CFLAGS) -Wno-deprecated-declarations
6750 TEMPLATE_VBOXCROGLR3HOSTDLL_CXXFLAGS = $(TEMPLATE_VBOXR3NP_CXXFLAGS) -Wno-deprecated-declarations
6751 TEMPLATE_VBOXCROGLR3HOSTDLL_OBJCFLAGS = $(TEMPLATE_VBOXR3NP_OBJCFLAGS) -Wno-deprecated-declarations
6752else ifeq ($(KBUILD_TARGET),win)
6753 # -wd4255: cr_spu.h(146) : warning C4255: 'wglGetCurrentContextFunc_t' : no function prototype given: converting '()' to '(void)'
6754 # -wd4296: udptcpip.c(662) : warning C4296: '>=' : expression is always true
6755 # -wd4245: udptcpip.c(174) : warning C4245: '=' : conversion from 'int' to 'CRSocket', signed/unsigned mismatch
6756 # -wd4668: tcpip.c(961) : warning C4668: 'CRAPPFAKER_SHOULD_DIE' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif'
6757 # -wd4005: v7.1\include\sal_supp.h(57) : warning C4005: '__useHeader' : macro redefinition
6758 # -wd4057: state_lists.c(196) : warning C4057: 'function' : 'GLint *' differs in indirection to slightly different base types from 'GLenum *'
6759 # -wd4389: renderspu.c(750) : warning C4389: '!=' : signed/unsigned mismatch
6760 # -wd4054: renderspu_wgl.c(281) : warning C4054: 'type cast' : from function pointer 'HWND (__cdecl *)()' to data pointer 'void *'
6761 # -wd4055: renderspu.c(1553) : warning C4055: 'type cast' : from data pointer 'const GLvoid *' to function pointer 'PFNVCRSERVER_CLIENT_CALLOUT'
6762 # -wd4312: renderspu_wgl.c(1420) : warning C4312: 'type cast' : conversion from 'GLint' to 'HDC' of greater size [TODO: check this one out]
6763 # -wd4305: renderspu_wgl.c(1118) : warning C4305: 'type cast' : truncation from 'uint64_t' to 'void *' [TODO: check this one out]
6764 # -wd4306: renderspu_wgl.c(1420) : warning C4306: 'type cast' : conversion from 'GLint' to 'HDC' of greater size [TODO: check this one out]
6765 # -wd4189: server_config.c(111) : warning C4189: 'my_rank' : local variable is initialized but not referenced
6766 # -wd4100: vboxhgcm.c(1365) : warning C4100: 'conn' : unreferenced formal parameter
6767 TEMPLATE_VBOXCROGLR3HOSTDLL_CFLAGS = $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3HOSTDLL_EXTENDS)_CFLAGS) \
6768 -wd4255 -wd4296 -wd4245 -wd4668 -wd4005 -wd4057 -wd4389 -wd4054 -wd4055 -wd4312 -wd4305 -wd4306 -wd4189 -wd4100
6769 TEMPLATE_VBOXCROGLR3HOSTDLL_CXXFLAGS = $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3HOSTDLL_EXTENDS)_CXXFLAGS) \
6770 -wd4245 -wd4389 -wd4189 -wd4100
6771endif
6772
6773#
6774# Template for building OpenGL host libraries.
6775#
6776TEMPLATE_VBOXCROGLR3HOSTLIB = VBox OpenGL Host Libraries
6777TEMPLATE_VBOXCROGLR3HOSTLIB_EXTENDS = VBOXCROGLR3HOSTDLL
6778TEMPLATE_VBOXCROGLR3HOSTLIB_INST = $(INST_LIB)
6779
6780#
6781# Template for building OpenGL guest dlls.
6782#
6783TEMPLATE_VBOXCROGLR3GUESTDLL = VBox OpenGL Guest DLLs
6784if "$(KBUILD_TARGET)" == "win" || defined(VBOX_WITH_MASOCHISTIC_WARNINGS) || defined(VBOX_WITH_NO_GCC_WARNING_POLICY) ## @todo use VBoxGuestR3Dll everywhere
6785TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS = VBoxGuestR3Dll
6786else
6787TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS = VBOXGUESTR3NPDLL
6788endif
6789TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS = $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_DEFS) CHROMIUM_THREADSAFE VBOX_WITH_HGCM
6790TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS.win = $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_DEFS.win) WINDOWS=1
6791TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS.linux = $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_DEFS.linux) Linux=1 _GNU_SOURCE
6792TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS.solaris = $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_DEFS.solaris) SunOS=1 _GNU_SOURCE #GLEXT_64_TYPES_DEFINED
6793TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS.darwin = $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_DEFS.darwin) DARWIN=1 GL_GLEXT_LEGACY _GNU_SOURCE VBOX_WITH_COCOA_QT
6794TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS.freebsd = $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_DEFS.freebsd) FreeBSD=1 _GNU_SOURCE
6795TEMPLATE_VBOXCROGLR3GUESTDLL_INCS = $(VBOX_PATH_CROGL_INCLUDE) $(VBOX_PATH_CROGL_GENFILES) $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_INCS)
6796TEMPLATE_VBOXCROGLR3GUESTDLL_SDKS.darwin = DARWIN-OPENGL $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_SDKS)
6797ifeq ($(KBUILD_TARGET),win)
6798 # -wd4255: cr_spu.h(146) : warning C4255: 'wglGetCurrentContextFunc_t' : no function prototype given: converting '()' to '(void)'
6799 # -wd4296: udptcpip.c(662) : warning C4296: '>=' : expression is always true
6800 # -wd4245: udptcpip.c(174) : warning C4245: '=' : conversion from 'int' to 'CRSocket', signed/unsigned mismatch
6801 # -wd4668: tcpip.c(961) : warning C4668: 'CRAPPFAKER_SHOULD_DIE' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif'
6802 # -wd4005: v7.1\include\sal_supp.h(57) : warning C4005: '__useHeader' : macro redefinition
6803 # -wd4057: state_lists.c(196) : warning C4057: 'function' : 'GLint *' differs in indirection to slightly different base types from 'GLenum *'
6804 # -wd4311: wgl.c(183) : warning C4311: 'type cast' : pointer truncation from 'HGLRC' to 'unsigned long' [TODO: fix source code]
6805 # -wd4312: wgl.c(218) : warning C4312: 'type cast' : conversion from 'unsigned long' to 'HGLRC' of greater size [TODO: fix source code]
6806 # -wd4305: icd_drv.c(325) : warning C4305: 'type cast' : truncation from 'HGLRC' to 'unsigned long'
6807 # -wd4306: icd_drv.c(191) : warning C4306: 'type cast' : conversion from 'unsigned long' to 'HGLRC' of greater size
6808 # -wd4054: feedbackspu.c(530) : warning C4054: 'type cast' : from function pointer 'SPUGenericFunction' to data pointer 'void *'
6809 # -wd4189: load.c(1273) : warning C4189: 'pContextRecord' : local variable is initialized but not referenced
6810 # -wd4100: vboxhgcm.c(1365) : warning C4100: 'conn' : unreferenced formal parameter
6811 TEMPLATE_VBOXCROGLR3GUESTDLL_CFLAGS = $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_CFLAGS) \
6812 -wd4255 -wd4296 -wd4245 -wd4668 -wd4005 -wd4057 -wd4311 -wd4312 -wd4305 -wd4306 -wd4054 -wd4189 -wd4100
6813else
6814 TEMPLATE_VBOXCROGLR3GUESTDLL_CFLAGS = $(filter-out -pedantic, $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_CFLAGS)) \
6815 $(if-expr !defined(VBOX_WITH_COMPATIBLE_LINUX_GUEST_PACKAGE),$(VBOX_GCC_Wno-overlength-strings),)
6816 TEMPLATE_VBOXCROGLR3GUESTDLL_CXXFLAGS = $(filter-out -pedantic, $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_CXXFLAGS))
6817endif
6818TEMPLATE_VBOXCROGLR3GUESTDLL_LDFLAGS.darwin = $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_LDFLAGS.darwin)\
6819 -framework AppKit \
6820 -framework OpenGL \
6821 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
6822 -compatibility_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
6823TEMPLATE_VBOXCROGLR3GUESTDLL_BLDDIRS = $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_BLDDIRS) $(VBOX_PATH_CROGL_GENFILES)/
6824
6825#
6826# Template for building OpenGL guest libraries.
6827#
6828TEMPLATE_VBOXCROGLR3GUESTLIB = VBox OpenGL Guest Libraries
6829TEMPLATE_VBOXCROGLR3GUESTLIB_EXTENDS = VBOXCROGLR3GUESTDLL
6830TEMPLATE_VBOXCROGLR3GUESTLIB_INST = $(INST_ADDITIONS_LIB)
6831
6832
6833#
6834# Template for building Mesa guest library, Linux-only so far.
6835#
6836TEMPLATE_VBOXMESAR3GUESTLIB = VBox Mesa Guest Library
6837TEMPLATE_VBOXMESAR3GUESTLIB_EXTENDS = VBOXCROGLR3GUESTDLL
6838TEMPLATE_VBOXMESAR3GUESTLIB_INST = $(INST_ADDITIONS_LIB)
6839TEMPLATE_VBOXMESAR3GUESTLIB_DEFS.linux = Linux=1
6840TEMPLATE_VBOXMESAR3GUESTLIB_DEFS.solaris = SunOS=1
6841TEMPLATE_VBOXMESAR3GUESTLIB_DEFS.darwin = DARWIN=1 GL_GLEXT_LEGACY
6842ifeq ($(KBUILD_TARGET),linux)
6843 TEMPLATE_VBOXMESAR3GUESTLIB_ASTOOL = $(TEMPLATE_VBOXCROGLR3GUESTDLL_TOOL)
6844 TEMPLATE_VBOXMESAR3GUESTLIB_ASFLAGS = $(NO_SUCH_VARIABLE)
6845 TEMPLATE_VBOXMESAR3GUESTLIB_ASFLAGS.x86 = -m32
6846 TEMPLATE_VBOXMESAR3GUESTLIB_ASFLAGS.amd64 = -m64
6847 TEMPLATE_VBOXMESAR3GUESTLIB_ASDEFS = $(NO_SUCH_VARIABLE)
6848endif
6849
6850
6851#
6852# Guest additions libraries (all static).
6853# The _MINI and _SHARED are both compiled as PIC and intended for linking into a .so/.dll/.dylib.
6854#
6855VBOX_LIB_IPRT_GUEST_R3 = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR3$(VBOX_SUFF_LIB)
6856VBOX_LIB_IPRT_GUEST_R3_SHARED = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR3Shared$(VBOX_SUFF_LIB)
6857VBOX_LIB_IPRT_GUEST_R0 = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR0$(VBOX_SUFF_LIB)
6858ifeq ($(KBUILD_TARGET_ARCH),x86)
6859 VBOX_LIB_IPRT_GUEST_R0_NT4 = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR0NT4$(VBOX_SUFF_LIB)
6860else
6861 VBOX_LIB_IPRT_GUEST_R0_NT4 = $(VBOX_LIB_IPRT_GUEST_R0)
6862endif
6863VBOX_LIB_VBGL_R3 = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3Lib$(VBOX_SUFF_LIB) \
6864 $(if $(VBOX_WITH_DRAG_AND_DROP),$(VBOX_PATH_ADDITIONS_LIB)/VBoxDnDGuestR3Lib$(VBOX_SUFF_LIB))
6865VBOX_LIB_VBGL_R3_XFREE86 = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3LibXFree86$(VBOX_SUFF_LIB)
6866VBOX_LIB_VBGL_R3_XORG = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3LibXOrg$(VBOX_SUFF_LIB)
6867VBOX_LIB_VBGL_R3_SHARED = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3LibShared$(VBOX_SUFF_LIB)
6868VBOX_LIB_VBGL_R0BASE = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR0LibBase$(VBOX_SUFF_LIB)
6869VBOX_LIB_VBGL_R0 = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR0Lib$(VBOX_SUFF_LIB)
6870ifeq ($(KBUILD_TARGET),x86)
6871 VBOX_LIB_IPRT_GUEST_R3_X86 = $(VBOX_LIB_IPRT_GUEST_R3)
6872 VBOX_LIB_IPRT_GUEST_R3_SHARED_X86 = $(VBOX_LIB_IPRT_GUEST_R3_SHARED)
6873 VBOX_LIB_VBGL_R3_X86 = $(VBOX_LIB_VBGL_R3)
6874 VBOX_LIB_VBGL_R3_SHARED_X86 = $(VBOX_LIB_VBGL_R3_SHARED)
6875else
6876 VBOX_LIB_IPRT_GUEST_R3_X86 = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR3-x86$(VBOX_SUFF_LIB)
6877 VBOX_LIB_IPRT_GUEST_R3_SHARED_X86 = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR3Shared-x86$(VBOX_SUFF_LIB)
6878 VBOX_LIB_VBGL_R3_X86 = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3Lib-x86$(VBOX_SUFF_LIB)
6879 VBOX_LIB_VBGL_R3_SHARED_X86 = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3LibShared-x86$(VBOX_SUFF_LIB)
6880endif
6881
6882
6883#
6884# Check the publisher and version string.
6885#
6886# We are being very strict because the version string is visible in various
6887# APIs and logs and must be machine readable.
6888#
6889VBOX_VERSION_COMP_VALID_CHAR_SET = ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz()[]{}+-.,
6890ifneq ($(VBOX_BUILD_PUBLISHER),)
6891 if $(length $(VBOX_BUILD_PUBLISHER)) > 10
6892 $(error VBox: VBOX_BUILD_PUBLISHER must not be longer than 10 characters!)
6893 endif
6894 if "$(substr $(VBOX_BUILD_PUBLISHER), 1, 1)" != "_"
6895 $(error VBox: VBOX_BUILD_PUBLISHER must start with an underscore!)
6896 endif
6897 if "$(translate $(substr $(VBOX_BUILD_PUBLISHER),2),$(VBOX_VERSION_COMP_VALID_CHAR_SET),)" != ""
6898 $(error VBox: VBOX_BUILD_PUBLISHER='$(VBOX_BUILD_PUBLISHER)' contains bad characters! Valid set is:$(NLTAB)$(VBOX_VERSION_COMP_VALID_CHAR_SET))
6899 endif
6900endif
6901
6902if $(words $(VBOX_VERSION_STRING)) != 1
6903 $(error VBox: VBOX_VERSION_STRING='$(VBOX_VERSION_STRING)' contains spaces or is empty.)
6904endif
6905if "$(subst __,-,$(VBOX_VERSION_STRING))" != "$(VBOX_VERSION_STRING)"
6906 $(error VBox: VBOX_VERSION_STRING='$(VBOX_VERSION_STRING)' contains double underscores.)
6907endif
6908
6909VBOX_VER_TMP1 := $(subst _,$(SP),$(VBOX_VERSION_STRING))
6910
6911if $(words $(VBOX_VER_TMP1)) > 3
6912 $(error VBox: VBOX_VERSION_STRING='$(VBOX_VERSION_STRING)' contains too many parts (underscores), max 3!)
6913endif
6914if "$(translate $(word 1,$(VBOX_VER_TMP1)),0123456789,)" != ".."
6915 $(error VBox: The x.y.z part of VBOX_VERSION_STRING='$(VBOX_VERSION_STRING)' is malformed: '$(word 1,$(VBOX_VER_TMP1))')
6916endif
6917if "$(word 1,$(VBOX_VER_TMP1))" != "$(VBOX_VERSION_STRING_RAW)"
6918 $(error VBox: VBOX_VERSION_STRING='$(VBOX_VERSION_STRING)' does not start with VBOX_VERSION_STRING_RAW='$(VBOX_VERSION_STRING_RAW)')
6919endif
6920
6921if $(words $(VBOX_VER_TMP1)) == 3 || ($(words $(VBOX_VER_TMP1)) == 2 && "$(VBOX_BUILD_PUBLISHER)" == "")
6922 if "$(substr $(word 2,$(VBOX_VER_TMP1)),1,4)" == "BETA"
6923 VBOX_VER_TMP2 = 5
6924 else if "$(substr $(word 2,$(VBOX_VER_TMP1)),1,5)" == "ALPHA"
6925 VBOX_VER_TMP2 = 6
6926 else if "$(substr $(word 2,$(VBOX_VER_TMP1)),1,2)" == "RC"
6927 VBOX_VER_TMP2 = 3
6928 else
6929 $(error VBox: VBOX_VERSION_STRING='$(VBOX_VERSION_STRING)' uses an unknown build type: '$(word 2,$(VBOX_VER_TMP1))')
6930 endif
6931 if "$(translate $(substr $(word 2,$(VBOX_VER_TMP1)),$(VBOX_VER_TMP2)),0123456789)" != ""
6932 $(error VBox: VBOX_VERSION_STRING='$(VBOX_VERSION_STRING)' uses an unknown build type: '$(word 2,$(VBOX_VER_TMP1))')
6933 endif
6934endif
6935
6936VBOX_VER_TMP1 :=
6937VBOX_VER_TMP2 :=
6938
6939
6940#
6941# Two targets to coordinate version number changes properly. Note that the
6942# only way to get a really consistent build is to run 'kmk' in the top-level
6943# directory. If you don't run it there, you get a consistent sub-tree only.
6944#
6945VBOX_BAD_CHAR_SET = ,;:/\$(SP)$(TAB)$(HASH)=![]@%&''()*""<>?^{}|~
6946VBOX_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)-$(USERNAME),$(VBOX_BAD_CHAR_SET),,_)
6947VBOX_VERSION_HEADER = $(PATH_OUT)/version-generated.h
6948VBOX_VERSION_MK = $(PATH_OUT)/version-generated.mk
6949
6950$(VBOX_VERSION_STAMP): | $(PATH_ROOT)/Config.kmk
6951 $(call MSG_GENERATE,,$@)
6952 $(QUIET)$(MKDIR) -p $(@D)
6953 $(QUIET)$(RM) -f $(wildcard $(PATH_OUT)/version-stamp-*)
6954 $(QUIET)$(APPEND) $@ $(VBOX_VERSION_STRING)
6955
6956$(VBOX_VERSION_HEADER): $(VBOX_VERSION_STAMP)
6957 $(call MSG_GENERATE,,$@)
6958 $(QUIET)$(MKDIR) -p $(@D)
6959 $(QUIET)$(RM) -f $@ [email protected]
6960 $(QUIET)$(APPEND) [email protected] '#ifndef ___version_generated_h___'
6961 $(QUIET)$(APPEND) [email protected] '#define ___version_generated_h___'
6962 $(QUIET)$(APPEND) [email protected] ''
6963 $(QUIET)$(APPEND) [email protected] '#define VBOX_VERSION_MAJOR $(VBOX_VERSION_MAJOR)'
6964 $(QUIET)$(APPEND) [email protected] '#define VBOX_VERSION_MINOR $(VBOX_VERSION_MINOR)'
6965 $(QUIET)$(APPEND) [email protected] '#define VBOX_VERSION_BUILD $(VBOX_VERSION_BUILD)'
6966ifneq ($(VBOX_VERSION_PRERELEASE),)
6967 $(QUIET)$(APPEND) [email protected] '#define VBOX_VERSION_PRERELEASE "$(strip $(VBOX_VERSION_PRERELEASE))"'
6968endif
6969 $(QUIET)$(APPEND) [email protected] '#define VBOX_VERSION_STRING_RAW "$(VBOX_VERSION_STRING_RAW)"'
6970 $(QUIET)$(APPEND) [email protected] '#define VBOX_VERSION_STRING "$(VBOX_VERSION_STRING)"'
6971 $(QUIET)$(APPEND) [email protected] '#define VBOX_API_VERSION_STRING "$(VBOX_API_VERSION)"'
6972 $(QUIET)$(APPEND) [email protected] ''
6973ifdef VBOX_BUILD_SERVER_BUILD
6974 $(QUIET)$(APPEND) [email protected] '#define VBOX_BUILD_SERVER_BUILD 1'
6975else
6976 $(QUIET)$(APPEND) [email protected] '#define VBOX_PRIVATE_BUILD_DESC "Private build by $(USERNAME)"'
6977endif
6978 $(QUIET)$(APPEND) [email protected] ''
6979 $(QUIET)$(APPEND) [email protected] '#endif'
6980 $(QUIET)$(MV) -f [email protected] $@
6981
6982
6983VBOX_PACKAGE_HEADER = $(PATH_OUT)/package-generated.h
6984
6985$(VBOX_PACKAGE_HEADER):
6986 $(call MSG_GENERATE,,$@)
6987 $(QUIET)$(MKDIR) -p $(@D)
6988 $(QUIET)$(RM) -f $@ [email protected]
6989 $(QUIET)$(APPEND) [email protected] '#ifndef ___package_generated_h___'
6990 $(QUIET)$(APPEND) [email protected] '#define ___package_generated_h___'
6991 $(QUIET)$(APPEND) [email protected] ''
6992 $(QUIET)$(APPEND) [email protected] '#define VBOX_PACKAGE_STRING "$(VBOX_PACKAGE_STRING)"'
6993 $(QUIET)$(APPEND) [email protected] ''
6994 $(QUIET)$(APPEND) [email protected] '#endif'
6995 $(QUIET)$(MV) -f [email protected] $@
6996
6997VBOX_PRODUCT_HEADER = $(PATH_OUT)/product-generated.h
6998
6999$(VBOX_PRODUCT_HEADER): $(VBOX_VERSION_STAMP)
7000 $(call MSG_GENERATE,,$@)
7001 $(QUIET)$(MKDIR) -p $(@D)
7002 $(QUIET)$(RM) -f $@ [email protected]
7003 $(QUIET)$(APPEND) [email protected] '#ifndef ___product_generated_h___'
7004 $(QUIET)$(APPEND) [email protected] '#define ___product_generated_h___'
7005 $(QUIET)$(APPEND) [email protected] ''
7006 $(QUIET)$(APPEND) [email protected] '#define VBOX_VENDOR "$(VBOX_VENDOR)"'
7007 $(QUIET)$(APPEND) [email protected] '#define VBOX_VENDOR_SHORT "$(VBOX_VENDOR_SHORT)"'
7008 $(QUIET)$(APPEND) [email protected] '#define VBOX_PRODUCT "$(VBOX_PRODUCT)"'
7009 $(QUIET)$(APPEND) [email protected] '#define VBOX_BUILD_PUBLISHER "$(VBOX_BUILD_PUBLISHER)"'
7010 $(QUIET)$(APPEND) [email protected] '#define VBOX_C_YEAR "$(VBOX_C_YEAR)"'
7011 $(QUIET)$(APPEND) [email protected] ''
7012 $(QUIET)$(APPEND) [email protected] '#endif'
7013 $(QUIET)$(MV) -f [email protected] $@
7014
7015#
7016# Used for external makefiles which cannot include Config.kmk
7017#
7018$(VBOX_VERSION_MK): $(VBOX_VERSION_STAMP)
7019 $(call MSG_GENERATE,,$@)
7020 $(QUIET)$(RM) -f $@ [email protected]
7021 $(QUIET)$(MKDIR) -p $(@D)
7022 $(QUIET)$(APPEND) [email protected] 'VBOX_VERSION_MAJOR = $(VBOX_VERSION_MAJOR)'
7023 $(QUIET)$(APPEND) [email protected] 'VBOX_VERSION_MINOR = $(VBOX_VERSION_MINOR)'
7024 $(QUIET)$(APPEND) [email protected] 'VBOX_VERSION_BUILD = $(VBOX_VERSION_BUILD)'
7025 $(QUIET)$(APPEND) [email protected] 'VBOX_VERSION_STRING = $(VBOX_VERSION_STRING)'
7026ifneq ($(VBOX_VERSION_PRERELEASE),)
7027 $(QUIET)$(APPEND) [email protected] 'VBOX_VERSION_PRERELEASE = $(strip $(VBOX_VERSION_PRERELEASE))'
7028endif
7029 $(QUIET)$(APPEND) [email protected] 'VBOX_VENDOR = $(VBOX_VENDOR)'
7030 $(QUIET)$(APPEND) [email protected] 'VBOX_VENDOR_SHORT = $(VBOX_VENDOR_SHORT)'
7031 $(QUIET)$(APPEND) [email protected] 'VBOX_PRODUCT = $(VBOX_PRODUCT)'
7032 $(QUIET)$(APPEND) [email protected] 'VBOX_C_YEAR = $(VBOX_C_YEAR)'
7033ifdef VBOX_BUILD_SERVER_BUILD
7034 $(QUIET)$(APPEND) [email protected] 'VBOX_BUILD_SERVER_BUILD = 1'
7035else
7036 $(QUIET)$(APPEND) [email protected] 'VBOX_PRIVATE_BUILD_DESC = Private build by $(USERNAME)'
7037endif
7038 $(QUIET)$(MV) -f [email protected] $@
7039
7040if !defined(VBOX_OSE) && !defined(VBOX_NOINC_LICENSE_VER_KMK)
7041 if1of ($(KBUILD_TARGET), freebsd linux netbsd openbsd solaris)
7042 # VBOX_LICENSE_VER is used in several Makefiles
7043 VBOX_LICENSE_VER_KMK = $(PATH_OUT)/license-version.kmk
7044$(VBOX_LICENSE_VER_KMK): $(VBOX_BRAND_LICENSE_HTML)
7045 $(call MSG_GENERATE,,$(VBOX_LICENSE_VER_KMK))
7046 $(QUIET)$(MKDIR) -p $(@D)
7047 ifdef VBOX_BRAND_LICENSE_VER
7048 $(QUIET)$(RM) -f '$@'
7049 $(APPEND) '$@' 'VBOX_LICENSE_VER=$(VBOX_BRAND_LICENSE_VER)'
7050 else
7051 $(QUIET)$(SED) -e "s/.*License version \([0-9.]*\) *[,&].*/VBOX_LICENSE_VER=\1/;t;d" --output $@ $(VBOX_BRAND_LICENSE_HTML)
7052 endif
7053 -include $(VBOX_LICENSE_VER_KMK)
7054 ifdef VBOX_LICENSE_VER
7055 VBOX_LICENSE_FILES = \
7056 License-$(VBOX_LICENSE_VER).html \
7057 $(foreach f,$(VBOX_INSTALLER_ADD_LANGUAGES),License-$(VBOX_LICENSE_VER)-$(f).html)
7058 VBOX_LICENSE_BINS = $(addprefix $(PATH_STAGE_BIN)/,$(VBOX_LICENSE_FILES))
7059 endif
7060 endif
7061endif
7062
7063
7064ifndef VBOX_NOINC_MISC
7065# Force building of the version header file as the first thing anywhere in
7066# the tree. This eliminates the need for manual dependencies on it.
7067## @todo there gotta be a better way of doing this.
7068Makefile.kmk: | $(VBOX_VERSION_HEADER) $(VBOX_VERSION_MK) $(VBOX_PRODUCT_HEADER) $(VBOX_PACKAGE_HEADER)
7069endif
7070
7071
7072#
7073# Subversion tree revision.
7074#
7075# The VBOX_SVN_REV contains our best guess. Use svn info on the root of the
7076# tree to determine this it if .svn/wc.db or .svn/entries is found (the former
7077# also up to two directory levels higher to allow for checkouts of the entire
7078# repository), otherwise fall back on the Config.kmk revision.
7079#
7080# Makefile rules using this information shall list $(VBOX_SVN_REV_KMK) as a
7081# prerequisite.
7082#
7083SVN ?= svn$(HOSTSUFF_EXE)
7084VBOX_SVN_REV_KMK = $(PATH_OUT)/revision.kmk
7085ifndef VBOX_SVN_REV
7086 VBOX_SVN_REV_FALLBACK := $(patsubst %:,, $Rev: 69569 $ )
7087 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))
7088 ifeq ($(which $(SVN)),)
7089 VBOX_SVN_DEP :=
7090 endif
7091
7092# Rule for generating a timestamp and updating the real thing on change.
7093$(VBOX_SVN_REV_KMK).ts +| $(VBOX_SVN_REV_KMK): $(if $(VBOX_SVN_DEP), $(VBOX_SVN_DEP), $(PATH_ROOT)/Config.kmk)
7094 $(call MSG_GENERATE,,$(VBOX_SVN_REV_KMK))
7095 $(QUIET)$(RM) -f $@ [email protected]
7096 $(QUIET)$(MKDIR) -p $(@D)
7097 ifneq ($(VBOX_SVN_DEP),)
7098 $(REDIRECT) -E 'LC_ALL=C' -wo [email protected] -- $(SVN) info $(PATH_ROOT)
7099 $(SED) -e '/^Last Changed Rev/!d' -e 's/Last Changed Rev\: */export VBOX_SVN_REV=/' --output $@ [email protected]
7100 $(QUIET)$(RM) -f [email protected]
7101 else
7102 $(QUIET)$(APPEND) $@ 'export VBOX_SVN_REV=$(VBOX_SVN_REV_FALLBACK)'
7103 endif
7104 $(QUIET)$(CP) --changed -fv $@ $(VBOX_SVN_REV_KMK)
7105
7106 ifndef VBOX_NOINC_SVN_REV_KMK
7107 include $(VBOX_SVN_REV_KMK)
7108 endif
7109else
7110# allow to overwrite VBOX_SVN_REV externally (mainly for building .debs/.rpms)
7111$(VBOX_SVN_REV_KMK):
7112 $(call MSG_GENERATE,,$(VBOX_SVN_REV_KMK))
7113 $(QUIET)$(RM) -f $@
7114 $(QUIET)$(MKDIR) -p $(@D)
7115 $(QUIET)$(APPEND) $@ 'export VBOX_SVN_REV=$(VBOX_SVN_REV)'
7116 $(QUIET)echo '* $(VBOX_SVN_REV_KMK) was externally overwritten:'
7117 $(QUIET)$(CAT) $(VBOX_SVN_REV_KMK)
7118endif
7119
7120# only needed for VBoxGuest for Linux/FreeBSD guests
7121VBOX_SVN_REV_HEADER = $(PATH_OUT)/revision-generated.h
7122$(VBOX_SVN_REV_HEADER): $(VBOX_SVN_REV_KMK)
7123 $(call MSG_GENERATE,,$@)
7124 $(QUIET)$(RM) -f $@ [email protected]
7125 $(QUIET)$(MKDIR) -p $(@D)
7126 $(QUIET)$(APPEND) [email protected] '#define VBOX_SVN_REV $(VBOX_SVN_REV)'
7127 $(QUIET)$(MV) -f [email protected] $@
7128
7129#
7130# Shared definitions of the XIDL file to use as a source for
7131# generating various other files (VBoxSVC, webservice, docs, front-ends, ...)
7132#
7133
7134# Real XIDL source file; from this we strip the <desc> elements to generate
7135# a second XIDL file, from which the COM/XPCOM IDL files are then generated:
7136VBOX_XIDL_FILE_SRC = $(PATH_ROOT)/src/VBox/Main/idl/VirtualBox.xidl
7137# second XIDL file to use as source for COM/XPCOM IDL (with stripped docs):
7138VBOX_XIDL_FILE = $(PATH_OUT)/obj/VirtualBox_stripped.xidl
7139
7140# Java stuff.
7141ifeq ($(KBUILD_TARGET), darwin)
7142 VBOX_JAVA_COMMANDS = $(firstword $(wildcard \
7143 /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Commands \
7144 /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Commands \
7145 $(if-expr $(VBOX_XCODE_VERSION_MAJOR) >= 4,/System/Library/Frameworks/JavaVM.framework/Versions/A/Commands,) \
7146 ) /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Commands)
7147 VBOX_JAVA = $(VBOX_JAVA_COMMANDS)/java
7148 VBOX_JAVAC = $(VBOX_JAVA_COMMANDS)/javac
7149 VBOX_JAVAH = $(VBOX_JAVA_COMMANDS)/javah
7150 VBOX_JAR = $(VBOX_JAVA_COMMANDS)/jar
7151 VBOX_JAVADOC = $(VBOX_JAVA_COMMANDS)/javadoc
7152 VBOX_WSIMPORT = $(VBOX_JAVA_COMMANDS)/wsimport
7153 if $(VBOX_XCODE_VERSION_MAJOR) >= 4 # Lion (4.1-preview 5) has a broken CurrentJDK link. Blindly applying it to 4.0.
7154 VBOX_JAVA_INC = $(VBOX_PATH_MACOSX_SDK)/System/Library/Frameworks/JavaVM.framework/Versions/A/Headers
7155 else
7156 VBOX_JAVA_INC = $(VBOX_PATH_MACOSX_SDK)/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Headers
7157 endif
7158
7159else # !darwin
7160
7161 ifeq ($(KBUILD_TARGET),linux)
7162 ifeq ($(origin VBOX_JAVA_HOME),undefined)
7163 # Add correct detection for you distro after the /usr/../java-6-sun line.
7164 VBOX_JAVA_HOME := $(firstword $(wildcard \
7165 $(KBUILD_DEVTOOLS)/linux.x86/jdk1.6.0_27 \
7166 /usr/lib/jvm/java-6-sun \
7167 /usr/lib/jvm/java-6-openjdk \
7168 /usr/lib/jvm/java-6-openjdk-i386 \
7169 /usr/lib/jvm/java-6-openjdk-amd64 \
7170 /usr/lib/jvm/java-7-openjdk-i386 \
7171 /usr/lib/jvm/java-7-openjdk-amd64 \
7172 /usr/lib/jvm/default-java \
7173 /usr/lib/jvm/java \
7174 \
7175 /usr/lib/jvm/sun-jdk-1.6 \
7176 ) /usr/lib/jvm/java-6-sun)
7177 endif
7178 endif
7179
7180 ifeq ($(KBUILD_TARGET),solaris)
7181 # VBOX_JAVA_HOME ?= /usr/jdk/jdk1.6.0
7182 VBOX_JAVA_HOME ?= $(firstword $(abspath $(wildcard \
7183 /usr/jdk/latest/include/.. \
7184 /usr/jdk/instances/jdk1.8*/include/.. \
7185 /usr/jdk/instances/jdk1.7*/include/.. \
7186 /usr/jdk/instances/jdk1.6*/include/.. \
7187 )) /usr/java)
7188 endif
7189
7190 ifeq ($(KBUILD_TARGET),win)
7191 VBOX_JAVA_HOME ?= c:/jdk
7192 endif
7193
7194 VBOX_JAVA ?= "$(VBOX_JAVA_HOME)/bin/java$(HOSTSUFF_EXE)"
7195 VBOX_JAVAC = "$(VBOX_JAVA_HOME)/bin/javac$(HOSTSUFF_EXE)"
7196 VBOX_JAVAH = "$(VBOX_JAVA_HOME)/bin/javah$(HOSTSUFF_EXE)"
7197 VBOX_JAR = "$(VBOX_JAVA_HOME)/bin/jar$(HOSTSUFF_EXE)"
7198 VBOX_JAVADOC = "$(VBOX_JAVA_HOME)/bin/javadoc$(HOSTSUFF_EXE)"
7199 VBOX_WSIMPORT = "$(VBOX_JAVA_HOME)/bin/wsimport$(HOSTSUFF_EXE)"
7200 # correct for targets we care about
7201 VBOX_MD_OS = $(KBUILD_TARGET)
7202 VBOX_JAVA_INC = \
7203 $(VBOX_JAVA_HOME)/include \
7204 $(VBOX_JAVA_HOME)/include/$(VBOX_MD_OS)
7205endif # !darwin
7206
7207
7208#
7209# VBOX_SEP needs to be quoted when used on the shell command line.
7210#
7211if1of ($(KBUILD_TARGET), os2 win)
7212 VBOX_SEP = $(SEMICOLON)
7213else
7214 VBOX_SEP = $(COLON)
7215endif
7216VBOX_JAVAC_OPTS = -encoding UTF-8 -source 1.5 -target 1.5 -Xlint:unchecked
7217VBOX_JAVADOC_OPTS = -encoding UTF-8
7218
7219
7220#
7221# Legacy.
7222#
7223## @todo try remove this.
7224ifneq ($(LOCALCFG),)
7225 include $(LOCALCFG)
7226endif
7227
7228
7229#
7230# For efficiently build serveral build types / archs.
7231#
7232both-debug-release both-release-debug: \
7233 build-release-$(KBUILD_TARGET_ARCH) \
7234 build-debug-$(KBUILD_TARGET_ARCH)
7235both-x86-amd64 both-amd64-x86: \
7236 build-$(KBUILD_TYPE)-x86 \
7237 build-$(KBUILD_TYPE)-x86
7238both-types-archs both-archs-types: \
7239 build-debug-x86 \
7240 build-release-x86 \
7241 build-debug-amd64 \
7242 build-release-amd64
7243
7244build-release-x86:
7245 +$(MAKE) KBUILD_TYPE=release KBUILD_TARGET_ARCH=x86
7246
7247build-debug-x86:
7248 +$(MAKE) KBUILD_TYPE=debug KBUILD_TARGET_ARCH=x86
7249
7250build-release-amd64:
7251 +$(MAKE) KBUILD_TYPE=release KBUILD_TARGET_ARCH=amd64
7252
7253build-debug-amd64:
7254 +$(MAKE) KBUILD_TYPE=debug KBUILD_TARGET_ARCH=amd64
7255
7256
7257#
7258# Some extra goals.
7259#
7260.PHONY: up update st stat status
7261up update::
7262 $(SVN) up
7263
7264up2 update2::
7265 $(SVN) up --ignore-externals
7266
7267st stat status:
7268 $(SVN) status
7269
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