VirtualBox

source: vbox/trunk/Config.kmk@ 78661

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

Config.kmk: Force SHA256 signing on older darwin versions (Yosemite) to make notarization happy, at the price of not being able to run the result on Yosemite because it can only verify SHA1 hashes. Also enable the hardened runtime (numerically until Sierra, by name starting with High Sierra which isn't tested).

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id Revision
File size: 347.9 KB
Line 
1# $Id: Config.kmk 78643 2019-05-21 17:35:33Z 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 $(if-expr $(KBUILD_HOST_VERSION_MAJOR) <= 14,--digest-algorithm sha256,) \
3668 $(if-expr $(KBUILD_HOST_VERSION_MAJOR) <= 16,--options 0x10000,--options runtime) \
3669 --file-list - \
3670 $(if-expr defined(VBOX_TSA_URL),--timestamp="$(VBOX_TSA_URL)") \
3671 $(3) \
3672 $(VBOX_CERTIFICATE_SUBJECT_NAME_ARGS) \
3673 $(1) $(if $(2),--identifier "$(2)",)
3674 endif
3675
3676 ## Sign a Mach-O image.
3677 # @param 1 The file to sign.
3678 # @param 2 Identifier, optional.
3679 if $(intersects darwin all 1,$(VBOX_WITH_CORP_CODE_SIGNING))
3680 ## @todo cannot handle $(2), the identifier.
3681 VBOX_SIGN_MACHO_FN = $(call MSG_TOOL,SIGNTOOL,,$(1),$(2))$(NLTAB)$(call VBOX_CCS_SIGN_CMD,binary,$(1))
3682 else
3683 VBOX_SIGN_MACHO_FN = $(call MSG_TOOL,SIGNTOOL,,$(1),$(2))$(NLTAB)$(VBOX_CODESIGN) \
3684 --verbose=9 \
3685 --force \
3686 $(if-expr $(KBUILD_HOST_VERSION_MAJOR) <= 14,--digest-algorithm sha256,) \
3687 --file-list - \
3688 $(if-expr defined(VBOX_TSA_URL),--timestamp="$(VBOX_TSA_URL)") \
3689 $(VBOX_CERTIFICATE_SUBJECT_NAME_ARGS) \
3690 $(1) \
3691 $(if $(2),--identifier "$(2)",)
3692 endif
3693
3694 ## Sign a VMM Mach-O image.
3695 # @param 1 The file to sign.
3696 # @param 2 Identifier, optional.
3697 VBOX_SIGN_VMM_MOD_FN = $(VBOX_SIGN_MACHO_FN)
3698
3699 ## Sign a non-executable file.
3700 # @param 1 The file to sign.
3701 # @param 2 Identifier, optional.
3702 if $(intersects darwin all 1,$(VBOX_WITH_CORP_CODE_SIGNING))
3703 ## @todo cannot handle $(2), the identifier.
3704 VBOX_SIGN_FILE_FN = $(call MSG_TOOL,SIGNTOOL,,$(1),$(2))$(NLTAB)$(call VBOX_CCS_SIGN_CMD,binary,$(1))
3705 else
3706 VBOX_SIGN_FILE_FN = $(call MSG_TOOL,SIGNTOOL,,$(1),$(2))$(NLTAB)$(VBOX_CODESIGN) \
3707 --verbose=9 \
3708 --force \
3709 $(if-expr $(KBUILD_HOST_VERSION_MAJOR) <= 14,--digest-algorithm sha256,) \
3710 --file-list - \
3711 $(if-expr defined(VBOX_TSA_URL),--timestamp="$(VBOX_TSA_URL)") \
3712 $(VBOX_CERTIFICATE_SUBJECT_NAME_ARGS) \
3713 $(1) \
3714 $(if $(2),--identifier "$(2)",)
3715 endif
3716
3717 ## Sign a DMG image.
3718 # @param 1 The file to sign.
3719 # @param 2 Identifier, optional.
3720 VBOX_SIGN_DMG_FN = $(VBOX_SIGN_FILE_FN)
3721
3722 ## Sign a PKG file. Used with corp code signing only.
3723 # @param 1 The file to sign.
3724 # @param 2 Identifier, optional.
3725 if $(intersects darwin all 1,$(VBOX_WITH_CORP_CODE_SIGNING))
3726 ## @todo cannot handle $(2), the identifier.
3727 VBOX_SIGN_PKG_FN = $(call MSG_TOOL,SIGNTOOL,,$(1),$(2))$(NLTAB)$(call VBOX_CCS_SIGN_CMD,mac_pkg,$(1))
3728 endif
3729
3730 ## @def VBOX_TEST_SIGN_KEXT
3731 # Adds test signing to a $1.kext target (the plist installer target).
3732 #
3733 # After both targets has been defined:
3734 # $(evalcall2 VBOX_TEST_SIGN_KEXT,VBoxDrv)
3735 #
3736 # @param 1 The kext name. Assumes there is a SYSMODS target of name $1
3737 # as well as an .plist installer by the name of '$1.kext'.
3738 # @remarks Currently assumes only binary + Info.plist in the bundle, no
3739 # other files. Should there be more, add them as a list in
3740 # a 2nd parameter.
3741 # @note This is only for the 'test' signing mode, we skip this in
3742 # 'release' signing mode as to not waste time on the build boxes.
3743 ifeq ($(VBOX_SIGNING_MODE),test) ## @todo when kBuild is updated to r2742+, this should be enabled for both modes.
3744 define VBOX_TEST_SIGN_KEXT
3745 $1_INSTTYPE.darwin = none
3746
3747 $1.kext_SOURCES += $$($1.kext_0_OUTDIR)/Contents/MacOS/$1=>MacOS/$1 \
3748 $(foreach extfile, $(VBOX_DARWIN_KEXT_SIGN_FILES) \
3749 , $$($1.kext_0_OUTDIR)/Contents/_CodeSignature/$(extfile)=>_CodeSignature/$(extfile))
3750 $1.kext_SYMLINKS += $(foreach symfile, $(VBOX_DARWIN_KEXT_SIGN_SYMLINKS), $(symfile)=>_CodeSignature/$(symfile))
3751 $1.kext_CLEAN += \
3752 $(foreach extfile, $(VBOX_DARWIN_KEXT_SIGN_FILES) , $$($1.kext_0_OUTDIR)/Contents/_CodeSignature/$(extfile)) \
3753 $(foreach symfile, $(VBOX_DARWIN_KEXT_SIGN_SYMLINKS), $$($1.kext_0_OUTDIR)/Contents/$(symfile)) \
3754 $$($1.kext_0_OUTDIR)/Contents/MacOS/$1 \
3755 $$($1.kext_0_OUTDIR)/$1.kext/Contents/_CodeSignature/
3756 $1.kext_BLDDIRS += $$($1.kext_0_OUTDIR)/Contents/MacOS/
3757
3758 $$$$($1.kext_0_OUTDIR)/Contents/MacOS/$1 \
3759 + $(foreach file,$(VBOX_DARWIN_KEXT_SIGN_FILES), $$$$($1.kext_0_OUTDIR)/Contents/_CodeSignature/$(file)): \
3760 $$$$($1.kext_0_OUTDIR)/Contents/Info.plist $$$$($1_1_TARGET) | $$$$($1.kext_0_OUTDIR)/
3761 $(RM) -Rf -- "$$($1.kext_0_OUTDIR)/Contents/_CodeSignature/" "$$($1.kext_0_OUTDIR)/Contents/MacOS/"
3762 $(MKDIR) -p -- "$$($1.kext_0_OUTDIR)/Contents/MacOS/"
3763 $(INSTALL) -m 644 $$($1_1_TARGET) $$($1.kext_0_OUTDIR)/Contents/MacOS/$1
3764 $(call VBOX_SIGN_BUNDLE_FN,$$($1.kext_0_OUTDIR),org.virtualbox.app.kext.$1,)
3765 endef
3766 else
3767 VBOX_TEST_SIGN_KEXT =
3768 endif
3769
3770
3771 else ifeq ($(KBUILD_HOST),solaris)
3772 #
3773 # Solaris code signing.
3774 #
3775 ifeq ($(VBOX_SIGNING_MODE),test)
3776 VBOX_CERTIFICATE_FILE ?= $(error You need to set VBOX_CERTIFICATE_FILE in LocalConfig.kmk.)
3777 VBOX_TOKEN_NAME ?= $(error You need to set VBOX_TOKEN_NAME in LocalConfig.kmk.)
3778 VBOX_PIN_FILE ?= $(error You need to set VBOX_PIN_FILE in LocalConfig.kmk.)
3779 else
3780 VBOX_CERTIFICATE_FILE ?= $(PATH_ROOT)/oracle.pem
3781 VBOX_TOKEN_NAME ?= "Sun Software PKCS\#11 softtoken"
3782 VBOX_PIN_FILE ?= $(PATH_ROOT)/oracle.pin
3783 endif
3784 VBOX_CERTIFICATE_FILE_ARGS ?= -c $(VBOX_CERTIFICATE_FILE)
3785 VBOX_TOKEN_NAME_ARGS ?= -T $(VBOX_TOKEN_NAME)
3786 VBOX_PIN_ARGS ?= -P $(VBOX_PIN_FILE)
3787
3788 VBOX_ELFSIGN ?= elfsign
3789
3790 # Sign an ELF image.
3791 # @param 1 The elf object file to sign.
3792 VBOX_SIGN_ELF_FN ?= $(VBOX_ELFSIGN) \
3793 sign \
3794 $(VBOX_CERTIFICATE_FILE_ARGS) \
3795 $(VBOX_TOKEN_NAME_ARGS) \
3796 $(VBOX_PIN_ARGS) \
3797 -e $(1)
3798
3799 ## Commands for signing a driver image after link.
3800 if $(intersects solaris all 1,$(VBOX_WITH_CORP_CODE_SIGNING))
3801 VBOX_SIGN_DRIVER_CMDS ?= $(if $(eq $(tool_do),LINK_LIBRARY),,$(call VBOX_CCS_SIGN_CMD,solaris_elf,$(out)))
3802 else
3803 VBOX_SIGN_DRIVER_CMDS ?= $(if $(eq $(tool_do),LINK_LIBRARY),,$(call VBOX_SIGN_ELF_FN,$(out)))
3804 endif
3805
3806 else
3807 # Not Windows, Mac OS X or Solaris build host, ignore.
3808 VBOX_SIGNING_MODE :=
3809 endif
3810
3811#
3812# Complain if windows hardening is enabled but not code signing.
3813#
3814else if "$(KBUILD_TARGET)" == "win" && defined(VBOX_WITH_HARDENING) && !defined(VBOX_ONLY_BUILD)
3815 $(error You need to enable code signing for a hardened windows build to work.)
3816endif
3817
3818#
3819# Windows .inf editing.
3820#
3821ifeq ($(KBUILD_TARGET_ARCH),x86)
3822 VBOX_EDIT_INF_FN = $(call VBOX_EDIT_INF32_FN,$(1),$(2))
3823else
3824 VBOX_EDIT_INF_FN = $(call VBOX_EDIT_INF64_FN,$(1),$(2))
3825endif
3826## Edit an inf file an x86 target.
3827# @param 1 The inf file to edit.
3828# @param 2 The output file.
3829VBOX_EDIT_INF32_FN = $(SED) $(if $(VBOX_SIGNING_MODE),-e 's/^;cat *//', -e '/^;cat /d') \
3830 -e 's/^;x86 *//' \
3831 -e '/^;amd64 /d' \
3832 -e 's/@DOT-NT-ARCH@//' \
3833 -e 's/@COMMA-NT-ARCH@//' \
3834 -e 's/^;edit-DriverVer.*/DriverVer = $(date-utc %m\/%d\/%Y),$(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) ; r$(VBOX_SVN_REV)/' \
3835 --output $(2) \
3836 $(1)
3837## Edit an inf file an x86 target.
3838# @param 1 The inf file to edit.
3839# @param 2 The output file.
3840VBOX_EDIT_INF64_FN = $(SED) \
3841 $(if $(VBOX_SIGNING_MODE),-e 's/^;cat *//', -e '/^;cat /d')\
3842 -e 's/^;amd64 *//' \
3843 -e '/^;x86 /d' \
3844 -e 's/@DOT-NT-ARCH@/.ntamd64/' \
3845 -e 's/@COMMA-NT-ARCH@/,ntamd64/' \
3846 -e 's/^;edit-DriverVer.*/DriverVer = $(date-utc %m\/%d\/%Y),$(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) ; r$(VBOX_SVN_REV)/' \
3847 --output $(2) \
3848 $(1)
3849
3850##
3851# Helper macro for re-signing DLL images from tools that we ship so they won't
3852# cause trouble for the hardened build requirements.
3853#
3854# Invoke via $(call VBOX_RE_SIGN_DLL_FN) inside the SOURCES list. Necessary
3855# _CLEAN entry will be added to the target. If hardening is not enabled or
3856# we're not on windows, the source will be returned.
3857#
3858# @returns Name of the output file name. May have leading space, but no trailing.
3859# @param 1 Target name.
3860# @param 2 The source name.
3861# @param 3 Optional prefix to avoid name collisions.
3862#
3863if defined(VBOX_SIGNING_MODE) && "$(KBUILD_TARGET)" == "win"
3864 VBOX_RE_SIGN_DLL_FN = $(if-expr !defined($(1)_VBOX_RE_SIGNED_$(3)$(notdir $(2))),\
3865 $(evalcall VBOX_RE_SIGN_DLL_INTERNAL_FN,$1,$2,$3)\
3866 ,)$($(1)_0_OUTDIR)/$(3)$(notdir $2)
3867
3868define VBOX_RE_SIGN_DLL_INTERNAL_FN
3869local n = $(3)$(notdir $2)
3870ifndef $(1)_VBOX_RE_SIGNED_$(n)
3871 $(1)_VBOX_RE_SIGNED_$(n) := 1
3872 $(eval $(1)_CLEAN += $$($(1)_0_OUTDIR)/$(n))
3873
3874 $$($(1)_0_OUTDIR)/$(n): $(2) $(VBOX_VERSION_STAMP) | $$(dir $$@)
3875 $(call MSG_TOOL,SIGNTOOL,,$<,$@)
3876 $(RM) -f -- "$@"
3877 $(CP) -- "$<" "$@"
3878 $(VBOX_VCC_EDITBIN) /LargeAddressAware /DynamicBase /NxCompat /Release /IntegrityCheck \
3879 /Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
3880 "$@"
3881 $(call VBOX_SIGN_IMAGE_FN,$@)
3882endif
3883endef # VBOX_RESIGN_DLL_FN
3884else
3885 VBOX_RE_SIGN_DLL_FN = $(2)
3886endif
3887
3888
3889##
3890# @param
3891VBOX_RESIGN_DLL_FN =
3892
3893
3894#
3895# File version info and description macros (ignored on most OSes).
3896#
3897
3898##
3899# Internal macro.
3900#
3901# @param 1 The target name.
3902# @param 2 The description
3903# @param 3 Optional icon file.
3904# @param 4 The template base name.
3905# @param 5 Additional RC options.
3906#
3907# @remarks ASSUMES RCFLAGS isn't a simple variable (var := value).
3908define VBOX_SET_VER_INFO_INTERNAL
3909ifeq ($(KBUILD_TARGET),win)
3910$(1)_SOURCES.win += $(PATH_ROOT)/src/VBox/Artwork/win/$(4)
3911$(1)_RCFLAGS += /nologo /dIN_INTERNAL_NAME="\"$(1)\"" /dIN_FILE_DESCRIPTION="\"$(2)\"" \
3912 /dIN_ORIGINAL_NAME="\"$$(notdir $$($(1)_1_INST_TARGET))\"" \
3913 $(if $(3), /dIN_ICON_FILE="\"$(subst \\,/,$(strip $(3)))\"") $(5)
3914$$$$($(1)_0_OUTDIR)/src/VBox/Artwork/win/$(basename $(4)).res: \
3915 $(PATH_ROOT)/include/VBox/version.h $$$$(VBOX_VERSION_HEADER)
3916endif
3917endef
3918
3919##
3920# Macro for setting DLL/SO/DYLIB version information and description.
3921#
3922# The macro must be invoked using evalcall2 after the whole target has
3923# been declared.
3924#
3925# @param 1 The target name.
3926# @param 2 The description
3927# @param 3 Optional icon file.
3928VBOX_SET_VER_INFO_DLL = $(evalcall2 VBOX_SET_VER_INFO_INTERNAL,$1,$2,$3,TemplateDll.rc,)
3929
3930##
3931# Macro for setting EXE version information and description.
3932#
3933# The macro must be invoked using call after the whole target has been declared.
3934#
3935# @param 1 The target name.
3936# @param 2 The description
3937# @param 3 Optional icon file.
3938VBOX_SET_VER_INFO_EXE = $(evalcall2 VBOX_SET_VER_INFO_INTERNAL,$1,$2,$3,TemplateExe.rc,)
3939
3940##
3941# Macro for setting driver version information and description.
3942#
3943# The macro must be invoked using call after the whole target has been declared.
3944#
3945# @param 1 The target name.
3946# @param 2 The description
3947# @param 3 Optional icon file.
3948# @param 4 Optional VFT2_DRV_xxx define for windows. Uses VFT2_UNKNOWN by default.
3949VBOX_SET_VER_INFO_DRV = $(evalcall2 VBOX_SET_VER_INFO_INTERNAL,$1,$2,$3,TemplateDrv.rc,$(if $(4), /dIN_FILE_SUBTYPE=$(4)))
3950
3951##
3952# Macro for setting the version information and description for a ring-0 module.
3953#
3954# The macro must be invoked using call after the whole target has been declared.
3955#
3956# @param 1 The target name.
3957# @param 2 The description
3958# @param 3 Optional icon file.
3959VBOX_SET_VER_INFO_R0 = $(evalcall2 VBOX_SET_VER_INFO_INTERNAL,$1,$2,$3,TemplateR0.rc,)
3960
3961##
3962# Macro for setting the version information and description for a raw-mode context module.
3963#
3964# The macro must be invoked using call after the whole target has been declared.
3965#
3966# @param 1 The target name.
3967# @param 2 The description
3968# @param 3 Optional icon file.
3969VBOX_SET_VER_INFO_RC = $(evalcall2 VBOX_SET_VER_INFO_INTERNAL,$1,$2,$3,TemplateRc.rc,)
3970
3971
3972
3973#
3974# Adjust kBuild defaults.
3975#
3976kBuildGlobalDefaults_DEBUG_NOSTAGE.win = true
3977kBuildGlobalDefaults_DEBUG_NOSTAGE.os2 = true
3978if1of ($(KBUILD_TARGET), darwin win)
3979 kBuildGlobalDefaults_LD_DEBUG = split
3980endif
3981
3982
3983#
3984# Haiku resource and version generation.
3985#
3986ifeq ($(KBUILD_HOST),haiku)
3987 VBOX_HAIKU_RCTOOL := rc
3988 VBOX_HAIKU_XRESTOOL := xres
3989 VBOX_HAIKU_SETVERSIONTOOL := setversion
3990 # XXX: install won't preserve attributes...
3991 VBOX_HAIKU_MIMESETTOOL := mimeset
3992
3993 ## Add optional resources to the program, set its version info, and sniff its mime properties.
3994 # @param 1 The file to add resources to.
3995 # @param 2 The resource files.
3996 # @param 3 The target name.
3997define VBOX_HAIKU_XRES_SETVER_FN
3998 $(if $(2),$(call MSG_TOOL,HaikuAddResources,$(3),$(2))
3999 $(QUIET)$(VBOX_HAIKU_XRESTOOL) -o $(1) $(2),)
4000 $(call MSG_TOOL,HaikuSetVersion,$(3))
4001 $(QUIET)$(VBOX_HAIKU_SETVERSIONTOOL) $(1) \
4002 -app $(VBOX_VERSION_MAJOR) $(VBOX_VERSION_MINOR) $(VBOX_VERSION_BUILD) d $(VBOX_SVN_REV) \
4003 -short "$(VBOX_PRODUCT)" \
4004 -long "$(VBOX_PRODUCT) $(VBOX_VERSION_STRING) $(shell /bin/echo -e '\xC2\xA9')2009-$(VBOX_C_YEAR) $(VBOX_VENDOR)"
4005 $(call MSG_TOOL,HaikuMimeSet,$(3))
4006 $(QUIET)$(VBOX_HAIKU_MIMESETTOOL) -f $(1)
4007endef
4008
4009 VBOX_HAIKU_XRES_SETVER_CMDS ?= $(if $(eq $(tool_do),LINK_PROGRAM),$(call VBOX_HAIKU_XRES_SETVER_FN,$(out),$($(target)_RSRCS),$(target)),)
4010endif
4011
4012#
4013# Default prefixes and suffixes.
4014#
4015VBOX_PREF_LIB =
4016if1of ($(KBUILD_TARGET), os2 win)
4017VBOX_SUFF_LIB = .lib
4018else
4019VBOX_SUFF_LIB = .a
4020endif
4021if1of ($(KBUILD_HOST), os2 win)
4022VBOX_HOSTSUFF_LIB = .lib
4023else
4024VBOX_HOSTSUFF_LIB = .a
4025endif
4026VBOX_SUFF_DLL = $(SUFF_DLL)
4027ifeq ($(KBUILD_TARGET),os2) # GXX3OMF produces out .o at the moment.
4028VBOX_SUFF_OBJ = .o
4029else
4030VBOX_SUFF_OBJ = $(SUFF_OBJ)
4031endif
4032VBOXW32GUEST_SUFF_LIB = .lib
4033VBOXLNX32GUEST_SUFF_LIB = .a
4034
4035#
4036# SDKs for external libraries.
4037#
4038SDK_VBOX_LIBXML2 = .
4039SDK_VBOX_LIBXML2_INCS ?= $(PATH_ROOT)/src/libs/libxml2-2.9.4/include
4040SDK_VBOX_LIBXML2_DEFS ?= _REENTRANT LIBXML_STATIC LIBXML_STATIC_FOR_DLL
4041SDK_VBOX_LIBXML2_DEFS.win ?= WIN32 _WINDOWS _MBCS HAVE_WIN32_THREADS HAVE_COMPILER_TLS
4042# Note: no linking to LIB here, we do that explicitly in src/VBox/Runtime/Makefile.kmk to link
4043# libxml against VBoxRT
4044
4045SDK_VBOX_LIBPNG = .
4046SDK_VBOX_LIBPNG_INCS ?= $(PATH_ROOT)/src/libs/libpng-1.6.36
4047SDK_VBOX_LIBPNG_LIBS ?= $(PATH_STAGE_LIB)/VBox-libpng$(VBOX_SUFF_LIB)
4048
4049SDK_VBOX_ZLIB = .
4050if1of ($(KBUILD_TARGET), os2 solaris win)
4051 SDK_VBOX_ZLIB_INCS ?= $(PATH_ROOT)/src/libs/zlib-1.2.11
4052 SDK_VBOX_ZLIB_LIBS ?= $(PATH_STAGE_LIB)/VBox-zlib$(VBOX_SUFF_LIB)
4053else
4054 SDK_VBOX_ZLIB_INCS ?=
4055 SDK_VBOX_ZLIB_LIBS ?= z
4056 SDK_VBOX_ZLIB_DEFS.linux ?= _LARGEFILE64_SOURCE
4057endif
4058
4059SDK_VBOX_ZLIB-x86 = .
4060SDK_VBOX_ZLIB-x86_EXTENDS = VBOX_ZLIB
4061if1of ($(KBUILD_TARGET), os2 solaris win)
4062 SDK_VBOX_ZLIB_LIBS-x86 ?= $(PATH_STAGE_LIB)/VBox-zlib-x86$(VBOX_SUFF_LIB)
4063endif
4064
4065SDK_VBOX_ZLIB_STATIC = .
4066SDK_VBOX_ZLIB_STATIC_EXTENDS ?= VBOX_ZLIB
4067if1of ($(KBUILD_TARGET), os2 win) # Not required on solaris.
4068 SDK_VBOX_ZLIB_STATIC_LIBS ?= $(PATH_STAGE_LIB)/VBox-zlib-static$(VBOX_SUFF_LIB)
4069endif
4070
4071SDK_VBOX_OPENSSL = Only for VBoxRT and/or statically linked programs.
4072SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS := $(PATH_OUT)/obj/crypto-1.1.1-headers/include
4073SDK_VBOX_OPENSSL_INCS ?= $(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)
4074SDK_VBOX_OPENSSL_ORDERDEPS ?= $(crypto-headers_1_TARGET)
4075if !defined(VBOX_ONLY_SDK) \
4076 && (!defined(VBOX_ONLY_ADDITIONS) || !defined(VBOX_ONLY_ADDITIONS_WITHOUT_RTISOMAKER)) \
4077 && (!defined(VBOX_ONLY_EXTPACKS) || defined(VBOX_NEED_EXTPACK_OPENSSL) || !defined(VBOX_ONLY_EXTPACKS_USE_IMPLIBS)) \
4078 && ("$(SDK_VBOX_OPENSSL_INCS)" == "$(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)" || defined(VBOX_NEED_EXTPACK_OPENSSL))
4079 SDK_VBOX_OPENSSL_DEPS ?= $(SDK_VBOX_OPENSSL_INCS)/openssl/openssl-mangling.h
4080endif
4081SDK_VBOX_OPENSSL_LIBS ?= \
4082 $(PATH_STAGE_LIB)/VBox-libssl$(VBOX_SUFF_LIB) \
4083 $(PATH_STAGE_LIB)/VBox-libcrypto$(VBOX_SUFF_LIB)
4084
4085SDK_VBOX_OPENSSL-x86 = Only for VBoxRT and/or statically linked programs.
4086SDK_VBOX_OPENSSL-x86_VBOX_DEFAULT_INCS := $(PATH_OUT)/obj/crypto-1.1.1-headers/include
4087SDK_VBOX_OPENSSL-x86_INCS ?= $(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)
4088SDK_VBOX_OPENSSL-x86_ORDERDEPS ?= $(crypto-headers_1_TARGET)
4089if ("$(SDK_VBOX_OPENSSL_INCS)" == "$(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)" || defined(VBOX_NEED_EXTPACK_OPENSSL))
4090 SDK_VBOX_OPENSSL-x86_DEPS ?= $(SDK_VBOX_OPENSSL_INCS)/openssl/openssl-mangling.h
4091endif
4092SDK_VBOX_OPENSSL-x86_LIBS ?= \
4093 $(PATH_STAGE_LIB)/VBox-libssl-x86$(VBOX_SUFF_LIB) \
4094 $(PATH_STAGE_LIB)/VBox-libcrypto-x86$(VBOX_SUFF_LIB)
4095
4096SDK_VBOX_OPENSSL2 = What you should be using.
4097SDK_VBOX_OPENSSL2_EXTENDS = VBOX_OPENSSL
4098if "$(SDK_VBOX_OPENSSL_INCS)" == "$(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)"
4099 SDK_VBOX_OPENSSL2_LIBS = $(NO_SUCH_VARIABLE)
4100endif
4101
4102ifdef VBOX_WITH_LIBCURL
4103SDK_VBOX_LIBCURL = .
4104SDK_VBOX_LIBCURL_INCS ?= $(PATH_ROOT)/src/libs/curl-7.64.0/include
4105SDK_VBOX_LIBCURL_LIBS ?= $(PATH_STAGE_LIB)/VBox-libcurl$(VBOX_SUFF_LIB)
4106SDK_VBOX_LIBCURL_DEFS ?= BUILDING_LIBCURL
4107
4108SDK_VBOX_LIBCURL-x86 = .
4109SDK_VBOX_LIBCURL-x86_INCS ?= $(PATH_ROOT)/src/libs/curl-7.64.0/include
4110SDK_VBOX_LIBCURL-x86_LIBS.x86 ?= $(PATH_STAGE_LIB)/VBox-libcurl-x86$(VBOX_SUFF_LIB)
4111SDK_VBOX_LIBCURL-x86_DEFS ?= BUILDING_LIBCURL
4112endif
4113
4114ifdef VBOX_WITH_LIBVPX
4115 SDK_VBOX_VPX = .
4116 SDK_VBOX_VPX_DEFAULT_INCS := $(PATH_ROOT)/src/libs/libvpx-1.6.1
4117 SDK_VBOX_VPX_INCS ?= $(SDK_VBOX_VPX_DEFAULT_INCS)
4118 SDK_VBOX_VPX_LIBS ?= $(PATH_STAGE_LIB)/VBox-libvpx$(VBOX_SUFF_LIB)
4119endif
4120
4121ifdef VBOX_WITH_LIBOPUS
4122 SDK_VBOX_OPUS = .
4123 SDK_VBOX_OPUS_DEFAULT_INCS := $(PATH_ROOT)/src/libs/libopus-1.2.1/include
4124 SDK_VBOX_OPUS_INCS ?= $(SDK_VBOX_OPUS_DEFAULT_INCS)
4125 SDK_VBOX_OPUS_LIBS ?= $(PATH_STAGE_LIB)/VBox-libopus$(VBOX_SUFF_LIB)
4126endif
4127
4128ifdef VBOX_WITH_LIBFUSE
4129 SDK_VBOX_FUSE = .
4130 SDK_VBOX_FUSE_DEFAULT_INCS := $(PATH_ROOT)/src/libs/libfuse-2.9.8/include
4131 SDK_VBOX_FUSE_INCS ?= $(SDK_VBOX_FUSE_DEFAULT_INCS)
4132 SDK_VBOX_FUSE_LIBS ?= $(PATH_STAGE_LIB)/VBox-libfuse$(VBOX_SUFF_LIB)
4133endif
4134
4135#
4136# Special SDK for the problematic NTDLL.LIB.
4137#
4138SDK_VBOX_NTDLL = Mini NTDLL import library, required IPRT.
4139SDK_VBOX_NTDLL_LIBS.x86 ?= $(PATH_STAGE_LIB)/RuntimeR3NtDll-x86.lib
4140SDK_VBOX_NTDLL_LIBS.amd64 ?= $(PATH_STAGE_LIB)/RuntimeR3NtDll-amd64.lib
4141
4142#
4143# Determine Solaris version.
4144#
4145ifeq ($(KBUILD_TARGET),solaris)
4146 VBOX_SOLARIS_VERSION := $(expr $(KBUILD_HOST_VERSION_MAJOR) * 100 + $(KBUILD_HOST_VERSION_MINOR))
4147 ifeq ($(VBOX_SOLARIS_VERSION),510)
4148 DEFS.solaris += RT_OS_SOLARIS_10
4149 # Solaris 10 does not include crossbow.
4150 VBOX_SOLARIS_10 = 1
4151 # We cannot compile additions on Solaris 10, due kernel interface deps
4152 VBOX_WITHOUT_ADDITIONS := 1
4153 VBOX_WITH_ADDITIONS =
4154 else ifeq ($(VBOX_SOLARIS_VERSION),511)
4155 # OSS audio support for Solaris
4156 VBOX_WITH_AUDIO_OSS := $(if-expr $(VBOX_SOLARIS_11_VERSION) >= 115,1,)
4157 endif
4158
4159 # XPCOM namespace cleanup issue with Solaris GCC 4.5.2 and newer, see @bugref{5838}.
4160 if $(VBOX_GCC_VERSION_CXX) >= 40502
4161 VBOX_WITH_XPCOM_NAMESPACE_CLEANUP =
4162 endif
4163endif
4164
4165#
4166# VBoxTpG tool.
4167#
4168TOOL_VBoxTpG = The VirtualBox Tracepoint Generator
4169TOOL_VBoxTpG_DTRACE_DEPORD = $(VBOX_VBOXTPG)
4170TOOL_VBoxTpG_DTRACE_HDR_FLAGS := \
4171 -h --host-$(VBOX_HC_ARCH_BITS)-bit #-vvv
4172define TOOL_VBoxTpG_DTRACE_HDR_CMDS
4173 $(QUIET)$(VBOX_VBOXTPG) $(if-expr $(intersects $(bld_trg_arch),$(KBUILD_ARCHES_64)),-64,-32) \
4174 $(flags) -o "$(out)" -s "$(source)"
4175endef
4176TOOL_VBoxTpG_DTRACE_OBJ_NOT_NEEDED :=
4177TOOL_VBoxTpG_DTRACE_OBJ_FLAGS := -G --host-$(VBOX_HC_ARCH_BITS)-bit #-vvv
4178define TOOL_VBoxTpG_DTRACE_OBJ_CMDS
4179 $(QUIET)$(VBOX_VBOXTPG) --assembler "$(TOOL_$(VBOX_ASTOOL)_AS)" \
4180 $(if-expr $(intersects $(bld_trg_arch),$(KBUILD_ARCHES_64)),-64,-32) \
4181 $(flags) \
4182 -o "$(out)" -s "$(source)"
4183endef
4184
4185
4186#
4187# VBoxTpG tool - Disabled, only generate the header.
4188#
4189TOOL_VBoxTpG-Disabled = The VirtualBox Tracepoint Generator, disabled.
4190TOOL_VBoxTpG-Disabled_DTRACE_DEPORD = $(VBOX_VBOXTPG)
4191TOOL_VBoxTpG-Disabled_DTRACE_HDR_FLAGS := -h
4192define TOOL_VBoxTpG-Disabled_DTRACE_HDR_CMDS
4193 $(QUIET)$(VBOX_VBOXTPG) $(flags) -o "$(out)" -s "$(source)"
4194endef
4195TOOL_VBoxTpG-Disabled_DTRACE_OBJ_NOT_NEEDED := $(KBUILD_OSES)
4196
4197
4198#
4199# dtrace+VBoxTpG tool for ring-3 to ring-0 pointer conversion.
4200#
4201TOOL_DTraceAndVBoxTpG = DTrace and the VirtualBox Tracepoint Generator working together on static ring-3 probes.
4202TOOL_DTraceAndVBoxTpG_EXTENDS = StandardDTrace
4203TOOL_DTraceAndVBoxTpG_DTRACE_DEPORD = $(VBOX_VBOXTPG)
4204TOOL_DTraceAndVBoxTpG_DTRACE_HDR_CMDS =
4205define TOOL_DTraceAndVBoxTpG_DTRACE_HDR_CMDS
4206 $(TOOL_StandardDTrace_DTRACE_HDR_CMDS)
4207 $(QUIET)$(VBOX_VBOXTPG) --generate-wrapper-header --host-$(VBOX_HC_ARCH_BITS)-bit --ring-3-context \
4208 $(filter-out -C, $(filter-out -h,$(flags))) \
4209 -o "$(out).tmp" -s "$(source)"
4210 $(APPEND) "$(out).tmp"
4211 $(SED) -e 's/\(#define.*\)(arg0/\1_ORIGINAL(arg0/' --append "$(out).tmp" "$(out)"
4212 $(MV) -f -- "$(out).tmp" "$(out)"
4213endef
4214TOOL_DTraceAndVBoxTpG_DTRACE_OBJ_NOT_NEEDED = $(TOOL_StandardDTrace_DTRACE_OBJ_NOT_NEEDED)
4215TOOL_DTraceAndVBoxTpG_DTRACE_OBJ_CMDS = $(TOOL_StandardDTrace_DTRACE_OBJ_CMDS)
4216
4217
4218ifdef VBOX_WITH_RAW_MODE
4219 #
4220 # Template for building RC things.
4221 #
4222 # Disabled Visual C++ warnings:
4223 # -wd4505: 'iemRaisePageFaultJmp' : unreferenced local function has been removed
4224 #
4225 TEMPLATE_VBoxRc = VBox Raw-Mode Context
4226 TEMPLATE_VBoxRc_ASTOOL = $(VBOX_ASTOOL)
4227 TEMPLATE_VBoxRc_ASFLAGS = $(VBOX_ASFLAGS32)
4228 TEMPLATE_VBoxRc_DEFS = IN_RC IPRT_NO_CRT RT_WITH_NOCRT_ALIASES $(ARCH_BITS_DEFS)
4229 TEMPLATE_VBoxRc_INCS = $(PATH_ROOT)/include/iprt/nocrt
4230 TEMPLATE_VBoxRc_SYSSUFF = .rc
4231 TEMPLATE_VBoxRc_BLD_TRG_ARCH = x86
4232 TEMPLATE_VBoxRc_MODE = a+r,u+w
4233
4234 TEMPLATE_VBoxRc_USES += dtrace
4235 TEMPLATE_VBoxRc_DTRACE_HDR_FLAGS = --raw-mode-context
4236 TEMPLATE_VBoxRc_DTRACE_OBJ_FLAGS = --raw-mode-context --probe-fn-name "VMMRCProbeFire"
4237 ifdef VBOX_WITH_DTRACE_RC
4238 TEMPLATE_VBoxRc_DTRACETOOL = VBoxTpG
4239 TEMPLATE_VBoxRc_DEFS += VBOX_WITH_DTRACE VBOX_WITH_DTRACE_RC
4240 else
4241 TEMPLATE_VBoxRc_DTRACETOOL = VBoxTpG-Disabled
4242 endif
4243
4244 ifeq ($(VBOX_LDR_FMT32),pe)
4245 TEMPLATE_VBoxRc_TOOL = $(VBOX_VCC_TOOL_STEM)X86
4246 TEMPLATE_VBoxRc_RCDEFS = VBOX_SVN_REV=$(VBOX_SVN_REV) VBOX_SVN_REV_MOD_5K=$(expr $(VBOX_SVN_REV) % 50000)
4247 TEMPLATE_VBoxRc_CXXFLAGS = -Zi -Zl -GR- -EHs- -GF -GS- -Zc:wchar_t- -Gs8192 $(VBOX_VCC_GC_OPT) $(VBOX_VCC_GC_FP) \
4248 $(VBOX_VCC_WARN_ALL) -wd4505 $(VBOX_VCC_WERR)
4249 TEMPLATE_VBoxRc_CFLAGS = $(TEMPLATE_VBoxRc_CXXFLAGS)
4250 TEMPLATE_VBoxRc_LDFLAGS = -Ignore:4197 \
4251 -Driver -Subsystem:NATIVE -Incremental:NO -Align:64 -MapInfo:Exports -NoD $(VBOX_VCC_LD_WERR) -Release -Debug -Opt:Ref -Opt:Icf \
4252 -Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
4253 -Stub:$(PATH_ROOT)/src/VBox/HostDrivers/Support/win/winstub.com
4254 ifdef VBOX_SIGNING_MODE
4255 TEMPLATE_VBoxRc_LDFLAGS += -IntegrityCheck
4256 endif
4257 TEMPLATE_VBoxRc_LIBS = \
4258 $(PATH_SDK_$(VBOX_WINDDK)_LIB.x86)/int64.lib
4259 TEMPLATE_VBoxRc_LIBS += \
4260 $(PATH_STAGE_LIB)/RuntimeRCStub$(VBOX_SUFF_LIB)
4261 TEMPLATE_VBoxRc_POST_CMDS = $(VBOX_SIGN_IMAGE_CMDS)
4262 endif # pe
4263
4264 ifeq ($(VBOX_LDR_FMT32),elf)
4265 TEMPLATE_VBoxRc_TOOL = $(VBOX_GCC32_TOOL)
4266 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)
4267 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)
4268 if $(VBOX_GCC32_VERSION_CC) < 30400
4269 TEMPLATE_VBoxRc_DEFS += RT_WITHOUT_PRAGMA_ONCE
4270 endif
4271 ifeq ($(KBUILD_TARGET),solaris)
4272 TEMPLATE_VBoxRc_LDFLAGS = -r
4273 else
4274 TEMPLATE_VBoxRc_LDFLAGS = -nostdlib -Bsymbolic -g
4275 ## @todo WTF doesn't the globals work? Debug info is supposed to be split everywhere. GRR
4276 TEMPLATE_VBoxRc_LD_DEBUG = split
4277 endif
4278 ifn1of ($(KBUILD_TARGET), solaris freebsd)
4279 TEMPLATE_VBoxRc_LIBS = \
4280 $(VBOX_GCC32_LIBGCC) # intrinsics
4281 endif
4282 if1of ($(KBUILD_TARGET),linux)
4283 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)
4284 endif
4285 endif
4286
4287 ifeq ($(VBOX_LDR_FMT32),macho)
4288 TEMPLATE_VBoxRc_TOOL = $(VBOX_GCC_TOOL)
4289 TEMPLATE_VBoxRc_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS)
4290 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
4291 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
4292 TEMPLATE_VBoxRc_LDFLAGS = $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -m32 -nostdlib
4293 #TEMPLATE_VBoxRc_LDFLAGS.release = -Wl,-S ???
4294 endif
4295
4296 ifeq ($(VBOX_LDR_FMT32),lx)
4297 TEMPLATE_VBoxRc_TOOL = GXX3OMF
4298 if $(VBOX_GCC_VERSION_CC) < 30400
4299 TEMPLATE_VBoxRc_DEFS += RT_WITHOUT_PRAGMA_ONCE
4300 endif
4301 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
4302 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
4303 TEMPLATE_VBoxRc_LDFLAGS = -Zdll -nostdlib
4304 TEMPLATE_VBoxRc_LIBS = \
4305 $(VBOX_GCC32_LIBGCC) \
4306 $(VBOX_OBJ_SYS0) \
4307 end
4308 endif
4309
4310
4311 #
4312 # Template for building a RC ring-3 testcase (tstVMStructGC, tstDevStructGC).
4313 #
4314 TEMPLATE_VBoxRcExe = VBox Raw-Mode as ring-3 testcase
4315 TEMPLATE_VBoxRcExe_EXTENDS = VBoxRc
4316 TEMPLATE_VBoxRcExe_DEFS = $(filter-out IPRT_NO_CRT RT_WITH_NOCRT_ALIASES,$(TEMPLATE_VBoxRc_DEFS))
4317 TEMPLATE_VBoxRcExe_INCS = $(NO_SUCH_VARIABLE)
4318 TEMPLATE_VBoxRcExe_MODE = $(NO_SUCH_VARIABLE)
4319
4320 ifeq ($(VBOX_LDR_FMT32),pe)
4321 TEMPLATE_VBoxRcExe_LDFLAGS = -Ignore:4197 \
4322 -Incremental:NO -MapInfo:Exports -NoD -Debug -Opt:Ref -Opt:Icf \
4323 -Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
4324 -Stub:$(PATH_ROOT)/src/VBox/HostDrivers/Support/win/winstub.com
4325 TEMPLATE_VBoxRcExe_SDKS = ReorderCompilerIncs $(VBOX_WINPSDK)
4326 TEMPLATE_VBoxRcExe_LIBS = \
4327 $(PATH_TOOL_$(VBOX_VCC_TOOL_STEM)X86_LIB)/libcmt.lib \
4328 $(PATH_TOOL_$(VBOX_VCC_TOOL_STEM)X86_LIB)/oldnames.lib
4329 endif
4330
4331 ifeq ($(VBOX_LDR_FMT32),elf)
4332 TEMPLATE_VBoxRcExe_CFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBoxRc_CFLAGS)) -O0
4333 TEMPLATE_VBoxRcExe_CXXFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBoxRc_CXXFLAGS)) -O0
4334 TEMPLATE_VBoxRcExe_LDFLAGS = -g
4335 TEMPLATE_VBoxRcExe_LDFLAGS.dbgopt = -g
4336 TEMPLATE_VBoxRcExe_LDFLAGS.strict = -g
4337 TEMPLATE_VBoxRcExe_LDFLAGS.release = -g
4338 if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), freebsd.amd64)
4339 # The FreeBSD port of gcc isn't picking up -m32 where it should.
4340 TEMPLATE_VBoxRcExe_DEFS.$(KBUILD_TARGET) = $(TEMPLATE_VBoxRc_DEFS.$(KBUILD_TARGET)) IPRT_DONT_USE_SYSTEM_STDINT_H
4341 TEMPLATE_VBoxRcExe_LDFLAGS.$(KBUILD_TARGET) = /usr/lib32/crt1.o /usr/lib32/crti.o /usr/lib32/crtbegin.o $(TEMPLATE_VBoxRc_LDFLAGS.$(KBUILD_TARGET)) -nostdlib -v
4342 TEMPLATE_VBoxRcExe_LIBPATH.$(KBUILD_TARGET) = /usr/lib32
4343 TEMPLATE_VBoxRcExe_LIBS.$(KBUILD_TARGET) = /usr/lib32/crtend.o /usr/lib32/crtn.o /usr/lib32/libc.so
4344 endif
4345 endif
4346
4347 ifeq ($(VBOX_LDR_FMT32),macho)
4348 TEMPLATE_VBoxRcExe_CFLAGS = $(filter-out -static -nostdinc,$(TEMPLATE_VBoxRc_CFLAGS))
4349 TEMPLATE_VBoxRcExe_CXXFLAGS = $(filter-out -static -nostdinc,$(TEMPLATE_VBoxRc_CXXFLAGS))
4350 TEMPLATE_VBoxRcExe_LDFLAGS = -g -m32
4351 endif
4352
4353 ifeq ($(VBOX_LDR_FMT32),lx)
4354 TEMPLATE_VBoxRcExe_CFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBoxRc_CFLAGS))
4355 TEMPLATE_VBoxRcExe_CXXFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBoxRc_CXXFLAGS))
4356 TEMPLATE_VBoxRcExe_LDFLAGS = -g
4357 TEMPLATE_VBoxRcExe_LIBS = $(NO_SUCH_VARIABLE)
4358 endif
4359endif # VBOX_WITH_RAW_MODE
4360
4361
4362#
4363# Template for building R0 things.
4364#
4365# Disabled Visual C++ warnings:
4366# -wd4505: 'iemRaisePageFaultJmp' : unreferenced local function has been removed
4367#
4368TEMPLATE_VBoxR0 = VBox Ring 0
4369TEMPLATE_VBoxR0_ASTOOL = $(VBOX_ASTOOL)
4370TEMPLATE_VBoxR0_ASFLAGS = $(VBOX_ASFLAGS)
4371TEMPLATE_VBoxR0_DEFS = IN_RING0 IN_RING0_AGNOSTIC IPRT_NO_CRT RT_WITH_NOCRT_ALIASES $(ARCH_BITS_DEFS)
4372TEMPLATE_VBoxR0_INCS = $(PATH_ROOT)/include/iprt/nocrt
4373TEMPLATE_VBoxR0_SYSSUFF = .r0
4374TEMPLATE_VBoxR0_MODE = a+r,u+w
4375
4376TEMPLATE_VBoxR0_USES += dtrace
4377TEMPLATE_VBoxR0_DTRACE_HDR_FLAGS = --ring-0-context-agnostic
4378TEMPLATE_VBoxR0_DTRACE_OBJ_FLAGS = --ring-0-context-agnostic
4379ifdef VBOX_WITH_DTRACE_R0
4380 TEMPLATE_VBoxR0_DTRACETOOL = VBoxTpG
4381 TEMPLATE_VBoxR0_DEFS += VBOX_WITH_DTRACE VBOX_WITH_DTRACE_R0
4382else
4383 TEMPLATE_VBoxR0_DTRACETOOL = VBoxTpG-Disabled
4384endif
4385
4386ifeq ($(VBOX_LDR_FMT),pe)
4387TEMPLATE_VBoxR0_TOOL = $(VBOX_VCC_TOOL)
4388TEMPLATE_VBoxR0_RCDEFS = VBOX_SVN_REV=$(VBOX_SVN_REV) VBOX_SVN_REV_MOD_5K=$(expr $(VBOX_SVN_REV) % 50000)
4389TEMPLATE_VBoxR0_CXXFLAGS = -Zi -Zl -GR- -EHs- -GF -GS- -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP) \
4390 $(VBOX_VCC_WARN_ALL) -wd4505 $(VBOX_VCC_WERR)
4391TEMPLATE_VBoxR0_CFLAGS = $(TEMPLATE_VBoxR0_CXXFLAGS)
4392TEMPLATE_VBoxR0_LDFLAGS = -Ignore:4197 \
4393 -Driver -Subsystem:NATIVE -Incremental:NO -Align:4096 -MapInfo:Exports -NoD $(VBOX_VCC_LD_WERR) -Release -Debug -Opt:Ref -Opt:Icf \
4394 -Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
4395 -Stub:$(PATH_ROOT)/src/VBox/HostDrivers/Support/win/winstub.com
4396 ifdef VBOX_WITH_DTRACE_R0
4397TEMPLATE_VBoxR0_LDFLAGS += -Merge:VTGPrLc.Data=VTGPrLc.Begin -Merge:VTGPrLc.End=VTGPrLc.Begin -Merge:VTGPrLc.Begin=VTGObj
4398 endif
4399 ifdef VBOX_SIGNING_MODE
4400 TEMPLATE_VBoxR0_LDFLAGS += -IntegrityCheck
4401 endif
4402TEMPLATE_VBoxR0_LIBS = \
4403 $(PATH_STAGE_LIB)/RuntimeR0Stub$(VBOX_SUFF_LIB)
4404 include $(KBUILD_PATH)/sdks/$(VBOX_WINDDK).kmk ## TODO: Add a kBuild feature for loading SDKs.
4405TEMPLATE_VBoxR0_LIBS.x86 = \
4406 $(PATH_SDK_$(VBOX_WINDDK)_LIB.x86)/int64.lib
4407TEMPLATE_VBoxR0_ORDERDEPS = $(VBOX_SIGN_DRIVER_ORDERDEPS)
4408TEMPLATE_VBoxR0_POST_CMDS = $(VBOX_SIGN_DRIVER_CMDS)
4409endif # pe
4410
4411ifeq ($(VBOX_LDR_FMT),elf)
4412TEMPLATE_VBoxR0_TOOL = $(VBOX_GCC_TOOL)
4413TEMPLATE_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)
4414TEMPLATE_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)
4415TEMPLATE_VBoxR0_CFLAGS.amd64 = -m64 -mno-red-zone -mcmodel=kernel -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fasynchronous-unwind-tables -ffreestanding
4416TEMPLATE_VBoxR0_CXXFLAGS.amd64 = -m64 -mno-red-zone -mcmodel=kernel -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fasynchronous-unwind-tables
4417TEMPLATE_VBoxR0_CXXFLAGS.freebsd = -ffreestanding
4418 if $(VBOX_GCC_VERSION_CC) < 30400
4419 TEMPLATE_VBoxR0_DEFS += RT_WITHOUT_PRAGMA_ONCE
4420 endif
4421ifeq ($(KBUILD_TARGET),solaris)
4422 TEMPLATE_VBoxR0_LDFLAGS = -r
4423 TEMPLATE_VBoxR0_LDFLAGS.solaris = -u _init -u _info
4424 TEMPLATE_VBoxR0_LIBS.solaris = \
4425 $(PATH_STAGE_LIB)/RuntimeR0Stub$(VBOX_SUFF_LIB)
4426 ifdef VBOX_GCC_USING_SOLARIS_AS
4427 TEMPLATE_VBoxR0_CFLAGS.amd64 += -Wa,-xmodel=kernel
4428 TEMPLATE_VBoxR0_CXXFLAGS.amd64 += -Wa,-xmodel=kernel
4429 endif
4430 # Solaris driver signing.
4431 TEMPLATE_VBoxR0_POST_CMDS = $(VBOX_SIGN_DRIVER_CMDS)
4432else
4433 TEMPLATE_VBoxR0_LDFLAGS = -nostdlib -Bsymbolic -g
4434 ## @todo WTF doesn't the globals work? Debug info is supposed to be split everywhere. GRR
4435 TEMPLATE_VBoxR0_LD_DEBUG = split
4436endif
4437ifn1of ($(KBUILD_TARGET),solaris freebsd)
4438 TEMPLATE_VBoxR0_LIBS = \
4439 $(VBOX_GCC_LIBGCC) # intrinsics
4440endif
4441if1of ($(KBUILD_TARGET),linux)
4442 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)
4443endif
4444endif
4445
4446ifeq ($(VBOX_LDR_FMT),macho)
4447TEMPLATE_VBoxR0_TOOL = $(VBOX_GCC_TOOL)
4448TEMPLATE_VBoxR0_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS)
4449TEMPLATE_VBoxR0_CXXFLAGS = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS) -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC_Wno-variadic-macros) \
4450 -fno-common -msoft-float -static -fno-rtti -fno-exceptions $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing \
4451 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow $(VBOX_GCC_fno-stack-protector)
4452TEMPLATE_VBoxR0_CXXFLAGS.amd64 = -m64 -mno-red-zone -mno-sse3 -mno-sse4 -mno-sse4.1 -mno-sse4.2 -mno-sse4a -fno-unwind-tables
4453TEMPLATE_VBoxR0_CXXFLAGS.x86 = -m32
4454TEMPLATE_VBoxR0_CFLAGS = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC_Wno-variadic-macros) \
4455 -fno-common -msoft-float -static -fno-exceptions $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing \
4456 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow $(VBOX_GCC_fno-stack-protector)
4457TEMPLATE_VBoxR0_CFLAGS.amd64 = -m64 -mno-red-zone -mno-sse3 -mno-sse4 -mno-sse4.1 -mno-sse4.2 -mno-sse4a -fno-unwind-tables
4458TEMPLATE_VBoxR0_CFLAGS.x86 = -m32
4459TEMPLATE_VBoxR0_LDFLAGS = $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -nostdlib
4460TEMPLATE_VBoxR0_LDFLAGS.amd64 = -m64 -static
4461TEMPLATE_VBoxR0_LDFLAGS.x86 = -m32
4462TEMPLATE_VBoxR0_CXXFLAGS.amd64 += -mkernel
4463TEMPLATE_VBoxR0_CFLAGS.amd64 += -mkernel
4464TEMPLATE_VBoxR0_LDFLAGS += -Wl,-kext -mkernel
4465TEMPLATE_VBoxR0_POST_CMDS = $(if $(eq $(tool_do),LINK_LIBRARY),,$(call VBOX_SIGN_VMM_MOD_FN,$(out),org.virtualbox.app.r0.$(target)))
4466endif
4467
4468ifeq ($(VBOX_LDR_FMT),lx)
4469TEMPLATE_VBoxR0_TOOL = GXX3OMF
4470TEMPLATE_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
4471TEMPLATE_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
4472 if $(VBOX_GCC_VERSION_CC) < 30400
4473TEMPLATE_VBoxR0_DEFS += RT_WITHOUT_PRAGMA_ONCE
4474 endif
4475TEMPLATE_VBoxR0_LDFLAGS = -nostdlib -Zdll
4476TEMPLATE_VBoxR0_LIBS = \
4477 $(VBOX_GCC_LIBGCC) \
4478 $(VBOX_OBJ_SYS0) \
4479 end
4480endif
4481
4482
4483#
4484# Template for building SUPDRV R0 things.
4485#
4486# Disabled Visual C++ warnings:
4487# -wd4996: deprecated / insecure.
4488# -wd4127: conditional expression is constant [level 4]
4489# -wd4201: nonstandard extension used : nameless struct/union [level 4]
4490# -wd4214: nonstandard extension used : bit field types other than int [level 4]
4491# -wd4706: assignment within conditional expression [level 4]
4492# -wd4324: '_TDI_PNP_CONTEXT_XP' : structure was padded due to __declspec(align())
4493#
4494# -wd4100: 'identifier' : unreferenced formal parameter [level 4] --- TODO: Enable this one!
4495#
4496TEMPLATE_VBOXR0DRV = VBox SUPDRV Ring 0
4497TEMPLATE_VBOXR0DRV_ASTOOL = $(VBOX_ASTOOL)
4498TEMPLATE_VBOXR0DRV_ASFLAGS = $(VBOX_ASFLAGS)
4499TEMPLATE_VBOXR0DRV_DEFS = IN_RING0 IN_RT_R0 $(ARCH_BITS_DEFS)
4500TEMPLATE_VBOXR0DRV_USES += dtrace
4501ifdef VBOX_WITH_DTRACE_R0DRV
4502 TEMPLATE_VBOXR0DRV_DTRACETOOL = VBoxTpG
4503 TEMPLATE_VBOXR0DRV_DEFS += VBOX_WITH_DTRACE VBOX_WITH_DTRACE_R0DRV
4504 ifdef VBOX_WITH_NATIVE_DTRACE
4505 TEMPLATE_VBOXR0DRV_DEFS += VBOX_WITH_NATIVE_DTRACE
4506 endif
4507else
4508 TEMPLATE_VBOXR0DRV_DTRACETOOL = VBoxTpG-Disabled
4509endif
4510
4511ifeq ($(KBUILD_TARGET),win)
4512 TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_VCC_TOOL)
4513 TEMPLATE_VBOXR0DRV_RCDEFS = VBOX_SVN_REV=$(VBOX_SVN_REV) VBOX_SVN_REV_MOD_5K=$(expr $(VBOX_SVN_REV) % 50000)
4514 TEMPLATE_VBOXR0DRV_DEFS.x86 = _X86_
4515 TEMPLATE_VBOXR0DRV_DEFS.x86 += NO_INTERLOCKED_INTRINSICS # Avoids intrisic VC/WDK trouble
4516 TEMPLATE_VBOXR0DRV_DEFS.x86 += WIN9X_COMPAT_SPINLOCK # Avoid multiply defined _KeInitializeSpinLock@4
4517 TEMPLATE_VBOXR0DRV_DEFS.amd64 = _AMD64_
4518 TEMPLATE_VBOXR0DRV_DEFS.win = IPRT_NT_MAP_TO_ZW
4519 TEMPLATE_VBOXR0DRV_CXXFLAGS = -Zi -Zl -GR- -EHs- -GF -Gz -GS- -Zc:wchar_t- $(VBOX_VCC_FP) -Gs4096 $(VBOX_VCC_OPT) \
4520 $(VBOX_VCC_WARN_ALL) $(VBOX_VCC_WERR)
4521 TEMPLATE_VBOXR0DRV_CFLAGS = $(TEMPLATE_VBOXR0DRV_CXXFLAGS)
4522 TEMPLATE_VBOXR0DRV_LDFLAGS = -Ignore:4197 \
4523 -Driver -Subsystem:NATIVE -Incremental:NO -Align:4096 -MapInfo:Exports -NoD -Release -Debug -Opt:Ref -Opt:Icf \
4524 -Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
4525 -Stub:$(PATH_ROOT)/src/VBox/HostDrivers/Support/win/winstub.com
4526 ifdef VBOX_WITH_DTRACE_R0DRV
4527 TEMPLATE_VBOXR0DRV_LDFLAGS += -Merge:VTGPrLc.Data=VTGPrLc.Begin -Merge:VTGPrLc.End=VTGPrLc.Begin -Merge:VTGPrLc.Begin=VTGObj
4528 endif
4529 ifdef VBOX_SIGNING_MODE
4530 TEMPLATE_VBOXR0DRV_LDFLAGS += -IntegrityCheck
4531 endif
4532 TEMPLATE_VBOXR0DRV_ORDERDEPS = $(VBOX_SIGN_DRIVER_ORDERDEPS)
4533 TEMPLATE_VBOXR0DRV_POST_CMDS = $(VBOX_SIGN_DRIVER_CMDS)
4534endif
4535
4536ifeq ($(KBUILD_TARGET),linux)
4537 TEMPLATE_VBOXR0DRV_TOOL = $(NO_SUCH_VARIABLE)
4538
4539 ifndef KERN_DIR
4540 ifndef KERN_VER
4541 KERN_VER := $(patsubst /lib/modules/%/build/.config,%,$(firstword $(shell LC_ALL=C ls -t /lib/modules/*/build/.config 2>/dev/null)))
4542 endif
4543 ifeq ($(KERN_VER),)
4544 KERN_VER := $(shell uname -r)
4545 endif
4546 KERN_DIR := /lib/modules/$(KERN_VER)/build
4547 endif
4548
4549 ##
4550 ## Generates a rule for test-building a linux kernel module (use evalcall2 to invoke).
4551 ##
4552 ## Since Linux KBuild will not abort due to undefined symbols when building
4553 ## external modules we need to grep the error output ourselves. Since vboxdrv
4554 ## and vboxguest respectively provide symbols that other modules use, we use
4555 ## the rule target (tst*.run) to save those symbols so that KBuild can do its
4556 ## checking.
4557 ##
4558 ## @param 1 Module name.
4559 ## @param 2 The test build which symvers we need (empty if none)
4560 ## @param 3 Save symvers if non-empty.
4561 ##
4562 ## @note Using the extra expansion to replace $(1), $(2) and $(3) before eval,
4563 ## thus everything else needs escaped dollars.
4564 ##
4565 if defined(VBOX_WITH_TESTCASES) \
4566 && "$(KBUILD_HOST)" == "linux" \
4567 && "$(KBUILD_HOST_ARCH)" == "$(KBUILD_TARGET_ARCH)" \
4568 && !defined(VBOX_WITHOUT_LINUX_TEST_BUILDS) \
4569 && !defined(VBOX_ONLY_SDK) \
4570 && !defined(VBOX_ONLY_DOCS) \
4571 && !defined(VBOX_ONLY_VALIDATIONKIT)
4572 define VBOX_LINUX_KMOD_TEST_BUILD_RULE_FN
4573 ifneq ($(KERN_DIR),)
4574TESTING += $$(PATH_TARGET)/tst$(1)$(subst /,_,$(KERN_DIR))_mod.run
4575OTHERS += $$(PATH_TARGET)/tst$(1)$(subst /,_,$(KERN_DIR))_mod.run
4576OTHERS_CLEAN += $$(PATH_TARGET)/tst$(1)$(subst /,_,$(KERN_DIR))_mod.run
4577$$(PATH_TARGET)/tst$(1)$(subst /,_,$(KERN_DIR))_mod.run: \
4578 $$(if $(2),$$(PATH_TARGET)/tst$(2)$(subst /,_,$(KERN_DIR))_mod.run,) \
4579 $$$$($(1)_2_STAGE_TARGETS)
4580 $(QUIET)$$(call MSG_L1,Doing a test build of the $(1) kernel module)
4581 $(QUIET)$$(RM) -f -- "$$@"
4582 $(QUIET)$$(TEST) -n "$$($(1)_INST)"
4583 $(QUIET)$$(RM) -Rf -- "$$(PATH_TARGET)/tst$(1)_mod"
4584 $(QUIET)$$(MKDIR) -p -- "$$(PATH_TARGET)/tst$(1)_mod"
4585 $(QUIET)$$(CP) -R -- "$$(PATH_STAGE_BIN)/../$$($(1)_INST)" "$$(PATH_TARGET)/tst$(1)_mod/"
4586 + $(QUIET)make KBUILD_VERBOSE=$(KBUILD_VERBOSE) KERN_DIR=$(KERN_DIR) VBOX_KERN_QUIET=1 -C $$(PATH_TARGET)/tst$(1)_mod clean
4587 ifneq ($(2),)
4588 $(QUIET)$$(CP) -f -- "$$<" "$$(PATH_TARGET)/tst$(1)_mod/Module.symvers"
4589 endif
4590 + $(QUIET)$(REDIRECT_EXT) -d2=1 -w1 "$$(PATH_TARGET)/tst$(1)_mod/make.err" -- \
4591 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
4592 $(CAT) "$$(PATH_TARGET)/tst$(1)_mod/make.err"
4593 $(QUIET)! grep "^WARNING: .* undefined!$$$$" "$$(PATH_TARGET)/tst$(1)_mod/make.err"
4594 if1of ($(USERNAME), bird)
4595 - nm -u "$$(PATH_TARGET)/tst$(1)_mod/"*.ko | sort
4596 endif
4597 ifneq ($(3),)
4598 $(QUIET)$$(CP) -f -- "$$(PATH_TARGET)/tst$(1)_mod/Module.symvers" "$$@"
4599 else
4600 $(QUIET)$$(APPEND) -t "$$@" "done"
4601 endif
4602 $(QUIET)$$(RM) -Rf -- "$$(PATH_TARGET)/tst$(1)_mod"
4603vbox-linux-kmod-test-builds: $$(PATH_TARGET)/tst$(1)$(subst /,_,$(KERN_DIR))_mod.run
4604$$(foreach src,$$(notdir $$(filter %.c,$$(subst =>,/,$$($(1)_SOURCES)))),$$(patsubst %.c,%.o,$$(src))): $$(PATH_TARGET)/tst$(1)$(subst /,_,$(KERN_DIR))_mod.run
4605 endif
4606 endef # VBOX_LINUX_KMOD_TEST_BUILD_RULE_FN
4607 else
4608 VBOX_LINUX_KMOD_TEST_BUILD_RULE_FN =
4609 endif
4610else
4611 VBOX_LINUX_KMOD_TEST_BUILD_RULE_FN =
4612endif # linux target
4613
4614ifeq ($(KBUILD_TARGET),os2)
4615 ifndef VBOX_USE_WATCOM_FOR_OS2
4616TEMPLATE_VBOXR0DRV_TOOL = GXX3OMF
4617TEMPLATE_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
4618TEMPLATE_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
4619TEMPLATE_VBOXR0DRV_LIBS = $(VBOX_GCC_LIBGCC)
4620# wlink thinks physdevice doesn't need fixups and should have a stack - stupid!
4621TEMPLATE_VBOXR0DRV_LDFLAGS = -Zlinker Option -Zlinker internalrelocs, -Zlinker togglerelocs
4622 else
4623TEMPLATE_VBOXR0DRV_TOOL = OPENWATCOM
4624TEMPLATE_VBOXR0DRV_CTOOL = OPENWATCOM
4625TEMPLATE_VBOXR0DRV_CXXTOOL = OPENWATCOM
4626TEMPLATE_VBOXR0DRV_LDTOOL = OPENWATCOM-WL
4627TEMPLATE_VBOXR0DRV_ARTOOL = OPENWATCOM
4628TEMPLATE_VBOXR0DRV_ASTOOL = NASM
4629TEMPLATE_VBOXR0DRV_ASFLAGS = -fobj -DASM_FORMAT_OMF -D__NASM__ -w+orphan-labels #-g -F borland
4630TEMPLATE_VBOXR0DRV_DEFS.os2 = #_OS2EMX_H
4631TEMPLATE_VBOXR0DRV_INCS = \
4632 $(PATH_TOOL_OPENWATCOM)/h \
4633 $(PATH_TOOL_OPENWATCOM)/h/os2 \
4634 $(PATH_ROOT)/include \
4635 $(PATH_KLIBC_TRUNK)/libc/include # for os2ddk
4636TEMPLATE_VBOXR0DRV_CFLAGS = -s -ze -w4 -hd -d1+ -nt=TEXT32 -nc=CODE -4 -of+
4637TEMPLATE_VBOXR0DRV_CXXFLAGS = -s -ze -w4 -hd -d2t -nt=TEXT32 -nc=CODE -4 -of+
4638TEMPLATE_VBOXR0DRV_LDFLAGS = \
4639 form os2 lx physdevice \
4640 option NODefaultlibs, internalrelocs, togglerelocs \
4641 debug dwarf all #option symfile
4642# debug codeview all option symfile - wlink generates bad info, overwritten mod dir header.
4643 endif
4644endif
4645
4646ifeq ($(KBUILD_TARGET),darwin)
4647TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_GCC_TOOL)
4648TEMPLATE_VBOXR0DRV_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS) KERNEL KERNEL_PRIVATE DRIVER_PRIVATE APPLE NeXT
4649 ifdef VBOX_WITH_NEW_XCODE # Note xcode uses -fstrict-aliasing, we currently don't dare... We also add -mno-red-zone.
4650TEMPLATE_VBOXR0DRV_INCS += \
4651 $(VBOX_PATH_MACOSX_SDK)/System/Library/Frameworks/Kernel.framework/PrivateHeaders \
4652 $(VBOX_PATH_MACOSX_SDK)/System/Library/Frameworks/Kernel.framework/Headers
4653## @todo try use VBOX_GCC_PEDANTIC_CXX
4654# -Wno-c++11-extensions -Wno-c99-extensions -Wno-extra-semi -Wno-zero-length-array
4655TEMPLATE_VBOXR0DRV_CXXFLAGS = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS) -mkernel \
4656 -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_CXX) -Wno-long-long $(VBOX_GCC_fdiagnostics-show-option) \
4657 -Wno-c++11-extensions -Wno-c99-extensions -Wno-extra-semi -Wno-zero-length-array \
4658 -Wno-gnu-zero-variadic-macro-arguments -Wno-four-char-constants \
4659 -fno-common -nostdinc -fno-builtin $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_fvisibility-hidden) \
4660 -fno-exceptions -msoft-float -fapple-kext -fno-rtti -mkernel \
4661 -fmodules -fmodules-prune-interval=86400 -fmodules-prune-after=345600 -Wnon-modular-include-in-framework-module \
4662 -Werror=non-modular-include-in-framework-module \
4663 $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fasm-blocks -fno-strict-aliasing -stdlib=libc++
4664# also used by xcode 6.2: \
4665# -Werror=return-type \
4666# -Werror=deprecated-objc-isa-usage \
4667# -Werror=objc-root-class \
4668# -Wno-missing-field-initializers -Wno-missing-prototypes -Wunreachable-code \
4669# -Wno-overloaded-virtual -Wno-exit-time-destructors -Wno-missing-braces -Wparentheses -Wswitch -Wunused-function \
4670# -Wno-unused-label -Wno-unused-parameter -Wunused-variable -Wunused-value -Wempty-body \
4671# -Wconditional-uninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants \
4672# -Wno-conversion -Wconstant-conversion -Wint-conversion -Wbool-conversion -Wenum-conversion \
4673# -Wshorten-64-to-32 -Wno-newline-eof -Wno-c++11-extensions -Wdeprecated-declarations -Winvalid-offsetof -Wno-sign-conversion
4674TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64 = -m64 -mno-red-zone
4675TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = -m32
4676TEMPLATE_VBOXR0DRV_CFLAGS = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -mkernel \
4677 -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_C) -Wno-long-long $(VBOX_GCC_fdiagnostics-show-option) \
4678 -fno-common -nostdinc -fno-builtin $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_fvisibility-hidden) \
4679 -fno-exceptions -msoft-float -fapple-kext -fno-rtti \
4680 -fmodules -fmodules-prune-interval=86400 -fmodules-prune-after=345600 -Wnon-modular-include-in-framework-module \
4681 -Werror=non-modular-include-in-framework-module \
4682 $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fasm-blocks -fno-strict-aliasing
4683TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 -mno-red-zone
4684TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32
4685 if 1
4686 TEMPLATE_VBOXR0DRV_CFLAGS += $(VBOX_GCC_WERR)
4687 TEMPLATE_VBOXR0DRV_CXXFLAGS += $(VBOX_GCC_WERR)
4688 endif
4689TEMPLATE_VBOXR0DRV_LDFLAGS = $(filter-out $(VBOX_DARWIN_NO_COMPACT_LINKEDIT),$(VBOX_DARWIN_DEF_SDK_LDFLAGS)) \
4690 -nostdlib -stdlib=libc++ -Wl,-kext -Wl,-keep_private_externs
4691TEMPLATE_VBOXR0DRV_LDFLAGS.amd64 = -m64
4692TEMPLATE_VBOXR0DRV_LDFLAGS.x86 = -m32
4693TEMPLATE_VBOXR0DRV_LIBS = kmodc++ kmod cc_kext
4694 else
4695TEMPLATE_VBOXR0DRV_INCS += \
4696 $(VBOX_PATH_MACOSX_SDK)/System/Library/Frameworks/Kernel.framework/PrivateHeaders \
4697 $(VBOX_PATH_MACOSX_SDK)/System/Library/Frameworks/Kernel.framework/Headers
4698## @todo try use VBOX_GCC_PEDANTIC_CXX
4699TEMPLATE_VBOXR0DRV_CXXFLAGS = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS) \
4700 -g $(VBOX_GCC_pipe) $(VBOX_GCC_WARN) -Wno-long-long $(VBOX_GCC_fdiagnostics-show-option) \
4701 -fno-common -nostdinc -fno-builtin -finline $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_fvisibility-hidden) \
4702 -fno-keep-inline-functions -fno-exceptions -msoft-float \
4703 -fapple-kext -fno-rtti -fcheck-new -force_cpusubtype_ALL \
4704 $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fasm-blocks
4705TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64 = -m64 -mkernel -mno-red-zone -gdwarf-2
4706TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = -m32 -static
4707TEMPLATE_VBOXR0DRV_CFLAGS = $(VBOX_DARWIN_DEF_SDK_CFLAGS) \
4708 -g $(VBOX_GCC_pipe) $(VBOX_GCC_WARN) -Wno-long-long -fno-common -nostdinc -fno-builtin -finline \
4709 -fno-keep-inline-functions -fno-exceptions $(VBOX_GCC_fvisibility-hidden) -msoft-float \
4710 -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations \
4711 -Werror-implicit-function-declaration -force_cpusubtype_ALL \
4712 $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fasm-blocks
4713TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 -mkernel -mno-red-zone -gdwarf-2
4714TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -static
4715TEMPLATE_VBOXR0DRV_LDFLAGS = $(filter-out $(VBOX_DARWIN_NO_COMPACT_LINKEDIT),$(VBOX_DARWIN_DEF_SDK_LDFLAGS)) \
4716 -nostdlib -Wl,-kext,-new_linker -Wl,-Y,1455 -keep_private_extern
4717TEMPLATE_VBOXR0DRV_LDFLAGS.amd64 = -m64
4718TEMPLATE_VBOXR0DRV_LDFLAGS.x86 = -m32
4719TEMPLATE_VBOXR0DRV_LIBS = kmodc++ kmod cc_kext cpp_kext $(VBOX_GCC_LIBGCC)
4720 endif
4721endif
4722
4723ifeq ($(KBUILD_TARGET),solaris)
4724## The Solaris /usr/platform/i86pc/include and /usr/include directories.
4725VBOX_SOLARIS_SYS_INCS ?= /usr/platform/i86pc/include /usr/include
4726
4727TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_GCC_TOOL)
4728TEMPLATE_VBOXR0DRV_DEFS += _MACHDEP _KERNEL _STRICT_STDC
4729 if $(VBOX_GCC_VERSION_CC) < 30400
4730TEMPLATE_VBOXR0DRV_DEFS += RT_WITHOUT_PRAGMA_ONCE
4731 endif
4732TEMPLATE_VBOXR0DRV_INCS = $(VBOX_SOLARIS_SYS_INCS)
4733TEMPLATE_VBOXR0DRV_LDFLAGS = -r -dy
4734TEMPLATE_VBOXR0DRV_LDFLAGS.amd64 = $(if $(eq $(KBUILD_HOST),solaris),-64,-m elf_x86_64)
4735# Exclude -Wall because of solaris headers' pragma ident warnings that gcc refuses to supress.
4736TEMPLATE_VBOXR0DRV_CFLAGS = -Wpointer-arith -Winline $(VBOX_GCC_Wno-pointer-sign) \
4737 -Wmissing-prototypes -Wstrict-prototypes $(VBOX_GCC_fdiagnostics-show-option) \
4738 -Wshadow -Wuninitialized -Wunused-function -Wunused-label -Wunused-value -Wunused-variable \
4739 -Wformat -Wimplicit-int -Wimplicit-function-declaration -Werror-implicit-function-declaration -Wparentheses \
4740 -O2 -fno-omit-frame-pointer -ffreestanding -nodefaultlibs -fno-strict-aliasing -fno-common -std=c99
4741TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow
4742TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow $(VBOX_GCC_msave-args) \
4743 -mno-red-zone -mcmodel=kernel $(if-expr defined(VBOX_GCC_USING_SOLARIS_AS),-Wa$(COMMA)-xmodel=kernel,) \
4744 -fno-reorder-blocks -fno-asynchronous-unwind-tables -funit-at-a-time
4745TEMPLATE_VBOXR0DRV_CXXFLAGS = -Wpointer-arith -Winline \
4746 -Wshadow -Wuninitialized -Wunused-function -Wunused-label -Wunused-value -Wunused-variable \
4747 -Wformat \
4748 -O2 -nodefaultlibs -fno-omit-frame-pointer -fno-strict-aliasing -fno-common -fno-exceptions -fno-rtti
4749TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = $(TEMPLATE_VBOXR0DRV_CFLAGS.x86)
4750TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64 = $(TEMPLATE_VBOXR0DRV_CFLAGS.amd64)
4751TEMPLATE_VBOXR0DRV_POST_CMDS = $(VBOX_SIGN_DRIVER_CMDS)
4752endif # Solaris
4753
4754ifeq ($(KBUILD_TARGET),freebsd)
4755# x86 FreeBSD (6.2 or something):
4756# cc -O2 -fno-strict-aliasing -pipe -Werror -D_KERNEL -DKLD_MODULE \
4757# -nostdinc -I- -I. -I@ -I@/contrib/altq -I@/../include -I/usr/include \
4758# -finline-limit=8000 -fno-common -mno-align-long-strings -mpreferred-stack-boundary=2 \
4759# -mno-mmx -mno-3dnow -mno-sse -mno-sse2 -ffreestanding -Wall -Wredundant-decls -Wnested-externs \
4760# -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -fformat-extensions \
4761# -std=c99 -c ../my.c
4762# ld -d -warn-common -r -d -o my.kld my.o
4763# :> export_syms
4764# awk -f /usr/src/sys/modules/my/../../conf/kmod_syms.awk my.kld export_syms | xargs -J% objcopy % my.kld
4765# ld -Bsharable -d warn-commnon -o my.ko my.kld
4766#
4767# AMD64 FreeBSD (7.1):
4768# cc -O2 -fno-strict-aliasing -pipe -D_KERNEL -DKLD_MODULE -std=c99 -nostdinc -I. -I@ -I@/contrib/altq \
4769# -finline-limit=8000 --param inline-unit-growth=100 --param large-function-growth=1000 -fno-common \
4770# -fno-omit-frame-pointer -mcmodel=kernel -mno-red-zone -mfpmath=387 -mno-sse -mno-sse2 -mno-mmx \
4771# -mno-3dnow -msoft-float -fno-asynchronous-unwind-tables -ffreestanding \
4772# -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -Wundef -Wno-pointer-sign \
4773# -fformat-extensions -c /usr/src/sys/modules/my/../../dev/my/if_my.c
4774# ld -d -warn-common -r -d -o if_my.ko if_my.o
4775# :> export_syms
4776# awk -f /usr/src/sys/modules/my/../../conf/kmod_syms.awk if_my.ko export_syms | xargs -J% objcopy % if_my.ko
4777
4778# Note: @ -> /usr/src/sys and machine -> /usr/src/sys/i386/include
4779
4780## The location of the FreeBSD kernel source.
4781VBOX_FREEBSD_SRC ?= /usr/src/sys
4782## The FreeBSD /usr/include.
4783VBOX_FREEBSD_SYS_INCS ?= /usr/include
4784
4785TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_GCC_TOOL)
4786TEMPLATE_VBOXR0DRV_LDTOOL = FREEBSDKMODLD
4787TEMPLATE_VBOXR0DRV_DEFS += _KERNEL KLD_MODULE
4788 if $(VBOX_GCC_VERSION_CC) < 30400
4789TEMPLATE_VBOXR0DRV_DEFS += RT_WITHOUT_PRAGMA_ONCE
4790 endif
4791TEMPLATE_VBOXR0DRV_INCS = \
4792 $(VBOX_FREEBSD_SRC) \
4793 $(VBOX_FREEBSD_SRC)/contrib/altq \
4794 $(VBOX_FREEBSD_SRC)/contrib/ck/include \
4795 $(VBOX_FREEBSD_SRC)/../include \
4796 $(VBOX_FREEBSD_SYS_INCS)
4797# omitting: -Wcast-qual, -Wredundant-decls
4798TEMPLATE_VBOXR0DRV_CFLAGS = \
4799 $(VBOX_GCC_WARN) -Wpointer-arith -Winline $(VBOX_GCC_Wno-pointer-sign) $(VBOX_GCC_fdiagnostics-show-option) \
4800 -Wstrict-prototypes -Wmissing-prototypes -Wstrict-prototypes \
4801 -Wimplicit-function-declaration -Werror-implicit-function-declaration \
4802 -O2 -ffreestanding -fno-strict-aliasing -fno-common \
4803 $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
4804 -nostdinc -std=c99
4805TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -mno-align-long-strings -mno-mmx -mno-3dnow -mno-sse -mno-sse2
4806TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 -fno-omit-frame-pointer -mcmodel=kernel -mno-red-zone -mfpmath=387 \
4807 -mno-sse -mno-sse2 -mno-mmx -mno-3dnow -msoft-float -fno-asynchronous-unwind-tables -Wundef
4808TEMPLATE_VBOXR0DRV_CXXFLAGS = -fno-exceptions -fno-rtti \
4809 $(VBOX_GCC_WARN) -Wpointer-arith -Winline \
4810 -O2 -fno-strict-aliasing -fno-common \
4811 $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
4812 -nostdinc
4813TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = $(TEMPLATE_VBOXR0DRV_CFLAGS.x86)
4814TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64 = $(TEMPLATE_VBOXR0DRV_CFLAGS.amd64)
4815TEMPLATE_VBOXR0DRV_SYSSUFF = .ko
4816TEMPLATE_VBOXR0DRV_LDFLAGS = -d --warn-common
4817TEMPLATE_VBOXR0DRV_LDFLAGS.x86 = -m elf_i386_fbsd
4818TEMPLATE_VBOXR0DRV_LDFLAGS.amd64 = -m elf_x86_64_fbsd
4819
4820TOOL_FREEBSDKMODLD = FreeBSD kernel module linker.
4821# See kBuild/tools/GCC3.kmk for docs.
4822TOOL_FREEBSDKMODLD_LINK_SYSMOD_OUTPUT_MAYBE = $(outbase).map
4823TOOL_FREEBSDKMODLD_LINK_SYSMOD_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib)))
4824TOOL_FREEBSDKMODLD_LINK_SYSMOD_DEPORD =
4825 ifeq ($(KBUILD_TARGET_ARCH),amd64)
4826TOOL_FREEBSDKMODLD_LINK_SYSMOD_OUTPUT =
4827define TOOL_FREEBSDKMODLD_LINK_SYSMOD_CMDS
4828# Link intermediate .kld (a relocatable object).
4829 ld $(flags) -r -o $(out) $(objs) \
4830 $(foreach p,$(libpath), -L$(p))\
4831 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(basename $(lib))), $(lib)))
4832# Strip non-exported symbols private and localize the exported ones.
4833 awk -f $(VBOX_FREEBSD_SRC)/conf/kmod_syms.awk $(out) $(if $(othersrc), $(othersrc),/dev/null) \
4834 | xargs -J% objcopy % $(out)
4835
4836## Strip debug info (comment out if debugging or something).
4837 objcopy --strip-debug $(out)
4838endef
4839 else # x86
4840TOOL_FREEBSDKMODLD_LINK_SYSMOD_OUTPUT = $(outbase).kld
4841define TOOL_FREEBSDKMODLD_LINK_SYSMOD_CMDS
4842# Link intermediate .kld (a relocatable object).
4843 ld $(flags) -r -o $(outbase).kld $(objs) \
4844 $(foreach p,$(libpath), -L$(p))\
4845 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(basename $(lib))), $(lib)))
4846# Strip non-exported symbols private and localize the exported ones.
4847 awk -f $(VBOX_FREEBSD_SRC)/conf/kmod_syms.awk $(outbase).kld $(if $(othersrc), $(othersrc),/dev/null) \
4848 | xargs -J% objcopy % $(outbase).kld
4849
4850# Link the final .ko (a shared object).
4851 ld $(flags) -Bshareable -o $(out) $(outbase).kld
4852endef
4853 endif # x86
4854
4855endif # FreeBSD
4856
4857ifeq ($(KBUILD_TARGET),netbsd)
4858
4859# The location of the NetBSD sources.
4860VBOX_NETBSD_SRC ?= /usr/src
4861
4862# NetBSD uses "i386" for 32-bit, "x86" for common 32- and 64-bit code.
4863ifeq ($(KBUILD_TARGET_ARCH),amd64)
4864VBOX_NETBSD_TARGET_ARCH=amd64
4865else
4866VBOX_NETBSD_TARGET_ARCH=i386
4867endif
4868
4869VBOX_NETBSD_TARGET_SRC=$(VBOX_NETBSD_SRC)/sys/arch/$(VBOX_NETBSD_TARGET_ARCH)
4870
4871TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_GCC_TOOL)
4872TEMPLATE_VBOXR0DRV_DEFS += _KERNEL _MODULE
4873 if $(VBOX_GCC_VERSION_CC) < 30400
4874TEMPLATE_VBOXR0DRV_DEFS += RT_WITHOUT_PRAGMA_ONCE
4875 endif
4876TEMPLATE_VBOXR0DRV_INCS = \
4877 $(VBOX_NETBSD_SRC)/sys \
4878 $(VBOX_NETBSD_SRC)/common/include \
4879 $(PATH_OBJ)/netbsd/include
4880
4881TEMPLATE_VBOXR0DRV_CFLAGS = \
4882 $(VBOX_GCC_WARN) -Wpointer-arith -Winline $(VBOX_GCC_Wno-pointer-sign) \
4883 $(VBOX_GCC_fdiagnostics-show-option) \
4884 -Wstrict-prototypes -Wmissing-prototypes -Wstrict-prototypes \
4885 -Wimplicit-function-declaration -Werror-implicit-function-declaration \
4886 -O2 -ffreestanding -fno-strict-aliasing -fno-common -finline-limit=8000 \
4887 $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
4888 -nostdinc -std=c99 -msoft-float
4889TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -mno-mmx -mno-sse -mno-avx \
4890 -mno-fp-ret-in-387
4891TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 --param inline-unit-growth=100 \
4892 --param large-function-growth=1000 -fno-omit-frame-pointer \
4893 -mcmodel=kernel -mno-red-zone -mno-sse -mno-mmx -mno-avx \
4894 -fno-asynchronous-unwind-tables -mno-fp-ret-in-387
4895TEMPLATE_VBOXR0DRV_CXXFLAGS = -fno-exceptions -fno-rtti \
4896 $(VBOX_GCC_WARN) -Wpointer-arith -Winline \
4897 -O2 -fno-strict-aliasing -fno-common -finline-limit=8000 \
4898 $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
4899 -nostdinc -msoft-float
4900TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = $(TEMPLATE_VBOXR0DRV_CFLAGS.x86)
4901TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64 = $(TEMPLATE_VBOXR0DRV_CFLAGS.amd64)
4902TEMPLATE_VBOXR0DRV_SYSSUFF = .kmod
4903TEMPLATE_VBOXR0DRV_LDFLAGS = -d --warn-common
4904TEMPLATE_VBOXR0DRV_LDFLAGS.x86 = -m elf_i386
4905TEMPLATE_VBOXR0DRV_LDFLAGS.amd64 = -m elf_x86_64
4906
4907# symlink kernel includes
4908TEMPLATE_VBOXR0DRV_ORDERDEPS += \
4909 $(PATH_OBJ)/netbsd/include/$(VBOX_NETBSD_TARGET_ARCH) \
4910 $(PATH_OBJ)/netbsd/include/x86 \
4911 $(PATH_OBJ)/netbsd/include/machine
4912
4913$$(PATH_OBJ)/netbsd/include/$(VBOX_NETBSD_TARGET_ARCH):
4914 $(QUIET)$(MKDIR) -p $(@D)
4915 $(QUIET)$(LN_SYMLINK) $(VBOX_NETBSD_TARGET_SRC)/include $@
4916
4917$$(PATH_OBJ)/netbsd/include/x86:
4918 $(QUIET)$(MKDIR) -p $(@D)
4919 $(QUIET)$(LN_SYMLINK) $(VBOX_NETBSD_SRC)/sys/arch/x86/include $@
4920
4921$$(PATH_OBJ)/netbsd/include/machine:
4922 $(QUIET)$(MKDIR) -p $(@D)
4923 $(QUIET)$(LN_SYMLINK) $(VBOX_NETBSD_TARGET_ARCH) $@
4924
4925endif # NetBSD
4926
4927ifeq ($(KBUILD_TARGET),haiku)
4928## The Haiku include directories
4929VBOX_HAIKU_SYS_INCS ?= /boot/develop/headers/os/kernel /boot/develop/headers/os/drivers
4930
4931TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_GCC_TOOL)
4932TEMPLATE_VBOXR0DRV_LDTOOL = $(VBOX_GCC_TOOL)
4933TEMPLATE_VBOXR0DRV_DEFS = _KERNEL_MODE=1 _STRICT_STDC IN_RING0 IN_RT_R0
4934 if $(VBOX_GCC_VERSION_CC) < 30400
4935TEMPLATE_VBOXR0DRV_DEFS += RT_WITHOUT_PRAGMA_ONCE
4936 endif
4937TEMPLATE_VBOXR0DRV_INCS = $(VBOX_HAIKU_SYS_INCS)
4938#TODO: sort this out
4939TEMPLATE_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
4940TEMPLATE_VBOXR0DRV_CFLAGS = -fno-PIC \
4941 $(VBOX_GCC_WARN) -Wstrict-prototypes $(VBOX_GCC_Wno-pointer-sign) -Wno-sign-compare \
4942 $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration
4943TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -mno-sse -mno-mmx -mno-sse2 -mno-3dnow
4944TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow
4945TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow \
4946 -fno-reorder-blocks -ffreestanding -fno-asynchronous-unwind-tables -funit-at-a-time \
4947 -Wno-sign-compare
4948TEMPLATE_VBOXR0DRV_CXXFLAGS = -fno-PIC -Wpointer-arith \
4949 -Wshadow -Wuninitialized -Wunused-function -Wunused-label -Wunused-value -Wunused-variable \
4950 -Wformat \
4951 -O2 -nodefaultlibs -fno-omit-frame-pointer -fno-strict-aliasing -fno-common -fno-exceptions -fno-rtti
4952TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = $(TEMPLATE_VBOXR0DRV_CFLAGS.x86) -fno-exceptions -fno-rtti
4953TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64 = $(TEMPLATE_VBOXR0DRV_CFLAGS.amd64) -fno-exceptions -fno-rtti
4954endif # Haiku
4955
4956ifdef VBOX_WITH_VBOXDRV
4957 ifndef TEMPLATE_VBOXR0DRV_TOOL
4958 $(warning Warning: VBox Build: Target $(KBUILD_HOST) is not officially supported!)
4959 endif
4960endif
4961
4962ifn1of ($(KBUILD_TARGET), darwin os2 win solaris freebsd)
4963 # This doesn't work if supdrv is natively loading VMMR0.r0 et al, but
4964 # fortunately it isn't really necessary.
4965 TEMPLATE_VBOXR0DRV_CFLAGS += -include $(PATH_ROOT)/include/VBox/SUPDrvMangling.h
4966 TEMPLATE_VBOXR0DRV_CXXFLAGS += -include $(PATH_ROOT)/include/VBox/SUPDrvMangling.h
4967endif
4968
4969#
4970# Template for building libraries used by ring-0 drivers.
4971#
4972TEMPLATE_VBoxR0DrvLib = VBox Ring 0 Driver Library
4973TEMPLATE_VBoxR0DrvLib_EXTENDS = VBOXR0DRV
4974TEMPLATE_VBoxR0DrvLib_INSTTYPE = stage
4975TEMPLATE_VBoxR0DrvLib_INSTTYPE.linux = stage
4976
4977#
4978# Template for installing INF and CAT files.
4979#
4980TEMPLATE_VBoxR0DrvInfCat = VBox SUPDRV Ring 0 - Install .sys, .cat, .inf
4981TEMPLATE_VBoxR0DrvInfCat_INST = $(INST_BIN)
4982TEMPLATE_VBoxR0DrvInfCat_MODE = a+r,u+w
4983TEMPLATE_VBoxR0DrvInfCat_IFFLAGS = --no-hard-link-files-when-possible
4984
4985
4986#
4987# Template for building R3 executables and static libraries which are linked into executables.
4988# Note! This is the base template for a whole lot of other ones, so be careful when changing it.
4989#
4990# Disabled Visual C++ warnings:
4991# -wd4065: switch statement contains 'default' but no 'case' labels
4992# -wd4244: 'conversion' conversion from 'type1' to 'type2', possible loss of data
4993# -wd4996: deprecated / insecure.
4994#
4995TEMPLATE_VBOXR3EXE = VBox Ring 3 Exe
4996TEMPLATE_VBOXR3EXE_ASTOOL = $(VBOX_ASTOOL)
4997TEMPLATE_VBOXR3EXE_ASFLAGS.x86 = $(VBOX_ASFLAGS32)
4998TEMPLATE_VBOXR3EXE_ASFLAGS.amd64 = $(VBOX_ASFLAGS64)
4999TEMPLATE_VBOXR3EXE_DEFS = IN_RING3 $(ARCH_BITS_DEFS)
5000TEMPLATE_VBOXR3EXE_DEFS.win = _CRT_SECURE_NO_DEPRECATE
5001TEMPLATE_VBOXR3EXE_USES = dtrace
5002if defined(VBOX_WITH_DTRACE_R3) && defined(VBOX_WITH_NATIVE_DTRACE)
5003 TEMPLATE_VBOXR3EXE_DTRACETOOL = DTraceAndVBoxTpG
5004 TEMPLATE_VBOXR3EXE_DTRACE_OBJ_FLAGS = -C
5005 TEMPLATE_VBOXR3EXE_DTRACE_HDR_FLAGS = -C
5006 TEMPLATE_VBOXR3EXE_DEFS += VBOX_WITH_DTRACE VBOX_WITH_DTRACE_R3 VBOX_WITH_NATIVE_DTRACE
5007else
5008 TEMPLATE_VBOXR3EXE_DTRACE_HDR_FLAGS = --ring-3-context
5009 TEMPLATE_VBOXR3EXE_DTRACE_OBJ_FLAGS = --ring-3-context --pic --probe-fn-imported --probe-fn-name "SUPTracerFireProbe"
5010 if defined(VBOX_WITH_DTRACE_R3)
5011 TEMPLATE_VBOXR3EXE_DTRACETOOL = VBoxTpG
5012 TEMPLATE_VBOXR3EXE_DEFS += VBOX_WITH_DTRACE VBOX_WITH_DTRACE_R3
5013 else
5014 TEMPLATE_VBOXR3EXE_DTRACETOOL = VBoxTpG-Disabled
5015 endif
5016endif
5017TEMPLATE_VBOXR3EXE_LIBS.kprofile = $(LIB_KPROFILE)
5018ifeq ($(KBUILD_TARGET),win)
5019# TEMPLATE_VBOXR3EXE_TOOL = $(VBOX_VCC_TOOL)
5020 TEMPLATE_VBOXR3EXE_TOOL.win.x86 = $(VBOX_VCC_TOOL_STEM)X86
5021 TEMPLATE_VBOXR3EXE_TOOL.win.amd64 = $(VBOX_VCC_TOOL_STEM)AMD64
5022 TEMPLATE_VBOXR3EXE_RCDEFS = VBOX_SVN_REV=$(VBOX_SVN_REV) VBOX_SVN_REV_MOD_5K=$(expr $(VBOX_SVN_REV) % 50000)
5023 TEMPLATE_VBOXR3EXE_SDKS = ReorderCompilerIncs $(VBOX_WINPSDK)
5024 TEMPLATE_VBOXR3EXE_CXXFLAGS = -Zi -Zl -GR- -EHsc -GF -MD$(VBOX_VCC_CRT_TYPE) -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP) \
5025 $(VBOX_VCC_WARN_ALL) $(VBOX_VCC_WERR)
5026 TEMPLATE_VBOXR3EXE_CXXFLAGS.debug = -RTCsu
5027 TEMPLATE_VBOXR3EXE_CXXFLAGS.dbgopt = $(NO_SUCH_VARIABLE)
5028 TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile = -Gh -GH
5029 TEMPLATE_VBOXR3EXE_CFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS)
5030 TEMPLATE_VBOXR3EXE_CFLAGS.debug = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.debug)
5031 TEMPLATE_VBOXR3EXE_CFLAGS.dbgopt = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.dbgopt)
5032 TEMPLATE_VBOXR3EXE_CFLAGS.kprofile = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile)
5033 TEMPLATE_VBOXR3EXE_PCHFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS)
5034 TEMPLATE_VBOXR3EXE_PCHFLAGS.debug = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.debug)
5035 TEMPLATE_VBOXR3EXE_PCHFLAGS.dbgopt = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.dbgopt)
5036 TEMPLATE_VBOXR3EXE_PCHFLAGS.kprofile = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile)
5037 TEMPLATE_VBOXR3EXE_LDFLAGS = -Ignore:4197 \
5038 /NOD /INCREMENTAL:NO /MAPINFO:EXPORTS /LargeAddressAware /DynamicBase /NxCompat /Release /Debug /Opt:Ref /Opt:Icf \
5039 /Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
5040 /STUB:$(PATH_ROOT)/src/VBox/HostDrivers/Support/win/winstub.com \
5041 /DISALLOWLIB:libc.lib \
5042 /DISALLOWLIB:libcd.lib \
5043 /DISALLOWLIB:libcmt.lib \
5044 /DISALLOWLIB:libcmtd.lib \
5045 /DISALLOWLIB:msvcrt$(VBOX_VCC_CRT_TYPE_N).lib \
5046 /DISALLOWLIB:msvcprt$(VBOX_VCC_CRT_TYPE_N).lib
5047 ifdef VBOX_WITH_DTRACE_R3
5048 TEMPLATE_VBOXR3EXE_LDFLAGS += -Merge:VTGPrLc.Data=VTGPrLc.Begin -Merge:VTGPrLc.End=VTGPrLc.Begin -Merge:VTGPrLc.Begin=VTGObj
5049 endif
5050 if defined(VBOX_SIGNING_MODE) && defined(VBOX_WITH_HARDENING)
5051 TEMPLATE_VBOXR3EXE_LDFLAGS += -IntegrityCheck
5052 endif
5053
5054 TEMPLATE_VBOXR3EXE_LIBS.x86 = \
5055 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.x86)_LIB)/msvcrt$(VBOX_VCC_CRT_TYPE).lib \
5056 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.x86)_LIB)/msvcprt$(VBOX_VCC_CRT_TYPE).lib \
5057 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.x86)_LIB)/oldnames.lib
5058 TEMPLATE_VBOXR3EXE_LIBS.amd64 = \
5059 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.amd64)_LIB)/msvcrt$(VBOX_VCC_CRT_TYPE).lib \
5060 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.amd64)_LIB)/msvcprt$(VBOX_VCC_CRT_TYPE).lib \
5061 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.amd64)_LIB)/oldnames.lib
5062 TEMPLATE_VBOXR3EXE_POST_CMDS = $(VBOX_SIGN_IMAGE_CMDS)
5063 if defined(VBOX_WITH_MORE_NT4_COMPAT_BINARIES) && "$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)" == "win.x86"
5064 TEMPLATE_VBOXR3EXE_POST_CMDS.win.x86 = $(if $(eq $(tool_do),LINK_LIBRARY),,$(VBOX_PE_SET_VERSION) $(out)$$(NLTAB)$(TEMPLATE_VBOXR3EXE_POST_CMDS))
5065 TEMPLATE_VBOXR3EXE_LNK_DEPS.win.x86 = $(if $(eq $(tool_do),LINK_LIBRARY),,$(VBOX_PE_SET_VERSION))
5066 TEMPLATE_VBOXR3EXE_LDFLAGS.win.x86 = \
5067 -Include:_vcc100_kernel32_fakes_cpp \
5068 -Include:_vcc100_kernel32_fakes_asm
5069 TEMPLATE_VBOXR3EXE_LIBS.win.x86 = \
5070 $(PATH_STAGE_LIB)/RuntimeR3VccTricks2$(VBOX_SUFF_LIB)
5071 TEMPLATE_VBOXR3EXE_LIBS.x86 = \
5072 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.x86)_LIB)/oldnames.lib \
5073 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.x86)_LIB)/libcmt$(VBOX_VCC_CRT_TYPE).lib \
5074 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.x86)_LIB)/libcpmt$(VBOX_VCC_CRT_TYPE).lib
5075 endif
5076
5077else # the gcc guys
5078TEMPLATE_VBOXR3EXE_TOOL = $(VBOX_GCC_TOOL)
5079 if $(VBOX_GCC_VERSION_CC) < 30400
5080TEMPLATE_VBOXR3EXE_DEFS += RT_WITHOUT_PRAGMA_ONCE
5081 endif
5082TEMPLATE_VBOXR3EXE_CXXFLAGS = -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_OPT) \
5083 $(VBOX_GCC_FP) -fno-strict-aliasing $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_IPRT_FMT_CHECK)
5084 ifdef VBOX_WITH_NO_GCC_WARNING_POLICY
5085 TEMPLATE_VBOXR3EXE_CXXFLAGS += $(VBOX_GCC_WERR)
5086 endif
5087TEMPLATE_VBOXR3EXE_CXXFLAGS.x86 = -m32
5088TEMPLATE_VBOXR3EXE_CXXFLAGS.amd64 = -m64
5089TEMPLATE_VBOXR3EXE_CXXFLAGS.sparc32 = -m32
5090TEMPLATE_VBOXR3EXE_CXXFLAGS.sparc64 = -m64
5091TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile = -finstrument-functions
5092TEMPLATE_VBOXR3EXE_CXXFLAGS.debug = $(VBOX_GCC_SANITIZER_FLAGS)
5093TEMPLATE_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)
5094 ifdef VBOX_WITH_NO_GCC_WARNING_POLICY
5095 TEMPLATE_VBOXR3EXE_CFLAGS += $(VBOX_GCC_WERR)
5096 endif
5097TEMPLATE_VBOXR3EXE_CFLAGS.x86 = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.x86)
5098TEMPLATE_VBOXR3EXE_CFLAGS.amd64 = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.amd64)
5099TEMPLATE_VBOXR3EXE_CFLAGS.sparc32 = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.sparc32)
5100TEMPLATE_VBOXR3EXE_CFLAGS.sparc64 = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.sparc64)
5101TEMPLATE_VBOXR3EXE_CFLAGS.debug = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.debug)
5102TEMPLATE_VBOXR3EXE_CFLAGS.kprofile = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile)
5103TEMPLATE_VBOXR3EXE_OBJCFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS)
5104TEMPLATE_VBOXR3EXE_OBJCFLAGS.x86 = $(TEMPLATE_VBOXR3EXE_CFLAGS.x86)
5105TEMPLATE_VBOXR3EXE_OBJCFLAGS.amd64 = $(TEMPLATE_VBOXR3EXE_CFLAGS.amd64)
5106TEMPLATE_VBOXR3EXE_OBJCFLAGS.debug = $(TEMPLATE_VBOXR3EXE_CFLAGS.debug)
5107TEMPLATE_VBOXR3EXE_OBJCFLAGS.kprofile = $(TEMPLATE_VBOXR3EXE_CFLAGS.kprofile)
5108TEMPLATE_VBOXR3EXE_OBJCXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS)
5109TEMPLATE_VBOXR3EXE_OBJCXXFLAGS.x86 = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.x86)
5110TEMPLATE_VBOXR3EXE_OBJCXXFLAGS.amd64 = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.amd64)
5111TEMPLATE_VBOXR3EXE_OBJCXXFLAGS.debug = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.debug)
5112TEMPLATE_VBOXR3EXE_OBJCXXFLAGS.kprofile= $(TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile)
5113TEMPLATE_VBOXR3EXE_PCHFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS)
5114TEMPLATE_VBOXR3EXE_PCHFLAGS.x86 = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.x86)
5115TEMPLATE_VBOXR3EXE_PCHFLAGS.amd64 = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.amd64)
5116TEMPLATE_VBOXR3EXE_PCHFLAGS.debug = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.debug)
5117TEMPLATE_VBOXR3EXE_PCHFLAGS.kprofile = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile)
5118TEMPLATE_VBOXR3EXE_LDFLAGS.x86 = -m32
5119TEMPLATE_VBOXR3EXE_LDFLAGS.amd64 = -m64
5120TEMPLATE_VBOXR3EXE_LDFLAGS.sparc32 = -m32
5121TEMPLATE_VBOXR3EXE_LDFLAGS.sparc64 = -m64
5122TEMPLATE_VBOXR3EXE_LDFLAGS.linux = -Wl,-z,noexecstack,-z,relro $(VBOX_LD_as_needed)
5123TEMPLATE_VBOXR3EXE_LDFLAGS.solaris = -Wl,-z,ignore # same as VBOX_LD_as_needed
5124TEMPLATE_VBOXR3EXE_LDFLAGS.debug = $(VBOX_GCC_SANITIZER_FLAGS)
5125
5126 ifeq ($(KBUILD_TARGET),linux)
5127TEMPLATE_VBOXR3EXE_LIBS = pthread m rt dl
5128 else ifeq ($(KBUILD_TARGET),os2)
5129TEMPLATE_VBOXR3EXE_TOOL = GXX3OMF
5130TEMPLATE_VBOXR3EXE_LIBS = socket iconv
5131 else ifeq ($(KBUILD_TARGET),darwin)
5132TEMPLATE_VBOXR3EXE_TOOL = $(VBOX_GCC_TOOL)
5133TEMPLATE_VBOXR3EXE_LIBS =
5134TEMPLATE_VBOXR3EXE_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_DEFS)
5135TEMPLATE_VBOXR3EXE_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -fno-common
5136TEMPLATE_VBOXR3EXE_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
5137TEMPLATE_VBOXR3EXE_PCHFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
5138TEMPLATE_VBOXR3EXE_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_OBJCFLAGS)
5139TEMPLATE_VBOXR3EXE_OBJCXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_OBJCXXFLAGS)
5140TEMPLATE_VBOXR3EXE_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_LDFLAGS)
5141TEMPLATE_VBOXR3EXE_LDFLAGS.darwin.x86 = -read_only_relocs suppress
5142 ifdef VBOX_WITH_DTRACE_R3
5143 TEMPLATE_VBOXR3EXE_CXXFLAGS := $(filter-out -pedantic,$(TEMPLATE_VBOXR3EXE_CXXFLAGS)) -fdollars-in-identifiers # annoying gcc option precedence.
5144 endif
5145 else ifeq ($(KBUILD_TARGET),haiku)
5146TEMPLATE_VBOXR3EXE_TOOL = GXX3
5147TEMPLATE_VBOXR3EXE_POST_CMDS = $(VBOX_HAIKU_XRES_SETVER_CMDS)
5148TEMPLATE_VBOXR3EXE_LIBS = network iconv stdc++ supc++
5149TEMPLATE_VBOXR3EXE_LIBPATH += \
5150 /boot/common/lib
5151# Haiku uses PIC by default...
5152TEMPLATE_VBOXR3EXE_CFLAGS += -fno-pic
5153TEMPLATE_VBOXR3EXE_CXXFLAGS += -fno-pic
5154TEMPLATE_VBOXR3EXE_LDFLAGS += -fno-pic
5155 else if1of ($(KBUILD_TARGET), freebsd openbsd)
5156TEMPLATE_VBOXR3EXE_TOOL = GXX3
5157TEMPLATE_VBOXR3EXE_LIBS = pthread
5158TEMPLATE_VBOXR3EXE_INCS += \
5159 /usr/include \
5160 /usr/X11R6/include \
5161 /usr/local/include
5162TEMPLATE_VBOXR3EXE_LIBPATH += \
5163 /usr/lib \
5164 /usr/X11R6/lib \
5165 /usr/local/lib
5166 else ifeq ($(KBUILD_TARGET),netbsd)
5167TEMPLATE_VBOXR3EXE_TOOL = GXX3
5168TEMPLATE_VBOXR3EXE_LIBS = pthread
5169TEMPLATE_VBOXR3EXE_INCS += \
5170 /usr/include \
5171 /usr/X11R7/include
5172TEMPLATE_VBOXR3EXE_LIBPATH += \
5173 /usr/lib \
5174 /usr/X11R7/lib
5175 else ifeq ($(KBUILD_TARGET),solaris)
5176TEMPLATE_VBOXR3EXE_TOOL = GXX3PLAIN
5177TEMPLATE_VBOXR3EXE_DEFS += LIBICONV_PLUG _REENTRANT # Avoid the GNU libiconv, for now at least.
5178TEMPLATE_VBOXR3EXE_LIBS = rt socket
5179 else
5180$(warning Warning: VBOX Build: Target $(KBUILD_TARGET) is not officially supported!)
5181TEMPLATE_VBOXR3EXE_CXXFLAGS.profile = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.release)
5182TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.krelease)
5183 endif
5184 ifdef VBOX_WITH_RUNPATH
5185 TEMPLATE_VBOXR3EXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)'
5186 else ifdef VBOX_WITH_RELATIVE_RUNPATH
5187 TEMPLATE_VBOXR3EXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)'
5188 endif
5189 ifdef VBOX_WITH_ORIGIN
5190 TEMPLATE_VBOXR3EXE_LDFLAGS.linux += $(VBOX_GCC_ORIGIN_OPT)
5191 endif
5192endif
5193
5194#
5195# Template for building R3 shared objects / DLLs.
5196# This is mostly identical to the VBOXR3EXE template. (Avoid PIC if possible!)
5197# -
5198TEMPLATE_VBOXR3 = VBox Ring 3 SO/DLLs
5199TEMPLATE_VBOXR3_EXTENDS = VBOXR3EXE
5200TEMPLATE_VBOXR3_DEFS.darwin = $(TEMPLATE_VBOXR3EXE_DEFS.darwin) PIC
5201TEMPLATE_VBOXR3_LDFLAGS.darwin = $(TEMPLATE_VBOXR3EXE_LDFLAGS.darwin) \
5202 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
5203 -compatibility_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
5204ifn1of ($(KBUILD_TARGET), darwin win os2)
5205 TEMPLATE_VBOXR3_DEFS = $(TEMPLATE_VBOXR3EXE_DEFS) PIC
5206 TEMPLATE_VBOXR3_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS) -fPIC
5207 TEMPLATE_VBOXR3_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -fPIC
5208 TEMPLATE_VBOXR3_PCHFLAGS = $(TEMPLATE_VBOXR3EXE_PCHFLAGS) -fPIC
5209 TEMPLATE_VBOXR3_LDFLAGS = $(TEMPLATE_VBOXR3EXE_LDFLAGS) -fPIC
5210endif
5211ifeq ($(KBUILD_TARGET),haiku)
5212 # Haiku uses PIC by default...
5213 TEMPLATE_VBOXR3_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS) -fno-pic
5214 TEMPLATE_VBOXR3_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -fno-pic
5215 TEMPLATE_VBOXR3_PCHFLAGS = $(TEMPLATE_VBOXR3EXE_PCHFLAGS) -fno-pic
5216 TEMPLATE_VBOXR3_LDFLAGS = $(TEMPLATE_VBOXR3EXE_LDFLAGS) -fno-pic
5217endif
5218
5219#
5220# Temporary: Renaming the template and warnings will be errors ("soon").
5221#
5222TEMPLATE_VBoxR3Dll += VBox ring-3 SO/DLLs, no warnings
5223TEMPLATE_VBoxR3Dll_EXTENDS += VBOXR3
5224TEMPLATE_VBoxR3Dll_EXTENDS_BY += appending
5225ifeq ($(KBUILD_TARGET),win)
5226 TEMPLATE_VBoxR3Dll_CFLAGS += $(VBOX_VCC_WERR)
5227 TEMPLATE_VBoxR3Dll_CXXFLAGS += $(VBOX_VCC_WERR)
5228 TEMPLATE_VBoxR3Dll_PCHFLAGS += $(VBOX_VCC_WERR)
5229 TEMPLATE_VBoxR3Dll_LDFLAGS += $(VBOX_VCC_LD_WERR)
5230else
5231 TEMPLATE_VBoxR3Dll_CFLAGS += $(VBOX_GCC_WERR)
5232 TEMPLATE_VBoxR3Dll_CXXFLAGS += $(VBOX_GCC_WERR)
5233 TEMPLATE_VBoxR3Dll_PCHFLAGS += $(VBOX_GCC_WERR)
5234endif
5235
5236# x86 edition of the above template for use on AMD64 targets.
5237TEMPLATE_VBoxR3Dll-x86 = 32-bit VBox ring-3 SO/DLLs, no warnings
5238TEMPLATE_VBoxR3Dll-x86_EXTENDS = VBoxR3Dll
5239TEMPLATE_VBoxR3Dll-x86_BLD_TRG_ARCH = x86
5240TEMPLATE_VBoxR3Dll-x86_DEFS = $(filter-out HC_ARCH_BITS%,$(TEMPLATE_VBoxR3Dll_DEFS)) \
5241 HC_ARCH_BITS=32 ARCH_BITS=32
5242ifeq ($(KBUILD_TARGET),solaris)
5243 ifdef VBOX_WITH_RUNPATH
5244 TEMPLATE_VBoxR3Dll-x86_LDFLAGS = \
5245 $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)',$(TEMPLATE_VBoxR3Dll_LDFLAGS)) \
5246 '$(VBOX_GCC_RPATH_OPT)$(VBOX_PATH_APP_PRIVATE)' \
5247 '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)'
5248 endif
5249endif
5250
5251
5252#
5253# Template for building performance critical stuff with warnings-as-errors.
5254#
5255TEMPLATE_VBoxR3DllNoPic = VBox ring-3 SO/DLLs without PIC, without warnings.
5256TEMPLATE_VBoxR3DllNoPic_EXTENDS = VBOXR3
5257if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), linux.x86 freebsd.x86)
5258 TEMPLATE_VBoxR3DllNoPic_DEFS = $(TEMPLATE_VBOXR3EXE_DEFS)
5259 TEMPLATE_VBoxR3DllNoPic_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS) $(VBOX_GCC_WERR)
5260 TEMPLATE_VBoxR3DllNoPic_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) $(VBOX_GCC_WERR)
5261 TEMPLATE_VBoxR3DllNoPic_PCHFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) $(VBOX_GCC_WERR)
5262 TEMPLATE_VBoxR3DllNoPic_LDFLAGS = $(TEMPLATE_VBOXR3EXE_LDFLAGS)
5263else ifeq ($(KBUILD_TARGET),win)
5264 TEMPLATE_VBoxR3DllNoPic_CFLAGS = $(filter-out -W3 -wd%,$(TEMPLATE_VBOXR3_CFLAGS)) $(VBOX_VCC_WARN_ALL) $(VBOX_VCC_WERR)
5265 TEMPLATE_VBoxR3DllNoPic_CFLAGS.debug = $(filter-out -RTC%,$(TEMPLATE_VBOXR3_CFLAGS.debug))
5266 TEMPLATE_VBoxR3DllNoPic_CFLAGS.release = $(TEMPLATE_VBOXR3_CFLAGS.release) -GS-
5267 TEMPLATE_VBoxR3DllNoPic_CXXFLAGS = $(filter-out -W3 -wd%,$(TEMPLATE_VBOXR3_CXXFLAGS)) $(VBOX_VCC_WARN_ALL) $(VBOX_VCC_WERR)
5268 TEMPLATE_VBoxR3DllNoPic_CXXFLAGS.debug = $(filter-out -RTC%,$(TEMPLATE_VBOXR3_CXXFLAGS.debug)) # RTCsu Prevents IEM opt.
5269 TEMPLATE_VBoxR3DllNoPic_CXXFLAGS.release = $(TEMPLATE_VBOXR3_CXXFLAGS.release) -GS-
5270 TEMPLATE_VBoxR3DllNoPic_PCHFLAGS = $(filter-out -W3 -wd%,$(TEMPLATE_VBOXR3_PCHFLAGS)) $(VBOX_VCC_WARN_ALL) $(VBOX_VCC_WERR)
5271 TEMPLATE_VBoxR3DllNoPic_PCHFLAGS.debug = $(filter-out -RTC%,$(TEMPLATE_VBOXR3_PCHFLAGS.debug)) # RTCsu Prevents IEM opt.
5272 TEMPLATE_VBoxR3DllNoPic_PCHFLAGS.release = $(TEMPLATE_VBOXR3_PCHFLAGS.release) -GS-
5273 TEMPLATE_VBoxR3DllNoPic_LDFLAGS = $(TEMPLATE_VBOXR3_LDFLAGS) $(VBOX_VCC_LD_WERR)
5274else
5275 TEMPLATE_VBoxR3DllNoPic_CFLAGS = $(TEMPLATE_VBOXR3_CFLAGS) $(VBOX_GCC_WERR)
5276 TEMPLATE_VBoxR3DllNoPic_CXXFLAGS = $(TEMPLATE_VBOXR3_CXXFLAGS) $(VBOX_GCC_WERR)
5277 TEMPLATE_VBoxR3DllNoPic_PCHFLAGS = $(TEMPLATE_VBOXR3_PCHFLAGS) $(VBOX_GCC_WERR)
5278endif
5279
5280# x86 edition of the above template for use on AMD64 targets.
5281TEMPLATE_VBoxR3DllNoPic-x86 = 32-bit VBox ring-3 SO/DLLs without PIC, without warnings.
5282TEMPLATE_VBoxR3DllNoPic-x86_EXTENDS = VBoxR3DllNoPic
5283TEMPLATE_VBoxR3DllNoPic-x86_BLD_TRG_ARCH = x86
5284TEMPLATE_VBoxR3DllNoPic-x86_DEFS = $(filter-out HC_ARCH_BITS%,$(TEMPLATE_VBoxR3DllNoPic_DEFS)) \
5285 HC_ARCH_BITS=32 ARCH_BITS=32
5286
5287
5288#
5289# Template for building performance critical stuff without warnings-as-errors.
5290#
5291TEMPLATE_VBoxR3DllWarnNoPic = VBox ring-3 SO/DLLs without PIC, with warnings.
5292TEMPLATE_VBoxR3DllWarnNoPic_EXTENDS = VBOXR3
5293if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), linux.x86 freebsd.x86)
5294 TEMPLATE_VBoxR3DllWarnNoPic_DEFS = $(TEMPLATE_VBOXR3EXE_DEFS)
5295 TEMPLATE_VBoxR3DllWarnNoPic_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS)
5296 TEMPLATE_VBoxR3DllWarnNoPic_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS)
5297 TEMPLATE_VBoxR3DllWarnNoPic_PCHFLAGS = $(TEMPLATE_VBOXR3EXE_PCHFLAGS)
5298 TEMPLATE_VBoxR3DllWarnNoPic_LDFLAGS = $(TEMPLATE_VBOXR3EXE_LDFLAGS)
5299else ifeq ($(KBUILD_TARGET),win)
5300 TEMPLATE_VBoxR3DllWarnNoPic_CFLAGS.release = $(TEMPLATE_VBOXR3_CFLAGS.release) -GS-
5301 TEMPLATE_VBoxR3DllWarnNoPic_CXXFLAGS.release = $(TEMPLATE_VBOXR3_CXXFLAGS.release) -GS-
5302 TEMPLATE_VBoxR3DllWarnNoPic_PCHFLAGS.release = $(TEMPLATE_VBOXR3_PCHFLAGS.release) -GS-
5303endif
5304
5305#
5306# Template for building static R3 executables and any static
5307# libraries they link with.
5308#
5309TEMPLATE_VBOXR3STATIC = VBox Static Ring 3 EXE
5310TEMPLATE_VBOXR3STATIC_EXTENDS = VBOXR3EXE
5311TEMPLATE_VBOXR3STATIC_DEFS = IN_RT_STATIC IN_RT_R3 IN_SUP_STATIC $(TEMPLATE_VBOXR3EXE_DEFS)
5312ifeq ($(KBUILD_TARGET),win)
5313 TEMPLATE_VBOXR3STATIC_CFLAGS = $(filter-out -MD$(VBOX_VCC_CRT_TYPE), $(TEMPLATE_VBOXR3EXE_CFLAGS)) -MT$(VBOX_VCC_CRT_TYPE)
5314 TEMPLATE_VBOXR3STATIC_CXXFLAGS = $(filter-out -MD$(VBOX_VCC_CRT_TYPE), $(TEMPLATE_VBOXR3EXE_CXXFLAGS)) -MT$(VBOX_VCC_CRT_TYPE)
5315 TEMPLATE_VBOXR3STATIC_PCHFLAGS = $(filter-out -MD$(VBOX_VCC_CRT_TYPE), $(TEMPLATE_VBOXR3EXE_PCHFLAGS)) -MT$(VBOX_VCC_CRT_TYPE)
5316 TEMPLATE_VBOXR3STATIC_LDFLAGS = $(filter-out /DISALLOWLIB:libcmt$(VBOX_VCC_CRT_TYPE).lib /DISALLOWLIB:libcpmt$(VBOX_VCC_CRT_TYPE).lib, $(TEMPLATE_VBOXR3EXE_LDFLAGS)) \
5317 /DISALLOWLIB:msvcrt.lib \
5318 /DISALLOWLIB:msvcrtd.lib \
5319 /DISALLOWLIB:msvcprt.lib \
5320 /DISALLOWLIB:msvcprtd.lib
5321 TEMPLATE_VBOXR3STATIC_LIBS.x86 = \
5322 $(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL.win.x86)_LIB)/oldnames.lib \
5323 $(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL.win.x86)_LIB)/libcmt$(VBOX_VCC_CRT_TYPE).lib \
5324 $(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL.win.x86)_LIB)/libcpmt$(VBOX_VCC_CRT_TYPE).lib
5325 TEMPLATE_VBOXR3STATIC_LIBS.amd64 = \
5326 $(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL.win.amd64)_LIB)/libcmt$(VBOX_VCC_CRT_TYPE).lib \
5327 $(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL.win.amd64)_LIB)/libcpmt$(VBOX_VCC_CRT_TYPE).lib \
5328 $(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL.win.amd64)_LIB)/oldnames.lib
5329else ifn1of ($(KBUILD_TARGET), darwin linux solaris)
5330 # The gcc guys sans darwin, linux and solaris (don't depend on statically compiled system libs there)
5331 TEMPLATE_VBOXR3STATIC_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS) -static
5332 TEMPLATE_VBOXR3STATIC_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -static
5333 TEMPLATE_VBOXR3STATIC_PCHFLAGS = $(TEMPLATE_VBOXR3EXE_PCHFLAGS) -static
5334 TEMPLATE_VBOXR3STATIC_OBJCFLAGS = $(TEMPLATE_VBOXR3EXE_OBJCFLAGS) -static
5335 TEMPLATE_VBOXR3STATIC_OBJCXXFLAGS = $(TEMPLATE_VBOXR3EXE_OBJCXXFLAGS) -static
5336 TEMPLATE_VBOXR3STATIC_LDFLAGS = $(TEMPLATE_VBOXR3EXE_LDFLAGS) -static
5337else ifeq ($(KBUILD_TARGET),solaris)
5338 TEMPLATE_VBOXR3STATIC_LIBS = $(TEMPLATE_VBOXR3EXE_LIBS) nsl
5339 TEMPLATE_VBOXR3STATIC_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)',$(TEMPLATE_VBOXR3EXE_LDFLAGS))
5340else
5341 TEMPLATE_VBOXR3STATIC_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)',$(TEMPLATE_VBOXR3EXE_LDFLAGS))
5342endif
5343
5344#
5345# Temporary: Renaming the template and warnings will be errors (soon).
5346# Unlike VBOXR3STATIC, this is strict wrt warnings and includes IPRT.
5347#
5348TEMPLATE_VBoxR3Static = New name for VBOXR3STATIC
5349TEMPLATE_VBoxR3Static_EXTENDS = VBOXR3STATIC
5350TEMPLATE_VBoxR3Static_EXTENDS_BY = appending
5351TEMPLATE_VBoxR3Static_SDKS += VBOX_OPENSSL
5352TEMPLATE_VBoxR3Static_SDKS.win += VBOX_NTDLL
5353ifeq ($(KBUILD_TARGET),win)
5354 TEMPLATE_VBoxR3Static_CFLAGS += $(VBOX_VCC_WERR)
5355 TEMPLATE_VBoxR3Static_CXXFLAGS += $(VBOX_VCC_WERR)
5356 TEMPLATE_VBoxR3Static_PCHFLAGS += $(VBOX_VCC_WERR)
5357 TEMPLATE_VBoxR3Static_LDFLAGS += $(VBOX_VCC_LD_WERR)
5358else
5359 TEMPLATE_VBoxR3Static_CFLAGS += $(VBOX_GCC_WERR)
5360 TEMPLATE_VBoxR3Static_CXXFLAGS += $(VBOX_GCC_WERR)
5361 TEMPLATE_VBoxR3Static_PCHFLAGS += $(VBOX_GCC_WERR)
5362endif
5363TEMPLATE_VBoxR3Static_LIBS += \
5364 $(VBOX_LIB_RUNTIME_STATIC)
5365ifndef SDK_VBOX_LIBXML2_LIBS
5366 TEMPLATE_VBoxR3Static_LIBS += \
5367 $(PATH_STAGE_LIB)/VBox-libxml2-static$(VBOX_SUFF_LIB)
5368endif
5369if1of ($(KBUILD_TARGET),os2 win)
5370 TEMPLATE_VBoxR3Static_LIBS += \
5371 $(PATH_STAGE_LIB)/VBox-liblzf-static$(VBOX_SUFF_LIB) \
5372 $(PATH_STAGE_LIB)/VBox-zlib-static$(VBOX_SUFF_LIB)
5373else
5374 TEMPLATE_VBoxR3Static_LIBS += \
5375 $(PATH_STAGE_LIB)/VBox-liblzf$(VBOX_SUFF_LIB) \
5376 $(SDK_VBOX_ZLIB_LIBS)
5377 ifeq ($(KBUILD_TARGET),linux)
5378 TEMPLATE_VBoxR3Static_LIBS += crypt
5379 else if1of ($(KBUILD_TARGET),darwin freebsd)
5380 TEMPLATE_VBoxR3Static_LIBS += iconv
5381 else ifeq ($(KBUILD_TARGET),solaris)
5382 TEMPLATE_VBoxR3Static_LIBS += kstat
5383 endif
5384endif
5385
5386#
5387# Non-pedantic variation of VBoxR3Static
5388#
5389TEMPLATE_VBoxR3StaticNonPedantic = VBox Static Ring-3 EXE, non-pedantic.
5390TEMPLATE_VBoxR3StaticNonPedantic_EXTENDS = VBoxR3Static
5391ifeq ($(KBUILD_TARGET),win)
5392 TEMPLATE_VBoxR3StaticNonPedantic_CFLAGS = $(TEMPLATE_VBoxR3Static_CFLAGS) $(VBOX_VCC_NON_PEDANTIC)
5393 TEMPLATE_VBoxR3StaticNonPedantic_CXXFLAGS = $(TEMPLATE_VBoxR3Static_CXXFLAGS) $(VBOX_VCC_NON_PEDANTIC)
5394 TEMPLATE_VBoxR3StaticNonPedantic_PCHFLAGS = $(TEMPLATE_VBoxR3Static_PCHFLAGS) $(VBOX_VCC_NON_PEDANTIC)
5395else # gcc:
5396 TEMPLATE_VBoxR3StaticNonPedantic_TOOL = $(VBOX_GCC_TOOL)
5397 TEMPLATE_VBoxR3StaticNonPedantic_CFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_C) ,$(TEMPLATE_VBoxR3Static_CFLAGS)) \
5398 $(VBOX_GCC_NON_PEDANTIC_CXX)
5399 TEMPLATE_VBoxR3StaticNonPedantic_CXXFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_CXX),$(TEMPLATE_VBoxR3Static_CXXFLAGS)) \
5400 $(VBOX_GCC_NON_PEDANTIC_CXX)
5401 TEMPLATE_VBoxR3StaticNonPedantic_PCHFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_CXX),$(TEMPLATE_VBoxR3Static_PCHFLAGS)) \
5402 $(VBOX_GCC_NON_PEDANTIC_CXX)
5403endif
5404
5405
5406#
5407# Same as VBOXR3EXE but without C++ exceptions.
5408#
5409# VBOXR3EXE does C++ exceptions and may assumes that extern "C" functions
5410# doesn't throw them. Use this template (and VBOXR3DLLNOXCPT) with care
5411# and only where the C++ overhead is really unwanted.
5412#
5413TEMPLATE_VBOXR3EXENOXCPT = VBox Ring 3 Exe without C++ exception
5414TEMPLATE_VBOXR3EXENOXCPT_EXTENDS = VBOXR3EXE
5415ifeq ($(KBUILD_TARGET),win)
5416 TEMPLATE_VBOXR3EXENOXCPT_CFLAGS = $(filter-out -EH%,$(TEMPLATE_VBOXR3EXE_CFLAGS) ) -EHs-
5417 TEMPLATE_VBOXR3EXENOXCPT_CXXFLAGS = $(filter-out -EH%,$(TEMPLATE_VBOXR3EXE_CXXFLAGS)) -EHs-
5418 TEMPLATE_VBOXR3EXENOXCPT_PCHFLAGS = $(filter-out -EH%,$(TEMPLATE_VBOXR3EXE_PCHFLAGS)) -EHs-
5419else
5420 TEMPLATE_VBOXR3EXENOXCPT_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -fno-exceptions
5421 TEMPLATE_VBOXR3EXENOXCPT_PCHFLAGS = $(TEMPLATE_VBOXR3EXE_PCHFLAGS) -fno-exceptions
5422endif
5423
5424#
5425# Same as VBOXR3 but without C++ exceptions.
5426#
5427TEMPLATE_VBOXR3DLLNOXCPT = VBox Ring 3 SO/DLLs without C++ exception
5428TEMPLATE_VBOXR3DLLNOXCPT_EXTENDS = VBOXR3
5429ifeq ($(KBUILD_TARGET),win)
5430 TEMPLATE_VBOXR3DLLNOXCPT_CFLAGS = $(filter-out -EH%,$(TEMPLATE_VBOXR3_CFLAGS) ) -EHs-
5431 TEMPLATE_VBOXR3DLLNOXCPT_CXXFLAGS = $(filter-out -EH%,$(TEMPLATE_VBOXR3_CXXFLAGS)) -EHs-
5432 TEMPLATE_VBOXR3DLLNOXCPT_PCHFLAGS = $(filter-out -EH%,$(TEMPLATE_VBOXR3_PCHFLAGS)) -EHs-
5433else
5434 TEMPLATE_VBOXR3DLLNOXCPT_CXXFLAGS = $(TEMPLATE_VBOXR3_CXXFLAGS) -fno-exceptions
5435 TEMPLATE_VBOXR3DLLNOXCPT_PCHFLAGS = $(TEMPLATE_VBOXR3_PCHFLAGS) -fno-exceptions
5436endif
5437
5438#
5439# Template for building hardened Ring-3 executables.
5440# These shall have no extra runpaths, esp. not origin ones.
5441#
5442TEMPLATE_VBOXR3HARDENEDEXE = Hardened VBox Ring-3 EXE
5443TEMPLATE_VBOXR3HARDENEDEXE_EXTENDS = VBOXR3EXE
5444TEMPLATE_VBOXR3HARDENEDEXE_DEBUG_INST.win = $(INST_DEBUG)hardened-exes/
5445ifdef VBOX_WITH_HARDENING
5446 TEMPLATE_VBOXR3HARDENEDEXE_LIBS = $(VBOX_LIB_SUPHARDENED) $(TEMPLATE_VBOXR3EXE_LIBS)
5447else
5448 TEMPLATE_VBOXR3HARDENEDEXE_LIBS = $(TEMPLATE_VBOXR3EXE_LIBS)
5449endif
5450TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS.darwin = $(TEMPLATE_VBOXR3EXE_LDFLAGS.darwin) -framework IOKit
5451ifeq ($(KBUILD_TARGET),linux)
5452# not necessary except USE_LIB_PCAP is defined in SUPR3HardenedMain.cpp
5453# TEMPLATE_VBOXR3HARDENEDEXE_LIBS += cap
5454endif
5455ifeq ($(KBUILD_TARGET),win) # No CRT!
5456 TEMPLATE_VBOXR3HARDENEDEXE_SDKS = VBOX_NTDLL $(TEMPLATE_VBOXR3EXE_SDKS)
5457 TEMPLATE_VBOXR3HARDENEDEXE_LIBS.x86 = \
5458 $(PATH_SDK_$(VBOX_WINDDK)_LIB.x86)/int64.lib \
5459 $(PATH_TOOL_$(TEMPLATE_VBOXR3HARDENEDEXE_TOOL.win.x86)_LIB)/chkstk.obj
5460 TEMPLATE_VBOXR3HARDENEDEXE_CXXFLAGS = $(filter-out -RTC% -GZ -GS,$(TEMPLATE_VBOXR3EXE_CXXFLAGS)) -GS-
5461 TEMPLATE_VBOXR3HARDENEDEXE_CXXFLAGS.debug= $(filter-out -RTC% -GZ -GS,$(TEMPLATE_VBOXR3EXE_CXXFLAGS.debug)) -GS- #-O2 -Oy-
5462 TEMPLATE_VBOXR3HARDENEDEXE_PCHFLAGS = $(filter-out -RTC% -GZ -GS,$(TEMPLATE_VBOXR3EXE_PCHFLAGS)) -GS-
5463 TEMPLATE_VBOXR3HARDENEDEXE_PCHFLAGS.debug= $(filter-out -RTC% -GZ -GS,$(TEMPLATE_VBOXR3EXE_PCHFLAGS.debug)) -GS- #-O2 -Oy-
5464 TEMPLATE_VBOXR3HARDENEDEXE_CFLAGS = $(filter-out -RTC% -GZ -GS,$(TEMPLATE_VBOXR3EXE_CFLAGS)) -GS-
5465 TEMPLATE_VBOXR3HARDENEDEXE_CFLAGS.debug = $(filter-out -RTC% -GZ -GS,$(TEMPLATE_VBOXR3EXE_CFLAGS.debug)) -GS- -O2 -Oy-
5466 TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS = $(TEMPLATE_VBOXR3EXE_LDFLAGS) \
5467 /DISALLOWLIB:msvcrt$(VBOX_VCC_CRT_TYPE).lib \
5468 /DISALLOWLIB:msvcprt$(VBOX_VCC_CRT_TYPE).lib
5469 TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS.win.x86 = $(TEMPLATE_VBOXR3EXE_LDFLAGS.win.x86) /entry:suplibHardenedWindowsMain
5470 TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS.win.amd64 = $(TEMPLATE_VBOXR3EXE_LDFLAGS.win.amd64) /entry:suplibHardenedWindowsMain
5471 TEMPLATE_VBOXR3HARDENEDEXE_LIBS.x86 = $(NOT_SUCH_VARIABLE)
5472 TEMPLATE_VBOXR3HARDENEDEXE_LIBS.amd64 = $(NOT_SUCH_VARIABLE)
5473else ifn1of ($(KBUILD_TARGET), os2 solaris)
5474 # We want to keep the RPATH on Solaris to be able to find libgcc_1/libstdc++ within $(VBOX_WITH_RUNPATH)
5475 TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)%,$(TEMPLATE_VBOXR3EXE_LDFLAGS))
5476 TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS.linux = $(filter-out $(VBOX_GCC_ORIGIN_OPT),$(TEMPLATE_VBOXR3EXE_LDFLAGS.linux))
5477endif
5478
5479#
5480# Template for building hardened Ring-3 libraries.
5481#
5482TEMPLATE_VBOXR3HARDENEDLIB = Hardened VBox Ring-3 LIB
5483TEMPLATE_VBOXR3HARDENEDLIB_EXTENDS = VBOXR3HARDENEDEXE
5484TEMPLATE_VBOXR3HARDENEDLIB_LIBS = $(NO_SUCH_VARIABLE)
5485
5486
5487#
5488# Template for building hardened Ring-3 testcase executables.
5489#
5490TEMPLATE_VBoxR3HardenedTstExe = VBox Ring-3 Hardened Testcase Exe (currently windows only!)
5491TEMPLATE_VBoxR3HardenedTstExe_EXTENDS = VBOXR3HARDENEDEXE
5492TEMPLATE_VBoxR3HardenedTstExe_INST = $(INST_TESTCASE)
5493
5494#
5495# Template for building hardened Ring-3 testcase DLLs (pairs with VBoxR3HardenedTstExe).
5496#
5497TEMPLATE_VBoxR3HardenedTstDll = VBox Ring-3 Hardened Testcase Dll (currently windows only!)
5498TEMPLATE_VBoxR3HardenedTstDll_EXTENDS = VBoxR3TstDll
5499TEMPLATE_VBoxR3HardenedTstDll_INST = $(INST_TESTCASE)
5500 TEMPLATE_VBoxR3HardenedTstDll_LDFLAGS.win = $(TEMPLATE_VBoxR3TstDll_LDFLAGS.win) -IntegrityCheck
5501ifn1of ($(KBUILD_TARGET), win os2)
5502 TEMPLATE_VBoxR3HardenedTstDll_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)%,$(TEMPLATE_VBoxR3TstDll_LDFLAGS))
5503 TEMPLATE_VBoxR3HardenedTstDll_LDFLAGS.linux = $(filter-out $(VBOX_GCC_ORIGIN_OPT),$(TEMPLATE_VBoxR3TstDll_LDFLAGS.linux))
5504endif
5505
5506#
5507# Template for building set-uid-to-root helper programs.
5508# In hardened builds, these may only contain absolute runpaths!
5509#
5510TEMPLATE_VBoxR3SetUidToRoot = Set-uid-to-root helper program.
5511if1of ($(KBUILD_TARGET),win)
5512 TEMPLATE_VBoxR3SetUidToRoot_EXTENDS = VBOXR3EXE
5513else
5514 TEMPLATE_VBoxR3SetUidToRoot_EXTENDS = VBOXR3HARDENEDEXE
5515endif
5516TEMPLATE_VBoxR3SetUidToRoot_LIBS = $(NO_SUCH_VARIABLE)
5517ifdef VBOX_WITH_RUNPATH
5518 TEMPLATE_VBoxR3SetUidToRoot_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)'
5519endif
5520ifndef VBOX_WITH_HARDENING
5521 ifdef VBOX_WITH_RELATIVE_RUNPATH
5522 TEMPLATE_VBoxR3SetUidToRoot_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)'
5523 endif
5524 ifdef VBOX_WITH_ORIGIN
5525 TEMPLATE_VBoxR3SetUidToRoot_LDFLAGS.linux += $(VBOX_GCC_ORIGIN_OPT)
5526 endif
5527endif
5528
5529#
5530# Template for building R3 tools.
5531#
5532TEMPLATE_VBoxR3Tool = VBox Ring 3 Tools
5533TEMPLATE_VBoxR3Tool_EXTENDS = VBOXR3EXE
5534TEMPLATE_VBoxR3Tool_INST = $(VBOX_INST_TOOLS)
5535ifeq ($(KBUILD_TARGET),win)
5536 TEMPLATE_VBoxR3Tool_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS) $(VBOX_VCC_WERR)
5537 TEMPLATE_VBoxR3Tool_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) $(VBOX_VCC_WERR)
5538 TEMPLATE_VBoxR3Tool_PCHFLAGS = $(TEMPLATE_VBOXR3EXE_PCHFLAGS) $(VBOX_VCC_WERR)
5539 TEMPLATE_VBoxR3Tool_LDFLAGS = $(TEMPLATE_VBOXR3EXE_LDFLAGS) $(VBOX_VCC_LD_WERR)
5540else
5541 TEMPLATE_VBoxR3Tool_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS) $(VBOX_GCC_WERR)
5542 TEMPLATE_VBoxR3Tool_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) $(VBOX_GCC_WERR)
5543 TEMPLATE_VBoxR3Tool_PCHFLAGS = $(TEMPLATE_VBOXR3EXE_PCHFLAGS) $(VBOX_GCC_WERR)
5544 ifdef VBOX_WITH_RUNPATH
5545 TEMPLATE_VBoxR3Tool_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' $(TEMPLATE_VBOXR3EXE_LDFLAGS)
5546 else ifdef VBOX_WITH_RELATIVE_RUNPATH
5547 TEMPLATE_VBoxR3Tool_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/..' $(TEMPLATE_VBOXR3EXE_LDFLAGS)
5548 endif
5549endif
5550TEMPLATE_VBoxR3Tool_LIBS = $(LIB_RUNTIME) $(TEMPLATE_VBOXR3EXE_LIBS)
5551if defined(VBOX_WITH_MORE_NT4_COMPAT_BINARIES) && "$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)" == "win.x86"
5552 TEMPLATE_VBoxR3Tool_LIBS.x86 = \
5553 $(PATH_STAGE_LIB)/RuntimeR3VccTricks2$(VBOX_SUFF_LIB) \
5554 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.x86)_LIB)/oldnames.lib
5555endif
5556
5557#
5558# Template for building R3 shared objects / DLLs with the 10.5 Mac OS X SDK.
5559# Identical to VBOXR3EXE, except for the DYLIB, the classic_linker and SDK bits.
5560#
5561TEMPLATE_VBOXR3OSX105 = VBox Ring 3 SO/DLLs for OS X 10.5
5562TEMPLATE_VBOXR3OSX105_EXTENDS = VBOXR3EXE
5563TEMPLATE_VBOXR3OSX105_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_DEFS) PIC
5564TEMPLATE_VBOXR3OSX105_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_CFLAGS) -fno-common
5565TEMPLATE_VBOXR3OSX105_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_CXXFLAGS)
5566TEMPLATE_VBOXR3OSX105_PCHFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_PCHFLAGS)
5567TEMPLATE_VBOXR3OSX105_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_OBJCFLAGS)
5568TEMPLATE_VBOXR3OSX105_OBJCXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_OBJCFLAGS)
5569TEMPLATE_VBOXR3OSX105_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_LDFLAGS) \
5570 -read_only_relocs suppress \
5571 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
5572 -compatibility_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
5573
5574#
5575# Template for building R3 shared objects / DLLs with the 10.7 Mac OS X SDK.
5576# Identical to VBoxR3Dll, except for the DYLIB, the classic_linker and SDK bits.
5577#
5578TEMPLATE_VBoxR3DllOsX107 = VBox Ring 3 SO/DLLs for OS X 10.7
5579TEMPLATE_VBoxR3DllOsX107_EXTENDS = VBoxR3Dll
5580TEMPLATE_VBoxR3DllOsX107_TOOL = LLVMGXX42MACHO
5581TEMPLATE_VBoxR3DllOsX107_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_DEFS) PIC
5582TEMPLATE_VBoxR3DllOsX107_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_CFLAGS) -fno-common
5583TEMPLATE_VBoxR3DllOsX107_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_CXXFLAGS)
5584TEMPLATE_VBoxR3DllOsX107_PCHFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_PCHFLAGS)
5585TEMPLATE_VBoxR3DllOsX107_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_OBJCFLAGS)
5586TEMPLATE_VBoxR3DllOsX107_OBJCXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_OBJCFLAGS)
5587TEMPLATE_VBoxR3DllOsX107_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_LDFLAGS) \
5588 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
5589 -compatibility_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
5590
5591
5592#
5593# Ring-3 testcase, running automatically during the build.
5594# This is the VBOXR3EXE template only with a different install dir.
5595#
5596TEMPLATE_VBOXR3AUTOTST = VBox Ring 3 Testcase Exe
5597ifeq ($(KBUILD_TARGET),win)
5598 TEMPLATE_VBOXR3AUTOTST_EXTENDS = VBoxR3Static
5599 TEMPLATE_VBOXR3AUTOTST_LIBS = $(NO_SUCH_VARIABLE)
5600 TEMPLATE_VBOXR3AUTOTST_SDKS = $(filter-out VBOX_OPENSSL,$(TEMPLATE_VBoxR3Static_SDKS))
5601else
5602 TEMPLATE_VBOXR3AUTOTST_EXTENDS = VBOXR3EXE
5603endif
5604TEMPLATE_VBOXR3AUTOTST_INST = $(INST_TESTCASE)
5605if "$(KBUILD_TARGET)" == "win" && defined(VBOX_SIGNING_MODE)
5606 TEMPLATE_VBOXR3AUTOTST_POST_CMDS = $(NO_SUCH_VARIABLE)
5607 TEMPLATE_VBOXR3AUTOTST_LDFLAGS = $(filter-out -IntegrityCheck, $(TEMPLATE_VBoxR3Static_LDFLAGS))
5608endif
5609
5610#
5611# Ring-3 testcase.
5612# This is the VBOXR3EXE template only with a different install dir.
5613#
5614TEMPLATE_VBOXR3TSTEXE = VBox Ring 3 Testcase Exe
5615TEMPLATE_VBOXR3TSTEXE_EXTENDS = VBOXR3EXE
5616TEMPLATE_VBOXR3TSTEXE_INST = $(INST_TESTCASE)
5617TEMPLATE_VBOXR3TSTEXE_LIBS = $(LIB_RUNTIME) $(TEMPLATE_VBOXR3EXE_LIBS)
5618ifdef VBOX_WITH_RUNPATH
5619 TEMPLATE_VBOXR3TSTEXE_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' $(TEMPLATE_VBOXR3EXE_LDFLAGS)
5620else ifdef VBOX_WITH_RELATIVE_RUNPATH
5621 TEMPLATE_VBOXR3TSTEXE_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/..' $(TEMPLATE_VBOXR3EXE_LDFLAGS)
5622endif
5623if "$(KBUILD_TARGET)" == "win" && defined(VBOX_SIGNING_MODE)
5624 TEMPLATE_VBOXR3TSTEXE_POST_CMDS =
5625 TEMPLATE_VBOXR3TSTEXE_LDFLAGS = $(filter-out -IntegrityCheck, $(TEMPLATE_VBOXR3EXE_LDFLAGS))
5626endif
5627if defined(VBOX_WITH_MORE_NT4_COMPAT_BINARIES) && "$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)" == "win.x86"
5628 TEMPLATE_VBOXR3TSTEXE_POST_CMDS.win.x86 = $(if $(eq $(tool_do),LINK_LIBRARY),,$(VBOX_PE_SET_VERSION) $(out))
5629 TEMPLATE_VBOXR3TSTEXE_LIBS.x86 = \
5630 $(PATH_STAGE_LIB)/RuntimeR3VccTricks2$(VBOX_SUFF_LIB) \
5631 $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.x86)_LIB)/oldnames.lib
5632endif
5633
5634#
5635# Ring-3 testcase (no -pedantic)
5636#
5637TEMPLATE_VBOXR3TSTNPEXE = VBox Ring 3 Testcase Exe Non-pedantic
5638TEMPLATE_VBOXR3TSTNPEXE_EXTENDS = VBOXR3TSTEXE
5639ifneq ($(KBUILD_TARGET),win) # (only gcc)
5640 TEMPLATE_VBOXR3TSTNPEXE_TOOL = $(VBOX_GCC_TOOL)
5641 TEMPLATE_VBOXR3TSTNPEXE_CFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_C) ,$(TEMPLATE_VBOXR3TSTEXE_CFLAGS)) \
5642 -Wno-sign-compare
5643 TEMPLATE_VBOXR3TSTNPEXE_CXXFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_CXX),$(TEMPLATE_VBOXR3TSTEXE_CXXFLAGS)) \
5644 -Wno-sign-compare
5645 TEMPLATE_VBOXR3TSTNPEXE_PCHFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_CXX),$(TEMPLATE_VBOXR3TSTEXE_PCHFLAGS)) \
5646 -Wno-sign-compare
5647endif
5648
5649
5650#
5651# Ring-3 testcase DLL.
5652#
5653TEMPLATE_VBoxR3TstDll = VBox Ring-3 Testcase Dll
5654TEMPLATE_VBoxR3TstDll_EXTENDS = VBOXR3TSTEXE
5655ifn1of ($(KBUILD_TARGET), darwin win os2)
5656 TEMPLATE_VBoxR3TstDll_DEFS = $(TEMPLATE_VBOXR3TSTEXE_DEFS) PIC
5657 TEMPLATE_VBoxR3TstDll_CFLAGS = $(TEMPLATE_VBOXR3TSTEXE_CFLAGS) -fPIC
5658 TEMPLATE_VBoxR3TstDll_CXXFLAGS = $(TEMPLATE_VBOXR3TSTEXE_CXXFLAGS) -fPIC
5659 TEMPLATE_VBoxR3TstDll_PCHFLAGS = $(TEMPLATE_VBOXR3TSTEXE_PCHFLAGS) -fPIC
5660 TEMPLATE_VBoxR3TstDll_LDFLAGS = $(TEMPLATE_VBOXR3TSTEXE_LDFLAGS) -fPIC
5661endif
5662
5663
5664#
5665# Template for the CppUnit kind of testcases.
5666#
5667TEMPLATE_VBOXCPPUNITEXE = VBox CppUnit Testcase Exe
5668TEMPLATE_VBOXCPPUNITEXE_EXTENDS = VBOXR3TSTEXE
5669## @todo make a CPPUNIT SDK and add cppunit tools packages for windows, mac, solaris and OS/2.
5670#TEMPLATE_VBOXCPPUNITEXE_SDKS = CPPUNIT -
5671TEMPLATE_VBOXCPPUNITEXE_LIBS = \
5672 $(TEMPLATE_VBOXR3TSTEXE_LIBS) \
5673 cppunit
5674
5675#
5676# Template for building bad C/C++ style R3 executables (no -pedantic).
5677#
5678TEMPLATE_VBOXR3NPEXE = VBox Ring 3 Non-pedantic
5679TEMPLATE_VBOXR3NPEXE_EXTENDS = VBOXR3EXE
5680ifneq ($(KBUILD_TARGET),win) # (only gcc)
5681 TEMPLATE_VBOXR3NPEXE_TOOL = $(VBOX_GCC_TOOL)
5682 TEMPLATE_VBOXR3NPEXE_CFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_C) ,$(TEMPLATE_VBOXR3EXE_CFLAGS)) \
5683 $(VBOX_GCC_NON_PEDANTIC_C)
5684 TEMPLATE_VBOXR3NPEXE_CXXFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_CXX),$(TEMPLATE_VBOXR3EXE_CXXFLAGS)) \
5685 $(VBOX_GCC_NON_PEDANTIC_CXX)
5686 TEMPLATE_VBOXR3NPEXE_PCHFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_CXX),$(TEMPLATE_VBOXR3EXE_PCHFLAGS)) \
5687 $(VBOX_GCC_NON_PEDANTIC_CXX)
5688endif
5689
5690
5691#
5692# Template for building bad C/C++ style R3 shared libraries / Dlls (no -pedantic).
5693# (Same transformation as for VBOXR3NPEXE.)
5694#
5695# @deprecated Use VBoxR3DllNonPedantic!
5696#
5697TEMPLATE_VBOXR3NP = VBox Ring 3 Non-pedantic
5698TEMPLATE_VBOXR3NP_EXTENDS = VBOXR3
5699ifneq ($(KBUILD_TARGET),win) # (only gcc)
5700 TEMPLATE_VBOXR3NP_TOOL = $(VBOX_GCC_TOOL)
5701 TEMPLATE_VBOXR3NP_CFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_C) ,$(TEMPLATE_VBOXR3_CFLAGS)) \
5702 $(VBOX_GCC_NON_PEDANTIC_C)
5703 TEMPLATE_VBOXR3NP_CXXFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_CXX),$(TEMPLATE_VBOXR3_CXXFLAGS)) \
5704 $(VBOX_GCC_NON_PEDANTIC_CXX)
5705 TEMPLATE_VBOXR3NP_PCHFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_CXX),$(TEMPLATE_VBOXR3_PCHFLAGS)) \
5706 $(VBOX_GCC_NON_PEDANTIC_CXX)
5707 TEMPLATE_VBOXR3NP_OBJCFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) -pedantic -Wstrict-prototypes,$(TEMPLATE_VBOXR3_OBJCFLAGS))
5708 TEMPLATE_VBOXR3NP_OBJCXXFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) -pedantic,$(TEMPLATE_VBOXR3_OBJCXXFLAGS))
5709endif
5710
5711
5712#
5713# Template for building bad C/C++ style R3 shared libraries / Dlls (no -pedantic).
5714# (Same transformation as for VBoxR3ExeNonPedantic.)
5715#
5716TEMPLATE_VBoxR3DllNonPedantic = VBox ring-3 Non-pedantic, with warnings.
5717TEMPLATE_VBoxR3DllNonPedantic_EXTENDS = VBOXR3
5718ifeq ($(KBUILD_TARGET),win)
5719 TEMPLATE_VBoxR3DllNonPedantic_CFLAGS = $(TEMPLATE_VBOXR3_CFLAGS) $(VBOX_VCC_NON_PEDANTIC)
5720 TEMPLATE_VBoxR3DllNonPedantic_CXXFLAGS = $(TEMPLATE_VBOXR3_CXXFLAGS) $(VBOX_VCC_NON_PEDANTIC)
5721 TEMPLATE_VBoxR3DllNonPedantic_PCHFLAGS = $(TEMPLATE_VBOXR3_PCHFLAGS) $(VBOX_VCC_NON_PEDANTIC)
5722else # gcc:
5723 TEMPLATE_VBoxR3DllNonPedantic_TOOL = $(VBOX_GCC_TOOL)
5724 TEMPLATE_VBoxR3DllNonPedantic_CFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_C) ,$(TEMPLATE_VBOXR3_CFLAGS)) \
5725 $(VBOX_GCC_NON_PEDANTIC_C)
5726 TEMPLATE_VBoxR3DllNonPedantic_CXXFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_CXX),$(TEMPLATE_VBOXR3_CXXFLAGS)) \
5727 $(VBOX_GCC_NON_PEDANTIC_CXX)
5728 TEMPLATE_VBoxR3DllNonPedantic_PCHFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_CXX),$(TEMPLATE_VBOXR3_PCHFLAGS)) \
5729 $(VBOX_GCC_NON_PEDANTIC_CXX)
5730endif
5731
5732# x86 edition of the above template for use on AMD64 targets.
5733TEMPLATE_VBoxR3DllNonPedantic-x86 = 32-bit VBox ring-3 SO/DLLs, no warnings
5734TEMPLATE_VBoxR3DllNonPedantic-x86_EXTENDS = VBoxR3DllNonPedantic
5735TEMPLATE_VBoxR3DllNonPedantic-x86_BLD_TRG_ARCH = x86
5736TEMPLATE_VBoxR3DllNonPedantic-x86_DEFS = $(filter-out HC_ARCH_BITS%,$(TEMPLATE_VBoxR3DllNonPedantic_DEFS)) \
5737 HC_ARCH_BITS=32 ARCH_BITS=32
5738
5739
5740
5741#
5742# Same as VBoxR3DllNonPedantic, only it optimizes debug builds.
5743#
5744TEMPLATE_VBoxR3DllNonPedanticFast = VBox ring-3 Non-pedantic, with warnings, optimized debug.
5745TEMPLATE_VBoxR3DllNonPedanticFast_EXTENDS = VBoxR3DllNonPedantic
5746ifeq ($(KBUILD_TYPE),debug)
5747 ifeq ($(KBUILD_TARGET),win)
5748 TEMPLATE_VBoxR3DllNonPedanticFast_CFLAGS = $(filter-out -O0, $(TEMPLATE_VBoxR3DllNonPedantic_CFLAGS)) -O2 -Oy-
5749 TEMPLATE_VBoxR3DllNonPedanticFast_CFLAGS.debug = $(filter-out -RTC%, $(TEMPLATE_VBoxR3DllNonPedantic_CFLAGS.debug))
5750 TEMPLATE_VBoxR3DllNonPedanticFast_CXXFLAGS = $(filter-out -O0, $(TEMPLATE_VBoxR3DllNonPedantic_CXXFLAGS)) -O2 -Oy-
5751 TEMPLATE_VBoxR3DllNonPedanticFast_CXXFLAGS.debug = $(filter-out -RTC%, $(TEMPLATE_VBoxR3DllNonPedantic_CXXFLAGS.debug))
5752 TEMPLATE_VBoxR3DllNonPedanticFast_PCHFLAGS = $(filter-out -O0, $(TEMPLATE_VBoxR3DllNonPedantic_PCHFLAGS)) -O2 -Oy-
5753 TEMPLATE_VBoxR3DllNonPedanticFast_PCHFLAGS.debug = $(filter-out -RTC%, $(TEMPLATE_VBoxR3DllNonPedantic_PCHFLAGS.debug))
5754 else
5755 TEMPLATE_VBoxR3DllNonPedanticFast_CFLAGS = $(TEMPLATE_VBoxR3DllNonPedantic_CFLAGS) -O2 -fno-omit-frame-pointer
5756 TEMPLATE_VBoxR3DllNonPedanticFast_CXXFLAGS = $(TEMPLATE_VBoxR3DllNonPedantic_CXXFLAGS) -O2 -fno-omit-frame-pointer
5757 TEMPLATE_VBoxR3DllNonPedanticFast_PCHFLAGS = $(TEMPLATE_VBoxR3DllNonPedantic_PCHFLAGS) -O2 -fno-omit-frame-pointer
5758 endif
5759endif
5760
5761
5762#
5763# Template for building libraries that are linked into VBoxRT.dll
5764# and it's variations, pedantic variation.
5765#
5766TEMPLATE_VBoxR3RuntimeDll = For libraries that are linked into VBoxRT.
5767TEMPLATE_VBoxR3RuntimeDll_EXTENDS = VBoxR3Dll
5768if defined(VBOX_WITH_MORE_NT4_COMPAT_BINARIES) && "$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)" == "win.x86"
5769 TEMPLATE_VBoxR3RuntimeDll_CFLAGS = $(filter-out -MD$(VBOX_VCC_CRT_TYPE), $(TEMPLATE_VBoxR3Dll_CFLAGS)) -MT$(VBOX_VCC_CRT_TYPE)
5770 TEMPLATE_VBoxR3RuntimeDll_CXXFLAGS = $(filter-out -MD$(VBOX_VCC_CRT_TYPE), $(TEMPLATE_VBoxR3Dll_CXXFLAGS)) -MT$(VBOX_VCC_CRT_TYPE)
5771 TEMPLATE_VBoxR3RuntimeDll_PCHFLAGS = $(filter-out -MD$(VBOX_VCC_CRT_TYPE), $(TEMPLATE_VBoxR3Dll_PCHFLAGS)) -MT$(VBOX_VCC_CRT_TYPE)
5772 TEMPLATE_VBoxR3RuntimeDll_LIBS.x86 = $(filter-out $(PATH_TOOL_$(TEMPLATE_VBOXR3EXE_TOOL.win.x86)_LIB)/%, $(TEMPLATE_VBoxR3Dll_LIBS.x86)) \
5773 $(PATH_TOOL_$(TEMPLATE_VBoxR3RuntimeDll_TOOL.win.x86)_LIB)/oldnames.lib \
5774 $(PATH_TOOL_$(TEMPLATE_VBoxR3RuntimeDll_TOOL.win.x86)_LIB)/libcmt$(VBOX_VCC_CRT_TYPE).lib \
5775 $(PATH_TOOL_$(TEMPLATE_VBoxR3RuntimeDll_TOOL.win.x86)_LIB)/libcpmt$(VBOX_VCC_CRT_TYPE).lib
5776endif
5777
5778#
5779# Template for building libraries that are linked into VBoxRT.dll
5780# and it's variations, non-pedantic variation.
5781#
5782TEMPLATE_VBoxR3RuntimeDllNonPedantic = For libraries that are linked into VBoxRT, but must be excluded from -pedantic warnings.
5783TEMPLATE_VBoxR3RuntimeDllNonPedantic_EXTENDS = VBoxR3DllNonPedantic
5784if defined(VBOX_WITH_MORE_NT4_COMPAT_BINARIES) && $(KBUILD_TARGET_ARCH) == "x86"
5785 TEMPLATE_VBoxR3RuntimeDllNonPedantic_CFLAGS = $(filter-out -MD$(VBOX_VCC_CRT_TYPE), $(TEMPLATE_VBoxR3DllNonPedantic_CFLAGS)) -MT$(VBOX_VCC_CRT_TYPE)
5786 TEMPLATE_VBoxR3RuntimeDllNonPedantic_CXXFLAGS = $(filter-out -MD$(VBOX_VCC_CRT_TYPE), $(TEMPLATE_VBoxR3DllNonPedantic_CXXFLAGS)) -MT$(VBOX_VCC_CRT_TYPE)
5787 TEMPLATE_VBoxR3RuntimeDllNonPedantic_PCHFLAGS = $(filter-out -MD$(VBOX_VCC_CRT_TYPE), $(TEMPLATE_VBoxR3DllNonPedantic_PCHFLAGS)) -MT$(VBOX_VCC_CRT_TYPE)
5788endif
5789
5790#
5791# Same as VBoxR3RuntimeDllNonPedantic, only it optimized debug builds too.
5792#
5793TEMPLATE_VBoxR3RuntimeDllNonPedanticFast = For libraries that are linked into VBoxRT, but must be excluded from -pedantic warnings, optmized debug.
5794TEMPLATE_VBoxR3RuntimeDllNonPedanticFast_EXTENDS = VBoxR3RuntimeDllNonPedantic
5795ifeq ($(KBUILD_TYPE),debug)
5796 ifeq ($(KBUILD_TARGET),win)
5797 TEMPLATE_VBoxR3RuntimeDllNonPedanticFast_CFLAGS = $(filter-out -O0, $(TEMPLATE_VBoxR3RuntimeDllNonPedantic_CFLAGS)) -O2 -Oy-
5798 TEMPLATE_VBoxR3RuntimeDllNonPedanticFast_CFLAGS.debug = $(filter-out -RTC%, $(TEMPLATE_VBoxR3RuntimeDllNonPedantic_CFLAGS.debug))
5799 TEMPLATE_VBoxR3RuntimeDllNonPedanticFast_CXXFLAGS = $(filter-out -O0, $(TEMPLATE_VBoxR3RuntimeDllNonPedantic_CXXFLAGS)) -O2 -Oy-
5800 TEMPLATE_VBoxR3RuntimeDllNonPedanticFast_CXXFLAGS.debug = $(filter-out -RTC%, $(TEMPLATE_VBoxR3RuntimeDllNonPedantic_CXXFLAGS.debug))
5801 TEMPLATE_VBoxR3RuntimeDllNonPedanticFast_PCHFLAGS = $(filter-out -O0, $(TEMPLATE_VBoxR3RuntimeDllNonPedantic_PCHFLAGS)) -O2 -Oy-
5802 TEMPLATE_VBoxR3RuntimeDllNonPedanticFast_PCHFLAGS.debug = $(filter-out -RTC%, $(TEMPLATE_VBoxR3RuntimeDllNonPedantic_PCHFLAGS.debug))
5803 else
5804 TEMPLATE_VBoxR3RuntimeDllNonPedanticFast_CFLAGS = $(TEMPLATE_VBoxR3RuntimeDllNonPedantic_CFLAGS) -O2 -fno-omit-frame-pointer
5805 TEMPLATE_VBoxR3RuntimeDllNonPedanticFast_CXXFLAGS = $(TEMPLATE_VBoxR3RuntimeDllNonPedantic_CXXFLAGS) -O2 -fno-omit-frame-pointer
5806 TEMPLATE_VBoxR3RuntimeDllNonPedanticFast_PCHFLAGS = $(TEMPLATE_VBoxR3RuntimeDllNonPedantic_PCHFLAGS) -O2 -fno-omit-frame-pointer
5807 endif
5808endif
5809
5810
5811#
5812# Template for building libraries, shared libraries / modules
5813# which only depends on IPRT for crt.
5814#
5815TEMPLATE_VBoxNoCrtGccLib = VBox no-crt GCC libraries and modules, yasm/nasm.
5816TEMPLATE_VBoxNoCrtGccLib_DEFS = IN_RING3 IPRT_NO_CRT $(ARCH_BITS_DEFS)
5817TEMPLATE_VBoxNoCrtGccLib_ASDEFS = ASM_CALL64_GCC
5818TEMPLATE_VBoxNoCrtGccLib_CFLAGS = -nostdinc -fno-strict-aliasing -fno-math-errno $(VBOX_GCC_WARN) -Werror-implicit-function-declaration
5819TEMPLATE_VBoxNoCrtGccLib_CFLAGS.x86 = -m32
5820TEMPLATE_VBoxNoCrtGccLib_CFLAGS.amd64 = -m64 -mcmodel=medium -fno-common
5821TEMPLATE_VBoxNoCrtGccLib_CFLAGS.sparc32 = -m32
5822TEMPLATE_VBoxNoCrtGccLib_CFLAGS.sparc64 = -m64
5823TEMPLATE_VBoxNoCrtGccLib_CFLAGS.release = -O2 -fno-strict-aliasing
5824TEMPLATE_VBoxNoCrtGccLib_CFLAGS.profile = $(TEMPLATE_VBoxNoCrtGccLib_CFLAGS.release)
5825TEMPLATE_VBoxNoCrtGccLib_CFLAGS.kprofile = $(TEMPLATE_VBoxNoCrtGccLib_CFLAGS.release)
5826TEMPLATE_VBoxNoCrtGccLib_CFLAGS.darwin = -static
5827TEMPLATE_VBoxNoCrtGccLib_CXXFLAGS = $(filter-out -Werror-implicit-function-declaration,$(TEMPLATE_VBoxNoCrtGccLib_CFLAGS))
5828TEMPLATE_VBoxNoCrtGccLib_CXXFLAGS.$(KBUILD_TARGET) = $(TEMPLATE_VBoxNoCrtGccLib_CFLAGS.$(KBUILD_TARGET))
5829TEMPLATE_VBoxNoCrtGccLib_CXXFLAGS.$(KBUILD_TARGET_ARCH) = $(TEMPLATE_VBoxNoCrtGccLib_CFLAGS.$(KBUILD_TARGET_ARCH))
5830TEMPLATE_VBoxNoCrtGccLib_PCHFLAGS = $(TEMPLATE_VBoxNoCrtGccLib_CXXFLAGS)
5831TEMPLATE_VBoxNoCrtGccLib_PCHFLAGS.$(KBUILD_TARGET) = $(TEMPLATE_VBoxNoCrtGccLib_CXXFLAGS.$(KBUILD_TARGET))
5832TEMPLATE_VBoxNoCrtGccLib_PCHFLAGS.$(KBUILD_TARGET_ARCH) = $(TEMPLATE_VBoxNoCrtGccLib_CXXFLAGS.$(KBUILD_TARGET_ARCH))
5833TEMPLATE_VBoxNoCrtGccLib_INCS = $(PATH_ROOT)/include/iprt/nocrt
5834
5835ifeq (disabled-by-mingw-w64 $(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),win.amd64)
5836 # cross compile to 64-bit ELF (linux).
5837 TEMPLATE_VBoxNoCrtGccLib_TOOL = XGCCAMD64LINUX
5838 TEMPLATE_VBoxNoCrtGccLib_ASTOOL = YASM
5839 TEMPLATE_VBoxNoCrtGccLib_ASFLAGS = -f elf64 -DASM_FORMAT_ELF -D__YASM__ -g dwarf2 -w+orphan-labels $(VBOX_YASM_Wno-segreg-in-64bit)
5840 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
5841 TEMPLATE_VBoxNoCrtGccLib_LDFLAGS = -nostdlib
5842
5843else if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), win.x86 win.amd64)
5844 # Use the default GCC (MinGW) with the Microsoft linker.
5845 # (Drop all '-g' options as we're unable to strip the debug info.)
5846 TEMPLATE_VBoxNoCrtGccLib_TOOL = $(VBOX_GCC_TOOL)
5847 if $(VBOX_GCC_VERSION_CC) < 30400
5848 TEMPLATE_VBoxNoCrtGccLib_DEFS += RT_WITHOUT_PRAGMA_ONCE
5849 endif
5850 TEMPLATE_VBoxNoCrtGccLib_ASTOOL = $(VBOX_ASTOOL)
5851 TEMPLATE_VBoxNoCrtGccLib_ASFLAGS = $(VBOX_ASFLAGS)
5852 TEMPLATE_VBoxNoCrtGccLib_LDTOOL = $(VBOX_VCC_TOOL)
5853 TEMPLATE_VBoxNoCrtGccLib_LDFLAGS = -Incremental:NO -MapInfo:Exports -NoD -Ignore:4197
5854 TEMPLATE_VBoxNoCrtGccLib_LIBS = $(VBOX_GCC_LIBGCC)
5855 TEMPLATE_VBoxNoCrtGccLib_CFLAGS := $(filter-out -g,$(TEMPLATE_VBoxNoCrtGccLib_CFLAGS)) -s
5856 TEMPLATE_VBoxNoCrtGccLib_CXXFLAGS := $(filter-out -g,$(TEMPLATE_VBoxNoCrtGccLib_CXXFLAGS)) -s
5857 TEMPLATE_VBoxNoCrtGccLib_PCHFLAGS := $(filter-out -g,$(TEMPLATE_VBoxNoCrtGccLib_PCHFLAGS)) -s
5858
5859else
5860 # Use the default GCC.
5861 # The use of --exclude-libs ALL is to avoid confusing the linux ld.so.
5862 TEMPLATE_VBoxNoCrtGccLib_TOOL = $(VBOX_GCC_TOOL)
5863 if $(VBOX_GCC_VERSION_CC) < 30400
5864 TEMPLATE_VBoxNoCrtGccLib_DEFS += RT_WITHOUT_PRAGMA_ONCE
5865 endif
5866 TEMPLATE_VBoxNoCrtGccLib_ASTOOL = $(VBOX_ASTOOL)
5867 TEMPLATE_VBoxNoCrtGccLib_ASFLAGS = $(VBOX_ASFLAGS)
5868 TEMPLATE_VBoxNoCrtGccLib_CFLAGS += $(VBOX_GCC_fno-stack-protector)
5869 TEMPLATE_VBoxNoCrtGccLib_CXXFLAGS += $(VBOX_GCC_fno-stack-protector)
5870 TEMPLATE_VBoxNoCrtGccLib_PCHFLAGS += $(VBOX_GCC_fno-stack-protector)
5871 ifeq ($(KBUILD_TARGET_ARCH),amd64)
5872 # in 64-bit mode we'll build a sys-module (VBoxREM2).
5873 if1of ($(KBUILD_TARGET), darwin solaris)
5874 TEMPLATE_VBoxNoCrtGccLib_LDFLAGS.solaris= -64 -r
5875 else
5876 TEMPLATE_VBoxNoCrtGccLib_LDFLAGS = -nostdlib
5877 endif
5878 else # x86:
5879 TEMPLATE_VBoxNoCrtGccLib_LDFLAGS = -nostdlib
5880 ifn1of ($(KBUILD_TARGET), os2 darwin solaris)
5881 TEMPLATE_VBoxNoCrtGccLib_LDFLAGS += $(VBOX_GCC_NO_UNDEFINED)
5882 endif
5883 endif # x86
5884 TEMPLATE_VBoxNoCrtGccLib_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_LDFLAGS)
5885 TEMPLATE_VBoxNoCrtGccLib_LIBS = # FIXME - has unwind mess.
5886endif
5887
5888
5889#
5890# Same as VBoxNoCrtGccLib only it uses GAS as the assembler instead of yasm/nasm.
5891#
5892TEMPLATE_VBOXNOCRTGAS = VBox no-crt GCC libraries and modules, gas.
5893TEMPLATE_VBOXNOCRTGAS_EXTENDS = VBoxNoCrtGccLib
5894TEMPLATE_VBOXNOCRTGAS_ASTOOL = $(TEMPLATE_VBoxNoCrtGccLib_TOOL)
5895ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),win.x86)
5896 TEMPLATE_VBOXNOCRTGAS_ASFLAGS = -s
5897else
5898 TEMPLATE_VBOXNOCRTGAS_ASFLAGS = -g
5899endif
5900TEMPLATE_VBOXNOCRTGAS_ASFLAGS.x86 = -m32
5901TEMPLATE_VBOXNOCRTGAS_ASFLAGS.amd64 = -m64
5902
5903
5904#
5905# Template for building executables that are part of the VBox Main component
5906# (COM/XPCOM interface to VirtualBox).
5907#
5908TEMPLATE_VBOXMAINEXE = VBox Main Executable
5909TEMPLATE_VBOXMAINEXE_ASTOOL = $(VBOX_ASTOOL)
5910TEMPLATE_VBOXMAINEXE_ASFLAGS = $(VBOX_ASFLAGS)
5911TEMPLATE_VBOXMAINEXE_DEFS = IN_RING3 UNICODE NDEBUG=1
5912TEMPLATE_VBOXMAINEXE_DEFS.win = _UNICODE
5913TEMPLATE_VBOXMAINEXE_RCDEFS = $(TEMPLATE_VBOXR3EXE_RCDEFS)
5914TEMPLATE_VBOXMAINEXE_LIBS.kprofile = $(LIB_KPROFILE)
5915TEMPLATE_VBOXMAINEXE_USES = dtrace
5916if defined(VBOX_WITH_DTRACE_R3_MAIN) && defined(VBOX_WITH_NATIVE_DTRACE)
5917 TEMPLATE_VBOXMAINEXE_DTRACETOOL = DTraceAndVBoxTpG
5918 TEMPLATE_VBOXMAINEXE_DTRACE_OBJ_FLAGS = -C
5919 TEMPLATE_VBOXMAINEXE_DTRACE_HDR_FLAGS = -C
5920 TEMPLATE_VBOXMAINEXE_DEFS += VBOX_WITH_DTRACE VBOX_WITH_DTRACE_R3 VBOX_WITH_DTRACE_R3_MAIN VBOX_WITH_NATIVE_DTRACE
5921else
5922 TEMPLATE_VBOXMAINEXE_DTRACE_HDR_FLAGS = --ring-3-context
5923 TEMPLATE_VBOXMAINEXE_DTRACE_OBJ_FLAGS = --ring-3-context --pic --probe-fn-imported --probe-fn-name "SUPTracerFireProbe"
5924 if defined(VBOX_WITH_DTRACE_R3_MAIN)
5925 TEMPLATE_VBOXMAINEXE_DTRACETOOL = VBoxTpG
5926 TEMPLATE_VBOXMAINEXE_DEFS += VBOX_WITH_DTRACE VBOX_WITH_DTRACE_R3 VBOX_WITH_DTRACE_R3_MAIN
5927 else
5928 TEMPLATE_VBOXMAINEXE_DTRACETOOL = VBoxTpG-Disabled
5929 endif
5930endif
5931
5932ifeq ($(KBUILD_TARGET),win)
5933 TEMPLATE_VBOXMAINEXE_SDKS = ReorderCompilerIncs $(VBOX_WINPSDK) $(VBOX_WINDDK)
5934 #TEMPLATE_VBOXMAINEXE_TOOL = $(VBOX_VCC_TOOL)
5935 TEMPLATE_VBOXMAINEXE_TOOL.win.x86 = $(VBOX_VCC_TOOL_STEM)X86
5936 TEMPLATE_VBOXMAINEXE_TOOL.win.amd64 = $(VBOX_VCC_TOOL_STEM)AMD64
5937 TEMPLATE_VBOXMAINEXE_CXXFLAGS = -Zi -Zl -GR -EHsc -GF -MD$(VBOX_VCC_CRT_TYPE) -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
5938 # -wd4625: 'DisplaySourceBitmap' : copy constructor could not be generated because a base class copy constructor is inaccessible
5939 # -wd4626: 'DisplaySourceBitmap' : assignment operator could not be generated because a base class assignment operator is inaccessible
5940 # The two above can be cured by adding private: DECLARE_CLS_COPY_CTOR_ASSIGN_NOOP(xxxx); but too much work.
5941 # -wd4355: 'this' : used in base member initializer list (e.g. VirtualBoxBase.cpp)
5942 TEMPLATE_VBOXMAINEXE_CXXFLAGS += $(VBOX_VCC_WARN_ALL) -wd4625 -wd4626 -wd4355 $(VBOX_VCC_WERR)
5943 TEMPLATE_VBOXMAINEXE_CXXFLAGS.debug = -RTCsu
5944 TEMPLATE_VBOXMAINEXE_CXXFLAGS.dbgopt = $(NO_SUCH_VARIABLE)
5945 TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile = -Gh -GH
5946 TEMPLATE_VBOXMAINEXE_CFLAGS = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS)
5947 TEMPLATE_VBOXMAINEXE_CFLAGS.debug = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.debug)
5948 TEMPLATE_VBOXMAINEXE_CFLAGS.dbgopt = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.dbgopt)
5949 TEMPLATE_VBOXMAINEXE_CFLAGS.kprofile = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile)
5950 TEMPLATE_VBOXMAINEXE_PCHFLAGS = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS)
5951 TEMPLATE_VBOXMAINEXE_PCHFLAGS.debug = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.debug)
5952 TEMPLATE_VBOXMAINEXE_PCHFLAGS.dbgopt = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.dbgopt)
5953 TEMPLATE_VBOXMAINEXE_PCHFLAGS.kprofile = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile)
5954 TEMPLATE_VBOXMAINEXE_LDFLAGS = -Ignore:4197 \
5955 /NOD /INCREMENTAL:NO /MAPINFO:EXPORTS /LargeAddressAware /DynamicBase /NxCompat /Release /Debug /Opt:Ref /Opt:Icf \
5956 /Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
5957 /STUB:$(PATH_ROOT)/src/VBox/HostDrivers/Support/win/winstub.com \
5958 /DISALLOWLIB:libc.lib \
5959 /DISALLOWLIB:libcd.lib \
5960 /DISALLOWLIB:libcmt.lib \
5961 /DISALLOWLIB:libcmtd.lib \
5962 /DISALLOWLIB:msvcrt$(VBOX_VCC_CRT_TYPE_N).lib \
5963 /DISALLOWLIB:msvcprt$(VBOX_VCC_CRT_TYPE_N).lib
5964 if defined(VBOX_SIGNING_MODE) && defined(VBOX_WITH_HARDENING)
5965 TEMPLATE_VBOXMAINEXE_LDFLAGS += -IntegrityCheck
5966 endif
5967 ifdef VBOX_WITH_DTRACE_R3_MAIN
5968 TEMPLATE_VBOXMAINEXE_LDFLAGS += -Merge:VTGPrLc.Data=VTGPrLc.Begin -Merge:VTGPrLc.End=VTGPrLc.Begin -Merge:VTGPrLc.Begin=VTGObj
5969 endif
5970 TEMPLATE_VBOXMAINEXE_LIBS = \
5971 $(LIB_RUNTIME)
5972 TEMPLATE_VBOXMAINEXE_LIBS.x86 = \
5973 $(PATH_TOOL_$(TEMPLATE_VBOXMAINEXE_TOOL.win.x86)_LIB)/msvcrt$(VBOX_VCC_CRT_TYPE).lib \
5974 $(PATH_TOOL_$(TEMPLATE_VBOXMAINEXE_TOOL.win.x86)_LIB)/msvcprt$(VBOX_VCC_CRT_TYPE).lib \
5975 $(PATH_TOOL_$(TEMPLATE_VBOXMAINEXE_TOOL.win.x86)_LIB)/oldnames.lib
5976 TEMPLATE_VBOXMAINEXE_LIBS.amd64 = \
5977 $(PATH_TOOL_$(TEMPLATE_VBOXMAINEXE_TOOL.win.amd64)_LIB)/msvcrt$(VBOX_VCC_CRT_TYPE).lib \
5978 $(PATH_TOOL_$(TEMPLATE_VBOXMAINEXE_TOOL.win.amd64)_LIB)/msvcprt$(VBOX_VCC_CRT_TYPE).lib \
5979 $(PATH_TOOL_$(TEMPLATE_VBOXMAINEXE_TOOL.win.amd64)_LIB)/oldnames.lib
5980 TEMPLATE_VBOXMAINEXE_POST_CMDS = $(VBOX_SIGN_IMAGE_CMDS)
5981
5982else # the GCC guys:
5983
5984TEMPLATE_VBOXMAINEXE_TOOL = $(VBOX_GCC_TOOL)
5985 if $(VBOX_GCC_VERSION_CC) < 30400
5986 TEMPLATE_VBOXMAINEXE_DEFS += RT_WITHOUT_PRAGMA_ONCE
5987 endif
5988TEMPLATE_VBOXMAINEXE_CXXFLAGS = -g $(VBOX_GCC_pipe) \
5989 $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_Wno-multistatement-macros) $(VBOX_GCC_Wno-class-memaccess) -Wshadow \
5990 -fshort-wchar -fpermissive -fexceptions -frtti $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing \
5991 $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_std) $(VBOX_GCC_IPRT_FMT_CHECK)
5992 if !defined("VBOX_GCC_Wno-delete-non-virtual-dtor") && defined("VBOX_GCC_Wno-non-virtual-dtor")
5993 TEMPLATE_VBOXMAINEXE_CXXFLAGS += $(VBOX_GCC_Wno-non-virtual-dtor)
5994 endif
5995 ifdef VBOX_WITH_NO_GCC_WARNING_POLICY
5996 TEMPLATE_VBOXMAINEXE_CXXFLAGS += $(VBOX_GCC_WERR)
5997 endif
5998 ifdef VBOX_WITH_DTRACE_R3_MAIN
5999 TEMPLATE_VBOXMAINEXE_CXXFLAGS := $(filter-out -pedantic,$(TEMPLATE_VBOXMAINEXE_CXXFLAGS)) -fdollars-in-identifiers # annoying gcc option precedence.
6000 endif
6001TEMPLATE_VBOXMAINEXE_CXXFLAGS.x86 = -m32
6002TEMPLATE_VBOXMAINEXE_CXXFLAGS.amd64 = -m64
6003TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile = -finstrument-functions
6004TEMPLATE_VBOXMAINEXE_CXXFLAGS.debug = $(VBOX_GCC_SANITIZER_FLAGS)
6005TEMPLATE_VBOXMAINEXE_CFLAGS = -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC_Wno-variadic-macros) \
6006 $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_IPRT_FMT_CHECK)
6007 ifdef VBOX_WITH_NO_GCC_WARNING_POLICY
6008 TEMPLATE_VBOXMAINEXE_CFLAGS += $(VBOX_GCC_WERR)
6009 endif
6010TEMPLATE_VBOXMAINEXE_CFLAGS.x86 = -m32
6011TEMPLATE_VBOXMAINEXE_CFLAGS.amd64 = -m64
6012TEMPLATE_VBOXMAINEXE_CFLAGS.kprofile = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile)
6013TEMPLATE_VBOXMAINEXE_CFLAGS.debug = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.debug)
6014TEMPLATE_VBOXMAINEXE_OBJCFLAGS = $(TEMPLATE_VBOXMAINEXE_CFLAGS)
6015TEMPLATE_VBOXMAINEXE_OBJCFLAGS.x86 = $(TEMPLATE_VBOXMAINEXE_CFLAGS.x86)
6016TEMPLATE_VBOXMAINEXE_OBJCFLAGS.amd64 = $(TEMPLATE_VBOXMAINEXE_CFLAGS.amd64)
6017TEMPLATE_VBOXMAINEXE_OBJCFLAGS.debug = $(TEMPLATE_VBOXMAINEXE_CFLAGS.debug)
6018TEMPLATE_VBOXMAINEXE_OBJCFLAGS.kprofile = $(TEMPLATE_VBOXMAINEXE_CFLAGS.kprofile)
6019TEMPLATE_VBOXMAINEXE_OBJCXXFLAGS = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS)
6020TEMPLATE_VBOXMAINEXE_OBJCXXFLAGS.x86 = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.x86)
6021TEMPLATE_VBOXMAINEXE_OBJCXXFLAGS.amd64 = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.amd64)
6022TEMPLATE_VBOXMAINEXE_OBJCXXFLAGS.debug = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.debug)
6023TEMPLATE_VBOXMAINEXE_OBJCXXFLAGS.kprofile= $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile)
6024TEMPLATE_VBOXMAINEXE_PCHFLAGS = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS)
6025TEMPLATE_VBOXMAINEXE_PCHFLAGS.x86 = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.x86)
6026TEMPLATE_VBOXMAINEXE_PCHFLAGS.amd64 = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.amd64)
6027TEMPLATE_VBOXMAINEXE_PCHFLAGS.debug = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.debug)
6028TEMPLATE_VBOXMAINEXE_PCHFLAGS.kprofile = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile)
6029TEMPLATE_VBOXMAINEXE_LDFLAGS.x86 = -m32
6030TEMPLATE_VBOXMAINEXE_LDFLAGS.amd64 = -m64
6031TEMPLATE_VBOXMAINEXE_LDFLAGS.debug = $(VBOX_GCC_SANITIZER_FLAGS)
6032 ifeq ($(KBUILD_TARGET),linux)
6033TEMPLATE_VBOXMAINEXE_LIBS = pthread m rt $(LIB_RUNTIME) dl
6034TEMPLATE_VBOXMAINEXE_LDFLAGS.linux = -Wl,-z,noexecstack,-z,relro $(VBOX_LD_as_needed)
6035 else ifeq ($(KBUILD_TARGET),os2)
6036TEMPLATE_VBOXMAINEXE_TOOL = GXX3OMF
6037TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME)
6038 else ifeq ($(KBUILD_TARGET),darwin)
6039TEMPLATE_VBOXMAINEXE_TOOL = $(VBOX_GCC_TOOL)
6040TEMPLATE_VBOXMAINEXE_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS)
6041TEMPLATE_VBOXMAINEXE_CFLAGS += $(VBOX_DARWIN_DEF_SDK_CFLAGS)
6042TEMPLATE_VBOXMAINEXE_CXXFLAGS += $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
6043TEMPLATE_VBOXMAINEXE_OBJCFLAGS += $(VBOX_DARWIN_DEF_SDK_OBJCFLAGS)
6044TEMPLATE_VBOXMAINEXE_OBJCXXFLAGS += $(VBOX_DARWIN_DEF_SDK_OBJCXXFLAGS)
6045TEMPLATE_VBOXMAINEXE_LDFLAGS.darwin += -bind_at_load
6046TEMPLATE_VBOXMAINEXE_LDFLAGS += $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -framework Carbon
6047TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME)
6048 else ifeq ($(KBUILD_TARGET),haiku)
6049TEMPLATE_VBOXMAINEXE_TOOL = GXX3
6050TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME) network stdc++ supc++
6051 else if1of ($(KBUILD_TARGET), freebsd openbsd)
6052TEMPLATE_VBOXMAINEXE_TOOL = GXX3
6053TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME)
6054TEMPLATE_VBOXMAINEXE_INCS += \
6055 /usr/include \
6056 /usr/X11R6/include \
6057 /usr/local/include
6058TEMPLATE_VBOXMAINEXE_LIBPATH += \
6059 /usr/lib \
6060 /usr/X11R6/lib \
6061 /usr/local/lib
6062 else ifeq ($(KBUILD_TARGET),netbsd)
6063TEMPLATE_VBOXMAINEXE_TOOL = GXX3
6064TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME)
6065TEMPLATE_VBOXMAINEXE_INCS += \
6066 /usr/include \
6067 /usr/X11R7/include
6068TEMPLATE_VBOXMAINEXE_LIBPATH += \
6069 /usr/lib \
6070 /usr/X11R7/lib
6071else ifeq ($(KBUILD_TARGET),solaris)
6072TEMPLATE_VBOXMAINEXE_TOOL = GXX3PLAIN
6073TEMPLATE_VBOXMAINEXE_DEFS += _REENTRANT
6074TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME) rt thread
6075 else
6076$(warning Warning: VBOX Build: Target $(KBUILD_TARGET) is not officially supported!)
6077TEMPLATE_VBOXMAINEXE_LIBS =
6078 endif
6079TEMPLATE_VBOXMAINEXE_LDFLAGS.solaris = -Wl,-z,ignore # Same as VBOX_LD_as_needed.
6080 ifdef VBOX_WITH_RUNPATH
6081TEMPLATE_VBOXMAINEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)'
6082 else ifdef VBOX_WITH_RELATIVE_RUNPATH
6083TEMPLATE_VBOXMAINEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)'
6084 endif
6085 ifdef VBOX_WITH_ORIGIN
6086TEMPLATE_VBOXMAINEXE_LDFLAGS.linux += $(VBOX_GCC_ORIGIN_OPT)
6087 endif
6088
6089endif # !win
6090
6091# Add COM/XPCOM stuff
6092TEMPLATE_VBOXMAINEXE_LIBS += \
6093 $(PATH_STAGE_LIB)/VBoxCOM$(VBOX_SUFF_LIB)
6094ifdef VBOX_WITH_XPCOM
6095 ## @todo may be worth creating the VBOX_XPCOM SDK def
6096 TEMPLATE_VBOXMAINEXE_DEFS += VBOX_WITH_XPCOM
6097 ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
6098 TEMPLATE_VBOXMAINEXE_DEFS += VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
6099 endif
6100 TEMPLATE_VBOXMAINEXE_INCS += \
6101 $(VBOX_XPCOM_INCS)
6102 TEMPLATE_VBOXMAINEXE_LIBS += \
6103 $(LIB_XPCOM)
6104 TEMPLATE_VBOXMAINEXE_INTERMEDIATES += \
6105 $(VBOX_PATH_SDK)/bindings/xpcom/include/VirtualBox_XPCOM.h
6106
6107else # COM
6108 TEMPLATE_VBOXMAINEXE_INCS += \
6109 $(VBOX_PATH_SDK)/bindings/mscom/include
6110 TEMPLATE_VBOXMAINEXE_INTERMEDIATES += \
6111 $(VBOX_PATH_SDK)/bindings/mscom/include/VirtualBox.h
6112endif # COM
6113
6114#
6115# Template for building the Main DLL modules (such as in-process COM/XPCOM
6116# components for Main).
6117#
6118# This differs from VBOXMAINEXE only in PIC handling and similar DLL stuff.
6119#
6120TEMPLATE_VBOXMAINDLL = VBox Main Component (shared library)
6121TEMPLATE_VBOXMAINDLL_EXTENDS = VBOXMAINEXE
6122ifn1of ($(KBUILD_TARGET), darwin haiku os2 win)
6123 TEMPLATE_VBOXMAINDLL_DEFS = PIC $(TEMPLATE_VBOXMAINEXE_DEFS)
6124 TEMPLATE_VBOXMAINDLL_CFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_CFLAGS)
6125 TEMPLATE_VBOXMAINDLL_CXXFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_CXXFLAGS)
6126 TEMPLATE_VBOXMAINDLL_PCHFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_PCHFLAGS)
6127 TEMPLATE_VBOXMAINDLL_LDFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_LDFLAGS)
6128endif
6129TEMPLATE_VBOXMAINDLL_LDFLAGS.darwin = $(filter-out -bind_at_load,$(TEMPLATE_VBOXMAINEXE_LDFLAGS.darwin)) \
6130 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
6131 -compatibility_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
6132
6133#
6134# Template identical to VBOXMAINDLL except for where the stuff is
6135# installed when using XPCOM (components/).
6136#
6137# Note! In the hardened build this gets a bit ugly since $ORIGIN/..
6138# doesn't work. So, we keep the $ORIGIN from VBOXMAINEXE and let
6139# the installers do the necessary .so symlinking.
6140#
6141# (No difference when building against COM on Windows.)
6142#
6143TEMPLATE_VBOXMAINCOMP = VBox Main COM/XPCOM Component (shared library)
6144TEMPLATE_VBOXMAINCOMP_EXTENDS = VBOXMAINEXE
6145ifn1of ($(KBUILD_TARGET), win)
6146 TEMPLATE_VBOXMAINCOMP_INST = $(INST_BIN)components/
6147endif
6148ifneq ($(KBUILD_TARGET),win)
6149 ifeq ($(filter-out solaris.x86 %.amd64 %.sparc32 %.sparc64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),) ## TODO: cleanup!
6150 TEMPLATE_VBOXMAINCOMP_DEFS = PIC $(TEMPLATE_VBOXMAINEXE_DEFS)
6151 TEMPLATE_VBOXMAINCOMP_CFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_CFLAGS)
6152 TEMPLATE_VBOXMAINCOMP_CXXFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_CXXFLAGS)
6153 TEMPLATE_VBOXMAINCOMP_PCHFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_PCHFLAGS)
6154 if defined(VBOX_WITH_RELATIVE_RUNPATH) && !defined(VBOX_WITH_HARDENING)
6155 TEMPLATE_VBOXMAINCOMP_LDFLAGS = -fPIC $(filter-out '$(VBOX_GCC_RPATH_OPT)%',$(TEMPLATE_VBOXMAINEXE_LDFLAGS)) '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/..'
6156 else
6157 TEMPLATE_VBOXMAINCOMP_LDFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_LDFLAGS)
6158 endif
6159 else ifndef VBOX_WITH_HARDENING
6160 ifdef VBOX_WITH_RELATIVE_RUNPATH
6161 TEMPLATE_VBOXMAINCOMP_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)%',$(TEMPLATE_VBOXMAINEXE_LDFLAGS)) '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/..'
6162 endif
6163 endif
6164endif
6165TEMPLATE_VBOXMAINCOMP_LDFLAGS.darwin = $(filter-out -bind_at_load,$(TEMPLATE_VBOXMAINEXE_LDFLAGS.darwin)) \
6166 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
6167 -compatibility_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
6168
6169TEMPLATE_VBoxMainComp-x86 = 32-bit VBox Main Component (shared library)
6170TEMPLATE_VBoxMainComp-x86_EXTENDS = VBOXMAINCOMP
6171TEMPLATE_VBoxMainComp-x86_BLD_TRG_ARCH = x86
6172TEMPLATE_VBoxMainComp-x86_INST.win = $(INST_DLL)x86/
6173TEMPLATE_VBoxMainComp-x86_DEFS = $(filter-out HC_ARCH_BITS%,$(TEMPLATE_VBOXMAINCOMP_DEFS)) HC_ARCH_BIT=32 ARCH_BITS=32 \
6174 VBOX_IN_32_ON_64_MAIN_API
6175TEMPLATE_VBoxMainComp-x86_LIBS = \
6176 $(subst $(PATH_STAGE_LIB)/VBoxCOM$(VBOX_SUFF_LIB),$(PATH_STAGE_LIB)/VBoxCOM-x86$(VBOX_SUFF_LIB),\
6177 $(subst $(LIB_RUNTIME),$(VBOX_LIB_RUNTIME_X86),\
6178 $(subst $(LIB_XPCOM),$(VBOX_LIB_XPCOM_X86),\
6179 $(TEMPLATE_VBOXMAINCOMP_LIBS))))
6180ifeq ($(KBUILD_TARGET),solaris)
6181 ifdef VBOX_WITH_RUNPATH
6182 TEMPLATE_VBoxMainComp-x86_LDFLAGS = \
6183 $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)',$(TEMPLATE_VBOXMAINCOMP_LDFLAGS)) \
6184 '$(VBOX_GCC_RPATH_OPT)$(VBOX_PATH_APP_PRIVATE)' \
6185 '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)'
6186 endif
6187endif
6188
6189
6190#
6191# Template for building the Main static libraries.
6192#
6193# This differs from VBOXMAINDLL only that it zeroes out the _LIBS definition.
6194#
6195TEMPLATE_VBoxMainLib = VBox Main Component (static library)
6196TEMPLATE_VBoxMainLib_EXTENDS = VBOXMAINDLL
6197TEMPLATE_VBoxMainLib_LIBS =
6198
6199TEMPLATE_VBoxMainLib-x86 = 32-bit VBox Main Component (static library)
6200TEMPLATE_VBoxMainLib-x86_EXTENDS = VBoxMainLib
6201TEMPLATE_VBoxMainLib-x86_BLD_TRG_ARCH = x86
6202TEMPLATE_VBoxMainLib-x86_DEFS = $(filter-out HC_ARCH_BITS%,$(TEMPLATE_VBoxMainLib_DEFS)) HC_ARCH_BIT=32 ARCH_BITS=32 \
6203 VBOX_IN_32_ON_64_MAIN_API
6204
6205#
6206# Main unit testing, for compiling API implementation files into a testcase.
6207# This is the VBOXMAINEXE template only with a different install dir.
6208#
6209TEMPLATE_VBOXMAINTSTEXE = VBox Main Testcase Exe
6210TEMPLATE_VBOXMAINTSTEXE_EXTENDS = VBOXMAINEXE
6211TEMPLATE_VBOXMAINTSTEXE_INST = $(INST_TESTCASE)
6212ifdef VBOX_WITH_RUNPATH
6213 TEMPLATE_VBOXMAINTSTEXE_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' $(TEMPLATE_VBOXMAINEXE_LDFLAGS)
6214else ifdef VBOX_WITH_RELATIVE_RUNPATH
6215 TEMPLATE_VBOXMAINTSTEXE_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/..' $(TEMPLATE_VBOXMAINEXE_LDFLAGS)
6216endif
6217if "$(KBUILD_TARGET)" == "win" && defined(VBOX_SIGNING_MODE)
6218 TEMPLATE_VBOXMAINTSTEXE_POST_CMDS =
6219endif
6220
6221#
6222# Template for building executables that use the VBox Main component.
6223#
6224TEMPLATE_VBOXMAINCLIENTEXE = VBox Main Client (executable)
6225TEMPLATE_VBOXMAINCLIENTEXE_EXTENDS = VBOXMAINEXE
6226ifeq ($(KBUILD_TARGET),win)
6227 TEMPLATE_VBOXMAINCLIENTEXE_DEPS = $(VBOX_PATH_SDK)/bindings/mscom/include/VirtualBox.h
6228 TEMPLATE_VBOXMAINCLIENTEXE_LIBS.win = $(TEMPLATE_VBOXMAINEXE_LIBS.win) \
6229 $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/User32.Lib \
6230 $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/Shell32.Lib \
6231 $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/ShLwApi.Lib \
6232 $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/Ole32.Lib \
6233 $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/OleAut32.Lib \
6234 $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/Uuid.Lib
6235else
6236 TEMPLATE_VBOXMAINCLIENTEXE_DEPS = $(VBOX_PATH_SDK)/bindings/xpcom/include/VirtualBox_XPCOM.h
6237 TEMPLATE_VBOXMAINCLIENTEXE_DEFS = $(TEMPLATE_VBOXMAINEXE_DEFS) \
6238 NDEBUG TRIMMED
6239 TEMPLATE_VBOXMAINCLIENTEXE_CXXFLAGS.linux = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.linux) -pthread
6240 TEMPLATE_VBOXMAINCLIENTEXE_PCHFLAGS.linux = $(TEMPLATE_VBOXMAINEXE_PCHFLAGS.linux) -pthread
6241endif
6242
6243#
6244# Template for building shared libraries / DLLs that use the VBox Main component.
6245#
6246# This differs from VBOXMAINCLIENTEXE only in PIC handling and similar DLL stuff.
6247#
6248TEMPLATE_VBOXMAINCLIENTDLL = VBox MAIN Client (shared library)
6249TEMPLATE_VBOXMAINCLIENTDLL_EXTENDS = VBOXMAINCLIENTEXE
6250ifn1of ($(KBUILD_TARGET), darwin os2 win)
6251 TEMPLATE_VBOXMAINCLIENTDLL_DEFS = PIC $(TEMPLATE_VBOXMAINCLIENTEXE_DEFS)
6252 TEMPLATE_VBOXMAINCLIENTDLL_CFLAGS = -fPIC $(TEMPLATE_VBOXMAINCLIENTEXE_CFLAGS)
6253 TEMPLATE_VBOXMAINCLIENTDLL_CXXFLAGS = -fPIC $(TEMPLATE_VBOXMAINCLIENTEXE_CXXFLAGS)
6254 TEMPLATE_VBOXMAINCLIENTDLL_PCHFLAGS = -fPIC $(TEMPLATE_VBOXMAINCLIENTEXE_PCHFLAGS)
6255 TEMPLATE_VBOXMAINCLIENTDLL_LDFLAGS = -fPIC $(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS)
6256endif
6257TEMPLATE_VBOXMAINCLIENTDLL_LDFLAGS.darwin = $(filter-out -bind_at_load,$(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS.darwin))
6258
6259#
6260# Template for building testcases which are API clients.
6261#
6262TEMPLATE_VBOXMAINCLIENTTSTEXE = VBox Main Client Testcase (executable)
6263TEMPLATE_VBOXMAINCLIENTTSTEXE_EXTENDS = VBOXMAINCLIENTEXE
6264TEMPLATE_VBOXMAINCLIENTTSTEXE_INST = $(INST_TESTCASE)
6265ifdef VBOX_WITH_RUNPATH
6266 TEMPLATE_VBOXMAINCLIENTTSTEXE_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' $(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS)
6267else ifdef VBOX_WITH_RELATIVE_RUNPATH
6268 TEMPLATE_VBOXMAINCLIENTTSTEXE_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/..' $(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS)
6269endif
6270if "$(KBUILD_TARGET)" == "win" && defined(VBOX_SIGNING_MODE)
6271 TEMPLATE_VBOXMAINCLIENTTSTEXE_POST_CMDS =
6272endif
6273
6274
6275
6276#
6277# Templates used for building the extension packs.
6278#
6279ifdef VBOX_WITH_EXTPACK
6280 # Base templates (native or portable).
6281 TEMPLATE_VBoxR3ExtPack = For the ring-3 context extension pack modules.
6282 if 1 # Native for now.
6283 TEMPLATE_VBoxR3ExtPack_EXTENDS = VBOXR3DLLNOXCPT
6284 TEMPLATE_VBoxR3ExtPack_DEFS = $(TEMPLATE_VBOXR3DLLNOXCPT_DEFS) VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R3
6285 else
6286 TEMPLATE_VBoxR3ExtPack_EXTENDS = VBoxNoCrtGccLib
6287 TEMPLATE_VBoxR3ExtPack_DEFS = $(TEMPLATE_VBoxNoCrtGccLib_DEFS) VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R3 IPRT_NO_CRT IN_RING3
6288 TEMPLATE_VBoxR3ExtPack_INCS = $(PATH_ROOT)/include/iprt/nocrt $(TEMPLATE_VBOXR3DLLNOXCPT_INCS)
6289 endif
6290 ifneq ($(KBUILD_TARGET),win)
6291 TEMPLATE_VBoxR3ExtPack_CXXFLAGS = $(TEMPLATE_VBOXR3DLLNOXCPT_CXXFLAGS) -fno-rtti
6292 TEMPLATE_VBoxR3ExtPack_PCHFLAGS = $(TEMPLATE_VBOXR3DLLNOXCPT_PCHFLAGS) -fno-rtti
6293 endif
6294 TEMPLATE_VBoxR3ExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
6295 ifeq ($(KBUILD_TARGET),linux)
6296 TEMPLATE_VBoxR3ExtPack_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)', $(TEMPLATE_VBOXR3DLLNOXCPT_LDFLAGS))
6297 else if !defined(VBOX_WITH_RUNPATH) && defined(VBOX_WITH_RELATIVE_RUNPATH)
6298 TEMPLATE_VBoxR3ExtPack_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/../../..' $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)', $(TEMPLATE_VBOXR3DLLNOXCPT_LDFLAGS))
6299 endif
6300 ifdef VBOX_ONLY_EXTPACKS_USE_IMPLIBS
6301 if1of ($(KBUILD_TARGET), win os2)
6302 TEMPLATE_VBoxR3ExtPack_LIBS = \
6303 $(TEMPLATE_LIBS_VBOXR3) \
6304 $(if-expr "$(VBOX_LIB_VMM_LAZY)" == "$(LIB_VMM)", $(PATH_STAGE_LIB)/VMMR3Imp$(VBOX_SUFF_LIB), $(VBOX_LIB_VMM_LAZY)) \
6305 $(PATH_STAGE_LIB)/VBoxRTImp$(VBOX_SUFF_LIB)
6306 else
6307 TEMPLATE_VBoxR3ExtPack_LIBS = \
6308 $(TEMPLATE_LIBS_VBOXR3) \
6309 $(if-expr "$(VBOX_LIB_VMM_LAZY)" == "$(LIB_VMM)", $(PATH_STAGE_LIB)/VMMR3Imp$(VBOX_SUFF_DLL), $(VBOX_LIB_VMM_LAZY)) \
6310 $(PATH_STAGE_LIB)/VBoxRTImp$(VBOX_SUFF_DLL)
6311 endif
6312 else
6313 TEMPLATE_VBoxR3ExtPack_LIBS = \
6314 $(TEMPLATE_LIBS_VBOXR3) \
6315 $(LIB_RUNTIME) \
6316 $(VBOX_LIB_VMM_LAZY)
6317 endif
6318
6319 TEMPLATE_VBoxR3ExtPackApi = For the ring-3 context extension pack modules using the Main API.
6320 TEMPLATE_VBoxR3ExtPackApi_EXTENDS = VBOXMAINDLL
6321 TEMPLATE_VBoxR3ExtPackApi_DEFS = $(TEMPLATE_VBOXMAINDLL_DEFS) VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R3
6322 TEMPLATE_VBoxR3ExtPackApi_INST = $(INST_EXTPACK)YouShallOverrideThis/
6323 ifeq ($(KBUILD_TARGET),linux)
6324 TEMPLATE_VBoxR3ExtPackApi_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)', $(TEMPLATE_VBOXMAINDLL_LDFLAGS))
6325 else if !defined(VBOX_WITH_RUNPATH) && defined(VBOX_WITH_RELATIVE_RUNPATH)
6326 TEMPLATE_VBoxR3ExtPackApi_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/../../..' $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)', $(TEMPLATE_VBOXMAINDLL_LDFLAGS))
6327 endif
6328 ifdef VBOX_ONLY_EXTPACKS_USE_IMPLIBS
6329 if1of ($(KBUILD_TARGET), win os2)
6330 TEMPLATE_VBoxR3ExtPackApi_LIBS = \
6331 $(TEMPLATE_LIBS_VBOXR3) \
6332 $(if-expr "$(VBOX_LIB_VMM_LAZY)" == "$(LIB_VMM)", $(PATH_STAGE_LIB)/VMMR3Imp$(VBOX_SUFF_LIB), $(VBOX_LIB_VMM_LAZY)) \
6333 $(PATH_STAGE_LIB)/VBoxRTImp$(VBOX_SUFF_LIB)
6334 else
6335 TEMPLATE_VBoxR3ExtPackApi_LIBS = \
6336 $(TEMPLATE_LIBS_VBOXR3) \
6337 $(if-expr "$(VBOX_LIB_VMM_LAZY)" == "$(LIB_VMM)", $(PATH_STAGE_LIB)/VMMR3Imp$(VBOX_SUFF_DLL), $(VBOX_LIB_VMM_LAZY)) \
6338 $(PATH_STAGE_LIB)/VBoxRTImp$(VBOX_SUFF_DLL)
6339 endif
6340 else
6341 TEMPLATE_VBoxR3ExtPackApi_LIBS = \
6342 $(TEMPLATE_LIBS_VBOXR3) \
6343 $(LIB_RUNTIME) \
6344 $(VBOX_LIB_VMM_LAZY)
6345 endif
6346
6347 TEMPLATE_VBoxR0ExtPack = For the ring-0 context extension pack modules.
6348 TEMPLATE_VBoxR0ExtPack_EXTENDS = VBoxR0
6349 TEMPLATE_VBoxR0ExtPack_EXTENDS_BY = appending
6350 TEMPLATE_VBoxR0ExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
6351 TEMPLATE_VBoxR0ExtPack_DEFS = VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R0
6352 if1of ($(VBOX_LDR_FMT), pe lx)
6353 TEMPLATE_VBoxR0ExtPack_LIBS = \
6354 $(PATH_STAGE_LIB)/VMMR0Imp$(VBOX_SUFF_LIB) \
6355 $(PATH_STAGE_LIB)/SUPR0$(VBOX_SUFF_LIB)
6356 endif
6357
6358 TEMPLATE_VBoxRcExtPack = For the raw-mode context extension pack modules.
6359 TEMPLATE_VBoxRcExtPack_EXTENDS = VBoxRc
6360 TEMPLATE_VBoxRcExtPack_EXTENDS_BY = appending
6361 TEMPLATE_VBoxRcExtPack_SYSSUFF = .rc
6362 TEMPLATE_VBoxRcExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
6363 TEMPLATE_VBoxRcExtPack_DEFS = VBOX_IN_EXTPACK VBOX_IN_EXTPACK_RC
6364 if1of ($(VBOX_LDR_FMT32), pe lx)
6365 TEMPLATE_VBoxRcExtPack_LIBS = \
6366 $(PATH_STAGE_LIB)/VMMRCBuiltin$(VBOX_SUFF_LIB) \
6367 $(PATH_STAGE_LIB)/VMMRCImp$(VBOX_SUFF_LIB)
6368 endif
6369
6370 TEMPLATE_VBoxInsExtPack = For the install targets of an extension pack.
6371 TEMPLATE_VBoxInsExtPack_MODE = 0644
6372 TEMPLATE_VBoxInsExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
6373
6374 # For each individual extension pack
6375 ifdef VBOX_WITH_EXTPACK_PUEL
6376 TEMPLATE_VBoxR3ExtPackPuel = For the ring-3 context modules in the PUEL extension pack.
6377 TEMPLATE_VBoxR3ExtPackPuel_EXTENDS = VBoxR3ExtPack
6378 TEMPLATE_VBoxR3ExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/
6379 TEMPLATE_VBoxR3ExtPackPuel_DEFS = $(TEMPLATE_VBoxR3ExtPack_DEFS) VBOX_IN_PUEL_EXTPACK
6380
6381 TEMPLATE_VBoxR3ExtPackApiPuel = For the ring-3 context modules in the PUEL extension pack.
6382 TEMPLATE_VBoxR3ExtPackApiPuel_EXTENDS = VBoxR3ExtPackApi
6383 TEMPLATE_VBoxR3ExtPackApiPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/
6384 TEMPLATE_VBoxR3ExtPackApiPuel_DEFS = $(TEMPLATE_VBoxR3ExtPackApi_DEFS) VBOX_IN_PUEL_EXTPACK
6385
6386 TEMPLATE_VBoxR3ExtPackPuelWithOpenSsl = For the ring-3 context modules in the PUEL extension pack using ExtPack OpenSSL.
6387 TEMPLATE_VBoxR3ExtPackPuelWithOpenSsl_EXTENDS = VBoxR3ExtPackPuel
6388 ifdef VBOX_NEED_EXTPACK_OPENSSL
6389 TEMPLATE_VBoxR3ExtPackPuelWithOpenSsl_INCS = \
6390 $(TEMPLATE_VBoxR3ExtPack_INCS) \
6391 $(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)
6392 TEMPLATE_VBoxR3ExtPackPuelWithOpenSsl_LIBS = \
6393 $(PATH_STAGE_LIB)/VBoxExtPack-libssl$(VBOX_SUFF_LIB) \
6394 $(PATH_STAGE_LIB)/VBoxExtPack-libcrypto$(VBOX_SUFF_LIB) \
6395 $(TEMPLATE_VBoxR3ExtPack_LIBS) # Must come after the two libraries or we'll pick up SSL from VBoxRT!
6396 endif
6397
6398 TEMPLATE_VBoxR0ExtPackPuel = For the ring-0 context modules in the PUEL extension pack.
6399 TEMPLATE_VBoxR0ExtPackPuel_EXTENDS = VBoxR0ExtPack
6400 TEMPLATE_VBoxR0ExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/
6401 TEMPLATE_VBoxR0ExtPackPuel_DEFS = $(TEMPLATE_VBoxR0ExtPack_DEFS) VBOX_IN_PUEL_EXTPACK
6402
6403 TEMPLATE_VBoxRcExtPackPuel = For the raw-mode context modules in the PUEL extension pack.
6404 TEMPLATE_VBoxRcExtPackPuel_EXTENDS = VBoxRcExtPack
6405 TEMPLATE_VBoxRcExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/
6406 TEMPLATE_VBoxRcExtPackPuel_DEFS = $(TEMPLATE_VBoxRcExtPack_DEFS) VBOX_IN_PUEL_EXTPACK
6407
6408 TEMPLATE_VBoxInsExtPackPuel = For the install targets of an extension pack.
6409 TEMPLATE_VBoxInsExtPackPuel_EXTENDS = VBoxR0ExtPack
6410 TEMPLATE_VBoxInsExtPackPuel_INST = $(INST_EXTPACK_PUEL)
6411 endif
6412
6413endif # VBOX_WITH_EXTPACK
6414
6415
6416#
6417# Qt
6418# Qt
6419# Qt
6420#
6421ifdef VBOX_WITH_QTGUI
6422
6423 # Guess VBOX_WITH_ORACLE_QT
6424 ifndef VBOX_WITH_ORACLE_QT
6425 ifndef VBOX_OSE
6426 if1of ($(KBUILD_TARGET), darwin solaris win)
6427 VBOX_WITH_ORACLE_QT := 1
6428 endif
6429 endif
6430 endif
6431
6432 #
6433 # Handmade configuration of Qt - very annoying, this needs to
6434 # be cleaned up properly later some time (not important now).
6435 #
6436 ifeq ($(VBOX_PATH_QT),)
6437 ifeq ($(KBUILD_TARGET),darwin)
6438 VBOX_PATH_QT := $(lastword $(sort $(wildcard $(KBUILD_DEVTOOLS_TRG)/qt/v5*)))
6439 ifeq ($(VBOX_PATH_QT),)
6440 ifneq ($(wildcard /Library/Frameworks/QtCore.framework),)
6441 # Using the global installation (for OSE).
6442 VBOX_PATH_QT ?= /usr
6443 VBOX_PATH_QT_FRAMEWORKS ?= /Library/Frameworks
6444 endif
6445 endif
6446 else if1of ($(KBUILD_TARGET), win)
6447 VBOX_PATH_QT ?= $(lastword $(filter %-$(tolower $(VBOX_VCC_TOOL_STEM)),$(sort $(wildcard $(KBUILD_DEVTOOLS_TRG)/qt/v5*))))
6448 else if1of ($(KBUILD_TARGET), linux solaris)
6449 VBOX_PATH_QT ?= $(lastword $(sort $(wildcard $(KBUILD_DEVTOOLS_TRG)/qt/v5*)))
6450 ifneq ($(VBOX_PATH_QT),)
6451 VBOX_WITH_ORACLE_QT = 1
6452 endif
6453 endif
6454 endif
6455 ifeq ($(VBOX_PATH_QT),)
6456 if1of ($(USERNAME), bird)
6457 # gentoo (64-bit)
6458 VBOX_PATH_QT ?= /usr
6459 VBOX_PATH_QT_LIB ?= /usr/lib/qt5
6460 endif
6461 endif
6462 VBOX_PATH_QT ?= /usr
6463 VBOX_PATH_QT_LIB ?= $(VBOX_PATH_QT)/lib
6464
6465 ifdef VBOX_WITH_ORACLE_QT
6466 VBOX_QT_INFIX=VBox
6467 endif
6468
6469 ifeq ($(KBUILD_TARGET), darwin)
6470 VBOX_QT_MOD = \
6471 QtCore QtGui QtWidgets QtPrintSupport QtMacExtras \
6472 $(if $(VBOX_GUI_USE_QGL),QtOpenGL,)
6473 else if1of ($(KBUILD_TARGET), linux freebsd netbsd openbsd solaris win)
6474 VBOX_QT_MOD += \
6475 Qt5Core Qt5Gui Qt5Widgets Qt5PrintSupport \
6476 $(if $(VBOX_GUI_USE_QGL),Qt5OpenGL,)
6477 if1of ($(KBUILD_TARGET), linux freebsd netbsd openbsd solaris)
6478 VBOX_QT_MOD += \
6479 Qt5DBus Qt5XcbQpa Qt5X11Extras
6480 # legacy libraries required to be installed on EL5
6481 VBOX_QT_LEGACY_LIBS = \
6482 $(if $(VBOX_LD_HAS_LIBXCB),,libxcb.so.1 libX11.so.6 libX11-xcb.so.1)
6483 VBOX_QT_PLUGINS = \
6484 plugins/platforms/libqxcb.so \
6485 plugins/xcbglintegrations/libqxcb-glx-integration.so
6486 else ifeq ($(KBUILD_TARGET), win)
6487 VBOX_QT_MOD += \
6488 Qt5WinExtras
6489 endif # win
6490 endif # linux freebsd netbsd openbsd solaris win
6491
6492 VBOX_QT_MOD_NAMES = $(foreach qtmod,$(VBOX_QT_MOD),$(qtmod)$(VBOX_QT_INFIX))
6493
6494 # Hack LD_LIBRARY_PATH for stuff in tools.
6495 ifdef VBOX_WITH_ORACLE_QT
6496 if1of ($(KBUILD_TARGET), linux solaris)
6497 export LD_LIBRARY_PATH := $(VBOX_PATH_QT_LIB):$(LD_LIBRARY_PATH)
6498 endif
6499 endif
6500
6501
6502 #
6503 # Template for building Qt GUI executables.
6504 #
6505 TEMPLATE_VBOXQTGUIEXE = VBox Qt GUI Executable
6506 TEMPLATE_VBOXQTGUIEXE_USES = qt5
6507 TEMPLATE_VBOXQTGUIEXE_QTTOOL = QT5
6508 TEMPLATE_VBOXQTGUIEXE_MOCTOOL = QT5
6509 TEMPLATE_VBOXQTGUIEXE_UICTOOL = QT5
6510 TEMPLATE_VBOXQTGUIEXE_RCCTOOL = QT5
6511 TEMPLATE_VBOXQTGUIEXE_LRCTOOL = QT5
6512 TEMPLATE_VBOXQTGUIEXE_SDKS = QT5
6513 TEMPLATE_VBOXQTGUIEXE_MOCDEFS.darwin += QT_VERSION=0x050602
6514 TEMPLATE_VBOXQTGUIEXE_QT_INFIX = $(VBOX_QT_INFIX)
6515 TEMPLATE_VBOXQTGUIEXE_DEFS = IN_RING3 QT_NO_DEBUG QT_THREAD_SUPPORT QT_SHARED HAVE_CONFIG_H $(ARCH_BITS_DEFS)
6516 TEMPLATE_VBOXQTGUIEXE_RCDEFS = $(TEMPLATE_VBOXR3EXE_RCDEFS)
6517
6518 ifeq ($(KBUILD_TARGET),win)
6519 # Note! No use of VBOX_VCC_CRT_TYPE here yet as it requires a /MDd build of Qt as well.
6520 TEMPLATE_VBOXQTGUIEXE_TOOL = $(VBOX_VCC_TOOL)
6521 TEMPLATE_VBOXQTGUIEXE_DEFS += \
6522 _WIN32_WINNT=0x0500 UNICODE _UNICODE \
6523 QT_DLL _CRT_SECURE_NO_DEPRECATE \
6524 $(QMAKE_PRL_DEFINES)
6525 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS = -nologo -Zm200 -MD -Zi -EHsc -Zc:wchar_t-
6526 # -wd4481: nonstandard extension used: override specifier 'override'
6527 # -wd4625: 'QRubberBand' : copy constructor could not be generated because a base class copy constructor is inaccessible
6528 # -wd4626: 'QRubberBand' : assignment operator could not be generated because a base class assignment operator is inaccessible
6529 # -wd4640: qmetatype.h(2210): warning C4640: 'f' : construction of local static object is not thread-safe [too bad]
6530 # -wd4350: behavior change: 'int QStringList::indexOf(const QRegExp &,int) const' called instead of 'int QStringList::indexOf(QRegExp &,int) const'
6531 # -wd4121: UIActionPool.h(393) : warning C4121: 'UIActionPool::PointerToFunction' : alignment of a member was sensitive to packing
6532 # -wd4718: qmap.h(222) : warning C4718: 'QMapNode<enum DetailsElementType,bool>::destroySubTree' : recursive call has no side effects, deleting
6533 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS += $(VBOX_VCC_WARN_ALL) -wd4481 -wd4625 -wd4626 -wd4640 -wd4350 -wd4371 -wd4121 -wd4718 $(VBOX_VCC_WERR)
6534 if1of ($(VBOX_VCC_TOOL_STEM), VCC120)
6535 # -wd4619: qvectro.h(305 : warning C4619: #pragma warning : there is no warning number '4345'
6536 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS += -wd4619
6537 endif
6538 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.debug = -RTCsu
6539 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.debug = -RTCsu
6540 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.dbgopt = $(NO_SUCH_VARIABLE)
6541 TEMPLATE_VBOXQTGUIEXE_PCHFLAGS = $(TEMPLATE_VBOXQTGUIEXE_CXXFLAGS)
6542 TEMPLATE_VBOXQTGUIEXE_PCHFLAGS.debug = $(TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.debug)
6543 TEMPLATE_VBOXQTGUIEXE_PCHFLAGS.dbgopt = $(TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.dbgopt)
6544 TEMPLATE_VBOXQTGUIEXE_LDFLAGS = -Ignore:4197 \
6545 /NOD /INCREMENTAL:NO /MAPINFO:EXPORTS /LargeAddressAware /DynamicBase /NxCompat /Release /Debug /Opt:Ref /Opt:Icf \
6546 /Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
6547 /STUB:$(PATH_ROOT)/src/VBox/HostDrivers/Support/win/winstub.com
6548 if defined(VBOX_SIGNING_MODE) && defined(VBOX_WITH_HARDENING)
6549 TEMPLATE_VBOXQTGUIEXE_LDFLAGS += -IntegrityCheck
6550 endif
6551 TEMPLATE_VBOXQTGUIEXE_SDKS += $(VBOX_WINPSDK)
6552 TEMPLATE_VBOXQTGUIEXE_LIBS = \
6553 $(VBOX_LIBS_QT) \
6554 $(LIB_RUNTIME) \
6555 $(VBOX_LIB_VMM_LAZY) \
6556 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcprt.lib \
6557 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcrt.lib \
6558 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/oldnames.lib \
6559 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/delayimp.lib
6560 TEMPLATE_VBOXQTGUIEXE_POST_CMDS = $(VBOX_SIGN_IMAGE_CMDS)
6561
6562 else # the gcc guys:
6563 TEMPLATE_VBOXQTGUIEXE_TOOL = $(VBOX_GCC_TOOL)
6564 if $(VBOX_GCC_VERSION_CC) < 30400
6565 TEMPLATE_VBOXQTGUIEXE_DEFS += RT_WITHOUT_PRAGMA_ONCE
6566 endif
6567 TEMPLATE_VBOXQTGUIEXE_DEFS.linux = _REENTRANT
6568 TEMPLATE_VBOXQTGUIEXE_DEFS.solaris = _REENTRANT
6569
6570 ## @todo Use VBOX_GCC_PEDANTIC_CXX?
6571 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS = \
6572 -g $(VBOX_GCC_pipe) $(filter-out -Wno-unused $(VBOX_GCC_Wno-unused-parameter),$(VBOX_GCC_WARN)) -frtti -fno-exceptions \
6573 -Wno-long-long -fshort-wchar -fno-strict-aliasing \
6574 $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_Wno-multistatement-macros) $(VBOX_GCC_Wno-ignored-qualifiers) \
6575 $(VBOX_GCC_Wno-return-type-c-linkage) $(VBOX_GCC_std) $(VBOX_GCC_IPRT_FMT_CHECK)
6576 ifdef VBOX_WITH_NO_GCC_WARNING_POLICY
6577 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS += $(VBOX_GCC_WERR)
6578 endif
6579 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.x86 = -m32
6580 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.amd64 = -m64
6581 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.linux = -pthread
6582 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.debug = $(VBOX_GCC_SANITIZER_FLAGS)
6583 TEMPLATE_VBOXQTGUIEXE_PCHFLAGS = $(TEMPLATE_VBOXQTGUIEXE_CXXFLAGS)
6584 TEMPLATE_VBOXQTGUIEXE_PCHFLAGS.x86 = $(TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.x86)
6585 TEMPLATE_VBOXQTGUIEXE_PCHFLAGS.amd64 = $(TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.amd64)
6586 TEMPLATE_VBOXQTGUIEXE_PCHFLAGS.linux = $(TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.linux)
6587 TEMPLATE_VBOXQTGUIEXE_PCHFLAGS.debug = $(TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.debug)
6588 TEMPLATE_VBOXQTGUIEXE_PCHFLAGS.dbgopt = $(TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.dbgopt)
6589 TEMPLATE_VBOXQTGUIEXE_OBJCFLAGS = -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_C) -fno-exceptions $(VBOX_GCC_IPRT_FMT_CHECK)
6590 TEMPLATE_VBOXQTGUIEXE_OBJCFLAGS.x86 = $(TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.x86)
6591 TEMPLATE_VBOXQTGUIEXE_OBJCFLAGS.amd64 = $(TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.amd64)
6592 TEMPLATE_VBOXQTGUIEXE_OBJCXXFLAGS = \
6593 -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_CXX) \
6594 -frtti -fno-exceptions $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_IPRT_FMT_CHECK)
6595 ifdef VBOX_WITH_NO_GCC_WARNING_POLICY
6596 TEMPLATE_VBOXQTGUIEXE_OBJCXXFLAGS += $(VBOX_GCC_WERR)
6597 endif
6598 TEMPLATE_VBOXQTGUIEXE_OBJCXXFLAGS.x86 = $(TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.x86)
6599 TEMPLATE_VBOXQTGUIEXE_OBJCXXFLAGS.amd64 = $(TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.amd64)
6600 TEMPLATE_VBOXQTGUIEXE_LDFLAGS.x86 = -m32
6601 TEMPLATE_VBOXQTGUIEXE_LDFLAGS.amd64 = -m64
6602 TEMPLATE_VBOXQTGUIEXE_LDFLAGS.debug = $(VBOX_GCC_SANITIZER_FLAGS)
6603 TEMPLATE_VBOXQTGUIEXE_LIBS = \
6604 $(VBOX_LIBS_QT) \
6605 $(LIB_RUNTIME) \
6606 $(if-expr "$(LIB_VMM)" == "$(VBOX_LIB_VMM_LAZY)",$(LIB_REM),) \
6607 $(VBOX_LIB_VMM_LAZY)
6608
6609 ifeq ($(KBUILD_TARGET),linux)
6610 TEMPLATE_VBOXQTGUIEXE_LDFLAGS += -Wl,-z,noexecstack,-z,relro $(VBOX_LD_as_needed)
6611 TEMPLATE_VBOXQTGUIEXE_LIBS += \
6612 $(VBOX_XCURSOR_LIBS) \
6613 Xext \
6614 X11
6615 TEMPLATE_VBOXQTGUIEXE_LIBPATH += \
6616 $(VBOX_LIBPATH_X11)
6617 if defined(VBOX_WITH_ORACLE_QT) && !defined(VBOX_LD_HAS_LIBXCB)
6618 TEMPLATE_VBOXQTGUIEXE_LIBPATH += $(PATH_SDK_QT5_LIB)/legacy
6619 TEMPLATE_VBOXQTGUIEXE_INCS += $(PATH_SDK_QT5_INC)/legacy
6620 endif
6621 else ifeq ($(KBUILD_TARGET),darwin)
6622 TEMPLATE_VBOXQTGUIEXE_DEFS.darwin += $(VBOX_DARWIN_DEF_SDK_DEFS)
6623 TEMPLATE_VBOXQTGUIEXE_CFLAGS.darwin += $(VBOX_DARWIN_DEF_SDK_CFLAGS)
6624 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.darwin += $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
6625 TEMPLATE_VBOXQTGUIEXE_PCHFLAGS.darwin += $(TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.darwin)
6626 TEMPLATE_VBOXQTGUIEXE_OBJCFLAGS.darwin += $(VBOX_DARWIN_DEF_SDK_OBJCFLAGS)
6627 TEMPLATE_VBOXQTGUIEXE_OBJCXXFLAGS.darwin += $(VBOX_DARWIN_DEF_SDK_OBJCXXFLAGS)
6628 TEMPLATE_VBOXQTGUIEXE_LDFLAGS.darwin += $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -bind_at_load
6629 TEMPLATE_VBOXQTGUIEXE_LIBS +=
6630 TEMPLATE_VBOXQTGUIEXE_LIBPATH +=
6631 else
6632 TEMPLATE_VBOXQTGUIEXE_INCS += \
6633 $(VBOX_XCURSOR_INCS)
6634 TEMPLATE_VBOXQTGUIEXE_LIBS += \
6635 $(VBOX_XCURSOR_LIBS) \
6636 Xext \
6637 X11 \
6638 m \
6639 $(LIB_PTHREAD)
6640 TEMPLATE_VBOXQTGUIEXE_LIBPATH += \
6641 $(VBOX_LIBPATH_X11)
6642 ifeq ($(KBUILD_TARGET),freebsd)
6643 TEMPLATE_VBOXQTGUIEXE_INCS += \
6644 /usr/include \
6645 /usr/X11R6/include \
6646 /usr/local/include
6647 TEMPLATE_VBOXQTGUIEXE_LIBPATH += \
6648 /usr/lib \
6649 /usr/X11R6/lib \
6650 /usr/local/lib
6651 endif
6652 ifeq ($(KBUILD_TARGET),solaris)
6653 TEMPLATE_VBOXQTGUIEXE_LDFLAGS.solaris = -Wl,-z,ignore # Same as VBOX_LD_as_needed.
6654 TEMPLATE_VBOXQTGUIEXE_LIBS += \
6655 rt socket nsl
6656 endif
6657 endif
6658 # Assume the Qt shared objects are in the same directory as the executable, on Solaris too.
6659 ifdef VBOX_WITH_RUNPATH
6660 TEMPLATE_VBOXQTGUIEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)'
6661 else ifdef VBOX_WITH_RELATIVE_RUNPATH
6662 TEMPLATE_VBOXQTGUIEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)'
6663 endif
6664
6665 endif
6666
6667 # Add COM/XPCOM stuff
6668 TEMPLATE_VBOXQTGUIEXE_LIBS += \
6669 $(PATH_STAGE_LIB)/VBoxCOM$(if-expr defined(VBOX_WITH_DEBUG_VCC_CRT) && $(KBUILD_TARGET) == win,-GUI,)$(VBOX_SUFF_LIB)
6670 ifdef VBOX_WITH_XPCOM
6671 ## @todo may be worth creating the VBOX_XPCOM SDK def, or just a SDK_VBOXXPCOM.
6672 TEMPLATE_VBOXQTGUIEXE_DEFS += VBOX_WITH_XPCOM
6673 ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
6674 TEMPLATE_VBOXQTGUIEXE_DEFS += VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
6675 endif
6676 TEMPLATE_VBOXQTGUIEXE_INCS += \
6677 $(VBOX_XPCOM_INCS)
6678 TEMPLATE_VBOXQTGUIEXE_LIBS += \
6679 $(LIB_XPCOM)
6680 TEMPLATE_VBOXQTGUIEXE_INTERMEDIATES += \
6681 $(VBOX_PATH_SDK)/bindings/xpcom/include/VirtualBox_XPCOM.h
6682 else # COM
6683 TEMPLATE_VBOXQTGUIEXE_INCS += \
6684 $(VBOX_PATH_SDK)/bindings/mscom/include
6685 TEMPLATE_VBOXQTGUIEXE_INTERMEDIATES += \
6686 $(VBOX_PATH_SDK)/bindings/mscom/include/VirtualBox.h
6687 endif # COM
6688
6689 ifn1of ($(KBUILD_TARGET), darwin os2 win)
6690 TEMPLATE_VBOXQTGUIEXE_DEFS += PIC
6691 TEMPLATE_VBOXQTGUIEXE_CFLAGS += -fPIC
6692 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS += -fPIC
6693 TEMPLATE_VBOXQTGUIEXE_LDFLAGS += -fPIC
6694 endif # not darwin, os2 or win
6695
6696
6697 #
6698 # Template for building Qt GUI components.
6699 #
6700 TEMPLATE_VBOXQTGUI = VBox Qt GUI Components
6701 TEMPLATE_VBOXQTGUI_EXTENDS = VBOXQTGUIEXE
6702 TEMPLATE_VBOXQTGUI_LIBS = $(filter-out $(QTMAIN),$(TEMPLATE_VBOXQTGUIEXE_LIBS))
6703 ifeq ($(KBUILD_TARGET),darwin)
6704 TEMPLATE_VBOXQTGUI_LDFLAGS.darwin += $(filter-out -bind_at_load,$(TEMPLATE_VBOXQTGUIEXE_LDFLAGS.darwin)) \
6705 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
6706 -compatibility_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
6707 endif
6708 ifn1of ($(KBUILD_TARGET), darwin os2 win)
6709 TEMPLATE_VBOXQTGUI_DEFS = PIC $(TEMPLATE_VBOXQTGUIEXE_DEFS)
6710 TEMPLATE_VBOXQTGUI_CFLAGS = -fPIC $(TEMPLATE_VBOXQTGUIEXE_CFLAGS)
6711 TEMPLATE_VBOXQTGUI_CXXFLAGS = -fPIC $(TEMPLATE_VBOXQTGUIEXE_CXXFLAGS)
6712 TEMPLATE_VBOXQTGUI_PCHFLAGS = $(TEMPLATE_VBOXQTGUI_CXXFLAGS)
6713 TEMPLATE_VBOXQTGUI_LDFLAGS = -fPIC $(TEMPLATE_VBOXQTGUIEXE_LDFLAGS)
6714 endif
6715
6716endif # VBOX_WITH_QTGUI
6717
6718
6719#
6720# Template for installing symbol files that we wish to ship.
6721#
6722TEMPLATE_VBoxDbgSyms = Symbol files for VBoxDbg and gurus.
6723TEMPLATE_VBoxDbgSyms_INST = $(INST_VBOXDBG_SYMS)
6724
6725
6726#
6727# Template for building build bldprogs.
6728# HACK ALERT! The BLD_TRG_* is a hack to allow building libraries as well.
6729#
6730TEMPLATE_VBoxBldProg = VBox Build Program
6731TEMPLATE_VBoxBldProg_BLD_TRG := $(KBUILD_HOST)
6732TEMPLATE_VBoxBldProg_BLD_TRG_ARCH := $(KBUILD_HOST_ARCH)
6733TEMPLATE_VBoxBldProg_BLD_TRG_CPU := $(KBUILD_HOST_CPU)
6734TEMPLATE_VBoxBldProg_DEFS := IN_RING3 LOG_DISABLED IN_BLD_PROG
6735TEMPLATE_VBoxBldProg_DEFS.win := _CRT_SECURE_NO_DEPRECATE
6736ifeq ($(KBUILD_TARGET),$(KBUILD_HOST))
6737 TEMPLATE_VBoxBldProg_ASTOOL := $(VBOX_ASTOOL)
6738 TEMPLATE_VBoxBldProg_ASFLAGS.x86 := $(VBOX_ASFLAGS32)
6739 TEMPLATE_VBoxBldProg_ASFLAGS.amd64 := $(VBOX_ASFLAGS64)
6740else
6741 TEMPLATE_VBoxBldProg_ASTOOL := YASM
6742 TEMPLATE_VBoxBldProg_ASFLAGS := -D__YASM__ -Worphan-labels $(VBOX_YASM_Wno-segreg-in-64bit)
6743 if1of ($(KBUILD_HOST),win)
6744 TEMPLATE_VBoxBldProg_ASFLAGS += -g cv8 -DASM_FORMAT_ELF
6745 TEMPLATE_VBoxBldProg_ASFLAGS.x86 := -f win32
6746 TEMPLATE_VBoxBldProg_ASFLAGS.amd64 := -f win64
6747 else if1of ($(KBUILD_HOST),darwin)
6748 TEMPLATE_VBoxBldProg_ASFLAGS += -DASM_FORMAT_MACHO
6749 TEMPLATE_VBoxBldProg_ASFLAGS.x86 := -f macho32
6750 TEMPLATE_VBoxBldProg_ASFLAGS.amd64 := -f macho64
6751 else
6752 TEMPLATE_VBoxBldProg_ASFLAGS += -g dwarf2 -DASM_FORMAT_ELF
6753 TEMPLATE_VBoxBldProg_ASFLAGS.x86 := -f elf32
6754 TEMPLATE_VBoxBldProg_ASFLAGS.amd64 := -f elf64
6755 endif
6756endif
6757ifeq ($(KBUILD_HOST),win)
6758 TEMPLATE_VBoxBldProg_TOOL := $(VBOX_VCC_TOOL_STEM)$(toupper $(KBUILD_HOST_ARCH))
6759 TEMPLATE_VBoxBldProg_SDKS := ReorderCompilerIncs $(VBOX_WINPSDK)
6760 TEMPLATE_VBoxBldProg_CXXFLAGS := -Zi -Zl -GR- -EHsc -GF -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP) -MT$(VBOX_VCC_CRT_TYPE) \
6761 $(VBOX_VCC_WARN_ALL) $(VBOX_VCC_WERR)
6762 TEMPLATE_VBoxBldProg_CXXFLAGS.debug := -RTCsu
6763 TEMPLATE_VBoxBldProg_CXXFLAGS.dbgopt = $(NO_SUCH_VARIABLE)
6764 TEMPLATE_VBoxBldProg_CXXFLAGS.profile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.release)
6765 TEMPLATE_VBoxBldProg_CXXFLAGS.kprofile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.release)
6766 TEMPLATE_VBoxBldProg_CFLAGS = $(TEMPLATE_VBoxBldProg_CXXFLAGS)
6767 TEMPLATE_VBoxBldProg_CFLAGS.debug = $(TEMPLATE_VBoxBldProg_CXXFLAGS.debug)
6768 TEMPLATE_VBoxBldProg_CFLAGS.dbgopt = $(TEMPLATE_VBoxBldProg_CXXFLAGS.dbgopt)
6769 TEMPLATE_VBoxBldProg_CFLAGS.release = $(TEMPLATE_VBoxBldProg_CXXFLAGS.release)
6770 TEMPLATE_VBoxBldProg_CFLAGS.profile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.profile)
6771 TEMPLATE_VBoxBldProg_CFLAGS.kprofile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.kprofile)
6772 TEMPLATE_VBoxBldProg_PCHFLAGS = $(TEMPLATE_VBoxBldProg_CXXFLAGS)
6773 TEMPLATE_VBoxBldProg_PCHFLAGS.debug = $(TEMPLATE_VBoxBldProg_CXXFLAGS.debug)
6774 TEMPLATE_VBoxBldProg_PCHFLAGS.dbgopt = $(TEMPLATE_VBoxBldProg_CXXFLAGS.dbgopt)
6775 TEMPLATE_VBoxBldProg_PCHFLAGS.release = $(TEMPLATE_VBoxBldProg_CXXFLAGS.release)
6776 TEMPLATE_VBoxBldProg_PCHFLAGS.profile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.profile)
6777 TEMPLATE_VBoxBldProg_PCHFLAGS.kprofile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.kprofile)
6778 TEMPLATE_VBoxBldProg_LDFLAGS = -Ignore:4197 \
6779 /NOD /INCREMENTAL:NO /MAPINFO:EXPORTS /LargeAddressAware /DynamicBase /NxCompat /Release /Debug /Opt:Ref /Opt:Icf \
6780 /Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
6781 /DISALLOWLIB:libc$(VBOX_VCC_CRT_TYPE_N).lib \
6782 /DISALLOWLIB:libcmt$(VBOX_VCC_CRT_TYPE_N).lib \
6783 /DISALLOWLIB:msvcrt.lib \
6784 /DISALLOWLIB:msvcrtd.lib \
6785 /DISALLOWLIB:msvcprt.lib \
6786 /DISALLOWLIB:msvcprtd.lib
6787 TEMPLATE_VBoxBldProg_LIBS = \
6788 $(PATH_TOOL_$(TEMPLATE_VBoxBldProg_TOOL)_LIB)/oldnames.lib \
6789 $(PATH_TOOL_$(TEMPLATE_VBoxBldProg_TOOL)_LIB)/libcmt$(VBOX_VCC_CRT_TYPE).lib \
6790 $(PATH_TOOL_$(TEMPLATE_VBoxBldProg_TOOL)_LIB)/libcpmt$(VBOX_VCC_CRT_TYPE).lib
6791
6792else
6793# (gcc of some kind )
6794TEMPLATE_VBoxBldProg_TOOL = GXX3
6795 if $(VBOX_GCC_VERSION_CC) < 30400
6796TEMPLATE_VBoxBldProg_DEFS += RT_WITHOUT_PRAGMA_ONCE
6797 endif
6798TEMPLATE_VBoxBldProg_CFLAGS = -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC_Wno-variadic-macros)
6799 ifdef VBOX_WITH_NO_GCC_WARNING_POLICY
6800 TEMPLATE_VBoxBldProg_CFLAGS += $(VBOX_GCC_WERR)
6801 endif
6802TEMPLATE_VBoxBldProg_CFLAGS.x86 = -m32
6803TEMPLATE_VBoxBldProg_CFLAGS.sparc32 = -m32
6804TEMPLATE_VBoxBldProg_CFLAGS.amd64 = -m64
6805TEMPLATE_VBoxBldProg_CFLAGS.sparc64 = -m64
6806TEMPLATE_VBoxBldProg_CFLAGS.release = -O2 -fno-omit-frame-pointer -fno-strict-aliasing
6807TEMPLATE_VBoxBldProg_CFLAGS.profile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.profile)
6808TEMPLATE_VBoxBldProg_CFLAGS.kprofile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.kprofile)
6809TEMPLATE_VBoxBldProg_CXXFLAGS = -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC_Wno-variadic-macros)
6810 ifdef VBOX_WITH_NO_GCC_WARNING_POLICY
6811 TEMPLATE_VBoxBldProg_CXXFLAGS += $(VBOX_GCC_WERR)
6812 endif
6813TEMPLATE_VBoxBldProg_CXXFLAGS.x86 = -m32
6814TEMPLATE_VBoxBldProg_CXXFLAGS.sparc32 = -m32
6815TEMPLATE_VBoxBldProg_CXXFLAGS.amd64 = -m64
6816TEMPLATE_VBoxBldProg_CXXFLAGS.sparc64 = -m64
6817TEMPLATE_VBoxBldProg_CXXFLAGS.release = -O2 -fno-omit-frame-pointer -fno-strict-aliasing
6818TEMPLATE_VBoxBldProg_CXXFLAGS.profile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.release)
6819TEMPLATE_VBoxBldProg_CXXFLAGS.kprofile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.release)
6820TEMPLATE_VBoxBldProg_OBJCFLAGS = $(TEMPLATE_VBoxBldProg_CFLAGS)
6821TEMPLATE_VBoxBldProg_OBJCFLAGS.x86 = $(TEMPLATE_VBoxBldProg_CFLAGS.x86)
6822TEMPLATE_VBoxBldProg_OBJCFLAGS.amd64 = $(TEMPLATE_VBoxBldProg_CFLAGS.amd64)
6823TEMPLATE_VBoxBldProg_OBJCFLAGS.release = $(TEMPLATE_VBoxBldProg_CFLAGS.release)
6824TEMPLATE_VBoxBldProg_OBJCFLAGS.profile = $(TEMPLATE_VBoxBldProg_CFLAGS.profile)
6825TEMPLATE_VBoxBldProg_OBJCFLAGS.kprofile = $(TEMPLATE_VBoxBldProg_CFLAGS.kprofile)
6826TEMPLATE_VBoxBldProg_OBJCXXFLAGS = $(TEMPLATE_VBoxBldProg_CXXFLAGS)
6827TEMPLATE_VBoxBldProg_OBJCXXFLAGS.x86 = $(TEMPLATE_VBoxBldProg_CXXFLAGS.x86)
6828TEMPLATE_VBoxBldProg_OBJCXXFLAGS.amd64 = $(TEMPLATE_VBoxBldProg_CXXFLAGS.amd64)
6829TEMPLATE_VBoxBldProg_OBJCXXFLAGS.release = $(TEMPLATE_VBoxBldProg_CXXFLAGS.release)
6830TEMPLATE_VBoxBldProg_OBJCXXFLAGS.profile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.profile)
6831TEMPLATE_VBoxBldProg_OBJCXXFLAGS.kprofile= $(TEMPLATE_VBoxBldProg_CXXFLAGS.kprofile)
6832TEMPLATE_VBoxBldProg_PCHFLAGS = $(TEMPLATE_VBoxBldProg_CXXFLAGS)
6833TEMPLATE_VBoxBldProg_PCHFLAGS.x86 = $(TEMPLATE_VBoxBldProg_CXXFLAGS.x86)
6834TEMPLATE_VBoxBldProg_PCHFLAGS.amd64 = $(TEMPLATE_VBoxBldProg_CXXFLAGS.amd64)
6835TEMPLATE_VBoxBldProg_PCHFLAGS.release = $(TEMPLATE_VBoxBldProg_CXXFLAGS.release)
6836TEMPLATE_VBoxBldProg_PCHFLAGS.profile = $(TEMPLATE_VBoxBldProg_CXXFLAGS.profile)
6837TEMPLATE_VBoxBldProg_PCHFLAGS.kprofile= $(TEMPLATE_VBoxBldProg_CXXFLAGS.kprofile)
6838TEMPLATE_VBoxBldProg_LDFLAGS.x86 = -m32
6839TEMPLATE_VBoxBldProg_LDFLAGS.sparc32 = -m32
6840TEMPLATE_VBoxBldProg_LDFLAGS.amd64 = -m64
6841TEMPLATE_VBoxBldProg_LDFLAGS.sparc64 = -m64
6842 ifeq ($(KBUILD_HOST),linux)
6843TEMPLATE_VBoxBldProg_LIBS = pthread m rt dl
6844 else ifeq ($(KBUILD_HOST),os2)
6845TEMPLATE_VBoxBldProg_TOOL = GXX3OMF
6846TEMPLATE_VBoxBldProg_LIBS = socket iconv
6847 else ifeq ($(KBUILD_HOST),darwin)
6848TEMPLATE_VBoxBldProg_TOOL = $(VBOX_GCC_TOOL)
6849 if "$(VBOX_DEF_MACOSX_VERSION_MIN)" == "10.7" || "$(VBOX_DARWIN_HOST_VERSION_MAJOR)" == "7"
6850TEMPLATE_VBoxBldProg_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_DEFS)
6851TEMPLATE_VBoxBldProg_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_CFLAGS) -fno-common
6852TEMPLATE_VBoxBldProg_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_CXXFLAGS)
6853TEMPLATE_VBoxBldProg_PCHFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_CXXFLAGS)
6854TEMPLATE_VBoxBldProg_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_OBJCFLAGS) $(VBOX_GCC_PEDANTIC_C)
6855TEMPLATE_VBoxBldProg_OBJCXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_OBJCXXFLAGS) $(VBOX_GCC_PEDANTIC_CXX)
6856TEMPLATE_VBoxBldProg_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_7_LDFLAGS)
6857 else if "$(VBOX_DEF_MACOSX_VERSION_MIN)" == "10.6" || "$(VBOX_DARWIN_HOST_VERSION_MAJOR)" == "6"
6858TEMPLATE_VBoxBldProg_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_10_6_DEFS)
6859TEMPLATE_VBoxBldProg_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_6_CFLAGS) -fno-common
6860TEMPLATE_VBoxBldProg_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_6_CXXFLAGS)
6861TEMPLATE_VBoxBldProg_PCHFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_6_CXXFLAGS)
6862TEMPLATE_VBoxBldProg_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_6_OBJCFLAGS) $(VBOX_GCC_PEDANTIC_C)
6863TEMPLATE_VBoxBldProg_OBJCXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_6_OBJCXXFLAGS) $(VBOX_GCC_PEDANTIC_CXX)
6864TEMPLATE_VBoxBldProg_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_6_LDFLAGS)
6865 else if "$(VBOX_DEF_MACOSX_VERSION_MIN)" == "10.5" || "$(VBOX_DARWIN_HOST_VERSION_MAJOR)" == "5" || defined(VBOX_MACOS_10_5_WORKAROUND)
6866TEMPLATE_VBoxBldProg_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_DEFS)
6867TEMPLATE_VBoxBldProg_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_CFLAGS) -fno-common
6868TEMPLATE_VBoxBldProg_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_CXXFLAGS)
6869TEMPLATE_VBoxBldProg_PCHFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_CXXFLAGS)
6870TEMPLATE_VBoxBldProg_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_OBJCFLAGS) $(VBOX_GCC_PEDANTIC_C)
6871TEMPLATE_VBoxBldProg_OBJCXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_OBJCXXFLAGS) $(VBOX_GCC_PEDANTIC_CXX)
6872TEMPLATE_VBoxBldProg_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_LDFLAGS)
6873 else
6874TEMPLATE_VBoxBldProg_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_DEFS)
6875TEMPLATE_VBoxBldProg_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -fno-common
6876TEMPLATE_VBoxBldProg_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
6877TEMPLATE_VBoxBldProg_PCHFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
6878TEMPLATE_VBoxBldProg_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_OBJCFLAGS) $(VBOX_GCC_PEDANTIC_C)
6879TEMPLATE_VBoxBldProg_OBJCXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_OBJCXXFLAGS) $(VBOX_GCC_PEDANTIC_CXX)
6880TEMPLATE_VBoxBldProg_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_LDFLAGS)
6881 endif
6882TEMPLATE_VBoxBldProg_LIBS =
6883 else ifeq ($(KBUILD_HOST),haiku)
6884TEMPLATE_VBoxBldProg_TOOL = GXX3
6885TEMPLATE_VBoxBldProg_LIBS = network iconv
6886TEMPLATE_VBoxBldProg_LIBPATH += \
6887 /boot/common/lib
6888 else if1of ($(KBUILD_HOST), freebsd openbsd)
6889TEMPLATE_VBoxBldProg_TOOL = GXX3
6890TEMPLATE_VBoxBldProg_LIBS = pthread
6891TEMPLATE_VBoxBldProg_INCS += \
6892 /usr/include \
6893 /usr/X11R6/include \
6894 /usr/local/include
6895TEMPLATE_VBoxBldProg_LIBPATH += \
6896 /usr/lib \
6897 /usr/X11R6/lib \
6898 /usr/local/lib
6899 else ifeq ($(KBUILD_HOST),netbsd)
6900TEMPLATE_VBoxBldProg_TOOL = GXX3
6901TEMPLATE_VBoxBldProg_LIBS = pthread
6902TEMPLATE_VBoxBldProg_INCS += \
6903 /usr/include \
6904 /usr/X11R7/include
6905TEMPLATE_VBoxBldProg_LIBPATH += \
6906 /usr/lib \
6907 /usr/X11R7/lib
6908 else ifeq ($(KBUILD_HOST),solaris)
6909TEMPLATE_VBoxBldProg_TOOL = GXX3PLAIN
6910TEMPLATE_VBoxBldProg_LIBS = rt
6911 else
6912$(warning Warning: VBOX Build: Target $(KBUILD_HOST) is not officially supported!)
6913 endif
6914
6915endif # !win
6916
6917
6918#
6919# Advanced build programs using IPRT and stuff.
6920#
6921TEMPLATE_VBoxAdvBldProg = Advanced VBox Build Program
6922TEMPLATE_VBoxAdvBldProg_EXTENDS = VBoxBldProg
6923TEMPLATE_VBoxAdvBldProg_SDKS = $(TEMPLATE_VBoxBldProg_SDKS)
6924TEMPLATE_VBoxAdvBldProg_SDKS.win= $(TEMPLATE_VBoxBldProg_SDKS.win) VBOX_NTDLL
6925TEMPLATE_VBoxAdvBldProg_DEFS = $(TEMPLATE_VBoxBldProg_DEFS) IN_RT_R3 IN_ADV_BLD_PROG
6926ifeq ($(KBUILD_HOST),win)
6927 TEMPLATE_VBoxAdvBldProg_CFLAGS = $(TEMPLATE_VBoxBldProg_CFLAGS) $(VBOX_VCC_WERR)
6928 TEMPLATE_VBoxAdvBldProg_CXXFLAGS = $(TEMPLATE_VBoxBldProg_CXXFLAGS) $(VBOX_VCC_WERR)
6929 TEMPLATE_VBoxAdvBldProg_PCHFLAGS = $(TEMPLATE_VBoxAdvBldProg_CXXFLAGS)
6930endif
6931TEMPLATE_VBoxAdvBldProg_LIBS = \
6932 $(PATH_STAGE_LIB)/RuntimeBldProg$(VBOX_HOSTSUFF_LIB) \
6933 $(TEMPLATE_VBoxBldProg_LIBS)
6934TEMPLATE_VBoxAdvBldProg_LIBS.darwin = \
6935 $(TEMPLATE_VBoxAdvBldProg_LIBS) \
6936 iconv \
6937 $(TEMPLATE_VBoxBldProg_LIBS.darwin)
6938TEMPLATE_VBoxAdvBldProg_LIBS.freebsd = \
6939 $(TEMPLATE_VBoxAdvBldProg_LIBS) \
6940 iconv \
6941 rt \
6942 $(TEMPLATE_VBoxBldProg_LIBS.freebsd)
6943TEMPLATE_VBoxAdvBldProg_LIBS.linux = \
6944 $(TEMPLATE_VBoxAdvBldProg_LIBS) \
6945 crypt \
6946 $(TEMPLATE_VBoxBldProg_LIBS.linux)
6947TEMPLATE_VBoxAdvBldProg_LIBS.solaris = \
6948 $(TEMPLATE_VBoxAdvBldProg_LIBS) \
6949 contract \
6950 kstat \
6951 rt \
6952 socket \
6953 nsl \
6954 $(TEMPLATE_VBoxBldProg_LIBS.solaris)
6955
6956
6957#
6958# Windows rc workaround for crosscompiling.
6959# (Some (old) Wine versions fails loading msvcrt.dll from the VCC bin directory.)
6960#
6961ifneq ($(KBUILD_HOST),win)
6962 TOOL_VCC80X86_RC := $(EXEC_X86_WIN32) $(KBUILD_DEVTOOLS)/win.x86/bin/rc.exe
6963 TOOL_VCC80AMD64_RC := $(EXEC_X86_WIN32) $(KBUILD_DEVTOOLS)/win.x86/bin/rc.exe
6964 TOOL_VCC70_RC := $(EXEC_X86_WIN32) $(KBUILD_DEVTOOLS)/win.x86/bin/rc.exe
6965 WIN32_MC = $(EXEC_X86_WIN32) $(KBUILD_DEVTOOLS)/win.x86/bin/mc.exe
6966else
6967 WIN32_MC = $(EXEC_X86_WIN32) $(firstword $(wildcard \
6968 $(PATH_SDK_$(VBOX_WINPSDK)_BIN)/MC.Exe\
6969 $(PATH_SDK_WINPSDK_BIN)/MC.Exe\
6970 $(PATH_SDK_WINPSDK)/Bin/MC.Exe\
6971 $(PATH_SDK_WIN32SDK_BIN)/MC.Exe\
6972 $(PATH_SDK_WIN64SDK_BIN)/MC.Exe\
6973 $(KBUILD_DEVTOOLS)/win.x86/bin/mc.exe\
6974 ) Sorry_Cannot_find_mc_in_the_PSDK)
6975endif
6976
6977
6978#
6979# Template for building R3 programs for the guest additions.
6980#
6981TEMPLATE_VBOXGUESTR3EXE = VBox Guest Program
6982ifeq ($(KBUILD_TARGET),win)
6983 TEMPLATE_VBOXGUESTR3EXE_EXTENDS = VBOXR3EXE
6984 TEMPLATE_VBOXGUESTR3EXE_SDKS = ReorderCompilerIncs $(VBOX_WINPSDK_GST) VBOX_NTDLL
6985 TEMPLATE_VBOXGUESTR3EXE_CFLAGS = $(filter-out -MD$(VBOX_VCC_CRT_TYPE), $(TEMPLATE_VBOXR3EXE_CFLAGS)) -MT$(VBOX_VCC_CRT_TYPE)
6986 TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS = $(filter-out -MD$(VBOX_VCC_CRT_TYPE), $(TEMPLATE_VBOXR3EXE_CFLAGS)) -MT$(VBOX_VCC_CRT_TYPE)
6987 TEMPLATE_VBOXGUESTR3EXE_LDFLAGS = $(filter-out /DISALLOWLIB:libcmt$(VBOX_VCC_CRT_TYPE).lib /DISALLOWLIB:libcpmt$(VBOX_VCC_CRT_TYPE).lib, $(TEMPLATE_VBOXR3EXE_LDFLAGS)) \
6988 /DISALLOWLIB:msvcrt$(VBOX_VCC_CRT_TYPE).lib \
6989 /DISALLOWLIB:msvcprt$(VBOX_VCC_CRT_TYPE).lib
6990 TEMPLATE_VBOXGUESTR3EXE_LIBS.x86 = \
6991 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL.win.x86)_LIB)/oldnames.lib \
6992 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL.win.x86)_LIB)/libcmt$(VBOX_VCC_CRT_TYPE).lib \
6993 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL.win.x86)_LIB)/libcpmt$(VBOX_VCC_CRT_TYPE).lib
6994 TEMPLATE_VBOXGUESTR3EXE_LIBS.amd64 = \
6995 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL.win.amd64)_LIB)/oldnames.lib \
6996 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL.win.amd64)_LIB)/libcmt$(VBOX_VCC_CRT_TYPE).lib \
6997 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL.win.amd64)_LIB)/libcpmt$(VBOX_VCC_CRT_TYPE).lib
6998 # Hack for running on NT3x, NT4, W2K and XP w/o SP: Change OS and subsystem version in the image.
6999 # The .bss section trick is for NT 3.1 which doesn't support merging initialized and uninitialized
7000 # section because it doesn't recognize Misc.VirtualSize. VBOX_PE_SET_VERSION will unset the !K flag.
7001 # HACK ALERT! Double expansion of $$(NLTAB).
7002 TEMPLATE_VBOXGUESTR3EXE_POST_CMDS.win.x86 = $(if $(eq $(tool_do),LINK_LIBRARY),,$(VBOX_PE_SET_VERSION) $(out)$$(NLTAB)$(TEMPLATE_VBOXR3EXE_POST_CMDS))
7003 TEMPLATE_VBOXGUESTR3EXE_LNK_DEPS.win.x86 = $(if $(eq $(tool_do),LINK_LIBRARY),,$(VBOX_PE_SET_VERSION))
7004 TEMPLATE_VBOXGUESTR3EXE_LDFLAGS.win.x86 = -Section:.bss,RW!K $(TEMPLATE_VBOXR3EXE_LDFLAGS.win.x86)
7005
7006 if defined(VBOX_WITH_MORE_NT4_COMPAT_BINARIES) && "$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)" == "win.x86"
7007 TEMPLATE_VBOXGUESTR3EXE_LIBS.win.x86 = $(NO_SUCH_VARIABLE)# Ditch RuntimeR3VccTricks2
7008 endif
7009else # the gcc guys
7010 TEMPLATE_VBOXGUESTR3EXE_EXTENDS = VBOXR3EXE
7011 TEMPLATE_VBOXGUESTR3EXE_TOOL := $(subst GXX,GCC,$(TEMPLATE_VBOXR3EXE_TOOL))
7012 TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -fno-exceptions
7013 # Do not inherit sanitizer flags from VBOXR3EXE in guest executables. Deal with them separately.
7014 TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS.debug = $(NO_SUCH_VARIABLE)
7015 TEMPLATE_VBOXGUESTR3EXE_CFLAGS.debug = $(NO_SUCH_VARIABLE)
7016 TEMPLATE_VBOXGUESTR3EXE_LDFLAGS.linux = $(filter-out $(VBOX_GCC_ORIGIN_OPT),$(TEMPLATE_VBOXR3EXE_LDFLAGS.linux))
7017 TEMPLATE_VBOXGUESTR3EXE_LDFLAGS.debug = $(NO_SUCH_VARIABLE)
7018 TEMPLATE_VBOXGUESTR3EXE_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)%,$(TEMPLATE_VBOXR3EXE_LDFLAGS))
7019endif
7020TEMPLATE_VBOXGUESTR3EXE_INST = $(INST_ADDITIONS)
7021TEMPLATE_VBOXGUESTR3EXE_DEFS := $(filter-out $(ARCH_BITS_DEFS), $(TEMPLATE_VBOXR3EXE_DEFS)) IN_GUEST IN_GUEST_R3 IN_RT_R3 $(VBOX_GC_ARCH_BITS_DEFS)
7022TEMPLATE_VBOXGUESTR3EXE_DEFS.linux := $(TEMPLATE_VBOXR3EXE_DEFS.linux) LOG_USE_C99 RT_WITHOUT_EXEC_ALLOC
7023ifeq ($(KBUILD_TARGET),linux) # As few libs as possible on linux.
7024 TEMPLATE_VBOXGUESTR3EXE_LIBS = pthread rt m dl
7025else if1of ($(KBUILD_TARGET), darwin freebsd openbsd)
7026 TEMPLATE_VBOXGUESTR3EXE_LIBS = $(TEMPLATE_VBOXR3EXE_LIBS) iconv
7027else ifeq ($(KBUILD_TARGET), solaris)
7028 TEMPLATE_VBOXGUESTR3EXE_LIBS = $(TEMPLATE_VBOXR3EXE_LIBS) nsl
7029endif
7030
7031# Use older versions of APIs which were improved in versions of glibc later
7032# than what we are targetting, and do not use the stack protector, which
7033# needs glibc 2.4 or later.
7034TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS.linux = \
7035 -include $(PATH_ROOT)/include/iprt/linux/symvers.h \
7036 $(VBOX_GCC_fno-stack-protector)
7037TEMPLATE_VBOXGUESTR3EXE_CFLAGS.linux = $(TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS.linux)
7038# The GNU_HASH ELF tag is not supported by older systems.
7039TEMPLATE_VBOXGUESTR3EXE_LDFLAGS.linux += $(VBOX_LD_hash_style_sysv)
7040
7041#
7042# Template for building normal R3 programs for the guest additions.
7043#
7044TEMPLATE_NewVBoxGuestR3Exe = VBox Guest Program w/ IPRT and VBGL.
7045TEMPLATE_NewVBoxGuestR3Exe_EXTENDS = VBOXGUESTR3EXE
7046TEMPLATE_NewVBoxGuestR3Exe_LIBS = \
7047 $(VBOX_LIB_IPRT_GUEST_R3) \
7048 $(VBOX_LIB_VBGL_R3) \
7049 $(VBOX_LIB_IPRT_GUEST_R3) \
7050 $(TEMPLATE_VBOXGUESTR3EXE_LIBS)
7051ifeq ($(KBUILD_TARGET),linux)
7052TEMPLATE_NewVBoxGuestR3Exe_LIBS += crypt
7053endif
7054ifeq ($(KBUILD_TARGET),solaris)
7055TEMPLATE_NewVBoxGuestR3Exe_LIBS += contract
7056endif
7057
7058#
7059# Template for building normal R3 programs for the guest additions, strict.
7060#
7061TEMPLATE_VBoxGuestR3Exe = VBox Guest Program w/ IPRT and VBGL.
7062TEMPLATE_VBoxGuestR3Exe_EXTENDS = NewVBoxGuestR3Exe
7063TEMPLATE_VBoxGuestR3Exe_EXTENDS_BY = appending
7064ifeq ($(KBUILD_TARGET),win)
7065 TEMPLATE_VBoxGuestR3Exe_CFLAGS += $(VBOX_VCC_WERR)
7066 TEMPLATE_VBoxGuestR3Exe_CXXFLAGS += $(VBOX_VCC_WERR)
7067 if1of ($(VBOX_VCC_TOOL_STEM), VCC120)
7068 # VBoxDrvInst.cpp(520) : warning C4313: 'wprintf' : '%d' in format string conflicts with argument 1 of type 'const TCHAR *' [false positive - buggy compiler?]
7069 TEMPLATE_VBoxGuestR3Exe_CXXFLAGS += -wd4313
7070 endif
7071 TEMPLATE_VBoxGuestR3Exe_LDFLAGS += $(VBOX_VCC_LD_WERR)
7072else
7073 TEMPLATE_VBoxGuestR3Exe_CFLAGS += $(VBOX_GCC_WERR)
7074 TEMPLATE_VBoxGuestR3Exe_CXXFLAGS += $(VBOX_GCC_WERR)
7075endif
7076
7077#
7078# Template for building R3 (dynamic) libraries for the guest additions.
7079#
7080TEMPLATE_VBOXGUESTR3DLL = VBox Guest User Dynamic Libraries
7081TEMPLATE_VBOXGUESTR3DLL_EXTENDS = VBOXGUESTR3EXE
7082## @todo add a INSTFUN that separates dlls and libs.
7083ifn1of ($(KBUILD_TARGET), darwin os2 win)
7084 TEMPLATE_VBOXGUESTR3DLL_DEFS = $(TEMPLATE_VBOXGUESTR3EXE_DEFS) PIC
7085 TEMPLATE_VBOXGUESTR3DLL_CFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_CFLAGS) -fPIC
7086 TEMPLATE_VBOXGUESTR3DLL_CXXFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS) -fPIC -fno-exceptions
7087 TEMPLATE_VBOXGUESTR3DLL_LDFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_LDFLAGS) -fPIC
7088endif
7089
7090#
7091# Template for building normal R3 (dynamic) libraries for the guest additions, allows warnings.
7092#
7093## @todo rename to VBoxGuestR3DllWarn
7094TEMPLATE_NewVBoxGuestR3Dll = VBox Guest User Dynamic Libraries w/ IPRT and VBGL.
7095TEMPLATE_NewVBoxGuestR3Dll_EXTENDS = VBOXGUESTR3DLL
7096TEMPLATE_NewVBoxGuestR3Dll_LIBS = \
7097 $(VBOX_LIB_IPRT_GUEST_R3_SHARED) \
7098 $(VBOX_LIB_VBGL_R3_SHARED) \
7099 $(VBOX_LIB_IPRT_GUEST_R3_SHARED) \
7100 $(TEMPLATE_VBOXGUESTR3DLL_LIBS)
7101
7102#
7103# Template for building normal R3 (dynamic) libraries for the guest additions, strict.
7104#
7105TEMPLATE_VBoxGuestR3Dll = VBox Guest User Dynamic Libraries w/ IPRT and VBGL.
7106TEMPLATE_VBoxGuestR3Dll_EXTENDS = NewVBoxGuestR3Dll
7107TEMPLATE_VBoxGuestR3Dll_EXTENDS_BY = appending
7108ifeq ($(KBUILD_TARGET),win)
7109 TEMPLATE_VBoxGuestR3Dll_CFLAGS += $(VBOX_VCC_WERR)
7110 TEMPLATE_VBoxGuestR3Dll_CXXFLAGS += $(VBOX_VCC_WERR)
7111 TEMPLATE_VBoxGuestR3Dll_LDFLAGS += $(VBOX_VCC_LD_WERR)
7112else
7113 TEMPLATE_VBoxGuestR3Dll_CFLAGS += $(VBOX_GCC_WERR)
7114 TEMPLATE_VBoxGuestR3Dll_CXXFLAGS += $(VBOX_GCC_WERR)
7115endif
7116
7117#
7118# Variant of VBoxGuestR3Dll that requires Windows 2000 or later for x86, and W2K3 for AMD64.
7119#
7120TEMPLATE_VBoxGuestR3DllMinW2K = VBox Guest User Dynamic Libraries w/ IPRT and VBGL.
7121TEMPLATE_VBoxGuestR3DllMinW2K_EXTENDS = VBoxGuestR3Dll
7122ifeq ($(KBUILD_TARGET),win)
7123 TEMPLATE_VBoxGuestR3DllMinW2K_LDFLAGS.win.x86 = $(filter-out -Section:.bss$(COMMA)RW!K,$(TEMPLATE_VBoxGuestR3Dll_LDFLAGS.win.x86))
7124 TEMPLATE_VBoxGuestR3DllMinW2K_POST_CMDS.win.x86 = $(subst $(VBOX_PE_SET_VERSION), $(VBOX_PE_SET_VERSION) --w2k,$(TEMPLATE_VBoxGuestR3Dll_POST_CMDS.win.x86))
7125 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))
7126 TEMPLATE_VBoxGuestR3DllMinW2K_LNK_DEPS.win.amd64 = $(if $(eq $(tool_do),LINK_LIBRARY),,$(VBOX_PE_SET_VERSION)) $(TEMPLATE_VBoxGuestR3Dll_LNK_DEPS.win.amd64)
7127endif
7128
7129#
7130# Variant of VBoxGuestR3Dll that requires Windows Vista or later.
7131#
7132TEMPLATE_VBoxGuestR3DllMinVista = VBox Guest User Dynamic Libraries w/ IPRT and VBGL.
7133TEMPLATE_VBoxGuestR3DllMinVista_EXTENDS = VBoxGuestR3Dll
7134ifeq ($(KBUILD_TARGET),win)
7135 TEMPLATE_VBoxGuestR3DllMinVista_LDFLAGS.win.x86 = $(filter-out -Section:.bss$(COMMA)RW!K,$(TEMPLATE_VBoxGuestR3Dll_LDFLAGS.win.x86))
7136 TEMPLATE_VBoxGuestR3DllMinVista_POST_CMDS.win.x86 = $(subst $(VBOX_PE_SET_VERSION), $(VBOX_PE_SET_VERSION) --vista,$(TEMPLATE_VBoxGuestR3Dll_POST_CMDS.win.x86))
7137 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))
7138 TEMPLATE_VBoxGuestR3DllMinVista_LNK_DEPS.win.amd64 = $(if $(eq $(tool_do),LINK_LIBRARY),,$(VBOX_PE_SET_VERSION)) $(TEMPLATE_VBoxGuestR3Dll_LNK_DEPS.win.amd64)
7139endif
7140
7141#
7142# Template for building normal R3 (dynamic) libraries for the guest additions with Visual C++ 2013 or later, strict.
7143#
7144TEMPLATE_NewerVccVBoxGuestR3Dll = VBOXGUESTR3DLL with the newer Visual C++ version (2013 or later).
7145TEMPLATE_NewerVccVBoxGuestR3Dll_EXTENDS = VBOXGUESTR3DLL
7146ifeq ($(KBUILD_TARGET),win)
7147 TEMPLATE_NewerVccVBoxGuestR3Dll_TOOL.win.x86 = $(VBOX_NEWER_VCC_TOOL_STEM)X86
7148 TEMPLATE_NewerVccVBoxGuestR3Dll_TOOL.win.amd64 = $(VBOX_NEWER_VCC_TOOL_STEM)AMD64
7149 TEMPLATE_NewerVccVBoxGuestR3Dll_CXXFLAGS = \
7150 $(filter-out $(VBOX_VCC_WARN_ALL) $(VBOX_VCC_WERR), $(TEMPLATE_VBOXGUESTR3DLL_CXXFLAGS)) \
7151 $(VBOX_NEWER_VCC_WARN_ALL) $(VBOX_VCC_WERR)
7152 TEMPLATE_NewerVccVBoxGuestR3Dll_CFLAGS = $(TEMPLATE_NewerVccVBOXGUESTR3DLL_CXXFLAGS)
7153# Hack begin
7154# Does not work when building x86 for amd64 build (No rule to make target /oldnames.lib).
7155# TEMPLATE_NewerVccVBoxGuestR3Dll_LIBS.x86 = \
7156# $(subst $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3DLL_TOOL.win.x86)_LIB),$(PATH_TOOL_$(TEMPLATE_NewerVccVBoxGuestR3Dll_TOOL.win.x86)_LIB), $(TEMPLATE_VBOXGUESTR3DLL_LIBS.x86))
7157# TEMPLATE_NewerVccVBoxGuestR3Dll_LIBS.amd64 = \
7158# $(subst $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3DLL_TOOL.win.amd64)_LIB),$(PATH_TOOL_$(TEMPLATE_NewerVccVBoxGuestR3Dll_TOOL.win.amd64)_LIB), $(TEMPLATE_VBOXGUESTR3DLL_LIBS.amd64))
7159# Directly assign TEMPLATE_NewerVccVBoxGuestR3Dll_LIBS.
7160 TEMPLATE_NewerVccVBoxGuestR3Dll_LIBS.x86 = \
7161 $(PATH_TOOL_$(TEMPLATE_NewerVccVBoxGuestR3Dll_TOOL.win.x86)_LIB)/oldnames.lib \
7162 $(PATH_TOOL_$(TEMPLATE_NewerVccVBoxGuestR3Dll_TOOL.win.x86)_LIB)/libcmt$(VBOX_VCC_CRT_TYPE).lib \
7163 $(PATH_TOOL_$(TEMPLATE_NewerVccVBoxGuestR3Dll_TOOL.win.x86)_LIB)/libcpmt$(VBOX_VCC_CRT_TYPE).lib
7164 TEMPLATE_NewerVccVBoxGuestR3Dll_LIBS.amd64 = \
7165 $(PATH_TOOL_$(TEMPLATE_NewerVccVBoxGuestR3Dll_TOOL.win.amd64)_LIB)/oldnames.lib \
7166 $(PATH_TOOL_$(TEMPLATE_NewerVccVBoxGuestR3Dll_TOOL.win.amd64)_LIB)/libcmt$(VBOX_VCC_CRT_TYPE).lib \
7167 $(PATH_TOOL_$(TEMPLATE_NewerVccVBoxGuestR3Dll_TOOL.win.amd64)_LIB)/libcpmt$(VBOX_VCC_CRT_TYPE).lib
7168# Hack end
7169endif
7170
7171#
7172# Variant of NewerVccVBoxGuestR3Dll that requires Windows Vista or later.
7173#
7174TEMPLATE_NewerVccVBoxGuestR3DllMinVista = NewerVccVBoxGuestR3Dll with the newer Visual C++ version (2013 or later).
7175TEMPLATE_NewerVccVBoxGuestR3DllMinVista_EXTENDS = NewerVccVBoxGuestR3Dll
7176ifeq ($(KBUILD_TARGET),win)
7177 TEMPLATE_NewerVccVBoxGuestR3DllMinVista_LDFLAGS.win.x86 = $(filter-out -Section:.bss$(COMMA)RW!K,$(TEMPLATE_NewerVccVBoxGuestR3Dll_LDFLAGS.win.x86))
7178 TEMPLATE_NewerVccVBoxGuestR3DllMinVista_POST_CMDS.win.x86 = $(subst $(VBOX_PE_SET_VERSION), $(VBOX_PE_SET_VERSION) --vista,$(TEMPLATE_NewerVccVBoxGuestR3Dll_POST_CMDS.win.x86))
7179 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))
7180 TEMPLATE_NewerVccVBoxGuestR3DllMinVista_LNK_DEPS.win.amd64 = $(if $(eq $(tool_do),LINK_LIBRARY),,$(VBOX_PE_SET_VERSION)) $(TEMPLATE_NewerVccVBoxGuestR3Dll_LNK_DEPS.win.amd64)
7181endif
7182
7183#
7184# Template for building R3 (static) libraries for the guest additions, allows warnings.
7185#
7186## @todo rename to VBoxGuestR3LibWarn.
7187TEMPLATE_VBOXGUESTR3LIB = VBox Guest User Libraries
7188TEMPLATE_VBOXGUESTR3LIB_EXTENDS = VBOXGUESTR3EXE
7189TEMPLATE_VBOXGUESTR3LIB_INST = $(INST_ADDITIONS_LIB)
7190
7191#
7192# Template for building R3 (static) libraries for the guest additions, strict.
7193#
7194TEMPLATE_VBoxGuestR3Lib = VBox Guest User Dynamic Libraries w/ IPRT and VBGL.
7195TEMPLATE_VBoxGuestR3Lib_EXTENDS = VBOXGUESTR3LIB
7196TEMPLATE_VBoxGuestR3Lib_EXTENDS_BY = appending
7197ifeq ($(KBUILD_TARGET),win)
7198 TEMPLATE_VBoxGuestR3Lib_CFLAGS += $(VBOX_VCC_WERR)
7199 TEMPLATE_VBoxGuestR3Lib_CXXFLAGS += $(VBOX_VCC_WERR)
7200 TEMPLATE_VBoxGuestR3Lib_LDFLAGS += $(VBOX_VCC_LD_WERR)
7201else
7202 TEMPLATE_VBoxGuestR3Lib_CFLAGS += $(VBOX_GCC_WERR)
7203 TEMPLATE_VBoxGuestR3Lib_CXXFLAGS += $(VBOX_GCC_WERR)
7204endif
7205
7206#
7207# Template for building R3 programs for the guest additions (no -pedantic)
7208#
7209TEMPLATE_VBOXGUESTR3NPEXE = VBox Guest Program Non-pedantic
7210TEMPLATE_VBOXGUESTR3NPEXE_EXTENDS = VBOXGUESTR3EXE
7211ifneq ($(KBUILD_TARGET),win) # gcc only
7212 TEMPLATE_VBOXGUESTR3NPEXE_CXXFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_CXX),$(TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS)) \
7213 -Wno-sign-compare
7214 TEMPLATE_VBOXGUESTR3NPEXE_CFLAGS = $(filter-out $(VBOX_GCC_WERR) $(VBOX_GCC_WARN_MASOCHISTIC) $(VBOX_GCC_PEDANTIC_C) ,$(TEMPLATE_VBOXGUESTR3EXE_CFLAGS)) \
7215 -Wno-sign-compare
7216endif
7217
7218#
7219# Template for building R3 (dynamic) libraries for the guest additions (no -pedantic)
7220#
7221TEMPLATE_VBOXGUESTR3NPDLL = VBox Guest User Dynamic Libraries Non-pedantic
7222TEMPLATE_VBOXGUESTR3NPDLL_EXTENDS = VBOXGUESTR3NPEXE
7223## @todo add a INSTFUN that separates dlls and libs.
7224ifn1of ($(KBUILD_TARGET), darwin os2 win)
7225 TEMPLATE_VBOXGUESTR3NPDLL_DEFS = $(TEMPLATE_VBOXGUESTR3NPEXE_DEFS) PIC
7226 TEMPLATE_VBOXGUESTR3NPDLL_CFLAGS = $(TEMPLATE_VBOXGUESTR3NPEXE_CFLAGS) -fPIC
7227 TEMPLATE_VBOXGUESTR3NPDLL_CXXFLAGS = $(TEMPLATE_VBOXGUESTR3NPEXE_CXXFLAGS) -fPIC -fno-exceptions
7228 TEMPLATE_VBOXGUESTR3NPDLL_LDFLAGS = $(TEMPLATE_VBOXGUESTR3NPEXE_LDFLAGS) -fPIC
7229endif
7230
7231#
7232# Template for building R3 (static) libraries for the guest additions (no -pedantic)
7233#
7234TEMPLATE_VBOXGUESTR3NPLIB = VBox Guest User Libraries Non-pedantic
7235TEMPLATE_VBOXGUESTR3NPLIB_EXTENDS = VBOXGUESTR3NPEXE
7236TEMPLATE_VBOXGUESTR3NPLIB_INST = $(INST_ADDITIONS_LIB)
7237
7238
7239#
7240# Template for XFree86 guest modules (relocatable module, i.e. sysmod).
7241# This mostly about zapping the VBOXR3EXE linker flags and libraries.
7242#
7243TEMPLATE_VBOXGUESTR3XF86MOD = VBox XFree86 Guest Module
7244TEMPLATE_VBOXGUESTR3XF86MOD_EXTENDS = VBOXGUESTR3EXE
7245TEMPLATE_VBOXGUESTR3XF86MOD_LIBS.$(KBUILD_TYPE) = $(NO_SUCH_VARIABLE)
7246TEMPLATE_VBOXGUESTR3XF86MOD_LIBS.$(KBUILD_TARGET) = $(NO_SUCH_VARIABLE)
7247TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.$(KBUILD_TARGET) = $(NO_SUCH_VARIABLE)
7248# The GNU_HASH ELF tag is not supported by older glibc dynamic linkers.
7249TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.linux = $(subst -Wl$(COMMA),,$(VBOX_LD_hash_style_sysv))
7250TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.$(KBUILD_TYPE) = $(NO_SUCH_VARIABLE)
7251TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS = -r
7252if1of ($(KBUILD_TARGET), dragonfly freebsd linux netbsd openbsd) # the gnu ld guys.
7253 TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.release = -S
7254 TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.x86 = -m elf_i386
7255 TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.amd64 = -m elf_x86_64
7256endif
7257TEMPLATE_VBOXGUESTR3XF86MOD_CFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_CFLAGS) -fno-pie -fno-merge-constants -std=c99 -ffreestanding
7258TEMPLATE_VBOXGUESTR3XF86MOD_CXXFLAGS= $(TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS) -fno-pie -fno-merge-constants -ffreestanding
7259TEMPLATE_VBOXGUESTR3XF86MOD_CFLAGS.linux = $(VBOX_GCC_fno-stack-protector) # Remove symvers.h
7260TEMPLATE_VBOXGUESTR3XF86MOD_CXXFLAGS.linux = $(VBOX_GCC_fno-stack-protector) # Remove symvers.h
7261TEMPLATE_VBOXGUESTR3XF86MOD_SYSSUFF = .o
7262TEMPLATE_VBOXGUESTR3XF86MOD_LIBS = \
7263 $(VBOX_LIB_VBGL_R3_XFREE86)
7264TEMPLATE_VBOXGUESTR3XF86MOD_DEFS = $(TEMPLATE_VBOXGUESTR3DLL_DEFS) VBOX_GUESTR3XF86MOD RTMEM_NO_WRAP_TO_EF_APIS
7265
7266
7267#
7268# Template for XFree86 guest libraries.
7269#
7270TEMPLATE_VBOXGUESTR3XF86LIB = VBox XFree86 Guest Library
7271TEMPLATE_VBOXGUESTR3XF86LIB_EXTENDS = VBOXGUESTR3XF86MOD
7272TEMPLATE_VBOXGUESTR3XF86LIB_INST = $(INST_ADDITIONS_LIB)
7273
7274
7275#
7276# Template for X.org guest modules (shared libs).
7277# This mostly about zapping unnecessary LIBS from VBOXGUESTR3DLL and adding some flags.
7278#
7279TEMPLATE_VBOXGUESTR3XORGMOD = VBox X.org Guest Module
7280TEMPLATE_VBOXGUESTR3XORGMOD_EXTENDS = VBOXGUESTR3DLL
7281TEMPLATE_VBOXGUESTR3XORGMOD_LIBS.$(KBUILD_TYPE) = $(NO_SUCH_VARIABLE)
7282TEMPLATE_VBOXGUESTR3XORGMOD_LIBS.$(KBUILD_TARGET) = $(NO_SUCH_VARIABLE)
7283TEMPLATE_VBOXGUESTR3XORGMOD_CFLAGS = $(TEMPLATE_VBOXGUESTR3DLL_CFLAGS) -std=c99
7284if1of ($(KBUILD_TARGET), linux)
7285 TEMPLATE_VBOXGUESTR3XORGMOD_CFLAGS += -Wno-conversion -Wno-unused-parameter
7286endif
7287TEMPLATE_VBOXGUESTR3XORGMOD_DEFS = $(TEMPLATE_VBOXGUESTR3DLL_DEFS) VBOX_GUESTR3XORGMOD RTMEM_NO_WRAP_TO_EF_APIS
7288ifeq ($(KBUILD_TARGET_ARCH),amd64)
7289 TEMPLATE_VBOXGUESTR3XORGMOD_DEFS += _XSERVER64
7290endif
7291TEMPLATE_VBOXGUESTR3XORGMOD_LIBS = \
7292 $(VBOX_LIB_VBGL_R3_XORG)
7293TEMPLATE_VBOXGUESTR3XORGMOD_LIBS.freebsd += \
7294 iconv
7295
7296
7297#
7298# Template for X.Org guest libraries.
7299#
7300TEMPLATE_VBOXGUESTR3XORGLIB = VBox X.Org Guest Library
7301TEMPLATE_VBOXGUESTR3XORGLIB_EXTENDS = VBOXGUESTR3XORGMOD
7302TEMPLATE_VBOXGUESTR3XORGLIB_INST = $(INST_ADDITIONS_LIB)
7303
7304
7305#
7306# Template for building R0 drivers for the guest additions.
7307#
7308TEMPLATE_VBOXGUESTR0 = VBox Guest Driver
7309TEMPLATE_VBOXGUESTR0_EXTENDS = VBOXR0DRV
7310TEMPLATE_VBOXGUESTR0_INST = $(INST_ADDITIONS)
7311TEMPLATE_VBOXGUESTR0_SDKS.win.x86 = ReorderCompilerIncs $(VBOX_WINDDK_GST) $(VBOX_WINPSDK_GST)INCS
7312TEMPLATE_VBOXGUESTR0_SDKS.win.amd64 = ReorderCompilerIncs $(VBOX_WINDDK_GST) $(VBOX_WINPSDK_GST)INCS
7313TEMPLATE_VBOXGUESTR0_LIBS.win.x86 = \
7314 $(PATH_SDK_$(VBOX_WINDDK)_LIB)/int64.lib
7315TEMPLATE_VBOXGUESTR0_DEFS = $(TEMPLATE_VBOXR0DRV_DEFS) IN_GUEST IN_GUEST_R0
7316TEMPLATE_VBOXGUESTR0_DEFS.linux = RT_NO_EXPORT_SYMBOL
7317ifeq ($(KBUILD_TARGET),solaris)
7318 TEMPLATE_VBOXGUESTR0_LDFLAGS = -r -dy
7319endif
7320ifn1of (darwin os2 win, $(KBUILD_TARGET))
7321 TEMPLATE_VBOXGUESTR0_CFLAGS = $(patsubst %/VBox/SUPDrvMangling.h,%/VBox/VBoxGuestMangling.h,$(TEMPLATE_VBOXR0DRV_CFLAGS))
7322 TEMPLATE_VBOXGUESTR0_CXXFLAGS = $(patsubst %/VBox/SUPDrvMangling.h,%/VBox/VBoxGuestMangling.h,$(TEMPLATE_VBOXR0DRV_CXXFLAGS))
7323endif
7324
7325
7326#
7327# Template for building R0 libraries for the guest additions.
7328#
7329TEMPLATE_VBOXGUESTR0LIB = VBox Guest Driver Libraries
7330TEMPLATE_VBOXGUESTR0LIB_EXTENDS = VBOXGUESTR0
7331TEMPLATE_VBOXGUESTR0LIB_INSTTYPE = stage
7332TEMPLATE_VBOXGUESTR0LIB_INSTTYPE.linux = stage
7333TEMPLATE_VBOXGUESTR0LIB_INST = $(INST_ADDITIONS_LIB)
7334ifeq ($(KBUILD_TARGET),haiku)
7335 TEMPLATE_VBOXGUESTR0LIB_LDFLAGS = -r -dy
7336endif
7337
7338#
7339# Template for building OpenGL host dlls.
7340#
7341TEMPLATE_VBOXCROGLR3HOSTDLL = VBox OpenGL Host DLLs
7342TEMPLATE_VBOXCROGLR3HOSTDLL_EXTENDS := $(if-expr "$(KBUILD_TARGET)" == "win",VBOXR3,VBOXR3NP)
7343TEMPLATE_VBOXCROGLR3HOSTDLL_EXTENDS_BY = prepending
7344TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS = VBOX_WITH_HGCM UNPACKS
7345TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS.win = _WIN32_WINNT=0x0500 WINDOWS=1
7346TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS.linux = Linux=1 _GNU_SOURCE
7347TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS.solaris = SunOS=1 _GNU_SOURCE #GLEXT_64_TYPES_DEFINED
7348TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS.darwin = DARWIN=1 GL_GLEXT_LEGACY _GNU_SOURCE
7349TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS.freebsd = FreeBSD=1 _GNU_SOURCE
7350TEMPLATE_VBOXCROGLR3HOSTDLL_INCS = $(VBOX_PATH_CROGL_INCLUDE) $(VBOX_PATH_CROGL_GENFILES)
7351TEMPLATE_VBOXCROGLR3HOSTDLL_SDKS.darwin = DARWIN-OPENGL
7352TEMPLATE_VBOXCROGLR3HOSTDLL_LDFLAGS.darwin = -framework AppKit
7353TEMPLATE_VBOXCROGLR3HOSTDLL_LDFLAGS.darwin += \
7354 -framework OpenGL \
7355 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
7356 -compatibility_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
7357TEMPLATE_VBOXCROGLR3HOSTDLL_LDFLAGS.linux = -Wl,--no-as-needed
7358TEMPLATE_VBOXCROGLR3HOSTDLL_BLDDIRS = $(VBOX_PATH_CROGL_GENFILES)/
7359ifeq ($(KBUILD_TARGET),darwin)
7360 TEMPLATE_VBOXCROGLR3HOSTDLL_CFLAGS = $(TEMPLATE_VBOXR3NP_CFLAGS) -Wno-deprecated-declarations
7361 TEMPLATE_VBOXCROGLR3HOSTDLL_CXXFLAGS = $(TEMPLATE_VBOXR3NP_CXXFLAGS) -Wno-deprecated-declarations
7362 TEMPLATE_VBOXCROGLR3HOSTDLL_OBJCFLAGS = $(TEMPLATE_VBOXR3NP_OBJCFLAGS) -Wno-deprecated-declarations
7363else ifeq ($(KBUILD_TARGET),win)
7364 # -wd4055: renderspu.c(1553) : warning C4055: 'type cast' : from data pointer 'const GLvoid *' to function pointer 'PFNVCRSERVER_CLIENT_CALLOUT'
7365 # -wd4305: renderspu_wgl.c(1118) : warning C4305: 'type cast' : truncation from 'uint64_t' to 'void *'
7366 TEMPLATE_VBOXCROGLR3HOSTDLL_CFLAGS = $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3HOSTDLL_EXTENDS)_CFLAGS) \
7367 -wd4055 -wd4305
7368endif
7369
7370#
7371# Template for building OpenGL host libraries.
7372#
7373TEMPLATE_VBOXCROGLR3HOSTLIB = VBox OpenGL Host Libraries
7374TEMPLATE_VBOXCROGLR3HOSTLIB_EXTENDS = VBOXCROGLR3HOSTDLL
7375TEMPLATE_VBOXCROGLR3HOSTLIB_INST = $(INST_LIB)
7376
7377#
7378# Template for building OpenGL guest dlls.
7379#
7380TEMPLATE_VBOXCROGLR3GUESTDLL = VBox OpenGL Guest DLLs
7381# @todo Temporarily disabled, causes linker errors on Windows because VBoxOGLcrutil and VBoxOGLspupacker both drag in RuntimeGuestR3Shared.lib
7382#if "$(KBUILD_TARGET)" == "win" || defined(VBOX_WITH_MASOCHISTIC_WARNINGS) || defined(VBOX_WITH_NO_GCC_WARNING_POLICY) ## @todo use VBoxGuestR3Dll everywhere
7383#TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS = VBoxGuestR3DllMinW2K
7384#else
7385TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS = VBOXGUESTR3NPDLL
7386#endif
7387TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS = $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_DEFS) VBOX_WITH_HGCM
7388TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS.win = $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_DEFS.win) WINDOWS=1
7389TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS.linux = $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_DEFS.linux) Linux=1 _GNU_SOURCE
7390TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS.solaris = $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_DEFS.solaris) SunOS=1 _GNU_SOURCE #GLEXT_64_TYPES_DEFINED
7391TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS.darwin = $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_DEFS.darwin) DARWIN=1 GL_GLEXT_LEGACY _GNU_SOURCE
7392TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS.freebsd = $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_DEFS.freebsd) FreeBSD=1 _GNU_SOURCE
7393TEMPLATE_VBOXCROGLR3GUESTDLL_INCS = $(VBOX_PATH_CROGL_INCLUDE) $(VBOX_PATH_CROGL_GENFILES) $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_INCS)
7394TEMPLATE_VBOXCROGLR3GUESTDLL_SDKS.darwin = DARWIN-OPENGL $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_SDKS)
7395ifeq ($(KBUILD_TARGET),win)
7396 # -wd4255: cr_spu.h(146) : warning C4255: 'wglGetCurrentContextFunc_t' : no function prototype given: converting '()' to '(void)'
7397 # -wd4296: udptcpip.c(662) : warning C4296: '>=' : expression is always true
7398 # -wd4245: udptcpip.c(174) : warning C4245: '=' : conversion from 'int' to 'CRSocket', signed/unsigned mismatch
7399 # -wd4668: tcpip.c(961) : warning C4668: 'CRAPPFAKER_SHOULD_DIE' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif'
7400 # -wd4005: v7.1\include\sal_supp.h(57) : warning C4005: '__useHeader' : macro redefinition
7401 # -wd4057: state_lists.c(196) : warning C4057: 'function' : 'GLint *' differs in indirection to slightly different base types from 'GLenum *'
7402 # -wd4311: wgl.c(183) : warning C4311: 'type cast' : pointer truncation from 'HGLRC' to 'unsigned long' [TODO: fix source code]
7403 # -wd4312: wgl.c(218) : warning C4312: 'type cast' : conversion from 'unsigned long' to 'HGLRC' of greater size [TODO: fix source code]
7404 # -wd4305: icd_drv.c(325) : warning C4305: 'type cast' : truncation from 'HGLRC' to 'unsigned long'
7405 # -wd4306: icd_drv.c(191) : warning C4306: 'type cast' : conversion from 'unsigned long' to 'HGLRC' of greater size
7406 # -wd4054: feedbackspu.c(530) : warning C4054: 'type cast' : from function pointer 'SPUGenericFunction' to data pointer 'void *'
7407 # -wd4189: load.c(1273) : warning C4189: 'pContextRecord' : local variable is initialized but not referenced
7408 # -wd4100: vboxhgcm.c(1365) : warning C4100: 'conn' : unreferenced formal parameter
7409 TEMPLATE_VBOXCROGLR3GUESTDLL_CFLAGS = $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_CFLAGS) \
7410 -wd4255 -wd4296 -wd4245 -wd4668 -wd4005 -wd4057 -wd4311 -wd4312 -wd4305 -wd4306 -wd4054 -wd4189 -wd4100
7411else
7412 TEMPLATE_VBOXCROGLR3GUESTDLL_CFLAGS = $(filter-out -pedantic, $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_CFLAGS)) \
7413 $(VBOX_GCC_Wno-overlength-strings) $(VBOX_GCC_Wno-cast-function-type)
7414 TEMPLATE_VBOXCROGLR3GUESTDLL_CXXFLAGS = $(filter-out -pedantic, $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_CXXFLAGS))
7415endif
7416TEMPLATE_VBOXCROGLR3GUESTDLL_LDFLAGS.darwin = $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_LDFLAGS.darwin)\
7417 -framework AppKit \
7418 -framework OpenGL \
7419 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \
7420 -compatibility_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
7421TEMPLATE_VBOXCROGLR3GUESTDLL_BLDDIRS = $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_BLDDIRS) $(VBOX_PATH_CROGL_GENFILES)/
7422
7423
7424#
7425# Template for building OpenGL guest libraries.
7426#
7427TEMPLATE_VBOXCROGLR3GUESTLIB = VBox OpenGL Guest Libraries
7428TEMPLATE_VBOXCROGLR3GUESTLIB_EXTENDS = VBOXCROGLR3GUESTDLL
7429TEMPLATE_VBOXCROGLR3GUESTLIB_INST = $(INST_ADDITIONS_LIB)
7430
7431
7432#
7433# Template for building Mesa guest library, Linux-only so far.
7434#
7435TEMPLATE_VBOXMESAR3GUESTLIB = VBox Mesa Guest Library
7436TEMPLATE_VBOXMESAR3GUESTLIB_EXTENDS = VBOXCROGLR3GUESTDLL
7437TEMPLATE_VBOXMESAR3GUESTLIB_INST = $(INST_ADDITIONS_LIB)
7438TEMPLATE_VBOXMESAR3GUESTLIB_DEFS.linux = Linux=1
7439TEMPLATE_VBOXMESAR3GUESTLIB_DEFS.solaris = SunOS=1
7440TEMPLATE_VBOXMESAR3GUESTLIB_DEFS.darwin = DARWIN=1 GL_GLEXT_LEGACY
7441ifeq ($(KBUILD_TARGET),linux)
7442 TEMPLATE_VBOXMESAR3GUESTLIB_ASTOOL = $(TEMPLATE_VBOXCROGLR3GUESTDLL_TOOL)
7443 TEMPLATE_VBOXMESAR3GUESTLIB_ASFLAGS = $(NO_SUCH_VARIABLE)
7444 TEMPLATE_VBOXMESAR3GUESTLIB_ASFLAGS.x86 = -m32
7445 TEMPLATE_VBOXMESAR3GUESTLIB_ASFLAGS.amd64 = -m64
7446 TEMPLATE_VBOXMESAR3GUESTLIB_ASDEFS = $(NO_SUCH_VARIABLE)
7447endif
7448
7449
7450#
7451# Guest additions libraries (all static).
7452# The _MINI and _SHARED are both compiled as PIC and intended for linking into a .so/.dll/.dylib.
7453#
7454VBOX_LIB_IPRT_GUEST_R3 = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR3$(VBOX_SUFF_LIB)
7455VBOX_LIB_IPRT_GUEST_R3_SHARED = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR3Shared$(VBOX_SUFF_LIB)
7456VBOX_LIB_IPRT_GUEST_R0 = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR0$(VBOX_SUFF_LIB)
7457#ifeq ($(KBUILD_TARGET_ARCH),x86)
7458# VBOX_LIB_IPRT_GUEST_R0_NT4 = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR0NT4$(VBOX_SUFF_LIB)
7459#else
7460 VBOX_LIB_IPRT_GUEST_R0_NT4 = $(VBOX_LIB_IPRT_GUEST_R0)
7461#endif
7462VBOX_LIB_VBGL_R3 = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3Lib$(VBOX_SUFF_LIB)
7463VBOX_LIB_VBGL_R3_XFREE86 = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3LibXFree86$(VBOX_SUFF_LIB)
7464VBOX_LIB_VBGL_R3_XORG = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3LibXOrg$(VBOX_SUFF_LIB)
7465VBOX_LIB_VBGL_R3_SHARED = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3LibShared$(VBOX_SUFF_LIB)
7466VBOX_LIB_VBGL_R0BASE = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR0LibBase$(VBOX_SUFF_LIB)
7467VBOX_LIB_VBGL_R0 = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR0Lib$(VBOX_SUFF_LIB)
7468ifeq ($(KBUILD_TARGET),x86)
7469 VBOX_LIB_IPRT_GUEST_R3_X86 = $(VBOX_LIB_IPRT_GUEST_R3)
7470 VBOX_LIB_IPRT_GUEST_R3_SHARED_X86 = $(VBOX_LIB_IPRT_GUEST_R3_SHARED)
7471 VBOX_LIB_VBGL_R3_X86 = $(VBOX_LIB_VBGL_R3)
7472 VBOX_LIB_VBGL_R3_SHARED_X86 = $(VBOX_LIB_VBGL_R3_SHARED)
7473else
7474 VBOX_LIB_IPRT_GUEST_R3_X86 = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR3-x86$(VBOX_SUFF_LIB)
7475 VBOX_LIB_IPRT_GUEST_R3_SHARED_X86 = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR3Shared-x86$(VBOX_SUFF_LIB)
7476 VBOX_LIB_VBGL_R3_X86 = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3Lib-x86$(VBOX_SUFF_LIB)
7477 VBOX_LIB_VBGL_R3_SHARED_X86 = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3LibShared-x86$(VBOX_SUFF_LIB)
7478endif
7479
7480
7481#
7482# Check the publisher and version string.
7483#
7484# We are being very strict because the version string is visible in various
7485# APIs and logs and must be machine readable.
7486#
7487VBOX_VERSION_COMP_VALID_CHAR_SET = ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz()[]{}+-.,
7488ifneq ($(VBOX_BUILD_PUBLISHER),)
7489 if !defined(VBOX_BUILD_TAG) && $(length $(VBOX_BUILD_PUBLISHER)) > 10
7490 $(error VBox: VBOX_BUILD_PUBLISHER must not be longer than 10 characters!)
7491 else if defined(VBOX_BUILD_TAG) && $(length $(VBOX_BUILD_PUBLISHER)) > 48
7492 $(error VBox: VBOX_BUILD_PUBLISHER must not be longer than 48 characters!)
7493 endif
7494 if "$(substr $(VBOX_BUILD_PUBLISHER), 1, 1)" != "_"
7495 $(error VBox: VBOX_BUILD_PUBLISHER must start with an underscore!)
7496 endif
7497 if "$(translate $(substr $(VBOX_BUILD_PUBLISHER),2),$(VBOX_VERSION_COMP_VALID_CHAR_SET),)" != ""
7498 $(error VBox: VBOX_BUILD_PUBLISHER='$(VBOX_BUILD_PUBLISHER)' contains bad characters! Valid set is:$(NLTAB)$(VBOX_VERSION_COMP_VALID_CHAR_SET))
7499 endif
7500endif
7501
7502if $(words $(VBOX_VERSION_STRING)) != 1
7503 $(error VBox: VBOX_VERSION_STRING='$(VBOX_VERSION_STRING)' contains spaces or is empty.)
7504endif
7505if "$(subst __,-,$(VBOX_VERSION_STRING))" != "$(VBOX_VERSION_STRING)"
7506 $(error VBox: VBOX_VERSION_STRING='$(VBOX_VERSION_STRING)' contains double underscores.)
7507endif
7508
7509VBOX_VER_TMP1 := $(subst _,$(SP),$(VBOX_VERSION_STRING))
7510
7511if $(words $(VBOX_VER_TMP1)) > 3
7512 $(error VBox: VBOX_VERSION_STRING='$(VBOX_VERSION_STRING)' contains too many parts (underscores), max 3!)
7513endif
7514if "$(translate $(word 1,$(VBOX_VER_TMP1)),0123456789,)" != ".."
7515 $(error VBox: The x.y.z part of VBOX_VERSION_STRING='$(VBOX_VERSION_STRING)' is malformed: '$(word 1,$(VBOX_VER_TMP1))')
7516endif
7517if "$(word 1,$(VBOX_VER_TMP1))" != "$(VBOX_VERSION_STRING_RAW)"
7518 $(error VBox: VBOX_VERSION_STRING='$(VBOX_VERSION_STRING)' does not start with VBOX_VERSION_STRING_RAW='$(VBOX_VERSION_STRING_RAW)')
7519endif
7520
7521if $(words $(VBOX_VER_TMP1)) == 3 || ($(words $(VBOX_VER_TMP1)) == 2 && "$(VBOX_BUILD_PUBLISHER)" == "")
7522 if "$(substr $(word 2,$(VBOX_VER_TMP1)),1,4)" == "BETA"
7523 VBOX_VER_TMP2 = 5
7524 else if "$(substr $(word 2,$(VBOX_VER_TMP1)),1,5)" == "ALPHA"
7525 VBOX_VER_TMP2 = 6
7526 else if "$(substr $(word 2,$(VBOX_VER_TMP1)),1,2)" == "RC"
7527 VBOX_VER_TMP2 = 3
7528 else
7529 $(error VBox: VBOX_VERSION_STRING='$(VBOX_VERSION_STRING)' uses an unknown build type: '$(word 2,$(VBOX_VER_TMP1))')
7530 endif
7531 if "$(translate $(substr $(word 2,$(VBOX_VER_TMP1)),$(VBOX_VER_TMP2)),0123456789)" != ""
7532 $(error VBox: VBOX_VERSION_STRING='$(VBOX_VERSION_STRING)' uses an unknown build type: '$(word 2,$(VBOX_VER_TMP1))')
7533 endif
7534endif
7535
7536VBOX_VER_TMP1 :=
7537VBOX_VER_TMP2 :=
7538
7539
7540#
7541# Two targets to coordinate version number changes properly. Note that the
7542# only way to get a really consistent build is to run 'kmk' in the top-level
7543# directory. If you don't run it there, you get a consistent sub-tree only.
7544#
7545VBOX_BAD_CHAR_SET = ,;:/\$(SP)$(TAB)$(HASH)=![]@%&''()*""<>?^{}|~
7546VBOX_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),,_)
7547VBOX_VERSION_HEADER = $(PATH_OUT)/version-generated.h
7548VBOX_VERSION_MK = $(PATH_OUT)/version-generated.mk
7549
7550$(VBOX_VERSION_STAMP): | $(PATH_ROOT)/Config.kmk
7551 $(call MSG_GENERATE,,$@)
7552 $(QUIET)$(MKDIR) -p $(@D)
7553 $(QUIET)$(RM) -f $(wildcard $(PATH_OUT)/version-stamp-*)
7554 $(QUIET)$(APPEND) $@ $(VBOX_VERSION_STRING)
7555
7556$(VBOX_VERSION_HEADER): $(VBOX_VERSION_STAMP)
7557 $(call MSG_GENERATE,,$@)
7558 $(QUIET)$(MKDIR) -p $(@D)
7559 $(QUIET)$(RM) -f $@ [email protected]
7560 $(QUIET)$(APPEND) [email protected] '#ifndef ___version_generated_h___'
7561 $(QUIET)$(APPEND) [email protected] '#define ___version_generated_h___'
7562 $(QUIET)$(APPEND) [email protected] ''
7563 $(QUIET)$(APPEND) [email protected] '#define VBOX_VERSION_MAJOR $(VBOX_VERSION_MAJOR)'
7564 $(QUIET)$(APPEND) [email protected] '#define VBOX_VERSION_MINOR $(VBOX_VERSION_MINOR)'
7565 $(QUIET)$(APPEND) [email protected] '#define VBOX_VERSION_BUILD $(VBOX_VERSION_BUILD)'
7566ifneq ($(VBOX_VERSION_PRERELEASE),)
7567 $(QUIET)$(APPEND) [email protected] '#define VBOX_VERSION_PRERELEASE "$(strip $(VBOX_VERSION_PRERELEASE))"'
7568endif
7569 $(QUIET)$(APPEND) [email protected] '#define VBOX_VERSION_STRING_RAW "$(VBOX_VERSION_STRING_RAW)"'
7570 $(QUIET)$(APPEND) [email protected] '#define VBOX_VERSION_STRING "$(VBOX_VERSION_STRING)"'
7571 $(QUIET)$(APPEND) [email protected] '#define VBOX_API_VERSION_STRING "$(VBOX_API_VERSION)"'
7572 $(QUIET)$(APPEND) [email protected] ''
7573ifdef VBOX_BUILD_SERVER_BUILD
7574 $(QUIET)$(APPEND) [email protected] '#define VBOX_BUILD_SERVER_BUILD 1'
7575else
7576 $(QUIET)$(APPEND) [email protected] '#define VBOX_PRIVATE_BUILD_DESC "Private build by $(USERNAME)"'
7577endif
7578 $(QUIET)$(APPEND) [email protected] ''
7579 $(QUIET)$(APPEND) [email protected] '#endif'
7580 $(QUIET)$(MV) -f [email protected] $@
7581
7582
7583VBOX_PACKAGE_HEADER = $(PATH_OUT)/package-generated.h
7584
7585$(VBOX_PACKAGE_HEADER):
7586 $(call MSG_GENERATE,,$@)
7587 $(QUIET)$(MKDIR) -p $(@D)
7588 $(QUIET)$(RM) -f $@ [email protected]
7589 $(QUIET)$(APPEND) [email protected] '#ifndef ___package_generated_h___'
7590 $(QUIET)$(APPEND) [email protected] '#define ___package_generated_h___'
7591 $(QUIET)$(APPEND) [email protected] ''
7592 $(QUIET)$(APPEND) [email protected] '#define VBOX_PACKAGE_STRING "$(VBOX_PACKAGE_STRING)"'
7593 $(QUIET)$(APPEND) [email protected] ''
7594 $(QUIET)$(APPEND) [email protected] '#endif'
7595 $(QUIET)$(MV) -f [email protected] $@
7596
7597VBOX_PRODUCT_HEADER = $(PATH_OUT)/product-generated.h
7598
7599$(VBOX_PRODUCT_HEADER): $(VBOX_VERSION_STAMP)
7600 $(call MSG_GENERATE,,$@)
7601 $(QUIET)$(MKDIR) -p $(@D)
7602 $(QUIET)$(RM) -f $@ [email protected]
7603 $(QUIET)$(APPEND) [email protected] '#ifndef ___product_generated_h___'
7604 $(QUIET)$(APPEND) [email protected] '#define ___product_generated_h___'
7605 $(QUIET)$(APPEND) [email protected] ''
7606 $(QUIET)$(APPEND) [email protected] '#define VBOX_VENDOR "$(VBOX_VENDOR)"'
7607 $(QUIET)$(APPEND) [email protected] '#define VBOX_VENDOR_SHORT "$(VBOX_VENDOR_SHORT)"'
7608 $(QUIET)$(APPEND) [email protected] '#define VBOX_PRODUCT "$(VBOX_PRODUCT)"'
7609 $(QUIET)$(APPEND) [email protected] '#define VBOX_BUILD_PUBLISHER "$(VBOX_BUILD_PUBLISHER)"'
7610 $(QUIET)$(APPEND) [email protected] '#define VBOX_C_YEAR "$(VBOX_C_YEAR)"'
7611 $(QUIET)$(APPEND) [email protected] ''
7612 $(QUIET)$(APPEND) [email protected] '#endif'
7613 $(QUIET)$(MV) -f [email protected] $@
7614
7615#
7616# Used for external makefiles which cannot include Config.kmk
7617#
7618$(VBOX_VERSION_MK): $(VBOX_VERSION_STAMP)
7619 $(call MSG_GENERATE,,$@)
7620 $(QUIET)$(RM) -f $@ [email protected]
7621 $(QUIET)$(MKDIR) -p $(@D)
7622 $(QUIET)$(APPEND) [email protected] 'VBOX_VERSION_MAJOR = $(VBOX_VERSION_MAJOR)'
7623 $(QUIET)$(APPEND) [email protected] 'VBOX_VERSION_MINOR = $(VBOX_VERSION_MINOR)'
7624 $(QUIET)$(APPEND) [email protected] 'VBOX_VERSION_BUILD = $(VBOX_VERSION_BUILD)'
7625 $(QUIET)$(APPEND) [email protected] 'VBOX_VERSION_STRING = $(VBOX_VERSION_STRING)'
7626ifneq ($(VBOX_VERSION_PRERELEASE),)
7627 $(QUIET)$(APPEND) [email protected] 'VBOX_VERSION_PRERELEASE = $(strip $(VBOX_VERSION_PRERELEASE))'
7628endif
7629 $(QUIET)$(APPEND) [email protected] 'VBOX_VENDOR = $(VBOX_VENDOR)'
7630 $(QUIET)$(APPEND) [email protected] 'VBOX_VENDOR_SHORT = $(VBOX_VENDOR_SHORT)'
7631 $(QUIET)$(APPEND) [email protected] 'VBOX_PRODUCT = $(VBOX_PRODUCT)'
7632 $(QUIET)$(APPEND) [email protected] 'VBOX_C_YEAR = $(VBOX_C_YEAR)'
7633ifdef VBOX_BUILD_SERVER_BUILD
7634 $(QUIET)$(APPEND) [email protected] 'VBOX_BUILD_SERVER_BUILD = 1'
7635else
7636 $(QUIET)$(APPEND) [email protected] 'VBOX_PRIVATE_BUILD_DESC = Private build by $(USERNAME)'
7637endif
7638 $(QUIET)$(MV) -f [email protected] $@
7639
7640if !defined(VBOX_OSE) && !defined(VBOX_NOINC_LICENSE_VER_KMK)
7641 if1of ($(KBUILD_TARGET), freebsd linux netbsd openbsd solaris)
7642 # VBOX_LICENSE_VER is used in several Makefiles
7643 VBOX_LICENSE_VER_KMK = $(PATH_OUT)/license-version.kmk
7644$(VBOX_LICENSE_VER_KMK): $(VBOX_BRAND_LICENSE_HTML)
7645 $(call MSG_GENERATE,,$(VBOX_LICENSE_VER_KMK))
7646 $(QUIET)$(MKDIR) -p $(@D)
7647 ifdef VBOX_BRAND_LICENSE_VER
7648 $(QUIET)$(RM) -f '$@'
7649 $(APPEND) '$@' 'VBOX_LICENSE_VER=$(VBOX_BRAND_LICENSE_VER)'
7650 else
7651 $(QUIET)$(SED) -e "s/.*License version \([0-9.]*\) *[,&].*/VBOX_LICENSE_VER=\1/;t;d" --output $@ $(VBOX_BRAND_LICENSE_HTML)
7652 endif
7653 -include $(VBOX_LICENSE_VER_KMK)
7654 ifdef VBOX_LICENSE_VER
7655 VBOX_LICENSE_FILES = \
7656 License-$(VBOX_LICENSE_VER).html \
7657 $(foreach f,$(VBOX_INSTALLER_ADD_LANGUAGES),License-$(VBOX_LICENSE_VER)-$(f).html)
7658 VBOX_LICENSE_BINS = $(addprefix $(PATH_STAGE_BIN)/,$(VBOX_LICENSE_FILES))
7659 endif
7660 endif
7661endif
7662
7663
7664ifndef VBOX_NOINC_MISC
7665# Force building of the version header file as the first thing anywhere in
7666# the tree. This eliminates the need for manual dependencies on it.
7667## @todo there gotta be a better way of doing this.
7668Makefile.kmk: | $(VBOX_VERSION_HEADER) $(VBOX_VERSION_MK) $(VBOX_PRODUCT_HEADER) $(VBOX_PACKAGE_HEADER)
7669endif
7670
7671
7672#
7673# Subversion tree revision.
7674#
7675# The VBOX_SVN_REV contains our best guess. Use svn info on the root of the
7676# tree to determine this it if .svn/wc.db or .svn/entries is found (the former
7677# also up to two directory levels higher to allow for checkouts of the entire
7678# repository), otherwise fall back on the Config.kmk revision.
7679#
7680# Makefile rules using this information shall list $(VBOX_SVN_REV_KMK) as a
7681# prerequisite.
7682#
7683SVN ?= svn$(HOSTSUFF_EXE)
7684VBOX_SVN_REV_KMK = $(PATH_OUT)/revision.kmk
7685ifndef VBOX_SVN_REV
7686 VBOX_SVN_REV_FALLBACK := $(patsubst %:,, $Rev: 78643 $ )
7687 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))
7688 ifeq ($(which $(SVN)),)
7689 VBOX_SVN_DEP :=
7690 endif
7691
7692# Rule for generating a timestamp and updating the real thing on change.
7693$(VBOX_SVN_REV_KMK).ts +| $(VBOX_SVN_REV_KMK): $(if $(VBOX_SVN_DEP), $(VBOX_SVN_DEP), $(PATH_ROOT)/Config.kmk)
7694 $(call MSG_GENERATE,,$(VBOX_SVN_REV_KMK))
7695 $(QUIET)$(RM) -f $@ [email protected]
7696 $(QUIET)$(MKDIR) -p $(@D)
7697 ifneq ($(VBOX_SVN_DEP),)
7698 $(REDIRECT) -E 'LC_ALL=C' -wo [email protected] -- $(SVN) info $(PATH_ROOT)
7699 $(SED) -e '/^Last Changed Rev/!d' -e 's/Last Changed Rev\: */export VBOX_SVN_REV=/' --output $@ [email protected]
7700 $(QUIET)$(RM) -f [email protected]
7701 else
7702 $(QUIET)$(APPEND) $@ 'export VBOX_SVN_REV=$(VBOX_SVN_REV_FALLBACK)'
7703 endif
7704 $(QUIET)$(CP) --changed -fv $@ $(VBOX_SVN_REV_KMK)
7705
7706 ifndef VBOX_NOINC_SVN_REV_KMK
7707 include $(VBOX_SVN_REV_KMK)
7708 endif
7709else
7710# allow to overwrite VBOX_SVN_REV externally (mainly for building .debs/.rpms)
7711$(VBOX_SVN_REV_KMK):
7712 $(call MSG_GENERATE,,$(VBOX_SVN_REV_KMK))
7713 $(QUIET)$(RM) -f $@
7714 $(QUIET)$(MKDIR) -p $(@D)
7715 $(QUIET)$(APPEND) $@ 'export VBOX_SVN_REV=$(VBOX_SVN_REV)'
7716 $(QUIET)echo '* $(VBOX_SVN_REV_KMK) was externally overwritten:'
7717 $(QUIET)$(CAT) $(VBOX_SVN_REV_KMK)
7718endif
7719
7720# only needed for VBoxGuest for Linux/FreeBSD guests
7721VBOX_SVN_REV_HEADER = $(PATH_OUT)/revision-generated.h
7722$(VBOX_SVN_REV_HEADER): $(VBOX_SVN_REV_KMK)
7723 $(call MSG_GENERATE,,$@)
7724 $(QUIET)$(RM) -f $@ [email protected]
7725 $(QUIET)$(MKDIR) -p $(@D)
7726 $(QUIET)$(APPEND) [email protected] '#define VBOX_SVN_REV $(VBOX_SVN_REV)'
7727 $(QUIET)$(MV) -f [email protected] $@
7728
7729#
7730# Shared definitions of the XIDL file to use as a source for
7731# generating various other files (VBoxSVC, webservice, docs, front-ends, ...)
7732#
7733
7734# Real XIDL source file; from this we strip the <desc> elements to generate
7735# a second XIDL file, from which the COM/XPCOM IDL files are then generated:
7736VBOX_XIDL_FILE_SRC = $(PATH_ROOT)/src/VBox/Main/idl/VirtualBox.xidl
7737# second XIDL file to use as source for COM/XPCOM IDL (with stripped docs):
7738VBOX_XIDL_FILE = $(PATH_OUT)/obj/VirtualBox_stripped.xidl
7739
7740
7741#
7742# VBOX_SEP needs to be quoted when used on the shell command line.
7743#
7744if1of ($(KBUILD_TARGET), os2 win)
7745 VBOX_SEP = $(SEMICOLON)
7746else
7747 VBOX_SEP = $(COLON)
7748endif
7749
7750# Java compiler options, needs some version checking.
7751if defined(VBOX_JAVA_VERSION) && $(VBOX_JAVA_VERSION) >= 110000
7752 VBOX_JAVA_WS_PATH ?= /usr/share/java
7753 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
7754else if defined(VBOX_JAVA_VERSION) && $(VBOX_JAVA_VERSION) >= 10900
7755 VBOX_JAVA_WS_OPTS ?= --add-modules java.xml.ws
7756endif
7757if defined(VBOX_JAVA_VERSION) && $(VBOX_JAVA_VERSION) >= 110000
7758 VBOX_JAVAC_OPTS = -encoding UTF-8 -source 9 -target 9 -Xlint:unchecked
7759else if defined(VBOX_JAVA_VERSION) && $(VBOX_JAVA_VERSION) >= 100000
7760 VBOX_JAVAC_OPTS = -encoding UTF-8 -source 6 -target 6 -Xlint:unchecked
7761else
7762 VBOX_JAVAC_OPTS = -encoding UTF-8 -source 1.5 -target 1.5 -Xlint:unchecked
7763endif
7764VBOX_JAVADOC_OPTS = -encoding UTF-8
7765
7766
7767#
7768# Legacy.
7769#
7770## @todo try remove this.
7771ifneq ($(LOCALCFG),)
7772 include $(LOCALCFG)
7773endif
7774
7775
7776#
7777# For efficiently build serveral build types / archs.
7778#
7779both-debug-release both-release-debug: \
7780 build-release-$(KBUILD_TARGET_ARCH) \
7781 build-debug-$(KBUILD_TARGET_ARCH)
7782both-x86-amd64 both-amd64-x86: \
7783 build-$(KBUILD_TYPE)-x86 \
7784 build-$(KBUILD_TYPE)-x86
7785both-types-archs both-archs-types: \
7786 build-debug-x86 \
7787 build-release-x86 \
7788 build-debug-amd64 \
7789 build-release-amd64
7790
7791build-release-x86:
7792 +$(MAKE) KBUILD_TYPE=release KBUILD_TARGET_ARCH=x86
7793
7794build-debug-x86:
7795 +$(MAKE) KBUILD_TYPE=debug KBUILD_TARGET_ARCH=x86
7796
7797build-release-amd64:
7798 +$(MAKE) KBUILD_TYPE=release KBUILD_TARGET_ARCH=amd64
7799
7800build-debug-amd64:
7801 +$(MAKE) KBUILD_TYPE=debug KBUILD_TARGET_ARCH=amd64
7802
7803
7804#
7805# Some extra goals.
7806#
7807.PHONY: up update st stat status
7808up update::
7809 $(SVN) up
7810
7811up2 update2::
7812 $(SVN) up --ignore-externals
7813
7814st stat status:
7815 $(SVN) status
7816
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