VirtualBox

source: vbox/trunk/Config.kmk@ 55771

Last change on this file since 55771 was 55771, checked in by vboxsync, 10 years ago

Use defines in the RC files and make those defines compatible with what we use in C/C++ code.

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

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