VirtualBox

source: vbox/trunk/Config.kmk@ 6577

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

Try use VBOXGUESTR3LIB for VBoxGuestR3LibXFree86. Start building VBoxGuestR3Lib on linux even if it's not yet used anywhere.

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

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