VirtualBox

source: vbox/trunk/Config.kmk@ 78608

Last change on this file since 78608 was 78608, checked in by vboxsync, 6 years ago

winnt/vboxsf: Don't flush and purge the cache twice on newer systems, instead do a library trick to redirect relevant imports from write.obj and read.obj to our wrappers that uses CcCoherencyFlushAndPurgeCache when possible to get better coherency between mmap regions and file content when writing and reading normally. This comes at a cost when the file has been mmapped at some point previously (or currently) and we may need to purge stuff. bugref:9172

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