#ifndef OMNI_PLATFORM_H # define OMNI_PLATFORM_H /* * * COMPILER INFORMATION * */ # undef OMNI_CC_MSVC # undef OMNI_CC_GNU # 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 * */ # undef OMNI_ARCH_X86 # undef OMNI_ARCH_ARM # undef OMNI_ARCH_64BIT # undef OMNI_ARCH_32BIT # 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 * */ # undef OMNI_OS_WIN # undef OMNI_OS_LINUX # undef OMNI_OS_FREEBSD # undef OMNI_OS_OSX # 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 * */ # undef OMNI_CXX_VER_MIN # undef OMNI_CXX_VER # undef OMNI_CC_VER # 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