VirtualBox

source: vbox/trunk/Config.kmk@ 71075

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

Additions/linux: support producing builds which work with glibc 2.3.
bugref:9112: tools: update i386 Linux Additions build tool
Add an option - VBOX_WITH_OLD_GLIBC_SUPPORT - for producing Linux Additions
builds which work with glibc 2.3, by not referencing symbols which were
introduced later, including improved versions of APIs supported in glibc 2.3,
by not using GNU_HASH tags and by not using the stack protector.

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