From a69849177d6e7d396ea36a8160428e327811729b Mon Sep 17 00:00:00 2001 From: inmarket Date: Thu, 19 Nov 2015 17:07:49 +1000 Subject: Update and then move compiler specific code into its own file --- gfx.h | 278 +----------------------------------------------------------------- 1 file changed, 3 insertions(+), 275 deletions(-) (limited to 'gfx.h') diff --git a/gfx.h b/gfx.h index 12794355..1c217b32 100644 --- a/gfx.h +++ b/gfx.h @@ -41,6 +41,9 @@ /* gfxconf.h is the user's project configuration for the GFX system. */ #include "gfxconf.h" +/* Include Compiler and CPU support */ +#include "src/gfx_compilers.h" + /** * @name GFX sub-systems that can be turned on * @{ @@ -144,281 +147,6 @@ #endif /** @} */ -/** - * @name GFX system-wide options - * @{ - */ - /** - * @brief Should various inline ugfx functions be non-inline. - * @details Defaults to FALSE - * @note Generally there is no need to set this to TRUE as it will have huge performance impacts - * in the driver level. - */ - #ifndef GFX_NO_INLINE - #define GFX_NO_INLINE FALSE - #endif - /** - * @brief Enable compiler specific code - * @details Defaults to GFX_COMPILER_UNKNOWN - * @note This is setting enables optimisations that are compiler specific. It does - * not need to be specified as reasonable defaults and various auto-detection - * will happen as required. - * @note Currently only used by ugfx generic thread handling (GOS_USE_OS_RAW32 and GOS_USE_OS_ARDUINO) - * @{ - */ - #ifndef GFX_COMPILER - #define GFX_COMPILER GFX_COMPILER_UNKNOWN - #endif - #define GFX_COMPILER_UNKNOWN 0 //**< Unknown compiler - #define GFX_COMPILER_GCC 1 //**< Standard GCC/G++ - #define GFX_COMPILER_MINGW32 2 //**< MingW32 (x86) compiler for windows - #define GFX_COMPILER_MINGW64 3 //**< MingW64 (x64) compiler for windows - #define GFX_COMPILER_CYGWIN 4 //**< Cygwin (x86) unix emulator compiler for windows - #define GFX_COMPILER_ARMCC 5 //**< ARMCC compiler - #define GFX_COMPILER_KEIL 6 //**< Keil (use this when working with uVision IDE) - #define GFX_COMPILER_CLANG 7 //**< CLang (LLVM) compiler - #define GFX_COMPILER_HP 8 //**< HP C/aC++ - #define GFX_COMPILER_IBMXL 9 //**< IBM XL C/C++ Compiler - #define GFX_COMPILER_ICC 10 //**< Intel ICC/ICPC Compiler - #define GFX_COMPILER_VS 11 //**< Microsoft Visual Studio - #define GFX_COMPILER_OSS 12 //**< Oracle Solaris Studio - #define GFX_COMPILER_PGCC 13 //**< Portland PGCC/PGCPP - #define GFX_COMPILER_TURBOC 14 //**< Borland Turbo C - #define GFX_COMPILER_BORLAND 15 //**< Borland C++ - #define GFX_COMPILER_COMEAU 16 //**< Comeau C++ - #define GFX_COMPILER_COMPAQ 17 //**< Compaq C - #define GFX_COMPILER_DEC 18 //**< The older DEC C Compiler - #define GFX_COMPILER_CRAY 19 //**< Cray C/C++ - #define GFX_COMPILER_DAIB 20 //**< Diab C/C++ - #define GFX_COMPILER_DMARS 21 //**< Digital Mars/Symantic C++/Zortech C++ - #define GFX_COMPILER_KAI 22 //**< Kai C++ - #define GFX_COMPILER_LCC 23 //**< LCC - #define GFX_COMPILER_HIGHC 24 //**< Metaware High C/C++ - #define GFX_COMPILER_METROWORKS 25 //**< Metroworks - #define GFX_COMPILER_MIPSPRO 26 //**< MIPS Pro - #define GFX_COMPILER_MPW 27 //**< MPW C++ - #define GFX_COMPILER_NORCROFT 28 //**< Norcroft ARM - #define GFX_COMPILER_SASC 29 //**< SAS/C - #define GFX_COMPILER_SCO 30 //**< SCO OpenServer - #define GFX_COMPILER_TINYC 31 //**< Tiny C - #define GFX_COMPILER_USL 32 //**< USL C - #define GFX_COMPILER_WATCOM 33 //**< Watcom - /** @} */ - /** - * @brief Enable cpu specific code - * @details Defaults to GFX_CPU_UNKNOWN - * @note This is setting enables optimisations that are cpu specific. It does - * not need to be specified as reasonable defaults and various auto-detection - * will happen as required. - * @note Currently only used by ugfx generic thread handling (GOS_USE_OS_RAW32 and GOS_USE_OS_ARDUINO) - * @{ - */ - #ifndef GFX_CPU - #define GFX_CPU GFX_CPU_UNKNOWN - #endif - #define GFX_CPU_UNKNOWN 0 //**< Unknown cpu - #define GFX_CPU_CORTEX_M0 0x01 //**< Cortex M0 - #define GFX_CPU_CORTEX_M1 0x02 //**< Cortex M1 - #define GFX_CPU_CORTEX_M2 0x03 //**< Cortex M2 - #define GFX_CPU_CORTEX_M3 0x04 //**< Cortex M3 - #define GFX_CPU_CORTEX_M4 0x05 //**< Cortex M4 - #define GFX_CPU_CORTEX_M4_FP 0x06 //**< Cortex M4 with hardware floating point - #define GFX_CPU_CORTEX_M7 0x07 //**< Cortex M7 - #define GFX_CPU_CORTEX_M7_FP 0x08 //**< Cortex M7 with hardware floating point - #define GFX_CPU_X86 0x10 //**< Intel x86 - #define GFX_CPU_X64 0x11 //**< Intel x64 - #define GFX_CPU_IA64 0x12 //**< Intel Itanium - #define GFX_CPU_POWERPC32 0x20 //**< PowerPC - #define GFX_CPU_POWERPC64 0x21 //**< PowerPC - #define GFX_CPU_SPARC 0x22 //**< Sparc - /** @} */ - /** - * @brief Does this CPU generate no alignment faults - * @details Defaults to FALSE - * @note Turning this on can increase code size and speed but - * should not be turned on with a CPU that can generate - * alignment segfaults. - * @note If you are unsure leave this as FALSE as that generates - * the more conservative code. - */ - #ifndef GFX_CPU_NO_ALIGNMENT_FAULTS - #define GFX_CPU_NO_ALIGNMENT_FAULTS FALSE - #endif - /** - * @brief What is the CPU endianness - * @details Defaults to GFX_CPU_ENDIAN_UNKNOWN - * @note This is setting enables optimisations that are cpu endian specific. It does - * not need to be specified as reasonable defaults and various auto-detection - * will happen as required. - * @{ - */ - #ifndef GFX_CPU_ENDIAN - #define GFX_CPU_ENDIAN GFX_CPU_ENDIAN_UNKNOWN - #endif - #define GFX_CPU_ENDIAN_UNKNOWN 0 //**< Unknown endianness - #define GFX_CPU_ENDIAN_LITTLE 0x03020100 //**< Little endian - #define GFX_CPU_ENDIAN_BIG 0x00010203 //**< Big endian - #define GFX_CPU_ENDIAN_WBDWL 0x02030001 //**< Words are big endian, DWords are little endian eg. Honeywell 316 - #define GFX_CPU_ENDIAN_WLDWB 0x01000302 //**< Words are little endian, DWords are big endian eg PDP-11 - /** @} */ - -/** @} */ - -/* Set some defaults */ -#if GFX_NO_INLINE - #define GFXINLINE -#endif - -/* Try to auto-detect the compiler */ -#if GFX_COMPILER == GFX_COMPILER_UNKNOWN - #undef GFX_COMPILER - #if defined(__MINGW32__) - #define GFX_COMPILER GFX_COMPILER_MINGW32 - #elif defined(__MINGW64__) - #define GFX_COMPILER GFX_COMPILER_MINGW64 - #elif defined(__CYGWIN__) - #define GFX_COMPILER GFX_COMPILER_CYGWIN - #elif defined(__KEIL__) || defined(__C51__) || (defined(__CC_ARM) && defined(__EDG__)) - #define GFX_COMPILER GFX_COMPILER_KEIL - #elif defined(__clang__) - #define GFX_COMPILER GFX_COMPILER_CLANG - #elif defined(__ICC) || defined(__INTEL_COMPILER) - #define GFX_COMPILER GFX_COMPILER_ICC - #elif defined(__GNUC__) || defined(__GNUG__) - #define GFX_COMPILER GFX_COMPILER_GCC - #elif defined(__HP_cc) || defined(__HP_aCC) - #define GFX_COMPILER GFX_COMPILER_HP - #elif defined(__IBMC__) || defined(__IBMCPP__) - #define GFX_COMPILER GFX_COMPILER_IBMXL - #elif defined(_MSC_VER) - #define GFX_COMPILER GFX_COMPILER_VS - #elif defined(__PGI) - #define GFX_COMPILER GFX_COMPILER_PGCC - #elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) - #define GFX_COMPILER GFX_COMPILER_OSS - #elif defined(__TURBOC__) - #define GFX_COMPILER GFX_COMPILER_TURBOC - #elif defined(__BORLANDC__) - #define GFX_COMPILER GFX_COMPILER_BORLAND - #elif defined(__COMO__) - #define GFX_COMPILER GFX_COMPILER_COMEAU - #elif defined(__DECC) || defined(__VAXC) || defined(VAXC) || defined(__DECCXX) - #define GFX_COMPILER GFX_COMPILER_COMPAQ - #elif defined(__osf__) && defined(__LANGUAGE_C__) - #define GFX_COMPILER GFX_COMPILER_DEC - #elif defined(_CRAYC) - #define GFX_COMPILER GFX_COMPILER_CRAY - #elif defined(__DCC__) - #define GFX_COMPILER GFX_COMPILER_DAIB - #elif defined(__DMC__) || defined(__SC__) || defined(__ZTC__) - #define GFX_COMPILER GFX_COMPILER_DMARS - #elif defined(__KCC) - #define GFX_COMPILER GFX_COMPILER_KAI - #elif defined(__LCC__) - #define GFX_COMPILER GFX_COMPILER_LCC - #elif defined(__HIGHC__) - #define GFX_COMPILER GFX_COMPILER_HIGHC - #elif defined(__MWERKS__) - #define GFX_COMPILER GFX_COMPILER_METROWORKS - #elif defined(__sgi) - #define GFX_COMPILER GFX_COMPILER_MIPSPRO - #elif defined(__MRC__) - #define GFX_COMPILER GFX_COMPILER_MPW - #elif defined(__CC_NORCROFT) - #define GFX_COMPILER GFX_COMPILER_NORCROFT - #elif defined(__SASC__) - #define GFX_COMPILER GFX_COMPILER_SASC - #elif defined( _SCO_DS ) - #define GFX_COMPILER GFX_COMPILER_SCO - #elif defined(__TINYC__) - #define GFX_COMPILER GFX_COMPILER_TINYC - #elif defined( __USLC__ ) - #define GFX_COMPILER GFX_COMPILER_USL - #elif defined(__WATCOMC__) - #define GFX_COMPILER GFX_COMPILER_WATCOM - #else - #define GFX_COMPILER GFX_COMPILER_UNKNOWN - #endif -#endif - -/* Compiler specific defines */ -#if GFX_COMPILER == GFX_COMPILER_KEIL - #define DEPRECATED(msg) __attribute__((deprecated(msg))) - #pragma anon_unions // Allow anonymous unions - #pragma diag_remark 1293 // Turn off warning: assignment in condition - #pragma diag_remark 83 // Turn off warning: type qualifier specified more than once - #pragma diag_remark 767 // Turn off warning: conversion from pointer to smaller integer - #pragma diag_remark 188 // Turn off warning: enumerated type mixed with another type - #ifndef GFXINLINE // Get the Keil definition for inline - #define GFXINLINE __inline - #endif - #if !defined(__BIG_ENDIAN) && !defined(__LITTLE_ENDIAN) // Oops - Keil defines __BIG_ENDIAN or nothing - #define __LITTLE_ENDIAN - #endif -#elif GFX_COMPILER == GFX_COMPILER_MINGW32 || GFX_COMPILER == GFX_COMPILER_MINGW64 || GFX_COMPILER == GFX_COMPILER_CYGWIN || GFX_COMPILER == GFX_COMPILER_GCC - #define DEPRECATED(msg) __attribute__((deprecated(msg))) -#elif GFX_COMPILER == GFX_COMPILER_VS - #define DEPRECATED(msg) __declspec(deprecated(msg)) -#endif - -/* Try to auto-detect the cpu */ -#if GFX_CPU == GFX_CPU_UNKNOWN - #undef GFX_CPU - #if defined(__ia64) || defined(__itanium__) || defined(_M_IA64) - #define GFX_CPU GFX_CPU_IA64 - #elif defined(__powerpc__) || defined(__ppc__) || defined(__PPC__) - #if defined(__powerpc64__) || defined(__ppc64__) || defined(__PPC64__) || defined(__64BIT__) || defined(_LP64) || defined(__LP64__) - #define GFX_CPU GFX_CPU_POWERPC64 - #else - #define GFX_CPU GFX_CPU_POWERPC32 - #endif - #elif defined(__sparc) - #define GFX_CPU GFX_CPU_SPARC - #elif defined(__x86_64__) || defined(_M_X64) - #define GFX_CPU GFX_CPU_X86 - #elif defined(__i386) || defined(_M_IX86) - #define GFX_CPU GFX_CPU_X64 - #else - #define GFX_CPU GFX_CPU_UNKNOWN - #endif -#endif - -/* Try to auto-detect the endianness */ -#if GFX_CPU_ENDIAN == GFX_CPU_ENDIAN_UNKNOWN - #undef GFX_CPU_ENDIAN - #if (defined(__BYTE_ORDER__)&&(__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)) \ - || defined(__LITTLE_ENDIAN__) || defined(__LITTLE_ENDIAN) || defined(_LITTLE_ENDIAN) \ - || defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) \ - || defined(__THUMBEL__) \ - || defined(__AARCH64EL__) \ - || defined(__ARMEL__) - #define GFX_CPU_ENDIAN GFX_CPU_ENDIAN_LITTLE - #elif (defined(__BYTE_ORDER__)&&(__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)) \ - || defined(__BIG_ENDIAN__) || defined(__BIG_ENDIAN) || defined(_BIG_ENDIAN) \ - || defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) \ - || defined(__THUMBEB__) \ - || defined(__AARCH64EB__) \ - || defined(__ARMEB__) - #define GFX_CPU_ENDIAN GFX_CPU_ENDIAN_BIG - #else - #define GFX_CPU_ENDIAN GFX_CPU_ENDIAN_UNKNOWN - #endif -#endif - -/** - * @brief Mark a function as deprecated. - */ -#ifndef DEPRECATED - #define DEPRECATED(msg) -#endif - -/** - * @brief Mark a function as inline. - */ -#ifndef GFXINLINE - #define GFXINLINE inline -#endif - /** * Get all the options for each sub-system. * -- cgit v1.2.3