diff --git a/montecarlo/vmc/inc/TMCtls.h b/montecarlo/vmc/inc/TMCtls.h index 51351f65791b5b..6abd70467d677a 100644 --- a/montecarlo/vmc/inc/TMCtls.h +++ b/montecarlo/vmc/inc/TMCtls.h @@ -45,19 +45,44 @@ #define VMC_MULTITHREADED 1 #if ( defined (VMC_MULTITHREADED) ) - #if ( ( defined(__MACH__) && defined(__clang__) && defined(__x86_64__) ) || \ - ( defined(__MACH__) && defined(__GNUC__) && __GNUC__>=4 && __GNUC_MINOR__>=7 ) || \ - defined(__linux__) || defined(_AIX) ) && ( !defined(__CINT__) ) - // #if ( defined(__linux__) ) && ( !defined(__CINT__) ) - // Multi-threaded build: for POSIX systems - #include - #define TMCThreadLocal __thread + + #if ( defined(__MACH__) && defined(__clang__) && defined(__x86_64__) ) || \ + ( defined(__linux__) && defined(__clang__) ) + #if (__has_feature(cxx_thread_local)) + # define TMCThreadLocalStatic static thread_local + # define TMCThreadLocal thread_local + #else + # define TMCThreadLocalStatic static __thread + # define TMCThreadLocal __thread + #endif + + #elif ( (defined(__linux__) || defined(__MACH__)) && \ + !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__>=4 && __GNUC_MINOR__<9)) + # define TMCThreadLocalStatic static __thread + # define TMCThreadLocal thread_local + + #elif ( (defined(__linux__) || defined(__MACH__)) && \ + !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__>=4 && __GNUC_MINOR__>=9) || __GNUC__>=5 ) + # define TMCThreadLocalStatic static thread_local + # define TMCThreadLocal thread_local + + #elif ( (defined(__linux__) || defined(__MACH__)) && \ + defined(__INTEL_COMPILER) ) + #if (__INTEL_COMPILER>=1500) + # define TMCThreadLocalStatic static thread_local + # define TMCThreadLocal thread_local + #else + # define TMCThreadLocalStatic static __thread + # define TMCThreadLocal __thread + #endif #else - //# error "No Thread Local Storage (TLS) technology supported for this platform. Use sequential build !" - #define TMCThreadLocal + //# error "No Thread Local Storage (TLS) technology supported for this platform. Use sequential build !" + # define TMCThreadLocalStatic static + # define TMCThreadLocal #endif #else - #define TMCThreadLocal + # define TMCThreadLocalStatic static + # define TMCThreadLocal #endif #endif //ROOT_TMCtls