VirtualBox

source: vbox/trunk/Config.kmk@ 62580

Last change on this file since 62580 was 62580, checked in by vboxsync, 9 years ago

Audio: Initial commit of audio debug backend. This can dump the output streams to single .WAV files and also will later act as an input mockup object for testing input (capturing) audio data.

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

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette