HaikuConfig.h revision 5bd0fbd1
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#elif defined(__riscv32__) || (defined(__riscv) && __riscv_xlen == 32)
65#	define __HAIKU_ARCH					riscv32
66#	define __HAIKU_ARCH_ABI				"riscv32"
67#	define __HAIKU_ARCH_RISCV32			1
68#	define __HAIKU_ARCH_BITS			32
69#elif defined(__riscv64__) || (defined(__riscv) && __riscv_xlen == 64)
70#	define __HAIKU_ARCH					riscv64
71#	define __HAIKU_ARCH_ABI				"riscv64"
72#	define __HAIKU_ARCH_RISCV32			1
73#	define __HAIKU_ARCH_BITS			64
74#else
75#	error Unsupported architecture!
76#endif
77
78/* implied properties:
79   __HAIKU_ARCH_{32,64}_BIT		- defined to 1 on 32/64 bit architectures, i.e.
80   								  using 32/64 bit virtual addresses
81   __HAIKU_ARCH_PHYSICAL_BITS	- defined to 32/64 on architectures with 32/64
82   								  bit physical addresses
83   __HAIKU_ARCH_PHYSICAL_{32,64}_BIT - defined to 1 on architectures using 64
84   								  bit physical addresses
85   __HAIKU_BIG_ENDIAN			- defined to 1 on big endian architectures
86*/
87
88/* bitness */
89#ifndef __HAIKU_ARCH_BITS
90#	define __HAIKU_ARCH_BITS		32
91#endif
92
93#if __HAIKU_ARCH_BITS == 32
94#	define __HAIKU_ARCH_32_BIT		1
95#elif __HAIKU_ARCH_BITS == 64
96#	define __HAIKU_ARCH_64_BIT		1
97#else
98#	error Unsupported bitness!
99#endif
100
101/* physical bitness */
102#ifndef __HAIKU_ARCH_PHYSICAL_BITS
103#	define __HAIKU_ARCH_PHYSICAL_BITS	__HAIKU_ARCH_BITS
104#endif
105
106#if __HAIKU_ARCH_PHYSICAL_BITS == 32
107#	define __HAIKU_ARCH_PHYSICAL_32_BIT	1
108#elif __HAIKU_ARCH_PHYSICAL_BITS == 64
109#	define __HAIKU_ARCH_PHYSICAL_64_BIT	1
110#else
111#	error Unsupported physical bitness!
112#endif
113
114/* endianess */
115#ifndef __HAIKU_BIG_ENDIAN
116#	define	__HAIKU_LITTLE_ENDIAN	1
117#endif
118
119/* architecture specific include macros */
120#define __HAIKU_ARCH_HEADER(header)					<arch/__HAIKU_ARCH/header>
121#define __HAIKU_SUBDIR_ARCH_HEADER(subdir, header)	\
122	<subdir/arch/__HAIKU_ARCH/header>
123
124/* BeOS R5 binary compatibility (gcc 2 on x86) */
125#if defined(__HAIKU_ARCH_X86) && __GNUC__ == 2
126#	define __HAIKU_BEOS_COMPATIBLE	1
127#endif
128
129/* BeOS R5 compatible types */
130#ifndef __HAIKU_ARCH_64_BIT
131/*#ifdef __HAIKU_ARCH_X86*/
132	/* TODO: This should be "#ifdef __HAIKU_BEOS_COMPATIBLE", but this will
133	   break all gcc 4 C++ optional packages. I.e. switch that at a suitable
134	   time.
135	*/
136#	define __HAIKU_BEOS_COMPATIBLE_TYPES	1
137#endif
138
139
140#endif	/* _CONFIG_HAIKU_CONFIG_H */
141