/*! \file piplatform.h * \ingroup Core * \~\brief * \~english Public platform and compiler detection macros * \~russian Публичные макросы определения платформы и компилятора * * \~\details * \~english * This header defines portability macros that can be used in public PIP-aware * code for platform, compiler and architecture checks. * \~russian * Этот заголовок определяет макросы переносимости, которые можно использовать * в публичном PIP-коде для проверки платформы, компилятора и архитектуры. */ /* PIP - Platform Independent Primitives Platform and compiler macros Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef PIPLATFORM_H #define PIPLATFORM_H #include #ifdef DOXYGEN //! \~\ingroup Core //! \~\brief //! \~english Defined for Windows targets. //! \~russian Определяется для целевых сборок Windows. # define WINDOWS //! \~\ingroup Core //! \~\brief //! \~english Defined for Linux targets. //! \~russian Определяется для целевых сборок Linux. # define LINUX //! \~\ingroup Core //! \~\brief //! \~english Defined for macOS targets. //! \~russian Определяется для целевых сборок macOS. # define MAC_OS //! \~\ingroup Core //! \~\brief //! \~english Defined for Android targets. //! \~russian Определяется для целевых сборок Android. # define ANDROID //! \~\ingroup Core //! \~\brief //! \~english Defined for QNX targets. //! \~russian Определяется для целевых сборок QNX. # define QNX //! \~\ingroup Core //! \~\brief //! \~english Defined for FreeBSD targets. //! \~russian Определяется для целевых сборок FreeBSD. # define FREE_BSD //! \~\ingroup Core //! \~\brief //! \~english Defined for reduced embedded PIP builds. //! \~russian Определяется для облегченных встраиваемых сборок PIP. # define MICRO_PIP //! \~\ingroup Core //! \~\brief //! \~english Defined when the target architecture is 32-bit. //! \~russian Определяется, когда целевая архитектура 32-битная. # define ARCH_BITS_32 //! \~\ingroup Core //! \~\brief //! \~english Defined when the target architecture is 64-bit. //! \~russian Определяется, когда целевая архитектура 64-битная. # define ARCH_BITS_64 //! \~\ingroup Core //! \~\brief //! \~english Defined for GCC-compatible compilers. //! \~russian Определяется для GCC-совместимых компиляторов. # define CC_GCC //! \~\ingroup Core //! \~\brief //! \~english Encoded GCC major and minor version for \a CC_GCC builds. //! \~russian Содержит закодированную основную и дополнительную версию GCC для сборок с \a CC_GCC. # define CC_GCC_VERSION //! \~\ingroup Core //! \~\brief //! \~english Defined for Microsoft Visual C++. //! \~russian Определяется для Microsoft Visual C++. # define CC_VC //! \~\ingroup Core //! \~\brief //! \~english Defined when no dedicated compiler macro above matched. //! \~russian Определяется, когда ни один специализированный макрос компилятора выше не подошел. # define CC_OTHER //! \~\ingroup Core //! \~\brief //! \~english Defined when POSIX signal APIs are expected to be available. //! \~russian Определяется, когда ожидается доступность POSIX API сигналов. # define POSIX_SIGNALS #endif #if defined(WIN64) || defined(_WIN64) || defined(__WIN64__) # define WINDOWS # define ARCH_BITS_64 #else # if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) # define WINDOWS # define ARCH_BITS_32 # endif #endif #if defined(__QNX__) || defined(__QNXNTO__) # define QNX # ifdef Q_OS_BLACKBERRY # define BLACKBERRY # endif #endif #ifdef __FreeBSD__ # define FREE_BSD #endif #if defined(__APPLE__) || defined(__MACH__) # define MAC_OS #endif #if defined(__ANDROID__) || defined(_ANDROID_) || defined(ANDROID) # ifndef ANDROID # define ANDROID # endif #endif #ifdef PIP_FREERTOS # define FREERTOS #endif #if defined(FREERTOS) || defined(PLATFORMIO) # define MICRO_PIP #endif #ifndef WINDOWS # ifndef QNX # ifndef FREE_BSD # ifndef MAC_OS # ifndef ANDROID # ifndef BLACKBERRY # ifndef MICRO_PIP # define LINUX # endif # endif # endif # endif # endif # endif #endif #ifndef WINDOWS # if defined(__LP64__) || defined(_LP64_) || defined(LP64) # define ARCH_BITS_64 # else # define ARCH_BITS_32 # endif #endif #ifdef __GNUC__ # define CC_GCC # define CC_GCC_VERSION ((__GNUC__ << 8) | __GNUC_MINOR__) #elif defined(_MSC_VER) # define CC_VC #else # define CC_OTHER #endif #ifdef __AVR__ # define CC_AVR_GCC #endif #ifdef WINDOWS # ifdef CC_GCC # define typeof __typeof # endif #else # define typeof __typeof__ #endif #if defined(LINUX) || defined(MAC_OS) || defined(ANDROID) # define POSIX_SIGNALS #endif #endif // PIPLATFORM_H