sandbox
Loading...
Searching...
No Matches
target.hpp
1// SPDX-License-Identifier: MIT
2#ifndef LIBSBX_UTILITY_TARGET_HPP_
3#define LIBSBX_UTILITY_TARGET_HPP_
4
5#include <cstdint>
6#include <type_traits>
7
8namespace sbx::utility {
9
11enum class build_configuration : std::uint8_t {
12 debug = 0,
13 release = 1
14}; // enum class build_configuration
15
16#if defined(DEBUG) || !defined(NDEBUG)
17inline constexpr auto build_configuration_v = build_configuration::debug;
18#else
19inline constexpr auto build_configuration_v = build_configuration::release;
20#endif
21
23 inline static constexpr auto value = (build_configuration_v == build_configuration::debug);
24}; // struct is_build_configuration_debug
25
26inline constexpr auto is_build_configuration_debug_v = is_build_configuration_debug::value;
27
29enum class operating_system : std::uint8_t {
30 windows = 0,
31 max = 1,
32 linux = 2,
33 unknown = 3
34}; // enum class operating_system
35
36#if defined(WIN32) || defined(_WIN32)
37inline constexpr auto operating_system_v = operating_system::windows;
38#define SBX_WINDOWS
39#elif defined(__APPLE__)
40inline constexpr auto operating_system_v = operating_system::mac;
41#define SBX_MAC
42#elif defined(__linux__) || defined(__linux)
43inline constexpr auto operating_system_v = operating_system::linux;
44#define SBX_UNIX
45#else
46inline constexpr auto operating_system_v = operating_system::unknown;
47#warning "Unknown operating system"
48#endif
49
51enum class compiler : std::uint8_t {
52 clang = 0,
53 gnu = 1,
54 msc = 2,
55 unknown = 3
56}; // enum class compiler
57
58#if defined(__clang__)
59inline constexpr auto compiler_v = compiler::clang;
60#elif (defined(__GNUC__) || defined(__GNUG__) || defined(__MINGW32__))
61inline constexpr auto compiler_v = compiler::gnu;
62#elif defined(__MSC_VER)
63inline constexpr auto compiler_v = compiler::msc;
64#else
65inline constexpr auto compiler_v = compiler::unknown;
66#endif
67
68#if defined(SBX_CONSTEXPR_ENABLED)
69#define SBX_CONSTEXPR constexpr
70#else
71#define SBX_CONSTEXPR
72#endif
73
74} // namespace sbx::utility
75
76#endif // LIBSBX_UTILITY_TARGET_HPP_