VirtualBox

source: vbox/trunk/Config.kmk@ 75149

Last change on this file since 75149 was 75141, checked in by vboxsync, 6 years ago

iprt/symvers.h, Config.kmk: build binary-compatible Additions on glibc 2.18.
bugref:9112: Linux Additions: fix building binaries for older Linux user space
Fix the last change, which changed the wrong part of the XF86 module template
while attempting to prevent it using the iprt symvers.h file.

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

© 2023 Oracle
ContactPrivacy policyTerms of Use