VirtualBox

source: vbox/trunk/Config.kmk@ 64281

Last change on this file since 64281 was 64270, checked in by vboxsync, 8 years ago

bugref:3810: X11 Guest Additions maintenance: Add two new defines - VBOX_USE_SYSTEM_GL_HEADERS and VBOX_NO_LEGACY_XORG_X11 - for the benefit of people doing distribution builds. They make us use system OpenGL headers for building our libGL and prevent us building X.Org drivers and stub libraries for linking on old distributions. These changes are to be tested by people who need them, not by upstream developers.

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

© 2023 Oracle
ContactPrivacy policyTerms of Use