a68g-platform.h
1 //! @file a68g-platform.h
2 //! @author J. Marcel van der Veer
3
4 //! @section Copyright
5 //!
6 //! This file is part of Algol68G - an Algol 68 compiler-interpreter.
7 //! Copyright 2001-2025 J. Marcel van der Veer [algol68g@xs4all.nl].
8
9 //! @section License
10 //!
11 //! This program is free software; you can redistribute it and/or modify it
12 //! under the terms of the GNU General Public License as published by the
13 //! Free Software Foundation; either version 3 of the License, or
14 //! (at your option) any later version.
15 //!
16 //! This program is distributed in the hope that it will be useful, but
17 //! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
18 //! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
19 //! more details. You should have received a copy of the GNU General Public
20 //! License along with this program. If not, see [http://www.gnu.org/licenses/].
21
22 //! @section Synopsis
23 //!
24 //! Platform dependent definitions.
25
26 #if !defined (__A68G_PLATFORM_H__)
27 #define __A68G_PLATFORM_H__
28
29 #if defined (BUILD_WIN32)
30 #include "a68g-config.win32.h"
31 #if !defined (HAVE_GCC)
32 #define HAVE_GCC
33 #endif
34 #undef C_COMPILER
35 #undef HAVE_CLANG
36 #elif defined (BUILD_WIN64)
37 #include "a68g-config.win64.h"
38 #if !defined (HAVE_GCC)
39 #define HAVE_GCC
40 #endif
41 #undef C_COMPILER
42 #undef HAVE_CLANG
43 #elif defined (__clang__)
44 #include "a68g-config.h"
45 #if !defined (HAVE_CLANG)
46 #define HAVE_CLANG
47 #endif
48 #if !defined (C_COMPILER)
49 #define C_COMPILER "clang"
50 #endif
51 #undef HAVE_GCC
52 #undef HAVE_GNU_MPFR
53 #elif defined (__GNUC__)
54 #include "a68g-config.h"
55 #if !defined (HAVE_GCC)
56 #define HAVE_GCC
57 #endif
58 #if !defined (C_COMPILER)
59 #define C_COMPILER "gcc"
60 #endif
61 #undef HAVE_CLANG
62 #else
63 #error "a68g: abend: a68g requires either gcc or clang"
64 #endif
65
66 #if defined (BUILD_LINUX)
67 #define BUILD_UNIX
68 #elif defined (BUILD_BSD)
69 #define BUILD_UNIX
70 #elif defined (BUILD_CYGWIN)
71 #define BUILD_UNIX
72 #elif defined (BUILD_HAIKU)
73 #define BUILD_UNIX
74 #endif
75
76 #if defined (BUILD_WIN32)
77 #define BUILD_WINDOWS
78 #elif defined (BUILD_WIN64)
79 #define BUILD_WINDOWS
80 #endif
81
82 #if (defined (BUILD_LINUX) || defined (BUILD_BSD))
83
84 // Autoconf macros may impose outdated feature test macros.
85 // For instance AX_WITH CURSES may define _DEFAULT_SOURCE and _XOPEN_SOURCE 600.
86 // Here we correct, post hoc.
87
88 // _GNU_SOURCE includes ISO C89, ISO C99, POSIX.1, POSIX.2, BSD, SVID, X/Open, LFS, and GNU extensions.
89
90 #if defined (_GNU_SOURCE)
91 #undef _GNU_SOURCE
92 #endif
93
94 // _BSD_SOURCE is deprecated, and caused header files to expose BSD-derived definitions.
95
96 #if defined (_BSD_SOURCE)
97 #undef _BSD_SOURCE
98 #endif
99
100 // _DEFAULT_SOURCE includes most features, apart from X/Open, LFS and GNU extensions.
101
102 #if defined (_DEFAULT_SOURCE)
103 #undef _DEFAULT_SOURCE
104 #endif
105
106 // _XOPEN_SOURCE includes functionality described in the X/Open Portability Guide.
107 // A68G defines _XOPEN_SOURCE 700 which is a superset of _POSIX_C_SOURCE 200809L.
108
109 #if defined (_XOPEN_SOURCE)
110 #undef _XOPEN_SOURCE
111 #endif
112
113 #define _XOPEN_SOURCE 700
114
115 #endif
116
117 // Decide on A68G "LEVEL".
118 // LEVEL 3 uses INT*8, REAL*10 and REAL*16 data types, when available in hardware.
119 // LEVEL 2 builds generic A68G with INT*4 and REAL*8 data types.
120 // LEVEL 1 is reserved for (possible) restrictive builds.
121
122 #if defined (BUILD_WINDOWS)
123 #define A68G_LEVEL 3
124 #elif defined (HAVE_LONG_TYPES)
125 #define A68G_LEVEL 3
126 #else
127 #define A68G_LEVEL 2
128 #endif
129
130 #undef HAVE_LARGE_STORAGE // Default.
131 #if (A68G_LEVEL >= 3)
132 #if defined (SIZEOF_SIZE_T)
133 #if (SIZEOF_SIZE_T >= 8)
134 #define HAVE_LARGE_STORAGE
135 #endif
136 #elif defined (BUILD_WIN64)
137 #define HAVE_LARGE_STORAGE
138 #endif
139 #endif
140
141 // R mathlib
142
143 #if defined (HAVE_R_MATHLIB)
144 #if !defined (MATHLIB_STANDALONE)
145 #define MATHLIB_STANDALONE
146 #endif
147 #endif
148
149 // Imported libraries
150
151 #if defined (__cplusplus)
152 #undef __cplusplus
153 #endif
154
155 #endif
© 2002-2025 J.M. van der Veer (jmvdveer@xs4all.nl)
|