geode/loader/include/Geode/platform/platform.hpp

174 lines
4.4 KiB
C++
Raw Normal View History

2022-07-30 12:24:03 -04:00
#pragma once
#include "cplatform.h"
2022-07-30 12:24:03 -04:00
2022-10-30 14:59:20 -04:00
#include <functional>
2022-07-30 12:24:03 -04:00
namespace geode {
2022-10-30 14:59:20 -04:00
class PlatformID {
public:
enum {
Unknown = -1,
Windows,
MacOS,
iOS,
Android,
Linux,
};
using Type = decltype(Unknown);
Type m_value;
PlatformID(Type t) {
m_value = t;
}
PlatformID& operator=(Type t) {
m_value = t;
return *this;
}
bool operator==(int other) const {
return m_value == other;
}
bool operator==(PlatformID const& other) const {
return m_value == other.m_value;
}
bool operator<(PlatformID const& other) const {
return m_value < other.m_value;
}
bool operator>(PlatformID const& other) const {
return m_value > other.m_value;
}
operator int() const {
return m_value;
}
template <class T>
static PlatformID from(T t) {
return static_cast<Type>(t);
}
template <class T>
T to() const {
return static_cast<T>(m_value);
}
static constexpr char const* toString(Type lp) {
switch (lp) {
case Unknown: return "Unknown";
case Windows: return "Windows";
case MacOS: return "MacOS";
case iOS: return "iOS";
case Android: return "Android";
case Linux: return "Linux";
default: break;
}
return "Undefined";
}
};
2022-07-30 12:24:03 -04:00
}
namespace std {
2022-10-30 14:59:20 -04:00
template <>
2022-07-30 12:24:03 -04:00
struct hash<geode::PlatformID> {
inline std::size_t operator()(geode::PlatformID const& id) const {
2022-10-30 14:59:20 -04:00
return std::hash<geode::PlatformID::Type>()(id.m_value);
}
2022-07-30 12:24:03 -04:00
};
}
#if !defined(__PRETTY_FUNCTION__) && !defined(__GNUC__)
2022-10-30 14:59:20 -04:00
#define GEODE_PRETTY_FUNCTION std::string(__FUNCSIG__)
#else
2022-10-30 14:59:20 -04:00
#define GEODE_PRETTY_FUNCTION std::string(__PRETTY_FUNCTION__)
#endif
2022-07-30 12:24:03 -04:00
// Windows
#ifdef GEODE_IS_WINDOWS
2022-07-30 12:24:03 -04:00
2022-10-30 14:59:20 -04:00
#define GEODE_PLATFORM_TARGET PlatformID::Windows
#define GEODE_HIDDEN
#define GEODE_INLINE __forceinline
#define GEODE_VIRTUAL_CONSTEXPR
#define GEODE_NOINLINE __declspec(noinline)
#ifdef GEODE_EXPORTING
#define GEODE_DLL __declspec(dllexport)
#else
#define GEODE_DLL __declspec(dllimport)
#endif
2022-07-30 12:24:03 -04:00
2022-10-30 14:59:20 -04:00
#define GEODE_API extern "C" __declspec(dllexport)
#define GEODE_EXPORT __declspec(dllexport)
2022-07-30 12:24:03 -04:00
2022-10-30 14:59:20 -04:00
#include "windows.hpp"
2022-07-30 12:24:03 -04:00
#elif defined(GEODE_IS_MACOS)
2022-07-30 12:24:03 -04:00
2022-10-30 14:59:20 -04:00
#define GEODE_PLATFORM_TARGET PlatformID::MacOS
#define GEODE_HIDDEN __attribute__((visibility("hidden")))
#define GEODE_INLINE inline __attribute__((always_inline))
#define GEODE_VIRTUAL_CONSTEXPR constexpr
#define GEODE_NOINLINE __attribute__((noinline))
2022-07-30 12:24:03 -04:00
2022-10-30 14:59:20 -04:00
#ifdef GEODE_EXPORTING
#define GEODE_DLL __attribute__((visibility("default")))
#else
#define GEODE_DLL
#endif
2022-07-30 12:24:03 -04:00
2022-10-30 14:59:20 -04:00
#define GEODE_API extern "C" __attribute__((visibility("default")))
#define GEODE_EXPORT __attribute__((visibility("default")))
2022-07-30 12:24:03 -04:00
2022-10-30 14:59:20 -04:00
#include "macos.hpp"
2022-07-30 12:24:03 -04:00
#elif defined(GEODE_IS_IOS)
2022-07-30 12:24:03 -04:00
2022-10-30 14:59:20 -04:00
#define GEODE_PLATFORM_TARGET PlatformID::iOS
#define GEODE_HIDDEN __attribute__((visibility("hidden")))
#define GEODE_INLINE inline __attribute__((always_inline))
#define GEODE_VIRTUAL_CONSTEXPR constexpr
#define GEODE_NOINLINE __attribute__((noinline))
#ifdef GEODE_EXPORTING
#define GEODE_DLL __attribute__((visibility("default")))
#else
#define GEODE_DLL
#endif
2022-07-30 12:24:03 -04:00
2022-10-30 14:59:20 -04:00
#define GEODE_API extern "C" __attribute__((visibility("default")))
#define GEODE_EXPORT __attribute__((visibility("default")))
2022-07-30 12:24:03 -04:00
2022-10-30 14:59:20 -04:00
#include "ios.hpp"
2022-07-30 12:24:03 -04:00
#elif defined(GEODE_IS_ANDROID)
2022-07-30 12:24:03 -04:00
2022-10-30 14:59:20 -04:00
#define GEODE_PLATFORM_TARGET PlatformID::Android
#define GEODE_HIDDEN __attribute__((visibility("hidden")))
#define GEODE_INLINE inline __attribute__((always_inline))
#define GEODE_VIRTUAL_CONSTEXPR constexpr
#define GEODE_NOINLINE __attribute__((noinline))
2022-07-30 12:24:03 -04:00
2022-10-30 14:59:20 -04:00
#ifdef GEODE_EXPORTING
#define GEODE_DLL __attribute__((visibility("default")))
#else
#define GEODE_DLL
#endif
2022-07-30 12:24:03 -04:00
2022-10-30 14:59:20 -04:00
#define GEODE_API extern "C" __attribute__((visibility("default")))
#define GEODE_EXPORT __attribute__((visibility("default")))
2022-07-30 12:24:03 -04:00
2022-10-30 14:59:20 -04:00
#include "android.hpp"
2022-07-30 12:24:03 -04:00
#else
2022-10-30 14:59:20 -04:00
#error "Unsupported Platform!"
2022-07-30 12:24:03 -04:00
#endif