VirtualBox

source: vbox/trunk/Config.kmk@ 72094

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

Restrict old glibc support to Guest Additions only.
bugref:9112: Linux Additions: fix building binaries for older Linux user space
Old glibc support is only of interest when building the Guest Additions, so
this change restricts it to binaries which will become part of the Additions,
so that it can be enabled by default.

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

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