blob: 7a4934a5cf90083f92c9ee6ec702151d911bc924 [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//
Chandler Carruth57b08b02019-01-19 10:56:40 +00007// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
8// See https://llvm.org/LICENSE.txt for license information.
9// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
Jim Cownie5e8470a2013-09-27 10:38:44 +000010//
11//===----------------------------------------------------------------------===//
12
Jim Cownie5e8470a2013-09-27 10:38:44 +000013#include "kmp.h"
14#include "kmp_io.h"
15#include "kmp_version.h"
16
17// Replace with snapshot date YYYYMMDD for promotion build.
Jonathan Peyton30419822017-05-12 18:01:32 +000018#define KMP_VERSION_BUILD 20140926
Jim Cownie5e8470a2013-09-27 10:38:44 +000019
20// Helper macros to convert value of macro to string literal.
Jonathan Peyton30419822017-05-12 18:01:32 +000021#define _stringer(x) #x
22#define stringer(x) _stringer(x)
Jim Cownie5e8470a2013-09-27 10:38:44 +000023
24// Detect compiler.
Jim Cownie181b4bb2013-12-23 17:28:57 +000025#if KMP_COMPILER_ICC
Jonathan Peyton30419822017-05-12 18:01:32 +000026#if __INTEL_COMPILER == 1010
Jonathan Peyton8c432f22018-01-04 22:56:47 +000027#define KMP_COMPILER "Intel(R) C++ Compiler 10.1"
Jonathan Peyton30419822017-05-12 18:01:32 +000028#elif __INTEL_COMPILER == 1100
Jonathan Peyton8c432f22018-01-04 22:56:47 +000029#define KMP_COMPILER "Intel(R) C++ Compiler 11.0"
Jonathan Peyton30419822017-05-12 18:01:32 +000030#elif __INTEL_COMPILER == 1110
Jonathan Peyton8c432f22018-01-04 22:56:47 +000031#define KMP_COMPILER "Intel(R) C++ Compiler 11.1"
Jonathan Peyton30419822017-05-12 18:01:32 +000032#elif __INTEL_COMPILER == 1200
Jonathan Peyton8c432f22018-01-04 22:56:47 +000033#define KMP_COMPILER "Intel(R) C++ Compiler 12.0"
Jonathan Peyton30419822017-05-12 18:01:32 +000034#elif __INTEL_COMPILER == 1210
Jonathan Peyton8c432f22018-01-04 22:56:47 +000035#define KMP_COMPILER "Intel(R) C++ Compiler 12.1"
Jonathan Peyton30419822017-05-12 18:01:32 +000036#elif __INTEL_COMPILER == 1300
Jonathan Peyton8c432f22018-01-04 22:56:47 +000037#define KMP_COMPILER "Intel(R) C++ Compiler 13.0"
Jonathan Peyton30419822017-05-12 18:01:32 +000038#elif __INTEL_COMPILER == 1310
Jonathan Peyton8c432f22018-01-04 22:56:47 +000039#define KMP_COMPILER "Intel(R) C++ Compiler 13.1"
Jonathan Peyton30419822017-05-12 18:01:32 +000040#elif __INTEL_COMPILER == 1400
Jonathan Peyton8c432f22018-01-04 22:56:47 +000041#define KMP_COMPILER "Intel(R) C++ Compiler 14.0"
Jonathan Peyton30419822017-05-12 18:01:32 +000042#elif __INTEL_COMPILER == 1410
Jonathan Peyton8c432f22018-01-04 22:56:47 +000043#define KMP_COMPILER "Intel(R) C++ Compiler 14.1"
Jonathan Peyton30419822017-05-12 18:01:32 +000044#elif __INTEL_COMPILER == 1500
Jonathan Peyton8c432f22018-01-04 22:56:47 +000045#define KMP_COMPILER "Intel(R) C++ Compiler 15.0"
Jonathan Peyton30419822017-05-12 18:01:32 +000046#elif __INTEL_COMPILER == 1600
Jonathan Peyton8c432f22018-01-04 22:56:47 +000047#define KMP_COMPILER "Intel(R) C++ Compiler 16.0"
Jonathan Peyton30419822017-05-12 18:01:32 +000048#elif __INTEL_COMPILER == 1700
Jonathan Peyton8c432f22018-01-04 22:56:47 +000049#define KMP_COMPILER "Intel(R) C++ Compiler 17.0"
Jonathan Peytonebbcb432017-12-06 21:15:28 +000050#elif __INTEL_COMPILER == 1800
Jonathan Peyton8c432f22018-01-04 22:56:47 +000051#define KMP_COMPILER "Intel(R) C++ Compiler 18.0"
Jonathan Peyton7ca09052019-03-25 22:31:00 +000052#elif __INTEL_COMPILER == 1900
53#define KMP_COMPILER "Intel(R) C++ Compiler 19.0"
54#elif __INTEL_COMPILER >= 9900
Jonathan Peyton8c432f22018-01-04 22:56:47 +000055#define KMP_COMPILER "Intel(R) C++ Compiler mainline"
Jonathan Peyton30419822017-05-12 18:01:32 +000056#endif
Jim Cownie181b4bb2013-12-23 17:28:57 +000057#elif KMP_COMPILER_CLANG
Jonathan Peyton30419822017-05-12 18:01:32 +000058#define KMP_COMPILER \
59 "Clang " stringer(__clang_major__) "." stringer(__clang_minor__)
Jim Cownie181b4bb2013-12-23 17:28:57 +000060#elif KMP_COMPILER_GCC
Jonathan Peyton30419822017-05-12 18:01:32 +000061#define KMP_COMPILER "GCC " stringer(__GNUC__) "." stringer(__GNUC_MINOR__)
Jim Cownie3b81ce62014-08-05 09:32:28 +000062#elif KMP_COMPILER_MSVC
Jonathan Peyton30419822017-05-12 18:01:32 +000063#define KMP_COMPILER "MSVC " stringer(_MSC_FULL_VER)
Jim Cownie5e8470a2013-09-27 10:38:44 +000064#endif
65#ifndef KMP_COMPILER
Jonathan Peyton30419822017-05-12 18:01:32 +000066#warning "Unknown compiler"
67#define KMP_COMPILER "unknown compiler"
Jim Cownie5e8470a2013-09-27 10:38:44 +000068#endif
69
70// Detect librray type (perf, stub).
71#ifdef KMP_STUB
Jonathan Peyton30419822017-05-12 18:01:32 +000072#define KMP_LIB_TYPE "stub"
Jim Cownie5e8470a2013-09-27 10:38:44 +000073#else
Jonathan Peyton30419822017-05-12 18:01:32 +000074#define KMP_LIB_TYPE "performance"
Jim Cownie5e8470a2013-09-27 10:38:44 +000075#endif // KMP_LIB_TYPE
76
77// Detect link type (static, dynamic).
Jonathan Peyton8b3842f2018-10-05 17:59:39 +000078#if KMP_DYNAMIC_LIB
Jonathan Peyton30419822017-05-12 18:01:32 +000079#define KMP_LINK_TYPE "dynamic"
Jim Cownie5e8470a2013-09-27 10:38:44 +000080#else
Jonathan Peyton30419822017-05-12 18:01:32 +000081#define KMP_LINK_TYPE "static"
Jim Cownie5e8470a2013-09-27 10:38:44 +000082#endif // KMP_LINK_TYPE
83
84// Finally, define strings.
Jonathan Peyton30419822017-05-12 18:01:32 +000085#define KMP_LIBRARY KMP_LIB_TYPE " library (" KMP_LINK_TYPE ")"
Jim Cownie4cc4bb42014-10-07 16:25:50 +000086#define KMP_COPYRIGHT ""
Jim Cownie5e8470a2013-09-27 10:38:44 +000087
88int const __kmp_version_major = KMP_VERSION_MAJOR;
89int const __kmp_version_minor = KMP_VERSION_MINOR;
90int const __kmp_version_build = KMP_VERSION_BUILD;
91int const __kmp_openmp_version =
Jonathan Peyton30419822017-05-12 18:01:32 +000092#if OMP_50_ENABLED
93 201611;
94#elif OMP_45_ENABLED
95 201511;
96#elif OMP_40_ENABLED
97 201307;
98#else
99 201107;
Jim Cownie5e8470a2013-09-27 10:38:44 +0000100#endif
Jim Cownie5e8470a2013-09-27 10:38:44 +0000101
Jonathan Peyton30419822017-05-12 18:01:32 +0000102/* Do NOT change the format of this string! Intel(R) Thread Profiler checks for
103 a specific format some changes in the recognition routine there need to be
104 made before this is changed. */
105char const __kmp_copyright[] = KMP_VERSION_PREFIX KMP_LIBRARY
106 " ver. " stringer(KMP_VERSION_MAJOR) "." stringer(
107 KMP_VERSION_MINOR) "." stringer(KMP_VERSION_BUILD) " " KMP_COPYRIGHT;
108
109char const __kmp_version_copyright[] = KMP_VERSION_PREFIX KMP_COPYRIGHT;
110char const __kmp_version_lib_ver[] =
111 KMP_VERSION_PREFIX "version: " stringer(KMP_VERSION_MAJOR) "." stringer(
112 KMP_VERSION_MINOR) "." stringer(KMP_VERSION_BUILD);
113char const __kmp_version_lib_type[] =
114 KMP_VERSION_PREFIX "library type: " KMP_LIB_TYPE;
115char const __kmp_version_link_type[] =
116 KMP_VERSION_PREFIX "link type: " KMP_LINK_TYPE;
117char const __kmp_version_build_time[] = KMP_VERSION_PREFIX "build time: "
118 "no_timestamp";
119#if KMP_MIC2
120char const __kmp_version_target_env[] =
121 KMP_VERSION_PREFIX "target environment: MIC2";
122#endif
123char const __kmp_version_build_compiler[] =
124 KMP_VERSION_PREFIX "build compiler: " KMP_COMPILER;
125
Jim Cownie5e8470a2013-09-27 10:38:44 +0000126// Called at serial initialization time.
Jim Cownie5e8470a2013-09-27 10:38:44 +0000127static int __kmp_version_1_printed = FALSE;
128
Jonathan Peyton30419822017-05-12 18:01:32 +0000129void __kmp_print_version_1(void) {
130 if (__kmp_version_1_printed) {
131 return;
Jonathan Peytonbd3a7632017-09-27 20:36:27 +0000132 }
Jonathan Peyton30419822017-05-12 18:01:32 +0000133 __kmp_version_1_printed = TRUE;
Jim Cownie5e8470a2013-09-27 10:38:44 +0000134
Jonathan Peyton30419822017-05-12 18:01:32 +0000135#ifndef KMP_STUB
136 kmp_str_buf_t buffer;
137 __kmp_str_buf_init(&buffer);
138 // Print version strings skipping initial magic.
139 __kmp_str_buf_print(&buffer, "%s\n",
140 &__kmp_version_lib_ver[KMP_VERSION_MAGIC_LEN]);
141 __kmp_str_buf_print(&buffer, "%s\n",
142 &__kmp_version_lib_type[KMP_VERSION_MAGIC_LEN]);
143 __kmp_str_buf_print(&buffer, "%s\n",
144 &__kmp_version_link_type[KMP_VERSION_MAGIC_LEN]);
145 __kmp_str_buf_print(&buffer, "%s\n",
146 &__kmp_version_build_time[KMP_VERSION_MAGIC_LEN]);
147#if KMP_MIC
148 __kmp_str_buf_print(&buffer, "%s\n",
149 &__kmp_version_target_env[KMP_VERSION_MAGIC_LEN]);
150#endif
151 __kmp_str_buf_print(&buffer, "%s\n",
152 &__kmp_version_build_compiler[KMP_VERSION_MAGIC_LEN]);
153#if defined(KMP_GOMP_COMPAT)
154 __kmp_str_buf_print(&buffer, "%s\n",
155 &__kmp_version_alt_comp[KMP_VERSION_MAGIC_LEN]);
156#endif /* defined(KMP_GOMP_COMPAT) */
157 __kmp_str_buf_print(&buffer, "%s\n",
158 &__kmp_version_omp_api[KMP_VERSION_MAGIC_LEN]);
159 __kmp_str_buf_print(&buffer, "%sdynamic error checking: %s\n",
160 KMP_VERSION_PREF_STR,
161 (__kmp_env_consistency_check ? "yes" : "no"));
162#ifdef KMP_DEBUG
163 for (int i = bs_plain_barrier; i < bs_last_barrier; ++i) {
164 __kmp_str_buf_print(
165 &buffer, "%s%s barrier branch bits: gather=%u, release=%u\n",
166 KMP_VERSION_PREF_STR, __kmp_barrier_type_name[i],
167 __kmp_barrier_gather_branch_bits[i],
168 __kmp_barrier_release_branch_bits[i]); // __kmp_str_buf_print
Jonathan Peytonbd3a7632017-09-27 20:36:27 +0000169 }
Jonathan Peyton30419822017-05-12 18:01:32 +0000170 for (int i = bs_plain_barrier; i < bs_last_barrier; ++i) {
171 __kmp_str_buf_print(
172 &buffer, "%s%s barrier pattern: gather=%s, release=%s\n",
173 KMP_VERSION_PREF_STR, __kmp_barrier_type_name[i],
174 __kmp_barrier_pattern_name[__kmp_barrier_gather_pattern[i]],
175 __kmp_barrier_pattern_name
176 [__kmp_barrier_release_pattern[i]]); // __kmp_str_buf_print
Jonathan Peytonbd3a7632017-09-27 20:36:27 +0000177 }
Jonathan Peyton30419822017-05-12 18:01:32 +0000178 __kmp_str_buf_print(&buffer, "%s\n",
179 &__kmp_version_lock[KMP_VERSION_MAGIC_LEN]);
180#endif
181 __kmp_str_buf_print(
182 &buffer, "%sthread affinity support: %s\n", KMP_VERSION_PREF_STR,
183#if KMP_AFFINITY_SUPPORTED
184 (KMP_AFFINITY_CAPABLE()
185 ? (__kmp_affinity_type == affinity_none ? "not used" : "yes")
186 : "no")
187#else
188 "no"
189#endif
190 );
191 __kmp_printf("%s", buffer.str);
192 __kmp_str_buf_free(&buffer);
193 K_DIAG(1, ("KMP_VERSION is true\n"));
194#endif // KMP_STUB
Jim Cownie5e8470a2013-09-27 10:38:44 +0000195} // __kmp_print_version_1
196
Jim Cownie5e8470a2013-09-27 10:38:44 +0000197// Called at parallel initialization time.
Jim Cownie5e8470a2013-09-27 10:38:44 +0000198static int __kmp_version_2_printed = FALSE;
199
Jonathan Peyton30419822017-05-12 18:01:32 +0000200void __kmp_print_version_2(void) {
201 if (__kmp_version_2_printed) {
202 return;
Jonathan Peytonbd3a7632017-09-27 20:36:27 +0000203 }
Jonathan Peyton30419822017-05-12 18:01:32 +0000204 __kmp_version_2_printed = TRUE;
Jim Cownie5e8470a2013-09-27 10:38:44 +0000205} // __kmp_print_version_2
206
207// end of file //