VirtualBox

source: vbox/trunk/Config.kmk@ 85507

Last change on this file since 85507 was 85507, checked in by vboxsync, 4 years ago

SUP,*: Some changes to the SUP_IOCTL_LDR_OPEN and SUP_IOCTL_LDR_LOAD interfaces adding memory protection regions for better WX compliance. Preps for linux 5.8 where we'll be using RTR0MemObjAllocPage rather than RTMemExecAlloc for images, switch from relocatable ELF files to shared objects. bugref:9801

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