VirtualBox

source: vbox/trunk/Config.kmk@ 19953

Last change on this file since 19953 was 19761, checked in by vboxsync, 16 years ago

Fix allocating memory for code on FreeBSD AMD64. Strip debug symbols from the kernel driver because they cause warnings about unsupported relocation type 10 in the log

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id Revision
File size: 153.9 KB
Line 
1# $Id: Config.kmk 19761 2009-05-17 19:30:52Z vboxsync $
2## @file
3# The global build configuration file for VBox.
4#
5# This file gets included by all makefiles through the
6# include $(KBUILD_PATH)/header.kmk statement.
7#
8
9#
10# Copyright (C) 2006-2007 Sun Microsystems, Inc.
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 as published by the Free Software Foundation,
16# in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
17# distribution. VirtualBox OSE is distributed in the hope that it will
18# be useful, but WITHOUT ANY WARRANTY of any kind.
19#
20
21# Marker.
22VBOX_ROOT_CONFIG_KMK_INCLUDED = 1
23
24#
25# kBuild stuff
26#
27
28# Experimental
29.SECONDTARGETEXPANSION:
30
31# Enable automatic installation of what's built.
32KBUILD_DO_AUTO_INSTALL := 1
33PASSES := $(filter-out PACKING,$(PASSES)) PACKING # temporary hack
34# Modify the order of the INSTALLS and OTHERS passes.
35DEFAULT_PASSES := BLDPROGS LIBRARIES DLLS BINARIES INSTALLS OTHERS
36# Modify the build types.
37## @todo checked and dbgopt
38KBUILD_BLD_TYPES = release profile debug kprofile
39
40## 'strict' builds
41# Same as release builds, except that RT_STRICT and VBOX_STRICT are defined,
42# meaning all assertions are in action. (Appending means '.strict' props take
43# precedence in argument lists.)
44KBUILD_BLD_TYPES += strict
45BLD_TYPE_strict_EXTENDS = release
46BLD_TYPE_strict_EXTENDS_BY = appending
47
48## 'dbgopt' builds
49# Same as debug builds, except that compiler optimizations are enabled. This
50# intended for cases where all the debug facitities (logging, assertions, ++)
51# is wanted but actual source level debugging as important as execution speed.
52KBUILD_BLD_TYPES += dbgopt
53BLD_TYPE_dbgopt_EXTENDS = debug
54BLD_TYPE_dbgopt_EXTENDS_BY = appending
55
56# Temporary hack for kBuild ticket #83.
57## @todo kBuild: remove after closing ticket #83.
58PROPS_ACCUMULATE_L_LNK += INTERMEDIATES
59PROPS_PROGRAMS_ACCUMULATE_L += INTERMEDIATES
60PROPS_LIBRARIES_ACCUMULATE_L += INTERMEDIATES
61PROPS_DLLS_ACCUMULATE_L += INTERMEDIATES
62PROPS_SYSMODS_ACCUMULATE_L += INTERMEDIATES
63PROPS_MISCBINS_ACCUMULATE_L += INTERMEDIATES
64
65# Install paths.
66PATH_INS = $(PATH_OUT)
67ifeq ($(KBUILD_TARGET),darwin)
68 INST_DIST = dist/
69 INST_SDK = $(INST_DIST)sdk/
70
71 # the bundles
72 INST_VIRTUALBOX = $(INST_DIST)VirtualBox.app/
73 INST_VBOXDRV = $(INST_DIST)VBoxDrv.kext/
74 INST_VBOXDRV_TIGER = $(INST_DIST)VBoxDrvTiger.kext/
75 INST_VBOXNETFLT = $(INST_DIST)VBoxNetFlt.kext/
76 INST_VBOXNETADP = $(INST_DIST)VBoxNetAdp.kext/
77 INST_VBOXUSB = $(INST_DIST)VBoxUSB.kext/
78 INST_VBOXUSB_TIGER = $(INST_DIST)VBoxUSBTiger.kext/
79
80 # put everything in the VirtualBox app bundle.
81 INST_BIN = $(INST_VIRTUALBOX)Contents/MacOS/
82 INST_DLL = $(INST_BIN)
83 INST_SYS = $(INST_BIN)
84 INST_TESTCASE = $(INST_BIN)testcase/
85 INST_ADDITIONS = $(INST_BIN)additions/
86 INST_ADDITIONS_ISO = $(INST_BIN)
87
88 # other paths
89 INST_TESTSUITE = testsuite/
90 INST_LIB = lib/
91 INST_ADDITIONS_LIB = $(PATH_LIB)/additions/
92
93else
94
95 INST_BIN = bin/
96 INST_DIST = $(INST_BIN)
97 INST_DLL = $(INST_BIN)
98 INST_SDK = $(INST_BIN)sdk/
99 INST_DLL = $(INST_BIN)
100 INST_SYS = $(INST_BIN)
101 INST_TESTCASE = $(INST_BIN)testcase/
102 INST_ADDITIONS = $(INST_BIN)additions/
103 INST_ADDITIONS_ISO = $(INST_ADDITIONS)
104
105 INST_TESTSUITE = testsuite/
106 INST_LIB = lib/
107 INST_ADDITIONS_LIB = $(INST_LIB)additions/
108endif
109
110PATH_BIN = $(patsubst %/,%,$(PATH_INS)/$(INST_BIN))
111PATH_DLL = $(patsubst %/,%,$(PATH_INS)/$(INST_DLL))
112PATH_SYS = $(patsubst %/,%,$(PATH_INS)/$(INST_SYS))
113PATH_LIB = $(patsubst %/,%,$(PATH_INS)/$(INST_LIB))
114PATH_DOC = $(PATH_OUT)/doc
115VBOX_PATH_SDK = $(patsubst %/,%,$(PATH_INS)/$(INST_SDK))
116VBOX_PATH_DIST = $(patsubst %/,%,$(PATH_INS)/$(INST_DIST))
117VBOX_PATH_TESTSUITE = $(patsubst %/,%,$(PATH_INS)/$(INST_TESTSUITE))
118VBOX_PATH_ADDITIONS = $(patsubst %/,%,$(PATH_INS)/$(INST_ADDITIONS))
119VBOX_PATH_ADDITIONS_ISO = $(patsubst %/,%,$(PATH_INS)/$(INST_ADDITIONS_ISO))
120VBOX_PATH_ADDITIONS_LIB = $(patsubst %/,%,$(PATH_INS)/$(INST_ADDITIONS_LIB))
121
122
123# Delete targets on failure.
124.DELETE_ON_ERROR:
125
126# Notify about important kBuild updates.
127ifneq ($(call if-expr, $(KMK_REVISION) >= 2274 && $(KBUILD_KMK_REVISION) >= 2206,fine,old),fine)
128 $(error You must update kBuild! KMK_REVISION=$(KMK_REVISION) KBUILD_KMK_REVISION=$(KBUILD_KMK_REVISION) KBUILD_PATH=$(KBUILD_PATH))
129endif
130
131#
132# Define USERNAME early on.
133#
134ifndef USERNAME
135 ifdef USER
136 USERNAME = $(USER)
137 else
138 $(warning Warning: You must have USERNAME or USER in your environment.)
139 endif
140endif
141
142#
143# The VirtualBox version.
144#
145
146# Major version.
147VBOX_VERSION_MAJOR = 2
148# Minor version.
149VBOX_VERSION_MINOR = 2
150# This is the current build number. It should be increased every time we publish a
151# new build. The define is available in every source file. Only even build numbers
152# will be published, odd numbers are set during development.
153VBOX_VERSION_BUILD = 51
154# Full version string (may include more than just x.y.z, but no spaces or other problematic chars).
155VBOX_VERSION_STRING = $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
156# Force the additions.sh script to get an exact additions build when we're doing the release.
157
158ifeq ($(int-mod $(VBOX_VERSION_BUILD),2),0)
159 export VBOX_ADDITIONS_SH_MODE = release
160 export VBOX_DOCUMENTATION_SH_MODE = release
161endif
162
163
164#
165# The VirtualBox package type.
166#
167ifeq ($(KBUILD_TARGET),win)
168 VBOX_PACKAGE_OS = WINDOWS
169else ifeq ($(KBUILD_TARGET),linux)
170 VBOX_PACKAGE_OS = LINUX
171else ifeq ($(KBUILD_TARGET),darwin)
172 VBOX_PACKAGE_OS = DARWIN
173else ifeq ($(KBUILD_TARGET),solaris)
174 VBOX_PACKAGE_OS = SOLARIS
175else ifeq ($(KBUILD_TARGET),os2)
176 VBOX_PACKAGE_OS = OS2
177else if1of ($(KBUILD_TARGET), dragonfly freebsd netbsd openbsd)
178 VBOX_PACKAGE_OS = BSD
179else
180 $(error Cannot determine VBOX_PACKAGE_OS)
181endif
182ifeq ($(KBUILD_TARGET_ARCH),x86)
183 VBOX_PACKAGE_ARCH = 32BITS
184else
185 VBOX_PACKAGE_ARCH = 64BITS
186endif
187# distribution, mostly for Linux/Solaris where we support different distributions
188# this strip will be overridden by the Linux packaging scripts
189VBOX_PACKAGE_DIST ?= GENERIC
190# Full string
191VBOX_PACKAGE_STRING = $(VBOX_PACKAGE_OS)_$(VBOX_PACKAGE_ARCH)_$(VBOX_PACKAGE_DIST)
192
193
194#
195# The VirtualBox Configuration Defaults.
196#
197# We try to document all the build configuration options here, thing which
198# aren't enabled by default is left commented out just to show that they
199# exist and which value they should have (usually 1, but anyway).
200#
201
202# Virtual single makefile.
203# If undefined, the tranditional recursive make method will be used.
204VBOX_SINGLE_MAKEFILE = 1
205
206# This indicates that additions (of some kind or another) is being _built_.
207# VBOX_WITHOUT_ADDITIONS overrides it.
208#if1of ($(KBUILD_TARGET), freebsd linux os2 solaris win)
209if1of ($(KBUILD_TARGET), linux solaris win)
210 VBOX_WITH_ADDITIONS = 1
211endif
212# Build the optional ring-0 part of the additions for syntax checking.
213# (Except when cross-building on linux since we're using /usr/src/...)
214ifn1of ($(KBUILD_TARGET).$(KBUILD_HOST_ARCH).$(KBUILD_TARGET_ARCH), linux.x86.amd64 linux.amd64.x86)
215 VBOX_WITH_ADDITION_DRIVERS = 1
216endif
217# Build X11 additions. Can be disabled separately.
218if1of ($(KBUILD_TARGET), dragonfly freebsd linux netbsd openbsd solaris)
219 VBOX_WITH_X11_ADDITIONS = 1
220endif
221# Enable the building of shared folders in the windows additions.
222VBOX_WITH_WIN32_ADDITIONS_SHAREDFOLDERS = 1
223# Take the binaries of the OS/2 Additions.
224VBOX_WITH_OS2_ADDITIONS_BIN = 1
225# Use additions from the build server.
226#VBOX_WITH_ADDITIONS_FROM_BUILD_SERVER = 1
227# Include additions in the package
228VBOX_WITH_ADDITIONS_PACKING = 1
229# Don't bother with additions, overrides VBOX_WITH_ADDITIONS.
230# This is not used by makefiles, only Config.kmk, see below.
231#VBOX_WITHOUT_ADDITIONS = 1
232# Only build the additions (for the additions build server).
233#VBOX_ONLY_ADDITIONS = 1
234ifdef VBOX_ADDITIONS_ONLY # typical mistake.
235 $(error It is VBOX_ONLY_ADDITIONS=1 not VBOX_ADDITIONS_ONLY!)
236endif
237
238# When build SDK-only, no need for additions
239ifdef VBOX_ONLY_SDK
240 VBOX_WITHOUT_ADDITIONS=1
241endif
242
243# Don't create the additions ISO.
244# (Used by the additions build server, don't invert it.)
245#VBOX_WITHOUT_ADDITIONS_ISO = 1
246
247# the documentation
248VBOX_WITH_DOCS = 1
249# Use documentation from the build server.
250#VBOX_WITH_DOCS_FROM_BUILD_SERVER = 1
251# Include documentation in the package
252VBOX_WITH_DOCS_PACKING = 1
253# Don't bother with documentation, overrides VBOX_WITH_DOCS.
254# This is not used by makefiles, only Config.kmk, see below.
255#VBOX_WITHOUT_DOCS = 1
256# Only build the documentation (for the documentation build server).
257#VBOX_ONLY_DOCS = 1
258ifdef VBOX_DOCS_ONLY # typical mistake.
259 $(error It is VBOX_ONLY_DOCS=1 not VBOX_DOCS_ONLY!)
260endif
261
262# build the installer
263VBOX_WITH_INSTALLER = 1
264# enable VRDP server
265VBOX_WITH_VRDP = 1
266# build VRDP authentication modules
267VBOX_WITH_VRDP_AUTHMOD = 1
268# build enhanced version of rdesktop
269VBOX_WITH_VRDP_RDESKTOP = 1
270# Activate this to force the VM to pre-allocate the guest RAM before startup
271VBOX_WITH_PREALLOC_RAM_BY_DEFAULT =
272# The kernel driver/module and related runtime libraries.
273VBOX_WITH_VBOXDRV = 1
274# build with secure label support
275ifeq ($(filter win.amd64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),) # too much work with freetype and all that.
276VBOX_WITH_SECURELABEL = 1
277endif
278
279# The main api.
280VBOX_WITH_MAIN = 1
281# The webservices api.
282VBOX_WITH_WEBSERVICES = 1
283# The SDL based GUI.
284VBOX_WITH_VBOXSDL = 1
285# The basic frontend (w/o Main).
286VBOX_WITH_VBOXBFE = 1
287# The Qt 4 GUI.
288VBOX_WITH_QTGUI = 1
289# Indicates the Qt is Cocoa based on the Mac.
290ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),darwin.amd64)
291 VBOX_WITH_COCOA_QT = 1
292endif
293if1of ($(USERNAME),poetzsch)
294 ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),darwin.x86)
295 VBOX_WITH_COCOA_QT = 1
296 endif
297endif
298# The headless frontend.
299VBOX_WITH_HEADLESS = 1
300## the Direct Framebuffer GUI
301#VBOX_WITH_VBOXFB = 1
302# Enable the debugger.
303VBOX_WITH_DEBUGGER = 1
304# Enable the debugger GUI.
305VBOX_WITH_DEBUGGER_GUI = 1
306# Build the Host Guest Communication Manager component.
307VBOX_WITH_HGCM = 1
308## Build the bugcheck detection code.
309#VBOX_WITH_GUEST_BUGCHECK_DETECTION =
310# Enable the USB feature.
311VBOX_WITH_USB = 1
312# Enable the USB 2.0 controller.
313VBOX_WITH_EHCI = 1
314# Enable the ISCSI feature, with INIP support.
315VBOX_WITH_ISCSI = 1
316VBOX_WITH_INIP = 1
317# Enable the E1000 feature.
318VBOX_WITH_E1000 = 1
319# Enable ALSA support for Linux.
320VBOX_WITH_ALSA = 1
321# Enable Pulse support for Linux.
322VBOX_WITH_PULSE = 1
323# Enable statically linked dbus support for Linux.
324ifeq ($(KBUILD_TARGET),linux)
325 VBOX_WITH_DBUS = 1
326endif
327# Disable WINMM support for Windows (not implemented).
328VBOX_WITH_WINMM =
329# Disable VMI BIOS (not yet ready).
330VBOX_WITH_VMI =
331# Enable the kchmviewer.
332VBOX_WITH_KCHMVIEWER = 1
333# Build the testsuite.
334VBOX_WITH_TESTSUITE = 1
335# Build the testcases.
336VBOX_WITH_TESTCASES = 1
337# Set this to not use COM or XPCOM in places where it can be avoided.
338#VBOX_WITHOUT_COM = 1
339# Set this to prefix all C symbols in XPCOM, to avoid dynamic linking problems
340# caused by our XPCOM library polluting the symbol namespace for system libs.
341if1of ($(KBUILD_TARGET), linux solaris)
342 VBOX_WITH_XPCOM_NAMESPACE_CLEANUP = 1
343endif
344# Set this to skip installing the redistributable compiler runtime.
345#VBOX_WITHOUT_COMPILER_REDIST = 1
346# Enabled internal networking.
347VBOX_WITH_INTERNAL_NETWORKING = 1
348# Enables the ffmpeg module for recording test runs.
349# Enable this for non-Linux builds later.
350ifeq ($(KBUILD_TARGET),linux)
351# VBOX_WITH_FFMPEG = 1
352endif
353# Enable crOpenGL service
354if1of ($(KBUILD_TARGET),win linux solaris darwin)
355 VBOX_WITH_CROGL = 1
356endif
357# Enable shared folders
358VBOX_WITH_SHARED_FOLDERS = 1
359# Enable shared clipboard
360VBOX_WITH_SHARED_CLIPBOARD = 1
361# Enable the Intel PXE ROM (replaces Etherboot).
362VBOX_WITH_INTEL_PXE = 1
363# Strip binaries of release and profile builds
364VBOX_DO_STRIP = $(if $(filter release profile,$(KBUILD_TYPE)),1,)
365# Strip R0/GC modules (current requirement for our loader)
366VBOX_DO_STRIP_MODULES = 1
367# Use kStuff for MACH-O and LX binary loading.
368if1of ($(KBUILD_TARGET),darwin os2)
369IPRT_WITH_KSTUFF = 1
370endif
371# Enable Crossbow support for Solaris.
372VBOX_WITH_CROSSBOW = 1
373# Enable setuid wrapper for Solaris.
374#VBOX_WITH_SUID_WRAPPER = 1
375# Enable the PDM Lock and let I/O threads call into the PICs.
376VBOX_WITH_PDM_LOCK = 1
377# Enable Seamless mode
378VBOX_X11_SEAMLESS_GUEST = 1
379# Enable the virtual SATA/AHCI controller
380VBOX_WITH_AHCI = 1
381# Enable the new async completion manager
382VBOX_WITH_PDM_ASYNC_COMPLETION = 1
383# Temporary switch for enabling / disabling the new USB code on Darwin.
384VBOX_WITH_NEW_USB_CODE_ON_DARWIN=1
385# Enable the hal/sysfs USB code on Linux. This depends on VBOX_WITH_DBUS.
386ifdef VBOX_WITH_DBUS
387 VBOX_USB_WITH_SYSFS=1
388endif
389# Use the new VBI module on Solaris.
390VBOX_WITH_SOLARIS_VBI = 1
391# Enable 64 bits guest pointers.
392VBOX_WITH_64_BITS_GUESTS = 1
393# Enable SMP support in guests
394##VBOX_WITH_SMP_GUESTS = 1
395# Enable the host/guest information service (aka guest properties).
396VBOX_WITH_GUEST_PROPS = 1
397# Enable performance API.
398VBOX_WITH_RESOURCE_USAGE_API = 1
399# Enables all the doxgen bits.
400VBOX_WITH_ALL_DOXYGEN_TARGETS = 1
401# Enable BusLogic SCSI host adapter
402VBOX_WITH_BUSLOGIC = 1
403# Enable LsiLogic SCSI host adapter
404VBOX_WITH_LSILOGIC = 1
405# Enable HPET device
406VBOX_WITH_HPET = 1
407# Enable LPC device
408VBOX_WITH_LPC = 1
409# Enable SCSI drivers
410VBOX_WITH_SCSI = 1
411# Enable host network interface API.
412if1of ($(KBUILD_TARGET), darwin solaris linux win freebsd)
413 VBOX_WITH_HOSTNETIF_API = 1
414endif
415# Enables the Python<->XPCOM and later Python<->COM bindings.
416# (Current not enabled by default because all the build servers has
417# different Python versions installed and would start burning.)
418if1of ($(KBUILD_TARGET), darwin solaris)
419 VBOX_WITH_PYTHON = 1
420endif
421# Enables hardening.
422# Most developers will want to disable this in their LocalConfig.kmk.
423ifn1of ($(KBUILD_TARGET), win)
424 VBOX_WITH_HARDENING = 1
425endif
426# Where the application files are (going to be) installed.
427#VBOX_PATH_APP_PRIVATE = /usr/lib/virtualbox
428ifdef VBOX_WITH_HARDENING
429 if1of ($(KBUILD_TARGET), solaris)
430 VBOX_PATH_APP_PRIVATE = /opt/VirtualBox/$(if-expr $(KBUILD_TARGET_ARCH) == "amd64",amd64,i386)
431 else ifeq ($(KBUILD_TARGET),darwin)
432 VBOX_PATH_APP_PRIVATE = /Applications/VirtualBox.app/Contents/MacOS
433 else ifeq ($(KBUILD_TARGET),freebsd)
434 VBOX_PATH_APP_PRIVATE = /usr/local/lib/virtualbox
435 endif
436endif
437# Where the architecture specific application files are (going to be) installed.
438#VBOX_PATH_APP_PRIVATE_ARCH = /usr/lib/virtualbox
439ifdef VBOX_WITH_HARDENING
440 if1of ($(KBUILD_TARGET), darwin solaris)
441 VBOX_PATH_APP_PRIVATE_ARCH = $(VBOX_PATH_APP_PRIVATE)
442 endif
443endif
444# Where the shared libraries are (going to be) installed.
445#VBOX_PATH_SHARED_LIBS = /usr/lib
446ifdef VBOX_WITH_HARDENING
447 if1of ($(KBUILD_TARGET), darwin solaris)
448 VBOX_PATH_SHARED_LIBS = $(VBOX_PATH_APP_PRIVATE)
449 endif
450endif
451# Where the documentation is (going to be) installed.
452#VBOX_PATH_APP_DOCS = /usr/share/doc/virtualbox
453ifdef VBOX_WITH_HARDENING
454 if1of ($(KBUILD_TARGET), darwin solaris)
455 VBOX_PATH_APP_DOCS = $(VBOX_PATH_APP_PRIVATE)
456 endif
457endif
458# The DT_RPATH/DT_RUNPATH to embed into the binaries (ELF).
459# (This one is used for all binaries, there is no need to adjust this
460# depending on the location of the object.)
461#VBOX_WITH_RUNPATH = /usr/lib/virtualbox
462ifdef VBOX_WITH_HARDENING
463 if1of ($(KBUILD_TARGET), solaris freebsd)
464 VBOX_WITH_RUNPATH = $(VBOX_PATH_APP_PRIVATE)
465 endif
466endif
467# Enable use of the $ORIGIN DT_RPATH/DT_RUNPATH feature (ELF).
468# Because of the setuid usage on all ELF platforms when hardening the build
469# things gets a bit complicated since the $ORIGIN+setuid policy differs.
470#VBOX_WITH_ORIGIN=1
471ifdef VBOX_WITH_HARDENING
472 if1of ($(KBUILD_TARGET), linux)
473 VBOX_WITH_ORIGIN = 1
474 endif
475else if1of ($(KBUILD_TARGET), linux solaris)
476 VBOX_WITH_ORIGIN = 1
477endif
478# Enable the system wide support service/daemon.
479# Work in progress, but required for hardening on Windows.
480#VBOX_WITH_SUPSVC = 1
481ifdef VBOX_WITH_HARDENING
482 if1of ($(KBUILD_TARGET), win)
483 VBOX_WITH_SUPSVC = 1
484 endif
485endif
486# Use VBoxNetFlt for host interface networking.
487if1of ($(KBUILD_TARGET), darwin linux solaris win freebsd)
488 VBOX_WITH_NETFLT = 1
489 VBOX_SOLARIS_NSL_RESOLVED = 1
490 if1of ($(KBUILD_TARGET), darwin solaris linux)
491 VBOX_WITH_NETADP = 1
492 endif
493endif
494## Use the new version of liblzf. Remove with the old liblzf.
495#VBOX_WITH_NEW_LIBLZF = 1
496## For experimenting with linking libxml2 into VBoxRT.
497#VBOX_WITH_LIBXML2_IN_VBOXRT = 1
498
499#
500# Branding
501#
502VBOX_BRAND_BIOS_LOGO := $(PATH_ROOT)/src/VBox/Devices/Graphics/BIOS/sun_logo.bmp
503VBOX_BRAND_LICENSE_HTML := $(PATH_ROOT)/doc/License.html
504VBOX_BRAND_LICENSE_RTF := $(PATH_ROOT)/doc/License.rtf
505VBOX_BRAND_LICENSE_TXT := $(PATH_ROOT)/doc/License.txt
506VBOX_BRAND_LICENSE_VER :=
507VBOX_BRAND_GUI_ABOUT_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/NonOSE/about.png
508VBOX_BRAND_GUI_ABOUT_16PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/NonOSE/about_16px.png
509VBOX_BRAND_GUI_VBOX_16PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/NonOSE/VirtualBox_16px.png
510VBOX_BRAND_GUI_VBOX_20PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/NonOSE/VirtualBox_20px.png
511VBOX_BRAND_GUI_VBOX_32PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/NonOSE/VirtualBox_32px.png
512VBOX_BRAND_GUI_VBOX_40PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/NonOSE/VirtualBox_40px.png
513VBOX_BRAND_GUI_VBOX_48PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/NonOSE/VirtualBox_48px.png
514VBOX_BRAND_GUI_VBOX_64PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/NonOSE/VirtualBox_64px.png
515VBOX_BRAND_GUI_CUBE_42PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/NonOSE/VirtualBox_cube_42px.png
516VBOX_BRAND_WIN_INST_DLGBMP := $(PATH_ROOT)/src/VBox/Installer/win/Binary/Dialog.bmp
517VBOX_BRAND_WIN_INST_EXT :=
518VBOX_BRAND_WIN_ADD_INST_DLGBMP := $(PATH_ROOT)/src/VBox/Additions/WINNT/Installer/welcome.bmp
519VBOX_BRAND_DARWIN_DISKIMAGE_DS_STORE := $(PATH_ROOT)/src/VBox/Installer/darwin/DiskImage/DS_Store
520VBOX_BRAND_DARWIN_DISKIMAGE_BG := $(PATH_ROOT)/src/VBox/Installer/darwin/DiskImage/vbox_folder.tiff
521VBOX_BRAND_DARWIN_INSTALLER_BG := $(PATH_ROOT)/src/VBox/Installer/darwin/VirtualBox_mpkg/background.tif
522
523#
524# Skip stuff.
525#
526
527# VBOX_QUICK can be used by core developers to speed to the build
528ifdef VBOX_QUICK
529 # undefine variables by assigning blank.
530 VBOX_WITH_TESTSUITE=
531 VBOX_WITH_TESTCASES=
532 VBOX_WITH_MAIN =
533 VBOX_WITH_VBOXSDL =
534 VBOX_WITH_VBOXBFE =
535 VBOX_WITH_QTGUI =
536 VBOX_WITH_DEBUGGER_GUI =
537 VBOX_WITH_DOCS =
538endif # VBOX_QUICK
539
540ifeq ($(KBUILD_TARGET),darwin)
541 # Don't bother with SDL ttf for now.
542 VBOX_WITH_SECURELABEL=
543 # We'll use the native html/help viewer.
544 VBOX_WITH_KCHMVIEWER=
545 # Later:
546 VBOX_WITH_VRDP_AUTHMOD=
547 VBOX_WITH_VRDP_RDESKTOP=
548 VBOX_WITH_PDM_ASYNC_COMPLETION=
549 ifeq ($(KBUILD_TARGET_ARCH),amd64)
550 # Permanent (no working SDL).
551 VBOX_WITH_VBOXSDL=
552 VBOX_WITH_VBOXBFE=
553 endif
554endif
555
556ifeq ($(KBUILD_TARGET),freebsd)
557 VBOX_WITH_WEBSERVICES=
558 VBOX_WITH_INSTALLER=
559 VBOX_WITH_SECURELABEL=
560 VBOX_WITH_VRDP_AUTHMOD=
561 VBOX_WITH_VRDP_RDESKTOP=
562 VBOX_WITH_TESTSUITE=
563 VBOX_WITH_USB=
564 VBOX_WITH_EHCI=
565 VBOX_WITH_DOCS=
566 VBOX_WITH_KCHMVIEWER=
567endif
568
569ifeq ($(KBUILD_TARGET),l4)
570 VBOX_WITH_VBOXDRV=
571 VBOX_WITH_ADDITION_DRIVERS=
572 VBOX_WITH_VRDP=
573 VBOX_WITH_HEADLESS=
574 VBOX_WITH_VBOXSDL=
575 VBOX_WITH_QTGUI=
576 VBOX_WITH_MAIN=
577 VBOX_WITH_DOCS=
578 VBOX_WITH_ISCSI=
579 VBOX_WITH_INIP=
580 VBOX_WITH_INTERNAL_NETWORKING=
581 VBOX_WITH_PDM_ASYNC_COMPLETION=
582 VBOX_WITH_KCHMVIEWER=
583 VBOX_WITH_HARDENING=
584endif
585
586ifeq ($(KBUILD_TARGET),os2)
587 VBOX_WITH_WEBSERVICES=
588 VBOX_WITH_INSTALLER=
589 VBOX_WITH_SECURELABEL=
590 VBOX_WITH_VRDP_AUTHMOD=
591 VBOX_WITH_VRDP_RDESKTOP=
592 VBOX_WITH_TESTSUITE=
593 VBOX_WITH_QTGUI=
594 VBOX_WITH_USB=
595 VBOX_WITH_EHCI=
596 VBOX_WITH_DOCS=
597 VBOX_WITH_PDM_ASYNC_COMPLETION=
598 VBOX_WITH_KCHMVIEWER=
599 VBOX_WITH_HARDENING=
600endif
601
602ifeq ($(KBUILD_TARGET),solaris)
603 VBOX_WITH_SECURELABEL=
604 VBOX_WITH_OGL=
605endif
606
607ifeq ($(KBUILD_TARGET),win)
608 VBOX_WITH_VRDP_RDESKTOP=
609 VBOX_WITH_KCHMVIEWER=
610endif
611
612
613#
614# Include automatic and local config file to override the above settings
615# and to provide defaults for the settings below this point.
616#
617ifndef AUTOCFG
618 AUTOCFG := $(wildcard $(PATH_ROOT)/AutoConfig.kmk)
619endif
620ifneq ($(AUTOCFG),)
621 include $(AUTOCFG)
622endif
623
624ifndef LOCALCFG
625 LOCALCFG := $(wildcard $(PATH_ROOT)/LocalConfig.kmk)
626 ifneq ($(LOCALCFG),)
627 include $(LOCALCFG)
628 endif
629else
630 # Ignore it if it doesn't exist.
631 if exists "$(LOCALCFG)"
632 include $(LOCALCFG)
633 else
634 $(warning LOCALCFG='$(LOCALCFG)' does not exist)
635 override LOCALCFG :=
636 endif
637endif
638
639#
640# Allow to overwrite the branding information from an external file
641#
642ifdef VBOX_BRANDING_CFG
643 include $(VBOX_BRANDING_CFG)
644endif
645
646#
647# Bitch about old settings.
648#
649ifdef VBOX_WITHOUT_LINUX_COMPILER_H
650 $(warning VBOX_WITHOUT_LINUX_COMPILER_H was renamed to VBOX_WITH_LINUX_COMPILER_H, the meaning is inverted.)
651endif
652
653#
654# Disable components that are not open sourced.
655#
656ifdef VBOX_OSE
657 VBOX_WITH_VRDP=
658 VBOX_WITH_USB=
659 VBOX_WITH_EHCI=
660 VBOX_WITH_VMI=
661 ifn1of ($(KBUILD_TARGET), darwin linux solaris)
662 VBOX_WITH_NETFLT=
663 endif
664 VBOX_WITH_DEBUGGER=
665 VBOX_WITH_DEBUGGER_GUI=
666 VBOX_WITH_WIN32_ADDITIONS_SHAREDFOLDERS=
667 VBOX_WITH_ADDITIONS_PACKING=
668 VBOX_WITHOUT_ADDITIONS_ISO=1
669 VBOX_WITH_OS2_ADDITIONS_BIN=
670 VBOX_WITH_SECURELABEL=
671 VBOX_WITH_KCHMVIEWER=
672 VBOX_WITH_DOCS=
673 VBOX_WITH_DOCS_PACKING=
674 VBOX_WITH_TESTSUITE=
675 VBOX_WITH_INTEL_PXE=
676 VBOX_WITH_FFMPEG=
677 ifn1of ($(KBUILD_TARGET), linux solaris)
678 # Only the Linux, Solaris installers are public
679 VBOX_WITH_INSTALLER=
680 endif
681 VBOX_WITH_AHCI=
682 VBOX_WITH_PDM_ASYNC_COMPLETION=
683 VBOX_WITH_BUSLOGIC=
684 VBOX_WITH_LSILOGIC=
685 VBOX_WITH_SCSI=
686 VBOX_WITH_HPET=
687 VBOX_WITH_LPC=
688 VBOX_WITH_SMC=
689 # branding
690 VBOX_BRAND_BIOS_LOGO := $(PATH_ROOT)/src/VBox/Devices/Graphics/BIOS/ose_logo.bmp
691 VBOX_BRAND_GUI_ABOUT_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/about.png
692 VBOX_BRAND_GUI_ABOUT_16PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/about_16px.png
693 VBOX_BRAND_GUI_VBOX_16PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_16px.png
694 VBOX_BRAND_GUI_VBOX_20PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_20px.png
695 VBOX_BRAND_GUI_VBOX_32PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_32px.png
696 VBOX_BRAND_GUI_VBOX_40PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_40px.png
697 VBOX_BRAND_GUI_VBOX_48PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_48px.png
698 VBOX_BRAND_GUI_VBOX_64PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_64px.png
699 VBOX_BRAND_GUI_CUBE_42PX_PNG := $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_cube_42px.png
700endif
701
702#
703# VBOX_WITHOUT_HARDENING is for developers (put in LocalConfig.kmk).
704# Note that this is a bit rough since hardening governs more than one
705# variable... Also note that we allow VBOX_WITH_HARDENING=1 on the
706# command line to overrule VBOX_WITHOUT_HARDENING (the check below).
707#
708ifdef VBOX_WITHOUT_HARDENING
709 VBOX_WITH_HARDENING=
710 ifeq ($(VBOX_WITH_HARDENING),)
711 VBOX_PATH_APP_PRIVATE=
712 VBOX_PATH_APP_PRIVATE_ARCH=
713 VBOX_PATH_SHARED_LIBS=
714 VBOX_PATH_APP_DOCS=
715 VBOX_WITH_RUNPATH=
716 if1of ($(KBUILD_TARGET), linux solaris)
717 VBOX_WITH_ORIGIN=1
718 endif
719 endif
720endif
721
722#
723# Sanitize the additions build config variables.
724#
725ifdef VBOX_WITH_ADDITIONS_FROM_BUILD_SERVER
726 VBOX_WITHOUT_ADDITIONS := 1
727 ifdef VBOX_ONLY_ADDITIONS
728 $(error VBOX_ONLY_ADDITIONS + VBOX_WITH_ADDITIONS_FROM_BUILD_SERVER does not add up!)
729 endif
730endif
731
732ifdef VBOX_ONLY_ADDITIONS
733 ifdef VBOX_WITHOUT_ADDITIONS
734 $(error VBOX_ONLY_ADDITIONS + VBOX_WITHOUT_ADDITIONS does not add up!)
735 endif
736endif
737
738ifdef VBOX_WITHOUT_ADDITIONS
739 # Zap anything that could be contradicting this.
740 VBOX_WITH_ADDITIONS :=
741endif
742
743#
744# Sanitize the documentation build config variables.
745#
746ifdef VBOX_WITH_DOCS_FROM_BUILD_SERVER
747 VBOX_WITHOUT_DOCS := 1
748 ifdef VBOX_ONLY_DOCS
749 $(error VBOX_ONLY_DOCS + VBOX_WITH_DOCS_FROM_BUILD_SERVER does not add up!)
750 endif
751endif
752
753ifdef VBOX_ONLY_DOCS
754 ifdef VBOX_WITHOUT_DOCS
755 $(error VBOX_ONLY_DOCS + VBOX_WITHOUT_DOCS does not add up!)
756 endif
757endif
758
759ifdef VBOX_WITHOUT_DOCS
760 # Zap anything that could be contradicting this.
761 VBOX_WITH_DOCS :=
762endif
763
764#
765# Disable components for headless
766#
767ifdef VBOX_HEADLESS
768 VBOX_WITH_QTGUI=
769 VBOX_WITH_VBOXSDL=
770 VBOX_WITH_VBOXBFE=
771 VBOX_WITH_OGL=
772 VBOX_WITH_KCHMVIEWER=
773endif
774
775#
776# Undefined VBOX_WITH_MAIN implies exclusion of a few more items.
777#
778ifndef VBOX_WITH_MAIN
779 VBOX_WITH_VRDP=
780 VBOX_WITH_VBOXSDL=
781 VBOX_WITH_QTGUI=
782 VBOX_WITH_DEBUGGER_GUI=
783 VBOX_WITH_HEADLESS=
784 ifdef VBOX_ONLY_DOCS
785 $(error Oh, does VBOX_ONLY_DOCS actually end up here. sweet.)
786 endif
787 VBOX_WITH_DOCS=
788endif
789
790ifndef VBOX_WITH_QTGUI
791 VBOX_WITH_KCHMVIEWER=
792endif
793
794#
795# Check for incompatible combinations.
796#
797ifdef VBOX_WITH_RUNPATH
798 ifdef VBOX_WITH_ORIGIN
799 $(error VBOX_WITH_RUNPATH and VBOX_WITH_ORIGIN are mutually exclusive (lazy bird))
800 endif
801endif
802
803#
804# Mark OSE builds clearly, helps figuring out limitations more easily.
805#
806ifdef VBOX_OSE
807VBOX_VERSION_STRING = $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)_OSE
808endif
809
810
811#
812# Image and object format config.
813#
814if1of ($(KBUILD_TARGET), linux l4 freebsd netbsd openbsd solaris)
815 VBOX_LDR_FMT = elf
816endif
817ifeq ($(KBUILD_TARGET),darwin)
818 VBOX_LDR_FMT = macho
819endif
820ifeq ($(KBUILD_TARGET),os2)
821 VBOX_LDR_FMT = lx
822 VBOX_LDR_FMT32 = lx
823 VBOX_LDR_FMT64 = elf
824 DONT_USE_YASM = 1 # yasm doesn't implement omf yet.
825endif
826ifeq ($(KBUILD_TARGET),win)
827 VBOX_LDR_FMT = pe
828endif
829VBOX_LDR_FMT32 ?= $(VBOX_LDR_FMT)
830VBOX_LDR_FMT64 ?= $(VBOX_LDR_FMT)
831
832#
833# Assembler setup.
834#
835# This is a bit complicated since we have to support two different assmblers
836# (yasm/nasm) and possibly two different formats (32-bit/64-bit).
837#
838ifeq ($(VBOX_LDR_FMT),elf)
839 ifeq ($(KBUILD_TARGET_ARCH),x86)
840VBOX_ASFLAGS_FMT = -f elf32 -DASM_FORMAT_ELF
841 else
842VBOX_ASFLAGS_FMT = -f elf64 -DASM_FORMAT_ELF
843 endif
844 VBOX_ASFLAGS_DBFINFO = -g dwarf2
845endif
846ifeq ($(VBOX_LDR_FMT),lx)
847 VBOX_ASFLAGS_FMT = -f obj -DASM_FORMAT_OMF
848 VBOX_ASFLAGS_DBFINFO = -g stabs
849endif
850ifeq ($(VBOX_LDR_FMT),macho)
851 ifeq ($(KBUILD_TARGET_ARCH),x86)
852 VBOX_ASFLAGS_FMT = -f macho32 -DASM_FORMAT_MACHO
853 else
854 VBOX_ASFLAGS_FMT = -f macho64 -DASM_FORMAT_MACHO
855 endif
856 VBOX_ASFLAGS_DBFINFO = -g dwarf2
857endif
858ifeq ($(VBOX_LDR_FMT),pe)
859 ifeq ($(KBUILD_TARGET_ARCH),x86)
860VBOX_ASFLAGS_FMT = -f win32 -DASM_FORMAT_PE
861 else
862VBOX_ASFLAGS_FMT = -f win64 -DASM_FORMAT_PE
863 endif
864VBOX_ASFLAGS_DBFINFO = -g cv8
865endif
866ifndef VBOX_ASFLAGS_FMT
867 $(error VBOX_ASFLAGS_FMT is not defined. VBOX_LDR_FMT=$(VBOX_LDR_FMT))
868endif
869
870ifeq ($(VBOX_LDR_FMT32),elf)
871 VBOX_ASFLAGS_FMT32 = -f elf32 -DASM_FORMAT_ELF
872 VBOX_ASFLAGS_DBFINFO32 = -g dwarf2
873endif
874ifeq ($(VBOX_LDR_FMT32),lx)
875 VBOX_ASFLAGS_FMT32 = -f obj -DASM_FORMAT_OMF
876 VBOX_ASFLAGS_DBFINFO32 = -g stabs
877endif
878ifeq ($(VBOX_LDR_FMT32),macho)
879 VBOX_ASFLAGS_FMT32 = -f macho32 -DASM_FORMAT_MACHO
880 VBOX_ASFLAGS_DBFINFO32 = -g dwarf2
881endif
882ifeq ($(VBOX_LDR_FMT32),pe)
883 VBOX_ASFLAGS_FMT32 = -f win32 -DASM_FORMAT_PE
884 VBOX_ASFLAGS_DBFINFO32 = -g cv8
885endif
886ifndef VBOX_ASFLAGS_FMT32
887 $(error VBOX_ASFLAGS_FMT32 is not defined. VBOX_LDR_FMT32=$(VBOX_LDR_FMT32))
888endif
889
890ifeq ($(VBOX_LDR_FMT64),elf)
891 VBOX_ASFLAGS_FMT64 = -f elf64 -DASM_FORMAT_ELF
892 VBOX_ASFLAGS_DBFINFO64 = -g dwarf2
893endif
894ifeq ($(VBOX_LDR_FMT64),macho)
895 VBOX_ASFLAGS_FMT64 = -f macho64 -DASM_FORMAT_MACHO
896 VBOX_ASFLAGS_DBFINFO64 = -g dwarf2
897endif
898ifeq ($(VBOX_LDR_FMT64),pe)
899 VBOX_ASFLAGS_FMT64 = -f win64 -DASM_FORMAT_PE
900 VBOX_ASFLAGS_DBFINFO64 = -g cv8
901endif
902ifndef VBOX_ASFLAGS_FMT64
903 $(error VBOX_ASFLAGS_FMT64 is not defined. VBOX_LDR_FMT64=$(VBOX_LDR_FMT64))
904endif
905
906ifndef DONT_USE_YASM
907 VBOX_ASTOOL = YASM
908 VBOX_LDR_FMT_2_YASM_DBGINFO.elf = -g dwarf2
909 VBOX_LDR_FMT_2_YASM_DBGINFO.lx = -g stabs
910 VBOX_LDR_FMT_2_YASM_DBGINFO.macho =
911 VBOX_LDR_FMT_2_YASM_DBGINFO.pe = -g cv8
912 VBOX_ASFLAGS = $(VBOX_ASFLAGS_FMT) -D__YASM__ -Worphan-labels $(VBOX_LDR_FMT_2_YASM_DBGINFO.$(VBOX_LDR_FMT))
913 VBOX_ASFLAGS32 = $(VBOX_ASFLAGS_FMT32) -D__YASM__ -Worphan-labels $(VBOX_LDR_FMT_2_YASM_DBGINFO.$(VBOX_LDR_FMT32))
914 VBOX_ASFLAGS64 = $(VBOX_ASFLAGS_FMT64) -D__YASM__ -Worphan-labels $(VBOX_LDR_FMT_2_YASM_DBGINFO.$(VBOX_LDR_FMT64))
915else
916 VBOX_ASTOOL = NASM
917 VBOX_ASFLAGS = $(subst elf32,elf,$(VBOX_ASFLAGS_FMT)) -D__NASM__ -w+orphan-labels -g
918 VBOX_ASFLAGS32 = $(subst elf32,elf,$(VBOX_ASFLAGS_FMT32)) -D__NASM__ -w+orphan-labels -g
919 VBOX_ASFLAGS64 = $(VBOX_ASFLAGS_FMT64) -D__NASM__ -w+orphan-labels -g
920endif
921
922#
923# Windows only has mingw handy. On *nix we have to deal with cross compiling
924# 32-bit targets on 64-bit platforms, meaning we'll be using gcc32/g++32.
925# In the latter case we'll also have to disable all the all the R0 driver related stuff.
926#
927ifndef VBOX_GCC_TOOL
928 ifeq ($(KBUILD_TARGET),win)
929 VBOX_GCC_TOOL := MINGW32
930 TOOL_MINGW32_CFLAGS := $(UNDEFINED) # override -g
931 else ifeq ($(KBUILD_TARGET),os2)
932 VBOX_GCC_TOOL := GXX3OMF
933 else ifeq ($(KBUILD_TARGET),darwin)
934 VBOX_GCC_TOOL := GXX4MACHO
935 else ifeq ($(KBUILD_TARGET),solaris)
936 VBOX_GCC_TOOL := GXX3PLAIN
937 VBOX_GCC32_TOOL := GXX3PLAIN
938 else
939 VBOX_GCC_TOOL := GXX3
940 ifeq ($(KBUILD_TARGET_ARCH).$(KBUILD_HOST_ARCH),x86.amd64) ## @todo mixing target/host here!
941 VBOX_GCC_TOOL := GXX32
942 VBOX_WITH_VBOXDRV=
943 else ifeq ($(KBUILD_TARGET_ARCH).$(KBUILD_HOST_ARCH),amd64.x86)
944 VBOX_GCC_TOOL := GXX64
945 VBOX_WITH_VBOXDRV=
946 endif
947 endif
948endif
949ifndef VBOX_GCC32_TOOL
950 ifeq ($(KBUILD_TARGET_ARCH),x86)
951 VBOX_GCC32_TOOL := $(VBOX_GCC_TOOL)
952 else ifeq ($(KBUILD_TARGET),win)
953 VBOX_GCC32_TOOL := MINGW32
954 else
955 VBOX_GCC32_TOOL := GXX32
956 endif
957endif
958
959#
960# Decide which Visual C++ compiler version we're using by default.
961#
962ifndef VBOX_VCC_TOOL
963 ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),win.amd64)
964 VBOX_USE_VCC80 ?= 1 # Enforce VCC80 when targetting AMD64.
965 endif
966 ifdef VBOX_USE_VCC80
967 ifeq ($(KBUILD_TARGET_ARCH),x86)
968 VBOX_VCC_TOOL := VCC80X86
969 else
970 VBOX_VCC_TOOL := VCC80AMD64
971 endif
972 else
973 VBOX_VCC_TOOL := VCC70
974 endif
975endif
976
977#
978# The kBuild tools and SDKs are using PATH_DEVTOOLS, PATH_DEVTOOLS_BLD
979# and PATH_DEVTOOLS_TRG to find things if we give them specific locations.
980#
981PATH_DEVTOOLS ?= $(PATH_ROOT)/tools
982PATH_DEVTOOLS := $(abspath $(PATH_DEVTOOLS))
983PATH_DEVTOOLS_BLD ?= $(PATH_DEVTOOLS)/$(KBUILD_HOST).$(KBUILD_HOST_ARCH)
984PATH_DEVTOOLS_TRG ?= $(PATH_DEVTOOLS)/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)
985
986## @todo Remove the default tool crap here!
987TOOL = $(VBOX_GCC_TOOL)
988ifdef VBOX_USE_VCC80
989 TOOL.win.x86 = VCC80X86
990 TOOL.win.amd64 = VCC80AMD64
991else
992 TOOL.win = VCC70
993endif
994ASTOOL = $(VBOX_ASTOOL)
995
996#
997# L4-specific settings.
998#
999ifdef L4_DIR
1000 ifeq ($(KBUILD_TARGET),l4)
1001 L4_API ?= l4v2
1002 L4_ARCH ?= $(KBUILD_TARGET_ARCH)
1003 ifeq ($(L4_ARCH),x86)
1004 L4_CPU ?= 586
1005 L4LINUX26_INCDIR := $(L4LINUX26_DIR)/include \
1006 $(L4LINUX26_DIR)/include/asm-l4/i386-arch
1007 else ifeq ($(L4_ARCH),amd64)
1008 L4_CPU ?= k8
1009 L4LINUX26_INCDIR := $(L4LINUX26_DIR)/include
1010 # no red zone for L4 because of IPC bindings
1011 CFLAGS.l4 = -mno-red-zone
1012 CXXFLAGS.l4 = -mno-red-zone
1013 else
1014 $(error L4_ARCH=$(L4_ARCH))
1015 endif
1016 L4_OBJ := $(L4_DIR)/build-$(L4_ARCH)-$(L4_CPU)-$(L4_API)
1017 # support splitted Linux kernels (make O=<build directory>)
1018 kernelsrc := $(shell $(SED_EXT) -ne 's+^KERNELSRC.*= *\(.*\)+\1+p' $(L4LINUX26_DIR)/Makefile)
1019 ifneq ($(kernelsrc),)
1020 kernelpath := $(realpath $(kernelsrc))
1021 L4LINUX26_INCDIR += $(L4LINUX26_DIR)/include2 $(kernelpath)/include
1022 endif
1023 L4_INCDIR := \
1024 $(L4_OBJ)/include/uclibc++ \
1025 $(L4_OBJ)/include/$(L4_ARCH)/uclibc \
1026 $(L4_OBJ)/include/uclibc \
1027 $(L4LINUX26_INCDIR) \
1028 $(L4_OBJ)/include/$(L4_ARCH)/$(L4_API) \
1029 $(L4_OBJ)/include/$(L4_API) \
1030 $(L4_OBJ)/include/$(L4_ARCH) \
1031 $(L4_OBJ)/include \
1032 $(L4_DIR)/tool/dice/include
1033 L4_LIBDIR := \
1034 $(L4_DIR)/build-$(L4_ARCH)-$(L4_CPU)-$(L4_API)/lib/$(L4_ARCH)_$(L4_CPU)/$(L4_API)
1035 endif # KBUILD_TARGET == l4
1036endif # L4_DIR
1037
1038# Produce debugging information that the Fiasco kernel debugger can read.
1039ifeq ($(KBUILD_TARGET).$(KBUILD_TYPE),l4.debug)
1040 DEBUG_L4 = -gstabs+
1041endif
1042
1043#
1044# Setup the global defines and includes.
1045#
1046# Note! The __SOMETHING__ #defines are deprecated as they violate the C/C++ specs.
1047#
1048INCS += $(PATH_ROOT)/include $(PATH_OUT)
1049DEFS += VBOX
1050DEFS.debug := DEBUG DEBUG_$(subst $(subst _, ,_),_,$(USERNAME)) DEBUG_USERNAME=$(subst $(subst _, ,_),_,$(USERNAME))
1051DEFS.dbgopt = $(DEFS.debug)
1052DEFS.profile = VBOX_WITH_STATISTICS
1053DEFS.strict = RT_STRICT VBOX_STRICT
1054DEFS.x86 = RT_ARCH_X86 __X86__
1055DEFS.amd64 = RT_ARCH_AMD64 __AMD64__
1056DEFS.darwin = RT_OS_DARWIN __DARWIN__
1057DEFS.freebsd = RT_OS_FREEBSD __FREEBSD__
1058DEFS.l4 = RT_OS_L4 __L4__ __L4ENV__ L4API_l4v2 ARCH_$(KBUILD_TARGET_ARCH) __NO_CTYPE _FILE_OFFSET_BITS=64
1059DEFS.linux = RT_OS_LINUX _FILE_OFFSET_BITS=64
1060DEFS.netbsd = RT_OS_NETBSD
1061DEFS.openbsd = RT_OS_OPENBSD
1062DEFS.os2 = RT_OS_OS2 __OS2__
1063DEFS.solaris = RT_OS_SOLARIS _FILE_OFFSET_BITS=64
1064DEFS.win = RT_OS_WINDOWS __WIN__
1065DEFS.win.x86 = __WIN32__
1066DEFS.win.amd64 = __WIN64__
1067# optional defines (use environment or make commandline)
1068ifdef VBOX_WITH_DEBUGGER
1069 DEFS += VBOX_WITH_DEBUGGER
1070endif
1071ifdef VBOX_WITH_STATISTICS
1072 DEFS += VBOX_WITH_STATISTICS
1073endif
1074ifdef VBOX_STRICT
1075 DEFS += VBOX_STRICT
1076endif
1077ifdef LOG_ENABLED
1078 DEFS += LOG_ENABLED
1079endif
1080ifdef VBOX_OSE
1081 DEFS += VBOX_OSE
1082endif
1083ifdef VBOX_WITH_64_BITS_GUESTS
1084 DEFS += VBOX_WITH_64_BITS_GUESTS
1085endif
1086ifdef VBOX_WITH_SMP_GUESTS
1087 DEFS += VBOX_WITH_SMP_GUESTS
1088endif
1089ifdef VBOX_WITH_HARDENING
1090 DEFS += VBOX_WITH_HARDENING
1091endif
1092ifdef VBOX_PATH_APP_PRIVATE
1093 DEFS += RTPATH_APP_PRIVATE=\"$(VBOX_PATH_APP_PRIVATE)\"
1094endif
1095ifdef VBOX_PATH_APP_PRIVATE_ARCH
1096 DEFS += RTPATH_APP_PRIVATE_ARCH=\"$(VBOX_PATH_APP_PRIVATE_ARCH)\"
1097endif
1098ifdef VBOX_PATH_SHARED_LIBS
1099 DEFS += RTPATH_SHARED_LIBS=\"$(VBOX_PATH_SHARED_LIBS)\"
1100endif
1101ifdef VBOX_PATH_APP_DOCS
1102 DEFS += RTPATH_APP_DOCS=\"$(VBOX_PATH_APP_DOCS)\"
1103endif
1104
1105#
1106# Compiler optimization flags.
1107#
1108VBOX_GCC_WARN ?= -Wall $(VBOX_GCC_Wextra) $(VBOX_GCC_Wno-missing-field-initializers) -Wno-unused -Wno-trigraphs
1109VBOX_GCC_PEDANTIC ?= -pedantic $(VBOX_GCC_WARN) -Wno-long-long
1110ifeq ($(KBUILD_TYPE),debug)
1111 VBOX_GCC_FP ?= -fno-omit-frame-pointer
1112 VBOX_GCC_OPT ?= -O0
1113 VBOX_VCC_FP ?= -Oy-
1114 VBOX_VCC_OPT ?=
1115 VBOX_GCC_GC_FP ?= -fno-omit-frame-pointer
1116 VBOX_GCC_GC_OPT ?= -O0
1117 VBOX_VCC_GC_FP ?= -Oy-
1118 VBOX_VCC_GC_OPT ?=
1119else
1120 # We should use -fomit-frame-pointer for GCC / -Oy for VCC.
1121 # -funwind-tables provides support for backtraces in gdb then.
1122 VBOX_GCC_FP ?= -fno-omit-frame-pointer
1123 VBOX_GCC_OPT ?= -O2 $(VBOX_GCC_mtune-generic)
1124 VBOX_VCC_FP ?= -Oy-
1125 ifdef VBOX_USE_VCC80
1126 VBOX_VCC_OPT ?= -O2 -GS-
1127 else
1128 VBOX_VCC_OPT ?= -Ogitb2
1129 endif
1130 VBOX_GCC_GC_FP ?= -fno-omit-frame-pointer
1131 VBOX_GCC_GC_OPT ?= -O2 $(VBOX_GCC_mtune-generic)
1132 VBOX_VCC_GC_FP ?= -Oy-
1133 ifdef VBOX_USE_VCC80
1134 VBOX_VCC_GC_OPT ?= -O2
1135 else
1136 VBOX_VCC_GC_OPT ?= -Ogitb2
1137 endif
1138endif
1139ifeq ($(KBUILD_TARGET_ARCH),x86)
1140 ifneq ($(KBUILD_TARGET),darwin)
1141 # (The '<=' operator is for prepending (kmk specific).)
1142 VBOX_GCC_OPT <= -march=i586
1143 endif
1144endif
1145
1146#
1147# ARCH_BITS_DEFS.
1148#
1149ifeq ($(KBUILD_TARGET_ARCH),amd64)
1150 ARCH_BITS_DEFS := HC_ARCH_BITS=64
1151else ifeq ($(KBUILD_TARGET_ARCH),x86)
1152 ARCH_BITS_DEFS := HC_ARCH_BITS=32
1153else
1154 error KBUILD_TARGET_ARCH=$(KBUILD_TARGET_ARCH)
1155endif
1156
1157ifdef VBOX_WITH_64_BITS_GUESTS
1158 VBOX_GC_ARCH_BITS_DEFS := GC_ARCH_BITS=64
1159else
1160 VBOX_GC_ARCH_BITS_DEFS := GC_ARCH_BITS=32
1161endif
1162ARCH_BITS_DEFS += $(VBOX_GC_ARCH_BITS_DEFS)
1163
1164#
1165# Add the output dir(s) to the dynamic loader search path.
1166#
1167if1of ($(KBUILD_TARGET), linux l4 freebsd netbsd openbsd solaris)
1168 export LD_LIBRARY_PATH:=$(PATH_BIN):$(PATH_LIB):$(LD_LIBRARY_PATH)
1169endif
1170ifeq ($(KBUILD_TARGET),os2)
1171 #fixme! export BEGINLIBPATH:=$(PATH_BIN);$(PATH_LIB);$(BEGINLIBPATH)
1172endif
1173ifeq ($(KBUILD_TARGET),win)
1174 export PATH:=$(PATH_BIN);$(PATH_LIB);$(PATH)
1175endif
1176
1177#
1178# Common libraries and tools.
1179#
1180ifeq ($(KBUILD_TARGET),darwin)
1181 LIB_RUNTIME = $(PATH_BIN)/VBoxRT.dylib
1182 LIB_RUNTIME_EF = #$(PATH_LIB)/RuntimeEFCPP.a
1183 LIB_KPROFILE = $(PATH_BIN)/kPrf2.dylib
1184 LIB_VMM = $(PATH_BIN)/VBoxVMM.dylib
1185 LIB_VMMGC = $(PATH_BIN)/VMMGC.gc
1186 LIB_REM = $(PATH_LIB)/VBoxREM.dylib
1187 LIB_XPCOM = $(PATH_BIN)/VBoxXPCOM.dylib
1188 LIB_DDU = $(PATH_BIN)/VBoxDDU.dylib
1189 LIB_SETTINGS = $(PATH_BIN)/VBoxSettings.dylib
1190endif
1191ifeq ($(KBUILD_TARGET),l4)
1192 LIB_RUNTIME = $(PATH_BIN)/VBoxRT.s.so
1193 LIB_RUNTIME_EF = #$(PATH_LIB)/RuntimeEFCPP.a
1194 LIB_KPROFILE = $(PATH_BIN)/kPrf2.s.so
1195 LIB_VMM = $(PATH_BIN)/VBoxVMM.s.so
1196 LIB_VMMGC = $(PATH_BIN)/VMMGC.gc
1197 LIB_REM = $(PATH_LIB)/VBoxREM.s.so
1198 LIB_XPCOM = $(PATH_BIN)/VBoxXPCOM.s.so
1199 LIB_DDU = $(PATH_BIN)/VBoxDDU.s.so
1200 LIB_SETTINGS = $(PATH_BIN)/VBoxSettings.s.so
1201endif
1202if1of ($(KBUILD_TARGET), linux freebsd netbsd openbsd solaris)
1203 LIB_RUNTIME = $(PATH_BIN)/VBoxRT.so
1204 LIB_RUNTIME_EF = $(PATH_LIB)/RuntimeEFCPP.a
1205 LIB_KPROFILE = $(PATH_BIN)/kPrf2.so
1206 LIB_VMM = $(PATH_BIN)/VBoxVMM.so
1207 LIB_VMMGC = $(PATH_BIN)/VMMGC.gc
1208 LIB_REM = $(PATH_LIB)/VBoxREM.so
1209 LIB_XPCOM = $(PATH_BIN)/VBoxXPCOM.so
1210 LIB_DDU = $(PATH_BIN)/VBoxDDU.so
1211 LIB_SETTINGS = $(PATH_BIN)/VBoxSettings.so
1212endif
1213ifeq ($(KBUILD_TARGET),os2)
1214 LIB_RUNTIME = $(PATH_BIN)/VBoxRT.dll
1215 LIB_RUNTIME_EF = #$(PATH_LIB)/RuntimeEFCPP.a
1216 LIB_KPROFILE = $(PATH_BIN)/kPrf2.dll
1217 LIB_VMM = $(PATH_BIN)/VBoxVMM.dll
1218 LIB_VMMGC = $(PATH_LIB)/VMMGCImp.lib
1219 LIB_REM = $(PATH_LIB)/VBoxREMImp.lib
1220 LIB_XPCOM = $(PATH_BIN)/VBoxXCOM.dll
1221 LIB_DDU = $(PATH_BIN)/VBoxDDU.dll
1222 LIB_SETTINGS = $(PATH_BIN)/VBoxSett.dll
1223 VBOX_OBJ_SYS0 = $(PATH_OBJ)/RuntimeR0/os2/sys0.obj
1224endif
1225ifeq ($(KBUILD_TARGET),win)
1226 LIB_RUNTIME = $(PATH_LIB)/VBoxRT.lib
1227 LIB_RUNTIME_EF = #$(PATH_LIB)/RuntimeEFCPP.lib
1228 LIB_KPROFILE = $(PATH_LIB)/kPrf2.lib
1229 LIB_VMM = $(PATH_LIB)/VBoxVMM.lib
1230 LIB_VMMGC = $(PATH_OBJ)/VMMGC/VMMGC.lib
1231 LIB_REM = $(PATH_LIB)/VBoxREMImp.lib
1232 LIB_XPCOM = $(PATH_BIN)/VBoxXPCOM.dll
1233 LIB_DDU = $(PATH_LIB)/VBoxDDU.lib
1234 LIB_SETTINGS = $(PATH_LIB)/VBoxSettings.lib
1235endif
1236VBOX_LIB_SUPHARDENED = $(PATH_LIB)/SUPR3HardenedStatic$(VBOX_SUFF_LIB)
1237VBOX_LIB_RUNTIME_STATIC = $(PATH_LIB)/RuntimeR3$(VBOX_SUFF_LIB)
1238
1239# Python
1240ifndef VBOX_BLD_PYTHON
1241 if1of ($(KBUILD_HOST), win)
1242 VBOX_BLD_PYTHON := $(firstword $(rsort $(wildcard $(PATH_DEVTOOLS)/win.x86/python/v*/python$(HOSTSUFF_EXE))) python-not-found.exe)
1243 else
1244 VBOX_BLD_PYTHON := python$(HOSTSUFF_EXE)
1245 endif
1246endif
1247
1248# Define the macro for win path conversion.
1249ifndef VBOX_ONLY_SDK
1250 VBOX_FN_MAKE_WIN_PATH = $(subst /,\\,$(1))
1251else
1252 # on Wine Z: is always FS root
1253 VBOX_FN_MAKE_WIN_PATH = $(subst /,\\,$(patsubst /%,Z:/%,$(1)))
1254endif #!VBOX_ONLY_SDK
1255
1256# The kprofile build automagically links with kProfile.
1257ifeq ($(KBUILD_TYPE),kprofile)
1258 LIB_RUNTIME += $(LIB_KPROFILE)
1259endif
1260
1261## Enable C++ electric fence heap. (Warning: will easily run out of virtual memory / kernel stuff on Linux/Windows.)
1262#LIB_RUNTIME += $(LIB_RUNTIME_EF) $(LIB_RUNTIME)
1263
1264# Overridable libraries (unix).
1265LIB_PTHREAD ?= pthread
1266
1267# Xcursor (consider an SDK for this).
1268ifeq ($(VBOX_XCURSOR_LIBS),)
1269 ifeq ($(KBUILD_TARGET),solaris)
1270 VBOX_XCURSOR_LIBS := $(lastword $(wildcard $(PATH_DEVTOOLS_TRG)/libXcursor/*/lib/libXcursor.a))
1271 ifneq ($(VBOX_XCURSOR_LIBS),)
1272 VBOX_XCURSOR_INCS := $(patsubst %/lib/libXcursor.a,%/include, $(VBOX_XCURSOR_LIBS))
1273 VBOX_XCURSOR_LIBS += X11 Xrender Xfixes
1274 endif
1275 endif
1276 ifeq ($(VBOX_XCURSOR_LIBS),)
1277 VBOX_XCURSOR_LIBS := Xcursor
1278 endif
1279endif
1280
1281
1282# Intel ASL compiler for ACPI
1283VBOX_IASLCMD ?= $(firstword $(wildcard $(PATH_DEVTOOLS_BLD)/bin/iasl$(HOSTSUFF_EXE)) iasl$(HOSTSUFF_EXE))
1284
1285# Bruce's C compile is a C-compiler for BIOS-related 8086 code
1286ifndef VBOX_BCC
1287 if exists "$(PATH_DEVTOOLS_BLD)/bin/bcc$(HOSTSUFF_EXE)"
1288VBOX_BCC := $(PATH_DEVTOOLS_BLD)/bin/bcc$(HOSTSUFF_EXE) -B $(PATH_DEVTOOLS_BLD)/bin/
1289 else
1290VBOX_BCC := bcc$(HOSTSUFF_EXE)
1291 endif
1292endif
1293
1294# Assembler for BIOS-related 8086 code
1295ifndef VBOX_AS86
1296 if exists "$(PATH_DEVTOOLS_BLD)/bin/as86$(HOSTSUFF_EXE)"
1297VBOX_AS86 := $(PATH_DEVTOOLS_BLD)/bin/as86$(HOSTSUFF_EXE)
1298 else
1299VBOX_AS86 := as86$(HOSTSUFF_EXE)
1300 endif
1301endif
1302
1303# libxslt XSLT processor. (see PATH_TOOL_YASM for explanation why it's temporarily located in bin.)
1304ifeq ($(KBUILD_HOST),win)
1305# VBOX_XSLTPROC ?= $(PATH_DEVTOOLS)/win.x86/libxslt/10114/xsltproc.exe
1306 VBOX_XSLTPROC ?= $(PATH_DEVTOOLS)/win.x86/bin/xsltproc.exe
1307else ifeq ($(KBUILD_HOST),os2)
1308 VBOX_XSLTPROC ?= BEGINLIBPATH="$(PATH_DEVTOOLS_BLD)/bin;$$BEGINLIBPATH" $(PATH_DEVTOOLS_BLD)/bin/xsltproc.exe
1309else
1310 VBOX_XSLTPROC ?= xsltproc$(HOSTSUFF_EXE)
1311endif
1312
1313# bin2c (convert binary files into C arrays)
1314VBOX_BIN2C ?= $(PATH_OBJ)/bin2c/bin2c$(HOSTSUFF_EXE)
1315
1316# biossums (set BIOS checksums)
1317VBOX_BIOSSUMS ?= $(PATH_OBJ)/biossums/biossums$(HOSTSUFF_EXE)
1318
1319# mkisofs
1320ifeq ($(KBUILD_HOST),win)
1321 VBOX_MKISOFS ?= $(PATH_DEVTOOLS_BLD)/bin/mkisofs.exe
1322else
1323 VBOX_MKISOFS ?= mkisofs
1324endif
1325
1326# Makeself for the linux installers.
1327VBOX_MAKESELF ?= $(PATH_DEVTOOLS)/common/makeself/v2.1.5/makeself.sh
1328
1329# Microsoft HTML Help Workshop.
1330VBOX_PATH_HTML_HELP_WORKSHOP ?= $(PATH_DEVTOOLS)/win.x86/HTML_Help_Workshop/v1.3/
1331
1332# Path to the null soft installer.
1333VBOX_PATH_NSIS ?= $(PATH_DEVTOOLS)/win.x86/nsis/v2.33-log-nsscm-r1
1334
1335# Path to AutoIt3.
1336VBOX_PATH_AUTOIT3 ?= $(PATH_DEVTOOLS)/win.x86/autoit/v3.2.10.0
1337
1338# Windows install tools...
1339VBOX_PATH_WIX ?= $(PATH_DEVTOOLS)/win.x86/wix/v2.0.5805.0
1340VBOX_PATH_MSITRAN ?= $(PATH_DEVTOOLS)/win.x86/sdk/200504/Bin/MsiTran.Exe
1341VBOX_PATH_MSIDB ?= $(PATH_DEVTOOLS)/win.x86/sdk/200504/Bin/MsiDb.Exe
1342VBOX_PATH_WISUBSTG ?= $(PATH_DEVTOOLS)/win.x86/sdk/200504/Samples/SysMgmt/Msi/Scripts/WiSubStg.vbs
1343VBOX_PATH_WISUMINFO ?= $(PATH_DEVTOOLS)/win.x86/sdk/200504/Samples/SysMgmt/Msi/Scripts/WiSumInf.vbs
1344VBOX_PATH_DIFX ?= $(PATH_DEVTOOLS)/win.$(KBUILD_TARGET_ARCH)/DIFx/v2.1
1345VBOX_PATH_CABSDK ?= $(PATH_DEVTOOLS)/win.x86/cabsdk/r1
1346VBOX_PATH_MAKECAB ?= $(VBOX_PATH_CABSDK)/BIN/MAKECAB.EXE
1347
1348# We need to export YASM for OSE, but since it was converted to .zip we need to
1349# allow for the location used by the zip to be properly cleaned up first.
1350if1of ($(KBUILD_HOST).$(KBUILD_HOST_ARCH), win.x86 linux.x86 solaris.x86)
1351 PATH_TOOL_YASM ?= $(PATH_DEVTOOLS_BLD)/bin
1352endif
1353
1354# XPCOM setup for all but win32.
1355ifneq ($(KBUILD_TARGET),win)
1356 VBOX_WITH_XPCOM = 1
1357 # if updating, also update xpidl_INST var in src/libs/xpcom18a4/Makefile.kmk
1358 VBOX_XPIDL ?= $(PATH_BIN)/xpidl$(HOSTSUFF_EXE)
1359 ifeq ($(KBUILD_TARGET),os2)
1360 VBOX_XPIDL_ENV = BEGINLIBPATH="$(dir $(VBOX_XPIDL));$$BEGINLIBPATH"$(SP)
1361 endif
1362 VBOX_PATH_XPCOM_IDL ?= $(VBOX_PATH_SDK)/bindings/xpcom/idl
1363 VBOX_XPCOM_INCS ?= \
1364 $(VBOX_PATH_SDK)/bindings/xpcom/include \
1365 $(VBOX_PATH_SDK)/bindings/xpcom/include/xpcom \
1366 $(VBOX_PATH_SDK)/bindings/xpcom/include/string \
1367 $(VBOX_PATH_SDK)/bindings/xpcom/include/xpcom \
1368 $(VBOX_PATH_SDK)/bindings/xpcom/include/nsprpub \
1369 $(VBOX_PATH_SDK)/bindings/xpcom/include/ipcd
1370 ifneq ($(KBUILD_TARGET),os2)
1371 # libIDL-config (for xpcom18a4)
1372 ifeq ($(origin VBOX_LIBIDL_CONFIG),undefined)
1373 export VBOX_LIBIDL_CONFIG := $(firstword $(shell which libIDL-config-2 libIDL-config 2> /dev/null))
1374 endif
1375 endif
1376endif
1377
1378# The X11 LIBPATH. (The amd64 hack is for RHEL4.)
1379ifeq ($(KBUILD_TARGET_ARCH),amd64)
1380 VBOX_LIBPATH_X11 ?= /usr/X11R6/lib64 /usr/X11R6/lib
1381else
1382 VBOX_LIBPATH_X11 ?= /usr/X11R6/lib
1383endif
1384
1385# 32bit X11 LIBPATH for building 32bit guest additions
1386VBOX_LIBPATH32_X11 ?= /usr/X11R6/lib32 /usr/X11R6/lib
1387
1388#
1389# Macros dealing with the darwin version we're targeting.
1390#
1391ifeq ($(KBUILD_TARGET),darwin)
1392 ifeq ($(KBUILD_TARGET_ARCH),x86)
1393 VBOX_DEF_MACOSX_VERSION_MIN ?= 10.4
1394 VBOX_MACOSX_GCC_INFIX ?= -4.0
1395 else
1396 VBOX_DEF_MACOSX_VERSION_MIN ?= 10.6
1397 VBOX_MACOSX_GCC_INFIX ?= -4.2
1398 endif
1399 TOOL_GCC4MACHO_CC = gcc$(VBOX_MACOSX_GCC_INFIX)$(HOSTSUFF_EXE)
1400 TOOL_GCC4MACHO_CXX = g++$(VBOX_MACOSX_GCC_INFIX)$(HOSTSUFF_EXE)
1401 TOOL_GCC4MACHO_OBJC= gcc$(VBOX_MACOSX_GCC_INFIX)$(HOSTSUFF_EXE)
1402 TOOL_GCC4MACHO_AS = gcc$(VBOX_MACOSX_GCC_INFIX)$(HOSTSUFF_EXE)
1403 TOOL_GCC4MACHO_LD = gcc$(VBOX_MACOSX_GCC_INFIX)$(HOSTSUFF_EXE)
1404 TOOL_GCC4MACHO_LD_SYSMOD = gcc$(VBOX_MACOSX_GCC_INFIX)$(HOSTSUFF_EXE)
1405 TOOL_GXX4MACHO_CC = gcc$(VBOX_MACOSX_GCC_INFIX)$(HOSTSUFF_EXE)
1406 TOOL_GXX4MACHO_CXX = g++$(VBOX_MACOSX_GCC_INFIX)$(HOSTSUFF_EXE)
1407 TOOL_GXX4MACHO_OBJC= gcc$(VBOX_MACOSX_GCC_INFIX)$(HOSTSUFF_EXE)
1408 TOOL_GXX4MACHO_AS = gcc$(VBOX_MACOSX_GCC_INFIX)$(HOSTSUFF_EXE)
1409 TOOL_GXX4MACHO_LD = g++$(VBOX_MACOSX_GCC_INFIX)$(HOSTSUFF_EXE)
1410 TOOL_GXX4MACHO_LD_SYSMOD = g++$(VBOX_MACOSX_GCC_INFIX)$(HOSTSUFF_EXE)
1411 ifeq ($(VBOX_DEF_MACOSX_VERSION_MIN),10.4)
1412 ifeq ($(origin VBOX_DARWIN_CLASSIC_LINKER),undefined)
1413 VBOX_DARWIN_CLASSIC_LINKER := $(shell ld -v 2>&1 )
1414 ifneq ($(filter ld64%, $(subst :, , $(VBOX_DARWIN_CLASSIC_LINKER))),)
1415 export VBOX_DARWIN_CLASSIC_LINKER := -Wl,-classic_linker
1416 else
1417 export VBOX_DARWIN_CLASSIC_LINKER :=
1418 endif
1419 endif
1420 VBOX_PATH_MACOSX_SDK ?= /Developer/SDKs/MacOSX$(VBOX_DEF_MACOSX_VERSION_MIN)u.sdk
1421 else
1422 VBOX_PATH_MACOSX_SDK ?= /Developer/SDKs/MacOSX$(VBOX_DEF_MACOSX_VERSION_MIN).sdk
1423 endif
1424 VBOX_DARWIN_DEF_SDK_DEFS := MAC_OS_X_VERSION_MIN_REQUIRED=$(subst .,,$(VBOX_DEF_MACOSX_VERSION_MIN))0 \
1425 MAC_OS_X_VERSION_MAX_ALLOWED=$(subst .,,$(VBOX_DEF_MACOSX_VERSION_MIN))0
1426 VBOX_DARWIN_DEF_SDK_CFLAGS := -mmacosx-version-min=$(VBOX_DEF_MACOSX_VERSION_MIN) -isysroot $(VBOX_PATH_MACOSX_SDK)
1427 VBOX_DARWIN_DEF_SDK_CXXFLAGS := -mmacosx-version-min=$(VBOX_DEF_MACOSX_VERSION_MIN) -isysroot $(VBOX_PATH_MACOSX_SDK)
1428 VBOX_DARWIN_DEF_SDK_OBJCFLAGS := -mmacosx-version-min=$(VBOX_DEF_MACOSX_VERSION_MIN) -isysroot $(VBOX_PATH_MACOSX_SDK)
1429 VBOX_DARWIN_DEF_SDK_LDFLAGS := -mmacosx-version-min=$(VBOX_DEF_MACOSX_VERSION_MIN) -Wl,-syslibroot,$(VBOX_PATH_MACOSX_SDK) $(VBOX_DARWIN_CLASSIC_LINKER)
1430
1431 # specific versions.
1432 VBOX_PATH_MACOSX_SDK_10_4 ?= /Developer/SDKs/MacOSX10.4u.sdk
1433 VBOX_DARWIN_DEF_SDK_10_4_DEFS := MAC_OS_X_VERSION_MIN_REQUIRED=1040 MAC_OS_X_VERSION_MAX_ALLOWED=1040
1434 VBOX_DARWIN_DEF_SDK_10_4_CFLAGS := -mmacosx-version-min=10.4 -isysroot $(VBOX_PATH_MACOSX_SDK_10_4)
1435 VBOX_DARWIN_DEF_SDK_10_4_CXXFLAGS := -mmacosx-version-min=10.4 -isysroot $(VBOX_PATH_MACOSX_SDK_10_4)
1436 VBOX_DARWIN_DEF_SDK_10_4_OBJCFLAGS := -mmacosx-version-min=10.4 -isysroot $(VBOX_PATH_MACOSX_SDK_10_4)
1437 VBOX_DARWIN_DEF_SDK_10_4_LDFLAGS := -mmacosx-version-min=10.4 -Wl,-syslibroot,$(VBOX_PATH_MACOSX_SDK_10_4) $(VBOX_DARWIN_CLASSIC_LINKER)
1438## @todo try this out:
1439# VBOX_DARWIN_DEF_SDK_10_4_LDFLAGS := -mmacosx-version-min=10.4 -Wl,-syslibroot,$(VBOX_PATH_MACOSX_SDK_10_4) $(VBOX_DARWIN_CLASSIC_LINKER) -Wl,-headerpad_max_install_names
1440
1441 # specific versions.
1442 VBOX_PATH_MACOSX_SDK_10_5 ?= /Developer/SDKs/MacOSX10.5.sdk
1443 VBOX_DARWIN_DEF_SDK_10_5_DEFS := MAC_OS_X_VERSION_MIN_REQUIRED=1050 MAC_OS_X_VERSION_MAX_ALLOWED=1050
1444 VBOX_DARWIN_DEF_SDK_10_5_CFLAGS := -mmacosx-version-min=10.5 -isysroot $(VBOX_PATH_MACOSX_SDK_10_5)
1445 VBOX_DARWIN_DEF_SDK_10_5_CXXFLAGS := -mmacosx-version-min=10.5 -isysroot $(VBOX_PATH_MACOSX_SDK_10_5)
1446 VBOX_DARWIN_DEF_SDK_10_5_OBJCFLAGS := -mmacosx-version-min=10.5 -isysroot $(VBOX_PATH_MACOSX_SDK_10_5)
1447 VBOX_DARWIN_DEF_SDK_10_5_LDFLAGS := -mmacosx-version-min=10.5 -Wl,-syslibroot,$(VBOX_PATH_MACOSX_SDK_10_5)
1448
1449 # specific versions.
1450 VBOX_PATH_MACOSX_SDK_10_6 ?= /Developer/SDKs/MacOSX10.6.sdk
1451 VBOX_DARWIN_DEF_SDK_10_6_DEFS := MAC_OS_X_VERSION_MIN_REQUIRED=1060 MAC_OS_X_VERSION_MAX_ALLOWED=1060
1452 VBOX_DARWIN_DEF_SDK_10_6_CFLAGS := -mmacosx-version-min=10.6 -isysroot $(VBOX_PATH_MACOSX_SDK_10_6)
1453 VBOX_DARWIN_DEF_SDK_10_6_CXXFLAGS := -mmacosx-version-min=10.6 -isysroot $(VBOX_PATH_MACOSX_SDK_10_6)
1454 VBOX_DARWIN_DEF_SDK_10_6_OBJCFLAGS := -mmacosx-version-min=10.6 -isysroot $(VBOX_PATH_MACOSX_SDK_10_6)
1455 VBOX_DARWIN_DEF_SDK_10_6_LDFLAGS := -mmacosx-version-min=10.6 -Wl,-syslibroot,$(VBOX_PATH_MACOSX_SDK_10_6)
1456
1457endif # target=darwin
1458
1459#
1460# Macro switching between @executable_path and /Applications/VirtualBox.app
1461# depending on whether the build is hardened or not (dylib install_name)
1462#
1463ifndef VBOX_DYLD_EXECUTABLE_PATH
1464 ifdef VBOX_WITH_HARDENING
1465 VBOX_DYLD_EXECUTABLE_PATH = $(VBOX_PATH_APP_PRIVATE_ARCH)
1466 else
1467 VBOX_DYLD_EXECUTABLE_PATH = @executable_path
1468 endif
1469endif
1470
1471#
1472# The X11 headers.
1473#
1474VBOX_PATH_X11_ROOT = $(PATH_ROOT)/src/VBox/Additions/x11/x11include
1475VBOX_PATH_X11_XFREE_4_2 = $(VBOX_PATH_X11_ROOT)/4.2
1476VBOX_PATH_X11_XFREE_4_3 = $(VBOX_PATH_X11_ROOT)/4.3
1477VBOX_PATH_X11_XORG_7_0 = $(VBOX_PATH_X11_ROOT)/7.0
1478VBOX_PATH_X11_XORG_7_1 = $(VBOX_PATH_X11_ROOT)/7.1
1479VBOX_PATH_X11_XORG_1_3 = $(VBOX_PATH_X11_ROOT)/1.3
1480VBOX_PATH_X11_XORG_1_4 = $(VBOX_PATH_X11_ROOT)/1.4
1481VBOX_PATH_X11_XORG_1_5 = $(VBOX_PATH_X11_ROOT)/1.5
1482VBOX_PATH_X11_XORG_1_6 = $(VBOX_PATH_X11_ROOT)/1.6
1483
1484#
1485# Various other variables.
1486#
1487
1488#
1489# crOpenGL related paths and variables.
1490#
1491ifdef VBOX_WITH_CROGL
1492 VBOX_PATH_CROGL_GLAPI = $(PATH_ROOT)/src/VBox/GuestHost/OpenGL/glapi_parser
1493 VBOX_PATH_CROGL_GENFILES = $(PATH_OBJ)/VBoxOGLgen
1494 VBOX_PATH_CROGL_INCLUDE = $(PATH_ROOT)/src/VBox/GuestHost/OpenGL/include
1495 VBOX_CROGL_API_FILES = $(VBOX_PATH_CROGL_GLAPI)/apiutil.py $(VBOX_PATH_CROGL_GLAPI)/APIspec.txt
1496 VBOX_CROGL_PYTHON_ENV = $(REDIRECT) $(if $1,-E 'PYTHONPATH=$1',) $(if $2,-o $2,) $(if $3,-i $3) --
1497
1498 if1of ($(KBUILD_HOST), os2 win)
1499 VBOX_PATH_CROGL_PYTHON_INCLUDE = $(VBOX_PATH_CROGL_GLAPI);$(PATH_ROOT)/src/VBox/GuestHost/OpenGL/packer;$(PATH_ROOT)/src/VBox/HostServices/SharedOpenGL/crserverlib
1500 else
1501 VBOX_PATH_CROGL_PYTHON_INCLUDE = $(VBOX_PATH_CROGL_GLAPI):$(PATH_ROOT)/src/VBox/GuestHost/OpenGL/packer:$(PATH_ROOT)/src/VBox/HostServices/SharedOpenGL/crserverlib
1502 endif
1503
1504 ifeq ($(KBUILD_TARGET),win)
1505 VBOX_LIB_OGL_CRUTIL = $(PATH_OBJ)/VBoxOGLcrutil/VBoxOGLcrutil$(VBOX_SUFF_LIB)
1506 VBOX_LIB_OGL_HOSTCRUTIL = $(PATH_OBJ)/VBoxOGLhostcrutil/VBoxOGLhostcrutil$(VBOX_SUFF_LIB)
1507 else
1508 VBOX_LIB_OGL_CRUTIL = $(VBOX_PATH_ADDITIONS)/VBoxOGLcrutil$(VBOX_SUFF_DLL)
1509 VBOX_LIB_OGL_HOSTCRUTIL = $(PATH_BIN)/VBoxOGLhostcrutil$(VBOX_SUFF_DLL)
1510 endif
1511
1512 VBOX_DARWIN_OPENGL_INST = obj/VBoxOGL/GL/
1513 VBOX_DARWIN_OPENGL_HEADERS = gl.h glu.h
1514 SDK_DARWIN-OPENGL = Workaround SDK for the darwin OpenGL include directorly layout layout.
1515 SDK_DARWIN-OPENGL_INCS = $(PATH_OUT)/obj/VBoxOGL
1516 SDK_DARWIN-OPENGL_ORDERDEPS = $(addprefix $(PATH_OUT)/obj/VBoxOGL/GL/./,$(VBOX_DARWIN_OPENGL_HEADERS))
1517 ## @todo kBuild: Using INTERMEDIATES doesn't work!
1518endif
1519
1520# Two helper variables for the VBOX_WITH_ORIGIN stuff:
1521# VBOX_ORIGIN - Indirect expansion trick.
1522# VBOX_GCC_RPATH_OPT - Different GCC/LD combinations needs different options.
1523VBOX_ORIGIN = $$ORIGIN
1524ifeq ($(KBUILD_TARGET),solaris)
1525 VBOX_GCC_RPATH_OPT = -R
1526else
1527 VBOX_GCC_RPATH_OPT = -Wl,-rpath,
1528 VBOX_GCC_ORIGIN_OPT = -Wl,-z,origin
1529endif
1530
1531# The icons to use.
1532ifdef VBOX_OSE
1533 VBOX_WINDOWS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_win.ico
1534 VBOX_WINDOWS_ADDITIONS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_win.ico
1535 VBOX_NSIS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_win.ico
1536 VBOX_MACOSX_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox.icns
1537else
1538 ifeq ($(KBUILD_HOST),win)
1539 VBOX_WINDOWS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/VirtualBox-vista.ico
1540 VBOX_WINDOWS_ADDITIONS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/VirtualBoxGA-vista.ico
1541 VBOX_NSIS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/VirtualBoxGA-nsis.ico
1542 TOOL_VCC80X86_RC := $(PATH_DEVTOOLS)/win.x86/ddk/6000/bin/x86/rc.exe
1543 TOOL_VCC80AMD64_RC := $(PATH_DEVTOOLS)/win.x86/ddk/6000/bin/x86/rc.exe
1544 TOOL_VCC70_RC := $(PATH_DEVTOOLS)/win.x86/ddk/6000/bin/x86/rc.exe
1545 else
1546 VBOX_WINDOWS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/VirtualBox-winxp.ico
1547 VBOX_WINDOWS_ADDITIONS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/VirtualBoxGA-winxp.ico
1548 VBOX_NSIS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/VirtualBox-nsis.ico
1549 endif
1550 VBOX_MACOSX_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/VirtualBox.icns
1551endif
1552
1553
1554ifndef VBOX_NOINC_GCC_CONFIG_KMK
1555#
1556# GCC stuff properties.
1557# Most of this is resolved on first kmk invocation and cached in PATH_OUT.
1558#
1559# Note! That a harmless warning is printed if the file doesn't exist.
1560# Note! Changes in GCC are not detected automatically (yet).
1561#
1562include $(KBUILD_PATH)/tools/$(VBOX_GCC_TOOL).kmk
1563ifneq ($(VBOX_GCC_TOOL),$(VBOX_GCC32_TOOL))
1564 include $(KBUILD_PATH)/tools/$(VBOX_GCC32_TOOL).kmk
1565endif
1566
1567# These tests never worked on Windows because of /dev/null, so, there
1568# can be no harm in just dropping them until cygwin is mp safe.
1569ifeq ($(KBUILD_HOST),win)
1570VBOX_GCC_CHECK_CC = $(2)
1571VBOX_GCC_CHECK_CXX = $(2)
1572VBOX_GCC_CHECK_LD = $(2)
1573VBOX_GCC32_CHECK_CXX = $(2)
1574else
1575VBOX_GCC_CHECK_CC = $(shell \
1576 if $(TOOL_$(VBOX_GCC_TOOL)_CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; \
1577 then echo "$(1)"; \
1578 else echo "$(2)"; fi; )
1579
1580VBOX_GCC_CHECK_CXX = $(shell \
1581 if $(TOOL_$(VBOX_GCC_TOOL)_CXX) $(1) -S -o /dev/null -xc++ /dev/null > /dev/null 2>&1; \
1582 then echo "$(1)"; \
1583 else echo "$(2)"; fi; )
1584
1585VBOX_GCC_CHECK_LD = $(shell \
1586 if $(TOOL_$(VBOX_GCC_TOOL)_LD) -Wl,$(1) -nostdlib -o /dev/null -xc /dev/null > /dev/null 2>&1 ;\
1587 then echo "-Wl,$(1)"; \
1588 else echo "$(2)"; fi; )
1589
1590VBOX_GCC32_CHECK_CXX = $(shell \
1591 if $(TOOL_$(VBOX_GCC32_TOOL)_CXX) $(1) -S -o /dev/null -xc++ /dev/null > /dev/null 2>&1; \
1592 then echo "$(1)"; \
1593 else echo "$(2)"; fi; )
1594endif
1595
1596ifeq ($(KBUILD_HOST),win)
1597# This isn't important (yet) on windows, so cook the result until
1598# cygwin is feeling better.
1599VBOX_GCC_VERSION := $(int-add $(int-mul 10000, 3), $(int-mul 100, 3), 3)
1600else
1601# This is kind of bad, the returned string needs to be re-evaluated before use.
1602# The reason for this hack is that the windows kmk_ash cannot deal with $((1+1)).
1603# Some versions of gcc (e.g. openSUSE11) return only major.minor on `gcc -dumpversion`.
1604VBOX_GCC_VERSION = $(shell \
1605 $(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))|' )
1606endif
1607
1608# No $(QUIET) here as it's interesting to see what goes into the file.
1609$(PATH_OUT)/GCCConfig.kmk: $(PATH_ROOT)/Config.kmk $(LOCALCFG) $(AUTOCFG)
1610 $(call MSG_GENERATE,,$@,)
1611 $(QUIET)$(RM) -f '$@'
1612 $(QUIET)$(MKDIR) -p $(@D)
1613
1614# HC compiler switch detection.
1615 $(APPEND) '$@' 'VBOX_GCC_VERSION_CC ?= $(call VBOX_GCC_VERSION,$(TOOL_$(VBOX_GCC_TOOL)_CC))'
1616 $(APPEND) '$@' 'VBOX_GCC_VERSION_CXX ?= $(call VBOX_GCC_VERSION,$(TOOL_$(VBOX_GCC_TOOL)_CXX))'
1617 $(APPEND) '$@' 'VBOX_GCC_LIBGCC ?= $(shell $(TOOL_$(VBOX_GCC_TOOL)_CC) -print-libgcc-file-name)'
1618 $(APPEND) '$@' 'VBOX_GCC_Wno-pointer-sign ?= $(call VBOX_GCC_CHECK_CC,-Wno-pointer-sign,)'
1619 $(APPEND) '$@' 'VBOX_GCC_Wno-array_bounds ?= $$(if $$(int-ge $$(VBOX_GCC_VERSION_CXX),40300),-Wno-array-bounds,)'
1620# -Wextra produces additional useful warnings but includes -Wno-missing-field-initializers (too noisy)
1621 $(APPEND) '$@' 'VBOX_GCC_Wextra ?= $(call VBOX_GCC_CHECK_CC,-Wextra,)'
1622 $(APPEND) '$@' 'VBOX_GCC_Wno-missing-field-initializers ?= $(call VBOX_GCC_CHECK_CC,-Wno-missing-field-initializers,)'
1623 $(APPEND) '$@' 'VBOX_GCC_Wno-variadic-macros ?= $(call VBOX_GCC_CHECK_CXX,-Wno-variadic-macros,)'
1624 $(APPEND) '$@' 'VBOX_GCC_Wno-invalid-offsetof ?= $(call VBOX_GCC_CHECK_CXX,-Wno-invalid-offsetof,)'
1625 $(APPEND) '$@' 'VBOX_GCC_fno-stack-protector ?= $(call VBOX_GCC_CHECK_CC,-fno-stack-protector,)'
1626# Produce code optimized for the most common IA32/AMD64/EM64T processors. Introduced with gcc version 4.2.
1627 $(APPEND) '$@' 'VBOX_GCC_mtune-generic ?= $(call VBOX_GCC_CHECK_CC,-mtune=generic,)'
1628 $(APPEND) '$@' 'VBOX_LD_as_needed ?= $(call VBOX_GCC_CHECK_LD,--as-needed,)'
1629# gcc version < 3.4 has a bug in handling __attribute__((regparm(3))).
1630# See http://osdir.com/ml/gcc.prs/2002-08/msg00223.html and probably http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20004
1631 $(APPEND) '$@' 'VBOX_GCC_BUGGY_REGPARM ?= $$(int-lt $$(VBOX_GCC_VERSION_CC),30400)'
1632ifneq ($(KBUILD_TARGET),l4)
1633# Set default attribute for ELF and MACH-O symbols to ``hidden'' to reduce the number
1634# of relocation entries and PLT indirections in shared libraries. Don't allow for gcc version < 4.
1635 $(APPEND) '$@' 'ifneq ($$(VBOX_GCC_VERSION_CC),)'
1636 $(APPEND) '$@' ' ifneq ($$(int-ge $$(VBOX_GCC_VERSION_CC),40000),)'
1637 $(APPEND) '$@' ' VBOX_GCC_fvisibility-hidden ?= $(call VBOX_GCC_CHECK_CC,-fvisibility=hidden -DVBOX_HAVE_VISIBILITY_HIDDEN -DRT_USE_VISIBILITY_DEFAULT,)'
1638 $(APPEND) '$@' ' endif'
1639 $(APPEND) '$@' 'endif'
1640endif
1641ifneq ($(KBUILD_TARGET),l4)
1642# Set default attribute for inline functions to ``hidden'' to reduce the number
1643# of relocation entries and PLT indirections in shared libraries. Don't allow for gcc version < 4.
1644 $(APPEND) '$@' 'ifneq ($$(VBOX_GCC_VERSION_CXX),)'
1645 $(APPEND) '$@' ' ifneq ($$(int-ge $$(VBOX_GCC_VERSION_CXX),40000),)'
1646 $(APPEND) '$@' ' VBOX_GCC_fvisibility-inlines-hidden ?= $(call VBOX_GCC_CHECK_CXX,-fvisibility-inlines-hidden,)'
1647 $(APPEND) '$@' ' endif'
1648 $(APPEND) '$@' 'endif'
1649endif
1650# Find the compiler includes for IPRT no-crt.
1651# Note that `$(dir $(gcc -print-libgcc-file-name))/include does not work for a 64-bit cross build on a 32-bit build host.
1652ifeq ($(KBUILD_HOST),win)
1653# With the cygwin issues and gcc on windows returning a useless path, just skip this on windows.
1654 $(APPEND) '$@' 'VBOX_PATH_GCC_INCS ?= '
1655else
1656 $(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'
1657endif
1658# 32-bit (GC) compiler switch detection.
1659 $(APPEND) '$@' 'VBOX_GCC32_VERSION_CC ?= $(call VBOX_GCC_VERSION,$(TOOL_$(VBOX_GCC32_TOOL)_CC))'
1660 $(APPEND) '$@' 'VBOX_GCC32_VERSION_CXX ?= $(call VBOX_GCC_VERSION,$(TOOL_$(VBOX_GCC32_TOOL)_CXX))'
1661 $(APPEND) '$@' 'VBOX_GCC32_LIBGCC ?= $(shell $(TOOL_$(VBOX_GCC32_TOOL)_CC) -print-libgcc-file-name)'
1662 $(APPEND) '$@' 'VBOX_GCC32_Wno-variadic-macros ?= $(call VBOX_GCC32_CHECK_CXX,-Wno-variadic-macros,)'
1663
1664include $(PATH_OUT)/GCCConfig.kmk
1665endif # !VBOX_NOINC_GCC_CONFIG_KMK
1666
1667
1668#
1669# Code Signing.
1670#
1671ifdef VBOX_SIGNING_MODE
1672 ifeq ($(KBUILD_HOST),win)
1673 # VBOX_PATH_SELFSIGN points to the Vista WDK bin/SelfSign directory.
1674 ifndef VBOX_PATH_SELFSIGN
1675 VBOX_PATH_SELFSIGN := $(lastword $(sort $(wildcard $(PATH_DEVTOOLS)/win.x86/selfsign/*)))
1676 ifeq ($(VBOX_PATH_SELFSIGN),)
1677 VBOX_PATH_SELFSIGN := $(PATH_DEVTOOLS)/win.x86/selfsign/r1
1678 endif
1679 endif
1680 VBOX_SIGNTOOL ?= $(PATH_DEVTOOLS)/bin/retry.cmd $(VBOX_PATH_SELFSIGN)/SignTool.exe
1681 VBOX_INF2CAT ?= $(VBOX_PATH_SELFSIGN)/Inf2Cat.exe
1682
1683 # There are three signing modes; 'test', 'development' and 'release'.
1684 ifeq ($(strip $(VBOX_SIGNING_MODE)),test)
1685 VBOX_CERTIFICATE_SUBJECT_NAME ?= MyTestCertificate
1686 VBOX_CERTIFICATE_SUBJECT_NAME_ARGS ?= /n "$(VBOX_CERTIFICATE_SUBJECT_NAME)"
1687 else if1of ($(VBOX_SIGNING_MODE),release development)
1688 VBOX_CERTIFICATE_SUBJECT_NAME ?= Sun Microsystems, Inc.
1689 VBOX_CERTIFICATE_SUBJECT_NAME_ARGS ?= /n "$(VBOX_CERTIFICATE_SUBJECT_NAME)"
1690 VBOX_CROSS_CERTIFICATE_FILE ?= $(VBOX_PATH_SELFSIGN)/MSCV-VSClass3.cer
1691 VBOX_CROSS_CERTIFICATE_FILE_ARGS ?= /ac "$(VBOX_CROSS_CERTIFICATE_FILE)"
1692 VBOX_TSA_URL ?= http://timestamp.verisign.com/scripts/timestamp.dll
1693 VBOX_TSA_URL_ARGS ?= /t "$(VBOX_TSA_URL)"
1694 else
1695 $(error Unknown VBOX_SIGNING_MODE: $(VBOX_SIGNING_MODE))
1696 endif
1697 VBOX_CERTIFICATE_STORE ?= my
1698 VBOX_CERTIFICATE_STORE_ARGS ?= /s "$(VBOX_CERTIFICATE_STORE)"
1699
1700 ## Commands for signing a driver image after link.
1701 VBOX_SIGN_DRIVER_CMDS ?= $(if $(eq $(tool_do),LINK_LIBRARY),,$(call VBOX_SIGN_FILE_FN,$(out)))
1702 ## Sign a file.
1703 # @param 1 The file to sign.
1704 VBOX_SIGN_FILE_FN ?= $(VBOX_SIGNTOOL) sign \
1705 $(VBOX_CROSS_CERTIFICATE_FILE_ARGS) \
1706 $(VBOX_CERTIFICATE_STORE_ARGS) \
1707 $(VBOX_CERTIFICATE_SUBJECT_NAME_ARGS) \
1708 $(VBOX_TSA_URL_ARGS) \
1709 $(1)
1710 ## Create a security catalog file.
1711 # @param 1 The directory containing the stuff to sign.
1712 # @param 2 The expected .cat name. (Inf2Cat lowercases it)
1713 # @param 3 The list of OSes, separated by ';'.
1714 VBOX_MAKE_CAT_HLP_FN ?= \
1715 $(RM) -f $(2)\
1716 $(NL)$(TAB)$(VBOX_INF2CAT) /driver:$(strip $(1)) /os:$(strip $(subst ;,$(COMMA),$(3))) /verbose \
1717 $(NL)$(TAB)$(MV) $(2) $(2) \
1718 $(NL)$(TAB)$(call VBOX_SIGN_FILE_FN,$(2))
1719 VBOX_MAKE_CAT64_FN ?= $(call VBOX_MAKE_CAT_HLP_FN,$(1),$(2),XP_X64;Server2003_X64;Vista_X64)
1720 VBOX_MAKE_CAT32_FN ?= $(call VBOX_MAKE_CAT_HLP_FN,$(1),$(2),2000;XP_X86;Server2003_X86;Vista_X86)
1721 ifeq ($(KBUILD_TARGET_ARCH),x86)
1722 VBOX_MAKE_CAT_FN ?= $(call VBOX_MAKE_CAT32_FN,$(1),$(2))
1723 else
1724 VBOX_MAKE_CAT_FN ?= $(call VBOX_MAKE_CAT64_FN,$(1),$(2))
1725 endif
1726
1727 # Go nuts, sign everything.
1728 ifeq ($(strip $(VBOX_SIGNING_MODE)),release)
1729 ## Commands for signing an executable or a dll image after link.
1730 VBOX_SIGN_IMAGE_CMDS ?= $(if $(eq $(tool_do),LINK_LIBRARY),,$(call VBOX_SIGN_FILE_FN,$(out)))
1731 endif
1732 ## Enable signing of the additions.
1733 VBOX_SIGN_ADDITIONS ?= 1
1734 else
1735 # Not windows build platform, ignore.
1736 VBOX_SIGNING_MODE :=
1737 endif
1738endif
1739
1740#
1741# Windows .inf editing.
1742#
1743ifeq ($(KBUILD_TARGET_ARCH),x86)
1744 VBOX_EDIT_INF_FN = $(call VBOX_EDIT_INF32_FN,$(1),$(2))
1745else
1746 VBOX_EDIT_INF_FN = $(call VBOX_EDIT_INF64_FN,$(1),$(2))
1747endif
1748## Edit an inf file an x86 target.
1749# @param 1 The inf file to edit.
1750# @param 2 The output file.
1751VBOX_EDIT_INF32_FN = $(SED) $(if $(VBOX_SIGNING_MODE),-e 's/^;cat *//', -e '/^;cat /d') \
1752 -e 's/^;x86 *//' \
1753 -e '/^;amd64 /d' \
1754 -e 's/^;edit-DriverVer.*/DriverVer = $(date-utc %m\/%d\/%Y),$(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)/' \
1755 --output $(2) \
1756 $(1)
1757## Edit an inf file an x86 target.
1758# @param 1 The inf file to edit.
1759# @param 2 The output file.
1760VBOX_EDIT_INF64_FN = $(SED) \
1761 $(if $(VBOX_SIGNING_MODE),-e 's/^;cat *//', -e '/^;cat /d')\
1762 -e 's/^;amd64 *//' \
1763 -e '/^;x86 /d' \
1764 -e 's/^;edit-DriverVer.*/DriverVer = $(date-utc %m\/%d\/%Y),$(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)/' \
1765 --output $(2) \
1766 $(1)
1767
1768#
1769# Default prefixes and suffixes.
1770#
1771VBOX_PREF_LIB =
1772if1of ($(KBUILD_TARGET),win os2)
1773VBOX_SUFF_LIB = .lib
1774else
1775VBOX_SUFF_LIB = .a
1776endif
1777VBOX_SUFF_DLL = $(SUFF_DLL)
1778ifeq ($(KBUILD_TARGET),os2) # GXX3OMF produces out .o at the moment.
1779VBOX_SUFF_OBJ = .o
1780else
1781VBOX_SUFF_OBJ = $(SUFF_OBJ)
1782endif
1783VBOXW32GUEST_SUFF_LIB = .lib
1784VBOXLNX32GUEST_SUFF_LIB = .a
1785
1786#
1787# SDKs for external libraries.
1788#
1789SDK_VBOX_LIBXML2 = .
1790#if1of ($(KBUILD_TARGET),win os2 solaris)
1791 SDK_VBOX_LIBXML2_INCS ?= $(PATH_ROOT)/src/libs/libxml2-2.6.30/include
1792 ifdef VBOX_WITH_LIBXML2_IN_VBOXRT
1793 SDK_VBOX_LIBXML2_DEFS ?= _REENTRANT
1794 else
1795 SDK_VBOX_LIBXML2_DEFS ?= LIBXML_STATIC _REENTRANT
1796 SDK_VBOX_LIBXML2_LIBS ?= $(PATH_LIB)/VBox-libxml2$(VBOX_SUFF_LIB)
1797 endif
1798 SDK_VBOX_LIBXML2_DEFS.win += WIN32 _WINDOWS _MBCS
1799#else if1of ($(KBUILD_TARGET),linux)
1800# SDK_VBOX_LIBXML2_INCS ?=
1801# SDK_VBOX_LIBXML2_LIBS ?=
1802# SDK_VBOX_LIBXML2_CFLAGS ?= $(shell pkg-config libxml-2.0 --cflags)
1803# SDK_VBOX_LIBXML2_CXXFLAGS ?= $(SDK_VBOX_LIBXML2_CFLAGS)
1804# SDK_VBOX_LIBXML2_LDFLAGS ?= $(shell pkg-config libxml-2.0 --libs)
1805#else
1806# SDK_VBOX_LIBXML2_INCS ?=
1807# SDK_VBOX_LIBXML2_LIBS ?= xml2
1808#endif
1809
1810SDK_VBOX_LIBXSLT = .
1811#if1of ($(KBUILD_TARGET),win os2 solaris)
1812 SDK_VBOX_LIBXSLT_INCS ?= $(PATH_ROOT)/src/libs/libxslt-1.1.22
1813 SDK_VBOX_LIBXSLT_LIBS ?= $(PATH_LIB)/VBox-libxslt$(VBOX_SUFF_LIB)
1814 SDK_VBOX_LIBXSLT_DEFS ?=
1815 SDK_VBOX_LIBXSLT_DEFS.win += WIN32 _WINDOWS _MBCS _REENTRANT
1816#else if1of ($(KBUILD_TARGET),linux)
1817# SDK_VBOX_LIBXSLT_INCS ?=
1818# SDK_VBOX_LIBXSLT_LIBS ?=
1819# SDK_VBOX_LIBXSLT_CFLAGS ?= $(shell pkg-config libxslt-1.0 --cflags)
1820# SDK_VBOX_LIBXSLT_CXXFLAGS ?= $(SDK_VBOX_LIBXSLT_CFLAGS)
1821# SDK_VBOX_LIBXSLT_LDFLAGS ?= $(shell pkg-config libxslt-1.0 --libs)
1822#else
1823# SDK_VBOX_LIBXSLT_INCS ?=
1824# SDK_VBOX_LIBXSLT_LIBS ?= xslt
1825#endif
1826
1827SDK_VBOX_LIBPNG = .
1828SDK_VBOX_LIBPNG_INCS ?= $(PATH_ROOT)/src/libs/libpng-1.2.8
1829SDK_VBOX_LIBPNG_LIBS ?= $(PATH_LIB)/VBox-libpng$(VBOX_SUFF_LIB)
1830
1831SDK_VBOX_ZLIB = .
1832if1of ($(KBUILD_TARGET), win os2)
1833 SDK_VBOX_ZLIB_INCS ?= $(PATH_ROOT)/src/libs/zlib-1.2.1
1834 SDK_VBOX_ZLIB_LIBS ?= $(PATH_LIB)/VBox-zlib$(VBOX_SUFF_LIB)
1835else
1836 SDK_VBOX_ZLIB_INCS ?=
1837 SDK_VBOX_ZLIB_LIBS ?= z
1838endif
1839
1840SDK_VBOX_OPENSSL = .
1841SDK_VBOX_OPENSSL_DEFAULT_INCS := $(PATH_OUT)/obj/crypto-headers/include
1842SDK_VBOX_OPENSSL_INCS ?= $(SDK_VBOX_OPENSSL_DEFAULT_INCS)
1843ifndef VBOX_WITH_LIBXML2_IN_VBOXRT
1844 SDK_VBOX_OPENSSL_LIBS ?= $(PATH_LIB)/VBox-libcrypto$(VBOX_SUFF_LIB)
1845endif
1846# Build entire openssl library, not just the minimal subset.
1847if1of ($(KBUILD_TARGET), linux solaris)
1848 VBOX_OPENSSL_ALL=1
1849endif
1850
1851ifndef VBOX_OSE
1852 if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), win.x86 win.amd64 linux.x86 linux.amd64 solaris.x86 solaris.amd64 darwin.x86 darwin.amd64)
1853 VBOX_WITH_LIBCURL = 1
1854 SDK_VBOX_LIBCURL = .
1855 SDK_VBOX_LIBCURL_INCS ?= $(PATH_ROOT)/src/libs/curl-7.19.4/include
1856 SDK_VBOX_LIBCURL_LIBS ?= $(PATH_LIB)/VBox-libcurl$(VBOX_SUFF_LIB)
1857 SDK_VBOX_LIBCURL_DEFS ?= BUILDING_LIBCURL
1858 endif
1859endif
1860
1861SDK_VBOX_FFMPEG = .
1862if1of ($(KBUILD_TARGET), win os2 darwin linux)
1863 SDK_VBOX_FFMPEG_INCS ?= \
1864 $(PATH_ROOT)/src/libs/ffmpeg-20060710/libavutil \
1865 $(PATH_ROOT)/src/libs/ffmpeg-20060710/libavcodec \
1866 $(PATH_ROOT)/src/libs/ffmpeg-20060710/libavformat
1867 ifeq ($(KBUILD_TARGET),win)
1868 ## @todo Michael! Where is $(PATH_LIB)/VBoxFFmpegImp$(VBOX_SUFF_LIB) supposed to come from?
1869 #SDK_VBOX_FFMPEG_LIBS ?= $(PATH_LIB)/VBoxFFmpeg.a
1870 SDK_VBOX_FFMPEG_LIBS ?= $(PATH_LIB)/VBoxFFmpegImp.lib
1871 else
1872 SDK_VBOX_FFMPEG_LIBS ?= $(PATH_BIN)/VBoxFFmpeg$(SUFF_DLL)
1873 endif
1874else
1875 SDK_VBOX_FFMPEG_INCS ?= /usr/include/ffmpeg /usr/include/libpng
1876 SDK_VBOX_FFMPEG_LIBS ?= avutil avcodec avformat
1877endif
1878
1879SDK_VBOX_BOOST = .
1880SDK_VBOX_BOOST_INCS ?= $(PATH_ROOT)/src/libs/boost-1.37.0
1881
1882#
1883# Special SDK for the problematic NTDLL.LIB.
1884#
1885SDK_VBOX_NTDLL = Requires W2K3DDK
1886SDK_VBOX_NTDLL_LIBS ?= $(PATH_SDK_W2K3DDK_LIB)/ntdll.lib
1887ifeq ($(KBUILD_TARGET),win)
1888 include $(KBUILD_PATH)/sdks/W2K3DDK.kmk
1889endif
1890
1891#
1892# The linux kernel headers(/sources).
1893#
1894if1of ($(KBUILD_TARGET), linux)
1895 ifeq ($(origin VBOX_LINUX_SRC),undefined)
1896 ifneq ($(wildcard /lib/modules/$(shell uname -r)/build/include/linux/autoconf.h),)
1897 export VBOX_LINUX_SRC := /lib/modules/$(shell uname -r)/build
1898 else
1899 export VBOX_LINUX_SRC := /usr/src/linux
1900 endif
1901 endif
1902 ifneq ($(VBOX_LINUX_SRC),)
1903 ifeq ($(origin VBOX_LINUX_INCS),undefined)
1904 export VBOX_LINUX_INCS := $(VBOX_LINUX_SRC)/include
1905 # XXX hack alert! support splitted Linux kernels (make O=<build directory>)
1906 # XXX put this crap elsewhere
1907 kernelpath := $(shell $(SED_EXT) -ne 's+^KERNELSRC.*= *\(.*\)+\1+p' $(VBOX_LINUX_SRC)/Makefile)
1908 ifeq ($(kernelpath),)
1909 # Linux >= 2.6.25
1910 kernelpath := $(shell $(SED_EXT) -ne 's+^MAKEARGS *:= *-C *\(.*\)+\1+p' $(VBOX_LINUX_SRC)/Makefile)
1911 endif
1912 ifneq ($(kernelpath),)
1913 # absolute path?
1914 ifneq ($(patsubst /%,,$(kernelpath)),)
1915 # no, relative path
1916 kernelpath := $(realpath $(VBOX_LINUX_SRC)/$(kernelpath))
1917 endif
1918 endif
1919 ifneq ($(kernelpath),)
1920 VBOX_LINUX_INCS += $(VBOX_LINUX_SRC)/include2 $(kernelpath)/include
1921 else
1922 kernelpath := $(VBOX_LINUX_SRC)
1923 endif
1924 VBOX_LINUX_INCS += $(kernelpath)/include/asm-i386/mach-default \
1925 $(kernelpath)/include/asm-x86/mach-default \
1926 $(kernelpath)/arch/x86/include \
1927 $(kernelpath)/arch/x86/include/asm/mach-default \
1928 $(kernelpath)/include
1929 endif
1930 endif
1931endif
1932
1933#
1934# Determine Solaris version.
1935#
1936ifeq ($(KBUILD_TARGET),solaris)
1937 ifeq ($(origin VBOX_SOLARIS_VERSION),undefined)
1938 $(eval export VBOX_SOLARIS_VERSION := $(shell uname -r | $(SED_EXT) 's|\([0-9]*\)\.\([0-9]*\)|$$(int-add $$(int-mul 100, \1), \2)|' ))
1939 endif
1940 ifeq ($(VBOX_SOLARIS_VERSION),510)
1941 DEFS.solaris += RT_OS_SOLARIS_10
1942 # Solaris 10 does not include crossbow.
1943 VBOX_WITH_CROSSBOW =
1944 VBOX_SOLARIS_10 = 1
1945 # We cannot compile additions on Solaris 10, due kernel interface deps
1946 VBOX_WITHOUT_ADDITIONS := 1
1947 VBOX_WITH_ADDITIONS =
1948 endif
1949endif
1950
1951
1952#
1953# Template for building GC things.
1954#
1955TEMPLATE_VBOXGC = VBox GC
1956TEMPLATE_VBOXGC_ASTOOL = $(VBOX_ASTOOL)
1957TEMPLATE_VBOXGC_ASFLAGS = $(VBOX_ASFLAGS32)
1958TEMPLATE_VBOXGC_DEFS = IN_RC IPRT_NO_CRT RT_WITH_NOCRT_ALIASES $(ARCH_BITS_DEFS)
1959TEMPLATE_VBOXGC_INCS = $(PATH_ROOT)/include/iprt/nocrt
1960TEMPLATE_VBOXGC_SYSSUFF = .gc
1961TEMPLATE_VBOXGC_BLD_TRG_ARCH = x86
1962
1963ifeq ($(VBOX_LDR_FMT32),pe)
1964ifdef VBOX_USE_VCC80
1965 TEMPLATE_VBOXGC_TOOL = VCC80X86
1966 TEMPLATE_VBOXGC_CXXFLAGS = -Zi -Zl -GR- -EHs- -GF -W3 -wd4244 -GS- -wd4996 -Zc:wchar_t- -Gs8192 $(VBOX_VCC_GC_OPT) $(VBOX_VCC_GC_FP)
1967else
1968 TEMPLATE_VBOXGC_TOOL = VCC70
1969 TEMPLATE_VBOXGC_CXXFLAGS = -Zi -Zl -GR- -EHs- -GF -W3 -wd4244 $(VBOX_VCC_GC_OPT) $(VBOX_VCC_GC_FP)
1970endif
1971TEMPLATE_VBOXGC_CFLAGS = $(TEMPLATE_VBOXGC_CXXFLAGS)
1972TEMPLATE_VBOXGC_LDFLAGS = -Driver -Subsystem:NATIVE -Incremental:NO -Align:64 -MapInfo:Lines -MapInfo:Exports -NoD
1973ifndef VBOX_NOINC_MISC
1974 include $(KBUILD_PATH)/sdks/W2K3DDKX86.kmk
1975endif
1976TEMPLATE_VBOXGC_LIBS = \
1977 $(PATH_SDK_W2K3DDKX86_LIB)/int64.lib
1978endif # pe
1979
1980ifeq ($(VBOX_LDR_FMT32),elf)
1981TEMPLATE_VBOXGC_TOOL = $(VBOX_GCC32_TOOL)
1982TEMPLATE_VBOXGC_CXXFLAGS = -nostdinc -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC32_Wno-variadic-macros) -fno-exceptions -fno-rtti $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_fvisibility-inlines-hidden)
1983TEMPLATE_VBOXGC_CFLAGS = -nostdinc -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC32_Wno-variadic-macros) -Wmissing-prototypes -Wstrict-prototypes $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_fvisibility-hidden)
1984ifeq ($(KBUILD_TARGET),solaris)
1985 TEMPLATE_VBOXGC_LDFLAGS = -r
1986else
1987 TEMPLATE_VBOXGC_LDFLAGS = -nostdlib -Bsymbolic
1988 # "temporarily", must fix the loader.
1989 TEMPLATE_VBOXGC_LDFLAGS += $(if $(VBOX_DO_STRIP_MODULES),-S,)
1990 TEMPLATE_VBOXGC_LDFLAGS.release = $(if $(VBOX_DO_STRIP_MODULES),-S,)
1991endif
1992ifn1of ($(KBUILD_TARGET), solaris freebsd)
1993 TEMPLATE_VBOXGC_LIBS = \
1994 $(VBOX_GCC32_LIBGCC) # instricts
1995endif
1996endif
1997
1998ifeq ($(VBOX_LDR_FMT32),macho)
1999TEMPLATE_VBOXGC_TOOL = GXX4MACHO
2000TEMPLATE_VBOXGC_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS)
2001TEMPLATE_VBOXGC_CXXFLAGS = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS) -m32 -nostdinc -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC32_Wno-variadic-macros) -fno-common -msoft-float -static -fno-stack-protector -fno-exceptions -fno-rtti $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing
2002TEMPLATE_VBOXGC_CFLAGS = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -m32 -nostdinc -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC32_Wno-variadic-macros) -fno-common -msoft-float -static -fno-stack-protector -Wmissing-prototypes -Wstrict-prototypes $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing
2003TEMPLATE_VBOXGC_LDFLAGS = $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -m32 -nostdlib
2004#TEMPLATE_VBOXGC_LDFLAGS.release = -Wl,-S ???
2005endif
2006
2007ifeq ($(VBOX_LDR_FMT32),lx)
2008TEMPLATE_VBOXGC_TOOL = GXX3OMF
2009TEMPLATE_VBOXGC_CXXFLAGS = -nostdinc -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC32_Wno-variadic-macros) -fno-exceptions -fno-rtti $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing
2010TEMPLATE_VBOXGC_CFLAGS = -nostdinc -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC32_Wno-variadic-macros) -Wmissing-prototypes -Wstrict-prototypes $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing
2011TEMPLATE_VBOXGC_LDFLAGS = -Zdll -nostdlib
2012TEMPLATE_VBOXGC_LIBS = \
2013 $(VBOX_GCC32_LIBGCC) \
2014 $(VBOX_OBJ_SYS0) \
2015 end
2016endif
2017
2018
2019#
2020# Template for building a GC ring-3 testcase (tstVMStructGC, tstDevStructGC).
2021#
2022TEMPLATE_VBOXGCEXE = VBox GC as ring-3 testcase
2023TEMPLATE_VBOXGCEXE_EXTENDS = VBOXGC
2024TEMPLATE_VBOXGCEXE_DEFS = $(filter-out IPRT_NO_CRT RT_WITH_NOCRT_ALIASES,$(TEMPLATE_VBOXGC_DEFS))
2025TEMPLATE_VBOXGCEXE_INCS = $(NO_SUCH_VARIABLE)
2026
2027ifeq ($(VBOX_LDR_FMT32),pe)
2028 TEMPLATE_VBOXGCEXE_LDFLAGS = -Incremental:NO -MapInfo:Exports -NoD -Debug
2029 TEMPLATE_VBOXGCEXE_SDKS = WIN32SDK
2030 ifdef VBOX_USE_VCC80
2031 TEMPLATE_VBOXGCEXE_LIBS = \
2032 $(PATH_TOOL_VCC80X86_LIB)/libcmt.lib \
2033 $(PATH_TOOL_VCC80X86_LIB)/oldnames.lib
2034 else
2035 TEMPLATE_VBOXGCEXE_LIBS = \
2036 $(PATH_TOOL_VCC70_LIB)/libcmt.lib \
2037 $(PATH_TOOL_VCC70_LIB)/oldnames.lib
2038 endif
2039endif
2040
2041ifeq ($(VBOX_LDR_FMT32),elf)
2042 TEMPLATE_VBOXGCEXE_CFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBOXGC_CFLAGS))
2043 TEMPLATE_VBOXGCEXE_CXXFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBOXGC_CXXFLAGS))
2044 TEMPLATE_VBOXGCEXE_LDFLAGS = -g
2045 TEMPLATE_VBOXGCEXE_LDFLAGS.dbgopt = -g
2046 TEMPLATE_VBOXGCEXE_LDFLAGS.strict = -g
2047 TEMPLATE_VBOXGCEXE_LDFLAGS.release = -g
2048 if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), freebsd.amd64)
2049 # The FreeBSD port of gcc isn't picking up -m32 where it should. the .o order below isn't
2050 # quite right (target source comes first), if it stops working we'll have to write a linker tool.
2051 TEMPLATE_VBOXGCEXE_DEFS.$(KBUILD_TARGET) = $(TEMPLATE_VBOXGC_DEFS.$(KBUILD_TARGET)) IPRT_DONT_USE_SYSTEM_STDINT_H
2052 TEMPLATE_VBOXGCEXE_LDFLAGS.$(KBUILD_TARGET) = $(TEMPLATE_VBOXGC_LDFLAGS.$(KBUILD_TARGET)) -nostdlib -v
2053 TEMPLATE_VBOXGCEXE_SOURCES.$(KBUILD_TARGET) = /usr/lib32/crtend.o /usr/lib32/crtn.o
2054 TEMPLATE_VBOXGCEXE_SOURCES = /usr/lib32/crt1.o /usr/lib32/crti.o /usr/lib32/crtbegin.o
2055 TEMPLATE_VBOXGCEXE_LIBPATH.$(KBUILD_TARGET) = /usr/lib32
2056 TEMPLATE_VBOXGCEXE_LIBS.$(KBUILD_TARGET) = /usr/lib32/libc.so
2057 endif
2058endif
2059
2060ifeq ($(VBOX_LDR_FMT32),macho)
2061 TEMPLATE_VBOXGCEXE_CFLAGS = $(filter-out -static -nostdinc,$(TEMPLATE_VBOXGC_CFLAGS))
2062 TEMPLATE_VBOXGCEXE_CXXFLAGS = $(filter-out -static -nostdinc,$(TEMPLATE_VBOXGC_CXXFLAGS))
2063 TEMPLATE_VBOXGCEXE_LDFLAGS = -g -m32
2064endif
2065
2066ifeq ($(VBOX_LDR_FMT32),lx)
2067 TEMPLATE_VBOXGCEXE_CFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBOXGC_CFLAGS))
2068 TEMPLATE_VBOXGCEXE_CXXFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBOXGC_CXXFLAGS))
2069 TEMPLATE_VBOXGCEXE_LDFLAGS = -g
2070 TEMPLATE_VBOXGCEXE_LIBS = $(NO_SUCH_VARIABLE)
2071endif
2072
2073
2074#
2075# Template for building R0 things.
2076#
2077TEMPLATE_VBOXR0 = VBox Ring 0
2078TEMPLATE_VBOXR0_ASTOOL = $(VBOX_ASTOOL)
2079TEMPLATE_VBOXR0_ASFLAGS = $(VBOX_ASFLAGS)
2080TEMPLATE_VBOXR0_DEFS = IN_RING0 IN_RING0_AGNOSTIC IPRT_NO_CRT RT_WITH_NOCRT_ALIASES $(ARCH_BITS_DEFS)
2081TEMPLATE_VBOXR0_INCS = $(PATH_ROOT)/include/iprt/nocrt
2082TEMPLATE_VBOXR0_SYSSUFF = .r0
2083
2084ifeq ($(VBOX_LDR_FMT),pe)
2085TEMPLATE_VBOXR0_TOOL = $(VBOX_VCC_TOOL)
2086ifdef VBOX_USE_VCC80
2087 TEMPLATE_VBOXR0_CXXFLAGS = -Zi -Zl -GR- -EHs- -GF -W3 -wd4244 -GS- -wd4996 -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
2088else
2089 TEMPLATE_VBOXR0_CXXFLAGS = -Zi -Zl -GR- -EHs- -GF -W3 -wd4244 $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
2090endif
2091TEMPLATE_VBOXR0_CFLAGS = $(TEMPLATE_VBOXR0_CXXFLAGS)
2092TEMPLATE_VBOXR0_LDFLAGS = -Driver -Subsystem:NATIVE -Incremental:NO -Align:64 -MapInfo:Exports -NoD
2093TEMPLATE_VBOXR0_LIBS.x86 = \
2094 $(PATH_SDK_W2K3DDKX86_LIB)/int64.lib
2095endif # pe
2096
2097ifeq ($(VBOX_LDR_FMT),elf)
2098TEMPLATE_VBOXR0_TOOL = $(VBOX_GCC_TOOL)
2099TEMPLATE_VBOXR0_CFLAGS = -nostdinc -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC_Wno-variadic-macros) -Wmissing-prototypes -Wstrict-prototypes $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_fvisibility-hidden)
2100TEMPLATE_VBOXR0_CXXFLAGS = -nostdinc -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC_Wno-variadic-macros) -fno-rtti -fno-exceptions $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_fvisibility-hidden)
2101TEMPLATE_VBOXR0_CFLAGS.amd64 = -m64 -mno-red-zone -mcmodel=kernel -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-asynchronous-unwind-tables -ffreestanding
2102TEMPLATE_VBOXR0_CXXFLAGS.amd64 = -m64 -mno-red-zone -mcmodel=kernel -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-asynchronous-unwind-tables
2103ifeq ($(KBUILD_TARGET),solaris)
2104 TEMPLATE_VBOXR0_LDFLAGS = -r
2105else
2106 TEMPLATE_VBOXR0_LDFLAGS = -nostdlib -Bsymbolic
2107 # temporarily, must fix the loader.
2108 TEMPLATE_VBOXR0_LDFLAGS += $(if $(VBOX_DO_STRIP_MODULES),-S,)
2109 TEMPLATE_VBOXR0_LDFLAGS.release = $(if $(VBOX_DO_STRIP_MODULES),-S,)
2110endif
2111ifn1of ($(KBUILD_TARGET),solaris freebsd)
2112 TEMPLATE_VBOXR0_LIBS = \
2113 $(VBOX_GCC_LIBGCC) # instricts
2114endif
2115endif
2116
2117ifeq ($(VBOX_LDR_FMT),macho)
2118TEMPLATE_VBOXR0_TOOL = GXX4MACHO
2119TEMPLATE_VBOXR0_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS)
2120TEMPLATE_VBOXR0_CXXFLAGS = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS) -nostdinc -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC_Wno-variadic-macros) \
2121 -fno-common -msoft-float -static -fno-rtti -fno-exceptions $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing \
2122 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-stack-protector
2123TEMPLATE_VBOXR0_CXXFLAGS.amd64 = -m64 -mno-red-zone -mno-sse3 -mno-sse4 -mno-sse4.1 -mno-sse4.2 -mno-sse4a -fno-unwind-tables
2124TEMPLATE_VBOXR0_CXXFLAGS.x86 = -m32
2125TEMPLATE_VBOXR0_CFLAGS = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -nostdinc -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC_Wno-variadic-macros) \
2126 -fno-common -msoft-float -static -Wmissing-prototypes -Wstrict-prototypes $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing \
2127 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-stack-protector
2128TEMPLATE_VBOXR0_CFLAGS.amd64 = -m64 -mno-red-zone -mno-sse3 -mno-sse4 -mno-sse4.1 -mno-sse4.2 -mno-sse4a -fno-unwind-tables
2129TEMPLATE_VBOXR0_CFLAGS.x86 = -m32
2130TEMPLATE_VBOXR0_LDFLAGS = $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -nostdlib
2131#TEMPLATE_VBOXR0_LDFLAGS.release = -Wl,-S ???
2132TEMPLATE_VBOXR0_LDFLAGS.amd64 = -m64 -static
2133TEMPLATE_VBOXR0_LDFLAGS.x86 = -m32
2134endif
2135
2136ifeq ($(VBOX_LDR_FMT),lx)
2137TEMPLATE_VBOXR0_TOOL = GXX3OMF
2138TEMPLATE_VBOXR0_CFLAGS = -nostdinc -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC_Wno-variadic-macros) -Wmissing-prototypes -Wstrict-prototypes $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing
2139TEMPLATE_VBOXR0_CXXFLAGS = -nostdinc -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC_Wno-variadic-macros) -fno-rtti -fno-exceptions $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing
2140TEMPLATE_VBOXR0_LDFLAGS = -nostdlib -Zdll
2141TEMPLATE_VBOXR0_LIBS = \
2142 $(VBOX_GCC_LIBGCC) \
2143 $(VBOX_OBJ_SYS0) \
2144 end
2145endif
2146
2147
2148#
2149# Template for building SUPDRV R0 things.
2150#
2151TEMPLATE_VBOXR0DRV = VBox SUPDRV Ring 0
2152TEMPLATE_VBOXR0DRV_ASTOOL = $(VBOX_ASTOOL)
2153TEMPLATE_VBOXR0DRV_ASFLAGS = $(VBOX_ASFLAGS)
2154TEMPLATE_VBOXR0DRV_DEFS = IN_RING0 IN_RT_R0 $(ARCH_BITS_DEFS)
2155
2156ifeq ($(KBUILD_TARGET),win)
2157 TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_VCC_TOOL)
2158 TEMPLATE_VBOXR0DRV_RCDEFS = \
2159 VBOX_VERSION_MAJOR=\"$(VBOX_VERSION_MAJOR)\" \
2160 VBOX_VERSION_MINOR=\"$(VBOX_VERSION_MINOR)\" \
2161 VBOX_VERSION_BUILD=\"$(VBOX_VERSION_BUILD)\" \
2162 VBOX_SVN_REV=\"$(VBOX_SVN_REV)\" \
2163 VBOX_VERSION_MAJOR_NR=$(VBOX_VERSION_MAJOR) \
2164 VBOX_VERSION_MINOR_NR=$(VBOX_VERSION_MINOR) \
2165 VBOX_VERSION_BUILD_NR=$(VBOX_VERSION_BUILD) \
2166 VBOX_SVN_REV_NR=$(VBOX_SVN_REV)
2167 TEMPLATE_VBOXR0DRV_DEFS.x86 = _X86_
2168 TEMPLATE_VBOXR0DRV_DEFS.amd64 = _AMD64_
2169 ifdef VBOX_USE_VCC80
2170 TEMPLATE_VBOXR0DRV_CXXFLAGS = -Zi -Zl -GR- -EHs- -GF -Gz -W3 -GS- -wd4996 -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
2171 else
2172 TEMPLATE_VBOXR0DRV_CXXFLAGS = -Zi -Zl -GR- -EHs- -GF -Gz -W3 $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
2173 endif
2174 TEMPLATE_VBOXR0DRV_CFLAGS = $(TEMPLATE_VBOXR0DRV_CXXFLAGS)
2175 TEMPLATE_VBOXR0DRV_LDFLAGS = -Driver -Subsystem:NATIVE -Incremental:NO -Align:64 -MapInfo:Exports -NoD -Debug
2176 TEMPLATE_VBOXR0DRV_POST_CMDS = $(VBOX_SIGN_DRIVER_CMDS)
2177endif
2178
2179ifeq ($(KBUILD_TARGET),linux)
2180TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_GCC_TOOL)
2181TEMPLATE_VBOXR0DRV_DEFS = __KERNEL__ MODULE IN_RING0 IN_RT_R0
2182TEMPLATE_VBOXR0DRV_INCS = $(VBOX_LINUX_INCS)
2183TEMPLATE_VBOXR0DRV_CFLAGS = -nostdinc -iwithprefix include \
2184 $(VBOX_GCC_WARN) -Wstrict-prototypes $(VBOX_GCC_Wno-pointer-sign) -Wno-sign-compare \
2185 $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing -fno-common
2186TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -mpreferred-stack-boundary=2 -msoft-float
2187TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 -mno-red-zone -mcmodel=kernel -mno-sse -mno-mmx -mno-sse2 -mno-3dnow \
2188 -fno-reorder-blocks -ffreestanding -fno-asynchronous-unwind-tables -funit-at-a-time \
2189 -Wno-sign-compare -Wdeclaration-after-statement
2190TEMPLATE_VBOXR0DRV_CXXFLAGS = $(filter-out -Wstrict-prototypes -Wno-pointer-sign -ffreestanding -Wdeclaration-after-statement,$(TEMPLATE_VBOXR0DRV_CFLAGS) $(TEMPLATE_VBOXR0DRV_CFLAGS.$(KBUILD_TARGET_ARCH))) -fno-exceptions -fno-rtti
2191 ifndef VBOX_LINUX_VERSION_2_4
2192# 2.6
2193TEMPLATE_VBOXR0DRV_SYSSUFF = .ko
2194TEMPLATE_VBOXR0DRV_LDFLAGS.x86 = -m elf_i386 -r
2195TEMPLATE_VBOXR0DRV_LDFLAGS.amd64 = -m elf_x86_64 -r
2196 else
2197# 2.4
2198TEMPLATE_VBOXR0DRV_SYSSUFF = .o
2199TEMPLATE_VBOXR0DRV_LDFLAGS = -r -s
2200 endif
2201endif
2202
2203ifeq ($(KBUILD_TARGET),os2)
2204TEMPLATE_VBOXR0DRV_TOOL = GXX3OMF
2205TEMPLATE_VBOXR0DRV_CXXFLAGS = -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing -fno-rtti -fno-exceptions
2206TEMPLATE_VBOXR0DRV_CFLAGS = -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC_Wno-variadic-macros) -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing
2207TEMPLATE_VBOXR0DRV_LIBS = $(VBOX_GCC_LIBGCC)
2208# wlink thinks physdevice doesn't need fixups and should have a stack - stupid!
2209TEMPLATE_VBOXR0DRV_LDFLAGS = -Zlinker Option -Zlinker internalrelocs, -Zlinker togglerelocs
2210endif
2211
2212ifeq ($(KBUILD_TARGET),darwin)
2213TEMPLATE_VBOXR0DRV_TOOL = GXX4MACHO
2214TEMPLATE_VBOXR0DRV_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS) KERNEL KERNEL_PRIVATE DRIVER_PRIVATE APPLE NeXT RT_USE_VISIBILITY_HIDDEN
2215TEMPLATE_VBOXR0DRV_INCS += $(VBOX_PATH_MACOSX_SDK)/System/Library/Frameworks/Kernel.framework/Headers
2216TEMPLATE_VBOXR0DRV_CXXFLAGS = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS) \
2217 -g -pipe $(VBOX_GCC_WARN) -Wno-long-long -fno-common -nostdinc -fno-builtin -finline \
2218 -fno-keep-inline-functions -fno-exceptions -msoft-float \
2219 -fapple-kext -fno-rtti -fcheck-new -force_cpusubtype_ALL
2220TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64 = -m64 -mkernel -mno-red-zone -gdwarf-2
2221TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = -m32 -static
2222TEMPLATE_VBOXR0DRV_CXXFLAGS.release = $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing -fasm-blocks
2223TEMPLATE_VBOXR0DRV_CXXFLAGS.profile = $(TEMPLATE_VBOXR0DRV_CXXFLAGS.release)
2224TEMPLATE_VBOXR0DRV_CXXFLAGS.kprofile = $(TEMPLATE_VBOXR0DRV_CXXFLAGS.release)
2225TEMPLATE_VBOXR0DRV_CFLAGS = $(VBOX_DARWIN_DEF_SDK_CFLAGS) \
2226 -g -pipe $(VBOX_GCC_WARN) -Wno-long-long -fno-common -nostdinc -fno-builtin -finline \
2227 -fno-keep-inline-functions -fno-exceptions -msoft-float \
2228 -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -force_cpusubtype_ALL
2229TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 -mkernel -mno-red-zone -gdwarf-2
2230TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -static
2231TEMPLATE_VBOXR0DRV_CFLAGS.release = $(TEMPLATE_VBOXR0DRV_CXXFLAGS.release)
2232TEMPLATE_VBOXR0DRV_CFLAGS.profile = $(TEMPLATE_VBOXR0DRV_CXXFLAGS.profile)
2233TEMPLATE_VBOXR0DRV_CFLAGS.kprofile = $(TEMPLATE_VBOXR0DRV_CXXFLAGS.kprofile)
2234TEMPLATE_VBOXR0DRV_LDFLAGS = $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -static -nostdlib -r -Wl,-Y,1455 -keep_private_extern
2235TEMPLATE_VBOXR0DRV_LDFLAGS.amd64 = -m64 -Xlinker -kext
2236TEMPLATE_VBOXR0DRV_LDFLAGS.x86 = -m32
2237TEMPLATE_VBOXR0DRV_LIBS = kmodc++ kmod cc_kext cpp_kext $(VBOX_GCC_LIBGCC)
2238
2239TEMPLATE_VBOXR0DRVOSX105 = Mac OS X 10.5 variant.
2240TEMPLATE_VBOXR0DRVOSX105_EXTENDS = VBOXR0DRV
2241TEMPLATE_VBOXR0DRVOSX105_DEFS = $(subst $(VBOX_DARWIN_DEF_SDK_DEFS),$(VBOX_DARWIN_DEF_SDK_10_5_DEFS),$(TEMPLATE_VBOXR0DRV_DEFS))
2242TEMPLATE_VBOXR0DRVOSX105_INCS = $(subst $(VBOX_PATH_MACOSX_SDK),$(VBOX_PATH_MACOSX_SDK_10_5),$(TEMPLATE_VBOXR0DRV_INCS))
2243TEMPLATE_VBOXR0DRVOSX105_CFLAGS = $(subst $(VBOX_DARWIN_DEF_SDK_CFLAGS),$(VBOX_DARWIN_DEF_SDK_10_5_CFLAGS),$(TEMPLATE_VBOXR0DRV_CFLAGS))
2244TEMPLATE_VBOXR0DRVOSX105_CXXFLAGS = $(subst $(VBOX_DARWIN_DEF_SDK_CXXFLAGS),$(VBOX_DARWIN_DEF_SDK_10_5_CXXFLAGS),$(TEMPLATE_VBOXR0DRV_CXXFLAGS))
2245TEMPLATE_VBOXR0DRVOSX105_LDFLAGS = $(subst $(VBOX_DARWIN_DEF_SDK_LDFLAGS),$(VBOX_DARWIN_DEF_SDK_10_5_LDFLAGS),$(TEMPLATE_VBOXR0DRV_LDFLAGS))
2246endif
2247
2248ifeq ($(KBUILD_TARGET),solaris)
2249## The Solaris /usr/platform/i86pc/include and /usr/include directories.
2250VBOX_SOLARIS_SYS_INCS ?= /usr/platform/i86pc/include /usr/include
2251
2252TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_GCC_TOOL)
2253TEMPLATE_VBOXR0DRV_DEFS = _KERNEL _STRICT_STDC IN_RING0 IN_RT_R0
2254TEMPLATE_VBOXR0DRV_INCS = $(VBOX_SOLARIS_SYS_INCS)
2255TEMPLATE_VBOXR0DRV_LDFLAGS = -r -dy
2256ifdef VBOX_WITH_SOLARIS_VBI
2257 TEMPLATE_VBOXR0DRV_LDFLAGS += -N misc/vbi
2258endif
2259TEMPLATE_VBOXR0DRV_LDFLAGS.amd64 = -64
2260# Exclude -Wall because of solaris headers' pragma ident warnings that gcc refuses to supress.
2261TEMPLATE_VBOXR0DRV_CFLAGS = -Wpointer-arith -Winline $(VBOX_GCC_Wno-pointer-sign) \
2262 -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs \
2263 -O2 -ffreestanding -nodefaultlibs -fno-strict-aliasing -fno-common -std=c99
2264TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow
2265TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow $(if $(VBOX_SOLARIS_10),,-msave-args) -mno-red-zone -mcmodel=kernel \
2266 -fno-reorder-blocks -fno-asynchronous-unwind-tables -funit-at-a-time
2267TEMPLATE_VBOXR0DRV_CXXFLAGS = -Wpointer-arith -Winline $(VBOX_GCC_Wno-pointer-sign) \
2268 -O2 -nodefaultlibs -fno-strict-aliasing -fno-common -fno-exceptions -fno-rtti
2269TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = $(TEMPLATE_VBOXR0DRV_CFLAGS.x86)
2270TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64 = $(TEMPLATE_VBOXR0DRV_CFLAGS.amd64)
2271endif # Solaris
2272
2273ifeq ($(KBUILD_TARGET),freebsd)
2274# x86 FreeBSD (6.2 or something):
2275# cc -O2 -fno-strict-aliasing -pipe -Werror -D_KERNEL -DKLD_MODULE \
2276# -nostdinc -I- -I. -I@ -I@/contrib/altq -I@/../include -I/usr/include \
2277# -finline-limit=8000 -fno-common -mno-align-long-strings -mpreferred-stack-boundary=2 \
2278# -mno-mmx -mno-3dnow -mno-sse -mno-sse2 -ffreestanding -Wall -Wredundant-decls -Wnested-externs \
2279# -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -fformat-extensions \
2280# -std=c99 -c ../my.c
2281# ld -d -warn-common -r -d -o my.kld my.o
2282# :> export_syms
2283# awk -f /usr/src/sys/modules/my/../../conf/kmod_syms.awk my.kld export_syms | xargs -J% objcopy % my.kld
2284# ld -Bsharable -d warn-commnon -o my.ko my.kld
2285#
2286# AMD64 FreeBSD (7.1):
2287# cc -O2 -fno-strict-aliasing -pipe -D_KERNEL -DKLD_MODULE -std=c99 -nostdinc -I. -I@ -I@/contrib/altq \
2288# -finline-limit=8000 --param inline-unit-growth=100 --param large-function-growth=1000 -fno-common \
2289# -fno-omit-frame-pointer -mcmodel=kernel -mno-red-zone -mfpmath=387 -mno-sse -mno-sse2 -mno-mmx \
2290# -mno-3dnow -msoft-float -fno-asynchronous-unwind-tables -ffreestanding \
2291# -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -Wundef -Wno-pointer-sign \
2292# -fformat-extensions -c /usr/src/sys/modules/my/../../dev/my/if_my.c
2293# ld -d -warn-common -r -d -o if_my.ko if_my.o
2294# :> export_syms
2295# awk -f /usr/src/sys/modules/my/../../conf/kmod_syms.awk if_my.ko export_syms | xargs -J% objcopy % if_my.ko
2296
2297# Note: @ -> /usr/src/sys and machine -> /usr/src/sys/i386/include
2298
2299## The location of the FreeBSD kernel source.
2300VBOX_FREEBSD_SRC ?= /usr/src/sys
2301## The FreeBSD /usr/include.
2302VBOX_FREEBSD_SYS_INCS ?= /usr/include
2303
2304TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_GCC_TOOL)
2305TEMPLATE_VBOXR0DRV_LDTOOL = FREEBSDKMODLD
2306TEMPLATE_VBOXR0DRV_DEFS = _KERNEL KLD_MODULE IN_RING0 IN_RT_R0
2307TEMPLATE_VBOXR0DRV_INCS = \
2308 $(VBOX_FREEBSD_SRC) \
2309 $(VBOX_FREEBSD_SRC)/contrib/altq \
2310 $(VBOX_FREEBSD_SRC)/../include \
2311 $(VBOX_FREEBSD_SYS_INCS)
2312# omitting: -Wcast-qual, -Wredundant-decls
2313TEMPLATE_VBOXR0DRV_CFLAGS = \
2314 $(VBOX_GCC_WARN) -Wpointer-arith -Winline $(VBOX_GCC_Wno-pointer-sign) \
2315 -Wstrict-prototypes -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs \
2316 -O2 -fformat-extensions -ffreestanding -fno-strict-aliasing -fno-common -finline-limit=8000 \
2317 $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_OPT) $(VBOX_GCC_FP) \
2318 -nostdinc -std=c99
2319TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -mno-align-long-strings -mpreferred-stack-boundary=2 -mno-mmx -mno-3dnow -mno-sse -mno-sse2
2320TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 --param inline-unit-growth=100 --param large-function-growth=1000 \
2321 -fno-omit-frame-pointer -mcmodel=kernel -mno-red-zone -mfpmath=387 -mno-sse -mno-sse2 -mno-mmx \
2322 -mno-3dnow -msoft-float -fno-asynchronous-unwind-tables -Wundef
2323TEMPLATE_VBOXR0DRV_CXXFLAGS = -fno-exceptions -fno-rtti \
2324 $(VBOX_GCC_WARN) -Wpointer-arith -Winline \
2325 -O2 -fno-format-extensions -fno-strict-aliasing -fno-common -finline-limit=8000 \
2326 $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_OPT) $(VBOX_GCC_FP) \
2327 -nostdinc
2328TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = $(TEMPLATE_VBOXR0DRV_CFLAGS.x86)
2329TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64 = $(TEMPLATE_VBOXR0DRV_CFLAGS.amd64)
2330TEMPLATE_VBOXR0DRV_SYSSUFF = .ko
2331TEMPLATE_VBOXR0DRV_LDFLAGS = -d --warn-common
2332TEMPLATE_VBOXR0DRV_LDFLAGS.x86 = -m elf_i386_fbsd
2333TEMPLATE_VBOXR0DRV_LDFLAGS.amd64 = -m elf_x86_64_fbsd
2334
2335TOOL_FREEBSDKMODLD = FreeBSD kernel module linker.
2336# See kBuild/tools/GCC3.kmk for docs.
2337TOOL_FREEBSDKMODLD_LINK_SYSMOD_OUTPUT_MAYBE = $(outbase).map
2338TOOL_FREEBSDKMODLD_LINK_SYSMOD_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib)))
2339TOOL_FREEBSDKMODLD_LINK_SYSMOD_DEPORD =
2340 ifeq ($(KBUILD_TARGET_ARCH),amd64)
2341TOOL_FREEBSDKMODLD_LINK_SYSMOD_OUTPUT =
2342define TOOL_FREEBSDKMODLD_LINK_SYSMOD_CMDS
2343# Link intermediate .kld (a relocatable object).
2344 ld $(flags) -r -o $(out) $(objs) \
2345 $(foreach p,$(libpath), -L$(p))\
2346 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(basename $(lib))), $(lib)))
2347# Strip non-exported symbols private and localize the exported ones.
2348 awk -f $(VBOX_FREEBSD_SRC)/conf/kmod_syms.awk $(out) $(if $(othersrc), $(othersrc),/dev/null) \
2349 | xargs -J% objcopy % $(out)
2350
2351## Strip debug info (comment out if debugging or something).
2352 objcopy --strip-debug $(out)
2353endef
2354 else # x86
2355TOOL_FREEBSDKMODLD_LINK_SYSMOD_OUTPUT = $(outbase).kld
2356define TOOL_FREEBSDKMODLD_LINK_SYSMOD_CMDS
2357# Link intermediate .kld (a relocatable object).
2358 ld $(flags) -r -o $(outbase).kld $(objs) \
2359 $(foreach p,$(libpath), -L$(p))\
2360 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(basename $(lib))), $(lib)))
2361# Strip non-exported symbols private and localize the exported ones.
2362 awk -f $(VBOX_FREEBSD_SRC)/conf/kmod_syms.awk $(outbase).kld $(if $(othersrc), $(othersrc),/dev/null) \
2363 | xargs -J% objcopy % $(outbase).kld
2364
2365# Link the final .ko (a shared object).
2366 ld $(flags) -Bshareable -o $(out) $(outbase).kld
2367endef
2368 endif # x86
2369
2370endif # FreeBSD
2371
2372ifdef VBOX_WITH_VBOXDRV
2373 ifndef TEMPLATE_VBOXR0DRV_TOOL
2374 $(warning Warning: VBox Build: Target $(KBUILD_HOST) is not officially supported!)
2375 endif
2376endif
2377
2378
2379
2380#
2381# Template for building R3 executables and static libraries which are linked into executables.
2382# Note! This is the base template for a whole lot of other ones, so be careful when changing it.
2383#
2384TEMPLATE_VBOXR3EXE = VBox Ring 3 Exe
2385TEMPLATE_VBOXR3EXE_ASTOOL = $(VBOX_ASTOOL)
2386TEMPLATE_VBOXR3EXE_ASFLAGS = $(VBOX_ASFLAGS)
2387TEMPLATE_VBOXR3EXE_DEFS = IN_RING3 $(ARCH_BITS_DEFS)
2388TEMPLATE_VBOXR3EXE_LIBS.kprofile = $(LIB_KPROFILE)
2389ifeq ($(KBUILD_TARGET),win)
2390 TEMPLATE_VBOXR3EXE_TOOL = $(VBOX_VCC_TOOL)
2391 TEMPLATE_VBOXR3EXE_RCDEFS = \
2392 VBOX_VERSION_MAJOR=\"$(VBOX_VERSION_MAJOR)\" \
2393 VBOX_VERSION_MINOR=\"$(VBOX_VERSION_MINOR)\" \
2394 VBOX_VERSION_BUILD=\"$(VBOX_VERSION_BUILD)\" \
2395 VBOX_SVN_REV=\"$(VBOX_SVN_REV)\" \
2396 VBOX_VERSION_MAJOR_NR=$(VBOX_VERSION_MAJOR) \
2397 VBOX_VERSION_MINOR_NR=$(VBOX_VERSION_MINOR) \
2398 VBOX_VERSION_BUILD_NR=$(VBOX_VERSION_BUILD) \
2399 VBOX_SVN_REV_NR=$(VBOX_SVN_REV)
2400 TEMPLATE_VBOXR3EXE_SDKS = WINPSDK
2401 ifdef VBOX_USE_VCC80
2402 TEMPLATE_VBOXR3EXE_CXXFLAGS = -Zi -Zl -GR- -EHsc -GF -MD -W3 -wd4065 -wd4244 -wd4996 -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
2403 TEMPLATE_VBOXR3EXE_CXXFLAGS.debug = -RTCsu
2404 else
2405 TEMPLATE_VBOXR3EXE_CXXFLAGS = -Zi -Zl -GR- -EHsc -GF -MD -W3 -wd4065 -wd4244 $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
2406 TEMPLATE_VBOXR3EXE_CXXFLAGS.debug = -GZ
2407 endif
2408 TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile = -Gh -GH
2409 TEMPLATE_VBOXR3EXE_CFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS)
2410 TEMPLATE_VBOXR3EXE_CFLAGS.debug = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.debug)
2411 TEMPLATE_VBOXR3EXE_CFLAGS.kprofile = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile)
2412 TEMPLATE_VBOXR3EXE_LDFLAGS = \
2413 /NOD /INCREMENTAL:NO /MAPINFO:EXPORTS /LARGEADDRESSAWARE /DEBUG \
2414 /DISALLOWLIB:libc.lib \
2415 /DISALLOWLIB:libcd.lib \
2416 /DISALLOWLIB:libcmt.lib \
2417 /DISALLOWLIB:libcmtd.lib \
2418 /DISALLOWLIB:msvcrtd.lib
2419 TEMPLATE_VBOXR3EXE_LIBS = \
2420 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcrt.lib \
2421 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcprt.lib \
2422 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/oldnames.lib
2423 TEMPLATE_VBOXR3EXE_POST_CMDS = $(VBOX_SIGN_IMAGE_CMDS)
2424
2425else # the gcc guys
2426TEMPLATE_VBOXR3EXE_TOOL = $(VBOX_GCC_TOOL)
2427TEMPLATE_VBOXR3EXE_CXXFLAGS = -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_fvisibility-hidden)
2428TEMPLATE_VBOXR3EXE_CXXFLAGS.x86 = -m32
2429TEMPLATE_VBOXR3EXE_CXXFLAGS.amd64 = -m64
2430# L4 currently can't handle exception handling.
2431TEMPLATE_VBOXR3EXE_CXXFLAGS.l4 = -fno-exceptions -nostdinc \
2432 $(addprefix -I,$(VBOX_PATH_GCC_INCS) $(L4_INCDIR) $(FILE_TOOL_GPP3_INCDIR)) \
2433 $(DEBUG_L4)
2434TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile = -finstrument-functions
2435TEMPLATE_VBOXR3EXE_CFLAGS = -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC_Wno-variadic-macros) -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing $(VBOX_GCC_fvisibility-hidden)
2436TEMPLATE_VBOXR3EXE_CFLAGS.x86 = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.x86)
2437TEMPLATE_VBOXR3EXE_CFLAGS.amd64 = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.amd64)
2438TEMPLATE_VBOXR3EXE_CFLAGS.debug = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.debug)
2439TEMPLATE_VBOXR3EXE_CFLAGS.kprofile = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile)
2440TEMPLATE_VBOXR3EXE_CFLAGS.l4 = -nostdinc \
2441 $(addprefix -I,$(VBOX_PATH_GCC_INCS) $(L4_INCDIR)) $(DEBUG_L4)
2442TEMPLATE_VBOXR3EXE_DEFS.l4 = L4_THREAD_SAFE
2443TEMPLATE_VBOXR3EXE_LDFLAGS.x86 = -m32
2444TEMPLATE_VBOXR3EXE_LDFLAGS.amd64 = -m64
2445TEMPLATE_VBOXR3EXE_LDFLAGS.l4 = \
2446 $(L4_LIBDIR)/../crt0.o \
2447 -T$(L4_LIBDIR)/../main_dyn.ld -nostdlib \
2448 -Wl,--export-dynamic,--dynamic-linker=libld-l4.s.so \
2449 -Wl,--rpath-link,$(L4_LIBDIR)
2450TEMPLATE_VBOXR3EXE_LDFLAGS.linux = -Wl,-z,noexecstack $(VBOX_LD_as_needed)
2451 ifeq ($(KBUILD_TARGET),linux)
2452TEMPLATE_VBOXR3EXE_LIBS = pthread m rt dl
2453 else ifeq ($(KBUILD_TARGET),l4)
2454TEMPLATE_VBOXR3EXE_LIBS = \
2455 $(L4_LIBDIR)/libvboxserver.s.so \
2456 $(L4_LIBDIR)/libuc++.0.s.so \
2457 supc++ gcc_eh gcc \
2458 $(L4_LIBDIR)/libdl.s.so \
2459 $(L4_LIBDIR)/libuc.0.s.so
2460 else ifeq ($(KBUILD_TARGET),os2)
2461TEMPLATE_VBOXR3EXE_TOOL = GXX3OMF
2462TEMPLATE_VBOXR3EXE_LIBS = socket iconv
2463 else ifeq ($(KBUILD_TARGET),darwin)
2464TEMPLATE_VBOXR3EXE_TOOL = GXX4MACHO
2465TEMPLATE_VBOXR3EXE_LIBS =
2466TEMPLATE_VBOXR3EXE_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_DEFS)
2467TEMPLATE_VBOXR3EXE_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -fno-common
2468TEMPLATE_VBOXR3EXE_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
2469TEMPLATE_VBOXR3EXE_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_OBJCFLAGS)
2470TEMPLATE_VBOXR3EXE_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_LDFLAGS)
2471TEMPLATE_VBOXR3EXE_LDFLAGS.darwin.x86 = -read_only_relocs suppress
2472 else if1of ($(KBUILD_TARGET),freebsd netbsd openbsd)
2473TEMPLATE_VBOXR3EXE_TOOL = GXX3
2474TEMPLATE_VBOXR3EXE_LIBS = pthread
2475TEMPLATE_VBOXR3EXE_INCS += \
2476 /usr/include \
2477 /usr/X11R6/include \
2478 /usr/local/include
2479TEMPLATE_VBOXR3EXE_LIBPATH += \
2480 /usr/lib \
2481 /usr/X11R6/lib \
2482 /usr/local/lib
2483 else ifeq ($(KBUILD_TARGET),solaris)
2484TEMPLATE_VBOXR3EXE_TOOL = GXX3PLAIN
2485TEMPLATE_VBOXR3EXE_DEFS += LIBICONV_PLUG _REENTRANT # Avoid the GNU libiconv, for now at least.
2486TEMPLATE_VBOXR3EXE_LIBS = rt socket
2487 else
2488$(warning Warning: VBOX Build: Target $(KBUILD_TARGET) is not officially supported!)
2489TEMPLATE_VBOXR3EXE_CXXFLAGS.profile = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.release)
2490TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.krelease)
2491 endif
2492 ifdef VBOX_WITH_RUNPATH
2493 TEMPLATE_VBOXR3EXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)'
2494 else ifdef VBOX_WITH_ORIGIN
2495 TEMPLATE_VBOXR3EXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$$(VBOX_ORIGIN)'
2496 TEMPLATE_VBOXR3EXE_LDFLAGS.linux += $(VBOX_GCC_ORIGIN_OPT)
2497 endif
2498endif
2499
2500#
2501# Template for building R3 shared objects / DLLs.
2502# This is mostly identical to the VBOXR3EXE template. (Avoid PIC if possible!)
2503# -
2504TEMPLATE_VBOXR3 = VBox Ring 3 SO/DLLs
2505TEMPLATE_VBOXR3_EXTENDS = VBOXR3EXE
2506TEMPLATE_VBOXR3_LDFLAGS.l4 = $(L4_LIBDIR)/../crt0.s.o -T$(L4_LIBDIR)/../main_rel.ld -nostdlib
2507TEMPLATE_VBOXR3_DEFS.l4 = $(TEMPLATE_VBOXR3EXE_DEFS.l4) __PIC__
2508TEMPLATE_VBOXR3_DEFS.darwin = $(TEMPLATE_VBOXR3EXE_DEFS.darwin) PIC
2509TEMPLATE_VBOXR3_LDFLAGS.darwin = $(TEMPLATE_VBOXR3EXE_LDFLAGS.darwin) -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
2510ifeq ($(filter-out solaris.x86 %.amd64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),)
2511 ifn1of ($(KBUILD_TARGET), darwin win)
2512 TEMPLATE_VBOXR3_DEFS = $(TEMPLATE_VBOXR3EXE_DEFS) PIC
2513 TEMPLATE_VBOXR3_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS) -fPIC
2514 TEMPLATE_VBOXR3_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -fPIC
2515 TEMPLATE_VBOXR3_LDFLAGS = $(TEMPLATE_VBOXR3EXE_LDFLAGS) -fPIC
2516 endif
2517endif
2518
2519#
2520# Template for building static R3 executables and any static
2521# libraries they link with.
2522#
2523TEMPLATE_VBOXR3STATIC = VBox Static Ring 3 EXE
2524TEMPLATE_VBOXR3STATIC_EXTENDS = VBOXR3EXE
2525ifeq ($(KBUILD_TARGET),win)
2526 TEMPLATE_VBOXR3STATIC_CFLAGS = $(filter-out -MD, $(TEMPLATE_VBOXR3EXE_CFLAGS)) -MT
2527 TEMPLATE_VBOXR3STATIC_CXXFLAGS = $(filter-out -MD, $(TEMPLATE_VBOXR3EXE_CFLAGS)) -MT
2528 TEMPLATE_VBOXR3STATIC_LDFLAGS = $(filter-out /DISALLOWLIB:libcmt.lib, $(TEMPLATE_VBOXR3EXE_LDFLAGS)) \
2529 /DISALLOWLIB:msvcrt.lib \
2530 /DISALLOWLIB:msvcprt.lib
2531 TEMPLATE_VBOXR3STATIC_LIBS = \
2532 $(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL)_LIB)/oldnames.lib \
2533 $(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL)_LIB)/libcmt.lib \
2534 $(PATH_TOOL_$(TEMPLATE_VBOXR3STATIC_TOOL)_LIB)/libcpmt.lib
2535else ifn1of ($(KBUILD_TARGET), darwin)
2536 # The gcc guys sans darwin.
2537 TEMPLATE_VBOXR3STATIC_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS) -static
2538 TEMPLATE_VBOXR3STATIC_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -static
2539 TEMPLATE_VBOXR3STATIC_OBJCFLAGS = $(TEMPLATE_VBOXR3EXE_OBJCFLAGS) -static
2540 TEMPLATE_VBOXR3STATIC_LDFLAGS = $(TEMPLATE_VBOXR3EXE_LDFLAGS) -static
2541endif
2542
2543#
2544# Same as VBOXR3EXE but without C++ exceptions.
2545#
2546# VBOXR3EXE does C++ exceptions and may assumes that extern "C" functions
2547# doesn't throw them. Use this template (and VBOXR3DLLNOXCPT) with care
2548# and only where the C++ overhead is really unwanted.
2549#
2550TEMPLATE_VBOXR3EXENOXCPT = VBox Ring 3 Exe without C++ exception
2551TEMPLATE_VBOXR3EXENOXCPT_EXTENDS = VBOXR3EXE
2552ifeq ($(KBUILD_TARGET),win)
2553 TEMPLATE_VBOXR3EXENOXCPT_CFLAGS = $(filter-out -EH%,$(TEMPLATE_VBOXR3EXE_CFLAGS) ) -EHs-
2554 TEMPLATE_VBOXR3EXENOXCPT_CXXFLAGS = $(filter-out -EH%,$(TEMPLATE_VBOXR3EXE_CXXFLAGS)) -EHs-
2555else
2556 TEMPLATE_VBOXR3EXENOXCPT_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -fno-exceptions
2557endif
2558
2559#
2560# Same as VBOXR3 but without C++ exceptions.
2561#
2562TEMPLATE_VBOXR3DLLNOXCPT = VBox Ring 3 SO/DLLs without C++ exception
2563TEMPLATE_VBOXR3DLLNOXCPT_EXTENDS = VBOXR3
2564ifeq ($(KBUILD_TARGET),win)
2565 TEMPLATE_VBOXR3DLLNOXCPT_CFLAGS = $(filter-out -EH%,$(TEMPLATE_VBOXR3_CFLAGS) ) -EHs-
2566 TEMPLATE_VBOXR3DLLNOXCPT_CXXFLAGS = $(filter-out -EH%,$(TEMPLATE_VBOXR3_CXXFLAGS)) -EHs-
2567else
2568 TEMPLATE_VBOXR3DLLNOXCPT_CXXFLAGS = $(TEMPLATE_VBOXR3_CXXFLAGS) -fno-exceptions
2569endif
2570
2571#
2572# Template for building hardened Ring-3 executables.
2573# These shall have no extra runpaths, esp. not origin ones.
2574#
2575TEMPLATE_VBOXR3HARDENEDEXE = Hardened VBox Ring-3 EXE
2576TEMPLATE_VBOXR3HARDENEDEXE_EXTENDS = VBOXR3EXE
2577TEMPLATE_VBOXR3HARDENEDEXE_LIBS = $(VBOX_LIB_SUPHARDENED) $(TEMPLATE_VBOXR3EXE_LIBS)
2578TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS.darwin = $(TEMPLATE_VBOXR3EXE_LDFLAGS.darwin) -framework IOKit
2579ifeq ($(KBUILD_TARGET),linux)
2580# not necessary except USE_LIB_PCAP is defined in SUPR3HardenedMain.cpp
2581# TEMPLATE_VBOXR3HARDENEDEXE_LIBS += cap
2582endif
2583ifn1of ($(KBUILD_TARGET), win os2)
2584 TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)%,$(TEMPLATE_VBOXR3EXE_LDFLAGS))
2585 TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS.linux = $(filter-out $(VBOX_GCC_ORIGIN_OPT),$(TEMPLATE_VBOXR3EXE_LDFLAGS.linux))
2586endif
2587
2588#
2589# Template for building hardened Ring-3 libraries.
2590#
2591TEMPLATE_VBOXR3HARDENEDLIB = Hardened VBox Ring-3 LIB
2592TEMPLATE_VBOXR3HARDENEDLIB_EXTENDS = VBOXR3HARDENEDEXE
2593TEMPLATE_VBOXR3HARDENEDLIB_LIBS = $(NO_SUCH_VARIABLE)
2594
2595
2596#
2597# Template for building R3 shared objects / DLLs with the 10.5 Mac OS X SDK.
2598# Identical to VBOXR3EXE, except for the DYLIB, the classic_linker and SDK bits.
2599#
2600TEMPLATE_VBOXR3OSX105 = VBox Ring 3 SO/DLLs for OS X 10.5
2601TEMPLATE_VBOXR3OSX105_EXTENDS = VBOXR3EXE
2602TEMPLATE_VBOXR3OSX105_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_DEFS) PIC
2603TEMPLATE_VBOXR3OSX105_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_CFLAGS) -fno-common
2604TEMPLATE_VBOXR3OSX105_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_CXXFLAGS)
2605TEMPLATE_VBOXR3OSX105_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_OBJCFLAGS)
2606TEMPLATE_VBOXR3OSX105_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_LDFLAGS) \
2607 -read_only_relocs suppress \
2608 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
2609
2610
2611#
2612# Ring-3 testcase, running automatically during the build.
2613# This is the VBOXR3EXE template only with a different install dir.
2614#
2615TEMPLATE_VBOXR3AUTOTST = VBox Ring 3 Testcase Exe
2616TEMPLATE_VBOXR3AUTOTST_EXTENDS = VBOXR3EXE
2617TEMPLATE_VBOXR3AUTOTST_INST = $(INST_TESTCASE)
2618TEMPLATE_VBOXR3AUTOTST_LIBS = $(TEMPLATE_VBOXR3EXE_LIBS)
2619TEMPLATE_VBOXR3AUTOTST_LIBS.l4 = $(LIB_RUNTIME) $(TEMPLATE_VBOXR3EXE_LIBS.l4)
2620ifeq ($(KBUILD_TARGET),win)
2621 ifdef VBOX_SIGNING_MODE
2622 TEMPLATE_VBOXR3AUTOTST_POST_CMDS =
2623 endif
2624endif
2625
2626#
2627# Ring-3 testcase.
2628# This is the VBOXR3EXE template only with a different install dir.
2629#
2630TEMPLATE_VBOXR3TSTEXE = VBox Ring 3 Testcase Exe
2631TEMPLATE_VBOXR3TSTEXE_EXTENDS = VBOXR3EXE
2632TEMPLATE_VBOXR3TSTEXE_INST = $(INST_TESTCASE)
2633TEMPLATE_VBOXR3TSTEXE_LIBS = $(LIB_RUNTIME) $(TEMPLATE_VBOXR3EXE_LIBS)
2634ifdef VBOX_WITH_RUNPATH
2635 TEMPLATE_VBOXR3TSTEXE_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' $(TEMPLATE_VBOXR3EXE_LDFLAGS)
2636else ifdef VBOX_WITH_ORIGIN
2637 TEMPLATE_VBOXR3TSTEXE_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$$(VBOX_ORIGIN)/..' $(TEMPLATE_VBOXR3EXE_LDFLAGS)
2638endif
2639ifeq ($(KBUILD_TARGET),win)
2640 ifdef VBOX_SIGNING_MODE
2641 TEMPLATE_VBOXR3TSTEXE_POST_CMDS =
2642 endif
2643endif
2644
2645#
2646# Template for the CppUnit kind of testcases.
2647#
2648TEMPLATE_VBOXCPPUNITEXE = VBox CppUnit Testcase Exe
2649TEMPLATE_VBOXCPPUNITEXE_EXTENDS = VBOXR3TSTEXE
2650## @todo make a CPPUNIT SDK and add cppunit tools packages for windows, mac, solaris and OS/2.
2651#TEMPLATE_VBOXCPPUNITEXE_SDKS = CPPUNIT -
2652TEMPLATE_VBOXCPPUNITEXE_LIBS = \
2653 $(TEMPLATE_VBOXR3TSTEXE_LIBS) \
2654 cppunit
2655
2656#
2657# Template for building bad C/C++ style R3 executables (no -pedantic).
2658#
2659TEMPLATE_VBOXR3NPEXE = VBox Ring 3 Non-pedantic
2660TEMPLATE_VBOXR3NPEXE_EXTENDS = VBOXR3EXE
2661ifneq ($(KBUILD_TARGET),win) # (only gcc)
2662 TEMPLATE_VBOXR3NPEXE_TOOL = $(VBOX_GCC_TOOL)
2663 TEMPLATE_VBOXR3NPEXE_CXXFLAGS = $(filter-out -pedantic,$(TEMPLATE_VBOXR3EXE_CXXFLAGS)) -Wno-sign-compare
2664 TEMPLATE_VBOXR3NPEXE_CFLAGS = $(filter-out -pedantic -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations,$(TEMPLATE_VBOXR3EXE_CFLAGS)) -Wno-sign-compare
2665endif
2666
2667
2668#
2669# Template for building bad C/C++ style R3 shared libraries / Dlls (no -pedantic).
2670# This is mostly identical to the VBOXR3NPEXE template.
2671#
2672TEMPLATE_VBOXR3NP= VBox Ring 3 Non-pedantic
2673TEMPLATE_VBOXR3NP_EXTENDS = VBOXR3NPEXE
2674TEMPLATE_VBOXR3NP_LDFLAGS.l4 = \
2675 $(L4_LIBDIR)/../crt0.s.o \
2676 -T$(L4_LIBDIR)/../main_rel.ld \
2677 -nostdlib
2678TEMPLATE_VBOXR3NP_DEFS.l4 = $(TEMPLATE_VBOXR3NPEXE_DEFS.l4) __PIC__
2679ifeq ($(filter-out solaris.x86 %.amd64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),)
2680 ifneq ($(KBUILD_TARGET),win)
2681 TEMPLATE_VBOXR3NP_DEFS = $(TEMPLATE_VBOXR3NPEXE_DEFS) PIC
2682 TEMPLATE_VBOXR3NP_CFLAGS = $(TEMPLATE_VBOXR3NPEXE_CFLAGS) -fPIC
2683 TEMPLATE_VBOXR3NP_CXXFLAGS = $(TEMPLATE_VBOXR3NPEXE_CXXFLAGS) -fPIC
2684 TEMPLATE_VBOXR3NP_LDFLAGS = $(TEMPLATE_VBOXR3NPEXE_LDFLAGS) -fPIC
2685 endif
2686endif
2687
2688
2689#
2690# Template for building libraries, shared libraries / modules
2691# which only depends on IPRT for crt.
2692#
2693TEMPLATE_VBOXNOCRTGCC = VBox no-crt GCC libraries and modules, yasm/nasm.
2694TEMPLATE_VBOXNOCRTGCC_DEFS = IN_RING3 IPRT_NO_CRT $(ARCH_BITS_DEFS)
2695TEMPLATE_VBOXNOCRTGCC_ASDEFS = ASM_CALL64_GCC
2696TEMPLATE_VBOXNOCRTGCC_CFLAGS = -nostdinc -fno-strict-aliasing -fno-math-errno $(VBOX_GCC_WARN)
2697TEMPLATE_VBOXNOCRTGCC_CFLAGS.x86 = -m32
2698TEMPLATE_VBOXNOCRTGCC_CFLAGS.amd64 = -m64 -mcmodel=medium -fno-common
2699TEMPLATE_VBOXNOCRTGCC_CFLAGS.release = -O2 -fno-strict-aliasing
2700TEMPLATE_VBOXNOCRTGCC_CFLAGS.profile = $(TEMPLATE_VBOXNOCRTGCC_CFLAGS.release)
2701TEMPLATE_VBOXNOCRTGCC_CFLAGS.kprofile = $(TEMPLATE_VBOXNOCRTGCC_CFLAGS.release)
2702ifdef VBOX_TARGET_MAC_OS_X_VERSION_10_5 ## @todo this probably works for 10.4 too, check.
2703 TEMPLATE_VBOXNOCRTGCC_CFLAGS.darwin = -static
2704else
2705 TEMPLATE_VBOXNOCRTGCC_CFLAGS.darwin = -mdynamic-no-pic
2706endif
2707TEMPLATE_VBOXNOCRTGCC_CXXFLAGS = $(TEMPLATE_VBOXNOCRTGCC_CFLAGS)
2708TEMPLATE_VBOXNOCRTGCC_CXXFLAGS.$(KBUILD_TARGET) = $(TEMPLATE_VBOXNOCRTGCC_CFLAGS.$(KBUILD_TARGET))
2709TEMPLATE_VBOXNOCRTGCC_CXXFLAGS.$(KBUILD_TARGET_ARCH) = $(TEMPLATE_VBOXNOCRTGCC_CFLAGS.$(KBUILD_TARGET_ARCH))
2710TEMPLATE_VBOXNOCRTGCC_INCS = $(PATH_ROOT)/include/iprt/nocrt
2711
2712ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),win.amd64)
2713 # cross compile to 64-bit ELF (linux).
2714 TEMPLATE_VBOXNOCRTGCC_TOOL = XGCCAMD64LINUX
2715 TEMPLATE_VBOXNOCRTGCC_ASTOOL = YASM
2716 TEMPLATE_VBOXNOCRTGCC_ASFLAGS = -f elf64 -DASM_FORMAT_ELF -D__YASM__ -w+orphan-labels -g dwarf2
2717 TEMPLATE_VBOXNOCRTGCC_LIBS = $(PATH_DEVTOOLS)/win.x86/x86_64-unknown-linux-gnu/20060701-r2/lib/gcc/x86_64-unknown-linux-gnu/3.4.6/libgcc.a
2718 TEMPLATE_VBOXNOCRTGCC_LDFLAGS = -nostdlib
2719
2720else ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),win.x86)
2721 # Use the default GCC (MinGW) with the Microsoft linker.
2722 # (Drop all '-g' options as we're unable to strip the debug info.)
2723 TEMPLATE_VBOXNOCRTGCC_TOOL = $(VBOX_GCC_TOOL)
2724 TEMPLATE_VBOXNOCRTGCC_ASTOOL = $(VBOX_ASTOOL)
2725 TEMPLATE_VBOXNOCRTGCC_ASFLAGS = $(VBOX_ASFLAGS)
2726 TEMPLATE_VBOXNOCRTGCC_LDTOOL = $(VBOX_VCC_TOOL)
2727 TEMPLATE_VBOXNOCRTGCC_LDFLAGS = -Incremental:NO -MapInfo:Exports -NoD
2728 TEMPLATE_VBOXNOCRTGCC_LIBS = $(VBOX_GCC_LIBGCC)
2729 TEMPLATE_VBOXNOCRTGCC_CFLAGS := $(filter-out -g,$(TEMPLATE_VBOXNOCRTGCC_CFLAGS)) -s
2730
2731else
2732 # Use the default GCC.
2733 # The use of --exclude-libs ALL is to avoid confusing the linux ld.so.
2734 TEMPLATE_VBOXNOCRTGCC_TOOL = $(VBOX_GCC_TOOL)
2735 TEMPLATE_VBOXNOCRTGCC_ASTOOL = $(VBOX_ASTOOL)
2736 TEMPLATE_VBOXNOCRTGCC_ASFLAGS = $(VBOX_ASFLAGS)
2737 TEMPLATE_VBOXNOCRTGCC_CFLAGS += $(VBOX_GCC_fno-stack-protector)
2738 TEMPLATE_VBOXNOCRTGCC_CXXFLAGS += $(VBOX_GCC_fno-stack-protector)
2739 ifeq ($(KBUILD_TARGET_ARCH),amd64)
2740 # in 64-bit mode we'll build a sys-module (VBoxREM2).
2741 if1of ($(KBUILD_TARGET),darwin solaris)
2742 TEMPLATE_VBOXNOCRTGCC_LDFLAGS.solaris= -64 -r
2743 else
2744 TEMPLATE_VBOXNOCRTGCC_LDFLAGS = -nostdlib
2745 endif
2746 else # x86:
2747 TEMPLATE_VBOXNOCRTGCC_LDFLAGS = -nostdlib
2748 ifn1of ($(KBUILD_TARGET), os2 darwin solaris)
2749 TEMPLATE_VBOXNOCRTGCC_LDFLAGS += -Wl,--no-undefined
2750 endif
2751 endif # x86
2752 TEMPLATE_VBOXNOCRTGCC_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_LDFLAGS)
2753 TEMPLATE_VBOXNOCRTGCC_LIBS = # FIXME - has unwind mess.
2754endif
2755
2756
2757#
2758# Same as VBOXNOCRTGCC only it uses GAS as the assembler instead of yasm/nasm.
2759#
2760TEMPLATE_VBOXNOCRTGAS = VBox no-crt GCC libraries and modules, gas.
2761TEMPLATE_VBOXNOCRTGAS_EXTENDS = VBOXNOCRTGCC
2762TEMPLATE_VBOXNOCRTGAS_ASTOOL = $(TEMPLATE_VBOXNOCRTGCC_TOOL)
2763ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),win.x86)
2764 TEMPLATE_VBOXNOCRTGAS_ASFLAGS = -s
2765else
2766 TEMPLATE_VBOXNOCRTGAS_ASFLAGS = -g
2767endif
2768TEMPLATE_VBOXNOCRTGAS_ASFLAGS.x86 = -m32
2769TEMPLATE_VBOXNOCRTGAS_ASFLAGS.amd64 = -m64
2770
2771
2772#
2773# Template for building executables that are part of the VBox Main component
2774# (COM/XPCOM interface to VirtualBox).
2775#
2776TEMPLATE_VBOXMAINEXE = VBox Main Executable
2777TEMPLATE_VBOXMAINEXE_ASTOOL = $(VBOX_ASTOOL)
2778TEMPLATE_VBOXMAINEXE_ASFLAGS = $(VBOX_ASFLAGS)
2779TEMPLATE_VBOXMAINEXE_DEFS = IN_RING3 UNICODE NDEBUG=1
2780TEMPLATE_VBOXMAINEXE_DEFS.win = _UNICODE
2781TEMPLATE_VBOXMAINEXE_RCDEFS = $(TEMPLATE_VBOXR3EXE_RCDEFS)
2782TEMPLATE_VBOXMAINEXE_LIBS.kprofile = $(LIB_KPROFILE)
2783
2784ifeq ($(KBUILD_TARGET),win)
2785 TEMPLATE_VBOXMAINEXE_SDKS = WINPSDK W2K3DDK
2786 # Note: C4250 is the dominance warning, see r32789.
2787 # C4065 is about default only switches.
2788 # C4996 is about deprected function (CRT only?).
2789 ifdef VBOX_USE_VCC80
2790 TEMPLATE_VBOXMAINEXE_TOOL = $(VBOX_VCC_TOOL)
2791 TEMPLATE_VBOXMAINEXE_CXXFLAGS = -Zi -Zl -GR -EHsc -GF -MD -W3 -wd4065 -wd4996 -wd4250 -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
2792 TEMPLATE_VBOXMAINEXE_CXXFLAGS.debug = -RTCsu
2793 else
2794 TEMPLATE_VBOXMAINEXE_TOOL = VCC70
2795 TEMPLATE_VBOXMAINEXE_CXXFLAGS = -Zi -Zl -GR -EHsc -GF -MD -W3 -wd4065 -wd4250 $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
2796 TEMPLATE_VBOXMAINEXE_CXXFLAGS.debug = -GZ
2797 endif
2798 TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile = -Gh -GH
2799 TEMPLATE_VBOXMAINEXE_CFLAGS = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS)
2800 TEMPLATE_VBOXMAINEXE_CFLAGS.debug = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.debug)
2801 TEMPLATE_VBOXMAINEXE_CFLAGS.kprofile = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile)
2802 TEMPLATE_VBOXMAINEXE_INCS += \
2803 $(PATH_TOOL_$(VBOX_VCC_TOOL)_ATLMFC_INC)
2804 TEMPLATE_VBOXMAINEXE_LDFLAGS = \
2805 /NOD /INCREMENTAL:NO /MAPINFO:EXPORTS /LARGEADDRESSAWARE /DEBUG\
2806 /DISALLOWLIB:libc.lib \
2807 /DISALLOWLIB:libcd.lib \
2808 /DISALLOWLIB:msvcrt.lib \
2809 /DISALLOWLIB:msvcrtd.lib \
2810 /DISALLOWLIB:libcmtd.lib \
2811 /DISALLOWLIB:libcmt.lib
2812 TEMPLATE_VBOXMAINEXE_LIBS = \
2813 $(LIB_RUNTIME) \
2814 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcrt.lib \
2815 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcprt.lib \
2816 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/oldnames.lib \
2817 $(PATH_TOOL_$(VBOX_VCC_TOOL)_ATLMFC_LIB)/atls.lib
2818 TEMPLATE_VBOXMAINEXE_POST_CMDS = $(VBOX_SIGN_IMAGE_CMDS)
2819
2820else # the GCC guys:
2821
2822TEMPLATE_VBOXMAINEXE_TOOL = $(VBOX_GCC_TOOL)
2823TEMPLATE_VBOXMAINEXE_CXXFLAGS = -g -pipe $(VBOX_GCC_WARN) -Wno-long-long -Wno-non-virtual-dtor -fshort-wchar -fpermissive -fexceptions -frtti $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_fvisibility-hidden)
2824TEMPLATE_VBOXMAINEXE_CXXFLAGS.x86 = -m32
2825TEMPLATE_VBOXMAINEXE_CXXFLAGS.amd64 = -m64
2826TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile = -finstrument-functions
2827TEMPLATE_VBOXMAINEXE_CFLAGS = -g -pipe $(VBOX_GCC_WARN) -Wno-long-long -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing $(VBOX_GCC_fvisibility-hidden)
2828TEMPLATE_VBOXMAINEXE_CFLAGS.x86 = -m32
2829TEMPLATE_VBOXMAINEXE_CFLAGS.amd64 = -m64
2830TEMPLATE_VBOXMAINEXE_CFLAGS.kprofile = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile)
2831TEMPLATE_VBOXMAINEXE_LDFLAGS.x86 = -m32
2832TEMPLATE_VBOXMAINEXE_LDFLAGS.amd64 = -m64
2833 ifeq ($(KBUILD_TARGET),linux)
2834TEMPLATE_VBOXMAINEXE_LIBS = pthread m rt $(LIB_RUNTIME)
2835TEMPLATE_VBOXMAINEXE_LDFLAGS.linux = $(VBOX_LD_as_needed)
2836 else ifeq ($(KBUILD_TARGET),l4)
2837TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME)
2838# no libs as yet in l4 target - must be added later
2839 else ifeq ($(KBUILD_TARGET),os2)
2840TEMPLATE_VBOXMAINEXE_TOOL = GXX3OMF
2841TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME)
2842 else ifeq ($(KBUILD_TARGET),darwin)
2843TEMPLATE_VBOXMAINEXE_TOOL = GXX4MACHO
2844TEMPLATE_VBOXMAINEXE_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS)
2845TEMPLATE_VBOXMAINEXE_CFLAGS += $(VBOX_DARWIN_DEF_SDK_CFLAGS)
2846TEMPLATE_VBOXMAINEXE_CXXFLAGS += $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
2847TEMPLATE_VBOXMAINEXE_OBJCFLAGS += $(VBOX_DARWIN_DEF_SDK_OBJCFLAGS)
2848TEMPLATE_VBOXMAINEXE_LDFLAGS.darwin += -bind_at_load
2849TEMPLATE_VBOXMAINEXE_LDFLAGS += $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -framework Carbon
2850TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME)
2851 else if1of ($(KBUILD_TARGET), freebsd netbsd openbsd)
2852TEMPLATE_VBOXMAINEXE_TOOL = GXX3
2853TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME)
2854TEMPLATE_VBOXMAINEXE_INCS += \
2855 /usr/include \
2856 /usr/X11R6/include \
2857 /usr/local/include
2858TEMPLATE_VBOXMAINEXE_LIBPATH += \
2859 /usr/lib \
2860 /usr/X11R6/lib \
2861 /usr/local/lib
2862else ifeq ($(KBUILD_TARGET),solaris)
2863TEMPLATE_VBOXMAINEXE_TOOL = GXX3PLAIN
2864TEMPLATE_VBOXMAINEXE_DEFS += _REENTRANT
2865TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME) rt
2866 else
2867$(warning Warning: VBOX Build: Target $(KBUILD_TARGET) is not officially supported!)
2868TEMPLATE_VBOXMAINEXE_LIBS =
2869 endif
2870 ifdef VBOX_WITH_RUNPATH
2871TEMPLATE_VBOXMAINEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)'
2872 else ifdef VBOX_WITH_ORIGIN
2873TEMPLATE_VBOXMAINEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$$(VBOX_ORIGIN)'
2874TEMPLATE_VBOXMAINEXE_LDFLAGS.linux += $(VBOX_GCC_ORIGIN_OPT)
2875 endif
2876
2877endif # !win
2878
2879# Add COM/XPCOM stuff
2880TEMPLATE_VBOXMAINEXE_LIBS += \
2881 $(PATH_LIB)/VBoxCOM$(VBOX_SUFF_LIB)
2882ifdef VBOX_WITH_XPCOM
2883 ## @todo may be worth creating the VBOX_XPCOM SDK def
2884 TEMPLATE_VBOXMAINEXE_DEFS += VBOX_WITH_XPCOM
2885 ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
2886 TEMPLATE_VBOXMAINEXE_DEFS += VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
2887 endif
2888 TEMPLATE_VBOXMAINEXE_INCS += \
2889 $(VBOX_XPCOM_INCS)
2890 TEMPLATE_VBOXMAINEXE_LIBS += \
2891 $(LIB_XPCOM)
2892 TEMPLATE_VBOXMAINEXE_INTERMEDIATES += \
2893 $(VBOX_PATH_SDK)/bindings/xpcom/include/VirtualBox_XPCOM.h
2894
2895else # COM
2896 TEMPLATE_VBOXMAINEXE_INCS += \
2897 $(VBOX_PATH_SDK)/bindings/mscom/include
2898 TEMPLATE_VBOXMAINEXE_INTERMEDIATES += \
2899 $(VBOX_PATH_SDK)/bindings/mscom/include/VirtualBox.h
2900endif # COM
2901
2902#
2903# Template for building the Main DLL modules (such as in-process COM/XPCOM
2904# components for Main).
2905#
2906# This differs from VBOXMAINEXE only in PIC handling and similar DLL stuff.
2907#
2908TEMPLATE_VBOXMAINDLL = VBox Main Component (shared library)
2909TEMPLATE_VBOXMAINDLL_EXTENDS = VBOXMAINEXE
2910ifeq ($(filter-out solaris.x86 %.amd64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),)
2911 ifn1of ($(KBUILD_TARGET), darwin win)
2912 TEMPLATE_VBOXMAINDLL_DEFS = PIC $(TEMPLATE_VBOXMAINEXE_DEFS)
2913 TEMPLATE_VBOXMAINDLL_CFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_CFLAGS)
2914 TEMPLATE_VBOXMAINDLL_CXXFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_CXXFLAGS)
2915 TEMPLATE_VBOXMAINDLL_LDFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_LDFLAGS)
2916 endif
2917endif
2918TEMPLATE_VBOXMAINDLL_LDFLAGS.darwin = $(filter-out -bind_at_load,$(TEMPLATE_VBOXMAINEXE_LDFLAGS.darwin)) \
2919 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
2920
2921#
2922# Template identical to VBOXMAINDLL except for where the stuff is
2923# installed when using XPCOM (components/).
2924#
2925# Note! In the hardened build this gets a bit ugly since $ORIGIN/..
2926# doesn't work. So, we use $ORIGIN there and let the installers
2927# handle the symlinking.
2928#
2929# (No difference when building against COM on Windows.)
2930#
2931TEMPLATE_VBOXMAINCOMP = VBox Main COM/XPCOM Component (shared library)
2932TEMPLATE_VBOXMAINCOMP_EXTENDS = VBOXMAINEXE
2933ifn1of ($(KBUILD_TARGET), win) ## WARNING! Linux used to be excluded too, so this may cause trouble.
2934 TEMPLATE_VBOXMAINCOMP_INST = $(INST_BIN)components/
2935endif
2936ifeq ($(filter-out solaris.x86 %.amd64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),)
2937 ifneq ($(KBUILD_TARGET),win)
2938 TEMPLATE_VBOXMAINCOMP_DEFS = PIC $(TEMPLATE_VBOXMAINEXE_DEFS)
2939 TEMPLATE_VBOXMAINCOMP_CFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_CFLAGS)
2940 TEMPLATE_VBOXMAINCOMP_CXXFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_CXXFLAGS)
2941 ifdef VBOX_WITH_ORIGIN
2942 ifndef VBOX_WITH_HARDENING
2943 TEMPLATE_VBOXMAINCOMP_LDFLAGS = -fPIC $(filter-out '$(VBOX_GCC_RPATH_OPT)$$(VBOX_ORIGIN)',$(TEMPLATE_VBOXMAINEXE_LDFLAGS)) '$(VBOX_GCC_RPATH_OPT)$$(VBOX_ORIGIN)/..'
2944 endif
2945 endif
2946 ifndef TEMPLATE_VBOXMAINCOMP_LDFLAGS
2947 TEMPLATE_VBOXMAINCOMP_LDFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_LDFLAGS)
2948 endif
2949 endif
2950endif
2951ifdef VBOX_WITH_ORIGIN
2952 ifndef TEMPLATE_VBOXMAINCOMP_LDFLAGS
2953 ifndef VBOX_WITH_HARDENING
2954 TEMPLATE_VBOXMAINCOMP_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)$$(VBOX_ORIGIN)',$(TEMPLATE_VBOXMAINEXE_LDFLAGS)) '$(VBOX_GCC_RPATH_OPT)$$(VBOX_ORIGIN)/..'
2955 endif
2956 endif
2957endif
2958TEMPLATE_VBOXMAINCOMP_LDFLAGS.darwin = $(filter-out -bind_at_load,$(TEMPLATE_VBOXMAINEXE_LDFLAGS.darwin)) \
2959 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
2960
2961#
2962# Template for building the Main static libraries.
2963#
2964# This differs from VBOXMAINDLL only that it zeroes out the _LIBS definition.
2965#
2966TEMPLATE_VBOXMAINLIB = VBox Main Component (static library)
2967TEMPLATE_VBOXMAINLIB_EXTENDS = VBOXMAINDLL
2968TEMPLATE_VBOXMAINLIB_LIBS =
2969
2970#
2971# Template for building executables that use the VBox Main component.
2972#
2973TEMPLATE_VBOXMAINCLIENTEXE = VBox Main Client (executable)
2974TEMPLATE_VBOXMAINCLIENTEXE_EXTENDS = VBOXMAINEXE
2975ifeq ($(KBUILD_TARGET),win)
2976 TEMPLATE_VBOXMAINCLIENTEXE_LIBS.win = $(TEMPLATE_VBOXMAINEXE_LIBS.win) \
2977 $(PATH_SDK_WINPSDK_LIB)/User32.Lib \
2978 $(PATH_SDK_WINPSDK_LIB)/Shell32.Lib \
2979 $(PATH_SDK_WINPSDK_LIB)/ShLwApi.Lib \
2980 $(PATH_SDK_WINPSDK_LIB)/Ole32.Lib \
2981 $(PATH_SDK_WINPSDK_LIB)/OleAut32.Lib \
2982 $(PATH_SDK_WINPSDK_LIB)/Uuid.Lib
2983else
2984 TEMPLATE_VBOXMAINCLIENTEXE_DEFS = $(TEMPLATE_VBOXMAINEXE_DEFS) \
2985 NDEBUG TRIMMED
2986 TEMPLATE_VBOXMAINCLIENTEXE_CXXFLAGS.linux = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.linux) \
2987 -pthread
2988endif
2989
2990#
2991# Template for building shared libraries / DLLs that use the VBox Main component.
2992#
2993# This differs from VBOXMAINCLIENTEXE only in PIC handling and similar DLL stuff.
2994#
2995TEMPLATE_VBOXMAINCLIENTDLL = VBox MAIN Client (shared library)
2996TEMPLATE_VBOXMAINCLIENTDLL_EXTENDS = VBOXMAINCLIENTEXE
2997ifeq ($(filter-out solaris.x86 %.amd64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),)
2998 ifneq ($(KBUILD_TARGET),win)
2999 TEMPLATE_VBOXMAINCLIENTDLL_DEFS = PIC $(TEMPLATE_VBOXMAINCLIENTEXE_DEFS)
3000 TEMPLATE_VBOXMAINCLIENTDLL_CFLAGS = -fPIC $(TEMPLATE_VBOXMAINCLIENTEXE_CFLAGS)
3001 TEMPLATE_VBOXMAINCLIENTDLL_CXXFLAGS = -fPIC $(TEMPLATE_VBOXMAINCLIENTEXE_CXXFLAGS)
3002 TEMPLATE_VBOXMAINCLIENTDLL_LDFLAGS = -fPIC $(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS)
3003 endif
3004endif
3005TEMPLATE_VBOXMAINCLIENTDLL_LDFLAGS.darwin = $(filter-out -bind_at_load,$(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS.darwin))
3006
3007
3008#
3009# Qt 4
3010# Qt 4
3011# Qt 4
3012#
3013ifdef VBOX_WITH_QTGUI
3014
3015 # Guess VBOX_WITH_QT4_SUN
3016 ifndef VBOX_WITH_QT4_SUN
3017 ifndef VBOX_OSE
3018 if1of ($(KBUILD_TARGET), darwin solaris win)
3019 VBOX_WITH_QT4_SUN := 1
3020 endif
3021 endif
3022 endif
3023
3024 #
3025 # Handmade configuration of qt4 - very annoying, this needs to
3026 # be cleaned up properly later some time (not important now).
3027 #
3028 ifeq ($(VBOX_PATH_QT4),)
3029 ifeq ($(KBUILD_TARGET),darwin)
3030 VBOX_PATH_QT4 := $(lastword $(sort $(wildcard $(PATH_DEVTOOLS_TRG)/qt/v4*)))
3031 ifeq ($(VBOX_PATH_QT4),)
3032 ifneq ($(wildcard /Library/Frameworks/QtCore.framework),)
3033 # Using the global installation (for OSE).
3034 VBOX_PATH_QT4 ?= /usr
3035 VBOX_PATH_QT4_FRAMEWORKS ?= /Library/Frameworks
3036 endif
3037 endif
3038 else if1of ($(KBUILD_TARGET),win)
3039 VBOX_PATH_QT4 ?= $(lastword $(sort $(wildcard $(PATH_DEVTOOLS_TRG)/qt/v4*)))
3040 else if1of ($(KBUILD_TARGET),solaris)
3041 VBOX_PATH_QT4 ?= $(lastword $(sort $(wildcard $(PATH_DEVTOOLS_TRG)/qt/v4*)))
3042 ifneq ($(VBOX_PATH_QT4),)
3043 VBOX_WITH_QT4_SUN = 1
3044 endif
3045 endif
3046 endif
3047 ifeq ($(VBOX_PATH_QT4),)
3048 if1of ($(USERNAME), bird)
3049 # gentoo (64-bit)
3050 VBOX_PATH_QT4 ?= /usr
3051 VBOX_PATH_QT4_LIB ?= /usr/lib/qt4
3052 endif
3053 endif
3054 VBOX_PATH_QT4 ?= /usr
3055 VBOX_PATH_QT4_LIB ?= $(VBOX_PATH_QT4)/lib
3056
3057 # Hack LD_LIBRARY_PATH for stuff in tools.
3058 ifdef VBOX_WITH_QT4_SUN
3059 if1of ($(KBUILD_TARGET), linux)
3060 export LD_LIBRARY_PATH := $(VBOX_PATH_QT4_LIB):$(LD_LIBRARY_PATH)
3061 endif
3062 endif
3063
3064
3065 #
3066 # Template for building Qt GUI executables.
3067 #
3068 TEMPLATE_VBOXQT4GUIEXE = VBox Qt GUI Executable
3069 TEMPLATE_VBOXQT4GUIEXE_USES = qt4
3070 TEMPLATE_VBOXQT4GUIEXE_QTTOOL = QT4
3071 TEMPLATE_VBOXQT4GUIEXE_MOCTOOL = QT4
3072 TEMPLATE_VBOXQT4GUIEXE_UICTOOL = QT4
3073 TEMPLATE_VBOXQT4GUIEXE_RCCTOOL = QT4
3074 TEMPLATE_VBOXQT4GUIEXE_LRCTOOL = QT4
3075 TEMPLATE_VBOXQT4GUIEXE_SDKS = QT4
3076 ifdef VBOX_WITH_QT4_SUN
3077 TEMPLATE_VBOXQT4GUIEXE_QT_INFIX = VBox
3078 endif
3079 TEMPLATE_VBOXQT4GUIEXE_DEFS = IN_RING3 QT_NO_DEBUG QT_THREAD_SUPPORT QT_SHARED HAVE_CONFIG_H $(ARCH_BITS_DEFS)
3080 TEMPLATE_VBOXQT4GUIEXE_RCDEFS = $(TEMPLATE_VBOXR3EXE_RCDEFS)
3081
3082 ifeq ($(KBUILD_TARGET),win)
3083 TEMPLATE_VBOXQT4GUIEXE_TOOL = $(VBOX_VCC_TOOL)
3084 TEMPLATE_VBOXQT4GUIEXE_DEFS += \
3085 _WIN32_WINNT=0x0500 UNICODE _UNICODE \
3086 QT_DLL _CRT_SECURE_NO_DEPRECATE \
3087 $(QMAKE_PRL_DEFINES)
3088 ## @todo VCC70 flags?
3089 ifdef VBOX_USE_VCC80
3090 TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS = \
3091 -nologo -Zm200 -W3 -MD -Zi -EHsc -Zc:wchar_t-
3092 TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS.debug = -RTCsu
3093 else
3094 TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS = \
3095 -nologo -Zm200 -W3 -MD -Zi -GX
3096 TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS.debug = -GZ
3097 endif
3098 TEMPLATE_VBOXQT4GUIEXE_INCS += \
3099 $(PATH_TOOL_$(VBOX_VCC_TOOL)_ATLMFC_INC)
3100 TEMPLATE_VBOXQT4GUIEXE_LDFLAGS = \
3101 /NOD /NOLOGO /INCREMENTAL:NO /MAPINFO:EXPORTS /DEBUG \
3102 /DELAYLOAD:oleaut32.dll
3103 TEMPLATE_VBOXQT4GUIEXE_SDKS += WINPSDK
3104 TEMPLATE_VBOXQT4GUIEXE_LIBS = \
3105 $(VBOX_LIBS_QT4) \
3106 $(LIB_RUNTIME) \
3107 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcprt.lib \
3108 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcrt.lib \
3109 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/oldnames.lib \
3110 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/delayimp.lib \
3111 $(PATH_TOOL_$(VBOX_VCC_TOOL)_ATLMFC_LIB)/atls.lib
3112 TEMPLATE_VBOXQT4GUIEXE_POST_CMDS = $(VBOX_SIGN_IMAGE_CMDS)
3113
3114 else # the gcc guys:
3115 TEMPLATE_VBOXQT4GUIEXE_TOOL = $(VBOX_GCC_TOOL)
3116 TEMPLATE_VBOXQT4GUIEXE_DEFS.linux = _REENTRANT
3117
3118 TEMPLATE_VBOXQT4GUIEXE_DEFS.solaris = _REENTRANT
3119
3120 TEMPLATE_VBOXQT4GUIEXE_INCS += \
3121 $(LIB_SDL_INC)
3122 TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS = \
3123 -g -pipe $(filter-out -Wno-unused,$(VBOX_GCC_WARN)) -frtti -fno-exceptions -Wno-non-virtual-dtor \
3124 -Wno-long-long -fshort-wchar -fno-strict-aliasing \
3125 $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_fvisibility-inlines-hidden)
3126 TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS.x86 = -m32
3127 TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS.amd64 = -m64
3128 TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS.linux = -pthread
3129 TEMPLATE_VBOXQT4GUIEXE_LDFLAGS.x86 = -m32
3130 TEMPLATE_VBOXQT4GUIEXE_LDFLAGS.amd64 = -m64
3131 TEMPLATE_VBOXQT4GUIEXE_LIBS = \
3132 $(VBOX_LIBS_QT4) \
3133 $(LIB_SDL) \
3134 $(LIB_RUNTIME) \
3135 $(LIB_REM) \
3136 $(LIB_VMM)
3137
3138 ifeq ($(KBUILD_TARGET),linux)
3139 TEMPLATE_VBOXQT4GUIEXE_LDFLAGS += $(VBOX_LD_as_needed)
3140 TEMPLATE_VBOXQT4GUIEXE_LIBS += \
3141 $(VBOX_XCURSOR_LIBS) \
3142 Xext \
3143 X11
3144 TEMPLATE_VBOXQT4GUIEXE_LIBPATH += \
3145 $(VBOX_LIBPATH_X11)
3146 else ifeq ($(KBUILD_TARGET),darwin)
3147 TEMPLATE_VBOXQT4GUIEXE_DEFS.darwin += $(VBOX_DARWIN_DEF_SDK_DEFS)
3148 TEMPLATE_VBOXQT4GUIEXE_CFLAGS.darwin += $(VBOX_DARWIN_DEF_SDK_CFLAGS)
3149 TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS.darwin += $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
3150 TEMPLATE_VBOXQT4GUIEXE_OBJCFLAGS.darwin += $(VBOX_DARWIN_DEF_SDK_OBJCFLAGS)
3151 TEMPLATE_VBOXQT4GUIEXE_LDFLAGS.darwin += $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -bind_at_load
3152 TEMPLATE_VBOXQT4GUIEXE_LIBS +=
3153 TEMPLATE_VBOXQT4GUIEXE_LIBPATH +=
3154 else
3155 TEMPLATE_VBOXQT4GUIEXE_INCS += \
3156 $(VBOX_XCURSOR_INCS)
3157 TEMPLATE_VBOXQT4GUIEXE_LIBS += \
3158 $(VBOX_XCURSOR_LIBS) \
3159 Xext \
3160 X11 \
3161 m \
3162 $(LIB_PTHREAD)
3163 TEMPLATE_VBOXQT4GUIEXE_LIBPATH += \
3164 $(VBOX_LIBPATH_X11)
3165 ifeq ($(KBUILD_TARGET),freebsd)
3166 TEMPLATE_VBOXQT4GUIEXE_INCS += \
3167 /usr/include \
3168 /usr/X11R6/include \
3169 /usr/local/include
3170 TEMPLATE_VBOXQT4GUIEXE_LIBPATH += \
3171 /usr/lib \
3172 /usr/X11R6/lib \
3173 /usr/local/lib
3174 endif
3175 ifeq ($(KBUILD_TARGET),solaris)
3176 TEMPLATE_VBOXQT4GUIEXE_LIBS += \
3177 rt socket nsl
3178 endif
3179 endif
3180 # Assume the Qt shared objects are in the same directory as the executable, on Solaris too.
3181 ifdef VBOX_WITH_RUNPATH
3182 TEMPLATE_VBOXQT4GUIEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)'
3183 else ifdef VBOX_WITH_ORIGIN
3184 TEMPLATE_VBOXQT4GUIEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$$(VBOX_ORIGIN)'
3185 endif
3186
3187 endif
3188
3189 # Add COM/XPCOM stuff
3190 TEMPLATE_VBOXQT4GUIEXE_LIBS += \
3191 $(PATH_LIB)/VBoxCOM$(VBOX_SUFF_LIB)
3192 ifdef VBOX_WITH_XPCOM
3193 ## @todo may be worth creating the VBOX_XPCOM SDK def, or just a SDK_VBOXXPCOM.
3194 TEMPLATE_VBOXQT4GUIEXE_DEFS += VBOX_WITH_XPCOM
3195 ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
3196 TEMPLATE_VBOXQT4GUIEXE_DEFS += VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
3197 endif
3198 TEMPLATE_VBOXQT4GUIEXE_INCS += \
3199 $(VBOX_XPCOM_INCS)
3200 TEMPLATE_VBOXQT4GUIEXE_LIBS += \
3201 $(LIB_XPCOM)
3202 TEMPLATE_VBOXQT4GUIEXE_INTERMEDIATES += \
3203 $(VBOX_PATH_SDK)/bindings/xpcom/include/VirtualBox_XPCOM.h
3204 else # COM
3205 TEMPLATE_VBOXQT4GUIEXE_INCS += \
3206 $(VBOX_PATH_SDK)/bindings/mscom/include
3207 TEMPLATE_VBOXQT4GUIEXE_INTERMEDIATES += \
3208 $(VBOX_PATH_SDK)/bindings/mscom/include/VirtualBox.h
3209 endif # COM
3210
3211
3212 #
3213 # Template for building Qt GUI components.
3214 #
3215 TEMPLATE_VBOXQT4GUI = VBox Qt GUI Components
3216 TEMPLATE_VBOXQT4GUI_EXTENDS = VBOXQT4GUIEXE
3217 TEMPLATE_VBOXQT4GUI_LIBS = $(filter-out $(QTMAIN),$(TEMPLATE_VBOXQT4GUIEXE_LIBS))
3218 ifeq ($(KBUILD_TARGET),darwin)
3219 TEMPLATE_VBOXQT4GUI_LDFLAGS.darwin += $(filter-out -bind_at_load,$(TEMPLATE_VBOXQT4GUIEXE_LDFLAGS.darwin)) \
3220 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
3221 endif
3222 ifeq ($(filter-out solaris.x86 %.amd64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),)
3223 ifneq ($(KBUILD_TARGET),win)
3224 TEMPLATE_VBOXQT4GUI_DEFS = PIC $(TEMPLATE_VBOXQT4GUIEXE_DEFS)
3225 TEMPLATE_VBOXQT4GUI_CFLAGS = -fPIC $(TEMPLATE_VBOXQT4GUIEXE_CFLAGS)
3226 TEMPLATE_VBOXQT4GUI_CXXFLAGS = -fPIC $(TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS)
3227 TEMPLATE_VBOXQT4GUI_LDFLAGS = -fPIC $(TEMPLATE_VBOXQT4GUIEXE_LDFLAGS)
3228 endif
3229 endif
3230
3231endif # VBOX_WITH_QTGUI
3232
3233
3234#
3235# Template for building build bldprogs.
3236#
3237TEMPLATE_VBOXBLDPROG = VBox Build Program
3238TEMPLATE_VBOXBLDPROG_DEFS = IN_RING3
3239ifeq ($(KBUILD_HOST),win)
3240 ifeq ($(KBUILD_HOST_ARCH),x86)
3241 ifdef VBOX_USE_VCC80
3242 TEMPLATE_VBOXBLDPROG_TOOL = VCC80X86
3243 else
3244 TEMPLATE_VBOXBLDPROG_TOOL = VCC70
3245 endif
3246 TEMPLATE_VBOXBLDPROG_SDKS = WIN32SDK
3247 else
3248 TEMPLATE_VBOXBLDPROG_TOOL = VCC80AMD64
3249 TEMPLATE_VBOXBLDPROG_SDKS = WIN64SDK
3250 endif
3251 ifneq ($(TEMPLATE_VBOXBLDPROG_TOOL),VCC70)
3252 TEMPLATE_VBOXBLDPROG_CXXFLAGS = -Zi -Zl -GR- -EHs- -GF -MT -W3 -wd4996 -Zc:wchar_t-
3253 TEMPLATE_VBOXBLDPROG_CXXFLAGS.debug = -RTCsu
3254 TEMPLATE_VBOXBLDPROG_CXXFLAGS.release = -O2 -Oy- -GS-
3255 else
3256 TEMPLATE_VBOXBLDPROG_CXXFLAGS = -Zi -Zl -GR- -EHs- -GF -MT -W3
3257 TEMPLATE_VBOXBLDPROG_CXXFLAGS.debug = -GZ
3258 TEMPLATE_VBOXBLDPROG_CXXFLAGS.release = -Ogitb2 -Oy-
3259 endif
3260 TEMPLATE_VBOXBLDPROG_CXXFLAGS.profile = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.release)
3261 TEMPLATE_VBOXBLDPROG_CXXFLAGS.kprofile = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.release)
3262 TEMPLATE_VBOXBLDPROG_CFLAGS = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS)
3263 TEMPLATE_VBOXBLDPROG_CFLAGS.debug = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.debug)
3264 TEMPLATE_VBOXBLDPROG_CFLAGS.release = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.release)
3265 TEMPLATE_VBOXBLDPROG_CFLAGS.profile = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.profile)
3266 TEMPLATE_VBOXBLDPROG_CFLAGS.kprofile = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.kprofile)
3267 TEMPLATE_VBOXBLDPROG_LDFLAGS = \
3268 /NOD /INCREMENTAL:NO /MAPINFO:EXPORTS /LARGEADDRESSAWARE /DEBUG \
3269 /DISALLOWLIB:libcd.lib \
3270 /DISALLOWLIB:libcmtd.lib \
3271 /DISALLOWLIB:msvcrt.lib \
3272 /DISALLOWLIB:msvcrtd.lib \
3273 /DISALLOWLIB:msvcprt.lib \
3274 /DISALLOWLIB:msvcprtd.lib
3275 TEMPLATE_VBOXBLDPROG_LIBS = \
3276 $(PATH_TOOL_$(TEMPLATE_VBOXBLDPROG_TOOL)_LIB)/oldnames.lib \
3277 $(PATH_TOOL_$(TEMPLATE_VBOXBLDPROG_TOOL)_LIB)/libcmt.lib \
3278 $(PATH_TOOL_$(TEMPLATE_VBOXBLDPROG_TOOL)_LIB)/libcpmt.lib
3279
3280else
3281# (gcc of some kind )
3282TEMPLATE_VBOXBLDPROG_TOOL = GXX3
3283TEMPLATE_VBOXBLDPROG_CFLAGS = -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC_Wno-variadic-macros) -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations
3284TEMPLATE_VBOXBLDPROG_CFLAGS.x86 = -m32
3285TEMPLATE_VBOXBLDPROG_CFLAGS.amd64 = -m64
3286TEMPLATE_VBOXBLDPROG_CFLAGS.release = -O2 -fno-omit-frame-pointer -fno-strict-aliasing
3287TEMPLATE_VBOXBLDPROG_CFLAGS.profile = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.profile)
3288TEMPLATE_VBOXBLDPROG_CFLAGS.kprofile = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.kprofile)
3289TEMPLATE_VBOXBLDPROG_CXXFLAGS = -g -pipe $(VBOX_GCC_PEDANTIC)
3290TEMPLATE_VBOXBLDPROG_CXXFLAGS.x86 = -m32
3291TEMPLATE_VBOXBLDPROG_CXXFLAGS.amd64 = -m64
3292TEMPLATE_VBOXBLDPROG_CXXFLAGS.release = -O2 -fno-omit-frame-pointer -fno-strict-aliasing
3293TEMPLATE_VBOXBLDPROG_CXXFLAGS.profile = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.release)
3294TEMPLATE_VBOXBLDPROG_CXXFLAGS.kprofile = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.release)
3295TEMPLATE_VBOXBLDPROG_LDFLAGS.x86 = -m32
3296TEMPLATE_VBOXBLDPROG_LDFLAGS.amd64 = -m64
3297 ifeq ($(KBUILD_HOST),linux)
3298TEMPLATE_VBOXBLDPROG_LIBS = pthread m rt dl
3299 else ifeq ($(KBUILD_HOST),os2)
3300TEMPLATE_VBOXBLDPROG_TOOL = GXX3OMF
3301TEMPLATE_VBOXBLDPROG_LIBS = socket iconv
3302 else ifeq ($(KBUILD_HOST),darwin)
3303TEMPLATE_VBOXBLDPROG_TOOL = GXX4MACHO
3304 ifeq ($(KBUILD_HOST_ARCH).$(KBUILD_TARGET_ARCH),amd64.x86) # MESS ALERT!
3305TEMPLATE_VBOXBLDPROG_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_10_6_DEFS)
3306TEMPLATE_VBOXBLDPROG_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_6_CFLAGS) -fno-common
3307TEMPLATE_VBOXBLDPROG_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_6_CXXFLAGS)
3308TEMPLATE_VBOXBLDPROG_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_6_OBJCFLAGS)
3309TEMPLATE_VBOXBLDPROG_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_6_LDFLAGS)
3310 else ifdef VBOX_MACOS_10_5_WORKAROUND # enable this if you have problems linking xpidl and is running 10.5 or later.
3311TEMPLATE_VBOXBLDPROG_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_DEFS)
3312TEMPLATE_VBOXBLDPROG_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_CFLAGS) -fno-common
3313TEMPLATE_VBOXBLDPROG_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_CXXFLAGS)
3314TEMPLATE_VBOXBLDPROG_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_OBJCFLAGS)
3315TEMPLATE_VBOXBLDPROG_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_10_5_LDFLAGS)
3316 else
3317TEMPLATE_VBOXBLDPROG_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_DEFS)
3318TEMPLATE_VBOXBLDPROG_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -fno-common
3319TEMPLATE_VBOXBLDPROG_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
3320TEMPLATE_VBOXBLDPROG_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_OBJCFLAGS)
3321TEMPLATE_VBOXBLDPROG_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_LDFLAGS)
3322 endif
3323TEMPLATE_VBOXBLDPROG_OBJCFLAGS.darwin.x86= -m32
3324TEMPLATE_VBOXBLDPROG_OBJCFLAGS.darwin.amd64= -m64
3325TEMPLATE_VBOXBLDPROG_LIBS =
3326 else if1of ($(KBUILD_HOST), freebsd netbsd openbsd)
3327TEMPLATE_VBOXBLDPROG_TOOL = GXX3
3328TEMPLATE_VBOXBLDPROG_LIBS =
3329TEMPLATE_VBOXBLDPROG_INCS += \
3330 /usr/include \
3331 /usr/X11R6/include \
3332 /usr/local/include
3333TEMPLATE_VBOXBLDPROG_LIBPATH += \
3334 /usr/lib \
3335 /usr/X11R6/lib \
3336 /usr/local/lib
3337 else ifeq ($(KBUILD_HOST),solaris)
3338TEMPLATE_VBOXBLDPROG_TOOL = GXX3PLAIN
3339TEMPLATE_VBOXBLDPROG_LIBS = rt
3340 else
3341$(warning Warning: VBOX Build: Target $(KBUILD_HOST) is not officially supported!)
3342 endif
3343
3344endif # !win
3345
3346
3347#
3348# Windows rc workaround for crosscompiling.
3349# (Some (old) Wine versions fails loading msvcrt.dll from the VCC bin directory.)
3350#
3351ifneq ($(KBUILD_HOST),win)
3352 TOOL_VCC80X86_RC := $(EXEC_X86_WIN32) $(PATH_DEVTOOLS)/win.x86/bin/rc.exe
3353 TOOL_VCC80AMD64_RC := $(EXEC_X86_WIN32) $(PATH_DEVTOOLS)/win.x86/bin/rc.exe
3354 TOOL_VCC70_RC := $(EXEC_X86_WIN32) $(PATH_DEVTOOLS)/win.x86/bin/rc.exe
3355 WIN32_MC = $(EXEC_X86_WIN32) $(PATH_DEVTOOLS)/win.x86/bin/mc.exe
3356else
3357 WIN32_MC = $(EXEC_X86_WIN32) $(firstword $(wildcard \
3358 $(PATH_SDK_WINPSDK_BIN)/MC.Exe\
3359 $(PATH_SDK_WINPSDK)/Bin/MC.Exe\
3360 $(PATH_SDK_WIN32SDK_BIN)/MC.Exe\
3361 $(PATH_SDK_WIN64SDK_BIN)/MC.Exe\
3362 $(PATH_DEVTOOLS)/win.x86/bin/mc.exe\
3363 ) Sorry_Cannot_find_mc_in_the_PSDK)
3364endif
3365
3366
3367#
3368# Template for building Linux host tools (only for KBUILD_TARGET=l4).
3369#
3370TEMPLATE_VBOXLNXHOSTR3EXE = Template for building linux host programs when targeting L4.
3371TEMPLATE_VBOXLNXHOSTR3EXE_INST = $(INST_BIN)
3372TEMPLATE_VBOXLNXHOSTR3EXE_BLD_TRG = linux
3373TEMPLATE_VBOXLNXHOSTR3EXE_TOOL = $(VBOX_GCC_TOOL)
3374TEMPLATE_VBOXLNXHOSTR3EXE_ASTOOL = YASM
3375TEMPLATE_VBOXLNXHOSTR3EXE_DLLSUFF = .so
3376TEMPLATE_VBOXLNXHOSTR3EXE_ASFLAGS = $(VBOX_ASFLAGS)
3377TEMPLATE_VBOXLNXHOSTR3EXE_DEFS = IN_RING3 $(ARCH_BITS_DEFS)
3378TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS = -g -pipe $(VBOX_GCC_PEDANTIC) $(VBOX_GCC_fno-stack-protector)
3379TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.debug = -fno-inline
3380TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.release = -O2 -fno-omit-frame-pointer -fno-strict-aliasing
3381TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.profile = $(TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.release)
3382TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.kprofile = $(TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.release)
3383TEMPLATE_VBOXLNXHOSTR3EXE_CFLAGS.release = $(TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.release)
3384TEMPLATE_VBOXLNXHOSTR3EXE_CFLAGS.debug = $(TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.debug)
3385TEMPLATE_VBOXLNXHOSTR3EXE_CFLAGS.profile = $(TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.profile)
3386TEMPLATE_VBOXLNXHOSTR3EXE_CFLAGS.kprofile = $(TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.kprofile)
3387TEMPLATE_VBOXLNXHOSTR3EXE_CFLAGS = -g -pipe $(VBOX_GCC_PEDANTIC) -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations $(VBOX_GCC_fno-stack-protector)
3388TEMPLATE_VBOXLNXHOSTR3EXE_LIBS = pthread m rt dl
3389
3390TEMPLATE_VBOXLNXHOSTR3LIB = Template for linux host libraries.
3391TEMPLATE_VBOXLNXHOSTR3LIB_EXTENDS = VBOXLNXHOSTR3EXE
3392TEMPLATE_VBOXLNXHOSTR3LIB_INST = $(INST_LIB)
3393
3394
3395#
3396# Template for building R3 programs for the guest additions.
3397# Note: Make sure you don't break VBOXGUESTR3CPPEXE when changing this.
3398#
3399TEMPLATE_VBOXGUESTR3EXE = VBox Guest Program
3400ifeq ($(KBUILD_TARGET),win)
3401 TEMPLATE_VBOXGUESTR3EXE_EXTENDS = VBOXR3EXE
3402 TEMPLATE_VBOXGUESTR3EXE_SDKS = $(TEMPLATE_VBOXR3EXE_SDKS) VBOX_NTDLL
3403 TEMPLATE_VBOXGUESTR3EXE_CFLAGS = $(filter-out -MD, $(TEMPLATE_VBOXR3EXE_CFLAGS)) -MT
3404 TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS = $(filter-out -MD, $(TEMPLATE_VBOXR3EXE_CFLAGS)) -MT
3405 TEMPLATE_VBOXGUESTR3EXE_LDFLAGS = $(filter-out /DISALLOWLIB:libcmt.lib, $(TEMPLATE_VBOXR3EXE_LDFLAGS)) \
3406 /DISALLOWLIB:msvcrt.lib \
3407 /DISALLOWLIB:msvcprt.lib
3408 TEMPLATE_VBOXGUESTR3EXE_LIBS = \
3409 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL)_LIB)/oldnames.lib \
3410 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL)_LIB)/libcmt.lib \
3411 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL)_LIB)/libcpmt.lib
3412else # the gcc guys
3413 TEMPLATE_VBOXGUESTR3EXE_EXTENDS = VBOXR3EXE
3414 TEMPLATE_VBOXGUESTR3EXE_TOOL := $(subst GXX,GCC,$(TEMPLATE_VBOXR3EXE_TOOL))
3415 TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -fno-exceptions
3416 TEMPLATE_VBOXGUESTR3EXE_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)%,$(TEMPLATE_VBOXR3EXE_LDFLAGS))
3417 TEMPLATE_VBOXGUESTR3EXE_LDFLAGS.linux = $(filter-out $(VBOX_GCC_ORIGIN_OPT),$(TEMPLATE_VBOXR3EXE_LDFLAGS.linux))
3418endif
3419TEMPLATE_VBOXGUESTR3EXE_INST = $(INST_ADDITIONS)
3420TEMPLATE_VBOXGUESTR3EXE_DEFS := $(TEMPLATE_VBOXR3EXE_DEFS) IN_GUEST IN_GUEST_R3 IN_RT_R3
3421ifeq ($(KBUILD_TARGET),linux) # As few libs as possible on linux.
3422 TEMPLATE_VBOXGUESTR3EXE_LIBS = pthread rt m
3423endif
3424if1of ($(KBUILD_TARGET), freebsd netbsd openbsd)
3425 TEMPLATE_VBOXGUESTR3EXE_LIBS = $(TEMPLATE_VBOXR3EXE_LIBS) iconv
3426endif
3427
3428#
3429# Template for building R3 (dynamic) libraries for the guest additions.
3430#
3431TEMPLATE_VBOXGUESTR3DLL = VBox Guest User Dynamic Libraries
3432TEMPLATE_VBOXGUESTR3DLL_EXTENDS = VBOXGUESTR3EXE
3433## @todo add a INSTFUN that separates dlls and libs.
3434ifn1of ($(KBUILD_TARGET), os2 win)
3435 TEMPLATE_VBOXGUESTR3DLL_DEFS = $(TEMPLATE_VBOXGUESTR3EXE_DEFS) PIC
3436 TEMPLATE_VBOXGUESTR3DLL_CFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_CFLAGS) -fPIC
3437 TEMPLATE_VBOXGUESTR3DLL_CXXFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS) -fPIC -fno-exceptions
3438 TEMPLATE_VBOXGUESTR3DLL_LDFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_LDFLAGS) -fPIC
3439endif
3440
3441#
3442# Template for building R3 (static) libraries for the guest additions.
3443#
3444TEMPLATE_VBOXGUESTR3LIB = VBox Guest User Libraries
3445TEMPLATE_VBOXGUESTR3LIB_EXTENDS = VBOXGUESTR3EXE
3446TEMPLATE_VBOXGUESTR3LIB_INST = $(INST_ADDITIONS_LIB)
3447if1of ($(KBUILD_TARGET), solaris) ## @todo r=bird: Fix the *R3Mini template to VBOXGUESTR3DLL and remove this hack.
3448 TEMPLATE_VBOXGUESTR3LIB_DEFS = $(TEMPLATE_VBOXGUESTR3EXE_DEFS) PIC
3449 TEMPLATE_VBOXGUESTR3LIB_CFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_CFLAGS) -fPIC
3450 TEMPLATE_VBOXGUESTR3LIB_CXXFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS) -fPIC -fno-exceptions
3451endif
3452
3453#
3454# Template for building R3 programs for the guest additions (no -pedantic)
3455#
3456TEMPLATE_VBOXGUESTR3NPEXE = VBox Guest Program Non-pedantic
3457TEMPLATE_VBOXGUESTR3NPEXE_EXTENDS = VBOXGUESTR3EXE
3458ifneq ($(KBUILD_TARGET),win) # gcc only
3459TEMPLATE_VBOXGUESTR3NPEXE_CXXFLAGS = $(filter-out -pedantic,$(TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS)) -Wno-sign-compare
3460TEMPLATE_VBOXGUESTR3NPEXE_CFLAGS = $(filter-out -pedantic -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations,$(TEMPLATE_VBOXGUESTR3EXE_CFLAGS)) -Wno-sign-compare
3461endif
3462
3463#
3464# Template for building R3 (dynamic) libraries for the guest additions (no -pedantic)
3465#
3466TEMPLATE_VBOXGUESTR3NPDLL = VBox Guest User Dynamic Libraries Non-pedantic
3467TEMPLATE_VBOXGUESTR3NPDLL_EXTENDS = VBOXGUESTR3NPEXE
3468## @todo add a INSTFUN that separates dlls and libs.
3469ifn1of ($(KBUILD_TARGET), os2 win)
3470 TEMPLATE_VBOXGUESTR3NPDLL_DEFS = $(TEMPLATE_VBOXGUESTR3NPEXE_DEFS) PIC
3471 TEMPLATE_VBOXGUESTR3NPDLL_CFLAGS = $(TEMPLATE_VBOXGUESTR3NPEXE_CFLAGS) -fPIC
3472 TEMPLATE_VBOXGUESTR3NPDLL_CXXFLAGS = $(TEMPLATE_VBOXGUESTR3NPEXE_CXXFLAGS) -fPIC -fno-exceptions
3473 TEMPLATE_VBOXGUESTR3NPDLL_LDFLAGS = $(TEMPLATE_VBOXGUESTR3NPEXE_LDFLAGS) -fPIC
3474endif
3475
3476#
3477# Template for building R3 (static) libraries for the guest additions (no -pedantic)
3478#
3479TEMPLATE_VBOXGUESTR3NPLIB = VBox Guest User Libraries Non-pedantic
3480TEMPLATE_VBOXGUESTR3NPLIB_EXTENDS = VBOXGUESTR3NPEXE
3481TEMPLATE_VBOXGUESTR3NPLIB_INST = $(INST_ADDITIONS_LIB)
3482## @todo r=bird: Fix the *R3Mini template to VBOXGUESTR3DLL and remove this hack.
3483ifeq ($(filter-out solaris.x86 %.amd64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),)
3484 ifn1of ($(KBUILD_TARGET), darwin win)
3485 TEMPLATE_VBOXGUESTR3NPLIB_DEFS = $(TEMPLATE_VBOXGUESTR3NPEXE_DEFS) PIC
3486 TEMPLATE_VBOXGUESTR3NPLIB_CFLAGS = $(TEMPLATE_VBOXGUESTR3NPEXE_CFLAGS) -fPIC
3487 TEMPLATE_VBOXGUESTR3NPLIB_CXXFLAGS = $(TEMPLATE_VBOXGUESTR3NPEXE_CXXFLAGS) -fPIC -fno-exceptions
3488 endif
3489endif
3490
3491
3492#
3493# Template for XFree86 guest modules (relocatable module, i.e. sysmod).
3494# This mostly about zapping the VBOXR3EXE linker flags and libraries.
3495#
3496TEMPLATE_VBOXGUESTR3XF86MOD = VBox Guest Program with C++ library dependencies
3497TEMPLATE_VBOXGUESTR3XF86MOD_EXTENDS = VBOXGUESTR3EXE
3498TEMPLATE_VBOXGUESTR3XF86MOD_LIBS.$(KBUILD_TYPE) = $(NO_SUCH_VARIABLE)
3499TEMPLATE_VBOXGUESTR3XF86MOD_LIBS.$(KBUILD_TARGET) = $(NO_SUCH_VARIABLE)
3500TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.$(KBUILD_TARGET) = $(NO_SUCH_VARIABLE)
3501TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.$(KBUILD_TYPE) = $(NO_SUCH_VARIABLE)
3502TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS = -r
3503if1of ($(KBUILD_TARGET), dragonfly freebsd linux netbsd openbsd) # the gnu ld guys.
3504 TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.release = -S
3505 TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.x86 = -m elf_i386
3506 TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.amd64 = -m elf_x86_64
3507endif
3508TEMPLATE_VBOXGUESTR3XF86MOD_CFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_CFLAGS) -fno-merge-constants -std=c99
3509TEMPLATE_VBOXGUESTR3XF86MOD_CXXFLAGS= $(TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS) -fno-merge-constants
3510TEMPLATE_VBOXGUESTR3XF86MOD_SYSSUFF = .o
3511TEMPLATE_VBOXGUESTR3XF86MOD_LIBS = \
3512 $(VBOX_LIB_VBGL_R3_XFREE86)
3513TEMPLATE_VBOXGUESTR3XF86MOD_DEFS = $(TEMPLATE_VBOXGUESTR3DLL_DEFS) LOG_TO_BACKDOOR
3514
3515
3516#
3517# Template for X.org guest modules (shared libs).
3518# This mostly about zapping unnecessary LIBS from VBOXGUESTR3DLL and adding some flags.
3519#
3520TEMPLATE_VBOXGUESTR3XORGMOD = VBox Guest Program with C++ library dependencies
3521TEMPLATE_VBOXGUESTR3XORGMOD_EXTENDS = VBOXGUESTR3DLL
3522TEMPLATE_VBOXGUESTR3XORGMOD_LIBS.$(KBUILD_TYPE) = $(NO_SUCH_VARIABLE)
3523TEMPLATE_VBOXGUESTR3XORGMOD_LIBS.$(KBUILD_TARGET) = $(NO_SUCH_VARIABLE)
3524TEMPLATE_VBOXGUESTR3XORGMOD_CFLAGS = $(TEMPLATE_VBOXGUESTR3DLL_CFLAGS) -std=c99
3525TEMPLATE_VBOXGUESTR3XORGMOD_DEFS = $(TEMPLATE_VBOXGUESTR3DLL_DEFS) LOG_TO_BACKDOOR
3526ifeq ($(KBUILD_TARGET_ARCH),amd64)
3527 TEMPLATE_VBOXGUESTR3XORGMOD_DEFS += _XSERVER64
3528endif
3529if1of ($(KBUILD_TARGET), linux)
3530 TEMPLATE_VBOXGUESTR3XORGMOD_LDFLAGS = $(TEMPLATE_VBOXGUESTR3DLL_LDFLAGS) -s
3531endif
3532TEMPLATE_VBOXGUESTR3XORGMOD_LIBS = \
3533 $(VBOX_LIB_VBGL_R3_SHARED) \
3534 $(VBOX_LIB_IPRT_GUEST_R3_MINI) \
3535 $(VBOX_LIB_VBGL_R3_SHARED)
3536
3537
3538#
3539# Template for guest stuff that makes use of the C++ library and features.
3540# (This is mostly about undoing what was done to C++ for VBOXGUESTR3EXE.)
3541#
3542TEMPLATE_VBOXGUESTR3CPPEXE = VBox Guest Program with C++ library dependencies
3543TEMPLATE_VBOXGUESTR3CPPEXE_EXTENDS = VBOXGUESTR3EXE
3544ifeq ($(KBUILD_TARGET),win)
3545 # later if necessary
3546else
3547 TEMPLATE_VBOXGUESTR3CPPEXE_TOOL = $(TEMPLATE_VBOXR3EXE_TOOL)
3548 TEMPLATE_VBOXGUESTR3CPPEXE_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS)
3549endif
3550
3551
3552#
3553# Template for building R0 drivers for the guest additions.
3554#
3555TEMPLATE_VBOXGUESTR0 = VBox Guest Driver
3556TEMPLATE_VBOXGUESTR0_EXTENDS = VBOXR0DRV
3557TEMPLATE_VBOXGUESTR0_INST = $(INST_ADDITIONS)
3558TEMPLATE_VBOXGUESTR0_SDKS.win.x86 = WIN32SDK W2K3DDK
3559TEMPLATE_VBOXGUESTR0_SDKS.win.amd64 = W2K3DDK WINPSDKINCS
3560TEMPLATE_VBOXGUESTR0_LIBS.win.x86 = \
3561 $(PATH_SDK_W2K3DDK_LIB)/int64.lib
3562TEMPLATE_VBOXGUESTR0_DEFS = $(TEMPLATE_VBOXR0DRV_DEFS) IN_GUEST IN_GUEST_R0
3563ifeq ($(KBUILD_TARGET),solaris) # No VBI for the guest additions yet.
3564 TEMPLATE_VBOXGUESTR0_LDFLAGS = -r -dy
3565# ifdef VBOX_WITH_SOLARIS_VBI
3566# TEMPLATE_VBOXGUESTR0DRV_LDFLAGS += -N misc/vbi
3567# endif
3568endif
3569
3570#
3571# Template for building R0 libraries for the guest additions.
3572#
3573TEMPLATE_VBOXGUESTR0LIB = VBox Guest Driver Libraries
3574TEMPLATE_VBOXGUESTR0LIB_EXTENDS = VBOXGUESTR0
3575TEMPLATE_VBOXGUESTR0LIB_INST = $(INST_ADDITIONS_LIB)
3576
3577#
3578# Template for building OpenGL host dlls.
3579#
3580TEMPLATE_VBOXCROGLR3HOSTDLL = VBox OpenGL Host DLLs
3581TEMPLATE_VBOXCROGLR3HOSTDLL_EXTENDS = VBOXR3NP
3582TEMPLATE_VBOXCROGLR3HOSTDLL_EXTENDS_BY = prepending
3583TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS = CHROMIUM_THREADSAFE VBOX_WITH_HGCM UNPACKS
3584TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS.win = _WIN32_WINNT=0x0500 WINDOWS=1
3585TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS.linux = Linux=1 _GNU_SOURCE
3586TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS.solaris = SunOS=1 _GNU_SOURCE #GLEXT_64_TYPES_DEFINED
3587TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS.darwin = DARWIN=1 GL_GLEXT_LEGACY _GNU_SOURCE
3588TEMPLATE_VBOXCROGLR3HOSTDLL_INCS = $(VBOX_PATH_CROGL_INCLUDE) $(VBOX_PATH_CROGL_GENFILES)
3589TEMPLATE_VBOXCROGLR3HOSTDLL_SDKS.darwin = DARWIN-OPENGL
3590TEMPLATE_VBOXCROGLR3HOSTDLL_LDFLAGS.darwin = \
3591 -framework Carbon \
3592 -framework OpenGL \
3593 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
3594TEMPLATE_VBOXCROGLR3HOSTDLL_LDFLAGS.linux = -Wl,--no-as-needed
3595TEMPLATE_VBOXCROGLR3HOSTDLL_BLDDIRS = $(VBOX_PATH_CROGL_GENFILES)/
3596
3597#
3598# Template for building OpenGL host libraries.
3599#
3600TEMPLATE_VBOXCROGLR3HOSTLIB = VBox OpenGL Host Libraries
3601TEMPLATE_VBOXCROGLR3HOSTLIB_EXTENDS = VBOXCROGLR3GUESTDLL
3602# fixme? Without next line VBoxOGLhostcrstate and other host libs from src/VBox/GuestHost/OpenGL/makefile.kmk
3603# would be compiled with defines from VBOXGUESTR3NPDLL, like IN_GUEST etc.
3604# Also need to specify IN_RING3 because EXTENDS_BY=prepending can't be used due to the reason above.
3605TEMPLATE_VBOXCROGLR3HOSTLIB_DEFS = IN_RING3 $(TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS)
3606TEMPLATE_VBOXCROGLR3HOSTLIB_INST = $(INST_LIB)
3607
3608#
3609# Template for building OpenGL guest dlls.
3610#
3611TEMPLATE_VBOXCROGLR3GUESTDLL = VBox OpenGL Guest DLLs
3612TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS = VBOXGUESTR3NPDLL
3613TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS_BY = prepending
3614TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS = CHROMIUM_THREADSAFE VBOX_WITH_HGCM
3615TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS.win = _WIN32_WINNT=0x0500 WINDOWS=1
3616TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS.linux = Linux=1 _GNU_SOURCE
3617TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS.solaris = SunOS=1 _GNU_SOURCE #GLEXT_64_TYPES_DEFINED
3618TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS.darwin = DARWIN=1 GL_GLEXT_LEGACY _GNU_SOURCE
3619TEMPLATE_VBOXCROGLR3GUESTDLL_INCS = $(VBOX_PATH_CROGL_INCLUDE) $(VBOX_PATH_CROGL_GENFILES)
3620TEMPLATE_VBOXCROGLR3GUESTDLL_SDKS.darwin = DARWIN-OPENGL
3621TEMPLATE_VBOXCROGLR3GUESTDLL_LDFLAGS.darwin = \
3622 -framework Carbon \
3623 -framework OpenGL \
3624 -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
3625TEMPLATE_VBOXCROGLR3GUESTDLL_BLDDIRS = $(VBOX_PATH_CROGL_GENFILES)/
3626
3627#
3628# Template for building OpenGL guest libraries.
3629#
3630TEMPLATE_VBOXCROGLR3GUESTLIB = VBox OpenGL Guest Libraries
3631TEMPLATE_VBOXCROGLR3GUESTLIB_EXTENDS = VBOXCROGLR3GUESTDLL
3632TEMPLATE_VBOXCROGLR3GUESTLIB_INST = $(INST_ADDITIONS_LIB)
3633
3634
3635#
3636# Template for building Mesa guest library, Linux-only so far.
3637#
3638TEMPLATE_VBOXMESAR3GUESTLIB = VBox Mesa Guest Library
3639TEMPLATE_VBOXMESAR3GUESTLIB_EXTENDS = VBOXCROGLR3GUESTDLL
3640TEMPLATE_VBOXMESAR3GUESTLIB_INST = $(INST_ADDITIONS_LIB)
3641TEMPLATE_VBOXMESAR3GUESTLIB_DEFS.linux = Linux=1
3642TEMPLATE_VBOXMESAR3GUESTLIB_DEFS.solaris = SunOS=1
3643TEMPLATE_VBOXMESAR3GUESTLIB_DEFS.darwin = DARWIN=1 GL_GLEXT_LEGACY
3644ifeq ($(KBUILD_TARGET),linux)
3645 TEMPLATE_VBOXMESAR3GUESTLIB_ASTOOL = $(TEMPLATE_VBOXCROGLR3GUESTDLL_TOOL)
3646 TEMPLATE_VBOXMESAR3GUESTLIB_ASFLAGS = $(NO_SUCH_VARIABLE)
3647 TEMPLATE_VBOXMESAR3GUESTLIB_ASFLAGS.x86 = -m32
3648 TEMPLATE_VBOXMESAR3GUESTLIB_ASFLAGS.amd64 = -m64
3649 TEMPLATE_VBOXMESAR3GUESTLIB_ASDEFS = $(NO_SUCH_VARIABLE)
3650endif
3651
3652
3653#
3654# Guest additions libraries (all static).
3655# The _MINI and _SHARED are both compiled as PIC and intended for linking into a .so/.dll/.dylib.
3656#
3657VBOX_LIB_IPRT_GUEST_R3 = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR3$(VBOX_SUFF_LIB)
3658VBOX_LIB_IPRT_GUEST_R3_MINI = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR3Mini$(VBOX_SUFF_LIB)
3659VBOX_LIB_IPRT_GUEST_R3_SHARED = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR3Shared$(VBOX_SUFF_LIB)
3660VBOX_LIB_IPRT_GUEST_R0 = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR0$(VBOX_SUFF_LIB)
3661ifeq ($(KBUILD_TARGET_ARCH),x86)
3662 VBOX_LIB_IPRT_GUEST_R0_NT4 = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR0NT4$(VBOX_SUFF_LIB)
3663else
3664 VBOX_LIB_IPRT_GUEST_R0_NT4 = $(VBOX_LIB_IPRT_GUEST_R0)
3665endif
3666VBOX_LIB_VBGL_R3 = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3Lib$(VBOX_SUFF_LIB)
3667VBOX_LIB_VBGL_R3_XFREE86 = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3LibXFree86$(VBOX_SUFF_LIB)
3668VBOX_LIB_VBGL_R3_SHARED = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3LibShared$(VBOX_SUFF_LIB)
3669VBOX_LIB_VBGL_R0BASE = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR0LibBase$(VBOX_SUFF_LIB)
3670VBOX_LIB_VBGL_R0 = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR0Lib$(VBOX_SUFF_LIB)
3671
3672
3673
3674#
3675# Two targets to coordinate version number changes properly. Note that the
3676# only way to get a really consistent build is to run 'kmk' in the top-level
3677# directory. If you don't run it there, you get a consistent sub-tree only.
3678#
3679VBOX_VERSION_STAMP = $(PATH_OUT)/version-stamp-$(VBOX_VERSION_STRING)
3680VBOX_VERSION_HEADER = $(PATH_OUT)/version-generated.h
3681VBOX_VERSION_MK = $(PATH_OUT)/version-generated.mk
3682
3683$(VBOX_VERSION_STAMP): | $(PATH_ROOT)/Config.kmk
3684 $(call MSG_GENERATE,,$@)
3685 $(QUIET)$(MKDIR) -p $(@D)
3686 $(QUIET)$(RM) -f $(wildcard $(PATH_OUT)/version-stamp-*)
3687 $(QUIET)$(APPEND) $@ $(VBOX_VERSION_STRING)
3688
3689$(VBOX_VERSION_HEADER): $(VBOX_VERSION_STAMP)
3690 $(call MSG_GENERATE,,$@)
3691 $(QUIET)$(MKDIR) -p $(@D)
3692 $(QUIET)$(RM) -f $@ $@.tmp
3693 $(QUIET)$(APPEND) $@.tmp '#ifndef ___version_generated_h___'
3694 $(QUIET)$(APPEND) $@.tmp '#define ___version_generated_h___'
3695 $(QUIET)$(APPEND) $@.tmp ''
3696 $(QUIET)$(APPEND) $@.tmp '#define VBOX_VERSION_MAJOR $(VBOX_VERSION_MAJOR)'
3697 $(QUIET)$(APPEND) $@.tmp '#define VBOX_VERSION_MINOR $(VBOX_VERSION_MINOR)'
3698 $(QUIET)$(APPEND) $@.tmp '#define VBOX_VERSION_BUILD $(VBOX_VERSION_BUILD)'
3699 $(QUIET)$(APPEND) $@.tmp '#define VBOX_VERSION_STRING "$(VBOX_VERSION_STRING)"'
3700 $(QUIET)$(APPEND) $@.tmp ''
3701 $(QUIET)$(APPEND) $@.tmp '#endif'
3702 $(QUIET)$(MV) -f $@.tmp $@
3703
3704
3705VBOX_PACKAGE_HEADER = $(PATH_OUT)/package-generated.h
3706
3707$(VBOX_PACKAGE_HEADER):
3708 $(call MSG_GENERATE,,$@)
3709 $(QUIET)$(MKDIR) -p $(@D)
3710 $(QUIET)$(RM) -f $@ $@.tmp
3711 $(QUIET)$(APPEND) $@.tmp '#ifndef ___package_generated_h___'
3712 $(QUIET)$(APPEND) $@.tmp '#define ___package_generated_h___'
3713 $(QUIET)$(APPEND) $@.tmp ''
3714 $(QUIET)$(APPEND) $@.tmp '#define VBOX_PACKAGE_STRING "$(VBOX_PACKAGE_STRING)"'
3715 $(QUIET)$(APPEND) $@.tmp ''
3716 $(QUIET)$(APPEND) $@.tmp '#endif'
3717 $(QUIET)$(MV) -f $@.tmp $@
3718
3719#
3720# Used for external makefiles which cannot include Config.kmk
3721#
3722$(VBOX_VERSION_MK): $(VBOX_VERSION_STAMP)
3723 $(call MSG_GENERATE,,$@)
3724 $(QUIET)$(RM) -f $@ $@.tmp
3725 $(QUIET)$(MKDIR) -p $(@D)
3726 $(QUIET)$(APPEND) $@.tmp 'VBOX_VERSION_MAJOR = $(VBOX_VERSION_MAJOR)'
3727 $(QUIET)$(APPEND) $@.tmp 'VBOX_VERSION_MINOR = $(VBOX_VERSION_MINOR)'
3728 $(QUIET)$(APPEND) $@.tmp 'VBOX_VERSION_BUILD = $(VBOX_VERSION_BUILD)'
3729 $(QUIET)$(APPEND) $@.tmp 'VBOX_VERSION_STRING = $(VBOX_VERSION_STRING)'
3730 $(QUIET)$(MV) -f $@.tmp $@
3731
3732if !defined(VBOX_OSE) && !defined(VBOX_NOINC_LICENSE_VER_KMK)
3733 if1of ($(KBUILD_TARGET),freebsd linux netbsd openbsd solaris)
3734 # VBOX_LICENSE_VER is used in several Makefiles
3735 VBOX_LICENSE_VER_KMK = $(PATH_OUT)/license-version.kmk
3736$(VBOX_LICENSE_VER_KMK): $(VBOX_BRAND_LICENSE_HTML)
3737 $(call MSG_GENERATE,,$(VBOX_LICENSE_VER_KMK))
3738 $(QUIET)$(MKDIR) -p $(@D)
3739 ifdef VBOX_BRAND_LICENSE_VER
3740 $(QUIET)$(RM) -f '$@'
3741 $(APPEND) '$@' 'VBOX_LICENSE_VER=$(VBOX_BRAND_LICENSE_VER)'
3742 else
3743 $(QUIET)$(SED) -e "s/.*License version \([0-9.]*\) *[,&].*/VBOX_LICENSE_VER=\1/;t;d" --output $@ $(VBOX_BRAND_LICENSE_HTML)
3744 endif
3745 -include $(VBOX_LICENSE_VER_KMK)
3746 VBOX_LICENSE_FILES = \
3747 License-$(VBOX_LICENSE_VER).html \
3748 $(foreach f,$(VBOX_INSTALLER_ADD_LANGUAGES),License-$(VBOX_LICENSE_VER)-$(f).html)
3749 VBOX_LICENSE_BINS = $(addprefix $(PATH_BIN)/,$(VBOX_LICENSE_FILES))
3750 endif
3751endif
3752
3753
3754ifndef VBOX_NOINC_MISC
3755# Force building of the version header file as the first thing anywhere in
3756# the tree. This eliminates the need for manual dependencies on it.
3757## @todo there gotta be a better way of doing this.
3758Makefile.kmk: | $(VBOX_VERSION_HEADER) $(VBOX_VERSION_MK) $(VBOX_PACKAGE_HEADER)
3759endif
3760
3761
3762#
3763# Subversion tree revision.
3764#
3765# The VBOX_SVN_REV contains our best guess. Use svn info on the
3766# root of the treeto determin this it if .svn/entries is found,
3767# otherwise fall back on the Config.kmk revision.
3768#
3769SVN ?= svn$(HOSTSUFF_EXE)
3770VBOX_SVN_REV_KMK = $(PATH_OUT)/revision.kmk
3771ifndef VBOX_SVN_REV
3772 VBOX_SVN_REV_FALLBACK := $(patsubst %:,, $Rev: 19761 $ )
3773 VBOX_SVN_DEP := $(wildcard $(PATH_ROOT)/.svn/entries)
3774 ifeq ($(which $(SVN)),)
3775 VBOX_SVN_DEP :=
3776 endif
3777
3778# Rule for generating a timestamp and updating the real thing on change.
3779$(VBOX_SVN_REV_KMK).ts +| $(VBOX_SVN_REV_KMK): $(if $(VBOX_SVN_DEP), $(VBOX_SVN_DEP), $(PATH_ROOT)/Config.kmk)
3780 $(call MSG_GENERATE,,$(VBOX_SVN_REV_KMK))
3781 $(QUIET)$(RM) -f $@ $@.tmp
3782 $(QUIET)$(MKDIR) -p $(@D)
3783 ifneq ($(VBOX_SVN_DEP),)
3784 $(REDIRECT) -E 'LC_ALL=C' -wo $@.tmp -- $(SVN) info $(PATH_ROOT)
3785 ifeq ($(int-mod $(VBOX_VERSION_BUILD), 2),0)
3786 $(SED) -e '/^Last Changed Rev/!d' -e 's/Last Changed Rev\: */export VBOX_SVN_REV=/' --output $@ $@.tmp
3787 else
3788 $(SED) -e '/^Revision/!d' -e 's/Revision\: */export VBOX_SVN_REV=/' --output $@ $@.tmp
3789 endif
3790 $(QUIET)$(RM) -f $@.tmp
3791 else
3792 $(QUIET)$(APPEND) $@ 'export VBOX_SVN_REV=$(VBOX_SVN_REV_FALLBACK)'
3793 endif
3794 $(QUIET)$(CP) --changed -fv $@ $(VBOX_SVN_REV_KMK)
3795
3796 ifndef VBOX_NOINC_SVN_REV_KMK
3797 include $(VBOX_SVN_REV_KMK)
3798 endif
3799else
3800# allow to overwrite VBOX_SVN_REV externally (mainly for building .debs/.rpms)
3801$(VBOX_SVN_REV_KMK):
3802 $(call MSG_GENERATE,,$(VBOX_SVN_REV_KMK))
3803 $(QUIET)$(RM) -f $@
3804 $(QUIET)$(MKDIR) -p $(@D)
3805 $(QUIET)$(APPEND) $@ 'export VBOX_SVN_REV=$(VBOX_SVN_REV)'
3806 $(QUIET)echo '* $(VBOX_SVN_REV_KMK) was externally overwritten:'
3807 $(QUIET)$(CAT) $(VBOX_SVN_REV_KMK)
3808endif
3809
3810#
3811# Shared definitions of the XIDL file to use as a source for
3812# generating various other files (VBoxSVC, webservice, docs, front-ends, ...)
3813#
3814
3815# Real XIDL source file; from this we strip the <desc> elements to generate
3816# a second XIDL file, from which the COM/XPCOM IDL files are then generated:
3817VBOX_XIDL_FILE_SRC = $(PATH_ROOT)/src/VBox/Main/idl/VirtualBox.xidl
3818# second XIDL file to use as source for COM/XPCOM IDL (with stripped docs):
3819VBOX_XIDL_FILE = $(PATH_OUT)/obj/VirtualBox_stripped.xidl
3820
3821
3822#
3823# Legacy.
3824#
3825## @todo try remove this.
3826ifneq ($(LOCALCFG),)
3827 include $(LOCALCFG)
3828endif
3829
3830
3831#
3832# Some extra goals.
3833#
3834.PHONY: up update st stat status
3835up update::
3836 $(SVN) up
3837
3838up2 update2::
3839 $(SVN) up --ignore-externals
3840
3841st stat status:
3842 $(SVN) status
3843
3844quick:
3845 $(MAKE) VBOX_QUICK=1
3846
Note: See TracBrowser for help on using the repository browser.

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