Home | History | Annotate | Download | only in config
      1 /*
      2  * File to have Microsoft eMbedded Visual C++ 3.0 and .NET working with STLport
      3  * May 2004
      4  * Origin : Zdenek Nemec - zero (at) mapfactor.com
      5  *          Michael Fink - vividos (at) users.sourceforge.net
      6  */
      7 
      8 #ifndef _STLP_EVC_H
      9 #define _STLP_EVC_H
     10 
     11 #define _STLP_COMPILER "eMbedded Visual C++"
     12 
     13 // This flag is being used by STLport to support
     14 // old-fashioned Windows CE SDK (see stl_wince.h)
     15 // do not use with eMebedded Visual C++ 3 or 4!
     16 #ifdef _STLP_WINCE
     17 #  undef _STLP_WINCE
     18 #endif
     19 
     20 /* Compiler dependent define. The following defines may be available:
     21  * _STLP_WCE_EVC3 when compiling under eMbedded Visual C++ 3
     22  * _STLP_WCE_NET  when compiling under eMbedded Visual C++ .NET
     23  * _STLP_WCE      always defined when compiling with one of the above
     24  */
     25 #undef _STLP_WCE_EVC3
     26 #undef _STLP_WCE_NET
     27 
     28 #if (_WIN32_WCE > 300)
     29 #  define _STLP_WCE_NET UNDER_CE
     30 #elif (_WIN32_WCE == 300)
     31 #  define _STLP_WCE_EVC3 UNDER_CE
     32 #else
     33 #  error No support for Windows CE below 3.0!
     34 #endif
     35 
     36 // This is defined for all platforms using Windows CE
     37 #define _STLP_WCE
     38 
     39 /* All Windows CE versions up to at least version 5 are little-endian, even
     40  * if the hardware (like e.g. MIPS) can be configured for big-endian, too. */
     41 #define _STLP_LITTLE_ENDIAN
     42 
     43 // Ensure _DEBUG is defined.
     44 #if defined (DEBUG) && !defined (_DEBUG)
     45 #  define _DEBUG
     46 #endif
     47 
     48 // inherit all msvc6 options
     49 #include <stl/config/_msvc.h>
     50 
     51 // CE up to at least version 5 has no C locale support
     52 #define _STLP_NO_LOCALE_SUPPORT
     53 
     54 #if _WIN32_WCE >= 420
     55    // SDKs built with PB5 have terminate&co in namespace std...
     56 #  define _STLP_VENDOR_TERMINATE_STD _STLP_VENDOR_STD
     57 #  define _STLP_VENDOR_UNCAUGHT_EXCEPTION_STD _STLP_VENDOR_STD
     58    // ...and new_handler/set_new_handler in the global namespace.
     59 #  define _STLP_GLOBAL_NEW_HANDLER 1
     60 #endif
     61 
     62 // Always threaded in eMbedded Visual C++ 3.0 and .NET
     63 #ifndef _MT
     64 #  define _MT
     65 #endif
     66 
     67 // we don't have a static native runtime library
     68 #undef _STLP_USING_CROSS_NATIVE_RUNTIME_LIB
     69 
     70 #if _WIN32_WCE < 400
     71 // no long double under CE3 and older
     72 #  define _STLP_NO_LONG_DOUBLE
     73 #endif
     74 
     75 // no *f and *l math functions available
     76 #define _STLP_NO_VENDOR_MATH_F
     77 #define _STLP_NO_VENDOR_MATH_L
     78 
     79 /*
     80  * Redirect cout, cerr and clog:
     81  * If defined redirect cout, cerr and clog to
     82  * files stdout.txt, stderr.txt and stdlog.txt
     83  */
     84 //# define _STLP_REDIRECT_STDSTREAMS
     85 
     86 /*
     87  * Static class members may generate LNK1179:
     88  * Wrong COMDAT packing may cause LNK1179 error.
     89  * For details see http://groups.google.com/groups?th=8a05c82c4ffee280
     90  * example P78. This define is not used/needed at this moment
     91  * but may came handy in future...
     92  */
     93 //# define _STLP_STATIC_MEMBERS_BUG
     94 
     95 // Use wide-string interface of windows native functions (CreateFile...).
     96 // Note that this should be defined all the time while under CE.
     97 #if defined (UNICODE)
     98 #  define _STLP_USE_WIDE_INTERFACE
     99 #endif
    100 
    101 // Force exception std to std instead of __std_alias.
    102 #if defined (__cplusplus) && !defined (_STLP_HAS_NO_NAMESPACES)
    103 #  ifdef _STLP_VENDOR_EXCEPT_STD
    104 #    undef _STLP_VENDOR_EXCEPT_STD
    105 #  endif
    106 #  define _STLP_VENDOR_EXCEPT_STD std
    107 #endif
    108 
    109 // short string optimization bug under evc3, evc4 using ARM compiler
    110 #if _MSC_VER < 1400 && (defined (ARM) || defined (_ARM_))
    111 #  define _STLP_DONT_USE_SHORT_STRING_OPTIM
    112 #endif
    113 
    114 // when using MFC, disable another placement new declaration, since there is one in wcealt.h
    115 #if !defined (__BUILDING_STLPORT) && defined (_MFC_VER)
    116 #  define __PLACEMENT_NEW_INLINE
    117 #endif
    118 
    119 // threads
    120 #undef _REENTRANT
    121 #define _REENTRANT
    122 #undef _NOTHREADS
    123 
    124 // Use old fashioned headers (ctime vs. time.h).
    125 #undef _STLP_NO_NEW_C_HEADERS
    126 #define _STLP_NO_NEW_C_HEADERS
    127 
    128 // exception handling support: only on evc4 and user added /GX to project settings
    129 #if defined (_STLP_WCE_EVC3) || !defined (_CPPUNWIND)
    130 #  define _STLP_NO_EXCEPTION_HEADER
    131 #  define _STLP_NO_EXCEPTIONS
    132 #  undef _STLP_USE_EXCEPTIONS
    133 #  ifndef _STLP_THROW_BAD_ALLOC
    134 #    define _STLP_THROW_BAD_ALLOC { _STLP_WINCE_TRACE(L"out of memory"); ExitThread(1); }
    135 #  endif
    136 #endif
    137 
    138 #define _STLP_WINCE_TRACE(msg) OutputDebugString(msg)
    139 
    140 /*
    141  * eMbedded Visual C++ .NET specific settings
    142  */
    143 #if defined (_STLP_WCE_NET)
    144 
    145 // evc4 has no locale and time support
    146 #  define _STLP_NO_LOCALE_SUPPORT
    147 #  define _STLP_NO_TIME_SUPPORT
    148 
    149 // ptrdiff_t is not defined in evc4 headers
    150 #  ifndef _PTRDIFF_T_DEFINED
    151    typedef int ptrdiff_t;
    152 #    define _PTRDIFF_T_DEFINED
    153 #  endif
    154 
    155 /*
    156  * Helper macros for including the native headers in cases where a file with
    157  * the same name also exists in the STLport include folder. The idea behind
    158  * this is that we first go up one directory and then down into a dir that
    159  * is only present in the native install but not in STLport.
    160  *
    161  */
    162 #  if !defined (_STLP_NATIVE_INCLUDE_PATH)
    163 #    if defined (_X86_)
    164 #      if defined (_STLP_WCE_TARGET_PROC_SUBTYPE_EMULATOR)
    165 #        define _STLP_NATIVE_INCLUDE_PATH ../Emulator
    166 #      else
    167 #        define _STLP_NATIVE_INCLUDE_PATH ../X86
    168 #      endif
    169 #    elif defined (_ARM_)
    170 #      if _MSC_VER < 1400
    171          // eVC3/4
    172 #        if defined (ARMV4)
    173 #          define _STLP_NATIVE_INCLUDE_PATH ../Armv4
    174 #        elif defined (ARMV4I)
    175 #          define _STLP_NATIVE_INCLUDE_PATH ../Armv4i
    176 #        elif defined (ARMV4T)
    177 #          define _STLP_NATIVE_INCLUDE_PATH ../Armv4t
    178 #        else
    179 #          error Unknown ARM SDK.
    180 #        endif
    181 #      else
    182          // VC8 crosscompiling for CE
    183 #        if defined (ARMV4)
    184            // VC8 bundled Pocket PC 2003 SDK don't have a target CPU subfolder.
    185 #          if defined(WIN32_PLATFORM_PSPC)
    186 #            define _STLP_NATIVE_INCLUDE_PATH ../Include
    187 #          else
    188 #            define _STLP_NATIVE_INCLUDE_PATH ../Armv4
    189 #          endif
    190 #        elif defined(ARMV4I) || defined(ARMV4T)
    191 #          define _STLP_NATIVE_INCLUDE_PATH ../Armv4i
    192 #        else
    193 #          error Unknown ARM SDK.
    194 #        endif
    195 #      endif
    196 #    elif defined (_MIPS_)
    197 #      if defined (MIPS16)
    198 #        define _STLP_NATIVE_INCLUDE_PATH ../mips16
    199 #      elif defined (MIPSII)
    200 #        define _STLP_NATIVE_INCLUDE_PATH ../mipsII
    201 #      elif defined (MIPSII_FP)
    202 #        define _STLP_NATIVE_INCLUDE_PATH ../mipsII_fp
    203 #      elif defined (MIPSIV)
    204 #        define _STLP_NATIVE_INCLUDE_PATH ../mipsIV
    205 #      elif defined (MIPSIV_FP)
    206 #        define _STLP_NATIVE_INCLUDE_PATH ../mipsIV_fp
    207 #      else
    208 #        error Unknown MIPS SDK.
    209 #      endif
    210 #    elif defined (SHx)
    211 #      if defined (SH3)
    212 #        define _STLP_NATIVE_INCLUDE_PATH ../sh3
    213 #      elif defined (SH4)
    214 #        define _STLP_NATIVE_INCLUDE_PATH ../sh4
    215 #      else
    216 #        error Unknown SHx SDK.
    217 #      endif
    218 #    else
    219 #      error Unknown SDK.
    220 #    endif
    221 #  endif /* !_STLP_NATIVE_INCLUDE_PATH */
    222 
    223 /* Workaround when using MFCCE and using <new> together: MFCCE's wcealt.h doesn't
    224  * check for __PLACEMENT_NEW_INLINE before defining operator new, so when <new>
    225  * defines the operatore before, there will be an error C2084:
    226  * "function 'void *__cdecl operator new(unsigned int,void *)' already has a body".
    227  */
    228 #  ifdef _STLP_USE_MFC
    229 #    define __PLACEMENT_NEW_INLINE
    230 #  endif
    231 
    232 #endif /* _STLP_WCE_NET */
    233 
    234 /*
    235  * eMbedded Visual C++ 3.0 specific settings
    236  */
    237 #if defined (_STLP_WCE_EVC3)
    238 
    239 #  define _STLP_NO_NATIVE_MBSTATE_T
    240 
    241 // evc3 has no locale and time support
    242 #  define _STLP_NO_LOCALE_SUPPORT
    243 #  define _STLP_NO_TIME_SUPPORT
    244 
    245 // evc3 has new, but no explicit header
    246 #  define _STLP_NO_NEW_HEADER
    247 #  define _STLP_NO_NEW_NEW_HEADER
    248 
    249 // evc3 has no bad_alloc and no typeinfo
    250 #  undef _STLP_NO_BAD_ALLOC
    251 #  define _STLP_NO_BAD_ALLOC
    252 
    253 #  undef _STLP_NO_TYPEINFO
    254 #  define _STLP_NO_TYPEINFO
    255 
    256 // missing things in eMbedded Visual C++ 3.0 headers
    257 #  ifndef _SIZE_T_DEFINED
    258    typedef unsigned int size_t;
    259 #    define _SIZE_T_DEFINED
    260 #  endif
    261 
    262 #  ifndef _WCHAR_T_DEFINED
    263    typedef unsigned short wchar_t;
    264 #    define _WCHAR_T_DEFINED
    265 #  endif
    266 
    267 // ptrdiff_t is not defined in evc3 headers
    268 #  ifndef _PTRDIFF_T_DEFINED
    269    typedef int ptrdiff_t;
    270 #    define _PTRDIFF_T_DEFINED
    271 #  endif
    272 
    273 // clock_t is not defined in evc3 headers
    274 #  ifndef _CLOCK_T_DEFINED
    275    typedef long clock_t;
    276 #    define _CLOCK_T_DEFINED
    277 #  endif
    278 
    279 // Struct tm is not defined in evc3 headers
    280 #  ifndef _TM_DEFINED
    281 struct tm {
    282    int tm_sec;     /* seconds after the minute - [0,59] */
    283    int tm_min;     /* minutes after the hour - [0,59] */
    284    int tm_hour;    /* hours since midnight - [0,23] */
    285    int tm_mday;    /* day of the month - [1,31] */
    286    int tm_mon;     /* months since January - [0,11] */
    287    int tm_year;    /* years since 1900 */
    288    int tm_wday;    /* days since Sunday - [0,6] */
    289    int tm_yday;    /* days since January 1 - [0,365] */
    290    int tm_isdst;   /* daylight savings time flag */
    291 };
    292 #    define _TM_DEFINED
    293 #  endif
    294 
    295 // define placement new and delete operator
    296 // note: when MFCCE headers are included first, don't define the new operator,
    297 //       since it was already defined in wcealt.h
    298 #  ifdef __cplusplus
    299 #    ifndef __PLACEMENT_NEW_INLINE
    300 #      ifndef _MFC_VER
    301 inline void *__cdecl operator new(size_t, void *_P) { return (_P); }
    302 #      endif /* _MFC_VER */
    303 inline void __cdecl operator delete(void *, void *) { return; }
    304 #      define __PLACEMENT_NEW_INLINE
    305 #    endif
    306 #  endif /* __cplusplus */
    307 
    308 // evc3 doesn't have native wide functions, e.g. fgetwc, wmemmove
    309 #  define _STLP_NO_NATIVE_WIDE_FUNCTIONS
    310 
    311 // evc3 doesn't have assert.h
    312 #  ifndef _ASSERT_DEFINED
    313 #    define assert(expr) _STLP_ASSERT(expr)
    314 #    define _ASSERT_DEFINED
    315 #  endif
    316 
    317 #endif /* _STLP_WCE_EVC3 */
    318 
    319 /*
    320  * original call: TerminateProcess(GetCurrentProcess(), 0);
    321  * we substitute the GetCurrentProcess() with the result of the inline function
    322  * defined in kfuncs.h, since we then can avoid including <windows.h> at all.
    323  * all needed Win32 API functions are defined in <stl/_windows.h>
    324  */
    325 #ifndef _ABORT_DEFINED
    326 #  define _STLP_ABORT() TerminateProcess(reinterpret_cast<HANDLE>(66), 0)
    327 #  define _ABORT_DEFINED
    328 #endif
    329 
    330 // Notice: windows.h isn't included here anymore; all needed defines are in
    331 // stl/_windows.h now
    332 
    333 #endif /* _STLP_EVC_H */
    334