VirtualBox

source: vbox/trunk/Config.kmk@ 55121

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

Assorted fixes for FreeBSD hosts, VBox compiles and runs again without further patches (tested on 10.1 amd64 )

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

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