VirtualBox

source: vbox/trunk/Config.kmk@ 53981

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

Adding the VBoxDTrace wrapper binary to the installers. Fixing extpack build break. Simplified VBOX_WITH_DTRACE* test in the makefiles.

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

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