VirtualBox

source: vbox/trunk/Config.kmk@ 9594

Last change on this file since 9594 was 9573, checked in by vboxsync, 16 years ago

Changed the VBOXGUESTR3 template to link statically on windows. (an attemp at it anyway)

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id Revision
File size: 121.4 KB
Line 
1# $Id: Config.kmk 9573 2008-06-10 15:18:55Z 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#
22# kBuild stuff
23#
24
25# Enable automatic installation of what's built.
26KBUILD_DO_AUTO_INSTALL := 1
27PASSES := $(filter-out PACKING,$(PASSES)) PACKING # temporary hack
28# Modify the order of the INSTALLS and OTHERS passes.
29DEFAULT_PASSES := BLDPROGS LIBRARIES DLLS BINARIES INSTALLS OTHERS
30# Modify the build types.
31## @todo checked and dbgopt
32KBUILD_BLD_TYPES = release profile debug kprofile
33
34# Install paths.
35PATH_INS := $(PATH_OUT)
36ifeq ($(KBUILD_TARGET),darwin)
37 INST_DIST = dist/
38 INST_SDK = $(INST_DIST)sdk/
39 INST_SDK_SAMPLES = $(INST_SDK)samples
40
41 # the bundles
42 INST_VIRTUALBOX = $(INST_DIST)VirtualBox.app/
43 INST_VBOXDRV = $(INST_DIST)VBoxDrv.kext/
44 INST_VBOXTAP = $(INST_DIST)VBoxTAP.kext/
45 INST_VBOXUSB = $(INST_DIST)VBoxUSB.kext/
46
47 # put everything in the VirtualBox app bundle.
48 INST_BIN = $(INST_VIRTUALBOX)Contents/MacOS/
49 INST_DLL = $(INST_BIN)
50 INST_SYS = $(INST_BIN)
51 INST_TESTCASE = $(INST_BIN)testcase/
52 INST_ADDITIONS = $(INST_BIN)additions/
53
54 # other paths
55 INST_TESTSUITE = testsuite/
56 INST_LIB = lib/
57 INST_ADDITIONS_LIB = $(PATH_LIB)/additions/
58
59else
60
61 INST_BIN = bin/
62 INST_DIST = $(INST_BIN)
63 INST_DLL = $(INST_BIN)
64 INST_SDK = $(INST_BIN)sdk/
65 INST_SDK_SAMPLES = $(INST_SDK)samples
66 INST_DLL = $(INST_BIN)
67 INST_SYS = $(INST_BIN)
68 INST_TESTCASE = $(INST_BIN)testcase/
69 INST_ADDITIONS = $(INST_BIN)additions/
70
71 INST_TESTSUITE = testsuite/
72 INST_LIB = lib/
73 INST_ADDITIONS_LIB = $(INST_LIB)additions/
74endif
75
76PATH_BIN = $(patsubst %/,%,$(PATH_INS)/$(INST_BIN))
77PATH_DLL = $(patsubst %/,%,$(PATH_INS)/$(INST_DLL))
78PATH_SYS = $(patsubst %/,%,$(PATH_INS)/$(INST_SYS))
79PATH_LIB = $(patsubst %/,%,$(PATH_INS)/$(INST_LIB))
80PATH_DOC = $(PATH_OUT)/doc
81VBOX_PATH_SDK = $(patsubst %/,%,$(PATH_INS)/$(INST_SDK))
82VBOX_PATH_DIST = $(patsubst %/,%,$(PATH_INS)/$(INST_DIST))
83VBOX_PATH_TESTSUITE = $(patsubst %/,%,$(PATH_INS)/$(INST_TESTSUITE))
84VBOX_PATH_ADDITIONS = $(patsubst %/,%,$(PATH_INS)/$(INST_ADDITIONS))
85VBOX_PATH_ADDITIONS_LIB = $(patsubst %/,%,$(PATH_INS)/$(INST_ADDITIONS_LIB))
86
87
88# Delete targets on failure.
89.DELETE_ON_ERROR:
90
91# Notify about important kBuild updates.
92ifneq ($(call int-ge,$(KMK_REVISION),1562),1)
93 $(error You must update kBuild! KMK_REVISION=$(KMK_REVISION) KBUILD_PATH=$(KBUILD_PATH))
94endif
95
96#
97# Define USERNAME early on.
98#
99ifndef USERNAME
100 ifdef USER
101 USERNAME = $(USER)
102 else
103 $(warning Warning: You must have USERNAME or USER in your environment.)
104 endif
105endif
106
107#
108# The VirtualBox version.
109#
110
111# Major version.
112VBOX_VERSION_MAJOR = 1
113# Minor version.
114VBOX_VERSION_MINOR = 6
115# This is the current build number. It should be increased every time we publish a
116# new build. The define is available in every source file. Only even build numbers
117# will be published, odd numbers are set during development.
118# When doing a release also 'export VBOX_ADDITIONS_SH_MODE = release' here to
119# force an exact match of the additions build and the application builds.
120VBOX_VERSION_BUILD = 51
121# Full version string (may include more than just x.y.z, but no spaces or other problematic chars).
122VBOX_VERSION_STRING = $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)
123
124
125#
126# The VirtualBox Configuration Defaults.
127#
128# We try to document all the build configuration options here, thing which
129# aren't enabled by default is left commented out just to show that they
130# exist and which value they should have (usually 1, but anyway).
131#
132
133# This indicates that additions (of some kind or another) is being _built_.
134# VBOX_WITHOUT_ADDITIONS overrides it.
135if1of ($(KBUILD_TARGET),l4 linux os2 solaris win)
136 VBOX_WITH_ADDITIONS = 1
137else ifdef VBOX_WITH_WIN32_ADDITIONS # for ssh cross builds -remove later!
138 VBOX_WITH_ADDITIONS = 1
139else ifdef VBOX_WITH_LINUX_ADDITIONS # for ssh cross builds - remove later!
140 VBOX_WITH_ADDITIONS = 1
141endif
142# Build the optional ring-0 part of the additions for syntax checking.
143# (Ignored ifndef VBOX_WITH_ADDITIONS. Hack for 32/64 linux issues.)
144VBOX_WITH_ADDITION_DRIVERS = 1
145# Build win32 additions (cross building them on linux and l4 using wine).
146if1of ($(KBUILD_TARGET),l4 linux win)
147 VBOX_WITH_WIN32_ADDITIONS = 1
148endif
149# Build linux additions.
150# Note! VBOX_WITH_LINUX_ADDITIONS will be removed later and only
151# VBOX_WITH_WIN32_ADDITIONS will be kept around for cross building.
152if1of ($(KBUILD_TARGET),l4 linux)
153 VBOX_WITH_LINUX_ADDITIONS = 1
154endif
155# Build X11 additions. Can be disabled separately.
156ifndef VBOX_WITH_X11_ADDITIONS
157 ifdef VBOX_WITH_LINUX_ADDITIONS
158 VBOX_WITH_X11_ADDITIONS = 1
159 endif
160 if1of ($(KBUILD_TARGET), solaris)
161 VBOX_WITH_X11_ADDITIONS = 1
162 endif
163endif
164# Enable the building of shared folders in the windows additions.
165VBOX_WITH_WIN32_ADDITIONS_SHAREDFOLDERS = 1
166# Take the binaries of the OS/2 Additions.
167VBOX_WITH_OS2_ADDITIONS_BIN = 1
168# Use additions from the build server.
169#VBOX_WITH_ADDITIONS_FROM_BUILD_SERVER = 1
170# Don't bother with additions, overrides VBOX_WITH_ADDITIONS.
171# This is not used by makefiles, only Config.kmk, see below.
172#VBOX_WITHOUT_ADDITIONS = 1
173# Only build the additions (for the additions build server).
174#VBOX_ONLY_ADDITIONS = 1
175ifdef VBOX_ADDITIONS_ONLY # typical mistake.
176 $(error It is VBOX_ONLY_ADDITIONS=1 not VBOX_ADDITIONS_ONLY!)
177endif
178# Don't create the additions ISO.
179# (Used by the additions build server, don't invert it.)
180#VBOX_WITHOUT_ADDITIONS_ISO = 1
181
182# build the installer
183VBOX_WITH_INSTALLER = 1
184# enable VRDP server
185VBOX_WITH_VRDP = 1
186# build VRDP authentication modules
187VBOX_WITH_VRDP_AUTHMOD = 1
188# build enhanced version of rdesktop
189VBOX_WITH_VRDP_RDESKTOP = 1
190if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), win.x86 l4.x86 l4.amd64)
191# build the support driver & library with IDT patching.
192VBOX_WITH_IDT_PATCHING = 1
193endif
194# Activate this to force the VM to pre-allocate the guest RAM before startup
195VBOX_WITH_PREALLOC_RAM_BY_DEFAULT =
196# The kernel driver/module and related runtime libraries.
197VBOX_WITH_VBOXDRV = 1
198# build with secure label support
199ifeq ($(filter win.amd64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),) # too much work with freetype and all that.
200VBOX_WITH_SECURELABEL = 1
201endif
202
203# The main api.
204VBOX_WITH_MAIN = 1
205# The webservices api.
206VBOX_WITH_WEBSERVICES = 1
207# The SDL based GUI.
208VBOX_WITH_VBOXSDL = 1
209# The basic frontend (w/o Main).
210VBOX_WITH_VBOXBFE = 1
211# The Qt GUI.
212VBOX_WITH_QTGUI = 1
213# The Qt 4 GUI (experimental).
214#VBOX_WITH_QT4GUI = 1
215# The headless frontend.
216VBOX_WITH_HEADLESS = 1
217## the Direct Framebuffer GUI
218#VBOX_WITH_VBOXFB = 1
219# Enable the debugger.
220ifneq ($(KBUILD_TYPE),release)
221 VBOX_WITH_DEBUGGER = 1
222 # Enable the debugger GUI.
223 VBOX_WITH_DEBUGGER_GUI = 1
224endif
225# the documentation
226VBOX_WITH_DOCS = 1
227# build the Host Guest Communication Manager component
228VBOX_WITH_HGCM = 1
229# Enable the USB feature.
230VBOX_WITH_USB = 1
231# Enable the USB 2.0 controller
232VBOX_WITH_EHCI = 1
233# Enable the ISCSI feature.
234VBOX_WITH_ISCSI = 1
235# Enable the E1000 feature
236VBOX_WITH_E1000 = 1
237# Enable ALSA support for Linux
238VBOX_WITH_ALSA = 1
239# Enable Pulse support for Linux
240VBOX_WITH_PULSE = 1
241# Disable WINMM support for Windows (not implemented)
242VBOX_WITH_WINMM =
243# Enable the kchmviewer
244VBOX_WITH_KCHMVIEWER = 1
245# Build the testsuite.
246VBOX_WITH_TESTSUITE = 1
247# Build the testcases.
248VBOX_WITH_TESTCASES = 1
249# Set this to not use COM or XPCOM in places where it can be avoided.
250#VBOX_WITHOUT_COM = 1
251# Set this to skip installing the redistributable compiler runtime.
252#VBOX_WITHOUT_COMPILER_REDIST = 1
253# Enabled internal networking.
254VBOX_WITH_INTERNAL_NETWORKING = 1
255# Enables the ffmpeg module for recording test runs.
256# Enable this for non-Linux builds later.
257ifeq ($(KBUILD_TARGET),linux)
258# VBOX_WITH_FFMPEG = 1
259endif
260# Enable OpenGL service
261VBOX_WITH_OGL = 1
262# Enable shared folders
263VBOX_WITH_SHARED_FOLDERS = 1
264# Enable shared clipboard
265VBOX_WITH_SHARED_CLIPBOARD = 1
266# Enable the Intel PXE ROM (replaces Etherboot).
267VBOX_WITH_INTEL_PXE = 1
268# Strip binaries of release and profile builds
269VBOX_DO_STRIP = $(if $(filter release profile,$(KBUILD_TYPE)),1,)
270# Strip R0/GC modules (current requirement for our loader)
271VBOX_DO_STRIP_MODULES = 1
272# Use kStuff for MACH-O and LX binary loading.
273if1of ($(KBUILD_TARGET),darwin os2)
274IPRT_WITH_KSTUFF = 1
275endif
276# Enable Crossbow support for Solaris.
277VBOX_WITH_CROSSBOW = 1
278# Enable setuid wrapper for Solaris.
279#VBOX_WITH_SUID_WRAPPER = 1
280# Enable the PDM Lock and let I/O threads call into the PICs.
281VBOX_WITH_PDM_LOCK = 1
282# Enable Seamless mode
283VBOX_X11_SEAMLESS_GUEST = 1
284# Enable the virtual SATA/AHCI controller
285VBOX_WITH_AHCI = 1
286# Enable the new async completion manager
287VBOX_WITH_PDM_ASYNC_COMPLETION = 1
288# Enable use of the $ORIGIN rpath feature. This is the default on
289# Solaris, but not else where for various reasons (ld.so, dist builds).
290ifeq ($(KBUILD_TARGET),solaris)
291 VBOX_WITH_ORIGIN = 1
292endif
293# Temporary switch for enabling / disabling the new USB code on Darwin.
294VBOX_WITH_NEW_USB_CODE_ON_DARWIN=1
295# Use the new VBI module on Solaris.
296VBOX_WITH_SOLARIS_VBI = 1
297# Enable 64 bits guest pointers.
298if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), linux.amd64 solaris.amd64 win.amd64)
299VBOX_WITH_64_BITS_GUESTS = 1
300else
301# VBOX_WITH_64_BITS_GUESTS = 1
302endif
303# Enable building 64-bit additions (actually KBUILD_TARGET_ARCH decides).
304ifeq ($(USERNAME),bird) # precaution
305VBOX_WITH_64BIT_ADDITIONS = 1
306endif
307
308#
309# Skip stuff.
310#
311
312# VBOX_QUICK can be used by core developers to speed to the build
313ifdef VBOX_QUICK
314 # undefine variables by assigning blank.
315 VBOX_WITH_TESTSUITE=
316 VBOX_WITH_TESTCASES=
317 VBOX_WITH_MAIN =
318 VBOX_WITH_VBOXSDL =
319 VBOX_WITH_VBOXBFE =
320 VBOX_WITH_QTGUI =
321 VBOX_WITH_DEBUGGER_GUI =
322 VBOX_WITH_DOCS =
323endif # VBOX_QUICK
324
325# l4 have to skip a few things.
326ifeq ($(KBUILD_TARGET),l4)
327 VBOX_WITH_VBOXDRV=
328 VBOX_WITH_ADDITION_DRIVERS=
329 VBOX_WITH_VRDP=
330 VBOX_WITH_HEADLESS=
331 VBOX_WITH_VBOXSDL=
332 VBOX_WITH_QTGUI=
333 VBOX_WITH_MAIN=
334 VBOX_WITH_DOCS=
335 VBOX_WITH_ISCSI=
336 VBOX_WITH_INTERNAL_NETWORKING=
337 VBOX_WITH_PDM_ASYNC_COMPLETION=
338endif
339
340# Darwin have to skip a few things at present.
341ifeq ($(KBUILD_TARGET),darwin)
342 # Internal networking requires testing and possibly proper ring-3/ring0 separation.
343 VBOX_WITH_INTERNAL_NETWORKING=
344 # Don't bother with SDL ttf for now.
345 VBOX_WITH_SECURELABEL=
346 # Later:
347 VBOX_WITH_VRDP_AUTHMOD=
348 VBOX_WITH_VRDP_RDESKTOP=
349 VBOX_WITH_PDM_ASYNC_COMPLETION=
350endif
351
352# Most stuff doesn't build yet on the new targets.
353ifeq ($(KBUILD_TARGET),os2)
354 VBOX_WITH_INSTALLER=
355 VBOX_WITH_SECURELABEL=
356 VBOX_WITH_VRDP_AUTHMOD=
357 VBOX_WITH_VRDP_RDESKTOP=
358 VBOX_WITH_TESTSUITE=
359 VBOX_WITH_USB=
360 VBOX_WITH_EHCI=
361 VBOX_WITH_DOCS=
362 VBOX_WITH_PDM_ASYNC_COMPLETION=
363endif
364
365ifeq ($(KBUILD_TARGET),solaris)
366 VBOX_WITH_SECURELABEL=
367 VBOX_WITH_VRDP_AUTHMOD=
368 VBOX_WITH_VRDP_RDESKTOP=
369 VBOX_WITH_OGL=
370endif
371
372ifeq ($(KBUILD_TARGET),freebsd)
373 VBOX_WITH_INSTALLER=
374 VBOX_WITH_SECURELABEL=
375 VBOX_WITH_VRDP_AUTHMOD=
376 VBOX_WITH_VRDP_RDESKTOP=
377 VBOX_WITH_TESTSUITE=
378 VBOX_WITH_USB=
379 VBOX_WITH_EHCI=
380 VBOX_WITH_DOCS=
381endif
382
383
384#
385# Include automatic and local config file to override the above settings
386# and to provide defaults for the settings below this point.
387#
388AUTOCFG := $(wildcard $(PATH_ROOT)/AutoConfig.kmk)
389ifeq ($(AUTOCFG),)
390 # deprecated name. to be removed.
391 AUTOCFG := $(wildcard $(PATH_ROOT)/Config.kmkconf)
392 ifneq ($(AUTOCFG),)
393 $(warning Config.kmkconf has been renamed. Please re-run configure.)
394 endif
395endif
396ifneq ($(AUTOCFG),)
397 include $(AUTOCFG)
398endif
399
400LOCALCFG := $(wildcard $(PATH_ROOT)/LocalConfig.kmk)
401ifeq ($(LOCALCFG),)
402 # deprecated name. to be removed.
403 LOCALCFG := $(wildcard $(PATH_ROOT)/Config.kmklocal)
404 ifneq ($(LOCALCFG),)
405 $(warning Please rename your Config.kmklocal to LocalConfig.kmk.)
406 endif
407endif
408ifneq ($(LOCALCFG),)
409 include $(LOCALCFG)
410endif
411
412
413#
414# Disable components that are not open sourced.
415#
416ifdef VBOX_OSE
417 VBOX_WITH_WEBSERVICES=
418 VBOX_WITH_VRDP=
419 VBOX_WITH_USB=
420 VBOX_WITH_EHCI=
421 VBOX_WITH_ISCSI=
422 VBOX_WITH_E1000=
423 VBOX_WITH_DEBUGGER_GUI=
424 VBOX_WITH_WIN32_ADDITIONS_SHAREDFOLDERS=
425 VBOX_WITHOUT_ADDITIONS_ISO=1
426 VBOX_WITH_OS2_ADDITIONS_BIN=
427 VBOX_WITH_SECURELABEL=
428 VBOX_WITH_KCHMVIEWER=
429 VBOX_WITH_DOCS=
430 VBOX_WITH_TESTSUITE=
431 VBOX_WITH_INTEL_PXE=
432 ifeq ($(KBUILD_TARGET),darwin)
433 # Qt/Mac v3.3.x requires patching to work for us.
434 VBOX_WITH_QTGUI=
435 endif
436 ifn1of ($(KBUILD_TARGET),linux solaris)
437 # Only the Linux, Solaris installers are public
438 VBOX_WITH_INSTALLER=
439 endif
440 VBOX_WITH_AHCI=
441 VBOX_WITH_PDM_ASYNC_COMPLETION=
442endif
443
444#
445# Sanitize the additions build config variables.
446#
447ifdef VBOX_WITH_ADDITIONS_FROM_BUILD_SERVER
448 VBOX_WITHOUT_ADDITIONS := 1
449 ifdef VBOX_ONLY_ADDITIONS
450 $(error VBOX_ONLY_ADDITIONS + VBOX_WITH_ADDITIONS_FROM_BUILD_SERVER does not add up!)
451 endif
452endif
453
454ifdef VBOX_ONLY_ADDITIONS
455 ifdef VBOX_WITHOUT_ADDITIONS
456 $(error VBOX_ONLY_ADDITIONS + VBOX_WITHOUT_ADDITIONS does not add up!)
457 endif
458endif
459
460ifdef VBOX_WITHOUT_ADDITIONS
461 # Zap anything that could be contradicting this.
462 VBOX_WITH_ADDITIONS :=
463 VBOX_WITH_WIN32_ADDITIONS :=
464 VBOX_WITH_LINUX_ADDITIONS :=
465endif
466
467#
468# Disable components for headless
469#
470ifdef VBOX_HEADLESS
471 VBOX_WITH_QTGUI=
472 VBOX_WITH_VBOXSDL=
473 VBOX_WITH_VBOXBFE=
474 VBOX_WITH_OGL=
475 VBOX_WITH_KCHMVIEWER=
476endif
477
478#
479# Undefined VBOX_WITH_MAIN implies exclusion of a few more items.
480#
481ifndef VBOX_WITH_MAIN
482 VBOX_WITH_VRDP=
483 VBOX_WITH_VBOXSDL=
484 VBOX_WITH_QTGUI=
485 VBOX_WITH_DEBUGGER_GUI=
486 VBOX_WITH_HEADLESS=
487endif
488
489#
490# Mark OSE builds clearly, helps figuring out limitations more easily.
491#
492ifdef VBOX_OSE
493VBOX_VERSION_STRING = $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD)_OSE
494endif
495
496
497#
498# Image and object format config.
499#
500if1of ($(KBUILD_TARGET), linux l4 freebsd netbsd openbsd solaris)
501 VBOX_LDR_FMT = elf
502endif
503ifeq ($(KBUILD_TARGET),darwin)
504 VBOX_LDR_FMT = macho
505endif
506ifeq ($(KBUILD_TARGET),os2)
507 VBOX_LDR_FMT = lx
508 VBOX_LDR_FMT32 = lx
509 VBOX_LDR_FMT64 = elf
510 DONT_USE_YASM = 1 # yasm doesn't implement omf yet.
511endif
512ifeq ($(KBUILD_TARGET),win)
513 VBOX_LDR_FMT = pe
514endif
515VBOX_LDR_FMT32 ?= $(VBOX_LDR_FMT)
516VBOX_LDR_FMT64 ?= $(VBOX_LDR_FMT)
517
518#
519# Assembler setup.
520#
521# This is a bit complicated since we have to support two different assmblers
522# (yasm/nasm) and possibly two different formats (32-bit/64-bit).
523#
524ifeq ($(VBOX_LDR_FMT),elf)
525 ifeq ($(KBUILD_TARGET_ARCH),x86)
526VBOX_ASFLAGS_FMT = -f elf32 -DASM_FORMAT_ELF
527 else
528VBOX_ASFLAGS_FMT = -f elf64 -DASM_FORMAT_ELF
529 endif
530 VBOX_ASFLAGS_DBFINFO = -g dwarf2
531endif
532ifeq ($(VBOX_LDR_FMT),lx)
533 VBOX_ASFLAGS_FMT = -f obj -DASM_FORMAT_OMF
534 VBOX_ASFLAGS_DBFINFO = -g stabs
535endif
536ifeq ($(VBOX_LDR_FMT),macho)
537 VBOX_ASFLAGS_FMT = -f macho -DASM_FORMAT_MACHO
538 VBOX_ASFLAGS_DBFINFO = -g dwarf2
539endif
540ifeq ($(VBOX_LDR_FMT),pe)
541 ifeq ($(KBUILD_TARGET_ARCH),x86)
542VBOX_ASFLAGS_FMT = -f win32 -DASM_FORMAT_PE
543 else
544VBOX_ASFLAGS_FMT = -f win64 -DASM_FORMAT_PE
545 endif
546VBOX_ASFLAGS_DBFINFO = -g cv8
547endif
548ifndef VBOX_ASFLAGS_FMT
549 $(error VBOX_ASFLAGS_FMT is not defined. VBOX_LDR_FMT=$(VBOX_LDR_FMT))
550endif
551
552ifeq ($(VBOX_LDR_FMT32),elf)
553 VBOX_ASFLAGS_FMT32 = -f elf32 -DASM_FORMAT_ELF
554 VBOX_ASFLAGS_DBFINFO32 = -g dwarf2
555endif
556ifeq ($(VBOX_LDR_FMT32),lx)
557 VBOX_ASFLAGS_FMT32 = -f obj -DASM_FORMAT_OMF
558 VBOX_ASFLAGS_DBFINFO32 = -g stabs
559endif
560ifeq ($(VBOX_LDR_FMT32),macho)
561 VBOX_ASFLAGS_FMT32 = -f macho -DASM_FORMAT_MACHO
562 VBOX_ASFLAGS_DBFINFO32 = -g dwarf2
563endif
564ifeq ($(VBOX_LDR_FMT32),pe)
565 VBOX_ASFLAGS_FMT32 = -f win32 -DASM_FORMAT_PE
566 VBOX_ASFLAGS_DBFINFO32 = -g cv8
567endif
568ifndef VBOX_ASFLAGS_FMT32
569 $(error VBOX_ASFLAGS_FMT32 is not defined. VBOX_LDR_FMT32=$(VBOX_LDR_FMT32))
570endif
571
572ifeq ($(VBOX_LDR_FMT64),elf)
573 VBOX_ASFLAGS_FMT64 = -f elf64 -DASM_FORMAT_ELF
574 VBOX_ASFLAGS_DBFINFO64 = -g dwarf2
575endif
576ifeq ($(VBOX_LDR_FMT64),macho)
577 VBOX_ASFLAGS_FMT64 = -f macho64 -DASM_FORMAT_MACHO
578 VBOX_ASFLAGS_DBFINFO64 = -g dwarf2
579endif
580ifeq ($(VBOX_LDR_FMT64),pe)
581 VBOX_ASFLAGS_FMT64 = -f win64 -DASM_FORMAT_PE
582 VBOX_ASFLAGS_DBFINFO64 = -g cv8
583endif
584ifndef VBOX_ASFLAGS_FMT64
585 $(error VBOX_ASFLAGS_FMT64 is not defined. VBOX_LDR_FMT64=$(VBOX_LDR_FMT64))
586endif
587
588ifndef DONT_USE_YASM
589 VBOX_ASTOOL = YASM
590 VBOX_LDR_FMT_2_YASM_DBGINFO.elf = -g dwarf2
591 VBOX_LDR_FMT_2_YASM_DBGINFO.lx = -g stabs
592 VBOX_LDR_FMT_2_YASM_DBGINFO.macho =
593 VBOX_LDR_FMT_2_YASM_DBGINFO.pe = -g cv8
594 VBOX_ASFLAGS = $(VBOX_ASFLAGS_FMT) -D__YASM__ -Worphan-labels $(VBOX_LDR_FMT_2_YASM_DBGINFO.$(VBOX_LDR_FMT))
595 VBOX_ASFLAGS32 = $(VBOX_ASFLAGS_FMT32) -D__YASM__ -Worphan-labels $(VBOX_LDR_FMT_2_YASM_DBGINFO.$(VBOX_LDR_FMT32))
596 VBOX_ASFLAGS64 = $(VBOX_ASFLAGS_FMT64) -D__YASM__ -Worphan-labels $(VBOX_LDR_FMT_2_YASM_DBGINFO.$(VBOX_LDR_FMT64))
597else
598 VBOX_ASTOOL = NASM
599 VBOX_ASFLAGS = $(subst elf32,elf,$(VBOX_ASFLAGS_FMT)) -D__NASM__ -w+orphan-labels -g
600 VBOX_ASFLAGS32 = $(subst elf32,elf,$(VBOX_ASFLAGS_FMT32)) -D__NASM__ -w+orphan-labels -g
601 VBOX_ASFLAGS64 = $(VBOX_ASFLAGS_FMT64) -D__NASM__ -w+orphan-labels -g
602endif
603
604#
605# Windows only has mingw handy. On *nix we have to deal with cross compiling
606# 32-bit targets on 64-bit platforms, meaning we'll be using gcc32/g++32.
607# In the latter case we'll also have to disable all the all the R0 driver related stuff.
608#
609ifndef VBOX_GCC_TOOL
610 ifeq ($(KBUILD_TARGET),win)
611 VBOX_GCC_TOOL := MINGW32
612 TOOL_MINGW32_CFLAGS := $(UNDEFINED) # override -g
613 else ifeq ($(KBUILD_TARGET),os2)
614 VBOX_GCC_TOOL := GXX3OMF
615 else ifeq ($(KBUILD_TARGET),darwin)
616 VBOX_GCC_TOOL := GXX4MACHO
617 else ifeq ($(KBUILD_TARGET),solaris)
618 VBOX_GCC_TOOL := GXX3PLAIN
619 VBOX_GCC32_TOOL := GXX3PLAIN
620 else
621 VBOX_GCC_TOOL := GXX3
622 ifeq ($(KBUILD_TARGET_ARCH).$(KBUILD_HOST_ARCH),x86.amd64) ## @todo mixing target/host here!
623 VBOX_GCC_TOOL := GXX32
624 VBOX_WITH_VBOXDRV=
625 VBOX_WITH_LINUX_ADDITIONS=
626 VBOX_WITH_WIN32_ADDITIONS=
627 else ifeq ($(KBUILD_TARGET_ARCH).$(KBUILD_HOST_ARCH),amd64.x86)
628 VBOX_GCC_TOOL := GXX64
629 VBOX_WITH_VBOXDRV=
630 VBOX_WITH_LINUX_ADDITIONS=
631 VBOX_WITH_WIN32_ADDITIONS=
632 endif
633 endif
634endif
635ifndef VBOX_GCC32_TOOL
636 ifeq ($(KBUILD_TARGET_ARCH),x86)
637 VBOX_GCC32_TOOL := $(VBOX_GCC_TOOL)
638 else ifeq ($(KBUILD_TARGET),win)
639 VBOX_GCC32_TOOL := MINGW32
640 else
641 VBOX_GCC32_TOOL := GXX32
642 endif
643endif
644
645#
646# Decide which Visual C++ compiler version we're using by default.
647#
648ifndef VBOX_VCC_TOOL
649 ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),win.amd64)
650 VBOX_USE_VCC80 ?= 1 # Enforce VCC80 when targetting AMD64.
651 endif
652 ifdef VBOX_USE_VCC80
653 ifeq ($(KBUILD_TARGET_ARCH),x86)
654 VBOX_VCC_TOOL := VCC80X86
655 else
656 VBOX_VCC_TOOL := VCC80AMD64
657 endif
658 else
659 VBOX_VCC_TOOL := VCC70
660 endif
661endif
662
663#
664# The kBuild tools and SDKs are using PATH_DEVTOOLS, PATH_DEVTOOLS_BLD
665# and PATH_DEVTOOLS_TRG to find things if we give them specific locations.
666#
667PATH_DEVTOOLS ?= $(PATH_ROOT)/tools
668PATH_DEVTOOLS := $(abspath $(PATH_DEVTOOLS))
669PATH_DEVTOOLS_BLD ?= $(PATH_DEVTOOLS)/$(KBUILD_HOST).$(KBUILD_HOST_ARCH)
670PATH_DEVTOOLS_TRG ?= $(PATH_DEVTOOLS)/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)
671
672## @todo Remove the default tool crap here!
673TOOL = $(VBOX_GCC_TOOL)
674ifdef VBOX_USE_VCC80
675 TOOL.win.x86 = VCC80X86
676 TOOL.win.amd64 = VCC80AMD64
677else
678 TOOL.win = VCC70
679endif
680ASTOOL = $(VBOX_ASTOOL)
681
682#
683# L4-specific settings.
684#
685ifdef L4_DIR
686 ifeq ($(KBUILD_TARGET),l4)
687 L4_API ?= l4v2
688 L4_ARCH ?= $(KBUILD_TARGET_ARCH)
689 ifeq ($(L4_ARCH),x86)
690 L4_CPU ?= 586
691 L4LINUX26_INCDIR := $(L4LINUX26_DIR)/include \
692 $(L4LINUX26_DIR)/include/asm-l4/i386-arch
693 else ifeq ($(L4_ARCH),amd64)
694 L4_CPU ?= k8
695 L4LINUX26_INCDIR := $(L4LINUX26_DIR)/include
696 # no red zone for L4 because of IPC bindings
697 CFLAGS.l4 = -mno-red-zone
698 CXXFLAGS.l4 = -mno-red-zone
699 else
700 $(error L4_ARCH=$(L4_ARCH))
701 endif
702 L4_OBJ := $(L4_DIR)/build-$(L4_ARCH)-$(L4_CPU)-$(L4_API)
703 # support splitted Linux kernels (make O=<build directory>)
704 kernelsrc := $(shell $(SED_EXT) -ne 's+^KERNELSRC.*= *\(.*\)+\1+p' $(L4LINUX26_DIR)/Makefile)
705 ifneq ($(kernelsrc),)
706 kernelpath := $(realpath $(kernelsrc))
707 L4LINUX26_INCDIR += $(L4LINUX26_DIR)/include2 $(kernelpath)/include
708 endif
709 L4_INCDIR := \
710 $(L4_OBJ)/include/uclibc++ \
711 $(L4_OBJ)/include/$(L4_ARCH)/uclibc \
712 $(L4_OBJ)/include/uclibc \
713 $(L4LINUX26_INCDIR) \
714 $(L4_OBJ)/include/$(L4_ARCH)/$(L4_API) \
715 $(L4_OBJ)/include/$(L4_API) \
716 $(L4_OBJ)/include/$(L4_ARCH) \
717 $(L4_OBJ)/include \
718 $(L4_DIR)/tool/dice/include
719 L4_LIBDIR := \
720 $(L4_DIR)/build-$(L4_ARCH)-$(L4_CPU)-$(L4_API)/lib/$(L4_ARCH)_$(L4_CPU)/$(L4_API)
721 endif # KBUILD_TARGET == l4
722endif # L4_DIR
723
724# Produce debugging information that the Fiasco kernel debugger can read.
725ifeq ($(KBUILD_TARGET).$(KBUILD_TYPE),l4.debug)
726 DEBUG_L4 = -gstabs+
727endif
728
729#
730# Setup the global defines and includes.
731#
732# Note! The __SOMETHING__ #defines are deprecated as they violate the C/C++ specs.
733#
734INCS += $(PATH_ROOT)/include $(PATH_OUT)
735DEFS += VBOX
736DEFS.debug := DEBUG DEBUG_$(subst $(subst _, ,_),_,$(USERNAME)) DEBUG_USERNAME=$(subst $(subst _, ,_),_,$(USERNAME))
737DEFS.profile = VBOX_WITH_STATISTICS
738DEFS.x86 = RT_ARCH_X86 __X86__
739DEFS.amd64 = RT_ARCH_AMD64 __AMD64__
740DEFS.darwin = RT_OS_DARWIN __DARWIN__
741DEFS.darwin.x86 = VBOX_WITH_HYBIRD_32BIT_KERNEL
742DEFS.freebsd = RT_OS_FREEBSD __FREEBSD__
743DEFS.l4 = RT_OS_L4 __L4__ __L4ENV__ L4API_l4v2 ARCH_$(KBUILD_TARGET_ARCH) __NO_CTYPE _FILE_OFFSET_BITS=64
744DEFS.linux = RT_OS_LINUX _FILE_OFFSET_BITS=64
745DEFS.netbsd = RT_OS_NETBSD
746DEFS.openbsd = RT_OS_OPENBSD
747DEFS.os2 = RT_OS_OS2 __OS2__
748DEFS.solaris = RT_OS_SOLARIS _FILE_OFFSET_BITS=64
749DEFS.win = RT_OS_WINDOWS __WIN__
750DEFS.win.x86 = __WIN32__
751DEFS.win.amd64 = __WIN64__
752# optional defines (use environment or make commandline)
753ifdef VBOX_WITH_DEBUGGER
754 DEFS += VBOX_WITH_DEBUGGER
755endif
756ifdef VBOX_WITH_DEBUGGER_GUI
757 DEFS += VBOX_WITH_DEBUGGER_GUI
758endif
759ifdef VBOX_WITH_STATISTICS
760 DEFS += VBOX_WITH_STATISTICS
761endif
762ifdef VBOX_STRICT
763 DEFS += VBOX_STRICT
764endif
765ifdef LOG_ENABLED
766 DEFS += LOG_ENABLED
767endif
768ifdef VBOX_OSE
769 DEFS += VBOX_OSE
770endif
771ifdef VBOX_WITH_NEW_PHYS_CODE
772 DEFS += VBOX_WITH_NEW_PHYS_CODE
773endif
774ifdef VBOX_WITH_64_BITS_GUESTS
775 DEFS += VBOX_WITH_64_BITS_GUESTS
776endif
777
778#
779# Compiler optimization flags.
780#
781ifeq ($(KBUILD_TYPE),debug)
782 VBOX_GCC_FP ?= -fno-omit-frame-pointer
783 VBOX_GCC_OPT ?= -O0
784 VBOX_VCC_FP ?= -Oy-
785 VBOX_VCC_OPT ?=
786 VBOX_GCC_GC_FP ?= -fno-omit-frame-pointer
787 VBOX_GCC_GC_OPT ?= -O0
788 VBOX_VCC_GC_FP ?= -Oy-
789 VBOX_VCC_GC_OPT ?=
790else
791 # We should use -fomit-frame-pointer for GCC / -Oy for VCC.
792 # -funwind-tables provides support for backtraces in gdb then.
793 VBOX_GCC_FP ?= -fno-omit-frame-pointer
794 VBOX_GCC_OPT ?= -O2 $(VBOX_GCC_mtune-generic)
795 VBOX_VCC_FP ?= -Oy-
796 ifdef VBOX_USE_VCC80
797 VBOX_VCC_OPT ?= -O2 -GS-
798 else
799 VBOX_VCC_OPT ?= -Ogitb2
800 endif
801 VBOX_GCC_GC_FP ?= -fno-omit-frame-pointer
802 VBOX_GCC_GC_OPT ?= -O2 $(VBOX_GCC_mtune-generic)
803 VBOX_VCC_GC_FP ?= -Oy-
804 ifdef VBOX_USE_VCC80
805 VBOX_VCC_GC_OPT ?= -O2
806 else
807 VBOX_VCC_GC_OPT ?= -Ogitb2
808 endif
809endif
810
811#
812# ARCH_BITS_DEFS.
813#
814ifeq ($(KBUILD_TARGET_ARCH),amd64)
815 ARCH_BITS_DEFS := HC_ARCH_BITS=64
816else ifeq ($(KBUILD_TARGET_ARCH),x86)
817 ARCH_BITS_DEFS := HC_ARCH_BITS=32
818else
819 error KBUILD_TARGET_ARCH=$(KBUILD_TARGET_ARCH)
820endif
821
822ifdef VBOX_WITH_64_BITS_GUESTS
823 VBOX_GC_ARCH_BITS_DEFS := GC_ARCH_BITS=64
824else
825 VBOX_GC_ARCH_BITS_DEFS := GC_ARCH_BITS=32
826endif
827ARCH_BITS_DEFS += $(VBOX_GC_ARCH_BITS_DEFS)
828
829#
830# Add the output dir(s) to the dynamic loader search path.
831#
832if1of ($(KBUILD_TARGET), linux l4 freebsd netbsd openbsd solaris)
833 export LD_LIBRARY_PATH:=$(PATH_BIN):$(PATH_LIB):$(LD_LIBRARY_PATH)
834endif
835ifeq ($(KBUILD_TARGET),os2)
836 #fixme! export BEGINLIBPATH:=$(PATH_BIN);$(PATH_LIB);$(BEGINLIBPATH)
837endif
838ifeq ($(KBUILD_TARGET),win)
839 export PATH:=$(PATH_BIN);$(PATH_LIB);$(PATH)
840endif
841
842#
843# Common libraries and tools.
844#
845ifeq ($(KBUILD_TARGET),darwin)
846 LIB_RUNTIME = $(PATH_BIN)/VBoxRT.dylib
847 LIB_RUNTIME_EF = #$(PATH_LIB)/RuntimeEFCPP.a
848 LIB_KPROFILE = $(PATH_BIN)/kPrf2.dylib
849 LIB_VMM = $(PATH_BIN)/VBoxVMM.dylib
850 LIB_VMMGC = $(PATH_BIN)/VMMGC.gc
851 LIB_REM = $(PATH_LIB)/VBoxREMImp.dylib
852 LIB_XPCOM = $(PATH_BIN)/VBoxXPCOM.dylib
853 LIB_DDU = $(PATH_BIN)/VBoxDDU.dylib
854 LIB_SETTINGS = $(PATH_BIN)/VBoxSettings.dylib
855endif
856ifeq ($(KBUILD_TARGET),l4)
857 LIB_RUNTIME = $(PATH_BIN)/VBoxRT.s.so
858 LIB_RUNTIME_EF = #$(PATH_LIB)/RuntimeEFCPP.a
859 LIB_KPROFILE = $(PATH_BIN)/kPrf2.s.so
860 LIB_VMM = $(PATH_BIN)/VBoxVMM.s.so
861 LIB_VMMGC = $(PATH_BIN)/VMMGC.gc
862 LIB_REM = $(PATH_BIN)/VBoxREMImp.s.so
863 LIB_XPCOM = $(PATH_BIN)/VBoxXPCOM.s.so
864 LIB_DDU = $(PATH_BIN)/VBoxDDU.s.so
865 LIB_SETTINGS = $(PATH_BIN)/VBoxSettings.s.so
866endif
867if1of ($(KBUILD_TARGET), linux freebsd netbsd openbsd solaris)
868 LIB_RUNTIME = $(PATH_BIN)/VBoxRT.so
869 LIB_RUNTIME_EF = $(PATH_LIB)/RuntimeEFCPP.a
870 LIB_KPROFILE = $(PATH_BIN)/kPrf2.so
871 LIB_VMM = $(PATH_BIN)/VBoxVMM.so
872 LIB_VMMGC = $(PATH_BIN)/VMMGC.gc
873 LIB_REM = $(PATH_BIN)/VBoxREMImp.so
874 LIB_XPCOM = $(PATH_BIN)/VBoxXPCOM.so
875 LIB_DDU = $(PATH_BIN)/VBoxDDU.so
876 LIB_SETTINGS = $(PATH_BIN)/VBoxSettings.so
877endif
878ifeq ($(KBUILD_TARGET),os2)
879 LIB_RUNTIME = $(PATH_BIN)/VBoxRT.dll
880 LIB_RUNTIME_EF = #$(PATH_LIB)/RuntimeEFCPP.a
881 LIB_KPROFILE = $(PATH_BIN)/kPrf2.dll
882 LIB_VMM = $(PATH_BIN)/VBoxVMM.dll
883 LIB_VMMGC = $(PATH_LIB)/VMMGCImp.lib
884 LIB_REM = $(PATH_LIB)/VBoxREMImp.lib
885 LIB_XPCOM = $(PATH_BIN)/VBoxXCOM.dll
886 LIB_DDU = $(PATH_BIN)/VBoxDDU.dll
887 LIB_SETTINGS = $(PATH_BIN)/VBoxSett.dll
888 OBJ_SYS0 = $(PATH_OBJ)/src/VBox/Runtime/RuntimeR0/os2/sys0.obj
889endif
890ifeq ($(KBUILD_TARGET),win)
891 LIB_RUNTIME = $(PATH_LIB)/VBoxRT.lib
892 LIB_RUNTIME_EF = #$(PATH_LIB)/RuntimeEFCPP.lib
893 LIB_KPROFILE = $(PATH_LIB)/kPrf2.lib
894 LIB_VMM = $(PATH_LIB)/VBoxVMM.lib
895 LIB_VMMGC = $(PATH_OUT)/obj/src/VBox/VMM/VMMGC/VMMGC.lib
896 LIB_REM = $(PATH_LIB)/VBoxREMImp.lib
897 LIB_XPCOM = $(PATH_BIN)/VBoxXPCOM.dll
898 LIB_DDU = $(PATH_LIB)/VBoxDDU.lib
899 LIB_SETTINGS = $(PATH_LIB)/VBoxSettings.lib
900endif
901
902# The kprofile build automagically links with kProfile.
903ifeq ($(KBUILD_TYPE),kprofile)
904 LIB_RUNTIME += $(LIB_KPROFILE)
905endif
906
907## Enable C++ electric fence heap. (Warning: will easily run out of virtual memory / kernel stuff on Linux/Windows.)
908#LIB_RUNTIME += $(LIB_RUNTIME_EF) $(LIB_RUNTIME)
909
910# Overridable libraries (unix).
911LIB_PTHREAD ?= pthread
912
913# Xcursor (consider an SDK for this).
914# (LIB_XCURSOR is legacy, remove in a month or two.)
915ifndef VBOX_XCURSOR_LIBS
916 VBOX_XCURSOR_LIBS := $(LIB_XCURSOR)
917endif
918ifeq ($(VBOX_XCURSOR_LIBS),)
919 ifeq ($(KBUILD_TARGET),solaris)
920 VBOX_XCURSOR_LIBS := $(lastword $(wildcard $(PATH_DEVTOOLS_TRG)/libXcursor/*/lib/libXcursor.a))
921 ifneq ($(VBOX_XCURSOR_LIBS),)
922 VBOX_XCURSOR_INCS := $(patsubst %/lib/libXcursor.a,%/include, $(VBOX_XCURSOR_LIBS))
923 VBOX_XCURSOR_LIBS += X11 Xrender Xfixes
924 endif
925 endif
926 ifeq ($(VBOX_XCURSOR_LIBS),)
927 VBOX_XCURSOR_LIBS := Xcursor
928 endif
929endif
930
931
932# Intel ASL compiler for ACPI
933VBOX_IASLCMD ?= $(firstword $(wildcard $(PATH_DEVTOOLS_BLD)/bin/iasl$(HOSTSUFF_EXE)) iasl$(HOSTSUFF_EXE))
934
935# Bruce's C compile is a C-compiler for BIOS-related 8086 code
936VBOX_BCC ?= $(PATH_DEVTOOLS_BLD)/bin/bcc$(HOSTSUFF_EXE) -B $(PATH_DEVTOOLS_BLD)/bin/
937
938# Assembler for BIOS-related 8086 code
939VBOX_AS86 ?= $(PATH_DEVTOOLS_BLD)/bin/as86$(HOSTSUFF_EXE)
940
941# libxslt XSLT processor. (see PATH_TOOL_YASM for explanation why it's temporarily located in bin.)
942ifeq ($(KBUILD_HOST),win)
943# VBOX_XSLTPROC ?= $(PATH_DEVTOOLS)/win.x86/libxslt/10114/xsltproc.exe
944 VBOX_XSLTPROC ?= $(PATH_DEVTOOLS)/win.x86/bin/xsltproc.exe
945else ifeq ($(KBUILD_HOST),os2)
946 VBOX_XSLTPROC ?= BEGINLIBPATH="$(PATH_DEVTOOLS_BLD)/bin;$$BEGINLIBPATH" $(PATH_DEVTOOLS_BLD)/bin/xsltproc.exe
947else
948 VBOX_XSLTPROC ?= xsltproc$(HOSTSUFF_EXE)
949endif
950
951# bin2c (convert binary files into C arrays)
952VBOX_BIN2C ?= $(PATH_OBJ)/src/bldprogs/bin2c/bin2c$(HOSTSUFF_EXE)
953
954# mkisofs
955ifeq ($(KBUILD_HOST),win)
956 VBOX_MKISOFS ?= $(PATH_DEVTOOLS_BLD)/bin/mkisofs.exe
957else
958 VBOX_MKISOFS ?= mkisofs
959endif
960
961# Makeself for the linux installers.
962VBOX_MAKESELF ?= $(PATH_DEVTOOLS)/common/makeself/v2.1.4_1/makeself.sh
963
964# Microsoft HTML Help Workshop.
965VBOX_PATH_HTML_HELP_WORKSHOP ?= $(PATH_DEVTOOLS)/win.x86/HTML_Help_Workshop/v1.3/
966
967# Path to the null soft installer.
968VBOX_PATH_NSIS ?= $(PATH_DEVTOOLS)/win.x86/nsis/v2.33-log-nsscm
969
970# Path to AutoIt3.
971VBOX_PATH_AUTOIT3 ?= $(PATH_DEVTOOLS)/win.x86/autoit/v3.2.10.0
972
973# Windows install tools...
974VBOX_PATH_WIX ?= $(PATH_DEVTOOLS)/win.x86/wix/v2.0.4611.0
975VBOX_PATH_DIFX ?= $(PATH_DEVTOOLS)/win.$(KBUILD_TARGET_ARCH)/DIFx/v2.1
976
977# We need to export YASM for OSE, but since it was converted to .zip we need to
978# allow for the location used by the zip to be properly cleaned up first.
979if1of ($(KBUILD_HOST).$(KBUILD_HOST_ARCH), win.x86 linux.x86 solaris.x86)
980 PATH_TOOL_YASM ?= $(PATH_DEVTOOLS_BLD)/bin
981endif
982
983# XPCOM setup for all but win32.
984ifneq ($(KBUILD_TARGET),win)
985 VBOX_WITH_XPCOM = 1
986 VBOX_XPIDL ?= $(VBOX_PATH_SDK)/bin/xpidl$(HOSTSUFF_EXE)
987 VBOX_PATH_XPCOM_IDL ?= $(VBOX_PATH_SDK)/idl
988 VBOX_XPCOM_INCS ?= \
989 $(VBOX_PATH_SDK)/include \
990 $(VBOX_PATH_SDK)/include/xpcom \
991 $(VBOX_PATH_SDK)/include/xpcom/nsprpub \
992 $(VBOX_PATH_SDK)/include/xpcom/string \
993 $(VBOX_PATH_SDK)/include/xpcom/xpcom \
994 $(VBOX_PATH_SDK)/include/xpcom/ipcd
995 ifneq ($(KBUILD_TARGET),os2)
996 # libIDL-config (for xpcom18a4)
997 ifeq ($(origin VBOX_LIBIDL_CONFIG),undefined)
998 export VBOX_LIBIDL_CONFIG := $(firstword $(shell which libIDL-config-2 libIDL-config 2> /dev/null))
999 endif
1000 endif
1001endif
1002
1003ifeq ($(KBUILD_TARGET),os2)
1004 # search DLLs in the EXE directory first
1005 VBOX_XPIDL := BEGINLIBPATH="$(dir $(VBOX_XPIDL));$$BEGINLIBPATH" $(VBOX_XPIDL)
1006endif
1007#$(error $(VBOX_XPIDL))
1008
1009# The X11 LIBPATH. (The amd64 hack is for RHEL4.)
1010ifeq ($(KBUILD_TARGET_ARCH),amd64)
1011 VBOX_LIBPATH_X11 ?= /usr/X11R6/lib64 /usr/X11R6/lib
1012else
1013 VBOX_LIBPATH_X11 ?= /usr/X11R6/lib
1014endif
1015
1016# 32bit X11 LIBPATH for building 32bit guest additions
1017VBOX_LIBPATH32_X11 ?= /usr/X11R6/lib32 /usr/X11R6/lib
1018
1019#
1020# Macros dealing with the darwin version we're targeting.
1021#
1022ifeq ($(KBUILD_TARGET),darwin)
1023 VBOX_DEF_MACOSX_VERSION_MIN ?= 10.4
1024 ifeq ($(VBOX_DEF_MACOSX_VERSION_MIN),10.4)
1025 ifeq ($(origin VBOX_DARWIN_CLASSIC_LINKER),undefined)
1026 VBOX_DARWIN_CLASSIC_LINKER := $(shell ld -v 2>&1 )
1027 ifneq ($(filter ld64%, $(subst :, , $(VBOX_DARWIN_CLASSIC_LINKER))),)
1028 export VBOX_DARWIN_CLASSIC_LINKER := -Wl,-classic_linker
1029 else
1030 export VBOX_DARWIN_CLASSIC_LINKER :=
1031 endif
1032 endif
1033 VBOX_PATH_MACOSX_SDK ?= /Developer/SDKs/MacOSX$(VBOX_DEF_MACOSX_VERSION_MIN)u.sdk
1034 else
1035 VBOX_PATH_MACOSX_SDK ?= /Developer/SDKs/MacOSX$(VBOX_DEF_MACOSX_VERSION_MIN).sdk
1036 endif
1037 VBOX_DARWIN_DEF_SDK_DEFS := MAC_OS_X_VERSION_MIN_REQUIRED=$(subst .,,$(VBOX_DEF_MACOSX_VERSION_MIN))0 \
1038 MAC_OS_X_VERSION_MAX_ALLOWED=$(subst .,,$(VBOX_DEF_MACOSX_VERSION_MIN))0
1039 VBOX_DARWIN_DEF_SDK_CFLAGS := -mmacosx-version-min=$(VBOX_DEF_MACOSX_VERSION_MIN) -isysroot $(VBOX_PATH_MACOSX_SDK)
1040 VBOX_DARWIN_DEF_SDK_CXXFLAGS := -mmacosx-version-min=$(VBOX_DEF_MACOSX_VERSION_MIN) -isysroot $(VBOX_PATH_MACOSX_SDK)
1041 VBOX_DARWIN_DEF_SDK_OBJCFLAGS := -mmacosx-version-min=$(VBOX_DEF_MACOSX_VERSION_MIN) -isysroot $(VBOX_PATH_MACOSX_SDK)
1042 VBOX_DARWIN_DEF_SDK_LDFLAGS := -mmacosx-version-min=$(VBOX_DEF_MACOSX_VERSION_MIN) -Wl,-syslibroot,$(VBOX_PATH_MACOSX_SDK) $(VBOX_DARWIN_CLASSIC_LINKER)
1043endif # target=darwin
1044
1045#
1046# The X11 headers.
1047#
1048VBOX_PATH_X11_ROOT = $(PATH_ROOT)/src/VBox/Additions/x11/x11include
1049VBOX_PATH_X11_XFREE_4_2 = $(VBOX_PATH_X11_ROOT)/4.2
1050VBOX_PATH_X11_XFREE_4_3 = $(VBOX_PATH_X11_ROOT)/4.3
1051VBOX_PATH_X11_XORG_7_0 = $(VBOX_PATH_X11_ROOT)/7.0
1052VBOX_PATH_X11_XORG_7_1 = $(VBOX_PATH_X11_ROOT)/7.1
1053VBOX_PATH_X11_XORG_1_3 = $(VBOX_PATH_X11_ROOT)/1.3
1054VBOX_PATH_X11_XORG_1_4 = $(VBOX_PATH_X11_ROOT)/1.4
1055VBOX_PATH_X11_XORG_1_5 = $(VBOX_PATH_X11_ROOT)/1.5
1056
1057#
1058# Various other variables.
1059#
1060
1061# Two helper variables for the VBOX_WITH_ORIGIN stuff:
1062# VBOX_ORIGIN - Indirect expansion trick.
1063# VBOX_GCC_RPATH_OPT - Different GCC/LD combinations needs different options.
1064VBOX_ORIGIN = $$ORIGIN
1065ifeq ($(KBUILD_TARGET),solaris)
1066 VBOX_GCC_RPATH_OPT = -R
1067else
1068 VBOX_GCC_RPATH_OPT = -Wl,-rpath,
1069endif
1070
1071# The icons to use.
1072ifdef VBOX_OSE
1073 VBOX_WINDOWS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox_win.ico
1074 VBOX_MACOSX_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/OSE/VirtualBox.icns
1075else
1076 ifeq ($(KBUILD_HOST),win)
1077 VBOX_WINDOWS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/VirtualBox-vista.ico
1078 TOOL_VCC80X86_RC := $(PATH_DEVTOOLS)/win.x86/ddk/6000/bin/x86/rc.exe
1079 TOOL_VCC80AMD64_RC := $(PATH_DEVTOOLS)/win.x86/ddk/6000/bin/x86/rc.exe
1080 TOOL_VCC70_RC := $(PATH_DEVTOOLS)/win.x86/ddk/6000/bin/x86/rc.exe
1081 else
1082 VBOX_WINDOWS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/VirtualBox-winxp.ico
1083 endif
1084 VBOX_MACOSX_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/VirtualBox.icns
1085endif
1086
1087
1088#
1089# GCC stuff properties.
1090# Most of this is resolved on first kmk invocation and cached in PATH_OUT.
1091#
1092# Note! That a harmless warning is printed if the file doesn't exist.
1093# Note! Changes in GCC are not detected automatically (yet).
1094#
1095include $(KBUILD_PATH)/tools/$(VBOX_GCC_TOOL).kmk
1096ifneq ($(VBOX_GCC_TOOL),$(VBOX_GCC32_TOOL))
1097 include $(KBUILD_PATH)/tools/$(VBOX_GCC32_TOOL).kmk
1098endif
1099
1100# These tests never worked on Windows because of /dev/null, so, there
1101# can be no harm in just dropping them until cygwin is mp safe.
1102ifeq ($(KBUILD_HOST),win)
1103VBOX_GCC_CHECK_CC = $(2)
1104VBOX_GCC_CHECK_CXX = $(2)
1105VBOX_GCC_CHECK_LD = $(2)
1106VBOX_GCC32_CHECK_CXX = $(2)
1107else
1108VBOX_GCC_CHECK_CC = $(shell \
1109 if $(TOOL_$(VBOX_GCC_TOOL)_CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; \
1110 then echo "$(1)"; \
1111 else echo "$(2)"; fi; )
1112
1113VBOX_GCC_CHECK_CXX = $(shell \
1114 if $(TOOL_$(VBOX_GCC_TOOL)_CXX) $(1) -S -o /dev/null -xc++ /dev/null > /dev/null 2>&1; \
1115 then echo "$(1)"; \
1116 else echo "$(2)"; fi; )
1117
1118VBOX_GCC_CHECK_LD = $(shell \
1119 if $(TOOL_$(VBOX_GCC_TOOL)_LD) -Wl,$(1) -nostdlib -o /dev/null -xc /dev/null > /dev/null 2>&1 ;\
1120 then echo "-Wl,$(1)"; \
1121 else echo "$(2)"; fi; )
1122
1123VBOX_GCC32_CHECK_CXX = $(shell \
1124 if $(TOOL_$(VBOX_GCC32_TOOL)_CXX) $(1) -S -o /dev/null -xc++ /dev/null > /dev/null 2>&1; \
1125 then echo "$(1)"; \
1126 else echo "$(2)"; fi; )
1127endif
1128
1129ifeq ($(KBUILD_HOST),win)
1130# This isn't important (yet) on windows, so cook the result until
1131# cygwin is feeling better.
1132VBOX_GCC_VERSION := $(int-add $(int-mul 10000, 3), $(int-mul 100, 3), 3)
1133else
1134# This is kind of bad, the returned string needs to be re-evaluated before use.
1135# The reason for this hack is that the windows kmk_ash cannot deal with $((1+1)).
1136VBOX_GCC_VERSION = $(shell \
1137 $(1) -dumpversion | $(SED_EXT) 's|\([0-9]\)\.\([0-9]\)\.\([0-9]\)|$$(int-add $$(int-mul 10000, \1), $$(int-mul 100, \2), \3)|' )
1138endif
1139
1140# No $(QUIET) here as it's interesting to see what goes into the file.
1141$(PATH_OUT)/GCCConfig.kmk: $(PATH_ROOT)/Config.kmk $(LOCALCFG) $(AUTOCFG)
1142 $(call MSG_GENERATE,,$@,)
1143 $(QUIET)$(RM) -f '$@'
1144 $(QUIET)$(MKDIR) -p $(@D)
1145
1146# HC compiler switch detection.
1147 $(APPEND) '$@' 'VBOX_GCC_VERSION_CC ?= $(call VBOX_GCC_VERSION,$(TOOL_$(VBOX_GCC_TOOL)_CC))'
1148 $(APPEND) '$@' 'VBOX_GCC_VERSION_CXX ?= $(call VBOX_GCC_VERSION,$(TOOL_$(VBOX_GCC_TOOL)_CXX))'
1149 $(APPEND) '$@' 'VBOX_GCC_LIBGCC ?= $(shell $(TOOL_$(VBOX_GCC_TOOL)_CC) -print-libgcc-file-name)'
1150 $(APPEND) '$@' 'VBOX_GCC_Wno-pointer-sign ?= $(call VBOX_GCC_CHECK_CC,-Wno-pointer-sign,)'
1151 $(APPEND) '$@' 'VBOX_GCC_Wno-variadic-macros ?= $(call VBOX_GCC_CHECK_CXX,-Wno-variadic-macros,)'
1152 $(APPEND) '$@' 'VBOX_GCC_Wno-invalid-offsetof ?= $(call VBOX_GCC_CHECK_CXX,-Wno-invalid-offsetof,)'
1153 $(APPEND) '$@' 'VBOX_GCC_Wno-extra ?= $(call VBOX_GCC_CHECK_CXX,-Wno-extra)'
1154 $(APPEND) '$@' 'VBOX_GCC_fno-stack-protector ?= $(call VBOX_GCC_CHECK_CC,-fno-stack-protector,)'
1155# Produce code optimized for the most common IA32/AMD64/EM64T processors. Introduced with gcc version 4.2.
1156 $(APPEND) '$@' 'VBOX_GCC_mtune-generic ?= $(call VBOX_GCC_CHECK_CC,-mtune=generic,)'
1157 $(APPEND) '$@' 'VBOX_LD_as_needed ?= $(call VBOX_GCC_CHECK_LD,--as-needed,)'
1158ifneq ($(KBUILD_TARGET),l4)
1159# Set default attribute for ELF and MACH-O symbols to ``hidden'' to reduce the number
1160# of relocation entries and PLT indirections in shared libraries. Don't allow for gcc version < 4.
1161 $(APPEND) '$@' 'ifneq ($$(VBOX_GCC_VERSION_CC),)'
1162 $(APPEND) '$@' ' ifneq ($$(int-ge $$(VBOX_GCC_VERSION_CC),40000),)'
1163 $(APPEND) '$@' ' VBOX_GCC_fvisibility-hidden ?= $(call VBOX_GCC_CHECK_CC,-fvisibility=hidden -DVBOX_HAVE_VISIBILITY_HIDDEN,)'
1164 $(APPEND) '$@' ' endif'
1165 $(APPEND) '$@' 'endif'
1166endif
1167ifneq ($(KBUILD_TARGET),l4)
1168# Set default attribute for inline functions to ``hidden'' to reduce the number
1169# of relocation entries and PLT indirections in shared libraries. Don't allow for gcc version < 4.
1170 $(APPEND) '$@' 'ifneq ($$(VBOX_GCC_VERSION_CXX),)'
1171 $(APPEND) '$@' ' ifneq ($$(int-ge $$(VBOX_GCC_VERSION_CXX),40000),)'
1172 $(APPEND) '$@' ' VBOX_GCC_fvisibility-inlines-hidden ?= $(call VBOX_GCC_CHECK_CXX,-fvisibility-inlines-hidden,)'
1173 $(APPEND) '$@' ' endif'
1174 $(APPEND) '$@' 'endif'
1175endif
1176# Find the compiler includes for IPRT no-crt.
1177# Note that `$(dir $(gcc -print-libgcc-file-name))/include does not work for a 64-bit cross build on a 32-bit build host.
1178ifeq ($(KBUILD_HOST),win)
1179# With the cygwin issues and gcc on windows returning a useless path, just skip this on windows.
1180 $(APPEND) '$@' 'VBOX_PATH_GCC_INCS ?= '
1181else
1182 $(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'
1183endif
1184# 32-bit (GC) compiler switch detection.
1185 $(APPEND) '$@' 'VBOX_GCC32_VERSION_CC ?= $(call VBOX_GCC_VERSION,$(TOOL_$(VBOX_GCC32_TOOL)_CC))'
1186 $(APPEND) '$@' 'VBOX_GCC32_VERSION_CXX ?= $(call VBOX_GCC_VERSION,$(TOOL_$(VBOX_GCC32_TOOL)_CXX))'
1187 $(APPEND) '$@' 'VBOX_GCC32_LIBGCC ?= $(shell $(TOOL_$(VBOX_GCC32_TOOL)_CC) -print-libgcc-file-name)'
1188 $(APPEND) '$@' 'VBOX_GCC32_Wno-variadic-macros ?= $(call VBOX_GCC32_CHECK_CXX,-Wno-variadic-macros,)'
1189
1190include $(PATH_OUT)/GCCConfig.kmk
1191
1192
1193#
1194# Code Signing.
1195#
1196ifdef VBOX_SIGNING_MODE
1197 ifeq ($(KBUILD_HOST),win)
1198 # VBOX_PATH_SELFSIGN points to the Vista WDK bin/SelfSign directory.
1199 ifndef VBOX_PATH_SELFSIGN
1200 VBOX_PATH_SELFSIGN := $(lastword $(sort $(wildcard $(PATH_DEVTOOLS)/win.x86/selfsign/*)))
1201 ifeq ($(VBOX_PATH_SELFSIGN),)
1202 VBOX_PATH_SELFSIGN := $(PATH_DEVTOOLS)/win.x86/selfsign/r1
1203 endif
1204 endif
1205 VBOX_SIGNTOOL ?= $(VBOX_PATH_SELFSIGN)/SignTool.exe
1206 VBOX_INF2CAT ?= $(VBOX_PATH_SELFSIGN)/Inf2Cat.exe
1207
1208 # There are three signing modes; 'test', 'development' and 'release'.
1209 ifeq ($(strip $(VBOX_SIGNING_MODE)),test)
1210 VBOX_CERTIFICATE_SUBJECT_NAME ?= MyTestCertificate
1211 VBOX_CERTIFICATE_SUBJECT_NAME_ARGS ?= /n "$(VBOX_CERTIFICATE_SUBJECT_NAME)"
1212 else if1of ($(VBOX_SIGNING_MODE),release development)
1213 VBOX_CERTIFICATE_SUBJECT_NAME ?= innotek GmbH
1214 VBOX_CERTIFICATE_SUBJECT_NAME_ARGS ?= /n "$(VBOX_CERTIFICATE_SUBJECT_NAME)"
1215 VBOX_CROSS_CERTIFICATE_FILE ?= $(VBOX_PATH_SELFSIGN)/MSCV-GlobalSign.cer
1216 VBOX_CROSS_CERTIFICATE_FILE_ARGS ?= /ac "$(VBOX_CROSS_CERTIFICATE_FILE)"
1217 VBOX_TSA_URL ?= http://timestamp.verisign.com/scripts/timestamp.dll
1218 VBOX_TSA_URL_ARGS ?= /t "$(VBOX_TSA_URL)"
1219 else
1220 $(error Unknown VBOX_SIGNING_MODE: $(VBOX_SIGNING_MODE))
1221 endif
1222 VBOX_CERTIFICATE_STORE ?= my
1223 VBOX_CERTIFICATE_STORE_ARGS ?= /s "$(VBOX_CERTIFICATE_STORE)"
1224
1225 ## Commands for signing a driver image after link.
1226 VBOX_SIGN_DRIVER_CMDS ?= $(if $(eq $(tool_do),LINK_LIBRARY),,$(call VBOX_SIGN_FILE_FN,$(out)))
1227 ## Sign a file.
1228 # @param 1 The file to sign.
1229 VBOX_SIGN_FILE_FN ?= $(VBOX_SIGNTOOL) sign \
1230 $(VBOX_CROSS_CERTIFICATE_FILE_ARGS) \
1231 $(VBOX_CERTIFICATE_STORE_ARGS) \
1232 $(VBOX_CERTIFICATE_SUBJECT_NAME_ARGS) \
1233 $(VBOX_TSA_URL_ARGS) \
1234 $(1)
1235 ## Create a security catalog file.
1236 # @param 1 The directory containing the stuff to sign.
1237 # @param 2 The expected .cat name. (Inf2Cat lowercases it)
1238 # @param 3 The list of OSes, separated by ';'.
1239 VBOX_MAKE_CAT_HLP_FN ?= \
1240 $(RM) -f $(2)\
1241 $(NL)$(TAB)$(VBOX_INF2CAT) /driver:$(strip $(1)) /os:$(strip $(subst ;,$(COMMA),$(3))) /verbose \
1242 $(NL)$(TAB)$(MV) $(2) $(2) \
1243 $(NL)$(TAB)$(call VBOX_SIGN_FILE_FN,$(2))
1244 VBOX_MAKE_CAT64_FN ?= $(call VBOX_MAKE_CAT_HLP_FN,$(1),$(2),XP_X64;Server2003_X64;Vista_X64)
1245 VBOX_MAKE_CAT32_FN ?= $(call VBOX_MAKE_CAT_HLP_FN,$(1),$(2),2000;XP_X86;Server2003_X86;Vista_X86)
1246 ifeq ($(KBUILD_TARGET_ARCH),x86)
1247 VBOX_MAKE_CAT_FN ?= $(call VBOX_MAKE_CAT32_FN,$(1),$(2))
1248 else
1249 VBOX_MAKE_CAT_FN ?= $(call VBOX_MAKE_CAT64_FN,$(1),$(2))
1250 endif
1251
1252 # Go nuts, sign everything.
1253 ifeq ($(strip $(VBOX_SIGNING_MODE)),release)
1254 ## Commands for signing an executable or a dll image after link.
1255 VBOX_SIGN_IMAGE_CMDS ?= $(if $(eq $(tool_do),LINK_LIBRARY),,$(call VBOX_SIGN_FILE_FN,$(out)))
1256 ## Enable signing of the additions.
1257 VBOX_SIGN_ADDITIONS ?= 1
1258 endif
1259 else
1260 # Not windows build platform, ignore.
1261 VBOX_SIGNING_MODE :=
1262 endif
1263endif
1264
1265#
1266# Windows .inf editing.
1267#
1268ifeq ($(KBUILD_TARGET_ARCH),x86)
1269 VBOX_EDIT_INF_FN = $(call VBOX_EDIT_INF32_FN,$(1),$(2))
1270else
1271 VBOX_EDIT_INF_FN = $(call VBOX_EDIT_INF64_FN,$(1),$(2))
1272endif
1273## Edit an inf file an x86 target.
1274# @param 1 The inf file to edit.
1275# @param 2 The output file.
1276VBOX_EDIT_INF32_FN = $(SED) $(if $(VBOX_SIGNING_MODE),-e 's/^;cat *//', -e '/^;cat /d') -e 's/^;x86 *//' -e '/^;amd64 /d' --output $(2) $(1)
1277## Edit an inf file an x86 target.
1278# @param 1 The inf file to edit.
1279# @param 2 The output file.
1280VBOX_EDIT_INF64_FN = $(SED) $(if $(VBOX_SIGNING_MODE),-e 's/^;cat *//', -e '/^;cat /d') -e 's/^;amd64 *//' -e '/^;x86 /d' --output $(2) $(1)
1281
1282#
1283# Default prefixes and suffixes.
1284#
1285VBOX_PREF_LIB =
1286if1of ($(KBUILD_TARGET),win os2)
1287VBOX_SUFF_LIB = .lib
1288else
1289VBOX_SUFF_LIB = .a
1290endif
1291VBOX_SUFF_DLL = $(SUFF_DLL)
1292ifeq ($(KBUILD_TARGET),os2) # GXX3OMF produces out .o at the moment.
1293VBOX_SUFF_OBJ = .o
1294else
1295VBOX_SUFF_OBJ = $(SUFF_OBJ)
1296endif
1297VBOXW32GUEST_SUFF_LIB = .lib
1298VBOXLNX32GUEST_SUFF_LIB = .a
1299
1300#
1301# SDKs for external libraries.
1302#
1303SDK_VBOX_LIBXML2 = .
1304#if1of ($(KBUILD_TARGET),win os2 solaris)
1305 SDK_VBOX_LIBXML2_INCS ?= $(PATH_ROOT)/src/libs/libxml2-2.6.30/include
1306 SDK_VBOX_LIBXML2_LIBS ?= $(PATH_LIB)/VBox-libxml2$(VBOX_SUFF_LIB)
1307 SDK_VBOX_LIBXML2_DEFS ?= LIBXML_STATIC
1308 SDK_VBOX_LIBXML2_DEFS.win += WIN32 _WINDOWS _MBCS
1309#else if1of ($(KBUILD_TARGET),linux)
1310# SDK_VBOX_LIBXML2_INCS ?=
1311# SDK_VBOX_LIBXML2_LIBS ?=
1312# SDK_VBOX_LIBXML2_CFLAGS ?= $(shell pkg-config libxml-2.0 --cflags)
1313# SDK_VBOX_LIBXML2_CXXFLAGS ?= $(SDK_VBOX_LIBXML2_CFLAGS)
1314# SDK_VBOX_LIBXML2_LDFLAGS ?= $(shell pkg-config libxml-2.0 --libs)
1315#else
1316# SDK_VBOX_LIBXML2_INCS ?=
1317# SDK_VBOX_LIBXML2_LIBS ?= xml2
1318#endif
1319
1320SDK_VBOX_LIBXSLT = .
1321#if1of ($(KBUILD_TARGET),win os2 solaris)
1322 SDK_VBOX_LIBXSLT_INCS ?= $(PATH_ROOT)/src/libs/libxslt-1.1.22
1323 SDK_VBOX_LIBXSLT_LIBS ?= $(PATH_LIB)/VBox-libxslt$(VBOX_SUFF_LIB)
1324 SDK_VBOX_LIBXSLT_DEFS ?=
1325 SDK_VBOX_LIBXSLT_DEFS.win += WIN32 _WINDOWS _MBCS _REENTRANT
1326#else if1of ($(KBUILD_TARGET),linux)
1327# SDK_VBOX_LIBXSLT_INCS ?=
1328# SDK_VBOX_LIBXSLT_LIBS ?=
1329# SDK_VBOX_LIBXSLT_CFLAGS ?= $(shell pkg-config libxslt-1.0 --cflags)
1330# SDK_VBOX_LIBXSLT_CXXFLAGS ?= $(SDK_VBOX_LIBXSLT_CFLAGS)
1331# SDK_VBOX_LIBXSLT_LDFLAGS ?= $(shell pkg-config libxslt-1.0 --libs)
1332#else
1333# SDK_VBOX_LIBXSLT_INCS ?=
1334# SDK_VBOX_LIBXSLT_LIBS ?= xslt
1335#endif
1336
1337SDK_VBOX_LIBPNG = .
1338SDK_VBOX_LIBPNG_INCS ?= $(PATH_ROOT)/src/libs/libpng-1.2.8
1339SDK_VBOX_LIBPNG_LIBS ?= $(PATH_LIB)/VBox-libpng$(VBOX_SUFF_LIB)
1340
1341SDK_VBOX_ZLIB = .
1342if1of ($(KBUILD_TARGET), win os2)
1343 SDK_VBOX_ZLIB_INCS ?= $(PATH_ROOT)/src/libs/zlib-1.2.1
1344 SDK_VBOX_ZLIB_LIBS ?= $(PATH_LIB)/VBox-zlib$(VBOX_SUFF_LIB)
1345else
1346 SDK_VBOX_ZLIB_INCS ?=
1347 SDK_VBOX_ZLIB_LIBS ?= z
1348endif
1349
1350SDK_VBOX_OPENSSL = .
1351if1of ($(KBUILD_TARGET), darwin linux solaris win)
1352 SDK_VBOX_OPENSSL_INCS?= $(PATH_OBJ)/src/libs/openssl-0.9.8h/include
1353else
1354 SDK_VBOX_OPENSSL_INCS?= $(PATH_ROOT)/src/libs/openssl-0.9.7e/include
1355endif
1356SDK_VBOX_OPENSSL_LIBS?= $(PATH_LIB)/VBox-libcrypto$(VBOX_SUFF_LIB)
1357
1358SDK_VBOX_FFMPEG = .
1359if1of ($(KBUILD_TARGET), win os2 darwin)
1360 SDK_VBOX_FFMPEG_INCS ?= \
1361 $(PATH_ROOT)/src/libs/ffmpeg-20060710/libavutil \
1362 $(PATH_ROOT)/src/libs/ffmpeg-20060710/libavcodec \
1363 $(PATH_ROOT)/src/libs/ffmpeg-20060710/libavformat
1364 ifeq ($(KBUILD_TARGET),win)
1365 ## @todo Michael! Where is $(PATH_LIB)/VBoxFFmpegImp$(VBOX_SUFF_LIB) supposed to come from?
1366 #SDK_VBOX_FFMPEG_LIBS ?= $(PATH_LIB)/VBoxFFmpeg.a
1367 SDK_VBOX_FFMPEG_LIBS ?= $(PATH_LIB)/VBoxFFmpegImp.lib
1368 else
1369 SDK_VBOX_FFMPEG_LIBS ?= $(PATH_BIN)/VBoxFFmpeg$(SUFF_DLL)
1370 endif
1371else
1372 SDK_VBOX_FFMPEG_INCS ?= /usr/include/ffmpeg /usr/include/libpng
1373 SDK_VBOX_FFMPEG_LIBS ?= avutil avcodec avformat
1374endif
1375
1376#
1377# Special SDK for the problematic NTDLL.LIB.
1378#
1379SDK_VBOX_NTDLL = Requires W2K3DDK
1380SDK_VBOX_NTDLL_LIBS ?= $(PATH_SDK_W2K3DDK_LIB)/ntdll.lib
1381
1382
1383#
1384# Qt build tools and libraries.
1385# For *NIX we require it to be present on the system.
1386#
1387## @todo convert this into SDK and integrate the Qt stuff into kBuild.
1388ifeq ($(KBUILD_TARGET),win)
1389 VBOX_PATH_QT ?= $(lastword $(sort $(wildcard $(PATH_DEVTOOLS_TRG)/qt/v3.*)))
1390 VBOX_DLL_QT ?= $(firstword $(wildcard $(VBOX_PATH_QT)/bin/VBoxQt3*.dll) \
1391 $(wildcard $(VBOX_PATH_QT)/bin/qtmt3*.dll) \
1392 $(wildcard $(VBOX_PATH_QT)/bin/qt-mt3*.dll) \
1393 $(wildcard $(VBOX_PATH_QT)/lib/qt-mt3*.dll))
1394 ifneq ($(wildcard $(VBOX_PATH_QT)/bin/accessible/VBoxQtWidgets100.dll),)
1395 VBOX_QT_BINARIES += \
1396 $(VBOX_PATH_QT)/bin/accessible/VBoxQtWidgets100.dll=>accessible/VBoxQtWidgets100.dll
1397 endif
1398 LIB_QT ?= $(firstword $(wildcard $(VBOX_PATH_QT)/lib/VBoxQt3*.lib) \
1399 $(wildcard $(VBOX_PATH_QT)/lib/qt-mt3*.lib) \
1400 $(wildcard $(VBOX_PATH_QT)/lib/dynamic/qt-mt3*.lib))
1401 LIB_QT_PRL ?= $(firstword $(wildcard $(VBOX_PATH_QT)/lib/VBoxQt.prl) \
1402 $(wildcard $(VBOX_PATH_QT)/lib/qt-mt.prl) \
1403 $(wildcard $(VBOX_PATH_QT)/lib/dynamic/qt-mt.prl))
1404 LIB_QTMAIN ?= $(firstword $(wildcard $(VBOX_PATH_QT)/lib/qtmain.lib) \
1405 $(wildcard $(VBOX_PATH_QT)/lib/dynamic/qtmain.lib))
1406 QTDIR ?= $(lastword $(sort $(wildcard $(PATH_DEVTOOLS_BLD)/qt/v3.*)))
1407else ifeq ($(KBUILD_TARGET),os2)
1408 QTDIR ?= $(PATH_DEVTOOLS_TRG)/qt/v3.3.1
1409 VBOX_PATH_QT ?= $(QTDIR)
1410 VBOX_DLL_QT ?= $(lastword $(sort $(wildcard $(VBOX_PATH_QT)/bin/*qt*.dll)))
1411 LIB_QT ?= $(lastword $(sort $(wildcard $(VBOX_PATH_QT)/lib/*qt*.lib)))
1412 LIB_QT_PRL ?= $(lastword $(sort $(wildcard $(VBOX_PATH_QT)/lib/*qt*.prl)))
1413 QTDIR := $(VBOX_PATH_QT)
1414else ifeq ($(KBUILD_TARGET),darwin)
1415 ifndef VBOX_PATH_QT
1416 VBOX_PATH_QT := $(lastword $(sort $(wildcard $(PATH_DEVTOOLS_TRG)/qt/v3.*)))
1417 VBOX_PATH_QT ?= $(PATH_DEVTOOLS_TRG)/qt/v3.3.8-r1
1418 endif
1419 VBOX_MUST_INSTALL_LIB_QT ?= 1
1420 LIB_QT ?= $(VBOX_PATH_QT)/lib/libqt-mt.3.dylib
1421 LIB_QTMAIN ?= $(NO_SUCH_VARIABLE)
1422 ifndef QTDIR
1423 QTDIR := $(sort $(wildcard $(PATH_DEVTOOLS_BLD)/v*))
1424 QTDIR := $(call lastword,$(QTDIR))
1425 endif
1426else
1427 ifndef QTDIR
1428 ifndef VBOX_PATH_QT
1429 # If QTDIR and VBOX_WITH_QTGUI aren't defined, we'll first
1430 # look in the tools tree and then on the system. If in the
1431 # tools, we'll have to install it.
1432 # Results are exported to avoid having to do this for every make file.
1433 VBOX_PATH_QT := $(lastword $(sort $(wildcard $(PATH_DEVTOOLS_TRG)/qt/v3.*)))
1434 ifneq ($(VBOX_PATH_QT),)
1435 export VBOX_PATH_QT
1436 export VBOX_MUST_INSTALL_LIB_QT := 1
1437 export LIB_QT := $(VBOX_PATH_QT)/lib/libqt-mt.so.3
1438 export LD_LIBRARY_PATH := $(VBOX_PATH_QT)/lib:$(LD_LIBRARY_PATH)
1439 else
1440 QTDIR := $(wildcard /usr/share/qt3)
1441 ifeq ($(QTDIR),)
1442 QTDIR := $(patsubst %/bin/moc,%,$(firstword $(wildcard /usr/bin/moc /usr/local/bin/moc /usr/X11R6/bin/moc)))
1443 endif
1444 ifneq ($(QTDIR),)
1445 export QTDIR
1446 endif
1447 endif
1448 else
1449 QTDIR := $(VBOX_PATH_QT)
1450 export QTDIR
1451 endif
1452 endif
1453endif
1454ifndef VBOX_PATH_QT
1455 VBOX_PATH_QT ?= $(QTDIR)
1456 LIB_QT ?= qt-mt
1457endif
1458ifeq ($(KBUILD_HOST),$(KBUILD_TARGET))
1459 VBOX_PATH_QT_HOST ?= $(VBOX_PATH_QT)
1460else
1461 VBOX_PATH_QT_HOST ?= $(QTDIR)
1462endif
1463VBOX_UIC ?= $(VBOX_PATH_QT_HOST)/bin/uic$(HOSTSUFF_EXE)
1464VBOX_MOC ?= $(VBOX_PATH_QT_HOST)/bin/moc$(HOSTSUFF_EXE)
1465VBOX_LUPDATE ?= $(VBOX_PATH_QT_HOST)/bin/lupdate$(HOSTSUFF_EXE)
1466VBOX_LRELEASE ?= $(VBOX_PATH_QT_HOST)/bin/lrelease$(HOSTSUFF_EXE)
1467
1468ifeq ($(KBUILD_TARGET),os2)
1469 # search DLLs in the EXE directory first (unless VBOX_DLL_QT is set)
1470 VBOX_DLL_QT_PATH := $(dir $(VBOX_DLL_QT))
1471 VBOX_DLL_QT_PATH := $(if $(VBOX_DLL_QT_PATH),$(VBOX_DLL_QT_PATH);,)
1472 VBOX_UIC := BEGINLIBPATH="$(VBOX_DLL_QT_PATH)$(dir $(VBOX_UIC));$$BEGINLIBPATH" $(VBOX_UIC)
1473 VBOX_MOC := BEGINLIBPATH="$(VBOX_DLL_QT_PATH)$(dir $(VBOX_MOC));$$BEGINLIBPATH" $(VBOX_MOC)
1474 VBOX_LUPDATE := BEGINLIBPATH="$(VBOX_DLL_QT_PATH)$(dir $(VBOX_LUPDATE));$$BEGINLIBPATH" $(VBOX_LUPDATE)
1475 VBOX_LRELEASE := BEGINLIBPATH="$(VBOX_DLL_QT_PATH)$(dir $(VBOX_LRELEASE));$$BEGINLIBPATH" $(VBOX_LRELEASE)
1476endif
1477
1478#
1479# The linux kernel headers(/sources).
1480#
1481if1of ($(KBUILD_TARGET), linux)
1482 ifeq ($(origin VBOX_LINUX_SRC),undefined)
1483 ifneq ($(wildcard /lib/modules/$(shell uname -r)/build/include/linux/autoconf.h),)
1484 export VBOX_LINUX_SRC := /lib/modules/$(shell uname -r)/build
1485 else
1486 export VBOX_LINUX_SRC := /usr/src/linux
1487 endif
1488 endif
1489 ifneq ($(VBOX_LINUX_SRC),)
1490 ifeq ($(origin VBOX_LINUX_INCS),undefined)
1491 export VBOX_LINUX_INCS := $(VBOX_LINUX_SRC)/include
1492 # support splitted Linux kernels (make O=<build directory>)
1493 kernelsrc := $(shell $(SED_EXT) -ne 's+^KERNELSRC.*= *\(.*\)+\1+p' $(VBOX_LINUX_SRC)/Makefile)
1494 ifneq ($(kernelsrc),)
1495 kernelpath := $(realpath $(VBOX_LINUX_SRC)/$(kernelsrc))
1496 VBOX_LINUX_INCS += $(VBOX_LINUX_SRC)/include2 $(kernelpath)/include
1497 else
1498 kernelpath := $(VBOX_LINUX_SRC)
1499 endif
1500 ifeq ($(KBUILD_TARGET_ARCH),x86)
1501 VBOX_LINUX_INCS += $(kernelpath)/include/asm-i386/mach-default \
1502 $(kernelpath)/include/asm-x86/mach-default
1503 endif
1504 endif
1505 endif
1506endif
1507
1508#
1509# Determine Solaris version.
1510#
1511ifeq ($(KBUILD_TARGET),solaris)
1512 ifeq ($(origin VBOX_SOLARIS_VERSION),undefined)
1513 $(eval export VBOX_SOLARIS_VERSION := $(shell uname -r | $(SED_EXT) 's|\([0-9]*\)\.\([0-9]*\)|$$(int-add $$(int-mul 100, \1), \2)|' ))
1514 endif
1515 ifeq ($(VBOX_SOLARIS_VERSION),510)
1516 DEFS.solaris += RT_OS_SOLARIS_10
1517 # Solaris 10 does not include crossbow.
1518 VBOX_WITH_CROSSBOW =
1519 VBOX_SOLARIS_10 = 1
1520 endif
1521endif
1522
1523
1524#
1525# Template for building GC things.
1526#
1527TEMPLATE_VBOXGC = VBox GC
1528TEMPLATE_VBOXGC_ASTOOL = $(VBOX_ASTOOL)
1529TEMPLATE_VBOXGC_ASFLAGS = $(VBOX_ASFLAGS32)
1530TEMPLATE_VBOXGC_DEFS = IN_GC $(ARCH_BITS_DEFS)
1531TEMPLATE_VBOXGC_SYSSUFF = .gc
1532TEMPLATE_VBOXGC_BLD_TRG_ARCH = x86
1533
1534ifeq ($(VBOX_LDR_FMT32),pe)
1535ifdef VBOX_USE_VCC80
1536 TEMPLATE_VBOXGC_TOOL = VCC80X86
1537 TEMPLATE_VBOXGC_CXXFLAGS = -Zi -Zl -GR- -GS- -EHs-c- -GF- -W3 -wd4244 -wd4996 -Zc:wchar_t- -Gs8192 $(VBOX_VCC_GC_OPT) $(VBOX_VCC_GC_FP)
1538else
1539 TEMPLATE_VBOXGC_TOOL = VCC70
1540 TEMPLATE_VBOXGC_CXXFLAGS = -Zi -Zl -GR- -GX- -GF- -W3 -wd4244 $(VBOX_VCC_GC_OPT) $(VBOX_VCC_GC_FP)
1541endif
1542TEMPLATE_VBOXGC_CFLAGS = $(TEMPLATE_VBOXGC_CXXFLAGS)
1543TEMPLATE_VBOXGC_LDFLAGS = -Driver -Subsystem:NATIVE -Incremental:NO -Align:32 -MapInfo:Lines -MapInfo:Exports -NoD
1544ifdef VBOX_USE_VCC80
1545 include $(KBUILD_PATH)/sdks/W2K3DDKX86.kmk
1546 TEMPLATE_VBOXGC_LIBS = \
1547 $(PATH_SDK_W2K3DDKX86_LIB)/int64.lib
1548else
1549 TEMPLATE_VBOXGC_LIBS = \
1550 $(PATH_TOOL_VCC70_LIB)/libcmt.lib # for 64-bit int
1551endif
1552endif
1553
1554ifeq ($(VBOX_LDR_FMT32),elf)
1555TEMPLATE_VBOXGC_TOOL = $(VBOX_GCC32_TOOL)
1556TEMPLATE_VBOXGC_CXXFLAGS = -g -Wall -pedantic -Wno-long-long -Wno-trigraphs $(VBOX_GCC32_Wno-variadic-macros) -pipe -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)
1557TEMPLATE_VBOXGC_CFLAGS = -g -Wall -pedantic -Wno-long-long -Wno-trigraphs $(VBOX_GCC32_Wno-variadic-macros) -pipe -Wmissing-prototypes -Wstrict-prototypes $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_fvisibility-hidden)
1558ifeq ($(KBUILD_TARGET),solaris)
1559 TEMPLATE_VBOXGC_LDFLAGS = -r
1560else
1561 TEMPLATE_VBOXGC_LDFLAGS = -nostdlib -Bsymbolic
1562 # temporarily, must fix the loader.
1563 TEMPLATE_VBOXGC_LDFLAGS += $(if $(VBOX_DO_STRIP_MODULES),-S,)
1564 TEMPLATE_VBOXGC_LDFLAGS.release = $(if $(VBOX_DO_STRIP_MODULES),-S,)
1565endif
1566ifn1of ($(KBUILD_TARGET), solaris freebsd)
1567 TEMPLATE_VBOXGC_LIBS = \
1568 $(VBOX_GCC32_LIBGCC) # instricts
1569endif
1570endif
1571
1572ifeq ($(VBOX_LDR_FMT32),macho)
1573TEMPLATE_VBOXGC_TOOL = GXX4MACHO
1574TEMPLATE_VBOXGC_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS)
1575TEMPLATE_VBOXGC_CXXFLAGS = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS) -g -Wall -pedantic -Wno-long-long -Wno-trigraphs $(VBOX_GCC32_Wno-variadic-macros) -pipe -fno-common -msoft-float -static -fno-exceptions -fno-rtti $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing
1576TEMPLATE_VBOXGC_CFLAGS = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -g -Wall -pedantic -Wno-long-long -Wno-trigraphs $(VBOX_GCC32_Wno-variadic-macros) -pipe -fno-common -msoft-float -static -Wno-trigraphs -Wmissing-prototypes -Wstrict-prototypes $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing
1577TEMPLATE_VBOXGC_LDFLAGS = $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -nostdlib
1578#TEMPLATE_VBOXGC_LDFLAGS.release = -Wl,-S ???
1579endif
1580
1581ifeq ($(VBOX_LDR_FMT32),lx)
1582TEMPLATE_VBOXGC_TOOL = GXX3OMF
1583TEMPLATE_VBOXGC_CXXFLAGS = -g -Wall -pedantic -Wno-long-long -Wno-trigraphs $(VBOX_GCC32_Wno-variadic-macros) -pipe -fno-exceptions -fno-rtti $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing
1584TEMPLATE_VBOXGC_CFLAGS = -g -Wall -pedantic -Wno-long-long -Wno-trigraphs $(VBOX_GCC32_Wno-variadic-macros) -pipe -Wmissing-prototypes -Wstrict-prototypes $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing
1585TEMPLATE_VBOXGC_LDFLAGS = -Zdll -nostdlib
1586TEMPLATE_VBOXGC_LIBS = \
1587 $(VBOX_GCC32_LIBGCC) \
1588 $(OBJ_SYS0) \
1589 end
1590endif
1591
1592
1593#
1594# Template for building a GC ring-3 testcase (tstVMStructGC, tstDevStructGC).
1595#
1596TEMPLATE_VBOXGCEXE = VBox GC as ring-3 testcase
1597TEMPLATE_VBOXGCEXE_EXTENDS = VBOXGC
1598
1599ifeq ($(VBOX_LDR_FMT32),pe)
1600 TEMPLATE_VBOXGCEXE_LDFLAGS = -Incremental:NO -MapInfo:Exports -NoD -Debug
1601 TEMPLATE_VBOXGCEXE_SDKS = WIN32SDK
1602 ifdef VBOX_USE_VCC80
1603 TEMPLATE_VBOXGCEXE_LIBS = \
1604 $(PATH_TOOL_VCC80X86_LIB)/libcmt.lib \
1605 $(PATH_TOOL_VCC80X86_LIB)/oldnames.lib
1606 else
1607 TEMPLATE_VBOXGCEXE_LIBS = \
1608 $(PATH_TOOL_VCC70_LIB)/libcmt.lib \
1609 $(PATH_TOOL_VCC70_LIB)/oldnames.lib
1610 endif
1611endif
1612
1613ifeq ($(VBOX_LDR_FMT32),elf)
1614 TEMPLATE_VBOXGCEXE_LDFLAGS = -g
1615 TEMPLATE_VBOXGCEXE_LDFLAGS.release = -g
1616endif
1617
1618ifeq ($(VBOX_LDR_FMT32),macho)
1619 TEMPLATE_VBOXGCEXE_CFLAGS = $(filter-out -static,$(TEMPLATE_VBOXGC_CFLAGS))
1620 TEMPLATE_VBOXGCEXE_CXXFLAGS = $(filter-out -static,$(TEMPLATE_VBOXGC_CXXFLAGS))
1621 TEMPLATE_VBOXGCEXE_LDFLAGS = -g
1622endif
1623
1624ifeq ($(VBOX_LDR_FMT32),lx)
1625 TEMPLATE_VBOXGCEXE_LDFLAGS = -g
1626 TEMPLATE_VBOXGCEXE_LIBS = $(NO_SUCH_VARIABLE)
1627endif
1628
1629
1630#
1631# Template for building R0 things.
1632#
1633TEMPLATE_VBOXR0 = VBox Ring 0
1634TEMPLATE_VBOXR0_ASTOOL = $(VBOX_ASTOOL)
1635TEMPLATE_VBOXR0_ASFLAGS = $(VBOX_ASFLAGS)
1636TEMPLATE_VBOXR0_DEFS = IN_RING0 $(ARCH_BITS_DEFS)
1637
1638ifeq ($(VBOX_LDR_FMT),pe)
1639TEMPLATE_VBOXR0_TOOL = $(VBOX_VCC_TOOL)
1640ifdef VBOX_USE_VCC80
1641 TEMPLATE_VBOXR0_CXXFLAGS = -Zi -Zl -GR- -GS- -EHs-c- -GF- -W3 -wd4244 -wd4996 -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
1642else
1643 TEMPLATE_VBOXR0_CXXFLAGS = -Zi -Zl -GR- -GX- -GF- -W3 -wd4244 $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
1644endif
1645TEMPLATE_VBOXR0_CFLAGS = $(TEMPLATE_VBOXR0_CXXFLAGS)
1646TEMPLATE_VBOXR0_LDFLAGS = -Driver -Subsystem:NATIVE -Incremental:NO -Align:32 -MapInfo:Exports -NoD
1647ifdef VBOX_USE_VCC80
1648 TEMPLATE_VBOXR0_LIBS.x86 = \
1649 $(PATH_SDK_W2K3DDKX86_LIB)/int64.lib
1650else
1651 TEMPLATE_VBOXR0_LIBS.x86 = \
1652 $(PATH_TOOL_VCC70_LIB)/libcmt.lib # for 64-bit int
1653endif
1654endif # pe
1655
1656ifeq ($(VBOX_LDR_FMT),elf)
1657TEMPLATE_VBOXR0_TOOL = $(VBOX_GCC_TOOL)
1658TEMPLATE_VBOXR0_CFLAGS = -g -Wall -pedantic -Wno-long-long -Wno-trigraphs $(VBOX_GCC_Wno-variadic-macros) -pipe -Wmissing-prototypes -Wstrict-prototypes $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_fvisibility-hidden)
1659TEMPLATE_VBOXR0_CXXFLAGS = -g -Wall -pedantic -Wno-long-long -Wno-trigraphs $(VBOX_GCC_Wno-variadic-macros) -pipe -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)
1660TEMPLATE_VBOXR0_CFLAGS.amd64 = -m64 -mno-red-zone -mcmodel=kernel -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-asynchronous-unwind-tables -ffreestanding
1661TEMPLATE_VBOXR0_CXXFLAGS.amd64 = -m64 -mno-red-zone -mcmodel=kernel -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-asynchronous-unwind-tables
1662ifeq ($(KBUILD_TARGET),solaris)
1663 TEMPLATE_VBOXR0_LDFLAGS = -r
1664else
1665 TEMPLATE_VBOXR0_LDFLAGS = -nostdlib -Bsymbolic
1666 # temporarily, must fix the loader.
1667 TEMPLATE_VBOXR0_LDFLAGS += $(if $(VBOX_DO_STRIP_MODULES),-S,)
1668 TEMPLATE_VBOXR0_LDFLAGS.release = $(if $(VBOX_DO_STRIP_MODULES),-S,)
1669endif
1670ifn1of ($(KBUILD_TARGET),solaris freebsd)
1671 TEMPLATE_VBOXR0_LIBS = \
1672 $(VBOX_GCC_LIBGCC) # instricts
1673endif
1674endif
1675
1676ifeq ($(VBOX_LDR_FMT),macho)
1677TEMPLATE_VBOXR0_TOOL = GXX4MACHO
1678TEMPLATE_VBOXR0_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS)
1679TEMPLATE_VBOXR0_CXXFLAGS = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS) -g -Wall -pedantic -Wno-long-long -Wno-trigraphs $(VBOX_GCC_Wno-variadic-macros) -pipe -fno-common -msoft-float -static -fno-rtti -fno-exceptions $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing
1680TEMPLATE_VBOXR0_CFLAGS = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -g -Wall -pedantic -Wno-long-long -Wno-trigraphs $(VBOX_GCC_Wno-variadic-macros) -pipe -fno-common -msoft-float -static -Wmissing-prototypes -Wstrict-prototypes $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing
1681TEMPLATE_VBOXR0_LDFLAGS = $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -nostdlib
1682#TEMPLATE_VBOXR0_LDFLAGS.release = -Wl,-S ???
1683endif
1684
1685ifeq ($(VBOX_LDR_FMT),lx)
1686TEMPLATE_VBOXR0_TOOL = GXX3OMF
1687TEMPLATE_VBOXR0_CFLAGS = -g -Wall -pedantic -Wno-long-long -Wno-trigraphs $(VBOX_GCC_Wno-variadic-macros) -pipe -Wmissing-prototypes -Wstrict-prototypes $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing
1688TEMPLATE_VBOXR0_CXXFLAGS = -g -Wall -pedantic -Wno-long-long -Wno-trigraphs $(VBOX_GCC_Wno-variadic-macros) -pipe -fno-rtti -fno-exceptions $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing
1689TEMPLATE_VBOXR0_LDFLAGS = -Zdll -nostdlib
1690TEMPLATE_VBOXR0_LIBS = \
1691 $(VBOX_GCC_LIBGCC) \
1692 $(OBJ_SYS0) \
1693 end
1694endif
1695
1696
1697#
1698# Template for building SUPDRV R0 things.
1699#
1700TEMPLATE_VBOXR0DRV = VBox SUPDRV Ring 0
1701TEMPLATE_VBOXR0DRV_ASTOOL = $(VBOX_ASTOOL)
1702TEMPLATE_VBOXR0DRV_ASFLAGS = $(VBOX_ASFLAGS)
1703TEMPLATE_VBOXR0DRV_DEFS = IN_RING0 IN_RT_R0 $(ARCH_BITS_DEFS)
1704
1705ifeq ($(KBUILD_TARGET),win)
1706 TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_VCC_TOOL)
1707 TEMPLATE_VBOXR0DRV_RCDEFS = \
1708 VBOX_VERSION_MAJOR=\"$(VBOX_VERSION_MAJOR)\" \
1709 VBOX_VERSION_MINOR=\"$(VBOX_VERSION_MINOR)\" \
1710 VBOX_VERSION_BUILD=\"$(VBOX_VERSION_BUILD)\" \
1711 VBOX_SVN_REV=\"$(VBOX_SVN_REV)\" \
1712 VBOX_VERSION_MAJOR_NR=$(VBOX_VERSION_MAJOR) \
1713 VBOX_VERSION_MINOR_NR=$(VBOX_VERSION_MINOR) \
1714 VBOX_VERSION_BUILD_NR=$(VBOX_VERSION_BUILD) \
1715 VBOX_SVN_REV_NR=$(VBOX_SVN_REV)
1716 TEMPLATE_VBOXR0DRV_DEFS.x86 = _X86_
1717 TEMPLATE_VBOXR0DRV_DEFS.amd64 = _AMD64_
1718 ifdef VBOX_USE_VCC80
1719 TEMPLATE_VBOXR0DRV_CXXFLAGS = -Zi -Zl -GR- -GS- -EHs-c- -GF- -Gz -W3 -wd4996 -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
1720 else
1721 TEMPLATE_VBOXR0DRV_CXXFLAGS = -Zi -Zl -GR- -GX- -GF- -Gz -W3 $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
1722 endif
1723 TEMPLATE_VBOXR0DRV_CFLAGS = $(TEMPLATE_VBOXR0DRV_CXXFLAGS)
1724 TEMPLATE_VBOXR0DRV_LDFLAGS = -Driver -Subsystem:NATIVE -Incremental:NO -Align:32 -MapInfo:Exports -NoD -Debug
1725 TEMPLATE_VBOXR0DRV_POST_CMDS = $(VBOX_SIGN_DRIVER_CMDS)
1726endif
1727
1728ifeq ($(KBUILD_TARGET),linux)
1729TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_GCC_TOOL)
1730TEMPLATE_VBOXR0DRV_DEFS = __KERNEL__ MODULE IN_RING0 IN_RT_R0
1731TEMPLATE_VBOXR0DRV_INCS = $(VBOX_LINUX_INCS)
1732TEMPLATE_VBOXR0DRV_CFLAGS = -nostdinc -iwithprefix include \
1733 -Wall -Wstrict-prototypes -Wno-trigraphs $(VBOX_GCC_Wno-pointer-sign) \
1734 $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing -fno-common
1735TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -mpreferred-stack-boundary=2 -msoft-float
1736TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 -mno-red-zone -mcmodel=kernel -mno-sse -mno-mmx -mno-sse2 -mno-3dnow \
1737 -fno-reorder-blocks -ffreestanding -fno-asynchronous-unwind-tables -funit-at-a-time \
1738 -Wno-sign-compare -Wdeclaration-after-statement
1739TEMPLATE_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
1740 ifndef VBOX_LINUX_VERSION_2_4
1741# 2.6
1742TEMPLATE_VBOXR0DRV_SYSSUFF = .ko
1743TEMPLATE_VBOXR0DRV_LDFLAGS.x86 = -m elf_i386 -r
1744TEMPLATE_VBOXR0DRV_LDFLAGS.amd64 = -m elf_x86_64 -r
1745 else
1746# 2.4
1747TEMPLATE_VBOXR0DRV_SYSSUFF = .o
1748TEMPLATE_VBOXR0DRV_LDFLAGS = -r -s
1749 endif
1750endif
1751
1752ifeq ($(KBUILD_TARGET),os2)
1753TEMPLATE_VBOXR0DRV_TOOL = GXX3OMF
1754TEMPLATE_VBOXR0DRV_CXXFLAGS = -g -Wall -pedantic -Wno-long-long -Wno-trigraphs $(VBOX_GCC_Wno-variadic-macros) -pipe $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing -fno-rtti -fno-exceptions
1755TEMPLATE_VBOXR0DRV_CFLAGS = -g -Wall -pedantic -Wno-long-long -Wno-trigraphs $(VBOX_GCC_Wno-variadic-macros) -pipe -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing
1756TEMPLATE_VBOXR0DRV_LIBS = $(VBOX_GCC_LIBGCC)
1757# wlink thinks physdevice doesn't need fixups and should have a stack - stupid!
1758TEMPLATE_VBOXR0DRV_LDFLAGS = -Zlinker Option -Zlinker internalrelocs, -Zlinker togglerelocs
1759endif
1760
1761ifeq ($(KBUILD_TARGET),darwin)
1762TEMPLATE_VBOXR0DRV_TOOL = GXX4MACHO
1763TEMPLATE_VBOXR0DRV_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS) KERNEL KERNEL_PRIVATE DRIVER_PRIVATE APPLE NeXT
1764# I didn't really know why we have to state explicitly the position of the
1765# sdk headers. Maybe it has something to do with the fact that the kernel.framework
1766# isn't a real framework according to http://developer.apple.com/qa/qa2001/qa1096.html.
1767TEMPLATE_VBOXR0DRV_INCS += $(VBOX_PATH_MACOSX_SDK)/System/Library/Frameworks/Kernel.framework/Headers
1768TEMPLATE_VBOXR0DRV_CXXFLAGS = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS) \
1769 -g -Wall -Wno-long-long -Wno-trigraphs -pipe -fno-common -nostdinc -fno-builtin -finline \
1770 -fno-keep-inline-functions -force_cpusubtype_ALL -fno-exceptions -msoft-float -static \
1771 -fapple-kext -fno-rtti -fcheck-new
1772TEMPLATE_VBOXR0DRV_CXXFLAGS.release = $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing -fasm-blocks
1773TEMPLATE_VBOXR0DRV_CXXFLAGS.profile = $(TEMPLATE_VBOXR0DRV_CXXFLAGS.release)
1774TEMPLATE_VBOXR0DRV_CXXFLAGS.kprofile = $(TEMPLATE_VBOXR0DRV_CXXFLAGS.release)
1775TEMPLATE_VBOXR0DRV_CFLAGS = $(VBOX_DARWIN_DEF_SDK_CFLAGS) \
1776 -g -Wall -Wno-long-long -Wno-trigraphs -pipe -fno-common -nostdinc -fno-builtin -finline \
1777 -fno-keep-inline-functions -force_cpusubtype_ALL -fno-exceptions -msoft-float -static \
1778 -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations
1779TEMPLATE_VBOXR0DRV_CFLAGS.release = $(TEMPLATE_VBOXR0DRV_CXXFLAGS.release)
1780TEMPLATE_VBOXR0DRV_CFLAGS.profile = $(TEMPLATE_VBOXR0DRV_CXXFLAGS.profile)
1781TEMPLATE_VBOXR0DRV_CFLAGS.kprofile = $(TEMPLATE_VBOXR0DRV_CXXFLAGS.kprofile)
1782TEMPLATE_VBOXR0DRV_LDFLAGS = $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -static -nostdlib -r -Wl,-Y,1455
1783TEMPLATE_VBOXR0DRV_LIBS = kmodc++ kmod cc_kext cpp_kext $(VBOX_GCC_LIBGCC)
1784endif
1785
1786ifeq ($(KBUILD_TARGET),solaris)
1787## The Solaris /usr/platform/i86pc/include and /usr/include directories.
1788VBOX_SOLARIS_SYS_INCS ?= /usr/platform/i86pc/include /usr/include
1789
1790TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_GCC_TOOL)
1791TEMPLATE_VBOXR0DRV_DEFS = _KERNEL _STRICT_STDC IN_RING0 IN_RT_R0
1792TEMPLATE_VBOXR0DRV_INCS = $(VBOX_SOLARIS_SYS_INCS)
1793TEMPLATE_VBOXR0DRV_LDFLAGS = -r
1794ifdef VBOX_WITH_SOLARIS_VBI
1795 TEMPLATE_VBOXR0DRV_LDFLAGS += -dy -N misc/vbi
1796endif
1797TEMPLATE_VBOXR0DRV_LDFLAGS.amd64 = -64
1798# Exclude -Wall because of solaris headers' pragma ident warnings that gcc refuses to supress.
1799TEMPLATE_VBOXR0DRV_CFLAGS = -Wno-trigraphs -Wpointer-arith -Winline $(VBOX_GCC_Wno-pointer-sign) \
1800 -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs \
1801 -O2 -ffreestanding -nodefaultlibs -fno-strict-aliasing -fno-common -std=c99
1802TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow
1803TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow $(if $(VBOX_SOLARIS_10),,-msave-args) -mno-red-zone -mcmodel=kernel \
1804 -fno-reorder-blocks -fno-asynchronous-unwind-tables -funit-at-a-time
1805TEMPLATE_VBOXR0DRV_CXXFLAGS = -Wno-trigraphs -Wpointer-arith -Winline $(VBOX_GCC_Wno-pointer-sign) \
1806 -O2 -nodefaultlibs -fno-strict-aliasing -fno-common
1807TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = $(TEMPLATE_VBOXR0DRV_CFLAGS.x86)
1808TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64 = $(TEMPLATE_VBOXR0DRV_CFLAGS.amd64)
1809endif # Solaris
1810
1811ifeq ($(KBUILD_TARGET),freebsd)
1812# x86 FreeBSD:
1813# cc -O2 -fno-strict-aliasing -pipe -Werror -D_KERNEL -DKLD_MODULE \
1814# -nostdinc -I- -I. -I@ -I@/contrib/altq -I@/../include -I/usr/include \
1815# -finline-limit=8000 -fno-common -mno-align-long-strings -mpreferred-stack-boundary=2 \
1816# -mno-mmx -mno-3dnow -mno-sse -mno-sse2 -ffreestanding -Wall -Wredundant-decls -Wnested-externs \
1817# -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -fformat-extensions \
1818# -std=c99 -c ../my.c
1819# ld -d -warn-common -r -d -o my.kld my.o
1820# :> export_syms
1821# awk -f /usr/src/sys/modules/my/../../conf/kmod_syms.awk my.kld export_syms | xargs -J% objcopy % my.kld
1822# ld -Bsharable -d warn-commnon -o my.ko my.kld
1823#
1824# Note: @ -> /usr/src/sys and machine -> /usr/src/sys/i386/include
1825
1826## The location of the FreeBSD kernel source.
1827VBOX_FREEBSD_SRC ?= /usr/src/sys
1828## The FreeBSD /usr/include.
1829VBOX_FREEBSD_SYS_INCS ?= /usr/include
1830
1831TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_GCC_TOOL)
1832TEMPLATE_VBOXR0DRV_LDTOOL = FREEBSDKMODLD
1833TEMPLATE_VBOXR0DRV_DEFS = _KERNEL KLD_MODULE IN_RING0 IN_RT_R0
1834TEMPLATE_VBOXR0DRV_INCS = \
1835 $(VBOX_FREEBSD_SRC) \
1836 $(VBOX_FREEBSD_SRC)/contrib/altq \
1837 $(VBOX_FREEBSD_SRC)/../include \
1838 $(VBOX_FREEBSD_SYS_INCS)
1839# omitting: -Wcast-qual, -Wredundant-decls
1840TEMPLATE_VBOXR0DRV_CFLAGS = \
1841 -Wall -Wno-trigraphs -Wpointer-arith -Winline $(VBOX_GCC_Wno-pointer-sign) \
1842 -Wstrict-prototypes -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs \
1843 -O2 -fformat-extensions -ffreestanding -fno-strict-aliasing -fno-common -finline-limit=8000 \
1844 $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_OPT) $(VBOX_GCC_FP) \
1845 -nostdinc -std=c99
1846TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -mno-align-long-strings -mpreferred-stack-boundary=2 -mno-mmx -mno-3dnow -mno-sse -mno-sse2
1847TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 "Port me to amd64 FreeBSD"
1848TEMPLATE_VBOXR0DRV_CXXFLAGS = -fno-exceptions -fno-rtti \
1849 -Wall -Wno-trigraphs -Wpointer-arith -Winline $(VBOX_GCC_Wno-pointer-sign) \
1850 -O2 -fno-format-extensions -fno-strict-aliasing -fno-common -finline-limit=8000 \
1851 $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_OPT) $(VBOX_GCC_FP) \
1852 -nostdinc
1853TEMPLATE_VBOXR0DRV_SYSSUFF = .ko
1854TEMPLATE_VBOXR0DRV_LDFLAGS = -d --warn-common
1855TEMPLATE_VBOXR0DRV_LDFLAGS.x86 = -m elf_i386_fbsd
1856TEMPLATE_VBOXR0DRV_LDFLAGS.amd64 = -m elf_x86_64 "Port me to amd64 FreeBSD"
1857
1858TOOL_FREEBSDKMODLD = FreeBSD kernel module linker.
1859# See kBuild/tools/GCC3.kmk for docs.
1860TOOL_FREEBSDKMODLD_LINK_SYSMOD_OUTPUT = $(outbase).kld
1861TOOL_FREEBSDKMODLD_LINK_SYSMOD_OUTPUT_MAYBE = $(outbase).map
1862TOOL_FREEBSDKMODLD_LINK_SYSMOD_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib)))
1863TOOL_FREEBSDKMODLD_LINK_SYSMOD_DEPORD =
1864define TOOL_FREEBSDKMODLD_LINK_SYSMOD_CMDS
1865 @# Link intermediate .kld (a relocatable object).
1866 ld $(flags) -r -o $(outbase).kld $(objs) \
1867 $(foreach p,$(libpath), -L$(p))\
1868 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(basename $(lib))), $(lib)))
1869 @# Strip non-exported symbols private and localize the exported ones.
1870 awk -f $(VBOX_FREEBSD_SRC)/conf/kmod_syms.awk $(outbase).kld $(if $(othersrc), $(othersrc),/dev/null) \
1871 | xargs -J% objcopy % $(outbase).kld
1872 @# Link the final .ko (a shared object).
1873 ld $(flags) -Bshareable -o $(out) $(outbase).kld
1874endef
1875
1876endif # FreeBSD
1877
1878ifdef VBOX_WITH_VBOXDRV
1879 ifndef TEMPLATE_VBOXR0DRV_TOOL
1880 $(warning Warning: VBox Build: Target $(KBUILD_HOST) is not officially supported!)
1881 endif
1882endif
1883
1884
1885
1886#
1887# Template for building R3 executables and static libraries which are linked into executables.
1888# Note! This is the base template for a whole lot of other ones, so be careful when changing it.
1889#
1890TEMPLATE_VBOXR3EXE = VBox Ring 3 Exe
1891TEMPLATE_VBOXR3EXE_ASTOOL = $(VBOX_ASTOOL)
1892TEMPLATE_VBOXR3EXE_ASFLAGS = $(VBOX_ASFLAGS)
1893TEMPLATE_VBOXR3EXE_DEFS = IN_RING3 $(ARCH_BITS_DEFS)
1894TEMPLATE_VBOXR3EXE_LIBS.kprofile = $(LIB_KPROFILE)
1895ifeq ($(KBUILD_TARGET),win)
1896 TEMPLATE_VBOXR3EXE_TOOL = $(VBOX_VCC_TOOL)
1897 TEMPLATE_VBOXR3EXE_RCDEFS = \
1898 VBOX_VERSION_MAJOR=\"$(VBOX_VERSION_MAJOR)\" \
1899 VBOX_VERSION_MINOR=\"$(VBOX_VERSION_MINOR)\" \
1900 VBOX_VERSION_BUILD=\"$(VBOX_VERSION_BUILD)\" \
1901 VBOX_SVN_REV=\"$(VBOX_SVN_REV)\" \
1902 VBOX_VERSION_MAJOR_NR=$(VBOX_VERSION_MAJOR) \
1903 VBOX_VERSION_MINOR_NR=$(VBOX_VERSION_MINOR) \
1904 VBOX_VERSION_BUILD_NR=$(VBOX_VERSION_BUILD) \
1905 VBOX_SVN_REV_NR=$(VBOX_SVN_REV)
1906 TEMPLATE_VBOXR3EXE_SDKS = WINPSDK
1907 ifdef VBOX_USE_VCC80
1908 TEMPLATE_VBOXR3EXE_CXXFLAGS = -Zi -Zl -GR- -EHs-c- -GF- -MD -W3 -wd4065 -wd4244 -wd4996 -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
1909 TEMPLATE_VBOXR3EXE_CXXFLAGS.debug = -RTCsu
1910 else
1911 TEMPLATE_VBOXR3EXE_CXXFLAGS = -Zi -Zl -GR- -GX- -GF- -MD -W3 -wd4065 -wd4244 $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
1912 TEMPLATE_VBOXR3EXE_CXXFLAGS.debug = -GZ
1913 endif
1914 TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile = -Gh -GH
1915 TEMPLATE_VBOXR3EXE_CFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS)
1916 TEMPLATE_VBOXR3EXE_CFLAGS.debug = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.debug)
1917 TEMPLATE_VBOXR3EXE_CFLAGS.kprofile = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile)
1918 TEMPLATE_VBOXR3EXE_LDFLAGS = \
1919 /NOD /INCREMENTAL:NO /MAPINFO:EXPORTS /LARGEADDRESSAWARE /DEBUG \
1920 /DISALLOWLIB:libc.lib \
1921 /DISALLOWLIB:libcd.lib \
1922 /DISALLOWLIB:libcmt.lib \
1923 /DISALLOWLIB:libcmtd.lib \
1924 /DISALLOWLIB:msvcrtd.lib
1925 TEMPLATE_VBOXR3EXE_LIBS = \
1926 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcrt.lib \
1927 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcprt.lib \
1928 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/oldnames.lib
1929 TEMPLATE_VBOXR3EXE_POST_CMDS = $(VBOX_SIGN_IMAGE_CMDS)
1930
1931else # the gcc guys
1932TEMPLATE_VBOXR3EXE_TOOL = $(VBOX_GCC_TOOL)
1933TEMPLATE_VBOXR3EXE_CXXFLAGS = -g -Wall -pedantic -Wno-long-long -Wno-trigraphs $(VBOX_GCC_Wno-variadic-macros) -pipe $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_fvisibility-hidden)
1934TEMPLATE_VBOXR3EXE_CXXFLAGS.x86 = -m32
1935TEMPLATE_VBOXR3EXE_CXXFLAGS.amd64 = -m64
1936# L4 currently can't handle exception handling.
1937TEMPLATE_VBOXR3EXE_CXXFLAGS.l4 = -fno-exceptions -nostdinc \
1938 $(addprefix -I,$(VBOX_PATH_GCC_INCS) $(L4_INCDIR) $(FILE_TOOL_GPP3_INCDIR)) \
1939 $(DEBUG_L4)
1940TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile = -finstrument-functions
1941TEMPLATE_VBOXR3EXE_CFLAGS = -g -Wall -pedantic -Wno-long-long -Wno-trigraphs $(VBOX_GCC_Wno-variadic-macros) -pipe -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing $(VBOX_GCC_fvisibility-hidden)
1942TEMPLATE_VBOXR3EXE_CFLAGS.x86 = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.x86)
1943TEMPLATE_VBOXR3EXE_CFLAGS.amd64 = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.amd64)
1944TEMPLATE_VBOXR3EXE_CFLAGS.debug = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.debug)
1945TEMPLATE_VBOXR3EXE_CFLAGS.kprofile = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile)
1946TEMPLATE_VBOXR3EXE_CFLAGS.l4 = -nostdinc \
1947 $(addprefix -I,$(VBOX_PATH_GCC_INCS) $(L4_INCDIR)) $(DEBUG_L4)
1948TEMPLATE_VBOXR3EXE_DEFS.l4 = L4_THREAD_SAFE
1949TEMPLATE_VBOXR3EXE_LDFLAGS.x86 = -m32
1950TEMPLATE_VBOXR3EXE_LDFLAGS.amd64 = -m64
1951TEMPLATE_VBOXR3EXE_LDFLAGS.l4 = \
1952 $(L4_LIBDIR)/../crt0.o \
1953 -T$(L4_LIBDIR)/../main_dyn.ld -nostdlib \
1954 -Wl,--export-dynamic,--dynamic-linker=libld-l4.s.so \
1955 -Wl,--rpath-link,$(L4_LIBDIR)
1956TEMPLATE_VBOXR3EXE_LDFLAGS.linux = -Wl,-z,noexecstack $(VBOX_LD_as_needed)
1957 ifeq ($(KBUILD_TARGET),linux)
1958TEMPLATE_VBOXR3EXE_LIBS = pthread m rt dl
1959 else ifeq ($(KBUILD_TARGET),l4)
1960TEMPLATE_VBOXR3EXE_LIBS = \
1961 $(L4_LIBDIR)/libvboxserver.s.so \
1962 $(L4_LIBDIR)/libuc++.0.s.so \
1963 supc++ gcc_eh gcc \
1964 $(L4_LIBDIR)/libdl.s.so \
1965 $(L4_LIBDIR)/libuc.0.s.so
1966 else ifeq ($(KBUILD_TARGET),os2)
1967TEMPLATE_VBOXR3EXE_TOOL = GXX3OMF
1968TEMPLATE_VBOXR3EXE_LIBS = socket iconv
1969 else ifeq ($(KBUILD_TARGET),darwin)
1970TEMPLATE_VBOXR3EXE_TOOL = GXX4MACHO
1971TEMPLATE_VBOXR3EXE_LIBS =
1972TEMPLATE_VBOXR3EXE_DEFS.darwin = $(VBOX_DARWIN_DEF_SDK_DEFS)
1973TEMPLATE_VBOXR3EXE_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -fno-common
1974TEMPLATE_VBOXR3EXE_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
1975TEMPLATE_VBOXR3EXE_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_OBJCFLAGS)
1976TEMPLATE_VBOXR3EXE_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -read_only_relocs suppress
1977 else if1of ($(KBUILD_TARGET),freebsd netbsd openbsd)
1978TEMPLATE_VBOXR3EXE_TOOL = GXX3
1979TEMPLATE_VBOXR3EXE_LIBS = pthread
1980TEMPLATE_VBOXR3EXE_INCS += \
1981 /usr/include \
1982 /usr/X11R6/include \
1983 /usr/local/include
1984 else ifeq ($(KBUILD_TARGET),solaris)
1985TEMPLATE_VBOXR3EXE_TOOL = GXX3PLAIN
1986TEMPLATE_VBOXR3EXE_DEFS += LIBICONV_PLUG _REENTRANT # Avoid the GNU libiconv, for now at least.
1987TEMPLATE_VBOXR3EXE_LIBS = rt socket
1988 else
1989$(warning Warning: VBOX Build: Target $(KBUILD_TARGET) is not officially supported!)
1990TEMPLATE_VBOXR3EXE_CXXFLAGS.profile = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.release)
1991TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile = $(TEMPLATE_VBOXR3EXE_CXXFLAGS.krelease)
1992 endif
1993 ifdef VBOX_WITH_ORIGIN
1994 TEMPLATE_VBOXR3EXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$$(VBOX_ORIGIN)'
1995 endif
1996endif
1997
1998#
1999# Template for building R3 shared objects / DLLs.
2000# This is mostly identical to the VBOXR3EXE template. (Avoid PIC if possible!)
2001#
2002TEMPLATE_VBOXR3 = VBox Ring 3 SO/DLLs
2003TEMPLATE_VBOXR3_EXTENDS = VBOXR3EXE
2004TEMPLATE_VBOXR3_LDFLAGS.l4 = $(L4_LIBDIR)/../crt0.s.o -T$(L4_LIBDIR)/../main_rel.ld -nostdlib
2005TEMPLATE_VBOXR3_DEFS.l4 = $(TEMPLATE_VBOXR3EXE_DEFS.l4) __PIC__
2006TEMPLATE_VBOXR3_DEFS.darwin = $(TEMPLATE_VBOXR3EXE_DEFS.darwin) PIC
2007ifeq ($(filter-out solaris.x86 %.amd64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),)
2008 ifneq ($(KBUILD_TARGET),win)
2009 TEMPLATE_VBOXR3_DEFS = $(TEMPLATE_VBOXR3EXE_DEFS) PIC
2010 TEMPLATE_VBOXR3_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS) -fPIC
2011 TEMPLATE_VBOXR3_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -fPIC
2012 TEMPLATE_VBOXR3_LDFLAGS = $(TEMPLATE_VBOXR3EXE_LDFLAGS) -fPIC
2013 endif
2014endif
2015
2016#
2017# Ring-3 testcase.
2018# This is the VBOXR3EXE template only with a different install dir.
2019#
2020TEMPLATE_VBOXR3TSTEXE = VBox Ring 3 Testcase Exe
2021TEMPLATE_VBOXR3TSTEXE_EXTENDS = VBOXR3EXE
2022TEMPLATE_VBOXR3TSTEXE_INST = $(INST_TESTCASE)
2023TEMPLATE_VBOXR3TSTEXE_LIBS = $(LIB_RUNTIME) $(TEMPLATE_VBOXR3EXE_LIBS)
2024ifdef VBOX_WITH_ORIGIN
2025 TEMPLATE_VBOXR3TSTEXE_LDFLAGS= '$(VBOX_GCC_RPATH_OPT)$$(VBOX_ORIGIN)/..' $(TEMPLATE_VBOXR3EXE_LDFLAGS)
2026endif
2027ifeq ($(KBUILD_TARGET),win)
2028 ifdef VBOX_SIGNING_MODE
2029 TEMPLATE_VBOXR3TSTEXE_POST_CMDS =
2030 endif
2031endif
2032
2033#
2034# Template for the CppUnit kind of testcases.
2035#
2036TEMPLATE_VBOXCPPUNITEXE = VBox CppUnit Testcase Exe
2037TEMPLATE_VBOXCPPUNITEXE_EXTENDS = VBOXR3TSTEXE
2038## @todo make a CPPUNIT SDK and add cppunit tools packages for windows, mac, solaris and OS/2.
2039#TEMPLATE_VBOXCPPUNITEXE_SDKS = CPPUNIT -
2040TEMPLATE_VBOXCPPUNITEXE_LIBS = \
2041 $(TEMPLATE_VBOXR3TSTEXE_LIBS) \
2042 cppunit
2043
2044#
2045# Template for building bad C/C++ style R3 executables (no -pedantic).
2046#
2047TEMPLATE_VBOXR3NPEXE = VBox Ring 3 Non-pedantic
2048TEMPLATE_VBOXR3NPEXE_EXTENDS = VBOXR3EXE
2049ifneq ($(KBUILD_TARGET),win) # (only gcc)
2050 TEMPLATE_VBOXR3NPEXE_TOOL = $(VBOX_GCC_TOOL)
2051 TEMPLATE_VBOXR3NPEXE_CXXFLAGS = $(filter-out -pedantic,$(TEMPLATE_VBOXR3EXE_CXXFLAGS))
2052 TEMPLATE_VBOXR3NPEXE_CFLAGS = $(filter-out -pedantic -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations,$(TEMPLATE_VBOXR3EXE_CFLAGS))
2053endif
2054
2055
2056#
2057# Template for building bad C/C++ style R3 shared libraries / Dlls (no -pedantic).
2058# This is mostly identical to the VBOXR3NPEXE template.
2059#
2060TEMPLATE_VBOXR3NP= VBox Ring 3 Non-pedantic
2061TEMPLATE_VBOXR3NP_EXTENDS = VBOXR3NPEXE
2062TEMPLATE_VBOXR3NP_LDFLAGS.l4 = \
2063 $(L4_LIBDIR)/../crt0.s.o \
2064 -T$(L4_LIBDIR)/../main_rel.ld \
2065 -nostdlib
2066TEMPLATE_VBOXR3NP_DEFS.l4 = $(TEMPLATE_VBOXR3NPEXE_DEFS.l4) __PIC__
2067ifeq ($(filter-out solaris.x86 %.amd64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),)
2068 ifneq ($(KBUILD_TARGET),win)
2069 TEMPLATE_VBOXR3NP_DEFS = $(TEMPLATE_VBOXR3NPEXE_DEFS) PIC
2070 TEMPLATE_VBOXR3NP_CFLAGS = $(TEMPLATE_VBOXR3NPEXE_CFLAGS) -fPIC
2071 TEMPLATE_VBOXR3NP_CXXFLAGS = $(TEMPLATE_VBOXR3NPEXE_CXXFLAGS) -fPIC
2072 TEMPLATE_VBOXR3NP_LDFLAGS = $(TEMPLATE_VBOXR3NPEXE_LDFLAGS) -fPIC
2073 endif
2074endif
2075
2076
2077#
2078# Template for building libraries, shared libraries / modules
2079# which only depends on IPRT for crt.
2080#
2081TEMPLATE_VBOXNOCRTGCC = VBox no-crt GCC libraries and modules, yasm/nasm.
2082TEMPLATE_VBOXNOCRTGCC_DEFS = IN_RING3 IPRT_NO_CRT $(ARCH_BITS_DEFS)
2083TEMPLATE_VBOXNOCRTGCC_ASDEFS = ASM_CALL64_GCC
2084TEMPLATE_VBOXNOCRTGCC_CFLAGS = -nostdinc -fno-strict-aliasing -fno-math-errno -Wall
2085TEMPLATE_VBOXNOCRTGCC_CFLAGS.x86 = -m32
2086TEMPLATE_VBOXNOCRTGCC_CFLAGS.amd64 = -m64 -mcmodel=medium -fno-common
2087TEMPLATE_VBOXNOCRTGCC_CFLAGS.release = -O2 -fno-strict-aliasing
2088TEMPLATE_VBOXNOCRTGCC_CFLAGS.profile = $(TEMPLATE_VBOXNOCRTGCC_CFLAGS.release)
2089TEMPLATE_VBOXNOCRTGCC_CFLAGS.kprofile = $(TEMPLATE_VBOXNOCRTGCC_CFLAGS.release)
2090ifdef VBOX_TARGET_MAC_OS_X_VERSION_10_5 ## @todo this probably works for 10.4 too, check.
2091 TEMPLATE_VBOXNOCRTGCC_CFLAGS.darwin = -static
2092else
2093 TEMPLATE_VBOXNOCRTGCC_CFLAGS.darwin = -mdynamic-no-pic
2094endif
2095TEMPLATE_VBOXNOCRTGCC_CXXFLAGS = $(TEMPLATE_VBOXNOCRTGCC_CFLAGS)
2096TEMPLATE_VBOXNOCRTGCC_CXXFLAGS.$(KBUILD_TARGET) = $(TEMPLATE_VBOXNOCRTGCC_CFLAGS.$(KBUILD_TARGET))
2097TEMPLATE_VBOXNOCRTGCC_CXXFLAGS.$(KBUILD_TARGET_ARCH) = $(TEMPLATE_VBOXNOCRTGCC_CFLAGS.$(KBUILD_TARGET_ARCH))
2098TEMPLATE_VBOXNOCRTGCC_INCS = $(PATH_ROOT)/include/iprt/nocrt
2099
2100ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),win.amd64)
2101 # cross compile to 64-bit ELF (linux).
2102 TEMPLATE_VBOXNOCRTGCC_TOOL = XGCCAMD64LINUX
2103 TEMPLATE_VBOXNOCRTGCC_ASTOOL = YASM
2104 TEMPLATE_VBOXNOCRTGCC_ASFLAGS = -f elf64 -DASM_FORMAT_ELF -D__YASM__ -w+orphan-labels -g dwarf2
2105 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
2106 TEMPLATE_VBOXNOCRTGCC_LDFLAGS = -nostdlib
2107
2108else ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),win.x86)
2109 # Use the default GCC (MinGW) with the Microsoft linker.
2110 # (Drop all '-g' options as we're unable to strip the debug info.)
2111 TEMPLATE_VBOXNOCRTGCC_TOOL = $(VBOX_GCC_TOOL)
2112 TEMPLATE_VBOXNOCRTGCC_ASTOOL = $(VBOX_ASTOOL)
2113 TEMPLATE_VBOXNOCRTGCC_ASFLAGS = $(VBOX_ASFLAGS)
2114 TEMPLATE_VBOXNOCRTGCC_LDTOOL = $(VBOX_VCC_TOOL)
2115 TEMPLATE_VBOXNOCRTGCC_LDFLAGS = -Incremental:NO -MapInfo:Exports -NoD
2116 TEMPLATE_VBOXNOCRTGCC_LIBS = $(VBOX_GCC_LIBGCC)
2117 TEMPLATE_VBOXNOCRTGCC_CFLAGS := $(filter-out -g,$(TEMPLATE_VBOXNOCRTGCC_CFLAGS)) -s
2118
2119else
2120 # Use the default GCC.
2121 # The use of --exclude-libs ALL is to avoid confusing the linux ld.so.
2122 TEMPLATE_VBOXNOCRTGCC_TOOL = $(VBOX_GCC_TOOL)
2123 TEMPLATE_VBOXNOCRTGCC_ASTOOL = $(VBOX_ASTOOL)
2124 TEMPLATE_VBOXNOCRTGCC_ASFLAGS = $(VBOX_ASFLAGS)
2125 TEMPLATE_VBOXNOCRTGCC_CFLAGS += $(VBOX_GCC_fno-stack-protector)
2126 TEMPLATE_VBOXNOCRTGCC_CXXFLAGS += $(VBOX_GCC_fno-stack-protector)
2127 ifeq ($(KBUILD_TARGET_ARCH),amd64)
2128 # in 64-bit mode we'll build a sys-module (VBoxREM2).
2129 if1of ($(KBUILD_TARGET),darwin solaris)
2130 TEMPLATE_VBOXNOCRTGCC_LDFLAGS.solaris= -64 -r
2131 else
2132 TEMPLATE_VBOXNOCRTGCC_LDFLAGS = -nostdlib
2133 endif
2134 else # x86:
2135 TEMPLATE_VBOXNOCRTGCC_LDFLAGS = -nostdlib
2136 ifn1of ($(KBUILD_TARGET), os2 darwin solaris)
2137 TEMPLATE_VBOXNOCRTGCC_LDFLAGS += -Wl,--no-undefined
2138 endif
2139 endif # x86
2140 TEMPLATE_VBOXNOCRTGCC_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_LDFLAGS)
2141 TEMPLATE_VBOXNOCRTGCC_LIBS = # FIXME - has unwind mess.
2142endif
2143
2144
2145#
2146# Same as VBOXNOCRTGCC only it uses GAS as the assembler instead of yasm/nasm.
2147#
2148TEMPLATE_VBOXNOCRTGAS = VBox no-crt GCC libraries and modules, gas.
2149TEMPLATE_VBOXNOCRTGAS_EXTENDS = VBOXNOCRTGCC
2150TEMPLATE_VBOXNOCRTGAS_ASTOOL = $(TEMPLATE_VBOXNOCRTGCC_TOOL)
2151ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),win.x86)
2152 TEMPLATE_VBOXNOCRTGAS_ASFLAGS = -s
2153else
2154 TEMPLATE_VBOXNOCRTGAS_ASFLAGS = -g
2155endif
2156TEMPLATE_VBOXNOCRTGAS_ASFLAGS.x86 = -m32
2157TEMPLATE_VBOXNOCRTGAS_ASFLAGS.amd64 = -m64
2158
2159
2160#
2161# Template for building executables that are part of the VBox Main component
2162# (COM/XPCOM interface to VirtualBox).
2163#
2164TEMPLATE_VBOXMAINEXE = VBox Main Executable
2165TEMPLATE_VBOXMAINEXE_ASTOOL = $(VBOX_ASTOOL)
2166TEMPLATE_VBOXMAINEXE_ASFLAGS = $(VBOX_ASFLAGS)
2167TEMPLATE_VBOXMAINEXE_DEFS = IN_RING3 UNICODE NDEBUG=1
2168TEMPLATE_VBOXMAINEXE_DEFS.win = _UNICODE
2169TEMPLATE_VBOXMAINEXE_RCDEFS = $(TEMPLATE_VBOXR3EXE_RCDEFS)
2170TEMPLATE_VBOXMAINEXE_LIBS.kprofile = $(LIB_KPROFILE)
2171TEMPLATE_VBOXMAINEXE_INCS = \
2172 $(VBOX_PATH_SDK)/include
2173
2174ifeq ($(KBUILD_TARGET),win)
2175 TEMPLATE_VBOXMAINEXE_SDKS = WINPSDK W2K3DDK
2176 ifdef VBOX_USE_VCC80
2177 TEMPLATE_VBOXMAINEXE_TOOL = $(VBOX_VCC_TOOL)
2178 TEMPLATE_VBOXMAINEXE_CXXFLAGS = -Zi -Zl -GR -GF- -MD -EHsc -W3 -wd4065 -wd4996 -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
2179 TEMPLATE_VBOXMAINEXE_CXXFLAGS.debug = -RTCsu
2180 else
2181 TEMPLATE_VBOXMAINEXE_TOOL = VCC70
2182 TEMPLATE_VBOXMAINEXE_CXXFLAGS = -Zi -Zl -GR -GX- -GF- -MD -EHsc -W3 -wd4065 $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
2183 TEMPLATE_VBOXMAINEXE_CXXFLAGS.debug = -GZ
2184 endif
2185 TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile = -Gh -GH
2186 TEMPLATE_VBOXMAINEXE_CFLAGS = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS)
2187 TEMPLATE_VBOXMAINEXE_CFLAGS.debug = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.debug)
2188 TEMPLATE_VBOXMAINEXE_CFLAGS.kprofile = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile)
2189 TEMPLATE_VBOXMAINEXE_INCS += \
2190 $(PATH_TOOL_$(VBOX_VCC_TOOL)_ATLMFC_INC)
2191 TEMPLATE_VBOXMAINEXE_LDFLAGS = \
2192 /NOD /INCREMENTAL:NO /MAPINFO:EXPORTS /LARGEADDRESSAWARE /DEBUG\
2193 /DISALLOWLIB:libc.lib \
2194 /DISALLOWLIB:libcd.lib \
2195 /DISALLOWLIB:msvcrt.lib \
2196 /DISALLOWLIB:msvcrtd.lib \
2197 /DISALLOWLIB:libcmtd.lib \
2198 /DISALLOWLIB:libcmt.lib
2199 TEMPLATE_VBOXMAINEXE_LIBS = \
2200 $(LIB_RUNTIME) \
2201 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcrt.lib \
2202 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcprt.lib \
2203 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/oldnames.lib \
2204 $(PATH_TOOL_$(VBOX_VCC_TOOL)_ATLMFC_LIB)/atls.lib
2205 TEMPLATE_VBOXMAINEXE_POST_CMDS = $(VBOX_SIGN_IMAGE_CMDS)
2206
2207else # the GCC guys:
2208
2209TEMPLATE_VBOXMAINEXE_TOOL = $(VBOX_GCC_TOOL)
2210TEMPLATE_VBOXMAINEXE_CXXFLAGS = -g -Wall -Wno-long-long -Wno-trigraphs -pipe -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)
2211TEMPLATE_VBOXMAINEXE_CXXFLAGS.x86 = -m32
2212TEMPLATE_VBOXMAINEXE_CXXFLAGS.amd64 = -m64
2213TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile = -finstrument-functions
2214TEMPLATE_VBOXMAINEXE_CFLAGS = -g -Wall -Wno-long-long -Wno-trigraphs -pipe -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing $(VBOX_GCC_fvisibility-hidden)
2215TEMPLATE_VBOXMAINEXE_CFLAGS.x86 = -m32
2216TEMPLATE_VBOXMAINEXE_CFLAGS.amd64 = -m64
2217TEMPLATE_VBOXMAINEXE_CFLAGS.kprofile = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile)
2218TEMPLATE_VBOXMAINEXE_LDFLAGS.x86 = -m32
2219TEMPLATE_VBOXMAINEXE_LDFLAGS.amd64 = -m64
2220 ifeq ($(KBUILD_TARGET),linux)
2221TEMPLATE_VBOXMAINEXE_LIBS = pthread m rt $(LIB_RUNTIME)
2222TEMPLATE_VBOXMAINEXE_LDFLAGS.linux = $(VBOX_LD_as_needed)
2223 else ifeq ($(KBUILD_TARGET),l4)
2224TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME)
2225# no libs as yet in l4 target - must be added later
2226 else ifeq ($(KBUILD_TARGET),os2)
2227TEMPLATE_VBOXMAINEXE_TOOL = GXX3OMF
2228TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME)
2229 else ifeq ($(KBUILD_TARGET),darwin)
2230TEMPLATE_VBOXMAINEXE_TOOL = GXX4MACHO
2231TEMPLATE_VBOXMAINEXE_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS)
2232TEMPLATE_VBOXMAINEXE_CFLAGS += $(VBOX_DARWIN_DEF_SDK_CFLAGS)
2233TEMPLATE_VBOXMAINEXE_CXXFLAGS += $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
2234TEMPLATE_VBOXMAINEXE_OBJCFLAGS += $(VBOX_DARWIN_DEF_SDK_OBJCFLAGS)
2235TEMPLATE_VBOXMAINEXE_LDFLAGS += $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -bind_at_load -framework Carbon
2236TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME)
2237 else if1of ($(KBUILD_TARGET), freebsd netbsd openbsd)
2238TEMPLATE_VBOXMAINEXE_TOOL = GXX3
2239TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME)
2240 else ifeq ($(KBUILD_TARGET),solaris)
2241TEMPLATE_VBOXMAINEXE_TOOL = GXX3PLAIN
2242TEMPLATE_VBOXMAINEXE_DEFS += _REENTRANT
2243TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME) rt
2244 else
2245$(warning Warning: VBOX Build: Target $(KBUILD_TARGET) is not officially supported!)
2246TEMPLATE_VBOXMAINEXE_LIBS =
2247 endif
2248 ifdef VBOX_WITH_ORIGIN
2249TEMPLATE_VBOXMAINEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$$(VBOX_ORIGIN)'
2250 endif
2251
2252endif # !win
2253
2254# Add COM/XPCOM stuff
2255TEMPLATE_VBOXMAINEXE_LIBS += \
2256 $(PATH_LIB)/VBoxCOM$(VBOX_SUFF_LIB)
2257ifdef VBOX_WITH_XPCOM
2258 ## @todo may be worth creating the VBOX_XPCOM SDK def
2259 TEMPLATE_VBOXMAINEXE_DEFS += VBOX_WITH_XPCOM
2260 TEMPLATE_VBOXMAINEXE_INCS += \
2261 $(VBOX_XPCOM_INCS)
2262 TEMPLATE_VBOXMAINEXE_LIBS += \
2263 $(LIB_XPCOM)
2264endif
2265
2266#
2267# Template for building the Main DLL modules (such as in-process COM/XPCOM
2268# components for Main).
2269#
2270# This differs from VBOXMAINEXE only in PIC handling and similar DLL stuff.
2271#
2272
2273TEMPLATE_VBOXMAINDLL = VBox Main Component (shared library)
2274TEMPLATE_VBOXMAINDLL_EXTENDS = VBOXMAINEXE
2275ifeq ($(filter-out solaris.x86 %.amd64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),)
2276 ifneq ($(KBUILD_TARGET),win)
2277 TEMPLATE_VBOXMAINDLL_DEFS = PIC $(TEMPLATE_VBOXMAINEXE_DEFS)
2278 TEMPLATE_VBOXMAINDLL_CFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_CFLAGS)
2279 TEMPLATE_VBOXMAINDLL_CXXFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_CXXFLAGS)
2280 TEMPLATE_VBOXMAINDLL_LDFLAGS = -fPIC $(TEMPLATE_VBOXMAINEXE_LDFLAGS)
2281 endif
2282endif
2283ifeq ($(KBUILD_TARGET),darwin)
2284 TEMPLATE_VBOXMAINDLL_LDFLAGS = $(filter-out -bind_at_load,$(TEMPLATE_VBOXMAINEXE_LDFLAGS))
2285endif
2286
2287#
2288# Template for building the Main static libraries.
2289#
2290# This differs from VBOXMAINDLL only that it zeroes out the _LIBS definition.
2291#
2292TEMPLATE_VBOXMAINLIB = VBox Main Component (static library)
2293TEMPLATE_VBOXMAINLIB_EXTENDS = VBOXMAINDLL
2294TEMPLATE_VBOXMAINLIB_LIBS =
2295
2296#
2297# Template for building executables that use the VBox Main component.
2298#
2299TEMPLATE_VBOXMAINCLIENTEXE = VBox Main Client (executable)
2300TEMPLATE_VBOXMAINCLIENTEXE_EXTENDS = VBOXMAINEXE
2301ifeq ($(KBUILD_TARGET),win)
2302 TEMPLATE_VBOXMAINCLIENTEXE_LIBS.win = $(TEMPLATE_VBOXMAINEXE_LIBS.win) \
2303 $(PATH_SDK_WINPSDK_LIB)/User32.Lib \
2304 $(PATH_SDK_WINPSDK_LIB)/Shell32.Lib \
2305 $(PATH_SDK_WINPSDK_LIB)/ShLwApi.Lib \
2306 $(PATH_SDK_WINPSDK_LIB)/Ole32.Lib \
2307 $(PATH_SDK_WINPSDK_LIB)/OleAut32.Lib \
2308 $(PATH_SDK_WINPSDK_LIB)/Uuid.Lib
2309else
2310 TEMPLATE_VBOXMAINCLIENTEXE_DEFS = $(TEMPLATE_VBOXMAINEXE_DEFS) \
2311 NDEBUG TRIMMED
2312 TEMPLATE_VBOXMAINCLIENTEXE_CXXFLAGS.linux = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.linux) \
2313 -pthread
2314 ifeq ($(KBUILD_TARGET),darwin)
2315 TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS = $(TEMPLATE_VBOXMAINEXE_LDFLAGS) -bind_at_load -framework Carbon
2316 endif
2317endif
2318
2319#
2320# Template for building shared libraries / DLLs that use the VBox Main component.
2321#
2322# This differs from VBOXMAINCLIENTEXE only in PIC handling and similar DLL stuff.
2323#
2324TEMPLATE_VBOXMAINCLIENTDLL = VBox MAIN Client (shared library)
2325TEMPLATE_VBOXMAINCLIENTDLL_EXTENDS = VBOXMAINCLIENTEXE
2326ifeq ($(filter-out solaris.x86 %.amd64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),)
2327 ifneq ($(KBUILD_TARGET),win)
2328 TEMPLATE_VBOXMAINCLIENTDLL_DEFS = PIC $(TEMPLATE_VBOXMAINCLIENTEXE_DEFS)
2329 TEMPLATE_VBOXMAINCLIENTDLL_CFLAGS = -fPIC $(TEMPLATE_VBOXMAINCLIENTEXE_CFLAGS)
2330 TEMPLATE_VBOXMAINCLIENTDLL_CXXFLAGS = -fPIC $(TEMPLATE_VBOXMAINCLIENTEXE_CXXFLAGS)
2331 TEMPLATE_VBOXMAINCLIENTDLL_LDFLAGS = -fPIC $(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS)
2332 endif
2333endif
2334ifeq ($(KBUILD_TARGET),darwin)
2335 TEMPLATE_VBOXMAINCLIENTDLL_LDFLAGS = $(filter-out -bind_at_load,$(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS))
2336endif
2337
2338
2339#
2340# Template for building Qt GUI executables.
2341#
2342TEMPLATE_VBOXQTGUIEXE = VBox Qt GUI Executable
2343TEMPLATE_VBOXQTGUIEXE_DEFS = IN_RING3 QT_NO_DEBUG QT_THREAD_SUPPORT $(ARCH_BITS_DEFS)
2344TEMPLATE_VBOXQTGUIEXE_INCS = \
2345 $(VBOX_PATH_SDK)/include \
2346 $(VBOX_PATH_QT)/include
2347
2348ifeq ($(KBUILD_TARGET),win)
2349 # drag in library configuration (we need QMAKE_PRL_DEFINES)
2350 ifneq ($(LIB_QT_PRL),)
2351 include $(LIB_QT_PRL)
2352 endif
2353 TEMPLATE_VBOXQTGUIEXE_TOOL = $(VBOX_VCC_TOOL)
2354 TEMPLATE_VBOXQTGUIEXE_DEFS += \
2355 _WIN32_WINNT=0x0500 UNICODE _UNICODE \
2356 QT_DLL _CRT_SECURE_NO_DEPRECATE \
2357 $(QMAKE_PRL_DEFINES)
2358 ## @todo VCC70 flags?
2359 ifdef VBOX_USE_VCC80
2360 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS = \
2361 -nologo -Zm200 -W3 -MD -Zi -EHsc -Zc:wchar_t-
2362 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.debug = -RTCsu
2363 else
2364 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS = \
2365 -nologo -Zm200 -W3 -MD -Zi -GX
2366 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.debug = -GZ
2367 endif
2368 TEMPLATE_VBOXQTGUIEXE_INCS += \
2369 $(PATH_TOOL_$(VBOX_VCC_TOOL)_ATLMFC_INC)
2370 TEMPLATE_VBOXQTGUIEXE_LDFLAGS = \
2371 /NOD /NOLOGO /INCREMENTAL:NO /MAPINFO:EXPORTS /DEBUG \
2372 /DELAYLOAD:oleaut32.dll
2373 TEMPLATE_VBOXQTGUIEXE_SDKS = WINPSDK
2374 TEMPLATE_VBOXQTGUIEXE_LIBS = \
2375 $(LIB_QT) \
2376 $(LIB_QTMAIN) \
2377 $(LIB_RUNTIME) \
2378 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcprt.lib \
2379 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/msvcrt.lib \
2380 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/oldnames.lib \
2381 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/delayimp.lib \
2382 $(PATH_TOOL_$(VBOX_VCC_TOOL)_ATLMFC_LIB)/atls.lib
2383 TEMPLATE_VBOXQTGUIEXE_POST_CMDS = $(VBOX_SIGN_IMAGE_CMDS)
2384
2385else # the gcc guys:
2386 TEMPLATE_VBOXQTGUIEXE_TOOL = $(VBOX_GCC_TOOL)
2387 TEMPLATE_VBOXQTGUIEXE_DEFS.linux = _REENTRANT
2388 TEMPLATE_VBOXQTGUIEXE_DEFS.solaris = _REENTRANT
2389
2390 TEMPLATE_VBOXQTGUIEXE_INCS += \
2391 $(LIB_SDL_INC)
2392 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS = \
2393 -pipe -Wall -W -frtti -fno-exceptions -Wno-non-virtual-dtor \
2394 -Wno-long-long -fshort-wchar -fno-strict-aliasing \
2395 $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_fvisibility-inlines-hidden)
2396 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.x86 = -m32
2397 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.amd64 = -m64
2398 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.linux = -pthread
2399 TEMPLATE_VBOXQTGUIEXE_LDFLAGS.x86 = -m32
2400 TEMPLATE_VBOXQTGUIEXE_LDFLAGS.amd64 = -m64
2401 TEMPLATE_VBOXQTGUIEXE_LIBS = \
2402 $(LIB_QT) \
2403 $(LIB_SDL) \
2404 $(LIB_RUNTIME) \
2405 $(LIB_REM) \
2406 $(LIB_VMM)
2407
2408 ifeq ($(KBUILD_TARGET_ARCH),amd64)
2409 TEMPLATE_VBOXQTGUIEXE_LIBPATH = \
2410 $(VBOX_PATH_QT)/lib64 $(VBOX_PATH_QT)/lib
2411 else
2412 TEMPLATE_VBOXQTGUIEXE_LIBPATH = \
2413 $(VBOX_PATH_QT)/lib
2414 endif
2415
2416 ifeq ($(KBUILD_TARGET),linux)
2417 TEMPLATE_VBOXQTGUIEXE_LDFLAGS += $(VBOX_LD_as_needed)
2418 else ifeq ($(KBUILD_TARGET),darwin)
2419 TEMPLATE_VBOXQTGUIEXE_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS)
2420 TEMPLATE_VBOXQTGUIEXE_CFLAGS += $(VBOX_DARWIN_DEF_SDK_CFLAGS)
2421 TEMPLATE_VBOXQTGUIEXE_CXXFLAGS += $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
2422 TEMPLATE_VBOXQTGUIEXE_OBJCFLAGS += $(VBOX_DARWIN_DEF_SDK_OBJCFLAGS)
2423 TEMPLATE_VBOXQTGUIEXE_LDFLAGS += $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -framework Carbon -framework QuickTime -bind_at_load
2424 TEMPLATE_VBOXQTGUIEXE_LIBS +=
2425 TEMPLATE_VBOXQTGUIEXE_LIBPATH +=
2426 else ifeq ($(KBUILD_TARGET),os2)
2427 # drag in library configuration (we need QMAKE_PRL_DEFINES)
2428 ifneq ($(LIB_QT_PRL),)
2429 include $(LIB_QT_PRL)
2430 endif
2431 TEMPLATE_VBOXQTGUIEXE_DEFS += $(QMAKE_PRL_DEFINES)
2432 TEMPLATE_VBOXQTGUIEXE_LIBS +=
2433 TEMPLATE_VBOXQTGUIEXE_LIBPATH +=
2434 else
2435 TEMPLATE_VBOXQTGUIEXE_INCS += \
2436 $(VBOX_XCURSOR_INCS)
2437 TEMPLATE_VBOXQTGUIEXE_LIBS += \
2438 $(VBOX_XCURSOR_LIBS) \
2439 Xext \
2440 X11 \
2441 m \
2442 $(LIB_PTHREAD)
2443 TEMPLATE_VBOXQTGUIEXE_LIBPATH += \
2444 $(VBOX_LIBPATH_X11)
2445 ifeq ($(KBUILD_TARGET),freebsd)
2446 TEMPLATE_VBOXQTGUIEXE_INCS += \
2447 /usr/include \
2448 /usr/X11R6/include \
2449 /usr/local/include
2450 endif
2451 ifeq ($(KBUILD_TARGET),solaris)
2452 TEMPLATE_VBOXQTGUIEXE_LIBS += \
2453 rt socket nsl
2454 endif
2455 endif
2456 ifdef VBOX_WITH_ORIGIN
2457 ifeq ($(KBUILD_TARGET),solaris)
2458 TEMPLATE_VBOXQTGUIEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$$(VBOX_ORIGIN):$$(VBOX_ORIGIN)/qtgcc/lib'
2459 else
2460 TEMPLATE_VBOXQTGUIEXE_LDFLAGS += '$(VBOX_GCC_RPATH_OPT)$$(VBOX_ORIGIN)'
2461 endif
2462 endif
2463
2464endif # !win
2465
2466# Add COM/XPCOM stuff
2467TEMPLATE_VBOXQTGUIEXE_LIBS += \
2468 $(PATH_LIB)/VBoxCOM$(VBOX_SUFF_LIB)
2469ifdef VBOX_WITH_XPCOM
2470 ## @todo may be worth creating the VBOX_XPCOM SDK def
2471 TEMPLATE_VBOXQTGUIEXE_DEFS += VBOX_WITH_XPCOM
2472 TEMPLATE_VBOXQTGUIEXE_INCS += \
2473 $(VBOX_XPCOM_INCS)
2474 TEMPLATE_VBOXQTGUIEXE_LIBS += \
2475 $(LIB_XPCOM)
2476endif
2477
2478#
2479# Template for building Qt GUI components.
2480#
2481TEMPLATE_VBOXQTGUI = VBox Qt GUI Components
2482TEMPLATE_VBOXQTGUI_EXTENDS = VBOXQTGUIEXE
2483TEMPLATE_VBOXQTGUI_LIBS = $(filter-out $(QTMAIN),$(TEMPLATE_VBOXQTGUIEXE_LIBS))
2484ifeq ($(KBUILD_TARGET),darwin)
2485 TEMPLATE_VBOXQTGUI_LDFLAGS = $(filter-out -framework Carbon -framework QuickTime -bind_at_load,$(TEMPLATE_VBOXQTGUIEXE_LDFLAGS))
2486endif
2487ifeq ($(filter-out solaris.x86 %.amd64,$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),)
2488 ifneq ($(KBUILD_TARGET),win)
2489 TEMPLATE_VBOXQTGUI_DEFS = PIC $(TEMPLATE_VBOXQTGUIEXE_DEFS)
2490 TEMPLATE_VBOXQTGUI_CFLAGS = -fPIC $(TEMPLATE_VBOXQTGUIEXE_CFLAGS)
2491 TEMPLATE_VBOXQTGUI_CXXFLAGS = -fPIC $(TEMPLATE_VBOXQTGUIEXE_CXXFLAGS)
2492 TEMPLATE_VBOXQTGUI_LDFLAGS = -fPIC $(TEMPLATE_VBOXQTGUIEXE_LDFLAGS)
2493 endif
2494endif
2495
2496
2497#
2498# Template for building build bldprogs.
2499#
2500TEMPLATE_VBOXBLDPROG = VBox Build Program
2501TEMPLATE_VBOXBLDPROG_DEFS = IN_RING3
2502ifeq ($(KBUILD_HOST),win)
2503 ifeq ($(KBUILD_HOST_ARCH),x86)
2504 ifdef VBOX_USE_VCC80
2505 TEMPLATE_VBOXBLDPROG_TOOL = VCC80X86
2506 else
2507 TEMPLATE_VBOXBLDPROG_TOOL = VCC70
2508 endif
2509 TEMPLATE_VBOXBLDPROG_SDKS = WIN32SDK
2510 else
2511 TEMPLATE_VBOXBLDPROG_TOOL = VCC80AMD64
2512 TEMPLATE_VBOXBLDPROG_SDKS = WIN64SDK
2513 endif
2514 ifneq ($(TEMPLATE_VBOXBLDPROG_TOOL),VCC70)
2515 TEMPLATE_VBOXBLDPROG_CXXFLAGS = -Zi -Zl -GR- -EHs-c- -GF- -MT -W3 -wd4996 -Zc:wchar_t-
2516 TEMPLATE_VBOXBLDPROG_CXXFLAGS.debug = -RTCsu
2517 TEMPLATE_VBOXBLDPROG_CXXFLAGS.release = -O2 -Oy- -GS-
2518 else
2519 TEMPLATE_VBOXBLDPROG_CXXFLAGS = -Zi -Zl -GR- -GX- -GF- -MT -W3
2520 TEMPLATE_VBOXBLDPROG_CXXFLAGS.debug = -GZ
2521 TEMPLATE_VBOXBLDPROG_CXXFLAGS.release = -Ogitb2 -Oy-
2522 endif
2523 TEMPLATE_VBOXBLDPROG_CXXFLAGS.profile = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.release)
2524 TEMPLATE_VBOXBLDPROG_CXXFLAGS.kprofile = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.release)
2525 TEMPLATE_VBOXBLDPROG_CFLAGS = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS)
2526 TEMPLATE_VBOXBLDPROG_CFLAGS.debug = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.debug)
2527 TEMPLATE_VBOXBLDPROG_CFLAGS.release = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.release)
2528 TEMPLATE_VBOXBLDPROG_CFLAGS.profile = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.profile)
2529 TEMPLATE_VBOXBLDPROG_CFLAGS.kprofile = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.kprofile)
2530 TEMPLATE_VBOXBLDPROG_LDFLAGS = \
2531 /NOD /INCREMENTAL:NO /MAPINFO:EXPORTS /LARGEADDRESSAWARE /DEBUG \
2532 /DISALLOWLIB:libcd.lib \
2533 /DISALLOWLIB:libcmtd.lib \
2534 /DISALLOWLIB:msvcrt.lib \
2535 /DISALLOWLIB:msvcrtd.lib \
2536 /DISALLOWLIB:msvcprt.lib \
2537 /DISALLOWLIB:msvcprtd.lib
2538 TEMPLATE_VBOXBLDPROG_LIBS = \
2539 $(PATH_TOOL_$(TEMPLATE_VBOXBLDPROG_TOOL)_LIB)/oldnames.lib \
2540 $(PATH_TOOL_$(TEMPLATE_VBOXBLDPROG_TOOL)_LIB)/libcmt.lib \
2541 $(PATH_TOOL_$(TEMPLATE_VBOXBLDPROG_TOOL)_LIB)/libcpmt.lib
2542
2543else
2544# (gcc of some kind )
2545TEMPLATE_VBOXBLDPROG_TOOL = GXX3
2546TEMPLATE_VBOXBLDPROG_CFLAGS = -g -Wall -pedantic -Wno-long-long -Wno-trigraphs $(VBOX_GCC_Wno-variadic-macros) -pipe -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations
2547TEMPLATE_VBOXBLDPROG_CFLAGS.x86 = -m32
2548TEMPLATE_VBOXBLDPROG_CFLAGS.amd64 = -m64
2549TEMPLATE_VBOXBLDPROG_CFLAGS.release = -O2 -fno-omit-frame-pointer -fno-strict-aliasing
2550TEMPLATE_VBOXBLDPROG_CFLAGS.profile = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.profile)
2551TEMPLATE_VBOXBLDPROG_CFLAGS.kprofile = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.kprofile)
2552TEMPLATE_VBOXBLDPROG_CXXFLAGS = -g -Wall -pedantic -Wno-long-long -Wno-trigraphs -pipe
2553TEMPLATE_VBOXBLDPROG_CXXFLAGS.x86 = -m32
2554TEMPLATE_VBOXBLDPROG_CXXFLAGS.amd64 = -m64
2555TEMPLATE_VBOXBLDPROG_CXXFLAGS.release = -O2 -fno-omit-frame-pointer -fno-strict-aliasing
2556TEMPLATE_VBOXBLDPROG_CXXFLAGS.profile = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.release)
2557TEMPLATE_VBOXBLDPROG_CXXFLAGS.kprofile = $(TEMPLATE_VBOXBLDPROG_CXXFLAGS.release)
2558TEMPLATE_VBOXBLDPROG_LDFLAGS.x86 = -m32
2559TEMPLATE_VBOXBLDPROG_LDFLAGS.amd64 = -m64
2560 ifeq ($(KBUILD_HOST),linux)
2561TEMPLATE_VBOXBLDPROG_LIBS = pthread m rt dl
2562 else ifeq ($(KBUILD_HOST),os2)
2563TEMPLATE_VBOXBLDPROG_TOOL = GXX3OMF
2564TEMPLATE_VBOXBLDPROG_LIBS = socket iconv
2565 else ifeq ($(KBUILD_HOST),darwin)
2566TEMPLATE_VBOXBLDPROG_TOOL = GXX4MACHO
2567TEMPLATE_VBOXBLDPROG_CFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -fno-common
2568TEMPLATE_VBOXBLDPROG_CXXFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS)
2569TEMPLATE_VBOXBLDPROG_OBJCFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_OBJCFLAGS)
2570TEMPLATE_VBOXBLDPROG_LDFLAGS.darwin = $(VBOX_DARWIN_DEF_SDK_LDFLAGS)
2571TEMPLATE_VBOXBLDPROG_LIBS =
2572 else if1of ($(KBUILD_HOST), freebsd netbsd openbsd)
2573TEMPLATE_VBOXBLDPROG_TOOL = GXX3
2574TEMPLATE_VBOXBLDPROG_LIBS =
2575 else ifeq ($(KBUILD_HOST),solaris)
2576TEMPLATE_VBOXBLDPROG_TOOL = GXX3PLAIN
2577TEMPLATE_VBOXBLDPROG_LIBS = rt
2578 else
2579$(warning Warning: VBOX Build: Target $(KBUILD_HOST) is not officially supported!)
2580 endif
2581
2582endif # !win
2583
2584
2585ifndef VBOX_WITH_64BIT_ADDITIONS
2586
2587#
2588# Template for building R3 win32 guest additions.
2589#
2590TEMPLATE_VBOXW32GUESTR3 = VBox Win32 Guest Program
2591TEMPLATE_VBOXW32GUESTR3_INST = $(INST_ADDITIONS)
2592TEMPLATE_VBOXW32GUESTR3_BLD_TRG = win
2593TEMPLATE_VBOXW32GUESTR3_BLD_TRG_ARCH = x86
2594TEMPLATE_VBOXW32GUESTR3_BLD_TRG_CPU = i386
2595TEMPLATE_VBOXW32GUESTR3_DEFS = IN_GUEST IN_GUEST_R3 IN_RING3 IN_RT_R3 __WIN32__ __WIN__ HC_ARCH_BITS=32 $(VBOX_GC_ARCH_BITS_DEFS)
2596TEMPLATE_VBOXW32GUESTR3_RCDEFS = \
2597 VBOX_VERSION_MAJOR=\"$(VBOX_VERSION_MAJOR)\" \
2598 VBOX_VERSION_MINOR=\"$(VBOX_VERSION_MINOR)\" \
2599 VBOX_VERSION_BUILD=\"$(VBOX_VERSION_BUILD)\" \
2600 VBOX_SVN_REV=\"$(VBOX_SVN_REV)\" \
2601 VBOX_VERSION_MAJOR_NR=$(VBOX_VERSION_MAJOR) \
2602 VBOX_VERSION_MINOR_NR=$(VBOX_VERSION_MINOR) \
2603 VBOX_VERSION_BUILD_NR=$(VBOX_VERSION_BUILD) \
2604 VBOX_SVN_REV_NR=$(VBOX_SVN_REV)
2605TEMPLATE_VBOXW32GUESTR3_ASTOOL = YASM
2606TEMPLATE_VBOXW32GUESTR3_ASFLAGS = -f win32 -DASM_FORMAT_PE -D__YASM__ -w+orphan-labels
2607TEMPLATE_VBOXW32GUESTR3_DLLSUFF = .dll
2608TEMPLATE_VBOXW32GUESTR3_EXESUFF = .exe
2609TEMPLATE_VBOXW32GUESTR3_LIBSUFF = .lib
2610TEMPLATE_VBOXW32GUESTR3_ARLIBSUFF = .lib
2611TEMPLATE_VBOXW32GUESTR3_SDKS = WIN32SDK W2K3DDKX86
2612ifdef VBOX_USE_VCC80
2613 TEMPLATE_VBOXW32GUESTR3_TOOL = VCC80X86
2614 TEMPLATE_VBOXW32GUESTR3_CXXFLAGS = -Zi -Zl -GR- -EHs-c- -GF- -MT -U__LINUX__ -U__OS2__ -W3 -wd4996 -Zc:wchar_t-
2615 TEMPLATE_VBOXW32GUESTR3_CXXFLAGS.debug = -RTCsu
2616 TEMPLATE_VBOXW32GUESTR3_CXXFLAGS.release = -O2 -Oy- -GS-
2617else
2618 TEMPLATE_VBOXW32GUESTR3_TOOL = VCC70
2619 TEMPLATE_VBOXW32GUESTR3_CXXFLAGS = -Zi -Zl -GR- -GX- -GF- -MT -U__LINUX__ -U__OS2__ -W3
2620 TEMPLATE_VBOXW32GUESTR3_CXXFLAGS.debug = -GZ
2621 TEMPLATE_VBOXW32GUESTR3_CXXFLAGS.release = -Ogitb2 -Oy-
2622endif
2623TEMPLATE_VBOXW32GUESTR3_CXXFLAGS.profile = $(TEMPLATE_VBOXW32GUESTR3_CXXFLAGS.release)
2624TEMPLATE_VBOXW32GUESTR3_CXXFLAGS.kprofile = $(TEMPLATE_VBOXW32GUESTR3_CXXFLAGS.release)
2625TEMPLATE_VBOXW32GUESTR3_CFLAGS = $(TEMPLATE_VBOXW32GUESTR3_CXXFLAGS)
2626TEMPLATE_VBOXW32GUESTR3_CFLAGS.debug = $(TEMPLATE_VBOXW32GUESTR3_CXXFLAGS.debug)
2627TEMPLATE_VBOXW32GUESTR3_CFLAGS.release = $(TEMPLATE_VBOXW32GUESTR3_CXXFLAGS.release)
2628TEMPLATE_VBOXW32GUESTR3_CFLAGS.profile = $(TEMPLATE_VBOXW32GUESTR3_CXXFLAGS.profile)
2629TEMPLATE_VBOXW32GUESTR3_CFLAGS.kprofile = $(TEMPLATE_VBOXW32GUESTR3_CXXFLAGS.kprofile)
2630TEMPLATE_VBOXW32GUESTR3_INCS = \
2631 $(VBOX_PATH_SDK)/include
2632TEMPLATE_VBOXW32GUESTR3_LDFLAGS = \
2633 /NOD /INCREMENTAL:NO /MAPINFO:EXPORTS /LARGEADDRESSAWARE \
2634 /DISALLOWLIB:libc.lib \
2635 /DISALLOWLIB:libcd.lib \
2636 /DISALLOWLIB:msvcrt.lib \
2637 /DISALLOWLIB:libcmtd.lib \
2638 /DISALLOWLIB:msvcrtd.lib
2639ifdef VBOX_USE_VCC80
2640 TEMPLATE_VBOXW32GUESTR3_LIBS = \
2641 $(PATH_TOOL_VCC80X86_LIB)/oldnames.lib \
2642 $(PATH_TOOL_VCC80X86_LIB)/libcmt.lib \
2643 $(PATH_SDK_W2K3DDKX86_LIB)/ntdll.lib
2644else
2645 TEMPLATE_VBOXW32GUESTR3_LIBS = \
2646 $(PATH_TOOL_VCC70_LIB)/oldnames.lib \
2647 $(PATH_TOOL_VCC70_LIB)/libcmt.lib \
2648 $(PATH_SDK_W2K3DDKX86_LIB)/ntdll.lib
2649endif
2650TEMPLATE_VBOXW32GUESTR3_POST_CMDS = $(VBOX_SIGN_IMAGE_CMDS)
2651
2652#
2653# R3 win32 guest libraries
2654#
2655TEMPLATE_VBOXW32GUESTR3LIB = VBox Win32 Guest User Libraries
2656TEMPLATE_VBOXW32GUESTR3LIB_EXTENDS = VBOXW32GUESTR3
2657TEMPLATE_VBOXW32GUESTR3LIB_INST = $(INST_ADDITIONS_LIB)
2658
2659
2660#
2661# Template for building R0 win32 guest tools.
2662#
2663TEMPLATE_VBOXW32GUESTR0 = VBox Win32 Guest Driver
2664TEMPLATE_VBOXW32GUESTR0_INST = $(INST_ADDITIONS)
2665TEMPLATE_VBOXW32GUESTR0_BLD_TRG = win
2666TEMPLATE_VBOXW32GUESTR0_BLD_TRG_ARCH = x86
2667TEMPLATE_VBOXW32GUESTR0_BLD_TRG_CPU = i386
2668TEMPLATE_VBOXW32GUESTR0_DEFS = _X86_ IN_GUEST IN_GUEST_R0 IN_RING0 IN_RT_R0 __WIN32__ __WIN__ HC_ARCH_BITS=32 $(VBOX_GC_ARCH_BITS_DEFS)
2669TEMPLATE_VBOXW32GUESTR0_RCDEFS = \
2670 VBOX_VERSION_MAJOR=\"$(VBOX_VERSION_MAJOR)\" \
2671 VBOX_VERSION_MINOR=\"$(VBOX_VERSION_MINOR)\" \
2672 VBOX_VERSION_BUILD=\"$(VBOX_VERSION_BUILD)\" \
2673 VBOX_SVN_REV=\"$(VBOX_SVN_REV)\" \
2674 VBOX_VERSION_MAJOR_NR=$(VBOX_VERSION_MAJOR) \
2675 VBOX_VERSION_MINOR_NR=$(VBOX_VERSION_MINOR) \
2676 VBOX_VERSION_BUILD_NR=$(VBOX_VERSION_BUILD) \
2677 VBOX_SVN_REV_NR=$(VBOX_SVN_REV)
2678TEMPLATE_VBOXW32GUESTR0_ASTOOL = YASM
2679TEMPLATE_VBOXW32GUESTR0_ASFLAGS = -f win32 -DASM_FORMAT_PE -D__YASM__ -w+orphan-labels
2680TEMPLATE_VBOXW32GUESTR0_SYSSUFF = .sys
2681ifdef VBOX_USE_VCC80
2682 TEMPLATE_VBOXW32GUESTR0_TOOL = VCC80X86
2683 TEMPLATE_VBOXW32GUESTR0_CXXFLAGS = -Zi -Zl -GR- -GS- -EHs-c- -GF- -Gz -U__LINUX__ -W3 -wd4996 -Zc:wchar_t-
2684 TEMPLATE_VBOXW32GUESTR0_CXXFLAGS.debug = -GR- -EHs-c- -Zl
2685 TEMPLATE_VBOXW32GUESTR0_CXXFLAGS.release = -O2 -Oy-
2686else
2687 TEMPLATE_VBOXW32GUESTR0_TOOL = VCC70
2688 TEMPLATE_VBOXW32GUESTR0_CXXFLAGS = -Zi -Zl -GR- -GX- -GF- -Gz -U__LINUX__ -W3
2689 TEMPLATE_VBOXW32GUESTR0_CXXFLAGS.debug = -GR- -GX- -Zl
2690 TEMPLATE_VBOXW32GUESTR0_CXXFLAGS.release = -Ogitb2 -Oy-
2691endif
2692TEMPLATE_VBOXW32GUESTR0_CXXFLAGS.profile = $(TEMPLATE_VBOXW32GUESTR0_CXXFLAGS.release)
2693TEMPLATE_VBOXW32GUESTR0_CXXFLAGS.kprofile = $(TEMPLATE_VBOXW32GUESTR0_CXXFLAGS.release)
2694TEMPLATE_VBOXW32GUESTR0_CFLAGS = $(TEMPLATE_VBOXW32GUESTR0_CXXFLAGS)
2695TEMPLATE_VBOXW32GUESTR0_CFLAGS.debug = $(TEMPLATE_VBOXW32GUESTR0_CXXFLAGS.debug)
2696TEMPLATE_VBOXW32GUESTR0_CFLAGS.release = $(TEMPLATE_VBOXW32GUESTR0_CXXFLAGS.release)
2697TEMPLATE_VBOXW32GUESTR0_CFLAGS.profile = $(TEMPLATE_VBOXW32GUESTR0_CXXFLAGS.profile)
2698TEMPLATE_VBOXW32GUESTR0_CFLAGS.kprofile = $(TEMPLATE_VBOXW32GUESTR0_CXXFLAGS.kprofile)
2699TEMPLATE_VBOXW32GUESTR0_LDFLAGS = \
2700 -Driver -Subsystem:NATIVE -Incremental:NO -Align:32 -MapInfo:Exports -NoD -Machine:X86 -Debug \
2701 /DISALLOWLIB:libcd.lib \
2702 /DISALLOWLIB:msvcrt.lib \
2703 /DISALLOWLIB:msvcrtd.lib \
2704 /DISALLOWLIB:libcmtd.lib
2705TEMPLATE_VBOXW32GUESTR0_POST_CMDS = $(VBOX_SIGN_DRIVER_CMDS)
2706
2707#
2708# R0 win32 guest libraries
2709#
2710TEMPLATE_VBOXW32GUESTR0LIB = VBox Win32 Guest Driver
2711TEMPLATE_VBOXW32GUESTR0LIB_EXTENDS = VBOXW32GUESTR0
2712TEMPLATE_VBOXW32GUESTR0LIB_INST = $(INST_ADDITIONS_LIB)
2713
2714endif # !VBOX_WITH_64BIT_ADDITIONS
2715
2716#
2717# Windows rc workaround for crosscompiling.
2718# (Some (old) Wine versions fails loading msvcrt.dll from the VCC bin directory.)
2719#
2720ifneq ($(KBUILD_HOST),win)
2721 TOOL_VCC80X86_RC := $(EXEC_X86_WIN32) $(PATH_DEVTOOLS)/win.x86/bin/rc.exe
2722 TOOL_VCC80AMD64_RC := $(EXEC_X86_WIN32) $(PATH_DEVTOOLS)/win.x86/bin/rc.exe
2723 TOOL_VCC70_RC := $(EXEC_X86_WIN32) $(PATH_DEVTOOLS)/win.x86/bin/rc.exe
2724 WIN32_MC = $(EXEC_X86_WIN32) $(PATH_DEVTOOLS)/win.x86/bin/mc.exe
2725else
2726 WIN32_MC = $(EXEC_X86_WIN32) $(firstword $(wildcard \
2727 $(PATH_SDK_WINPSDK_BIN)/MC.Exe\
2728 $(PATH_SDK_WINPSDK)/Bin/MC.Exe\
2729 $(PATH_SDK_WIN32SDK_BIN)/MC.Exe\
2730 $(PATH_SDK_WIN64SDK_BIN)/MC.Exe\
2731 $(PATH_DEVTOOLS)/win.x86/bin/mc.exe\
2732 ) Sorry_Cannot_find_mc_in_the_PSDK)
2733endif
2734
2735
2736#
2737# Template for building Linux host tools (only for KBUILD_TARGET=l4)
2738#
2739TEMPLATE_VBOXLNXHOSTR3EXE = Template for building linux host programs.
2740TEMPLATE_VBOXLNXHOSTR3EXE_INST = $(INST_BIN)
2741TEMPLATE_VBOXLNXHOSTR3EXE_BLD_TRG = linux
2742TEMPLATE_VBOXLNXHOSTR3EXE_TOOL = $(VBOX_GCC_TOOL)
2743TEMPLATE_VBOXLNXHOSTR3EXE_ASTOOL = YASM
2744TEMPLATE_VBOXLNXHOSTR3EXE_DLLSUFF = .so
2745TEMPLATE_VBOXLNXHOSTR3EXE_ASFLAGS = $(VBOX_ASFLAGS)
2746TEMPLATE_VBOXLNXHOSTR3EXE_DEFS = IN_RING3 $(ARCH_BITS_DEFS)
2747TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS = -g -Wall -pedantic -Wno-long-long -Wno-trigraphs -pipe $(VBOX_GCC_fno-stack-protector)
2748TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.debug = -fno-inline
2749TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.release = -O2 -fno-omit-frame-pointer -fno-strict-aliasing
2750TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.profile = $(TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.release)
2751TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.kprofile = $(TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.release)
2752TEMPLATE_VBOXLNXHOSTR3EXE_CFLAGS.release = $(TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.release)
2753TEMPLATE_VBOXLNXHOSTR3EXE_CFLAGS.debug = $(TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.debug)
2754TEMPLATE_VBOXLNXHOSTR3EXE_CFLAGS.profile = $(TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.profile)
2755TEMPLATE_VBOXLNXHOSTR3EXE_CFLAGS.kprofile = $(TEMPLATE_VBOXLNXHOSTR3EXE_CXXFLAGS.kprofile)
2756TEMPLATE_VBOXLNXHOSTR3EXE_CFLAGS = -g -Wall -pedantic -Wno-long-long -Wno-trigraphs -pipe -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations $(VBOX_GCC_fno-stack-protector)
2757TEMPLATE_VBOXLNXHOSTR3EXE_LIBS = pthread m rt dl
2758
2759TEMPLATE_VBOXLNXHOSTR3LIB = Template for linux host libraries.
2760TEMPLATE_VBOXLNXHOSTR3LIB_EXTENDS = VBOXLNXHOSTR3EXE
2761TEMPLATE_VBOXLNXHOSTR3LIB_INST = $(INST_LIB)
2762
2763
2764#
2765# Template for building R3 programs for the guest additions.
2766# Note: Make sure you don't break VBOXGUESTR3CPPEXE when changing this.
2767#
2768# For the time being, we force 32-bitness onto this and related
2769# templates (via BLD_TRG_ARCH). When we start doing 64-bit guest
2770# however, they will be reverted to follow KBUILD_TARGET_ARCH.
2771# So, if someone sees any weirdness happening in a 64-bit build now,
2772# try do a 32-bit cross build (kmk KBUILD_TARGET_ARCH=x86) first. It
2773#
2774TEMPLATE_VBOXGUESTR3EXE = VBox Guest Program
2775ifeq ($(KBUILD_TARGET),win)
2776 ifdef VBOX_WITH_64BIT_ADDITIONS
2777 TEMPLATE_VBOXGUESTR3EXE_EXTENDS = VBOXR3EXE
2778 TEMPLATE_VBOXGUESTR3EXE_CFLAGS = $(filter-out -MD, $(TEMPLATE_VBOXR3EXE_CFLAGS)) -MT
2779 TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS= $(filter-out -MD, $(TEMPLATE_VBOXR3EXE_CFLAGS)) -MT
2780 TEMPLATE_VBOXGUESTR3EXE_LDFLAGS = $(filter-out /DISALLOWLIB:libcmt.lib, $(TEMPLATE_VBOXR3EXE_LDFLAGS)) \
2781 /DISALLOWLIB:msvcrt.lib \
2782 /DISALLOWLIB:msvcprt.lib
2783 TEMPLATE_VBOXGUESTR3EXE_LIBS = \
2784 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL)_LIB)/oldnames.lib \
2785 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL)_LIB)/libcmt.lib \
2786 $(PATH_TOOL_$(TEMPLATE_VBOXGUESTR3EXE_TOOL)_LIB)/libcpmt.lib
2787 else
2788 TEMPLATE_VBOXGUESTR3EXE_EXTENDS = VBOXW32GUESTR3
2789 endif
2790else # the gcc guys
2791 TEMPLATE_VBOXGUESTR3EXE_EXTENDS = VBOXR3EXE
2792 ifdef VBOX_WITH_64BIT_ADDITIONS
2793 TEMPLATE_VBOXGUESTR3EXE_TOOL := $(subst GXX,GCC,$(TEMPLATE_VBOXR3EXE_TOOL))
2794 else
2795 TEMPLATE_VBOXGUESTR3EXE_TOOL := $(subst GXX,GCC,$(VBOX_GCC32_TOOL))
2796 endif
2797 TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -fno-exceptions
2798endif
2799TEMPLATE_VBOXGUESTR3EXE_INST = $(INST_ADDITIONS)
2800ifdef VBOX_WITH_64BIT_ADDITIONS
2801 TEMPLATE_VBOXGUESTR3EXE_DEFS := $(TEMPLATE_VBOXR3EXE_DEFS) IN_GUEST IN_GUEST_R3 IN_RT_R3
2802else
2803 TEMPLATE_VBOXGUESTR3EXE_ASFLAGS = $(VBOX_ASFLAGS32)
2804 TEMPLATE_VBOXGUESTR3EXE_BLD_TRG_ARCH = x86
2805 TEMPLATE_VBOXGUESTR3EXE_BLD_TRG_CPU = blend
2806 TEMPLATE_VBOXGUESTR3EXE_DEFS := IN_GUEST IN_GUEST_R3 IN_RT_R3 \
2807 $(filter-out $(ARCH_BITS_DEFS),$(TEMPLATE_VBOXR3EXE_DEFS)) \
2808 HC_ARCH_BITS=32 $(VBOX_GC_ARCH_BITS_DEFS)
2809endif
2810if1of ($(KBUILD_TARGET),l4 linux) # As few libs as possible on linux.
2811 TEMPLATE_VBOXGUESTR3EXE_LIBS = pthread rt m
2812endif
2813ifeq ($(KBUILD_TARGET),l4) # cross building linux on l4.
2814 TEMPLATE_VBOXGUESTR3EXE_BLD_TRG = linux
2815 TEMPLATE_VBOXGUESTR3EXE_DLLSUFF = .so
2816 TEMPLATE_VBOXGUESTR3EXE_SYSSUFF = .ko
2817endif
2818
2819#
2820# Template for building R3 (dynamic) libraries for the guest additions.
2821#
2822TEMPLATE_VBOXGUESTR3DLL = VBox Guest User Dynamic Libraries
2823TEMPLATE_VBOXGUESTR3DLL_EXTENDS = VBOXGUESTR3EXE
2824## @todo add a INSTFUN that separates dlls and libs.
2825ifn1of ($(KBUILD_TARGET), os2 win)
2826 TEMPLATE_VBOXGUESTR3DLL_DEFS = $(TEMPLATE_VBOXGUESTR3EXE_DEFS) PIC
2827 TEMPLATE_VBOXGUESTR3DLL_CFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_CFLAGS) -fPIC
2828 TEMPLATE_VBOXGUESTR3DLL_CXXFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS) -fPIC -fno-exceptions
2829 TEMPLATE_VBOXGUESTR3DLL_LDFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_LDFLAGS) -fPIC
2830endif
2831
2832#
2833# Template for building R3 (static) libraries for the guest additions.
2834#
2835TEMPLATE_VBOXGUESTR3LIB = VBox Guest User Libraries
2836TEMPLATE_VBOXGUESTR3LIB_EXTENDS = VBOXGUESTR3EXE
2837TEMPLATE_VBOXGUESTR3LIB_INST = $(INST_ADDITIONS_LIB)
2838if1of ($(KBUILD_TARGET), solaris) ## @todo r=bird: Fix the *R3Mini template to VBOXGUESTR3DLL and remove this hack.
2839 TEMPLATE_VBOXGUESTR3LIB_DEFS = $(TEMPLATE_VBOXGUESTR3EXE_DEFS) PIC
2840 TEMPLATE_VBOXGUESTR3LIB_CFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_CFLAGS) -fPIC
2841 TEMPLATE_VBOXGUESTR3LIB_CXXFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS) -fPIC -fno-exceptions
2842endif
2843
2844
2845#
2846# Template for XFree86 guest modules (relocatable module, i.e. sysmod).
2847# This mostly about zapping the VBOXR3EXE linker flags and libraries.
2848#
2849TEMPLATE_VBOXGUESTR3XF86MOD = VBox Guest Program with C++ library dependencies
2850TEMPLATE_VBOXGUESTR3XF86MOD_EXTENDS = VBOXGUESTR3EXE
2851TEMPLATE_VBOXGUESTR3XF86MOD_LIBS.$(KBUILD_TYPE) = $(NO_SUCH_VARIABLE)
2852TEMPLATE_VBOXGUESTR3XF86MOD_LIBS.$(KBUILD_TARGET) = $(NO_SUCH_VARIABLE)
2853TEMPLATE_VBOXGUESTR3XF86MOD_LIBS.linux = $(NO_SUCH_VARIABLE)
2854TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.$(KBUILD_TARGET) = $(NO_SUCH_VARIABLE)
2855TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.$(KBUILD_TYPE) = $(NO_SUCH_VARIABLE)
2856TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.linux = $(NO_SUCH_VARIABLE)
2857TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS = -r
2858if1of ($(KBUILD_TARGET), freebsd linux l4 netbsd openbsd) # the gnu ld guys.
2859 TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.release = -S
2860 TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.x86 = -m elf_i386
2861 TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.amd64 = -m elf_x86_64
2862endif
2863TEMPLATE_VBOXGUESTR3XF86MOD_CFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_CFLAGS) -fno-merge-constants -std=c99
2864TEMPLATE_VBOXGUESTR3XF86MOD_CXXFLAGS = $(TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS) -fno-merge-constants
2865TEMPLATE_VBOXGUESTR3XF86MOD_SYSSUFF = .o
2866TEMPLATE_VBOXGUESTR3XF86MOD_LIBS = \
2867 $(VBOX_LIB_VBGL_R3_XFREE86)
2868TEMPLATE_VBOXGUESTR3XF86MOD_DEFS = $(TEMPLATE_VBOXGUESTR3DLL_DEFS) LOG_TO_BACKDOOR
2869
2870
2871#
2872# Template for X.org guest modules (shared libs).
2873# This mostly about zapping unnecessary LIBS from VBOXGUESTR3DLL and adding some flags.
2874#
2875TEMPLATE_VBOXGUESTR3XORGMOD = VBox Guest Program with C++ library dependencies
2876TEMPLATE_VBOXGUESTR3XORGMOD_EXTENDS = VBOXGUESTR3DLL
2877TEMPLATE_VBOXGUESTR3XORGMOD_LIBS.$(KBUILD_TYPE) = $(NO_SUCH_VARIABLE)
2878TEMPLATE_VBOXGUESTR3XORGMOD_LIBS.$(KBUILD_TARGET) = $(NO_SUCH_VARIABLE)
2879TEMPLATE_VBOXGUESTR3XORGMOD_LIBS.linux = $(NO_SUCH_VARIABLE)
2880TEMPLATE_VBOXGUESTR3XORGMOD_CFLAGS = $(TEMPLATE_VBOXGUESTR3DLL_CFLAGS) -std=c99
2881TEMPLATE_VBOXGUESTR3XORGMOD_DEFS = $(TEMPLATE_VBOXGUESTR3DLL_DEFS) LOG_TO_BACKDOOR
2882if1of ($(KBUILD_TARGET), linux l4)
2883 TEMPLATE_VBOXGUESTR3XORGMOD_LDFLAGS = $(TEMPLATE_VBOXGUESTR3DLL_LDFLAGS) -s
2884endif
2885TEMPLATE_VBOXGUESTR3XORGMOD_LIBS = \
2886 $(VBOX_LIB_VBGL_R3_SHARED) \
2887 $(VBOX_LIB_IPRT_GUEST_R3_MINI) \
2888 $(VBOX_LIB_VBGL_R3_SHARED)
2889
2890
2891#
2892# Template for guest stuff that makes use of the C++ library and features.
2893# (This is mostly about undoing what was done to C++ for VBOXGUESTR3EXE.)
2894#
2895TEMPLATE_VBOXGUESTR3CPPEXE = VBox Guest Program with C++ library dependencies
2896TEMPLATE_VBOXGUESTR3CPPEXE_EXTENDS = VBOXGUESTR3EXE
2897ifeq ($(KBUILD_TARGET),win)
2898 # later
2899else
2900 ifdef VBOX_WITH_64BIT_ADDITIONS
2901 TEMPLATE_VBOXGUESTR3CPPEXE_TOOL = $(TEMPLATE_VBOXR3EXE_TOOL)
2902 else
2903 TEMPLATE_VBOXGUESTR3CPPEXE_TOOL = $(VBOX_GCC32_TOOL)
2904 endif
2905 TEMPLATE_VBOXGUESTR3CPPEXE_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS)
2906endif
2907
2908
2909#
2910# Template for building R0 drivers for the guest additions.
2911#
2912TEMPLATE_VBOXGUESTR0 = VBox Guest Driver
2913TEMPLATE_VBOXGUESTR0_EXTENDS = VBOXR0DRV
2914TEMPLATE_VBOXGUESTR0_INST = $(INST_ADDITIONS)
2915ifdef VBOX_WITH_64BIT_ADDITIONS
2916TEMPLATE_VBOXGUESTR0_SDKS.win.x86 = WIN32SDK W2K3DDK
2917TEMPLATE_VBOXGUESTR0_SDKS.win.amd64 = W2K3DDK WINPSDKINCS
2918else
2919TEMPLATE_VBOXGUESTR0_SDKS.win.x86 = WIN32SDK W2K3DDKX86
2920endif
2921ifdef VBOX_WITH_64BIT_ADDITIONS
2922 TEMPLATE_VBOXGUESTR0_DEFS = $(TEMPLATE_VBOXR0DRV_DEFS) IN_GUEST IN_GUEST_R0 $(VBOX_GC_ARCH_BITS_DEFS)
2923else
2924 ifn1of ($(KBUILD_TARGET),l4 linux) # must be same as the host.
2925 TEMPLATE_VBOXGUESTR0_DEFS = $(filter-out $(ARCH_BITS_DEFS),$(TEMPLATE_VBOXR0DRV_DEFS)) IN_GUEST IN_GUEST_R0 HC_ARCH_BITS=32 $(VBOX_GC_ARCH_BITS_DEFS)
2926 TEMPLATE_VBOXGUESTR0_BLD_TRG_ARCH = x86
2927 TEMPLATE_VBOXGUESTR0_BLD_TRG_CPU = blend
2928 else
2929 TEMPLATE_VBOXGUESTR0_DEFS = $(TEMPLATE_VBOXR0DRV_DEFS) IN_GUEST IN_GUEST_R0
2930 endif
2931endif
2932ifeq ($(KBUILD_TARGET),l4) # cross building linux on l4.
2933 TEMPLATE_VBOXGUESTR0_BLD_TRG = linux
2934 TEMPLATE_VBOXGUESTR0_SYSSUFF = .ko
2935endif
2936ifeq ($(KBUILD_TARGET),solaris) # No VBI for the guest additions yet.
2937 TEMPLATE_VBOXGUESTR0_LDFLAGS = -r
2938endif
2939
2940#
2941# Template for building R0 libraries for the guest additions.
2942#
2943TEMPLATE_VBOXGUESTR0LIB = VBox Guest Driver Libraries
2944TEMPLATE_VBOXGUESTR0LIB_EXTENDS = VBOXGUESTR0
2945TEMPLATE_VBOXGUESTR0LIB_INST = $(INST_ADDITIONS_LIB)
2946
2947
2948#
2949# Guest additions libraries (all static).
2950# The _MINI and _SHARED are both compiled as PIC and intended for linking into a .so/.dll/.dylib.
2951#
2952VBOX_LIB_IPRT_GUEST_R3 = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR3$(VBOX_SUFF_LIB)
2953VBOX_LIB_IPRT_GUEST_R3_MINI = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR3Mini$(VBOX_SUFF_LIB)
2954VBOX_LIB_IPRT_GUEST_R0 = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR0$(VBOX_SUFF_LIB)
2955ifeq ($(KBUILD_TARGET_ARCH),x86)
2956 VBOX_LIB_IPRT_GUEST_R0_NT4 = $(VBOX_PATH_ADDITIONS_LIB)/RuntimeGuestR0NT4$(VBOX_SUFF_LIB)
2957else
2958 VBOX_LIB_IPRT_GUEST_R0_NT4 = $(VBOX_LIB_IPRT_GUEST_R0)
2959endif
2960VBOX_LIB_VBGL_R3 = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3Lib$(VBOX_SUFF_LIB)
2961VBOX_LIB_VBGL_R3_XFREE86 = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3LibXFree86$(VBOX_SUFF_LIB)
2962VBOX_LIB_VBGL_R3_SHARED = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR3LibShared$(VBOX_SUFF_LIB)
2963VBOX_LIB_VBGL_R0BASE = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR0LibBase$(VBOX_SUFF_LIB)
2964VBOX_LIB_VBGL_R0 = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR0Lib$(VBOX_SUFF_LIB)
2965
2966
2967
2968#
2969# Two targets to coordinate version number changes properly. Note that the
2970# only way to get a really consistent build is to run 'kmk' in the top-level
2971# directory. If you don't run it there, you get a consistent sub-tree only.
2972#
2973VBOX_VERSION_STAMP = $(PATH_OUT)/version-stamp-$(VBOX_VERSION_STRING)
2974VBOX_VERSION_HEADER = $(PATH_OUT)/version-generated.h
2975VBOX_VERSION_MK = $(PATH_OUT)/version-generated.mk
2976
2977$(VBOX_VERSION_STAMP): | $(PATH_ROOT)/Config.kmk
2978 $(call MSG_GENERATE,,$@)
2979 $(QUIET)$(MKDIR) -p $(@D)
2980 $(QUIET)$(RM) -f $(wildcard $(PATH_OUT)/version-stamp-*)
2981 $(QUIET)$(APPEND) $@ $(VBOX_VERSION_STRING)
2982
2983$(VBOX_VERSION_HEADER): $(VBOX_VERSION_STAMP)
2984 $(call MSG_GENERATE,,$@)
2985 $(QUIET)$(MKDIR) -p $(@D)
2986 $(QUIET)$(RM) -f $@ $@.tmp
2987 $(QUIET)$(APPEND) $@.tmp '#ifndef ___version_generated_h___'
2988 $(QUIET)$(APPEND) $@.tmp '#define ___version_generated_h___'
2989 $(QUIET)$(APPEND) $@.tmp ''
2990 $(QUIET)$(APPEND) $@.tmp '#define VBOX_VERSION_MAJOR $(VBOX_VERSION_MAJOR)'
2991 $(QUIET)$(APPEND) $@.tmp '#define VBOX_VERSION_MINOR $(VBOX_VERSION_MINOR)'
2992 $(QUIET)$(APPEND) $@.tmp '#define VBOX_VERSION_BUILD $(VBOX_VERSION_BUILD)'
2993 $(QUIET)$(APPEND) $@.tmp '#define VBOX_VERSION_STRING "$(VBOX_VERSION_STRING)"'
2994 $(QUIET)$(APPEND) $@.tmp ''
2995 $(QUIET)$(APPEND) $@.tmp '#endif'
2996 $(QUIET)$(MV) -f $@.tmp $@
2997
2998#
2999# Used for external makefiles which cannot include Config.kmk
3000#
3001$(VBOX_VERSION_MK): $(VBOX_VERSION_STAMP)
3002 $(call MSG_GENERATE,,$@)
3003 $(QUIET)$(RM) -f $@ $@.tmp
3004 $(QUIET)$(MKDIR) -p $(@D)
3005 $(QUIET)$(APPEND) $@.tmp 'VBOX_VERSION_MAJOR = $(VBOX_VERSION_MAJOR)'
3006 $(QUIET)$(APPEND) $@.tmp 'VBOX_VERSION_MINOR = $(VBOX_VERSION_MINOR)'
3007 $(QUIET)$(APPEND) $@.tmp 'VBOX_VERSION_BUILD = $(VBOX_VERSION_BUILD)'
3008 $(QUIET)$(APPEND) $@.tmp 'VBOX_VERSION_STRING = $(VBOX_VERSION_STRING)'
3009 $(QUIET)$(MV) -f $@.tmp $@
3010
3011ifndef VBOX_OSE
3012if1of ($(KBUILD_TARGET),freebsd linux netbsd openbsd solaris)
3013# VBOX_LICENSE_VER is used in several Makefiles
3014VBOX_LICENSE_SRC := $(PATH_ROOT)/doc/License.html
3015VBOX_LICENSE_VER_KMK = $(PATH_OUT)/license-version.kmk
3016$(VBOX_LICENSE_VER_KMK): $(VBOX_LICENSE_SRC)
3017 $(call MSG_GENERATE,,$(VBOX_LICENSE_VER_KMK))
3018 $(QUIET)$(MKDIR) -p $(@D)
3019 $(QUIET)$(SED) -e "s/.*License version \([0-9.]*\),.*/VBOX_LICENSE_VER=\1/;t;d" --output $@ $(VBOX_LICENSE_SRC)
3020-include $(VBOX_LICENSE_VER_KMK)
3021VBOX_LICENSE_BIN = $(PATH_BIN)/License-$(VBOX_LICENSE_VER).html
3022endif
3023endif
3024
3025
3026# Force building of the version header file as the first thing anywhere in
3027# the tree. This eliminates the need for manual dependencies on it.
3028## @todo there gotta be a better way of doing this.
3029Makefile.kmk: | $(VBOX_VERSION_HEADER) $(VBOX_VERSION_MK)
3030Makefile: | $(VBOX_VERSION_HEADER) $(VBOX_VERSION_MK)
3031makefile: | $(VBOX_VERSION_HEADER) $(VBOX_VERSION_MK)
3032
3033
3034#
3035# Subversion tree revision.
3036#
3037# The VBOX_SVN_REV contains our best guess. Use svn info on the
3038# root of the treeto determin this it if .svn/entries is found,
3039# otherwise fall back on the Config.kmk revision.
3040#
3041SVN ?= svn$(HOSTSUFF_EXE)
3042VBOX_SVN_REV_KMK = $(PATH_OUT)/revision.kmk
3043ifndef VBOX_SVN_REV
3044 VBOX_SVN_REV_FALLBACK := $(patsubst %:,, $Rev: 9573 $ )
3045 VBOX_SVN_DEP := $(wildcard $(PATH_ROOT)/.svn/entries)
3046 ifeq ($(which $(SVN)),)
3047 VBOX_SVN_DEP :=
3048 endif
3049
3050# Rule for generating a timestamp and updating the real thing on change.
3051$(VBOX_SVN_REV_KMK).ts +| $(VBOX_SVN_REV_KMK): $(if $(VBOX_SVN_DEP), $(VBOX_SVN_DEP), $(PATH_ROOT)/Config.kmk)
3052 $(call MSG_GENERATE,,$(VBOX_SVN_REV_KMK))
3053 $(QUIET)$(RM) -f $@ $@.tmp
3054 $(QUIET)$(MKDIR) -p $(@D)
3055 ifneq ($(VBOX_SVN_DEP),)
3056 $(REDIRECT) -E 'LC_ALL=C' -wo $@.tmp -- $(SVN) info $(PATH_ROOT)
3057 $(SED) -e '/^Revision/!d' -e 's/Revision\: */export VBOX_SVN_REV=/' --output $@ $@.tmp
3058 $(QUIET)$(RM) -f $@.tmp
3059 else
3060 $(QUIET)$(APPEND) $@ 'export VBOX_SVN_REV=$(VBOX_SVN_REV_FALLBACK)'
3061 endif
3062 $(QUIET)$(CP) --changed -fv $@ $(VBOX_SVN_REV_KMK)
3063
3064 include $(VBOX_SVN_REV_KMK)
3065else
3066# allow to overwrite VBOX_SVN_REV externally (mainly for building .debs/.rpms)
3067$(VBOX_SVN_REV_KMK):
3068 $(call MSG_GENERATE,,$(VBOX_SVN_REV_KMK))
3069 $(QUIET)$(RM) -f $@
3070 $(QUIET)$(MKDIR) -p $(@D)
3071 $(QUIET)$(APPEND) $@ 'export VBOX_SVN_REV=$(VBOX_SVN_REV)'
3072 $(QUIET)echo '* $(VBOX_SVN_REV_KMK) was externally overwritten:'
3073 $(QUIET)$(CAT) $(VBOX_SVN_REV_KMK)
3074endif
3075
3076
3077#
3078# Legacy.
3079#
3080ifneq ($(LOCALCFG),)
3081 include $(LOCALCFG)
3082endif
3083
3084
3085#
3086# Some extra goals.
3087#
3088.PHONY: up update st stat status
3089up update::
3090 $(SVN) up
3091
3092up2 update2::
3093 $(SVN) up --ignore-externals
3094
3095st stat status:
3096 $(SVN) status
3097
3098quick:
3099 $(MAKE) VBOX_QUICK=1
3100
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