blob: 57720e5b9f96e99e913e5d0d47ad184f150ee9b4 [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
5
6//===----------------------------------------------------------------------===//
7//
8// The LLVM Compiler Infrastructure
9//
10// This file is dual licensed under the MIT and the University of Illinois Open
11// Source Licenses. See LICENSE.txt for details.
12//
13//===----------------------------------------------------------------------===//
14
15
16#include "kmp.h"
17#include "kmp_io.h"
18#include "kmp_version.h"
19
20// Replace with snapshot date YYYYMMDD for promotion build.
Jonathan Peyton30419822017-05-12 18:01:32 +000021#define KMP_VERSION_BUILD 20140926
Jim Cownie5e8470a2013-09-27 10:38:44 +000022
23// Helper macros to convert value of macro to string literal.
Jonathan Peyton30419822017-05-12 18:01:32 +000024#define _stringer(x) #x
25#define stringer(x) _stringer(x)
Jim Cownie5e8470a2013-09-27 10:38:44 +000026
27// Detect compiler.
Jim Cownie181b4bb2013-12-23 17:28:57 +000028#if KMP_COMPILER_ICC
Jonathan Peyton30419822017-05-12 18:01:32 +000029#if __INTEL_COMPILER == 1010
30#define KMP_COMPILER "Intel C++ Compiler 10.1"
31#elif __INTEL_COMPILER == 1100
32#define KMP_COMPILER "Intel C++ Compiler 11.0"
33#elif __INTEL_COMPILER == 1110
34#define KMP_COMPILER "Intel C++ Compiler 11.1"
35#elif __INTEL_COMPILER == 1200
36#define KMP_COMPILER "Intel C++ Compiler 12.0"
37#elif __INTEL_COMPILER == 1210
38#define KMP_COMPILER "Intel C++ Compiler 12.1"
39#elif __INTEL_COMPILER == 1300
40#define KMP_COMPILER "Intel C++ Compiler 13.0"
41#elif __INTEL_COMPILER == 1310
42#define KMP_COMPILER "Intel C++ Compiler 13.1"
43#elif __INTEL_COMPILER == 1400
44#define KMP_COMPILER "Intel C++ Compiler 14.0"
45#elif __INTEL_COMPILER == 1410
46#define KMP_COMPILER "Intel C++ Compiler 14.1"
47#elif __INTEL_COMPILER == 1500
48#define KMP_COMPILER "Intel C++ Compiler 15.0"
49#elif __INTEL_COMPILER == 1600
50#define KMP_COMPILER "Intel C++ Compiler 16.0"
51#elif __INTEL_COMPILER == 1700
52#define KMP_COMPILER "Intel C++ Compiler 17.0"
53#elif __INTEL_COMPILER == 9998
54#define KMP_COMPILER "Intel C++ Compiler mainline"
55#elif __INTEL_COMPILER == 9999
56#define KMP_COMPILER "Intel C++ Compiler mainline"
57#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;
133 }; // if
134 __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
170 }; // for i
171 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
178 }; // for i
179 __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;
204 }; // if
205 __kmp_version_2_printed = TRUE;
Jim Cownie5e8470a2013-09-27 10:38:44 +0000206} // __kmp_print_version_2
207
208// end of file //