VirtualBox

source: vbox/trunk/Config.kmk@ 69105

Last change on this file since 69105 was 69098, checked in by vboxsync, 7 years ago

Clean up XFree86 driver header files.
bugref:3810: X11 Guest Additions maintenance
Over the years we have cleaned up the layout in the tree of the X.Org
header files we use to build drivers. The XFree86 ones were still in their
original, rather sub-optimal layout. This change fixes that.

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

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