VirtualBox

source: vbox/trunk/Config.kmk@ 5999

Last change on this file since 5999 was 5982, checked in by vboxsync, 17 years ago

Removed obsolete VRDP server interface that used COM.

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