xref: /haiku/build/jam/BuildSetup (revision e5d65858f2361fe0552495b61620c84dcee6bc00)
1
2# Variable naming conventions:
3# TARGET_*:	A build system variable specifying a property for building for
4#			the target platform (usually Haiku). E.g. TARGET_CC specifies the
5#			compiler when building a target for the target platform.
6# HOST_*:	A build system variable specifying a property of the platform
7#			hosting the build. E.g. HOST_CC specifies the compiler when
8#			building a target for the host platform (a build tool for
9#			instance).
10# HAIKU_*:	A build system variable specifying a build system property. Usually
11#			directory paths and the like.
12
13
14#pragma mark - container settings
15
16# Haiku image
17HAIKU_IMAGE_CONTAINER_NAME = haiku-image-container ;
18HAIKU_CONTAINER_GRIST on $(HAIKU_IMAGE_CONTAINER_NAME) = HaikuImage ;
19HAIKU_INCLUDE_IN_CONTAINER_VAR on $(HAIKU_IMAGE_CONTAINER_NAME)
20	= HAIKU_INCLUDE_IN_IMAGE ;
21HAIKU_INSTALL_TARGETS_VAR on $(HAIKU_IMAGE_CONTAINER_NAME)
22	= HAIKU_IMAGE_INSTALL_TARGETS ;
23
24# network boot archive
25HAIKU_NET_BOOT_ARCHIVE_CONTAINER_NAME = haiku-netboot-archive-container ;
26HAIKU_CONTAINER_GRIST on $(HAIKU_NET_BOOT_ARCHIVE_CONTAINER_NAME)
27	= NetBootArchive ;
28# HAIKU_INCLUDE_IN_CONTAINER_VAR -- update only mode not supported
29HAIKU_INSTALL_TARGETS_VAR on $(HAIKU_NET_BOOT_ARCHIVE_CONTAINER_NAME)
30	= HAIKU_NET_BOOT_ARCHIVE_INSTALL_TARGETS ;
31
32# alternative gcc archive
33HAIKU_ALTERNATIVE_GCC_ARCHIVE_CONTAINER_NAME
34	= haiku-alternative-gcc-archive-container ;
35HAIKU_CONTAINER_GRIST on $(HAIKU_ALTERNATIVE_GCC_ARCHIVE_CONTAINER_NAME)
36	= AlternativeGCCArchive ;
37# HAIKU_INCLUDE_IN_CONTAINER_VAR -- update only mode not supported
38HAIKU_INSTALL_TARGETS_VAR on $(HAIKU_ALTERNATIVE_GCC_ARCHIVE_CONTAINER_NAME)
39	= HAIKU_ALTERNATIVE_GCC_ARCHIVE_INSTALL_TARGETS ;
40
41# boot floppy
42HAIKU_FLOPPY_BOOT_IMAGE_CONTAINER_NAME = haiku-boot-floppy-container ;
43HAIKU_CONTAINER_GRIST on $(HAIKU_FLOPPY_BOOT_IMAGE_CONTAINER_NAME)
44	= FloppyBootImage ;
45# HAIKU_INCLUDE_IN_CONTAINER_VAR -- update only mode not supported
46HAIKU_INSTALL_TARGETS_VAR on $(HAIKU_FLOPPY_BOOT_IMAGE_CONTAINER_NAME)
47	= HAIKU_FLOPPY_BOOT_IMAGE_INSTALL_TARGETS ;
48
49# boot CD image
50HAIKU_CD_BOOT_IMAGE_CONTAINER_NAME = haiku-boot-cd-container ;
51HAIKU_CONTAINER_GRIST on $(HAIKU_CD_BOOT_IMAGE_CONTAINER_NAME) = CDBootImage ;
52# HAIKU_INCLUDE_IN_CONTAINER_VAR -- update only mode not supported
53HAIKU_INSTALL_TARGETS_VAR on $(HAIKU_CD_BOOT_IMAGE_CONTAINER_NAME)
54	= HAIKU_CD_BOOT_IMAGE_INSTALL_TARGETS ;
55
56# boot CD for PPC image
57HAIKU_CD_BOOT_PPC_IMAGE_CONTAINER_NAME = haiku-boot-cd-ppc-container ;
58HAIKU_CONTAINER_GRIST on $(HAIKU_CD_BOOT_PPC_IMAGE_CONTAINER_NAME) = CDBootPPCImage ;
59# HAIKU_INCLUDE_IN_CONTAINER_VAR -- update only mode not supported
60HAIKU_INSTALL_TARGETS_VAR on $(HAIKU_CD_BOOT_PPC_IMAGE_CONTAINER_NAME)
61	= HAIKU_CD_BOOT_PPC_IMAGE_INSTALL_TARGETS ;
62
63# Haiku image/install defaults
64HAIKU_DEFAULT_IMAGE_NAME = haiku.image ;
65HAIKU_DEFAULT_IMAGE_DIR = $(HAIKU_OUTPUT_DIR) ;
66HAIKU_DEFAULT_VMWARE_IMAGE_NAME = haiku.vmdk ;
67HAIKU_DEFAULT_INSTALL_DIR = /Haiku ;
68HAIKU_DEFAULT_IMAGE_SIZE ?= 300 ; # 300 MB
69HAIKU_DEFAULT_IMAGE_LABEL ?= Haiku ;
70
71# Haiku CD defaults
72HAIKU_DEFAULT_CD_NAME = haiku-cd.iso ;
73HAIKU_DEFAULT_CD_DIR = $(HAIKU_OUTPUT_DIR) ;
74HAIKU_DEFAULT_CD_LABEL = Haiku ;
75
76# Haiku Anyboot defaults
77HAIKU_DEFAULT_ANYBOOT_NAME = haiku-anyboot.image ;
78HAIKU_DEFAULT_ANYBOOT_DIR = $(HAIKU_OUTPUT_DIR) ;
79HAIKU_DEFAULT_ANYBOOT_LABEL ?= Haiku ;
80
81# analyze and optionally replace jam's target parameters
82ProcessCommandLineArguments ;
83
84
85# include libgccObjects
86{
87	local libgccObjects = [ GLOB $(HAIKU_BUILD_OUTPUT_DIR) : libgccObjects ] ;
88
89	if ! $(libgccObjects) {
90		ECHO "No `libgccObjects' found in"
91			"$(HAIKU_BUILD_OUTPUT_DIR)!" ;
92		EXIT "Please run ./configure in the source tree's root directory"
93			"again!" ;
94	}
95
96	LOCATE on libgccObjects = $(HAIKU_BUILD_OUTPUT_DIR) ;
97
98	include libgccObjects ;
99}
100
101
102# supported debug levels
103HAIKU_DEBUG_LEVELS = 0 1 2 3 4 5 ;
104
105# BeOS, BONE, Dan0 compatible platforms
106HAIKU_BEOS_COMPATIBLE_PLATFORMS = haiku r5 bone dano haiku_host ;
107HAIKU_BONE_COMPATIBLE_PLATFORMS = haiku bone dano haiku_host ;
108HAIKU_DANO_COMPATIBLE_PLATFORMS = haiku dano haiku_host ;
109HAIKU_HAIKU_COMPATIBLE_PLATFORMS = haiku haiku_host ;
110
111# configuration header directories
112HAIKU_CONFIG_HEADERS = [ FDirName $(HAIKU_TOP) build user_config_headers ]
113	[ FDirName $(HAIKU_TOP) build config_headers ] ;
114
115
116#pragma mark -
117
118# haiku target platform settings
119
120# analyze GCC version
121HAIKU_GCC_VERSION = [ FAnalyzeGCCVersion HAIKU_GCC_RAW_VERSION ] ;
122
123# enable GCC -pipe option, if requested
124if $(HAIKU_USE_GCC_PIPE) = 1 {
125	HAIKU_GCC_BASE_FLAGS = -pipe ;
126}
127
128# disable strict aliasing on anything newer than gcc 2 as it may lead to
129# unexpected results. also disable the tree-vrp (value range propagation)
130# optimization for now as with the current gcc4 version we are using this
131# results in some broken code.
132# TODO: remove the -fno-strict-aliasing option when all code has been
133#		analyzed/fixed with regard to aliasing.
134# TODO: retest/remove the -fno-tree-vrp option as soon as we have updated our
135#		gcc4 compiler. See this discussion on some issues:
136# http://www.freelists.org/post/haiku-development/hrev45320-Yet-another-nonobvious-effect-of-ftreevrp-optimization
137if $(HAIKU_GCC_VERSION[1]) >= 3 {
138	HAIKU_GCC_BASE_FLAGS += -fno-strict-aliasing -fno-tree-vrp ;
139}
140
141# disable array bounds warnings on gcc 4.6 or newer since they trigger
142# too many false positives. Coverity does a better job of this kind of analysis
143# anyways.
144if $(HAIKU_GCC_VERSION[1]) >= 4 {
145	HAIKU_GCC_BASE_FLAGS += -Wno-array-bounds ;
146}
147
148# activating graphite optimizations
149if $(HAIKU_USE_GCC_GRAPHITE) = 1 {
150	HAIKU_GCC_BASE_FLAGS += -floop-interchange -ftree-loop-distribution
151		-floop-strip-mine -floop-block ;
152}
153
154if $(HOST_GCC_VERSION[1]) >= 3 {
155	HOST_GCC_BASE_FLAGS += -fno-strict-aliasing -fno-tree-vrp ;
156}
157
158# override gcc 2.95.3's header directory -- strictly necessary only when using
159# the BeOS native compiler (since its headers are incompatible), but it doesn't
160# harm for the cross-compiler either.
161if $(HAIKU_GCC_VERSION[1]) = 2 {
162	HAIKU_GCC_HEADERS_DIR = [ FDirName $(HAIKU_TOP) headers build gcc-2.95.3 ] ;
163}
164
165# the subdirectory into which the alternative GCC libraries are to be installed
166if $(HAIKU_GCC_VERSION[1]) = 2 {
167	HAIKU_ALTERNATIVE_GCC_LIB_SUBDIR = gcc2 ;
168} else {
169	HAIKU_ALTERNATIVE_GCC_LIB_SUBDIR = gcc4 ;
170}
171
172# initial state for flags etc.
173HAIKU_C++ ?= $(HAIKU_CC) ;
174HAIKU_LINK = $(HAIKU_CC) ;
175HAIKU_LINKFLAGS = $(HAIKU_GCC_BASE_FLAGS) ;
176HAIKU_BOOT_LINKFLAGS = ;
177
178HAIKU_HDRS = [ FStandardHeaders ] ;
179HAIKU_KERNEL_CCFLAGS = $(HAIKU_CCFLAGS) $(HAIKU_GCC_BASE_FLAGS) ;
180HAIKU_KERNEL_C++FLAGS = $(HAIKU_C++FLAGS) $(HAIKU_GCC_BASE_FLAGS) ;
181HAIKU_BOOT_CCFLAGS = $(HAIKU_CCFLAGS) $(HAIKU_GCC_BASE_FLAGS) ;
182HAIKU_BOOT_C++FLAGS = $(HAIKU_C++FLAGS) $(HAIKU_GCC_BASE_FLAGS) ;
183HAIKU_CCFLAGS += $(HAIKU_GCC_BASE_FLAGS) -nostdinc ;
184HAIKU_C++FLAGS += $(HAIKU_GCC_BASE_FLAGS) -nostdinc ;
185HAIKU_DEFINES = __HAIKU__ ;
186HAIKU_NO_WERROR ?= 0 ;
187
188# distro compatibility level defines
189HAIKU_DISTRO_COMPATIBILITY ?= "default" ;
190switch $(HAIKU_DISTRO_COMPATIBILITY) {
191	case official	: {
192		HAIKU_DEFINES += HAIKU_DISTRO_COMPATIBILITY_OFFICIAL ;
193		HAIKU_INCLUDE_TRADEMARKS = "" ;
194	}
195	case compatible	: {
196		HAIKU_DEFINES += HAIKU_DISTRO_COMPATIBILITY_COMPATIBLE ;
197		HAIKU_INCLUDE_TRADEMARKS = "" ;
198	}
199	case "default"	: {
200		HAIKU_DEFINES += HAIKU_DISTRO_COMPATIBILITY_DEFAULT ;
201		HAIKU_INCLUDE_TRADEMARKS = ;
202	}
203	case *			: Exit "Invalid value for HAIKU_DISTRO_COMPATIBILITY:"
204						$(HAIKU_DISTRO_COMPATIBILITY) ;
205}
206
207# analyze the gcc machine spec to determine HAIKU_CPU
208switch $(HAIKU_GCC_MACHINE) {
209	case i?86-*		: HAIKU_CPU = x86 ;
210	case x86_64-*	: HAIKU_CPU = x86_64 ;
211	case powerpc-*	: HAIKU_CPU = ppc ;
212	case m68k-*		: HAIKU_CPU = m68k ;
213	case mipsel-*	: HAIKU_CPU = mipsel ;
214	case arm-*		: HAIKU_CPU = arm ;
215	case *			: Exit "Unsupported gcc target machine:"
216						$(HAIKU_GCC_MACHINE) ;
217}
218
219# determine the endianness of the host
220switch $(HOST_GCC_MACHINE) {
221	case amd64-*	: HAIKU_HOST_IS_BIG_ENDIAN = 0 ;
222	case i?86-*		: HAIKU_HOST_IS_BIG_ENDIAN = 0 ;
223	case powerpc-*	: HAIKU_HOST_IS_BIG_ENDIAN = 1 ;
224	case x86_64-*	: HAIKU_HOST_IS_BIG_ENDIAN = 0 ;
225
226	# the following are rather unlikely as hosts ...
227	case arm-*		: HAIKU_HOST_IS_BIG_ENDIAN = 0 ;
228	case m68k-*		: HAIKU_HOST_IS_BIG_ENDIAN = 1 ;
229	case mipsel-*	: HAIKU_HOST_IS_BIG_ENDIAN = 0 ;
230	case *			: Exit "Unsupported gcc host machine:" $(HOST_GCC_MACHINE) ;
231}
232
233switch $(HAIKU_CPU) {
234	case ppc :
235	{
236		HAIKU_DEFINES += __POWERPC__ ;
237		HAIKU_BOOT_PLATFORM ?= openfirmware ;
238		HAIKU_BOOT_FLOPPY_IMAGE_SIZE = 1440 ; # in kB
239		# offset in floppy image (>= sizeof(haiku_loader))
240		HAIKU_BOOT_ARCHIVE_IMAGE_OFFSET = 192 ; # in kB - unused yet
241	}
242	case arm :
243	{
244		HAIKU_DEFINES += __ARM__ ;
245		HAIKU_BOOT_PLATFORM ?= u-boot ;
246		HAIKU_BOOT_BOARD ?= verdex ;
247		HAIKU_BOOT_FLOPPY_IMAGE_SIZE = 1440 ;
248			# in kB (there is not really a floppy on the gumstix ;) )
249		# offset in floppy image (>= sizeof(haiku_loader))
250		HAIKU_BOOT_ARCHIVE_IMAGE_OFFSET = 192 ; # in kB - unused yet
251		HAIKU_NO_WERROR = 1 ;
252			# we use #warning as placeholders for things to write...
253	}
254	case x86 :
255	{
256		HAIKU_DEFINES += __INTEL__ ;
257		HAIKU_BOOT_PLATFORM = bios_ia32 ;
258		HAIKU_BOOT_FLOPPY_IMAGE_SIZE = 2880 ; # in kB
259		# offset in floppy image (>= sizeof(haiku_loader))
260		HAIKU_BOOT_ARCHIVE_IMAGE_OFFSET = 300 ; # in kB
261
262		# yasm is required for target arch x86
263		if ! $(HAIKU_YASM) {
264			Exit "HAIKU_YASM not set. Please re-run configure." ;
265		}
266	}
267	case x86_64 :
268	{
269		# x86_64 completely shares the x86 bootloader.
270		HAIKU_BOOT_PLATFORM = bios_ia32 ;
271		HAIKU_BOOT_FLOPPY_IMAGE_SIZE = 2880 ; # in kB
272		# offset in floppy image (>= sizeof(haiku_loader))
273		HAIKU_BOOT_ARCHIVE_IMAGE_OFFSET = 300 ; # in kB
274
275		# x86_64 kernel source is under arch/x86.
276		HAIKU_KERNEL_ARCH = x86 ;
277
278		# yasm is required for target arch x86_64
279		if ! $(HAIKU_YASM) {
280			Exit "HAIKU_YASM not set. Please re-run configure." ;
281		}
282	}
283	case m68k :
284	{
285		HAIKU_DEFINES += __M68K__ ;
286		HAIKU_BOOT_PLATFORM ?= atari_m68k ;
287		switch $(HAIKU_BOOT_PLATFORM) {
288			case atari_m68k :
289			{
290				HAIKU_BOOT_FLOPPY_IMAGE_SIZE = 1440 ; # in kB
291			}
292			case amiga_m68k :
293			{
294				# for now we have trouble reading from double-sided images
295				HAIKU_BOOT_FLOPPY_IMAGE_SIZE = 880 ; # in kB
296			}
297		}
298		# offset in floppy image (>= sizeof(haiku_loader))
299		HAIKU_BOOT_ARCHIVE_IMAGE_OFFSET = 260 ; # in kB
300		HAIKU_NO_WERROR = 1 ;
301			# we use #warning as placeholders for things to write...
302	}
303	case mipsel :
304	{
305		HAIKU_DEFINES += __MIPSEL__ ;
306		# RouterBOARD firmware (ELF image over TFTP)
307		HAIKU_BOOT_PLATFORM = routerboard_mipsel ;
308		# offset in floppy image (>= sizeof(haiku_loader))
309		HAIKU_BOOT_ARCHIVE_IMAGE_OFFSET = 192 ; # in kB
310		HAIKU_NO_WERROR = 1 ;
311			# we use #warning as placeholders for things to write...
312	}
313	case * :
314		Exit "Currently unsupported target CPU:" $(HAIKU_CPU) ;
315}
316
317# strip is required
318if ! $(HAIKU_STRIP) {
319	Exit "HAIKU_STRIP not set. Please re-run configure." ;
320}
321
322# Include embedded board-specific file.
323if $(HAIKU_BOOT_BOARD) {
324	include [ FDirName $(HAIKU_BUILD_RULES_DIR) board $(HAIKU_BOOT_BOARD)
325		BoardSetup ] ;
326}
327
328HAIKU_ARCH ?= $(HAIKU_CPU) ;
329HAIKU_ARCH_MACRO_DEFINE = ARCH_$(HAIKU_ARCH) ;
330HAIKU_DEFINES += $(HAIKU_ARCH_MACRO_DEFINE) ;
331HAIKU_DEFINES += BOOT_ARCHIVE_IMAGE_OFFSET=$(HAIKU_BOOT_ARCHIVE_IMAGE_OFFSET) ;
332HAIKU_KERNEL_ARCH ?= $(HAIKU_ARCH) ;
333HAIKU_ATA_STACK ?= 1 ;
334
335# directories
336HAIKU_OBJECT_BASE_DIR = [ FDirName $(HAIKU_OBJECT_DIR) haiku ] ;
337HAIKU_COMMON_ARCH_OBJECT_DIR = [ FDirName $(HAIKU_OBJECT_BASE_DIR) common ] ;
338HAIKU_ARCH_OBJECT_DIR = [ FDirName $(HAIKU_OBJECT_BASE_DIR) $(HAIKU_ARCH) ] ;
339HAIKU_COMMON_DEBUG_OBJECT_DIR = [ FDirName $(HAIKU_ARCH_OBJECT_DIR) common ] ;
340HAIKU_DEBUG_0_OBJECT_DIR = [ FDirName $(HAIKU_ARCH_OBJECT_DIR) release ] ;
341
342local level ;
343for level in $(HAIKU_DEBUG_LEVELS[2-]) {
344	HAIKU_DEBUG_$(level)_OBJECT_DIR
345		= [ FDirName $(HAIKU_ARCH_OBJECT_DIR) debug_$(level) ] ;
346}
347
348# set variables for gcc header options
349SetIncludePropertiesVariables HAIKU ;
350
351# assembler flags
352HAIKU_ASFLAGS = ;
353
354# C/C++ flags
355HAIKU_KERNEL_CCFLAGS += -finline -fno-builtin ;
356HAIKU_KERNEL_C++FLAGS += -finline -fno-builtin -fno-exceptions ;
357HAIKU_KERNEL_DEFINES += _KERNEL_MODE ;
358HAIKU_BOOT_CCFLAGS += -finline -fno-builtin ;
359HAIKU_BOOT_C++FLAGS += -finline -fno-builtin -fno-exceptions ;
360
361if $(HAIKU_GCC_VERSION[1]) >= 3 {
362	HAIKU_BOOT_C++FLAGS += -fno-use-cxa-atexit ;
363	HAIKU_KERNEL_C++FLAGS += -fno-use-cxa-atexit ;
364}
365
366if $(HAIKU_GCC_VERSION[1]) >= 4 {
367	HAIKU_C++FLAGS += -Wno-deprecated ;
368
369	HAIKU_KERNEL_CCFLAGS += -ffreestanding ;
370	HAIKU_KERNEL_C++FLAGS += -ffreestanding ;
371	HAIKU_BOOT_CCFLAGS += -ffreestanding ;
372	HAIKU_BOOT_C++FLAGS += -ffreestanding ;
373}
374
375HAIKU_KERNEL_PIC_CCFLAGS = -fno-pic ;
376HAIKU_KERNEL_PIC_LINKFLAGS = ;
377HAIKU_KERNEL_ADDON_LINKFLAGS = ;
378
379switch $(HAIKU_ARCH) {
380	case ppc :
381	{
382		# Build a position independent PPC kernel. We need to be able to
383		# relocate the kernel, since the virtual address space layout at boot
384		# time is not fixed.
385		HAIKU_KERNEL_PIC_CCFLAGS = -fPIE ;
386		HAIKU_KERNEL_PIC_LINKFLAGS = -shared -fPIE ;
387	}
388
389	case m68k :
390	{
391		# We don't want to have to handle emulating missing FPU opcodes for 040
392		# and 060 in the kernel.
393		HAIKU_KERNEL_CCFLAGS += -m68020-60 ;
394		HAIKU_KERNEL_C++FLAGS += -m68020-60 ;
395	}
396	case x86 :
397	{
398		HAIKU_CCFLAGS += -march=pentium ;
399		HAIKU_C++FLAGS += -march=pentium ;
400		HAIKU_KERNEL_CCFLAGS += -march=pentium ;
401		HAIKU_KERNEL_C++FLAGS += -march=pentium ;
402
403		# Enable use of the gcc built-in atomic functions instead of atomic_*().
404		# The former are inlined and have thus less overhead. They are not
405		# available with gcc 2, but the header will take care of that.
406		HAIKU_DEFINES += B_USE_BUILTIN_ATOMIC_FUNCTIONS ;
407	}
408	case x86_64 :
409	{
410		# Kernel lives in the top 2GB of the address space, use kernel code
411		# model.
412		HAIKU_KERNEL_PIC_CCFLAGS += -mcmodel=kernel ;
413
414		# Disable the red zone, which cannot be used in kernel code due to
415		# interrupts, and always enable the frame pointer so stack traces are
416		# correct.
417		HAIKU_KERNEL_CCFLAGS += -mno-red-zone -fno-omit-frame-pointer ;
418		HAIKU_KERNEL_C++FLAGS += -mno-red-zone -fno-omit-frame-pointer ;
419		HAIKU_KERNEL_PIC_LINKFLAGS += -z max-page-size=0x1000 ;
420		HAIKU_KERNEL_ADDON_LINKFLAGS += -z max-page-size=0x1000 ;
421
422		# Bootloader is 32-bit.
423		HAIKU_BOOT_LINKFLAGS += -m elf_i386_haiku ;
424		HAIKU_BOOT_CCFLAGS += -m32 -march=pentium ;
425		HAIKU_BOOT_C++FLAGS += -m32 -march=pentium ;
426
427		# Enable use of the gcc built-in atomic functions instead of atomic_*().
428		# The former are inlined and have thus less overhead.
429		HAIKU_DEFINES += B_USE_BUILTIN_ATOMIC_FUNCTIONS ;
430	}
431}
432
433# If the environment variable HAIKU_INCLUDE_PATENTED_CODE is defined, we
434# define an equally named macro to the variable value. Some components use the
435# macro to allow compilation of code known to implemented patented ideas and/or
436# techniques, for example the Freetype bytecode hinter or sub-pixel rendering
437# as well as some problematic media codecs.
438if $(HAIKU_INCLUDE_PATENTED_CODE) {
439	HAIKU_DEFINES
440		+= HAIKU_INCLUDE_PATENTED_CODE=$(HAIKU_INCLUDE_PATENTED_CODE) ;
441}
442
443# warning flags
444HAIKU_WARNING_CCFLAGS = -Wall -Wno-trigraphs -Wmissing-prototypes
445	-Wpointer-arith -Wcast-align -Wsign-compare -Wno-multichar ;
446HAIKU_WARNING_C++FLAGS = -Wall -Wno-trigraphs -Wno-ctor-dtor-privacy
447	-Woverloaded-virtual -Wpointer-arith -Wcast-align -Wsign-compare
448	-Wno-multichar ;
449
450HAIKU_KERNEL_WARNING_CCFLAGS = -Wall -Wno-trigraphs -Wmissing-prototypes
451	-Wno-multichar ;
452HAIKU_KERNEL_WARNING_C++FLAGS = -Wall -Wno-trigraphs -Wno-multichar ;
453
454# debug flags
455HAIKU_DEBUG_FLAGS ?= -ggdb ;
456
457# debug 0: suppress asserts
458HAIKU_DEBUG_0_CCFLAGS = [ FDefines NDEBUG=$(NDEBUG) ] ;
459HAIKU_DEBUG_0_C++FLAGS = [ FDefines NDEBUG=$(NDEBUG) ] ;
460
461HAIKU_KERNEL_DEBUG_0_CCFLAGS = [ FDefines NDEBUG=$(NDEBUG) ] ;
462HAIKU_KERNEL_DEBUG_0_C++FLAGS = [ FDefines NDEBUG=$(NDEBUG) ] ;
463
464local level ;
465for level in $(HAIKU_DEBUG_LEVELS[2-]) {
466	local flags = $(HAIKU_DEBUG_FLAGS) [ FDefines DEBUG=$(level) ] ;
467	HAIKU_DEBUG_$(level)_CCFLAGS			= $(flags) ;
468	HAIKU_DEBUG_$(level)_C++FLAGS			= $(flags) ;
469	HAIKU_KERNEL_DEBUG_$(level)_CCFLAGS		= $(flags) ;
470	HAIKU_KERNEL_DEBUG_$(level)_C++FLAGS	= $(flags) ;
471}
472
473if $(HAIKU_GCC_VERSION[1]) >= 3 {
474	# TODO: Temporary work-around. Should be defined in the compiler specs
475	HAIKU_LINKFLAGS += -Xlinker --no-undefined ;
476} else {
477	HAIKU_DEFINES += _BEOS_R5_COMPATIBLE_ ;
478}
479
480# private shared kernel/libroot headers
481HAIKU_PRIVATE_SYSTEM_HEADERS =
482	[ PrivateHeaders $(DOT) system system/arch/$(HAIKU_ARCH) ]
483;
484
485# private kernel headers to be used when compiling kernel code
486HAIKU_PRIVATE_KERNEL_HEADERS =
487	[ PrivateHeaders $(DOT) kernel libroot shared
488		kernel/boot/platform/$(HAIKU_BOOT_PLATFORM) ]
489	[ ArchHeaders $(HAIKU_KERNEL_ARCH) ]
490	[ FDirName $(HAIKU_COMMON_DEBUG_OBJECT_DIR) system kernel ]
491	$(HAIKU_PRIVATE_SYSTEM_HEADERS)
492;
493
494# Add some grist to the libgcc objects
495HAIKU_GCC_LIBGCC_OBJECTS = $(HAIKU_GCC_LIBGCC_OBJECTS:G=libgcc) ;
496
497# the C++ standard library
498HAIKU_BUILD_SHARED_LIBSTDC++ = ;
499if $(HAIKU_SHARED_LIBSTDC++) {
500	HAIKU_LIBSTDC++ = $(HAIKU_SHARED_LIBSTDC++) ;
501} else {
502	# no shared library available with the compiler -- build it
503	if $(HAIKU_GCC_VERSION[1]) = 2 {
504		HAIKU_LIBSTDC++ = libstdc++.r4.so ;
505	} else {
506		HAIKU_LIBSTDC++ = libstdc++.so ;
507	}
508	HAIKU_SHARED_LIBSTDC++ = $(HAIKU_LIBSTDC++) ;
509	HAIKU_BUILD_SHARED_LIBSTDC++ = 1 ;
510}
511
512# the C++ support (runtime) library
513HAIKU_BUILD_SHARED_LIBSUPC++ = ;
514if $(HAIKU_SHARED_LIBSUPC++) {
515	HAIKU_LIBSUPC++ = $(HAIKU_SHARED_LIBSUPC++) ;
516} else {
517	# no shared library available with the compiler -- build it for gcc 4
518	if $(HAIKU_GCC_VERSION[1]) != 2 {
519		HAIKU_SHARED_LIBSUPC++ = libsupc++.so ;
520		HAIKU_BUILD_SHARED_LIBSUPC++ = 1 ;
521	}
522
523	HAIKU_LIBSUPC++ = $(HAIKU_SHARED_LIBSUPC++) ;
524}
525
526
527# network libraries
528HAIKU_NETWORK_LIBS = network ;
529HAIKU_NETAPI_LIB = bnetapi ;
530HAIKU_SELECT_UNAME_ETC_LIB = ;	# libroot, against which we link anyway
531
532
533# locale libraries
534HAIKU_LOCALE_LIBS = liblocalestub.a ;
535
536
537# library and executable glue code
538local commonGlueCode =
539	<src!system!glue>init_term_dyn.o
540	<src!system!glue!arch!$(HAIKU_ARCH)>crti.o
541	<src!system!glue!arch!$(HAIKU_ARCH)>crtn.o
542;
543HAIKU_LIBRARY_BEGIN_GLUE_CODE =
544	<src!system!glue!arch!$(HAIKU_ARCH)>crti.o
545	crtbegin.o
546	<src!system!glue>init_term_dyn.o
547;
548HAIKU_LIBRARY_END_GLUE_CODE =
549	crtend.o
550	<src!system!glue!arch!$(HAIKU_ARCH)>crtn.o
551;
552HAIKU_EXECUTABLE_BEGIN_GLUE_CODE =
553	<src!system!glue!arch!$(HAIKU_ARCH)>crti.o
554	crtbegin.o
555	<src!system!glue>start_dyn.o
556	<src!system!glue>init_term_dyn.o
557;
558HAIKU_EXECUTABLE_END_GLUE_CODE = $(HAIKU_LIBRARY_END_GLUE_CODE) ;
559HAIKU_KERNEL_ADDON_BEGIN_GLUE_CODE = crtbegin.o
560	<src!system!glue>haiku_version_glue.o ;
561HAIKU_KERNEL_ADDON_END_GLUE_CODE = $(HAIKU_GCC_LIBGCC) crtend.o ;
562
563SEARCH on crtbegin.o crtend.o = $(HAIKU_GCC_LIB_DIR) ;
564
565HAIKU_EXECUTABLE_MIME_TYPE = "application/x-vnd.Be-elfexecutable" ;
566
567# TODO: The version stuff should probably go into a separate file and be made
568# available as macro, too.
569# Set our version number if not already set and mark it as a developer build
570if ! $(HAIKU_BUILD_VERSION) {
571	HAIKU_BUILD_VERSION ?= "1 0 0 a 1" ;
572	HAIKU_BUILD_DESCRIPTION ?= "Developer Build" ;
573}
574
575# If HAIKU_BUILD_VERSION is set, but HAIKU_BUILD_DESCRIPTION isn't, mark it as
576# an unknown build.
577HAIKU_BUILD_DESCRIPTION ?= "Unknown Build" ;
578
579# init library name map
580{
581	local i ;
582	for i in be bnetapi debug device game GL locale mail media midi midi2
583			network opengl package root screensaver textencoding tracker
584			translation z {
585		HAIKU_LIBRARY_NAME_MAP_$(i) = lib$(i).so ;
586	}
587	HAIKU_LIBRARY_NAME_MAP_libstdc++ = $(HAIKU_LIBSTDC++) ;
588	HAIKU_LIBRARY_NAME_MAP_libsupc++ = $(HAIKU_LIBSUPC++) ;
589	HAIKU_LIBRARY_NAME_MAP_input_server = <nogrist>input_server ;
590}
591
592
593#pragma mark -
594
595# host platform settings
596
597# analyze the host gcc machine spec to find out about 64-bitness
598HOST_PLATFORM_IS_64_BIT = ;
599switch $(HOST_GCC_MACHINE) {
600	case amd64-* :				HOST_PLATFORM_IS_64_BIT = 1 ;
601	case i686-apple-darwin10 :	HOST_PLATFORM_IS_64_BIT = 1 ;
602	case i686-apple-darwin11 :	HOST_PLATFORM_IS_64_BIT = 1 ;
603	case x86_64-* :				HOST_PLATFORM_IS_64_BIT = 1 ;
604}
605
606# If HAIKU_HOST_USE_32BIT is set, add the required gcc base flag (the LD flag
607# is set later), or, if the architecture isn't actually 64 bit, clear
608# HAIKU_HOST_USE_32BIT.
609# Afterwards HOST_PLATFORM_IS_64_BIT will indicate whether the architecture is
610# effectively (i.e. when using the compiler/linker flags) 64 bit and
611# HAIKU_HOST_USE_32BIT will be set, iff the architecture is really 64 bit and
612# 32 bit mode was requested.
613if $(HAIKU_HOST_USE_32BIT) = 1 {
614	if $(HOST_PLATFORM_IS_64_BIT) {
615		# enable GCC -m32 option
616		HOST_GCC_BASE_FLAGS = -m32 ;
617		HOST_PLATFORM_IS_64_BIT = ;
618	} else {
619		HAIKU_HOST_USE_32BIT = 0 ;
620	}
621}
622
623
624# save jam's variables for the build platform
625HOST_AR				?= $(AR) ;
626HOST_CC				?= $(CC) ;
627HOST_C++			?= $(C++) ;
628HOST_LINK			?= $(LINK) ;
629HOST_RANLIB			?= $(RANLIB) ;
630HOST_CPPFLAGS		?= $(CPPFLAGS) ;
631HOST_CCFLAGS		?= $(HOST_GCC_BASE_FLAGS) $(CCFLAGS) ;
632HOST_C++FLAGS		?= $(HOST_GCC_BASE_FLAGS) $(C++FLAGS) ;
633HOST_LDFLAGS		?= $(LDFLAGS) ;
634HOST_LINKFLAGS		?= $(HOST_GCC_BASE_FLAGS) $(LINKFLAGS) ;
635HOST_DEFINES		?= $(DEFINES) ;
636HOST_HDRS			?= $(HDRS) ;
637
638
639# split up HOST_AR into the command name and flags
640HOST_AR				= [ Match "([^ ]*) *(.*)" : $(HOST_AR[1]) ]
641					  $(HOST_AR[2-]) ;
642HOST_ARFLAGS		= $(HOST_AR[2-]) ;
643HOST_AR				= $(HOST_AR[1]) ;
644HOST_UNARFLAGS		?= x ;
645
646# check the host platform compatibility
647SetPlatformCompatibilityFlagVariables HOST_PLATFORM : HOST : host
648	: linux openbsd freebsd darwin sunos cygwin ;
649
650if $(HOST_PLATFORM) = linux || $(HOST_PLATFORM) = freebsd
651	|| $(HOST_PLATFORM) = darwin || $(HOST_PLATFORM) = cygwin
652	|| $(HOST_PLATFORM) = sunos || $(HOST_PLATFORM) = openbsd {
653	# don't use lex: otherwise rc will not work correctly
654	if $(LEX) = lex {
655		LEX = flex ;
656	}
657}
658
659# On recent versions of OS X cc and c++ point to clang, which fails to
660# compile some of the host tools. As a workaround, force use of GCC.
661if $(HOST_PLATFORM) = darwin {
662	HOST_CC = gcc ;
663	HOST_C++ = g++ ;
664}
665
666if $(HOST_PLATFORM) = cygwin {
667	HOST_LINKFLAGS += -Xlinker --allow-multiple-definition -Xlinker
668		--enable-auto-import ;
669}
670
671HOST_CPU	?= $(OSPLAT:L) ;
672
673# Jam doesn't know x86_64, so override HOST_CPU, if 64 bit.
674if $(HOST_CPU) = x86 && $(HOST_PLATFORM_IS_64_BIT) {
675	HOST_CPU = x86_64 ;
676}
677
678HOST_ARCH				?= $(HOST_CPU) ;
679HOST_ARCH_MACRO_DEFINE	= ARCH_$(HOST_CPU) ;
680
681
682# directories
683HOST_OBJECT_BASE_DIR = [ FDirName $(HAIKU_OBJECT_DIR) $(HOST_PLATFORM) ] ;
684HOST_COMMON_ARCH_OBJECT_DIR = [ FDirName $(HOST_OBJECT_BASE_DIR) common ] ;
685HOST_ARCH_OBJECT_DIR = [ FDirName $(HOST_OBJECT_BASE_DIR) $(HOST_ARCH) ] ;
686HOST_COMMON_DEBUG_OBJECT_DIR = [ FDirName $(HOST_ARCH_OBJECT_DIR) common ] ;
687HOST_DEBUG_0_OBJECT_DIR = [ FDirName $(HOST_ARCH_OBJECT_DIR) release ] ;
688
689local level ;
690for level in $(HAIKU_DEBUG_LEVELS[2-]) {
691	HOST_DEBUG_$(level)_OBJECT_DIR
692		= [ FDirName $(HOST_ARCH_OBJECT_DIR) debug_$(level) ] ;
693}
694
695# analyze GCC version
696HOST_GCC_VERSION = [ FAnalyzeGCCVersion HOST_GCC_RAW_VERSION ] ;
697
698# set variables for gcc header options
699SetIncludePropertiesVariables HOST ;
700
701# assembler flags
702HOST_ASFLAGS = ;
703
704# C/C++ flags
705HOST_CCFLAGS += -Wno-multichar ;
706HOST_C++FLAGS += -Wno-multichar ;
707
708if $(HOST_PLATFORM) != cygwin {
709	HOST_PIC_CCFLAGS += -fPIC ;
710	HOST_PIC_C++FLAGS += -fPIC ;
711}
712
713HOST_KERNEL_CCFLAGS += $(HOST_GCC_BASE_FLAGS) -finline -fno-builtin
714	-D_KERNEL_MODE ;
715HOST_KERNEL_C++FLAGS += $(HOST_GCC_BASE_FLAGS) -finline -fno-builtin
716	-fno-exceptions -D_KERNEL_MODE ;
717HOST_KERNEL_DEFINES += _KERNEL_MODE ;
718
719HOST_KERNEL_PIC_CCFLAGS = -fno-pic ;
720HOST_KERNEL_PIC_LINKFLAGS = ;
721if $(HOST_ARCH) = ppc {
722	# Build a position independent PPC kernel. We need to be able to relocate
723	# the kernel, since the virtual address space layout at boot time is not
724	# fixed.
725	HOST_KERNEL_PIC_CCFLAGS = -fPIE ;
726	HOST_KERNEL_PIC_LINKFLAGS = -shared -fPIE ;
727}
728if $(HOST_ARCH) = m68k {
729	# Build a position independent M68K kernel. We need to be able to relocate
730	# the kernel, since the virtual address space layout at boot time is not
731	# fixed.
732	HOST_KERNEL_PIC_CCFLAGS = $(HAIKU_KERNEL_PIC_CCFLAGS) ;
733	HOST_KERNEL_PIC_LINKFLAGS = $(HAIKU_KERNEL_PIC_LINKFLAGS) ;
734}
735
736if $(HOST_PLATFORM) != darwin {
737	# fix for new changes to DSO linking policies
738	HOST_LINKFLAGS += -Xlinker --no-as-needed ;
739}
740
741
742# warning flags
743HOST_WARNING_CCFLAGS = -Wall -Wno-trigraphs -Wmissing-prototypes -Wpointer-arith
744	-Wcast-align -Wsign-compare ;
745HOST_WARNING_C++FLAGS = -Wall -Wno-trigraphs -Wno-ctor-dtor-privacy
746	-Woverloaded-virtual -Wpointer-arith -Wcast-align -Wsign-compare ;
747
748HOST_KERNEL_WARNING_CCFLAGS = -Wall -Wno-trigraphs -Wmissing-prototypes ;
749HOST_KERNEL_WARNING_C++FLAGS = -Wall -Wno-trigraphs ;
750
751# debug flags
752switch $(HOST_PLATFORM) {
753	case haiku	: HOST_DEBUG_FLAGS ?= -ggdb ;
754	case haiku_host	: HOST_DEBUG_FLAGS ?= -ggdb ;
755	case linux	: HOST_DEBUG_FLAGS ?= -ggdb ;
756	case freebsd	: HOST_DEBUG_FLAGS ?= -ggdb ;
757	case darwin	: HOST_DEBUG_FLAGS ?= -ggdb ;
758	case *		: HOST_DEBUG_FLAGS ?= -g ;
759}
760
761# debug 0: suppress asserts
762HOST_DEBUG_0_CCFLAGS = [ FDefines NDEBUG=$(NDEBUG) ] ;
763HOST_DEBUG_0_C++FLAGS = [ FDefines NDEBUG=$(NDEBUG) ] ;
764
765HOST_KERNEL_DEBUG_0_CCFLAGS = [ FDefines NDEBUG=$(NDEBUG) ] ;
766HOST_KERNEL_DEBUG_0_C++FLAGS = [ FDefines NDEBUG=$(NDEBUG) ] ;
767
768local level ;
769for level in $(HAIKU_DEBUG_LEVELS[2-]) {
770	local flags = $(HOST_DEBUG_FLAGS) [ FDefines DEBUG=$(level) ] ;
771	HOST_DEBUG_$(level)_CCFLAGS			= $(flags) ;
772	HOST_DEBUG_$(level)_C++FLAGS		= $(flags) ;
773	HOST_KERNEL_DEBUG_$(level)_CCFLAGS	= $(flags) ;
774	HOST_KERNEL_DEBUG_$(level)_C++FLAGS	= $(flags) ;
775}
776
777# ld flags
778if $(HAIKU_HOST_USE_32BIT) = 1 {
779	HOST_LDFLAGS += -melf_i386 ;
780}
781
782# private kernel headers do be used when compiling kernel code
783HOST_PRIVATE_KERNEL_HEADERS = ;
784
785# private shared kernel/libroot headers
786HOST_PRIVATE_SYSTEM_HEADERS = ;
787
788# under BeOS use copyattr instead of cp
789if $(HOST_PLATFORM_BEOS_COMPATIBLE)
790{
791	CP = copyattr --data ;
792}
793
794HOST_DEFINES += $(HOST_ARCH_MACRO_DEFINE) ;
795HOST_DEFINES += _NO_INLINE_ASM ;
796
797if $(HOST_PLATFORM_BEOS_COMPATIBLE) {
798	# TODO: That's obviously not correct, but in the way the COMPILE_FOR_R5
799	# macro is used, it actually seems to mean r5/bone/dano.
800	# TODO: Deprecated. Remove!
801	HOST_DEFINES += COMPILE_FOR_R5 ;
802}
803
804# for builds of tools in the current environment
805HOST_BUILD_COMPATIBILITY_LIB_DIR = [ FDirName $(HOST_OBJECT_BASE_DIR) lib ] ;
806
807# For the generic attributes emulation: Target rm_attrs -- rm replacement that
808# also removes the attributes.
809HOST_RM_ATTRS_TARGET = ;
810
811if $(HOST_PLATFORM_BEOS_COMPATIBLE) {
812	# the C++ standard and support libraries
813	if $(HOST_GCC_VERSION[1]) < 3 {
814		HOST_LIBSTDC++ = stdc++.r4 ;
815		HOST_LIBSUPC++ = ;
816	} else {
817		HOST_LIBSTDC++ = stdc++ ;
818		HOST_LIBSUPC++ = supc++ ;
819	}
820
821	HOST_LIBROOT = root ;
822	HOST_STATIC_LIBROOT = $(HOST_LIBROOT) ;
823	HOST_LIBBE = be ;
824	HOST_ADD_BUILD_COMPATIBILITY_LIB_DIR = "export LIBRARY_PATH=$LIBRARY_PATH:$(HOST_BUILD_COMPATIBILITY_LIB_DIR)"  ;
825	HOST_LIBRARY_NAME_MAP_input_server = /system/servers/input_server ;
826	HOST_DEFINES += __STDC_FORMAT_MACROS __STDC_LIMIT_MACROS ;
827
828	local compatibilityHeader = -include [ FDirName $(HAIKU_TOP) headers build
829		HaikuBuildCompatibility.h ] ;
830	HOST_CCFLAGS += $(compatibilityHeader) ;
831	HOST_C++FLAGS += $(compatibilityHeader) ;
832
833	# compatibility library
834	HOST_HAIKU_COMPATIBILITY_LIBS = libhaikucompat.a ;
835} else {
836	HOST_LINKFLAGS += -lm ;
837	HOST_LIBSTDC++ = stdc++ ;
838	HOST_LIBROOT = libroot_build_function_remapper.a libroot_build.so ;
839	HOST_STATIC_LIBROOT = libroot_build_function_remapper.a libroot_build.a ;
840	HOST_LIBBE = libbe_build.so ;
841	if $(HOST_PLATFORM) = cygwin {
842		HOST_ADD_BUILD_COMPATIBILITY_LIB_DIR
843			= "export PATH=$PATH:$(HOST_BUILD_COMPATIBILITY_LIB_DIR)" ;
844	} else if $(HOST_PLATFORM) = darwin {
845		HOST_ADD_BUILD_COMPATIBILITY_LIB_DIR
846			= "export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$(HOST_BUILD_COMPATIBILITY_LIB_DIR)" ;
847	} else {
848		HOST_ADD_BUILD_COMPATIBILITY_LIB_DIR
849			= "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(HOST_BUILD_COMPATIBILITY_LIB_DIR)" ;
850	}
851
852	# the C++ support library
853	if $(HOST_GCC_VERSION[1]) < 3 {
854		HOST_LIBSUPC++ = ;
855	} else {
856		HOST_LIBSUPC++ = supc++ ;
857	}
858
859	if $(HOST_PLATFORM) = darwin {
860		# part of the C++ runtime lives in libstdc++ on Darwin
861		HOST_LIBSUPC++ = gcc_s.1 stdc++ ;
862		HOST_LIBSTDC++ = ;
863	} else if $(HOST_PLATFORM) = freebsd {
864		if $(HOST_CPU) = x86_64 {
865			# amd64 FreeBSD 8 doesn't come without a shared libsupc++, and the
866			# static one prevents us from building shared libraries. So we have
867			# to work around by using the shared libstdc++.
868			HOST_LIBSUPC++ = stdc++ ;
869			HOST_LIBSTDC++ = ;
870		}
871	}
872
873	# Unlike glibc FreeBSD's libc doesn't have built-in regex support.
874	if $(HOST_PLATFORM) = freebsd {
875		HOST_LIBROOT += /usr/lib/libgnuregex.so ;
876		HOST_STATIC_LIBROOT += /usr/lib/libgnuregex.so ;
877	} else if $(HOST_PLATFORM) = darwin {
878		HOST_LIBROOT += /opt/local/lib/libgnuregex.dylib ;
879		HOST_STATIC_LIBROOT += /opt/local/lib/libgnuregex.dylib ;
880	}
881
882	# The BeOS compilers define __INTEL__ respectively __POWERPC__. On the
883	# build platform we need to make sure, this is also defined.
884	if $(HOST_CPU) = x86 {
885		HOST_DEFINES += __INTEL__ ;
886	} else if $(HOST_CPU) = x86_64 {
887		HOST_DEFINES += __x86_64__ ;
888	} else if $(HOST_CPU) = ppc {
889		HOST_DEFINES += __POWERPC__ ;
890	} else if $(HOST_CPU) = m68k {
891		HOST_DEFINES += __M68K__ ;
892	} else if $(HOST_CPU) = mipsel {
893		HOST_DEFINES += __MIPSEL__ ;
894	}
895
896	# Supposing this is a glibc platform, let's try to get features like large
897	# file support, ISO C 99 definitions, etc. On some platforms we need to
898	# request 64 bit off_t support explicitely.
899	HOST_DEFINES += _GNU_SOURCE _FILE_OFFSET_BITS=64 __STDC_FORMAT_MACROS
900		__STDC_LIMIT_MACROS ;
901
902	# On Linux with xattr support we can use it for our attribute emulation,
903	# which is somewhat more robust.
904	if $(HAIKU_HOST_USE_XATTR) = 1 {
905		HOST_DEFINES += HAIKU_HOST_USE_XATTR ;
906	} else {
907		# Otherwise the generic attribute emulation is used, which uses a
908		# directory per file to store its attribute. We need to redefine RM so
909		# that the attributes are removed as well. We use a wrapper script,
910		# which invokes a build tool. If the build tool hasn't been built yet,
911		# the normal "rm" is used and the attributes are leaked (likely there
912		# aren't any yet).
913		RM = $(HOST_ADD_BUILD_COMPATIBILITY_LIB_DIR) ";"
914			[ FDirName $(HAIKU_TOP) build scripts rm_attrs ]
915			[ FDirName $(HAIKU_OBJECT_DIR) $(HOST_PLATFORM) $(HOST_ARCH) release
916				tools rm_attrs ] -f ;
917			# assumes that rm_attrs is built with debugging disabled
918		HOST_RM_ATTRS_TARGET = <build>rm_attrs ;
919	}
920}
921
922# network libraries
923if $(HOST_PLATFORM_HAIKU_COMPATIBLE) {
924	HOST_NETWORK_LIBS = network ;
925	HOST_NETAPI_LIB = bnetapi ;
926	HOST_SELECT_UNAME_ETC_LIB = ;	# libroot
927} else if $(HOST_PLATFORM_BONE_COMPATIBLE) {
928	HOST_NETWORK_LIBS = socket bind ;
929	HOST_NETAPI_LIB = bnetapi ;
930	HOST_SELECT_UNAME_ETC_LIB = ;	# libroot
931} else if $(HOST_PLATFORM_BEOS_COMPATIBLE) {
932	HOST_NETWORK_LIBS = net ;
933	HOST_NETAPI_LIB = netapi ;
934	HOST_SELECT_UNAME_ETC_LIB = net ;
935} else if $(HOST_PLATFORM) = "sunos" {
936	HOST_NETWORK_LIBS = xnet ;
937	HOST_NETAPI_LIB = ;
938	HOST_SELECT_UNAME_ETC_LIB = ;
939} else {
940	# Linux,...
941	HOST_NETWORK_LIBS = ;
942	HOST_NETAPI_LIB = ;
943	HOST_SELECT_UNAME_ETC_LIB = ;
944}
945
946# define the executable MIME type
947HOST_EXECUTABLE_MIME_TYPE = "application/x-vnd.Be-elfexecutable" ;
948
949if $(METROWERKS) {
950	# at least parts of Haiku still can be compiled with
951	# the Metrowerks compiler on BeOS/PPC
952	HOST_EXECUTABLE_MIME_TYPE = "application/x-be-executable" ;
953}
954
955# Be API compatibility
956HOST_BE_API_HEADERS = ;
957HOST_BE_API_CCFLAGS = ;
958HOST_BE_API_C++FLAGS = ;
959
960if ! $(HOST_PLATFORM_BEOS_COMPATIBLE) {
961	HOST_BE_API_HEADERS =
962		[ FDirName $(HAIKU_TOP) headers build ]
963		[ FDirName $(HAIKU_TOP) headers build os ]
964		[ FDirName $(HAIKU_TOP) headers build os app ]
965		[ FDirName $(HAIKU_TOP) headers build os drivers ]
966		[ FDirName $(HAIKU_TOP) headers build os kernel ]
967		[ FDirName $(HAIKU_TOP) headers build os interface ]
968		[ FDirName $(HAIKU_TOP) headers build os locale ]
969		[ FDirName $(HAIKU_TOP) headers build os opengl ]
970		[ FDirName $(HAIKU_TOP) headers build os storage ]
971		[ FDirName $(HAIKU_TOP) headers build os support ]
972		[ FDirName $(HAIKU_TOP) headers build private ]
973	;
974	HOST_BE_API_CCFLAGS = -include BeOSBuildCompatibility.h ;
975	HOST_BE_API_C++FLAGS = $(HOST_BE_API_CCFLAGS) ;
976}
977
978# Add directory with system headers we need when building something for the host
979# platform, e.g. containing missing POSIX/GNU headers.
980HOST_HDRS += [ FDirName $(HAIKU_TOP) headers build host $(HOST_PLATFORM) ] ;
981
982# For all versions of BeOS also add the common beos directory.
983if $(HOST_PLATFORM) in r5 bone dano {
984	HOST_HDRS += [ FDirName $(HAIKU_TOP) headers build host beos_common ] ;
985}
986
987
988#pragma mark -
989
990# target platform settings
991
992# check the target platform compatibility
993SetPlatformCompatibilityFlagVariables TARGET_PLATFORM : TARGET : target ;
994
995# check the compatibility between host and target platform
996if $(TARGET_PLATFORM) != haiku {
997	if ! $(HOST_PLATFORM_($(TARGET_PLATFORM))_COMPATIBLE) {
998		Exit ERROR: The host platform is not compatible with target platform
999			$(TARGET_PLATFORM). ;
1000	}
1001}
1002
1003# Set TARGET_* variables either from HAIKU_* or HOST_* depending on the
1004# specified TARGET_PLATFORM.
1005
1006local buildVars =
1007	ARCH CPU GCC_VERSION KERNEL_ARCH
1008
1009	AR CC C++ LD OBJCOPY RANLIB ELFEDIT
1010
1011	INCLUDES_SEPARATOR LOCAL_INCLUDES_OPTION SYSTEM_INCLUDES_OPTION
1012
1013	HDRS CPPFLAGS CCFLAGS C++FLAGS LDFLAGS LINK LINKFLAGS DEFINES
1014	ARFLAGS UNARFLAGS
1015	KERNEL_DEFINES
1016
1017	KERNEL_CCFLAGS KERNEL_C++FLAGS
1018	KERNEL_PIC_CCFLAGS KERNEL_PIC_LINKFLAGS KERNEL_ADDON_LINKFLAGS
1019	BOOT_CCFLAGS BOOT_C++FLAGS BOOT_LINKFLAGS
1020	WARNING_CCFLAGS WARNING_C++FLAGS
1021
1022	KERNEL_WARNING_CCFLAGS KERNEL_WARNING_C++FLAGS
1023
1024	DEBUG_FLAGS
1025
1026	DEBUG_$(HAIKU_DEBUG_LEVELS)_CCFLAGS DEBUG_$(HAIKU_DEBUG_LEVELS)_C++FLAGS
1027
1028	KERNEL_DEBUG_$(HAIKU_DEBUG_LEVELS)_CCFLAGS
1029	KERNEL_DEBUG_$(HAIKU_DEBUG_LEVELS)_C++FLAGS
1030
1031	PRIVATE_KERNEL_HEADERS
1032	PRIVATE_SYSTEM_HEADERS
1033
1034	LIBSTDC++ LIBSUPC++
1035	STATIC_LIBSTDC++ STATIC_LIBSUPC++
1036
1037	NETWORK_LIBS NETAPI_LIB SELECT_UNAME_ETC_LIB
1038
1039	ARCH_MACRO_DEFINE EXECUTABLE_MIME_TYPE
1040
1041	OBJECT_BASE_DIR COMMON_ARCH_OBJECT_DIR COMMON_DEBUG_OBJECT_DIR
1042	DEBUG_$(HAIKU_DEBUG_LEVELS)_OBJECT_DIR
1043;
1044
1045if $(TARGET_PLATFORM) = haiku {
1046	local var ;
1047	for var in $(buildVars) {
1048		TARGET_$(var) = $(HAIKU_$(var)) ;
1049	}
1050
1051	TARGET_GCC_LIB_DIR			= $(HAIKU_GCC_LIB_DIR) ;
1052	TARGET_GCC_HEADERS_DIR		= $(HAIKU_GCC_HEADERS_DIR) ;
1053	TARGET_GCC_LIBGCC			= $(HAIKU_GCC_LIBGCC) ;
1054	TARGET_GCC_LIBGCC_OBJECTS	= $(HAIKU_GCC_LIBGCC_OBJECTS) ;
1055
1056	TARGET_KERNEL_LIBGCC		= $(HAIKU_KERNEL_LIBGCC) ;
1057	TARGET_KERNEL_LIBSUPC++		= $(HAIKU_KERNEL_LIBSUPC++) ;
1058	TARGET_BOOT_LIBGCC			= $(HAIKU_BOOT_LIBGCC) ;
1059	TARGET_BOOT_LIBSUPC++		= $(HAIKU_BOOT_LIBSUPC++) ;
1060
1061	TARGET_BOOT_PLATFORM		?= $(HAIKU_BOOT_PLATFORM) ;
1062	TARGET_BOOT_BOARD			?= $(HAIKU_BOOT_BOARD) ;
1063
1064	TARGET_LIBRARY_NAME_MAP		= HAIKU_LIBRARY_NAME_MAP ;
1065
1066} else {
1067	local var ;
1068	for var in $(buildVars) {
1069		TARGET_$(var) = $(HOST_$(var)) ;
1070	}
1071
1072	TARGET_GCC_LIB_DIR			= ;
1073	TARGET_GCC_HEADERS_DIR		= ;
1074	TARGET_GCC_LIBGCC			= ;
1075	TARGET_GCC_LIBGCC_OBJECTS	= ;
1076
1077	TARGET_KERNEL_LIBGCC		= ;
1078	TARGET_KERNEL_LIBSUPC++		= ;
1079	TARGET_BOOT_LIBGCC			= ;
1080	TARGET_BOOT_LIBSUPC++		= ;
1081
1082	TARGET_BOOT_PLATFORM		= ;
1083	TARGET_BOOT_BOARD			= ;
1084
1085	TARGET_LIBRARY_NAME_MAP		= HOST_LIBRARY_NAME_MAP ;
1086}
1087
1088# define macro, for identifying the platform
1089switch $(TARGET_PLATFORM) {
1090	case r5			: TARGET_DEFINES	+= HAIKU_TARGET_PLATFORM_BEOS ;
1091	case bone		: TARGET_DEFINES	+= HAIKU_TARGET_PLATFORM_BONE ;
1092	case dano		: TARGET_DEFINES	+= HAIKU_TARGET_PLATFORM_DANO ;
1093	case haiku_host	: TARGET_DEFINES	+= HAIKU_TARGET_PLATFORM_HAIKU ;
1094	case haiku		: TARGET_DEFINES	+= HAIKU_TARGET_PLATFORM_HAIKU ;
1095	case linux		: TARGET_DEFINES	+= HAIKU_TARGET_PLATFORM_LINUX ;
1096	case freebsd	: TARGET_DEFINES	+= HAIKU_TARGET_PLATFORM_FREEBSD ;
1097	case darwin		: TARGET_DEFINES	+= HAIKU_TARGET_PLATFORM_DARWIN ;
1098	case cygwin		: TARGET_DEFINES	+= HAIKU_TARGET_PLATFORM_CYGWIN ;
1099	case sunos		: TARGET_DEFINES	+= HAIKU_TARGET_PLATFORM_SUNOS ;
1100	case libbe_test	: TARGET_DEFINES	+= HAIKU_TARGET_PLATFORM_LIBBE_TEST ;
1101}
1102
1103# define macro, for identifying the host platform
1104switch $(HOST_PLATFORM) {
1105	case r5			: HOST_DEFINES	+= HAIKU_HOST_PLATFORM_BEOS ;
1106	case bone		: HOST_DEFINES	+= HAIKU_HOST_PLATFORM_BONE ;
1107	case dano		: HOST_DEFINES	+= HAIKU_HOST_PLATFORM_DANO ;
1108	case haiku_host	: HOST_DEFINES	+= HAIKU_HOST_PLATFORM_HAIKU ;
1109	case linux		: HOST_DEFINES	+= HAIKU_HOST_PLATFORM_LINUX ;
1110	case freebsd	: HOST_DEFINES	+= HAIKU_HOST_PLATFORM_FREEBSD ;
1111	case darwin		: HOST_DEFINES	+= HAIKU_HOST_PLATFORM_DARWIN ;
1112	case cygwin		: HOST_DEFINES	+= HAIKU_HOST_PLATFORM_CYGWIN ;
1113	case sunos		: HOST_DEFINES	+= HAIKU_HOST_PLATFORM_SUNOS ;
1114}
1115
1116# define host platform 64 bit macro
1117if $(HOST_PLATFORM_IS_64_BIT) {
1118	HOST_DEFINES += HAIKU_HOST_PLATFORM_64_BIT ;
1119}
1120
1121#pragma mark -
1122
1123# In case we build for a BeOS compatible platform, but not for Haiku, we
1124# include the HaikuBuildCompatibility.h header and link against
1125# libhaikucompat.a.
1126
1127if ! $(TARGET_PLATFORM_HAIKU_COMPATIBLE) && $(TARGET_PLATFORM_BEOS_COMPATIBLE) {
1128	# headers and flags
1129	local compatibilityHeader = -include [ FDirName $(HAIKU_TOP) headers build
1130		HaikuBuildCompatibility.h ] ;
1131	TARGET_CCFLAGS += $(compatibilityHeader) ;
1132	TARGET_C++FLAGS += $(compatibilityHeader) ;
1133
1134	# compatibility library
1135	TARGET_HAIKU_COMPATIBILITY_LIBS = libhaikucompat.a ;
1136}
1137
1138# special target libbe_test
1139
1140if $(TARGET_PLATFORM) = libbe_test {
1141	# headers and flags
1142	TARGET_HDRS +=
1143		[ PublicHeaders $(DOT) app drivers game interface kernel locale storage
1144			support ]
1145		[ PrivateHeaders $(DOT) ] ;
1146	TARGET_DEFINES += __HAIKU__ ;
1147
1148	TARGET_PRIVATE_SYSTEM_HEADERS =
1149		[ PrivateHeaders $(DOT) system system/arch/$(TARGET_ARCH) ] ;
1150
1151	# directories
1152	TARGET_OBJECT_BASE_DIR
1153		= [ FDirName $(HAIKU_OBJECT_DIR) $(TARGET_PLATFORM) ] ;
1154	TARGET_COMMON_ARCH_OBJECT_DIR
1155		= [ FDirName $(TARGET_OBJECT_BASE_DIR) common ] ;
1156	TARGET_ARCH_OBJECT_DIR
1157		= [ FDirName $(TARGET_OBJECT_BASE_DIR) $(TARGET_ARCH) ] ;
1158	TARGET_COMMON_DEBUG_OBJECT_DIR
1159		= [ FDirName $(TARGET_ARCH_OBJECT_DIR) common ] ;
1160	TARGET_DEBUG_0_OBJECT_DIR
1161		= [ FDirName $(TARGET_ARCH_OBJECT_DIR) release ] ;
1162
1163	local level ;
1164	for level in $(HAIKU_DEBUG_LEVELS[2-]) {
1165		TARGET_DEBUG_$(level)_OBJECT_DIR
1166			= [ FDirName $(TARGET_ARCH_OBJECT_DIR) debug_$(level) ] ;
1167	}
1168
1169	# library name map
1170	TARGET_LIBRARY_NAME_MAP = LIBBE_LIBRARY_NAME_MAP ;
1171	LIBBE_LIBRARY_NAME_MAP_be = libbe_test.so ;
1172}
1173
1174
1175#pragma mark -
1176
1177# common stuff
1178
1179# start with a clean state
1180CCFLAGS = ;
1181C++FLAGS = ;
1182DEFINES = ;
1183
1184# Set CC, C++, LINK to invalid values, so that we realize early, that we use
1185# the wrong compiler.
1186CC = bad-cc ;
1187C++ = bad-c++ ;
1188LINK = bad-link ;
1189
1190# Allow compiling unit tests on Zeta. Instead of fixing the PostMessage()
1191# issues, they deprecated that nice function. This will enable it again:
1192C++FLAGS += -D_ZETA_USING_DEPRECATED_API_=1 ;
1193# Same for buggy find_directory threadsafety fixes
1194C++FLAGS += -D_ZETA_TS_FIND_DIR_=1 ;
1195	# TODO: Doesn't really belong here.
1196
1197
1198# Defaults for warnings, optimization, and debugging.
1199#
1200WARNINGS ?= 1 ;
1201OPTIM ?= -O2 ;
1202DEBUG ?= 0 ;
1203
1204
1205# Set the defaults for PLATFORM and SUPPORTED_PLATFORMS. PLATFORM is only
1206# overridden for targets to be built for the host platform. SUPPORTED_PLATFORMS
1207# can be overridden by the author of a component.
1208PLATFORM = $(TARGET_PLATFORM) ;
1209SUPPORTED_PLATFORMS = haiku ;
1210
1211
1212# Instructs the Library rule to not make its object files temporary.
1213# This is needed as some objects are used in a static library and for an
1214# executable.
1215KEEPOBJS = true ;
1216
1217
1218# Set permissions to how they should be on the image.
1219EXEMODE		= 755 ;
1220FILEMODE	= 644 ;
1221SHELLMODE	= 755 ;
1222
1223
1224# output directories
1225# TODO: Review this.
1226HAIKU_DOCUMENTATION_DIR ?= [ FDirName $(HAIKU_OUTPUT_DIR) documentation ] ;
1227HAIKU_DOCUMENTATION_OBJECT_DIR ?= [ FDirName $(HAIKU_COMMON_PLATFORM_OBJECT_DIR)
1228	documentation ] ;
1229
1230# TODO: Rethink test stuff.
1231HAIKU_TEST_DIR			?= [ FDirName $(HAIKU_OUTPUT_DIR) tests
1232	$(TARGET_PLATFORM) $(HAIKU_ARCH) ] ;
1233HAIKU_APP_TEST_DIR		?= [ FDirName $(HAIKU_TEST_DIR) apps ] ;
1234HAIKU_APP_TEST_LIB_DIR 	?= [ FDirName $(HAIKU_APP_TEST_DIR) lib ] ;
1235HAIKU_TMP_DIR			?= [ FDirName $(HAIKU_OUTPUT_DIR) tmp ] ;
1236
1237HAIKU_PACKAGE_DIR ?= [ FDirName $(HAIKU_OUTPUT_DIR) packages ] ;
1238HAIKU_PACKAGE_OBJECT_DIR ?= [ FDirName $(HAIKU_OBJECT_DIR) packages ] ;
1239
1240TARGET_TEST_DIR				?= [ FDirName $(HAIKU_TEST_DIR)
1241									$(TARGET_PLATFORM) ] ;
1242TARGET_UNIT_TEST_DIR		?= [ FDirName $(TARGET_TEST_DIR) unittests ] ;
1243TARGET_UNIT_TEST_LIB_DIR	?= [ FDirName $(TARGET_UNIT_TEST_DIR) lib ] ;
1244
1245# automatically setup the objects directory per subdirectory
1246SUBDIRRULES += SetupObjectsDir ;
1247
1248# Add the standard (userland) warning flags variables to the ones restored in
1249# every subdirectory. Thus we can easily meddle with them in subdirectories
1250# with imported sources.
1251AUTO_SET_UP_CONFIG_VARIABLES +=
1252	HOST_WARNING_CCFLAGS HOST_WARNING_C++FLAGS
1253	TARGET_WARNING_CCFLAGS TARGET_WARNING_C++FLAGS
1254
1255	# also add PLATFORM and SUPPORTED_PLATFORMS
1256	PLATFORM SUPPORTED_PLATFORMS
1257;
1258
1259
1260# enable -Werror for certain parts of the source tree
1261HAIKU_WERRORFLAGS = ;
1262if $(HAIKU_GCC_VERSION[1]) >= 4 {
1263	# -Wuninitialized gives too many false positives.
1264	HAIKU_WERRORFLAGS = -Wno-error=uninitialized ;
1265
1266	# TODO: remove the -Wno-unused-but-set-variable option
1267	HAIKU_WERRORFLAGS += -Wno-unused-but-set-variable ;
1268}
1269
1270rule EnableWerror dirTokens : scope {
1271	AppendToConfigVar CCFLAGS : HAIKU_TOP $(dirTokens)
1272		: -Werror $(HAIKU_WERRORFLAGS) : $(scope) ;
1273	AppendToConfigVar C++FLAGS : HAIKU_TOP $(dirTokens)
1274		: -Werror $(HAIKU_WERRORFLAGS) : $(scope) ;
1275}
1276
1277# Work-around for GCC 2 problem -- despite -Wno-multichar it reports
1278# multichar warnings in headers/private/kernel/debugger_keymaps.h included by
1279# src/system/kernel/arch/x86/arch_debug_console.cpp.
1280if $(HAIKU_GCC_VERSION[1]) = 2 {
1281	local file = <src!system!kernel!arch!x86>arch_debug_console.o ;
1282	C++FLAGS on $(file) = [ on $(file) return $(C++FLAGS) ] ;
1283}
1284
1285if $(HAIKU_NO_WERROR) != 1 {
1286	EnableWerror src add-ons accelerants 3dfx ;
1287	EnableWerror src add-ons accelerants ati ;
1288	EnableWerror src add-ons accelerants common ;
1289	EnableWerror src add-ons accelerants et6x00 ;
1290#	EnableWerror src add-ons accelerants intel_extreme ;
1291#	EnableWerror src add-ons accelerants matrox ;
1292	EnableWerror src add-ons accelerants neomagic ;
1293#	EnableWerror src add-ons accelerants nvidia ;
1294	EnableWerror src add-ons accelerants nvidia_gpgpu ;
1295#	EnableWerror src add-ons accelerants radeon ;
1296#	EnableWerror src add-ons accelerants radeon_hd ;
1297	EnableWerror src add-ons accelerants s3 ;
1298	EnableWerror src add-ons accelerants skeleton ;
1299	EnableWerror src add-ons accelerants vesa ;
1300	EnableWerror src add-ons accelerants via ;
1301	EnableWerror src add-ons accelerants vmware ;
1302	EnableWerror src add-ons bluetooth ;
1303	EnableWerror src add-ons decorators ;
1304	EnableWerror src add-ons disk_systems ;
1305	EnableWerror src add-ons input_server devices ;
1306#	EnableWerror src add-ons input_server filters ;
1307#	EnableWerror src add-ons input_server methods ;
1308	EnableWerror src add-ons kernel bluetooth ;
1309#	EnableWerror src add-ons kernel bus_managers acpi ;
1310	EnableWerror src add-ons kernel bus_managers agp_gart ;
1311	EnableWerror src add-ons kernel bus_managers ata ;
1312	EnableWerror src add-ons kernel bus_managers config_manager ;
1313#	EnableWerror src add-ons kernel bus_managers firewire ;
1314	EnableWerror src add-ons kernel bus_managers isa ;
1315	EnableWerror src add-ons kernel bus_managers pci ;
1316#	EnableWerror src add-ons kernel bus_managers ps2 ; # gcc2
1317	EnableWerror src add-ons kernel bus_managers scsi ;
1318	EnableWerror src add-ons kernel bus_managers usb ;
1319	EnableWerror src add-ons kernel busses agp_gart ;
1320	EnableWerror src add-ons kernel busses ata ;
1321	EnableWerror src add-ons kernel busses scsi ;
1322	EnableWerror src add-ons kernel busses usb ;
1323	EnableWerror src add-ons kernel console ;
1324	EnableWerror src add-ons kernel cpu ;
1325#	EnableWerror src add-ons kernel debugger ; # gcc2
1326#	EnableWerror src add-ons kernel drivers audio ;
1327	EnableWerror src add-ons kernel drivers bluetooth ;
1328	EnableWerror src add-ons kernel drivers bus ;
1329	EnableWerror src add-ons kernel drivers common ;
1330	EnableWerror src add-ons kernel drivers disk ;
1331	EnableWerror src add-ons kernel drivers dvb ;
1332#	EnableWerror src add-ons kernel drivers graphics ;
1333#	EnableWerror src add-ons kernel drivers input ;
1334	EnableWerror src add-ons kernel drivers joystick ;
1335	EnableWerror src add-ons kernel drivers midi ;
1336	EnableWerror src add-ons kernel drivers misc ;
1337#	EnableWerror src add-ons kernel drivers network ;
1338	EnableWerror src add-ons kernel drivers ports ;
1339#	EnableWerror src add-ons kernel drivers power ;
1340	EnableWerror src add-ons kernel drivers printer ;
1341	EnableWerror src add-ons kernel drivers random ;
1342	EnableWerror src add-ons kernel drivers tty ;
1343	EnableWerror src add-ons kernel drivers video ;
1344	EnableWerror src add-ons kernel file_systems bfs ;
1345	EnableWerror src add-ons kernel file_systems cdda ;
1346#	EnableWerror src add-ons kernel file_systems ext2 ;
1347#	EnableWerror src add-ons kernel file_systems fat ;
1348#	EnableWerror src add-ons kernel file_systems googlefs ;
1349	EnableWerror src add-ons kernel file_systems iso9660 ;
1350	EnableWerror src add-ons kernel file_systems layers ;
1351	EnableWerror src add-ons kernel file_systems netfs ;
1352	EnableWerror src add-ons kernel file_systems nfs ;
1353	EnableWerror src add-ons kernel file_systems nfs4 ;
1354#	EnableWerror src add-ons kernel file_systems ntfs ;
1355	EnableWerror src add-ons kernel file_systems packagefs ;
1356	EnableWerror src add-ons kernel file_systems ramfs ;
1357#	EnableWerror src add-ons kernel file_systems reiserfs ;
1358	EnableWerror src add-ons kernel file_systems udf ;
1359	EnableWerror src add-ons kernel file_systems userlandfs ;
1360	EnableWerror src add-ons kernel generic ;
1361#	EnableWerror src add-ons kernel network datalink_protocols ;
1362	EnableWerror src add-ons kernel network devices ;
1363	EnableWerror src add-ons kernel network dns_resolver ;
1364	EnableWerror src add-ons kernel network notifications ;
1365	EnableWerror src add-ons kernel network ppp ;
1366	EnableWerror src add-ons kernel network protocols ;
1367#	EnableWerror src add-ons kernel network stack ;
1368	EnableWerror src add-ons kernel partitioning_systems ;
1369	EnableWerror src add-ons locale ;
1370	EnableWerror src add-ons mail_daemon ;
1371	EnableWerror src add-ons media media-add-ons demultiplexer ;
1372	EnableWerror src add-ons media media-add-ons dvb ;
1373	EnableWerror src add-ons media media-add-ons esound_sink ;
1374	EnableWerror src add-ons media media-add-ons finepix_webcam ;
1375	EnableWerror src add-ons media media-add-ons firewire_dv ;
1376	EnableWerror src add-ons media media-add-ons legacy ;
1377	EnableWerror src add-ons media media-add-ons mixer ;
1378	EnableWerror src add-ons media media-add-ons multi_audio ;
1379	EnableWerror src add-ons media media-add-ons opensound ;
1380	EnableWerror src add-ons media media-add-ons radeon ;
1381	EnableWerror src add-ons media media-add-ons reader ;
1382	EnableWerror src add-ons media media-add-ons tone_producer_demo ;
1383	EnableWerror src add-ons media media-add-ons usb_vision ;
1384#	EnableWerror src add-ons media media-add-ons usb_webcam ;
1385	EnableWerror src add-ons media media-add-ons video_mixer ;
1386#	EnableWerror src add-ons media media-add-ons video_producer_demo ;
1387	EnableWerror src add-ons media media-add-ons videowindow ;
1388	EnableWerror src add-ons media media-add-ons writer ;
1389	EnableWerror src add-ons media plugins ac3_decoder ;
1390	EnableWerror src add-ons media plugins aiff_reader ;
1391	EnableWerror src add-ons media plugins ape_reader ;
1392#	EnableWerror src add-ons media plugins asf_reader ;
1393	EnableWerror src add-ons media plugins au_reader ;
1394#	EnableWerror src add-ons media plugins avi_reader ;
1395#	EnableWerror src add-ons media plugins ffmpeg ;
1396#	EnableWerror src add-ons media plugins matroska ;
1397#	EnableWerror src add-ons media plugins mov_reader ;
1398	EnableWerror src add-ons media plugins mp3_decoder ;
1399#	EnableWerror src add-ons media plugins mp3_reader ;
1400	EnableWerror src add-ons media plugins mp4_reader ;
1401	EnableWerror src add-ons media plugins musepack ;
1402#	EnableWerror src add-ons media plugins ogg ;
1403#	EnableWerror src add-ons media plugins raw_decoder ;
1404#	EnableWerror src add-ons media plugins speex ;
1405	EnableWerror src add-ons media plugins theora ;
1406	EnableWerror src add-ons media plugins vorbis ;
1407#	EnableWerror src add-ons media plugins wav_reader ;
1408	EnableWerror src add-ons media plugins xvid_decoder ;
1409	EnableWerror src add-ons opengl ;
1410	EnableWerror src add-ons print ;
1411	EnableWerror src add-ons screen_savers ;
1412	EnableWerror src add-ons tracker ;
1413	EnableWerror src add-ons translators bmp ;
1414#	EnableWerror src add-ons translators exr ;
1415	EnableWerror src add-ons translators gif ;
1416#	EnableWerror src add-ons translators hpgs ;
1417	EnableWerror src add-ons translators hvif ;
1418	EnableWerror src add-ons translators ico ;
1419#	EnableWerror src add-ons translators jpeg ; # gcc2
1420	EnableWerror src add-ons translators jpeg2000 ;
1421	EnableWerror src add-ons translators pcx ;
1422#	EnableWerror src add-ons translators png ; # gcc2
1423	EnableWerror src add-ons translators ppm ;
1424	EnableWerror src add-ons translators raw ;
1425	EnableWerror src add-ons translators rtf ;
1426	EnableWerror src add-ons translators sgi ;
1427	EnableWerror src add-ons translators shared ;
1428#	EnableWerror src add-ons translators stxt ;
1429	EnableWerror src add-ons translators tga ;
1430	EnableWerror src add-ons translators tiff ;
1431#	EnableWerror src add-ons translators wonderbrush ;
1432	EnableWerror src add-ons print ;
1433	EnableWerror src bin package ;
1434	EnableWerror src apps ;
1435	EnableWerror src kits ;
1436	EnableWerror src preferences ;
1437	EnableWerror src servers ;
1438	EnableWerror src system kernel ;
1439	EnableWerror src system libroot add-ons ;
1440	EnableWerror src system libroot posix locale ;
1441	EnableWerror src system libroot posix wchar ;
1442	EnableWerror src system runtime_loader ;
1443}
1444
1445# The following directories cannot currently be compiled with DEBUG=1
1446SetConfigVar DEBUG : HAIKU_TOP src add-ons disk_systems bfs : 0 : local ;
1447SetConfigVar DEBUG : HAIKU_TOP src add-ons kernel drivers audio hda : 0 : local ;
1448SetConfigVar DEBUG : HAIKU_TOP src add-ons kernel drivers audio ac97 auich : 0 : local ; # fails with gcc4 only
1449SetConfigVar DEBUG : HAIKU_TOP src add-ons kernel drivers audio ac97 auvia : 0 : local ; # fails with gcc4 only
1450SetConfigVar DEBUG : HAIKU_TOP src add-ons kernel drivers audio ac97 sis7018 : 0 : local ;
1451SetConfigVar DEBUG : HAIKU_TOP src add-ons kernel file_systems btrfs : 0 : local ;
1452SetConfigVar DEBUG : HAIKU_TOP src add-ons kernel file_systems ntfs libntfs : 0 : local ;
1453SetConfigVar DEBUG : HAIKU_TOP src add-ons kernel file_systems udf : 0 : local ;
1454SetConfigVar DEBUG : HAIKU_TOP src add-ons media media-add-ons dvb : 0 : local ;
1455SetConfigVar DEBUG : HAIKU_TOP src add-ons print drivers gutenprint : 0 : local ;
1456SetConfigVar DEBUG : HAIKU_TOP src servers input : 0 : local ;
1457SetConfigVar DEBUG : HAIKU_TOP src servers media_addon : 0 : local ;
1458SetConfigVar DEBUG : HAIKU_TOP src system boot loader file_systems bfs : 0 : local ;
1459SetConfigVar DEBUG : HAIKU_TOP src system boot loader file_systems tarfs : 0 : local ;
1460