Need double escape
[ACE_TAO.git] / ACE / ace / config-g++-common.h
blobd97f8085e55b30efe2e0384238a2adad95f2229e
1 // -*- C++ -*-
2 // This configuration file is designed to be included by another,
3 // specific configuration file. It provides config information common
4 // to all g++ platforms, including egcs.
6 #ifndef ACE_GNUG_COMMON_H
7 #define ACE_GNUG_COMMON_H
8 #include /**/ "ace/pre.h"
10 #if !defined (ACE_CC_NAME)
11 # define ACE_CC_NAME ACE_TEXT ("g++")
12 #endif
13 #define ACE_CC_MAJOR_VERSION __GNUC__
14 #define ACE_CC_MINOR_VERSION __GNUC_MINOR__
15 #define ACE_CC_BETA_VERSION (0)
17 #if __cplusplus >= 202002L
18 # define ACE_HAS_CPP20
19 #endif
20 #if __cplusplus >= 201703L
21 # define ACE_HAS_CPP17
22 # define ACE_FALLTHROUGH [[fallthrough]]
23 #endif
24 #if __cplusplus >= 201402L
25 # define ACE_HAS_CPP14
26 #endif
27 #if __cplusplus >= 201103L
28 # define ACE_HAS_CPP11
29 # if !defined (ACE_FALLTHROUGH)
30 # if __GNUC__ >= 7
31 # define ACE_FALLTHROUGH [[gnu::fallthrough]]
32 # else
33 # define ACE_FALLTHROUGH
34 # endif
35 # endif
36 #endif
38 #if (defined (i386) || defined (__i386__)) && !defined (ACE_SIZEOF_LONG_DOUBLE)
39 # define ACE_SIZEOF_LONG_DOUBLE 12
40 #endif /* i386 */
42 #if !defined (__MINGW32__) && (defined (i386) || defined (__i386__))
43 // If running an Intel, assume that it's a Pentium so that
44 // ACE_OS::gethrtime () can use the RDTSC instruction. If running a
45 // 486 or lower, be sure to comment this out. (If not running an
46 // Intel CPU, this #define will not be seen because of the i386
47 // protection, so it can be ignored.)
48 # define ACE_HAS_PENTIUM
49 #endif /* i386 */
51 #if (defined (ACE_HAS_PENTIUM) || defined (__amd64__) || defined (__x86_64__))
52 # define ACE_HAS_INTEL_ASSEMBLY
53 #endif
55 #if !defined (ACE_HAS_GCC_CONSTRUCTOR_ATTRIBUTE)
56 #define ACE_HAS_GCC_CONSTRUCTOR_ATTRIBUTE 1
57 #endif
59 #if !defined (ACE_HAS_GCC_DESTRUCTOR_ATTRIBUTE)
60 #define ACE_HAS_GCC_DESTRUCTOR_ATTRIBUTE 1
61 #endif
63 #if !defined (ACE_HAS_GCC_FORMAT_ATTRIBUTE)
64 #define ACE_HAS_GCC_FORMAT_ATTRIBUTE 1
65 #endif
67 #if (ACE_HAS_GCC_CONSTRUCTOR_ATTRIBUTE == 1)
68 # define ACE_GCC_CONSTRUCTOR_ATTRIBUTE __attribute__ ((constructor))
69 #endif
71 #if (ACE_HAS_GCC_DESTRUCTOR_ATTRIBUTE == 1)
72 # define ACE_GCC_DESTRUCTOR_ATTRIBUTE __attribute__ ((destructor))
73 #endif
75 #if (ACE_HAS_GCC_FORMAT_ATTRIBUTE == 1)
76 # define ACE_GCC_FORMAT_ATTRIBUTE(TYPE, STR_INDEX, FIRST_INDEX) \
77 __attribute__ ((format (TYPE, STR_INDEX, FIRST_INDEX)))
78 #endif
80 // Take advantage of g++ visibility attributes to generate
81 // improved shared library binaries.
82 #if !defined (__MINGW32__)
84 # if defined (ACE_HAS_CUSTOM_EXPORT_MACROS) && ACE_HAS_CUSTOM_EXPORT_MACROS == 0
85 # undef ACE_HAS_CUSTOM_EXPORT_MACROS
86 # if defined (ACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS)
87 # undef ACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS
88 # endif /* ACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS */
89 # define ACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS 0
90 # else
91 # ifndef ACE_HAS_CUSTOM_EXPORT_MACROS
92 # define ACE_HAS_CUSTOM_EXPORT_MACROS
93 # endif /* !ACE_HAS_CUSTOM_EXPORT_MACROS */
94 # ifndef ACE_Proper_Export_Flag
95 # define ACE_Proper_Export_Flag __attribute__ ((visibility("default")))
96 # endif /* !ACE_Proper_Export_Flag */
97 # ifndef ACE_Proper_Import_Flag
98 # define ACE_Proper_Import_Flag __attribute__ ((visibility("default")))
99 # endif /* !ACE_Proper_Import_Flag */
101 # ifndef ACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS
102 # define ACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS 1
103 # endif
105 # if defined (ACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS) && ACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS == 1
106 # define ACE_EXPORT_SINGLETON_DECLARATION(T) __extension__ extern template class ACE_Proper_Export_Flag T
107 # define ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) __extension__ extern template class ACE_Proper_Export_Flag SINGLETON_TYPE <CLASS, LOCK>;
108 # define ACE_HAS_EXPLICIT_TEMPLATE_CLASS_INSTANTIATION
109 # else /* ACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS */
110 # define ACE_EXPORT_SINGLETON_DECLARATION(T) \
111 _Pragma ("GCC visibility push(default)") \
112 template class T \
113 _Pragma ("GCC visibility pop")
114 # define ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) \
115 _Pragma ("GCC visibility push(default)") \
116 template class SINGLETON_TYPE<CLASS, LOCK>; \
117 _Pragma ("GCC visibility pop")
118 # endif /* ACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS */
120 // Note that the "__extension__" is needed to prevent g++ from issuing
121 // an error when using its "-pedantic" command line flag.
122 # define ACE_IMPORT_SINGLETON_DECLARATION(T) __extension__ extern template class T
123 # define ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) __extension__ extern template class SINGLETON_TYPE<CLASS, LOCK>;
125 # endif /* ACE_HAS_CUSTOM_EXPORT_MACROS == 0 */
126 #endif /* !__MINGW32__ */
128 #if defined (ACE_HAS_THREADS)
129 # if defined (__powerpc__)
130 // The builtins seem to be provided for all powerpc platforms
131 # define ACE_HAS_GCC_ATOMIC_BUILTINS 1
132 # endif
133 # if defined (__ia64)
134 // The builtins seem to be provided for the IA64 platforms
135 # define ACE_HAS_GCC_ATOMIC_BUILTINS 1
136 # endif
137 # if defined (__amd64__) || defined (__x86_64__)
138 // The builtin's are provided also for 64bit linux
139 # define ACE_HAS_GCC_ATOMIC_BUILTINS 1
140 # endif
141 #endif /* ACE_HAS_THREADS */
143 #define ACE_GCC_NO_RETURN __attribute__ ((__noreturn__))
145 #include /**/ "ace/post.h"
146 #endif /* ACE_GNUG_COMMON_H */