Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // 27 // Thread Local Storage typedefs 28 29 // Author: G.Cosmo, 01.10.2012 - Created 30 // -------------------------------------------------------------------- 31 32 // Fundamental definitions 33 #ifndef G4GMAKE 34 # include "G4GlobalConfig.hh" 35 #endif 36 37 #ifndef G4_TLS 38 # define G4_TLS 1 39 40 # if defined(G4MULTITHREADED) 41 # if(defined(__MACH__) && defined(__clang__)) || \ 42 (defined(__linux__) && defined(__clang__)) 43 # define G4ThreadLocalStatic static thread_local 44 # define G4ThreadLocal thread_local 45 # elif((defined(__linux__) || defined(__MACH__)) && \ 46 !defined(__INTEL_COMPILER) && defined(__GNUC__) && \ 47 (__GNUC__ >= 4 && __GNUC_MINOR__ < 9)) 48 # define G4ThreadLocalStatic static __thread 49 # define G4ThreadLocal thread_local 50 # elif((defined(__linux__) || defined(__MACH__)) && \ 51 !defined(__INTEL_COMPILER) && defined(__GNUC__) && \ 52 (__GNUC__ >= 4 && __GNUC_MINOR__ >= 9) || \ 53 __GNUC__ >= 5) 54 # define G4ThreadLocalStatic static thread_local 55 # define G4ThreadLocal thread_local 56 # elif((defined(__linux__) || defined(__MACH__)) && \ 57 defined(__INTEL_COMPILER)) 58 # if __INTEL_COMPILER >= 1500 59 # define G4ThreadLocalStatic static thread_local 60 # define G4ThreadLocal thread_local 61 # else 62 # define G4ThreadLocalStatic static __thread 63 # define G4ThreadLocal __thread 64 # endif 65 # elif defined(_AIX) 66 # define G4ThreadLocalStatic static thread_local 67 # define G4ThreadLocal thread_local 68 # elif defined(WIN32) 69 # define G4ThreadLocalStatic static thread_local 70 # define G4ThreadLocal thread_local 71 # else 72 # error \ 73 "No Thread Local Storage (TLS) technology supported for this platform. Use sequential build !" 74 # endif 75 # else 76 # define G4ThreadLocalStatic static 77 # define G4ThreadLocal 78 # endif 79 80 #endif 81