VirtualBox

source: vbox/trunk/Config.kmk@ 200

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

uuid prevents me from cross compiling. Should get rid of it complete (needs proper random).

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

© 2023 Oracle
ContactPrivacy policyTerms of Use