VirtualBox

source: vbox/trunk/Config.kmk@ 4837

Last change on this file since 4837 was 4832, checked in by vboxsync, 17 years ago

Solaris cannot use the IDT patching method at the moment (SMP troubles?) but it should because the ioctl path is very slow.

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

© 2023 Oracle
ContactPrivacy policyTerms of Use