2 * Copyright 2009-2010, Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
5 #ifndef _CONFIG_HAIKU_CONFIG_H
6 #define _CONFIG_HAIKU_CONFIG_H
9 /* Determine the architecture and define macros for some fundamental
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
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)
22 # define __HAIKU_ARCH x86
24 # define __HAIKU_ARCH_ABI "x86_gcc2"
26 # define __HAIKU_ARCH_ABI "x86"
28 # define __HAIKU_ARCH_X86 1
29 # define __HAIKU_ARCH_PHYSICAL_BITS 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
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
42 # define __HAIKU_ARCH m68k
43 # define __HAIKU_ARCH_ABI "m68k"
44 # define __HAIKU_ARCH_M68K 1
45 # define __HAIKU_BIG_ENDIAN 1
47 # define __HAIKU_ARCH mipsel
48 # define __HAIKU_ARCH_ABI "mipsel"
49 # define __HAIKU_ARCH_MIPSEL 1
50 #elif __ARM__ || __ARMEL__
51 # define __HAIKU_ARCH arm
52 # define __HAIKU_ARCH_ABI "arm"
53 # define __HAIKU_ARCH_ARM 1
55 # define __HAIKU_ARCH armeb
56 # define __HAIKU_ARCH_ABI "armeb"
57 # define __HAIKU_ARCH_ARM 1
58 # define __HAIKU_BIG_ENDIAN 1
60 # error Unsupported architecture!
63 /* implied properties:
64 __HAIKU_ARCH_{32,64}_BIT - defined to 1 on 32/64 bit architectures, i.e.
65 using 32/64 bit virtual addresses
66 __HAIKU_ARCH_PHYSICAL_BITS - defined to 32/64 on architectures with 32/64
67 bit physical addresses
68 __HAIKU_ARCH_PHYSICAL_{32,64}_BIT - defined to 1 on architectures using 64
69 bit physical addresses
70 __HAIKU_BIG_ENDIAN - defined to 1 on big endian architectures
74 #ifndef __HAIKU_ARCH_BITS
75 # define __HAIKU_ARCH_BITS 32
78 #if __HAIKU_ARCH_BITS == 32
79 # define __HAIKU_ARCH_32_BIT 1
80 #elif __HAIKU_ARCH_BITS == 64
81 # define __HAIKU_ARCH_64_BIT 1
83 # error Unsupported bitness!
86 /* physical bitness */
87 #ifndef __HAIKU_ARCH_PHYSICAL_BITS
88 # define __HAIKU_ARCH_PHYSICAL_BITS __HAIKU_ARCH_BITS
91 #if __HAIKU_ARCH_PHYSICAL_BITS == 32
92 # define __HAIKU_ARCH_PHYSICAL_32_BIT 1
93 #elif __HAIKU_ARCH_PHYSICAL_BITS == 64
94 # define __HAIKU_ARCH_PHYSICAL_64_BIT 1
96 # error Unsupported physical bitness!
100 #ifndef __HAIKU_BIG_ENDIAN
101 # define __HAIKU_LITTLE_ENDIAN 1
104 /* architecture specific include macros */
105 #define __HAIKU_ARCH_HEADER(header) <arch/__HAIKU_ARCH/header>
106 #define __HAIKU_SUBDIR_ARCH_HEADER(subdir, header) \
107 <subdir/arch/__HAIKU_ARCH/header>
109 /* BeOS R5 binary compatibility (gcc 2 on x86) */
110 #if defined(__HAIKU_ARCH_X86) && __GNUC__ == 2
111 # define __HAIKU_BEOS_COMPATIBLE 1
114 /* BeOS R5 compatible types */
115 #ifndef __HAIKU_ARCH_64_BIT
116 /*#ifdef __HAIKU_ARCH_X86*/
117 /* TODO: This should be "#ifdef __HAIKU_BEOS_COMPATIBLE", but this will
118 break all gcc 4 C++ optional packages. I.e. switch that at a suitable
121 # define __HAIKU_BEOS_COMPATIBLE_TYPES 1
125 #endif /* _CONFIG_HAIKU_CONFIG_H */