HaikuConfig.h revision fb4cc984
1/*
2 * Copyright 2009-2010, Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _CONFIG_HAIKU_CONFIG_H
6#define _CONFIG_HAIKU_CONFIG_H
7
8
9/* Determine the architecture and define macros for some fundamental
10   properties:
11   __HAIKU_ARCH					- short name of the architecture (used in paths)
12   __HAIKU_ARCH_ABI				- name of ABI (as in package architecture)
13   __HAIKU_ARCH_<arch>			- defined to 1 for the respective architecture
14   __HAIKU_ARCH_BITS			- defined to 32/64 on 32/64 bit architectures
15   								  (defaults to 32)
16   __HAIKU_ARCH_PHYSICAL_BITS	- defined to 32/64 on architectures with 32/64
17   								  (defaults to __HAIKU_ARCH_BITS)
18   __HAIKU_BIG_ENDIAN			- defined to 1 on big endian architectures
19   								  (defaults to undefined)
20*/
21#if defined(__INTEL__)
22#	define __HAIKU_ARCH					x86
23#	if __GNUC__ == 2
24#		define __HAIKU_ARCH_ABI			"x86_gcc2"
25#	else
26#		define __HAIKU_ARCH_ABI			"x86"
27#	endif
28#	define __HAIKU_ARCH_X86				1
29#	define __HAIKU_ARCH_PHYSICAL_BITS	64
30#elif defined(__x86_64__)
31#	define __HAIKU_ARCH					x86_64
32#	define __HAIKU_ARCH_ABI				"x86_64"
33#	define __HAIKU_ARCH_X86_64			1
34#	define __HAIKU_ARCH_BITS			64
35#elif defined(__POWERPC__)
36#	define __HAIKU_ARCH					ppc
37#	define __HAIKU_ARCH_ABI				"ppc"
38#	define __HAIKU_ARCH_PPC				1
39#	define __HAIKU_ARCH_PHYSICAL_BITS	64
40#	define __HAIKU_BIG_ENDIAN			1
41#elif defined(__M68K__)
42#	define __HAIKU_ARCH					m68k
43#	define __HAIKU_ARCH_ABI				"m68k"
44#	define __HAIKU_ARCH_M68K			1
45#	define __HAIKU_BIG_ENDIAN			1
46#elif defined(__MIPSEL__)
47#	define __HAIKU_ARCH					mipsel
48#	define __HAIKU_ARCH_ABI				"mipsel"
49#	define __HAIKU_ARCH_MIPSEL			1
50#elif defined(__ARMEL__) || defined(__arm__)
51#	define __HAIKU_ARCH					arm
52#	define __HAIKU_ARCH_ABI				"arm"
53#	define __HAIKU_ARCH_ARM				1
54#elif defined(__ARMEB__)
55#	define __HAIKU_ARCH					armeb
56#	define __HAIKU_ARCH_ABI				"armeb"
57#	define __HAIKU_ARCH_ARM				1
58#	define __HAIKU_BIG_ENDIAN			1
59#elif defined(__arm64__)
60#	define __HAIKU_ARCH					arm64
61#	define __HAIKU_ARCH_ABI				"arm64"
62#	define __HAIKU_ARCH_ARM64			1
63#	define __HAIKU_ARCH_BITS			64
64#else
65#	error Unsupported architecture!
66#endif
67
68/* implied properties:
69   __HAIKU_ARCH_{32,64}_BIT		- defined to 1 on 32/64 bit architectures, i.e.
70   								  using 32/64 bit virtual addresses
71   __HAIKU_ARCH_PHYSICAL_BITS	- defined to 32/64 on architectures with 32/64
72   								  bit physical addresses
73   __HAIKU_ARCH_PHYSICAL_{32,64}_BIT - defined to 1 on architectures using 64
74   								  bit physical addresses
75   __HAIKU_BIG_ENDIAN			- defined to 1 on big endian architectures
76*/
77
78/* bitness */
79#ifndef __HAIKU_ARCH_BITS
80#	define __HAIKU_ARCH_BITS		32
81#endif
82
83#if __HAIKU_ARCH_BITS == 32
84#	define __HAIKU_ARCH_32_BIT		1
85#elif __HAIKU_ARCH_BITS == 64
86#	define __HAIKU_ARCH_64_BIT		1
87#else
88#	error Unsupported bitness!
89#endif
90
91/* physical bitness */
92#ifndef __HAIKU_ARCH_PHYSICAL_BITS
93#	define __HAIKU_ARCH_PHYSICAL_BITS	__HAIKU_ARCH_BITS
94#endif
95
96#if __HAIKU_ARCH_PHYSICAL_BITS == 32
97#	define __HAIKU_ARCH_PHYSICAL_32_BIT	1
98#elif __HAIKU_ARCH_PHYSICAL_BITS == 64
99#	define __HAIKU_ARCH_PHYSICAL_64_BIT	1
100#else
101#	error Unsupported physical bitness!
102#endif
103
104/* endianess */
105#ifndef __HAIKU_BIG_ENDIAN
106#	define	__HAIKU_LITTLE_ENDIAN	1
107#endif
108
109/* architecture specific include macros */
110#define __HAIKU_ARCH_HEADER(header)					<arch/__HAIKU_ARCH/header>
111#define __HAIKU_SUBDIR_ARCH_HEADER(subdir, header)	\
112	<subdir/arch/__HAIKU_ARCH/header>
113
114/* BeOS R5 binary compatibility (gcc 2 on x86) */
115#if defined(__HAIKU_ARCH_X86) && __GNUC__ == 2
116#	define __HAIKU_BEOS_COMPATIBLE	1
117#endif
118
119/* BeOS R5 compatible types */
120#ifndef __HAIKU_ARCH_64_BIT
121/*#ifdef __HAIKU_ARCH_X86*/
122	/* TODO: This should be "#ifdef __HAIKU_BEOS_COMPATIBLE", but this will
123	   break all gcc 4 C++ optional packages. I.e. switch that at a suitable
124	   time.
125	*/
126#	define __HAIKU_BEOS_COMPATIBLE_TYPES	1
127#endif
128
129
130#endif	/* _CONFIG_HAIKU_CONFIG_H */
131