GMP 0.3.0
Generative Metaprogramming library for C++
Loading...
Searching...
No Matches
platform.hpp
Go to the documentation of this file.
1// ___ __ __ ___
2// / __| \/ | _ \ GMP(Generative Metaprogramming)
3// | (_ | |\/| | _/ version 0.1.0
4// \___|_| |_|_| https://github.com/lkimuk/gmp
5//
6// SPDX-FileCopyrightText: 2023-2026 Miles Li <https://www.cppmore.com/>
7// SPDX-License-Identifier: MIT
8//
9// This file is part of the GMP (Generative Metaprogramming) library.
10// Full project source: https://github.com/lkimuk/gmp
11
12#ifndef GMP_PLATFORM_HPP_
13#define GMP_PLATFORM_HPP_
14
51#if defined(_WIN32) || defined(_WIN64)
52 #define GMP_PLATFORM_WINDOWS 1
53 #define GMP_PLATFORM_LINUX 0
54 #define GMP_PLATFORM_MAC 0
55 #define GMP_PLATFORM_IOS 0
56 #define GMP_PLATFORM_ANDROID 0
57 #define GMP_PLATFORM_NAME "Windows"
58#elif defined(__APPLE__) && defined(__MACH__)
59 #include <TargetConditionals.h>
60 #if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR
61 #define GMP_PLATFORM_IOS 1
62 #define GMP_PLATFORM_MAC 0
63 #define GMP_PLATFORM_NAME "iOS"
64 #else
65 #define GMP_PLATFORM_MAC 1
66 #define GMP_PLATFORM_IOS 0
67 #define GMP_PLATFORM_NAME "macOS"
68 #endif
69 #define GMP_PLATFORM_WINDOWS 0
70 #define GMP_PLATFORM_LINUX 0
71 #define GMP_PLATFORM_ANDROID 0
72#elif defined(__linux__)
73 #define GMP_PLATFORM_LINUX 1
74 #define GMP_PLATFORM_WINDOWS 0
75 #define GMP_PLATFORM_MAC 0
76 #define GMP_PLATFORM_IOS 0
77 #if defined(__ANDROID__)
78 #define GMP_PLATFORM_ANDROID 1
79 #define GMP_PLATFORM_NAME "Android"
80 #else
81 #define GMP_PLATFORM_ANDROID 0
82 #define GMP_PLATFORM_NAME "Linux"
83 #endif
84#else
85 #define GMP_PLATFORM_WINDOWS 0
86 #define GMP_PLATFORM_LINUX 0
87 #define GMP_PLATFORM_MAC 0
88 #define GMP_PLATFORM_IOS 0
89 #define GMP_PLATFORM_ANDROID 0
90 #define GMP_PLATFORM_NAME "Unknown"
91#endif
127#if GMP_PLATFORM_WINDOWS
128 #define GMP_WINDOWS_ONLY(code) code
129 #define GMP_LINUX_ONLY(code)
130 #define GMP_MAC_ONLY(code)
131 #define GMP_IOS_ONLY(code)
132 #define GMP_ANDROID_ONLY(code)
133#elif GMP_PLATFORM_LINUX
134 #define GMP_WINDOWS_ONLY(code)
135 #define GMP_LINUX_ONLY(code) code
136 #define GMP_MAC_ONLY(code)
137 #define GMP_IOS_ONLY(code)
138 #if GMP_PLATFORM_ANDROID
139 #define GMP_ANDROID_ONLY(code) code
140 #else
141 #define GMP_ANDROID_ONLY(code)
142 #endif
143#elif GMP_PLATFORM_MAC
144 #define GMP_WINDOWS_ONLY(code)
145 #define GMP_LINUX_ONLY(code)
146 #define GMP_MAC_ONLY(code) code
147 #define GMP_IOS_ONLY(code)
148 #define GMP_ANDROID_ONLY(code)
149#elif GMP_PLATFORM_IOS
150 #define GMP_WINDOWS_ONLY(code)
151 #define GMP_LINUX_ONLY(code)
152 #define GMP_MAC_ONLY(code)
153 #define GMP_IOS_ONLY(code) code
154 #define GMP_ANDROID_ONLY(code)
155#endif
186#if defined(_MSC_VER)
187 #define GMP_COMPILER_MSVC 1
188 #define GMP_COMPILER_GCC 0
189 #define GMP_COMPILER_CLANG 0
190 #define GMP_COMPILER_NAME "MSVC"
191 #define GMP_COMPILER_VERSION _MSC_VER
192#elif defined(__clang__)
193 #define GMP_COMPILER_CLANG 1
194 #define GMP_COMPILER_GCC 0
195 #define GMP_COMPILER_MSVC 0
196 #define GMP_COMPILER_NAME "Clang"
197 #define GMP_COMPILER_VERSION (__clang_major__ * 100 + __clang_minor__)
198#elif defined(__GNUC__)
199 #define GMP_COMPILER_GCC 1
200 #define GMP_COMPILER_MSVC 0
201 #define GMP_COMPILER_CLANG 0
202 #define GMP_COMPILER_NAME "GCC"
203 #define GMP_COMPILER_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
204#else
205 #define GMP_COMPILER_MSVC 0
206 #define GMP_COMPILER_GCC 0
207 #define GMP_COMPILER_CLANG 0
208 #define GMP_COMPILER_NAME "Unknown"
209 #define GMP_COMPILER_VERSION 0
210#endif
233#if GMP_COMPILER_MSVC
234 #define GMP_MSVC_ONLY(code) code
235 #define GMP_GCC_ONLY(code)
236 #define GMP_CLANG_ONLY(code)
237#elif GMP_COMPILER_CLANG
238 #define GMP_MSVC_ONLY(code)
239 #define GMP_GCC_ONLY(code)
240 #define GMP_CLANG_ONLY(code) code
241#elif GMP_COMPILER_GCC
242 #define GMP_MSVC_ONLY(code)
243 #define GMP_GCC_ONLY(code) code
244 #define GMP_CLANG_ONLY(code)
245#endif
265#if defined(NDEBUG) || defined(_NDEBUG)
266 #define GMP_BUILD_RELEASE 1
267 #define GMP_BUILD_DEBUG 0
268 #define GMP_BUILD_TYPE "Release"
269#else
270 #define GMP_BUILD_DEBUG 1
271 #define GMP_BUILD_RELEASE 0
272 #define GMP_BUILD_TYPE "Debug"
273#endif
297#if defined(__x86_64__) || defined(_M_X64)
298 #define GMP_ARCH_X64 1
299 #define GMP_ARCH_ARM64 0
300 #define GMP_ARCH_X86 0
301 #define GMP_ARCH_NAME "x64"
302#elif defined(__aarch64__) || defined(_M_ARM64)
303 #define GMP_ARCH_ARM64 1
304 #define GMP_ARCH_X64 0
305 #define GMP_ARCH_X86 0
306 #define GMP_ARCH_NAME "ARM64"
307#elif defined(__i386__) || defined(_M_IX86)
308 #define GMP_ARCH_X86 1
309 #define GMP_ARCH_X64 0
310 #define GMP_ARCH_ARM64 0
311 #define GMP_ARCH_NAME "x86"
312#else
313 #define GMP_ARCH_X64 0
314 #define GMP_ARCH_ARM64 0
315 #define GMP_ARCH_X86 0
316 #define GMP_ARCH_NAME "Unknown"
317#endif
337#if defined(_MSC_VER) && (!defined(_MSVC_TRADITIONAL) || _MSVC_TRADITIONAL)
338 #define GMP_MAX_MACRO_ARGS 127
339 #define GMP_PREPROCESSOR_TYPE "MSVC Traditional"
340 #define GMP_STANDARD_PREPROCESSOR 0
341#else
342 #define GMP_MAX_MACRO_ARGS 256
343 #define GMP_PREPROCESSOR_TYPE "C++ Standard Compliant"
344 #define GMP_STANDARD_PREPROCESSOR 1
345#endif
350#endif // GMP_PLATFORM_HPP_