VirtualBox

source: vbox/trunk/Config.kmk@ 2473

Last change on this file since 2473 was 2473, checked in by vboxsync, 18 years ago

kmk startup is annoyingly slow because of all the GCC checks. Detect these once and cache the result in $(PATH_OUT).

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