blob: 4e60237a4ba5ea72bd9a3712ffeb3d74f8a71547 [file] [log] [blame]
Jim Cownie5e8470a2013-09-27 10:38:44 +00001/*
Jonathan Peytonde4749b2016-12-14 23:01:24 +00002 * kmp_version.cpp
Jim Cownie5e8470a2013-09-27 10:38:44 +00003 */
4
Jim Cownie5e8470a2013-09-27 10:38:44 +00005//===----------------------------------------------------------------------===//
6//
7// The LLVM Compiler Infrastructure
8//
9// This file is dual licensed under the MIT and the University of Illinois Open
10// Source Licenses. See LICENSE.txt for details.
11//
12//===----------------------------------------------------------------------===//
13
Jim Cownie5e8470a2013-09-27 10:38:44 +000014#include "kmp.h"
15#include "kmp_io.h"
16#include "kmp_version.h"
17
18// Replace with snapshot date YYYYMMDD for promotion build.
Jonathan Peyton30419822017-05-12 18:01:32 +000019#define KMP_VERSION_BUILD 20140926
Jim Cownie5e8470a2013-09-27 10:38:44 +000020
21// Helper macros to convert value of macro to string literal.
Jonathan Peyton30419822017-05-12 18:01:32 +000022#define _stringer(x) #x
23#define stringer(x) _stringer(x)
Jim Cownie5e8470a2013-09-27 10:38:44 +000024
25// Detect compiler.
Jim Cownie181b4bb2013-12-23 17:28:57 +000026#if KMP_COMPILER_ICC
Jonathan Peyton30419822017-05-12 18:01:32 +000027#if __INTEL_COMPILER == 1010
Jonathan Peyton8c432f22018-01-04 22:56:47 +000028#define KMP_COMPILER "Intel(R) C++ Compiler 10.1"
Jonathan Peyton30419822017-05-12 18:01:32 +000029#elif __INTEL_COMPILER == 1100
Jonathan Peyton8c432f22018-01-04 22:56:47 +000030#define KMP_COMPILER "Intel(R) C++ Compiler 11.0"
Jonathan Peyton30419822017-05-12 18:01:32 +000031#elif __INTEL_COMPILER == 1110
Jonathan Peyton8c432f22018-01-04 22:56:47 +000032#define KMP_COMPILER "Intel(R) C++ Compiler 11.1"
Jonathan Peyton30419822017-05-12 18:01:32 +000033#elif __INTEL_COMPILER == 1200
Jonathan Peyton8c432f22018-01-04 22:56:47 +000034#define KMP_COMPILER "Intel(R) C++ Compiler 12.0"
Jonathan Peyton30419822017-05-12 18:01:32 +000035#elif __INTEL_COMPILER == 1210
Jonathan Peyton8c432f22018-01-04 22:56:47 +000036#define KMP_COMPILER "Intel(R) C++ Compiler 12.1"
Jonathan Peyton30419822017-05-12 18:01:32 +000037#elif __INTEL_COMPILER == 1300
Jonathan Peyton8c432f22018-01-04 22:56:47 +000038#define KMP_COMPILER "Intel(R) C++ Compiler 13.0"
Jonathan Peyton30419822017-05-12 18:01:32 +000039#elif __INTEL_COMPILER == 1310
Jonathan Peyton8c432f22018-01-04 22:56:47 +000040#define KMP_COMPILER "Intel(R) C++ Compiler 13.1"
Jonathan Peyton30419822017-05-12 18:01:32 +000041#elif __INTEL_COMPILER == 1400
Jonathan Peyton8c432f22018-01-04 22:56:47 +000042#define KMP_COMPILER "Intel(R) C++ Compiler 14.0"
Jonathan Peyton30419822017-05-12 18:01:32 +000043#elif __INTEL_COMPILER == 1410
Jonathan Peyton8c432f22018-01-04 22:56:47 +000044#define KMP_COMPILER "Intel(R) C++ Compiler 14.1"
Jonathan Peyton30419822017-05-12 18:01:32 +000045#elif __INTEL_COMPILER == 1500
Jonathan Peyton8c432f22018-01-04 22:56:47 +000046#define KMP_COMPILER "Intel(R) C++ Compiler 15.0"
Jonathan Peyton30419822017-05-12 18:01:32 +000047#elif __INTEL_COMPILER == 1600
Jonathan Peyton8c432f22018-01-04 22:56:47 +000048#define KMP_COMPILER "Intel(R) C++ Compiler 16.0"
Jonathan Peyton30419822017-05-12 18:01:32 +000049#elif __INTEL_COMPILER == 1700
Jonathan Peyton8c432f22018-01-04 22:56:47 +000050#define KMP_COMPILER "Intel(R) C++ Compiler 17.0"
Jonathan Peytonebbcb432017-12-06 21:15:28 +000051#elif __INTEL_COMPILER == 1800
Jonathan Peyton8c432f22018-01-04 22:56:47 +000052#define KMP_COMPILER "Intel(R) C++ Compiler 18.0"
Jonathan Peyton30419822017-05-12 18:01:32 +000053#elif __INTEL_COMPILER == 9998
Jonathan Peyton8c432f22018-01-04 22:56:47 +000054#define KMP_COMPILER "Intel(R) C++ Compiler mainline"
Jonathan Peyton30419822017-05-12 18:01:32 +000055#elif __INTEL_COMPILER == 9999
Jonathan Peyton8c432f22018-01-04 22:56:47 +000056#define KMP_COMPILER "Intel(R) C++ Compiler mainline"
Jonathan Peyton30419822017-05-12 18:01:32 +000057#endif
Jim Cownie181b4bb2013-12-23 17:28:57 +000058#elif KMP_COMPILER_CLANG
Jonathan Peyton30419822017-05-12 18:01:32 +000059#define KMP_COMPILER \
60 "Clang " stringer(__clang_major__) "." stringer(__clang_minor__)
Jim Cownie181b4bb2013-12-23 17:28:57 +000061#elif KMP_COMPILER_GCC
Jonathan Peyton30419822017-05-12 18:01:32 +000062#define KMP_COMPILER "GCC " stringer(__GNUC__) "." stringer(__GNUC_MINOR__)
Jim Cownie3b81ce62014-08-05 09:32:28 +000063#elif KMP_COMPILER_MSVC
Jonathan Peyton30419822017-05-12 18:01:32 +000064#define KMP_COMPILER "MSVC " stringer(_MSC_FULL_VER)
Jim Cownie5e8470a2013-09-27 10:38:44 +000065#endif
66#ifndef KMP_COMPILER
Jonathan Peyton30419822017-05-12 18:01:32 +000067#warning "Unknown compiler"
68#define KMP_COMPILER "unknown compiler"
Jim Cownie5e8470a2013-09-27 10:38:44 +000069#endif
70
71// Detect librray type (perf, stub).
72#ifdef KMP_STUB
Jonathan Peyton30419822017-05-12 18:01:32 +000073#define KMP_LIB_TYPE "stub"
Jim Cownie5e8470a2013-09-27 10:38:44 +000074#else
Jonathan Peyton30419822017-05-12 18:01:32 +000075#define KMP_LIB_TYPE "performance"
Jim Cownie5e8470a2013-09-27 10:38:44 +000076#endif // KMP_LIB_TYPE
77
78// Detect link type (static, dynamic).
Jonathan Peyton99016992015-05-26 17:32:53 +000079#ifdef KMP_DYNAMIC_LIB
Jonathan Peyton30419822017-05-12 18:01:32 +000080#define KMP_LINK_TYPE "dynamic"
Jim Cownie5e8470a2013-09-27 10:38:44 +000081#else
Jonathan Peyton30419822017-05-12 18:01:32 +000082#define KMP_LINK_TYPE "static"
Jim Cownie5e8470a2013-09-27 10:38:44 +000083#endif // KMP_LINK_TYPE
84
85// Finally, define strings.
Jonathan Peyton30419822017-05-12 18:01:32 +000086#define KMP_LIBRARY KMP_LIB_TYPE " library (" KMP_LINK_TYPE ")"
Jim Cownie4cc4bb42014-10-07 16:25:50 +000087#define KMP_COPYRIGHT ""
Jim Cownie5e8470a2013-09-27 10:38:44 +000088
89int const __kmp_version_major = KMP_VERSION_MAJOR;
90int const __kmp_version_minor = KMP_VERSION_MINOR;
91int const __kmp_version_build = KMP_VERSION_BUILD;
92int const __kmp_openmp_version =
Jonathan Peyton30419822017-05-12 18:01:32 +000093#if OMP_50_ENABLED
94 201611;
95#elif OMP_45_ENABLED
96 201511;
97#elif OMP_40_ENABLED
98 201307;
99#else
100 201107;
Jim Cownie5e8470a2013-09-27 10:38:44 +0000101#endif
Jim Cownie5e8470a2013-09-27 10:38:44 +0000102
Jonathan Peyton30419822017-05-12 18:01:32 +0000103/* Do NOT change the format of this string! Intel(R) Thread Profiler checks for
104 a specific format some changes in the recognition routine there need to be
105 made before this is changed. */
106char const __kmp_copyright[] = KMP_VERSION_PREFIX KMP_LIBRARY
107 " ver. " stringer(KMP_VERSION_MAJOR) "." stringer(
108 KMP_VERSION_MINOR) "." stringer(KMP_VERSION_BUILD) " " KMP_COPYRIGHT;
109
110char const __kmp_version_copyright[] = KMP_VERSION_PREFIX KMP_COPYRIGHT;
111char const __kmp_version_lib_ver[] =
112 KMP_VERSION_PREFIX "version: " stringer(KMP_VERSION_MAJOR) "." stringer(
113 KMP_VERSION_MINOR) "." stringer(KMP_VERSION_BUILD);
114char const __kmp_version_lib_type[] =
115 KMP_VERSION_PREFIX "library type: " KMP_LIB_TYPE;
116char const __kmp_version_link_type[] =
117 KMP_VERSION_PREFIX "link type: " KMP_LINK_TYPE;
118char const __kmp_version_build_time[] = KMP_VERSION_PREFIX "build time: "
119 "no_timestamp";
120#if KMP_MIC2
121char const __kmp_version_target_env[] =
122 KMP_VERSION_PREFIX "target environment: MIC2";
123#endif
124char const __kmp_version_build_compiler[] =
125 KMP_VERSION_PREFIX "build compiler: " KMP_COMPILER;
126
Jim Cownie5e8470a2013-09-27 10:38:44 +0000127// Called at serial initialization time.
Jim Cownie5e8470a2013-09-27 10:38:44 +0000128static int __kmp_version_1_printed = FALSE;
129
Jonathan Peyton30419822017-05-12 18:01:32 +0000130void __kmp_print_version_1(void) {
131 if (__kmp_version_1_printed) {
132 return;
Jonathan Peytonbd3a7632017-09-27 20:36:27 +0000133 }
Jonathan Peyton30419822017-05-12 18:01:32 +0000134 __kmp_version_1_printed = TRUE;
Jim Cownie5e8470a2013-09-27 10:38:44 +0000135
Jonathan Peyton30419822017-05-12 18:01:32 +0000136#ifndef KMP_STUB
137 kmp_str_buf_t buffer;
138 __kmp_str_buf_init(&buffer);
139 // Print version strings skipping initial magic.
140 __kmp_str_buf_print(&buffer, "%s\n",
141 &__kmp_version_lib_ver[KMP_VERSION_MAGIC_LEN]);
142 __kmp_str_buf_print(&buffer, "%s\n",
143 &__kmp_version_lib_type[KMP_VERSION_MAGIC_LEN]);
144 __kmp_str_buf_print(&buffer, "%s\n",
145 &__kmp_version_link_type[KMP_VERSION_MAGIC_LEN]);
146 __kmp_str_buf_print(&buffer, "%s\n",
147 &__kmp_version_build_time[KMP_VERSION_MAGIC_LEN]);
148#if KMP_MIC
149 __kmp_str_buf_print(&buffer, "%s\n",
150 &__kmp_version_target_env[KMP_VERSION_MAGIC_LEN]);
151#endif
152 __kmp_str_buf_print(&buffer, "%s\n",
153 &__kmp_version_build_compiler[KMP_VERSION_MAGIC_LEN]);
154#if defined(KMP_GOMP_COMPAT)
155 __kmp_str_buf_print(&buffer, "%s\n",
156 &__kmp_version_alt_comp[KMP_VERSION_MAGIC_LEN]);
157#endif /* defined(KMP_GOMP_COMPAT) */
158 __kmp_str_buf_print(&buffer, "%s\n",
159 &__kmp_version_omp_api[KMP_VERSION_MAGIC_LEN]);
160 __kmp_str_buf_print(&buffer, "%sdynamic error checking: %s\n",
161 KMP_VERSION_PREF_STR,
162 (__kmp_env_consistency_check ? "yes" : "no"));
163#ifdef KMP_DEBUG
164 for (int i = bs_plain_barrier; i < bs_last_barrier; ++i) {
165 __kmp_str_buf_print(
166 &buffer, "%s%s barrier branch bits: gather=%u, release=%u\n",
167 KMP_VERSION_PREF_STR, __kmp_barrier_type_name[i],
168 __kmp_barrier_gather_branch_bits[i],
169 __kmp_barrier_release_branch_bits[i]); // __kmp_str_buf_print
Jonathan Peytonbd3a7632017-09-27 20:36:27 +0000170 }
Jonathan Peyton30419822017-05-12 18:01:32 +0000171 for (int i = bs_plain_barrier; i < bs_last_barrier; ++i) {
172 __kmp_str_buf_print(
173 &buffer, "%s%s barrier pattern: gather=%s, release=%s\n",
174 KMP_VERSION_PREF_STR, __kmp_barrier_type_name[i],
175 __kmp_barrier_pattern_name[__kmp_barrier_gather_pattern[i]],
176 __kmp_barrier_pattern_name
177 [__kmp_barrier_release_pattern[i]]); // __kmp_str_buf_print
Jonathan Peytonbd3a7632017-09-27 20:36:27 +0000178 }
Jonathan Peyton30419822017-05-12 18:01:32 +0000179 __kmp_str_buf_print(&buffer, "%s\n",
180 &__kmp_version_lock[KMP_VERSION_MAGIC_LEN]);
181#endif
182 __kmp_str_buf_print(
183 &buffer, "%sthread affinity support: %s\n", KMP_VERSION_PREF_STR,
184#if KMP_AFFINITY_SUPPORTED
185 (KMP_AFFINITY_CAPABLE()
186 ? (__kmp_affinity_type == affinity_none ? "not used" : "yes")
187 : "no")
188#else
189 "no"
190#endif
191 );
192 __kmp_printf("%s", buffer.str);
193 __kmp_str_buf_free(&buffer);
194 K_DIAG(1, ("KMP_VERSION is true\n"));
195#endif // KMP_STUB
Jim Cownie5e8470a2013-09-27 10:38:44 +0000196} // __kmp_print_version_1
197
Jim Cownie5e8470a2013-09-27 10:38:44 +0000198// Called at parallel initialization time.
Jim Cownie5e8470a2013-09-27 10:38:44 +0000199static int __kmp_version_2_printed = FALSE;
200
Jonathan Peyton30419822017-05-12 18:01:32 +0000201void __kmp_print_version_2(void) {
202 if (__kmp_version_2_printed) {
203 return;
Jonathan Peytonbd3a7632017-09-27 20:36:27 +0000204 }
Jonathan Peyton30419822017-05-12 18:01:32 +0000205 __kmp_version_2_printed = TRUE;
Jim Cownie5e8470a2013-09-27 10:38:44 +0000206} // __kmp_print_version_2
207
208// end of file //