#ifndef OMNI_PLATFORM_H #define OMNI_PLATFORM_H /* * * COMPILER INFORMATION * */ #if defined(_MSC_VER) # define OMNI_CC_MSVC #endif #if defined(__GNUC__) || defined(__clang__) # define OMNI_CC_GNU #endif #if !defined(OMNI_CC_GNU) && !defined(OMNI_CC_MSVC) # error "compiler not supported" #endif /* * * TARGET ARCHITECTURE INFORMATION * */ #if defined(__i386__) || defined(_M_IX86) # define OMNI_ARCH_X86 # define OMNI_ARCH_32BIT #endif #if defined(__x86_64__) || defined(_M_X64) # define OMNI_ARCH_X86 # define OMNI_ARCH_64BIT #endif #if defined(__arm__) || defined(_M_ARM) # define OMNI_ARCH_ARM # define OMNI_ARCH_32BIT #endif #if defined(__aarch64__) || defined(_M_ARM64) || defined(__arm64__) # define OMNI_ARCH_ARM # define OMNI_ARCH_64BIT #endif #if !defined(OMNI_ARCH_X86) && !defined(OMNI_ARCH_ARM) # error "target architecture is not supported" #endif /* * * TARGET OS INFORMATION * */ #if defined(_WIN32) || defined(_WIN64) # define OMNI_OS_WIN #endif #if defined(__linux__) # define OMNI_OS_LINUX # define OMNI_OS_UNIX #endif #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) # define OMNI_OS_FREEBSD # define OMNI_OS_UNIX #endif #if defined(__APPLE__) && defined(__MACH__) # define OMNI_OS_OSX # define OMNI_OS_UNIX #endif #if !defined(OMNI_OS_UNIX) && !defined(OMNI_OS_WIN) # error "target os not supported" #endif /* * * * CHECK COMPILER STANDARD * */ #define OMNI_CC_VER __STDC_VERSION__ #if defined(OMNI_CC_MSVC) # if defined(_MSVC_LANG) # define OMNI_CXX_VER _MSVC_LANG # else # define OMNI_CXX_VER 0 # endif #endif #if defined(OMNI_CC_GNU) # if defined(__cplusplus) # define OMNI_CXX_VER __cplusplus # else # define OMNI_CXX_VER 0 # endif #endif #define OMNI_CXX_VER_MIN 201103L #if OMNI_CXX_VER_MIN > OMNI_CXX_VER # error "atleast C++11 is required" #endif #endif