~ubuntu-branches/ubuntu/trusty/virtualbox-lts-xenial/trusty-proposed

« back to all changes in this revision

Viewing changes to .pc/29-fix-ftbfs-as-needed.patch/Config.kmk

  • Committer: Package Import Robot
  • Author(s): Gianfranco Costamagna
  • Date: 2016-02-23 14:28:26 UTC
  • Revision ID: package-import@ubuntu.com-20160223142826-kpprg3lfwn2izud0
Tags: 4.3.36-dfsg-1+deb8u1ubuntu1.14.04.1~14.04.4
Use lts-xenial stack. Build only guest additions (LP: #1424769).

Show diffs side-by-side

added added

removed removed

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