xref: /haiku/headers/os/BeBuild.h (revision a1d79e238ede4132e674c76d0a987f80160ccb66)
1 /*
2  * Copyright 2007-2024, Haiku, Inc. All Rights Reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef _BE_BUILD_H
6 #define _BE_BUILD_H
7 
8 
9 #include <config/HaikuConfig.h>
10 
11 
12 #define B_BEOS_VERSION_4				0x0400
13 #define B_BEOS_VERSION_4_5				0x0450
14 #define B_BEOS_VERSION_5				0x0500
15 
16 #define B_BEOS_VERSION					B_BEOS_VERSION_5
17 #define B_BEOS_VERSION_MAUI				B_BEOS_VERSION_5
18 
19 /* Haiku (API) version */
20 #define B_HAIKU_VERSION_BEOS			0x00000001
21 #define B_HAIKU_VERSION_BONE			0x00000002
22 #define B_HAIKU_VERSION_DANO			0x00000003
23 #define B_HAIKU_VERSION_1_ALPHA_1		0x00000100
24 #define B_HAIKU_VERSION_1_PRE_ALPHA_2	0x00000101
25 #define B_HAIKU_VERSION_1_ALPHA_2		0x00000200
26 #define B_HAIKU_VERSION_1_PRE_ALPHA_3	0x00000201
27 #define B_HAIKU_VERSION_1_ALPHA_3		0x00000300
28 #define B_HAIKU_VERSION_1_PRE_ALPHA_4	0x00000301
29 #define B_HAIKU_VERSION_1_ALPHA_4		0x00000400
30 #define B_HAIKU_VERSION_1_PRE_BETA_1	0x00000401
31 #define B_HAIKU_VERSION_1_BETA_1		0x00000500
32 #define B_HAIKU_VERSION_1_PRE_BETA_2	0x00000501
33 #define B_HAIKU_VERSION_1_BETA_2		0x00000600
34 #define B_HAIKU_VERSION_1_PRE_BETA_3	0x00000601
35 #define B_HAIKU_VERSION_1_BETA_3		0x00000700
36 #define B_HAIKU_VERSION_1_PRE_BETA_4	0x00000701
37 #define B_HAIKU_VERSION_1_BETA_4		0x00000800
38 #define B_HAIKU_VERSION_1_PRE_BETA_5	0x00000801
39 #define B_HAIKU_VERSION_1_BETA_5		0x00000900
40 #define B_HAIKU_VERSION_1_PRE_BETA_6	0x00000901
41 #define B_HAIKU_VERSION_1				0x00010000
42 
43 #define B_HAIKU_VERSION					B_HAIKU_VERSION_1_PRE_BETA_6
44 
45 /* Haiku ABI */
46 #define B_HAIKU_ABI_MAJOR				0xffff0000
47 #define B_HAIKU_ABI_GCC_2				0x00020000
48 #define B_HAIKU_ABI_GCC_4				0x00040000
49 
50 #define B_HAIKU_ABI_GCC_2_ANCIENT		0x00020000
51 #define B_HAIKU_ABI_GCC_2_BEOS			0x00020001
52 #define B_HAIKU_ABI_GCC_2_HAIKU			0x00020002
53 
54 #define B_HAIKU_ABI_NAME				__HAIKU_ARCH_ABI
55 
56 #if __GNUC__ == 2
57 #	define B_HAIKU_ABI					B_HAIKU_ABI_GCC_2_HAIKU
58 #elif (__GNUC__ >= 4 && __GNUC__ <= 14) || defined(__TINYC__)
59 #	define B_HAIKU_ABI					B_HAIKU_ABI_GCC_4
60 #else
61 #	error Unsupported compiler!
62 #endif
63 
64 
65 #define B_HAIKU_BITS					__HAIKU_ARCH_BITS
66 #define B_HAIKU_PHYSICAL_BITS			__HAIKU_ARCH_PHYSICAL_BITS
67 
68 #ifdef __HAIKU_ARCH_64_BIT
69 #	define B_HAIKU_64_BIT				1
70 #else
71 #	define B_HAIKU_32_BIT				1
72 #endif
73 
74 #ifdef __HAIKU_ARCH_PHYSICAL_64_BIT
75 #	define B_HAIKU_PHYSICAL_64_BIT		1
76 #else
77 #	define B_HAIKU_PHYSICAL_32_BIT		1
78 #endif
79 
80 #ifdef __HAIKU_BEOS_COMPATIBLE
81 #	define B_HAIKU_BEOS_COMPATIBLE		1
82 #endif
83 
84 
85 #define _UNUSED(argument) argument
86 #define _PACKED __attribute__((packed))
87 #define _PRINTFLIKE(_format_, _args_) \
88 	__attribute__((format(__printf__, _format_, _args_)))
89 
90 #if __GNUC__ >= 4
91 # define _ALIGNED_BY_ARG(_no_) __attribute__((alloc_align(_no_)))
92 # define _EXPORT __attribute__((visibility("default")))
93 #else
94 # define _ALIGNED_BY_ARG(_no_)
95 # define _EXPORT
96 #endif
97 #define _IMPORT
98 
99 #define B_DEFINE_SYMBOL_VERSION(function, versionedSymbol)	\
100 	__asm__(".symver " function "," versionedSymbol)
101 
102 
103 #ifdef __cplusplus
104 #	define B_DEFINE_WEAK_ALIAS(name, alias_name)	\
105 		extern "C" __typeof(name) alias_name __attribute__((weak, alias(#name)))
106 #else
107 #	define B_DEFINE_WEAK_ALIAS(name, alias_name)	\
108 		__typeof(name) alias_name __attribute__((weak, alias(#name)))
109 #endif
110 
111 
112 #endif	/* _BE_BUILD_H */
113