issue#11: cds: changed __CDS_ guard prefix to CDSLIB_ for all .h files
[libcds.git] / cds / threading / details / auto_detect.h
1 //$$CDS-header$$
2
3 #ifndef CDSLIB_THREADING_AUTO_DETECT_H
4 #define CDSLIB_THREADING_AUTO_DETECT_H
5
6 #if defined(CDS_THREADING_AUTODETECT)
7     // Auto-detect appropriate threading model
8 #   if CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)
9         // For MSVC, CDS_THREADING_MSVC and CDS_THREADING_WIN_TLS is supported.
10         // CDS_THREADING_MSVC must be explicitly defined if needed
11 #       if !defined(CDS_THREADING_MSVC) && !defined(CDS_THREADING_WIN_TLS) && !defined(CDS_THREADING_CXX11)
12 #           define CDS_THREADING_WIN_TLS
13 #       endif
14 #   elif CDS_COMPILER == CDS_COMPILER_GCC || CDS_COMPILER == CDS_COMPILER_CLANG || CDS_COMPILER == CDS_COMPILER_INTEL
15         // For GCC, CDS_THREADING_GCC and CDS_THREADING_PTHREAD is supported
16         // CDS_THREADING_GCC must be explicitly defined if needed
17 #       if CDS_OS_INTERFACE == CDS_OSI_WINDOWS
18 #           if !defined(CDS_THREADING_GCC) && !defined(CDS_THREADING_WIN_TLS) && !defined(CDS_THREADING_CXX11)
19 #               define CDS_THREADING_WIN_TLS
20 #           endif
21 #       elif !defined(CDS_THREADING_GCC) && !defined(CDS_THREADING_PTHREAD) && !defined(CDS_THREADING_CXX11)
22 #           define CDS_THREADING_PTHREAD
23 #       endif
24 #   else
25 #       error "Unknown compiler for cds::threading"
26 #   endif
27 #endif // #if defined(CDS_THREADING_AUTODETECT)
28
29
30
31 #if defined(CDS_THREADING_MSVC)
32 #   include <cds/threading/details/msvc.h>
33 #elif defined(CDS_THREADING_WIN_TLS)
34 #   include <cds/threading/details/wintls.h>
35 #elif defined(CDS_THREADING_PTHREAD)
36 #   include <cds/threading/details/pthread.h>
37 #elif defined(CDS_THREADING_GCC)
38 #   include <cds/threading/details/gcc.h>
39 #elif defined(CDS_THREADING_CXX11)
40 #   include <cds/threading/details/cxx11.h>
41 #elif !defined(CDS_THREADING_USER_DEFINED)
42 #   error "You must define one of CDS_THREADING_xxx macro before compiling the application"
43 #endif
44
45 #endif // #ifndef CDSLIB_THREADING_AUTO_DETECT_H