VirtualBox

source: vbox/trunk/Config.kmk@ 41752

Last change on this file since 41752 was 41752, checked in by vboxsync, 12 years ago

iPXE: save a tiny bit more ROM space by ripping out the embedded image support, use it as the compiled in PXE ROM, but stick to Etherboot for OSE to avoid breakage until iPXE is included in the tree

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