github.com/searKing/golang/go@v1.2.117/os/signal/cgo/include/boost/config/compiler/cray.hpp (about) 1 // Copyright 2011 John Maddock 2 // Copyright 2013, 2017-2018 Cray, Inc. 3 // Use, modification and distribution are subject to the 4 // Boost Software License, Version 1.0. (See accompanying file 5 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 7 // See http://www.boost.org for most recent version. 8 9 // Cray C++ compiler setup. 10 // 11 // There are a few parameters that affect the macros defined in this file: 12 // 13 // - What version of CCE (Cray Compiling Environment) are we running? This 14 // comes from the '_RELEASE_MAJOR', '_RELEASE_MINOR', and 15 // '_RELEASE_PATCHLEVEL' macros. 16 // - What C++ standards conformance level are we using (e.g. '-h 17 // std=c++14')? This comes from the '__cplusplus' macro. 18 // - Are we using GCC extensions ('-h gnu' or '-h nognu')? If we have '-h 19 // gnu' then CCE emulates GCC, and the macros '__GNUC__', 20 // '__GNUC_MINOR__', and '__GNUC_PATCHLEVEL__' are defined. 21 // 22 // This file is organized as follows: 23 // 24 // - Verify that the combination of parameters listed above is supported. 25 // If we have an unsupported combination, we abort with '#error'. 26 // - Establish baseline values for all Boost macros. 27 // - Apply changes to the baseline macros based on compiler version. These 28 // changes are cummulative so each version section only describes the 29 // changes since the previous version. 30 // - Within each version section, we may also apply changes based on 31 // other parameters (i.e. C++ standards conformance level and GCC 32 // extensions). 33 // 34 // To test changes to this file: 35 // 36 // ``` 37 // module load cce/8.6.5 # Pick the version you want to test. 38 // cd boost/libs/config/test/all 39 // b2 -j 8 toolset=cray cxxstd=03 cxxstd=11 cxxstd=14 cxxstd-dialect=gnu linkflags=-lrt 40 // ``` 41 // Note: Using 'cxxstd-dialect=iso' is not supported at this time (the 42 // tests run, but many tests fail). 43 // 44 // Note: 'linkflags=-lrt' is needed in Cray Linux Environment. Otherwise 45 // you get an 'undefined reference to clock_gettime' error. 46 // 47 // Note: If a test '*_fail.cpp' file compiles, but fails to run, then it is 48 // reported as a defect. However, this is not actually a defect. This is an 49 // area where the test system is somewhat broken. Tests that are failing 50 // because of this problem are noted in the comments. 51 // 52 // Pay attention to the macro definitions for the macros you wish to 53 // modify. For example, only macros categorized as compiler macros should 54 // appear in this file; platform macros should not appear in this file. 55 // Also, some macros have to be defined to specific values; it is not 56 // always enough to define or undefine a macro. 57 // 58 // Macro definitions are available in the source code at: 59 // 60 // `boost/libs/config/doc/html/boost_config/boost_macro_reference.html` 61 // 62 // Macro definitions are also available online at: 63 // 64 // http://www.boost.org/doc/libs/master/libs/config/doc/html/boost_config/boost_macro_reference.html 65 // 66 // Typically, if you enable a feature, and the tests pass, then you have 67 // nothing to worry about. However, it's sometimes hard to figure out if a 68 // disabled feature needs to stay disabled. To get a list of disabled 69 // features, run 'b2' in 'boost/libs/config/checks'. These are the macros 70 // you should pay attention to (in addition to macros that cause test 71 // failures). 72 73 //// 74 //// Front matter 75 //// 76 77 // In a developer build of the Cray compiler (i.e. a compiler built by a 78 // Cray employee), the release patch level is reported as "x". This gives 79 // versions that look like e.g. "8.6.x". 80 // 81 // To accomplish this, the the Cray compiler preprocessor inserts: 82 // 83 // #define _RELEASE_PATCHLEVEL x 84 // 85 // If we are using a developer build of the compiler, we want to use the 86 // configuration macros for the most recent patch level of the release. To 87 // accomplish this, we'll pretend that _RELEASE_PATCHLEVEL is 99. 88 // 89 // However, it's difficult to detect if _RELEASE_PATCHLEVEL is x. We must 90 // consider that the x will be expanded if x is defined as a macro 91 // elsewhere. For example, imagine if someone put "-D x=3" on the command 92 // line, and _RELEASE_PATCHLEVEL is x. Then _RELEASE_PATCHLEVEL would 93 // expand to 3, and we could not distinguish it from an actual 94 // _RELEASE_PATCHLEVEL of 3. This problem only affects developer builds; in 95 // production builds, _RELEASE_PATCHLEVEL is always an integer. 96 // 97 // IMPORTANT: In developer builds, if x is defined as a macro, you will get 98 // an incorrect configuration. The behavior in this case is undefined. 99 // 100 // Even if x is not defined, we have to use some trickery to detect if 101 // _RELEASE_PATCHLEVEL is x. First we define BOOST_CRAY_x to some arbitrary 102 // magic value, 9867657. Then we use BOOST_CRAY_APPEND to append the 103 // expanded value of _RELEASE_PATCHLEVEL to the string "BOOST_CRAY_". 104 // 105 // - If _RELEASE_PATCHLEVEL is undefined, we get "BOOST_CRAY_". 106 // - If _RELEASE_PATCHLEVEL is 5, we get "BOOST_CRAY_5". 107 // - If _RELEASE_PATCHLEVEL is x (and x is not defined) we get 108 // "BOOST_CRAY_x": 109 // 110 // Then we check if BOOST_CRAY_x is equal to the output of 111 // BOOST_CRAY_APPEND. In other words, the output of BOOST_CRAY_APPEND is 112 // treated as a macro name, and expanded again. If we can safely assume 113 // that BOOST_CRAY_ is not a macro defined as our magic number, and 114 // BOOST_CRAY_5 is not a macro defined as our magic number, then the only 115 // way the equality test can pass is if _RELEASE_PATCHLEVEL expands to x. 116 // 117 // So, that is how we detect if we are using a developer build of the Cray 118 // compiler. 119 120 #define BOOST_CRAY_x 9867657 // Arbitrary number 121 #define BOOST_CRAY_APPEND(MACRO) BOOST_CRAY_APPEND_INTERNAL(MACRO) 122 #define BOOST_CRAY_APPEND_INTERNAL(MACRO) BOOST_CRAY_##MACRO 123 124 #if BOOST_CRAY_x == BOOST_CRAY_APPEND(_RELEASE_PATCHLEVEL) 125 126 // This is a developer build. 127 // 128 // - _RELEASE_PATCHLEVEL is defined as x, and x is not defined as a macro. 129 130 // Pretend _RELEASE_PATCHLEVEL is 99, so we get the configuration for the 131 // most recent patch level in this release. 132 133 #define BOOST_CRAY_VERSION (_RELEASE_MAJOR * 10000 + _RELEASE_MINOR * 100 + 99) 134 135 #else 136 137 // This is a production build. 138 // 139 // _RELEASE_PATCHLEVEL is not defined as x, or x is defined as a macro. 140 141 #define BOOST_CRAY_VERSION (_RELEASE_MAJOR * 10000 + _RELEASE_MINOR * 100 + _RELEASE_PATCHLEVEL) 142 143 #endif // BOOST_CRAY_x == BOOST_CRAY_APPEND(_RELEASE_PATCHLEVEL) 144 145 #undef BOOST_CRAY_APPEND_INTERNAL 146 #undef BOOST_CRAY_APPEND 147 #undef BOOST_CRAY_x 148 149 150 #ifdef __GNUC__ 151 # define BOOST_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) 152 #endif 153 154 #ifndef BOOST_COMPILER 155 # define BOOST_COMPILER "Cray C++ version " BOOST_STRINGIZE(_RELEASE_MAJOR) "." BOOST_STRINGIZE(_RELEASE_MINOR) "." BOOST_STRINGIZE(_RELEASE_PATCHLEVEL) 156 #endif 157 158 // Since the Cray compiler defines '__GNUC__', we have to emulate some 159 // additional GCC macros in order to make everything work. 160 // 161 // FIXME: Perhaps Cray should fix the compiler to define these additional 162 // macros for GCC emulation? 163 164 #if __cplusplus >= 201103L && defined(__GNUC__) && !defined(__GXX_EXPERIMENTAL_CXX0X__) 165 # define __GXX_EXPERIMENTAL_CXX0X__ 1 166 #endif 167 168 //// 169 //// Parameter validation 170 //// 171 172 // FIXME: Do we really need to support compilers before 8.5? Do they pass 173 // the Boost.Config tests? 174 175 #if BOOST_CRAY_VERSION < 80000 176 # error "Boost is not configured for Cray compilers prior to version 8, please try the configure script." 177 #endif 178 179 // We only support recent EDG based compilers. 180 181 #ifndef __EDG__ 182 # error "Unsupported Cray compiler, please try running the configure script." 183 #endif 184 185 //// 186 //// Baseline values 187 //// 188 189 #include <boost/config/compiler/common_edg.hpp> 190 191 #define BOOST_HAS_NRVO 192 #define BOOST_NO_COMPLETE_VALUE_INITIALIZATION 193 #define BOOST_NO_CXX11_AUTO_DECLARATIONS 194 #define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS 195 #define BOOST_NO_CXX11_CHAR16_T 196 #define BOOST_NO_CXX11_CHAR32_T 197 #define BOOST_NO_CXX11_CONSTEXPR 198 #define BOOST_NO_CXX11_DECLTYPE 199 #define BOOST_NO_CXX11_DECLTYPE_N3276 200 #define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS 201 #define BOOST_NO_CXX11_DELETED_FUNCTIONS 202 #define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS 203 #define BOOST_NO_CXX11_FINAL 204 #define BOOST_NO_CXX11_OVERRIDE 205 #define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS 206 #define BOOST_NO_CXX11_LAMBDAS 207 #define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS 208 #define BOOST_NO_CXX11_NOEXCEPT 209 #define BOOST_NO_CXX11_NULLPTR 210 #define BOOST_NO_CXX11_RANGE_BASED_FOR 211 #define BOOST_NO_CXX11_RAW_LITERALS 212 #define BOOST_NO_CXX11_REF_QUALIFIERS 213 #define BOOST_NO_CXX11_RVALUE_REFERENCES 214 #define BOOST_NO_CXX11_SCOPED_ENUMS 215 #define BOOST_NO_CXX11_SFINAE_EXPR 216 #define BOOST_NO_CXX11_STATIC_ASSERT 217 #define BOOST_NO_CXX11_TEMPLATE_ALIASES 218 #define BOOST_NO_CXX11_THREAD_LOCAL 219 #define BOOST_NO_CXX11_UNICODE_LITERALS 220 #define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX 221 #define BOOST_NO_CXX11_USER_DEFINED_LITERALS 222 #define BOOST_NO_CXX11_VARIADIC_MACROS 223 #define BOOST_NO_CXX11_VARIADIC_TEMPLATES 224 #define BOOST_NO_CXX11_UNRESTRICTED_UNION 225 #define BOOST_NO_SFINAE_EXPR 226 #define BOOST_NO_TWO_PHASE_NAME_LOOKUP 227 228 //#define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG 229 #define BOOST_MATH_DISABLE_STD_FPCLASSIFY 230 //#define BOOST_HAS_FPCLASSIFY 231 232 #define BOOST_SP_USE_PTHREADS 233 #define BOOST_AC_USE_PTHREADS 234 235 // 236 // Everything that follows is working around what are thought to be 237 // compiler shortcomings. Revist all of these regularly. 238 // 239 240 //#define BOOST_USE_ENUM_STATIC_ASSERT 241 //#define BOOST_BUGGY_INTEGRAL_CONSTANT_EXPRESSIONS //(this may be implied by the previous #define 242 243 // These constants should be provided by the compiler. 244 245 #ifndef __ATOMIC_RELAXED 246 #define __ATOMIC_RELAXED 0 247 #define __ATOMIC_CONSUME 1 248 #define __ATOMIC_ACQUIRE 2 249 #define __ATOMIC_RELEASE 3 250 #define __ATOMIC_ACQ_REL 4 251 #define __ATOMIC_SEQ_CST 5 252 #endif 253 254 //// 255 //// Version changes 256 //// 257 258 // 259 // 8.5.0 260 // 261 262 #if BOOST_CRAY_VERSION >= 80500 263 264 #if __cplusplus >= 201103L 265 266 #undef BOOST_HAS_NRVO 267 #undef BOOST_NO_COMPLETE_VALUE_INITIALIZATION 268 #undef BOOST_NO_CXX11_AUTO_DECLARATIONS 269 #undef BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS 270 #undef BOOST_NO_CXX11_CHAR16_T 271 #undef BOOST_NO_CXX11_CHAR32_T 272 #undef BOOST_NO_CXX11_CONSTEXPR 273 #undef BOOST_NO_CXX11_DECLTYPE 274 #undef BOOST_NO_CXX11_DECLTYPE_N3276 275 #undef BOOST_NO_CXX11_DEFAULTED_FUNCTIONS 276 #undef BOOST_NO_CXX11_DELETED_FUNCTIONS 277 #undef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS 278 #undef BOOST_NO_CXX11_FINAL 279 #undef BOOST_NO_CXX11_OVERRIDE 280 #undef BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS 281 #undef BOOST_NO_CXX11_LAMBDAS 282 #undef BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS 283 #undef BOOST_NO_CXX11_NOEXCEPT 284 #undef BOOST_NO_CXX11_NULLPTR 285 #undef BOOST_NO_CXX11_RANGE_BASED_FOR 286 #undef BOOST_NO_CXX11_RAW_LITERALS 287 #undef BOOST_NO_CXX11_REF_QUALIFIERS 288 #undef BOOST_NO_CXX11_RVALUE_REFERENCES 289 #undef BOOST_NO_CXX11_SCOPED_ENUMS 290 #undef BOOST_NO_CXX11_SFINAE_EXPR 291 #undef BOOST_NO_CXX11_STATIC_ASSERT 292 #undef BOOST_NO_CXX11_TEMPLATE_ALIASES 293 #undef BOOST_NO_CXX11_THREAD_LOCAL 294 #undef BOOST_NO_CXX11_UNICODE_LITERALS 295 #undef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX 296 #undef BOOST_NO_CXX11_USER_DEFINED_LITERALS 297 #undef BOOST_NO_CXX11_VARIADIC_MACROS 298 #undef BOOST_NO_CXX11_VARIADIC_TEMPLATES 299 #undef BOOST_NO_CXX11_UNRESTRICTED_UNION 300 #undef BOOST_NO_SFINAE_EXPR 301 #undef BOOST_NO_TWO_PHASE_NAME_LOOKUP 302 #undef BOOST_MATH_DISABLE_STD_FPCLASSIFY 303 #undef BOOST_SP_USE_PTHREADS 304 #undef BOOST_AC_USE_PTHREADS 305 306 #define BOOST_HAS_VARIADIC_TMPL 307 #define BOOST_HAS_UNISTD_H 308 #define BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG 309 #define BOOST_HAS_TR1_COMPLEX_OVERLOADS 310 #define BOOST_HAS_STDINT_H 311 #define BOOST_HAS_STATIC_ASSERT 312 #define BOOST_HAS_SIGACTION 313 #define BOOST_HAS_SCHED_YIELD 314 #define BOOST_HAS_RVALUE_REFS 315 #define BOOST_HAS_PTHREADS 316 #define BOOST_HAS_PTHREAD_YIELD 317 #define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE 318 #define BOOST_HAS_PARTIAL_STD_ALLOCATOR 319 #define BOOST_HAS_NRVO 320 #define BOOST_HAS_NL_TYPES_H 321 #define BOOST_HAS_NANOSLEEP 322 #define BOOST_NO_CXX11_SMART_PTR 323 #define BOOST_NO_CXX11_HDR_FUNCTIONAL 324 #define BOOST_NO_CXX14_CONSTEXPR 325 #define BOOST_HAS_LONG_LONG 326 #define BOOST_HAS_FLOAT128 327 328 #if __cplusplus < 201402L 329 #define BOOST_NO_CXX11_DECLTYPE_N3276 330 #endif // __cplusplus < 201402L 331 332 #endif // __cplusplus >= 201103L 333 334 #endif // BOOST_CRAY_VERSION >= 80500 335 336 // 337 // 8.6.4 338 // (versions prior to 8.6.5 do not define _RELEASE_PATCHLEVEL) 339 // 340 341 #if BOOST_CRAY_VERSION >= 80600 342 343 #if __cplusplus >= 199711L 344 #define BOOST_HAS_FLOAT128 345 #define BOOST_HAS_PTHREAD_YIELD // This is a platform macro, but it improves test results. 346 #define BOOST_NO_COMPLETE_VALUE_INITIALIZATION // This is correct. Test compiles, but fails to run. 347 #undef BOOST_NO_CXX11_CHAR16_T 348 #undef BOOST_NO_CXX11_CHAR32_T 349 #undef BOOST_NO_CXX11_INLINE_NAMESPACES 350 #undef BOOST_NO_CXX11_FINAL 351 #undef BOOST_NO_CXX11_OVERRIDE 352 #undef BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS 353 #undef BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS 354 #define BOOST_NO_CXX11_SFINAE_EXPR // This is correct, even though '*_fail.cpp' test fails. 355 #undef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX 356 #undef BOOST_NO_CXX11_VARIADIC_MACROS 357 #undef BOOST_NO_CXX11_VARIADIC_TEMPLATES 358 // 'BOOST_NO_DEDUCED_TYPENAME' test is broken. The test files are enabled / 359 // disabled with an '#ifdef BOOST_DEDUCED_TYPENAME'. However, 360 // 'boost/libs/config/include/boost/config/detail/suffix.hpp' ensures that 361 // 'BOOST_DEDUCED_TYPENAME' is always defined (the value it is defined as 362 // depends on 'BOOST_NO_DEDUCED_TYPENAME'). So, modifying 363 // 'BOOST_NO_DEDUCED_TYPENAME' has no effect on which tests are run. 364 // 365 // The 'no_ded_typename_pass.cpp' test should always compile and run 366 // successfully, because 'BOOST_DEDUCED_TYPENAME' must always have an 367 // appropriate value (it's not just something that you turn on or off). 368 // Therefore, if you wish to test changes to 'BOOST_NO_DEDUCED_TYPENAME', 369 // you have to modify 'no_ded_typename_pass.cpp' to unconditionally include 370 // 'boost_no_ded_typename.ipp'. 371 #undef BOOST_NO_DEDUCED_TYPENAME // This is correct. Test is broken. 372 #undef BOOST_NO_SFINAE_EXPR 373 #undef BOOST_NO_TWO_PHASE_NAME_LOOKUP 374 #endif // __cplusplus >= 199711L 375 376 #if __cplusplus >= 201103L 377 #undef BOOST_NO_CXX11_ALIGNAS 378 #undef BOOST_NO_CXX11_ALIGNOF 379 #undef BOOST_NO_CXX11_DECLTYPE_N3276 380 #define BOOST_NO_CXX11_HDR_ATOMIC 381 #undef BOOST_NO_CXX11_HDR_FUNCTIONAL 382 #define BOOST_NO_CXX11_HDR_REGEX // This is correct. Test compiles, but fails to run. 383 #undef BOOST_NO_CXX11_SFINAE_EXPR 384 #undef BOOST_NO_CXX11_SMART_PTR 385 #undef BOOST_NO_CXX11_TRAILING_RESULT_TYPES 386 #endif // __cplusplus >= 201103L 387 388 #if __cplusplus >= 201402L 389 #undef BOOST_NO_CXX14_CONSTEXPR 390 #define BOOST_NO_CXX14_DIGIT_SEPARATORS 391 #endif // __cplusplus == 201402L 392 393 #endif // BOOST_CRAY_VERSION >= 80600 394 395 // 396 // 8.6.5 397 // (no change from 8.6.4) 398 // 399 400 // 401 // 8.7.0 402 // 403 404 #if BOOST_CRAY_VERSION >= 80700 405 406 #if __cplusplus >= 199711L 407 #endif // __cplusplus >= 199711L 408 409 #if __cplusplus >= 201103L 410 #undef BOOST_NO_CXX11_HDR_ATOMIC 411 #undef BOOST_NO_CXX11_HDR_REGEX 412 #endif // __cplusplus >= 201103L 413 414 #if __cplusplus >= 201402L 415 #endif // __cplusplus == 201402L 416 417 #endif // BOOST_CRAY_VERSION >= 80700 418 419 // 420 // Next release 421 // 422 423 #if BOOST_CRAY_VERSION > 80799 424 425 #if __cplusplus >= 199711L 426 #endif // __cplusplus >= 199711L 427 428 #if __cplusplus >= 201103L 429 #endif // __cplusplus >= 201103L 430 431 #if __cplusplus >= 201402L 432 #endif // __cplusplus == 201402L 433 434 #endif // BOOST_CRAY_VERSION > 80799 435 436 //// 437 //// Remove temporary macros 438 //// 439 440 // I've commented out some '#undef' statements to signify that we purposely 441 // want to keep certain macros. 442 443 //#undef __GXX_EXPERIMENTAL_CXX0X__ 444 //#undef BOOST_COMPILER 445 #undef BOOST_GCC_VERSION 446 #undef BOOST_CRAY_VERSION