19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef __stl_config__linux_h
29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define __stl_config__linux_h
39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_PLATFORM "Linux"
59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include <features.h>
79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* This is defined wether library in use is glibc or not.
99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   This may be treated as presence of GNU libc compatible
109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   header files (these define is not really intended to check
119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   for the presence of a particular library, but rather is used
129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   to define an INTERFACE.) */
139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_USE_GLIBC
149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_USE_GLIBC 1
159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_USE_STDIO_IO
18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define _STLP_USE_UNIX_IO
19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* #define _STLP_USE_STDIO_IO */
22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* If not explicitly specified otherwise, work with threads
24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined(_STLP_NO_THREADS) && !defined(_REENTRANT)
26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define _REENTRANT
27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined(_REENTRANT) && !defined(_PTHREADS)
309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _PTHREADS
319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifdef __UCLIBC__ /* uClibc 0.9.27 */
349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_USE_UCLIBC 1
359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if !defined(__UCLIBC_HAS_WCHAR__)
369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    ifndef _STLP_NO_WCHAR_T
379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_NO_WCHAR_T
389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    endif
39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    ifndef _STLP_NO_NATIVE_MBSTATE_T
40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#      define _STLP_NO_NATIVE_MBSTATE_T
419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    endif
429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    ifndef _STLP_NO_NATIVE_WIDE_STREAMS
439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_NO_NATIVE_WIDE_STREAMS
449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    endif
459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif /* __UCLIBC_HAS_WCHAR__ */
469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   /* Hmm, bogus _GLIBCPP_USE_NAMESPACES seems undefined... */
479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_VENDOR_GLOBAL_CSTD 1
489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined(_PTHREADS)
529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_THREADS
539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_PTHREADS
549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*
559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  ifndef __USE_UNIX98
569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define __USE_UNIX98
579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block*/
599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* This feature exist at least since glibc 2.2.4 */
609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* #  define __FIT_XSI_THR */ /* Unix 98 or X/Open System Interfaces Extention */
619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  ifdef __USE_XOPEN2K
629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* The IEEE Std. 1003.1j-2000 introduces functions to implement spinlocks. */
639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#   ifndef __UCLIBC__ /* There are no spinlocks in uClibc 0.9.27 */
649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#     define _STLP_USE_PTHREAD_SPINLOCK
659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#   else
669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#     ifndef _STLP_DONT_USE_PTHREAD_SPINLOCK
679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        /* in uClibc (0.9.26) pthread_spinlock* declared in headers
689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block         * but absent in library */
699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#       define _STLP_DONT_USE_PTHREAD_SPINLOCK
709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#     endif
719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#   endif
72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#   ifndef _STLP_DONT_USE_PTHREAD_SPINLOCK
73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#     define _STLP_USE_PTHREAD_SPINLOCK
74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#     define _STLP_STATIC_MUTEX _STLP_mutex
75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#   endif
769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* #   define __FIT_PSHARED_MUTEX */
779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* Endiannes */
819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include <endian.h>
829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined(__BYTE_ORDER) || !defined(__LITTLE_ENDIAN) || !defined(__BIG_ENDIAN)
839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  error "One of __BYTE_ORDER, __LITTLE_ENDIAN and __BIG_ENDIAN undefined; Fix me!"
849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if ( __BYTE_ORDER == __LITTLE_ENDIAN )
879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_LITTLE_ENDIAN 1
889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#elif ( __BYTE_ORDER == __BIG_ENDIAN )
899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_BIG_ENDIAN 1
909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  error "__BYTE_ORDER neither __BIG_ENDIAN nor __LITTLE_ENDIAN; Fix me!"
929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined(__GNUC__) && (__GNUC__ < 3)
959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_NO_NATIVE_WIDE_FUNCTIONS 1
96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifdef __GLIBC__
99e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3) || (__GLIBC__ > 2)
100e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* From glibc 2.3.x default allocator is malloc_alloc, if was not defined other */
101e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    if !defined(_STLP_USE_MALLOC) && !defined(_STLP_USE_NEWALLOC) && !defined(_STLP_USE_PERTHREAD_ALLOC) && !defined(_STLP_USE_NODE_ALLOC)
102e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#      define _STLP_USE_MALLOC 1
103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    endif
104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* Following platforms has no long double:
106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *   - Alpha
107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *   - PowerPC
108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *   - SPARC, 32-bits (64-bits platform has long double)
109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *   - MIPS, 32-bits
110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *   - ARM
111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *   - SH4
112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined(__alpha__) || \
114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      defined(__ppc__) || defined(PPC) || defined(__powerpc__) || \
115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ((defined(__sparc) || defined(__sparcv9) || defined(__sparcv8plus)) && !defined ( __WORD64 ) && !defined(__arch64__)) /* ? */ || \
116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      (defined(_MIPS_SIM) && (_MIPS_SIM == _ABIO32)) || \
117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      defined(__arm__) || \
118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      defined(__sh__)
119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott /* #  if defined(__NO_LONG_DOUBLE_MATH) */
120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    define _STLP_NO_LONG_DOUBLE
121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* __stl_config__linux_h */
126