SuperTuxKart
tls.hpp
1 // SuperTuxKart - a fun racing game with go-kart
2 // Copyright (C) 2020 SuperTuxKart-Team
3 //
4 // This program is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU General Public License
6 // as published by the Free Software Foundation; either version 3
7 // of the License, or (at your option) any later version.
8 //
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with this program; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17 
18 #ifndef HEADER_TLS_HPP
19 #define HEADER_TLS_HPP
20 
21 #include <thread>
22 
23 #ifndef thread_local
24 # if __STDC_VERSION__ >= 201112 && !defined __STDC_NO_THREADS__
25 # define thread_local _Thread_local
26 # elif defined _WIN32 && ( \
27  defined _MSC_VER || \
28  defined __ICL || \
29  defined __DMC__ || \
30  defined __BORLANDC__ )
31 # define thread_local __declspec(thread)
32 /* note that ICC (linux) and Clang are covered by __GNUC__ */
33 # elif defined __GNUC__ || \
34  defined __SUNPRO_C || \
35  defined __xlC__
36 # define thread_local __thread
37 # else
38 # error "Cannot define thread_local"
39 # endif
40 #endif
41 
42 #endif