After three iterations of community review, we believe that this new
CMAKE buld system should meet everyone's requirements.
Enhanced CMake Build System Commit
* Supports Linux, Mac, Windows, and IntelĀ® Xeon Phi builds
* Supports building with gcc, icc, clang, and Visual Studio compilers
* Supports bulding "fat" libraries on OS/X with clang
* Details and documentation on how to use build system
are in Build_With_CMake.txt
* To use the old CMake build system (corresponds to
CMakeLists.txt.old), just rename CMakeLists.txt to
CMakeLists.txt.other and rename CMakeLists.txt.old to
CMakeLists.txt
llvm-svn: 214850
diff --git a/openmp/runtime/src/dllexports b/openmp/runtime/src/dllexports
index 779f1d4..2c58f4c 100644
--- a/openmp/runtime/src/dllexports
+++ b/openmp/runtime/src/dllexports
@@ -471,7 +471,9 @@
# ATOMIC entries
+ %ifdef HAVE_QUAD
__kmpc_atomic_cmplx16_div 2000
+ %endif
__kmpc_atomic_fixed1_add 2001
__kmpc_atomic_fixed1_andb 2002
@@ -577,6 +579,7 @@
__kmpc_atomic_cmplx10_sub 2094
__kmpc_atomic_cmplx10_mul 2095
__kmpc_atomic_cmplx10_div 2096
+ %ifdef HAVE_QUAD
__kmpc_atomic_cmplx16_add 2097
__kmpc_atomic_cmplx16_sub 2098
__kmpc_atomic_cmplx16_mul 2099
@@ -627,6 +630,7 @@
__kmpc_atomic_float10_sub_fp 2136
__kmpc_atomic_float10_mul_fp 2137
__kmpc_atomic_float10_div_fp 2138
+ %endif
__kmpc_atomic_fixed1_mul_float8 2169
__kmpc_atomic_fixed1_div_float8 2170
@@ -661,6 +665,7 @@
%ifdef arch_32
+ %ifdef HAVE_QUAD
__kmpc_atomic_float16_add_a16 2255
__kmpc_atomic_float16_sub_a16 2256
__kmpc_atomic_float16_mul_a16 2257
@@ -672,6 +677,7 @@
__kmpc_atomic_cmplx16_sub_a16 2262
__kmpc_atomic_cmplx16_mul_a16 2263
__kmpc_atomic_cmplx16_div_a16 2264
+ %endif
%endif
@@ -686,14 +692,18 @@
__kmpc_atomic_float4_rd 2269
__kmpc_atomic_float8_rd 2270
__kmpc_atomic_float10_rd 2271
+ %ifdef HAVE_QUAD
__kmpc_atomic_float16_rd 2272
+ %endif
__kmpc_atomic_cmplx4_rd 2273
__kmpc_atomic_cmplx8_rd 2274
__kmpc_atomic_cmplx10_rd 2275
+ %ifdef HAVE_QUAD
__kmpc_atomic_cmplx16_rd 2276
- %ifdef arch_32
- __kmpc_atomic_float16_a16_rd 2277
- __kmpc_atomic_cmplx16_a16_rd 2278
+ %ifdef arch_32
+ __kmpc_atomic_float16_a16_rd 2277
+ __kmpc_atomic_cmplx16_a16_rd 2278
+ %endif
%endif
__kmpc_atomic_fixed1_wr 2279
__kmpc_atomic_fixed2_wr 2280
@@ -702,15 +712,19 @@
__kmpc_atomic_float4_wr 2283
__kmpc_atomic_float8_wr 2284
__kmpc_atomic_float10_wr 2285
+ %ifdef HAVE_QUAD
__kmpc_atomic_float16_wr 2286
+ %endif
__kmpc_atomic_cmplx4_wr 2287
__kmpc_atomic_cmplx8_wr 2288
__kmpc_atomic_cmplx10_wr 2289
+ %ifdef HAVE_QUAD
__kmpc_atomic_cmplx16_wr 2290
%ifdef arch_32
__kmpc_atomic_float16_a16_wr 2291
__kmpc_atomic_cmplx16_a16_wr 2292
%endif
+ %endif
__kmpc_atomic_fixed1_add_cpt 2293
__kmpc_atomic_fixed1_andb_cpt 2294
__kmpc_atomic_fixed1_div_cpt 2295
@@ -783,8 +797,10 @@
__kmpc_atomic_float4_min_cpt 2362
__kmpc_atomic_float8_max_cpt 2363
__kmpc_atomic_float8_min_cpt 2364
+ %ifdef HAVE_QUAD
__kmpc_atomic_float16_max_cpt 2365
__kmpc_atomic_float16_min_cpt 2366
+ %endif
__kmpc_atomic_fixed1_neqv_cpt 2367
__kmpc_atomic_fixed2_neqv_cpt 2368
__kmpc_atomic_fixed4_neqv_cpt 2369
@@ -797,10 +813,12 @@
__kmpc_atomic_float10_sub_cpt 2376
__kmpc_atomic_float10_mul_cpt 2377
__kmpc_atomic_float10_div_cpt 2378
+ %ifdef HAVE_QUAD
__kmpc_atomic_float16_add_cpt 2379
__kmpc_atomic_float16_sub_cpt 2380
__kmpc_atomic_float16_mul_cpt 2381
__kmpc_atomic_float16_div_cpt 2382
+ %endif
__kmpc_atomic_cmplx4_add_cpt 2383
__kmpc_atomic_cmplx4_sub_cpt 2384
__kmpc_atomic_cmplx4_mul_cpt 2385
@@ -813,13 +831,16 @@
__kmpc_atomic_cmplx10_sub_cpt 2392
__kmpc_atomic_cmplx10_mul_cpt 2393
__kmpc_atomic_cmplx10_div_cpt 2394
+ %ifdef HAVE_QUAD
__kmpc_atomic_cmplx16_add_cpt 2395
__kmpc_atomic_cmplx16_sub_cpt 2396
__kmpc_atomic_cmplx16_mul_cpt 2397
__kmpc_atomic_cmplx16_div_cpt 2398
+ %endif
#__kmpc_atomic_cmplx4_add_cpt_tmp 2409
%ifdef arch_32
+ %ifdef HAVE_QUAD
__kmpc_atomic_float16_add_a16_cpt 2399
__kmpc_atomic_float16_sub_a16_cpt 2400
__kmpc_atomic_float16_mul_a16_cpt 2401
@@ -831,6 +852,7 @@
__kmpc_atomic_cmplx16_mul_a16_cpt 2407
__kmpc_atomic_cmplx16_div_a16_cpt 2408
%endif
+ %endif
__kmpc_atomic_start 2410
__kmpc_atomic_end 2411
@@ -846,16 +868,20 @@
__kmpc_atomic_float4_swp 2416
__kmpc_atomic_float8_swp 2417
__kmpc_atomic_float10_swp 2418
+ %ifdef HAVE_QUAD
__kmpc_atomic_float16_swp 2419
+ %endif
__kmpc_atomic_cmplx4_swp 2420
__kmpc_atomic_cmplx8_swp 2421
__kmpc_atomic_cmplx10_swp 2422
+ %ifdef HAVE_QUAD
__kmpc_atomic_cmplx16_swp 2423
%ifdef arch_32
__kmpc_atomic_float16_a16_swp 2424
__kmpc_atomic_cmplx16_a16_swp 2425
%endif
+ %endif
__kmpc_atomic_fixed1_sub_cpt_rev 2426
__kmpc_atomic_fixed1_div_cpt_rev 2427
@@ -887,14 +913,17 @@
__kmpc_atomic_float8_div_cpt_rev 2453
__kmpc_atomic_float10_sub_cpt_rev 2454
__kmpc_atomic_float10_div_cpt_rev 2455
+ %ifdef HAVE_QUAD
__kmpc_atomic_float16_sub_cpt_rev 2456
__kmpc_atomic_float16_div_cpt_rev 2457
+ %endif
__kmpc_atomic_cmplx4_sub_cpt_rev 2458
__kmpc_atomic_cmplx4_div_cpt_rev 2459
__kmpc_atomic_cmplx8_sub_cpt_rev 2460
__kmpc_atomic_cmplx8_div_cpt_rev 2461
__kmpc_atomic_cmplx10_sub_cpt_rev 2462
__kmpc_atomic_cmplx10_div_cpt_rev 2463
+ %ifdef HAVE_QUAD
__kmpc_atomic_cmplx16_sub_cpt_rev 2464
__kmpc_atomic_cmplx16_div_cpt_rev 2465
@@ -904,6 +933,7 @@
__kmpc_atomic_cmplx16_sub_a16_cpt_rev 2468
__kmpc_atomic_cmplx16_div_a16_cpt_rev 2469
%endif
+ %endif
%endif # OMP_40
diff --git a/openmp/runtime/src/kmp_csupport.c b/openmp/runtime/src/kmp_csupport.c
index 18b6c35..06f2819 100644
--- a/openmp/runtime/src/kmp_csupport.c
+++ b/openmp/runtime/src/kmp_csupport.c
@@ -828,7 +828,7 @@
if ( ! __kmp_cpuinfo.sse2 ) {
// CPU cannot execute SSE2 instructions.
} else {
- #if KMP_COMPILER_ICC
+ #if KMP_COMPILER_ICC || KMP_COMPILER_MSVC
_mm_mfence();
#else
__sync_synchronize();
diff --git a/openmp/runtime/src/kmp_ftn_entry.h b/openmp/runtime/src/kmp_ftn_entry.h
index 8bb75d4..280d76f 100644
--- a/openmp/runtime/src/kmp_ftn_entry.h
+++ b/openmp/runtime/src/kmp_ftn_entry.h
@@ -263,7 +263,7 @@
#if KMP_OS_WINDOWS && KMP_ARCH_X86_64
if ( __kmp_num_proc_groups <= 1 ) {
- return KMP_CPU_SETSIZE;
+ return (int)KMP_CPU_SETSIZE;
}
#endif /* KMP_OS_WINDOWS && KMP_ARCH_X86_64 */
return __kmp_xproc;
@@ -412,7 +412,7 @@
gtid = __kmp_entry_gtid();
#elif KMP_OS_WINDOWS
if (!__kmp_init_parallel ||
- (gtid = ((kmp_intptr_t)TlsGetValue( __kmp_gtid_threadprivate_key ))) == 0) {
+ (gtid = (int)((kmp_intptr_t)TlsGetValue( __kmp_gtid_threadprivate_key ))) == 0) {
// Either library isn't initialized or thread is not registered
// 0 is the correct TID in this case
return 0;
@@ -463,7 +463,6 @@
#ifdef KMP_STUB
return 1;
#else
- int gtid;
if ( ! TCR_4(__kmp_init_middle) ) {
__kmp_middle_initialize();
}
@@ -1013,7 +1012,7 @@
{
#ifndef KMP_STUB
#ifdef PASS_ARGS_BY_VALUE
- int len = strlen( str );
+ int len = (int)strlen( str );
#endif
__kmp_aux_set_defaults( str, len );
#endif
diff --git a/openmp/runtime/src/kmp_os.h b/openmp/runtime/src/kmp_os.h
index bb5e72f..a710553 100644
--- a/openmp/runtime/src/kmp_os.h
+++ b/openmp/runtime/src/kmp_os.h
@@ -46,6 +46,7 @@
#define KMP_COMPILER_ICC 0
#define KMP_COMPILER_GCC 0
#define KMP_COMPILER_CLANG 0
+#define KMP_COMPILER_MSVC 0
#if defined( __INTEL_COMPILER )
# undef KMP_COMPILER_ICC
@@ -56,6 +57,9 @@
#elif defined( __GNUC__ )
# undef KMP_COMPILER_GCC
# define KMP_COMPILER_GCC 1
+#elif defined( _MSC_VER )
+# undef KMP_COMPILER_MSVC
+# define KMP_COMPILER_MSVC 1
#else
# error Unknown compiler
#endif
@@ -175,6 +179,8 @@
typedef __float128 _Quad;
# undef KMP_HAVE_QUAD
# define KMP_HAVE_QUAD 1
+# elif KMP_COMPILER_MSVC
+ typedef long double _Quad;
# endif
#else
# if __LDBL_MAX_EXP__ >= 16384 && KMP_COMPILER_GCC
diff --git a/openmp/runtime/src/kmp_str.h b/openmp/runtime/src/kmp_str.h
index 634d1f1..7de3a2e 100644
--- a/openmp/runtime/src/kmp_str.h
+++ b/openmp/runtime/src/kmp_str.h
@@ -28,9 +28,8 @@
#endif // __cplusplus
#if KMP_OS_WINDOWS
- #define strdup _strdup
- #define snprintf _snprintf
- #define vsnprintf _vsnprintf
+# define strdup _strdup
+# define snprintf _snprintf
#endif
/* some macros to replace ctype.h functions */
diff --git a/openmp/runtime/src/kmp_version.c b/openmp/runtime/src/kmp_version.c
index f64d052..b836c39 100644
--- a/openmp/runtime/src/kmp_version.c
+++ b/openmp/runtime/src/kmp_version.c
@@ -53,6 +53,8 @@
#define KMP_COMPILER "Clang " stringer( __clang_major__ ) "." stringer( __clang_minor__ )
#elif KMP_COMPILER_GCC
#define KMP_COMPILER "GCC " stringer( __GNUC__ ) "." stringer( __GNUC_MINOR__ )
+#elif KMP_COMPILER_MSVC
+ #define KMP_COMPILER "MSVC " stringer( __MSC_FULL_VER )
#endif
#ifndef KMP_COMPILER
#warning "Unknown compiler"
diff --git a/openmp/runtime/src/makefile.mk b/openmp/runtime/src/makefile.mk
index 9be8799..2fa2e03 100644
--- a/openmp/runtime/src/makefile.mk
+++ b/openmp/runtime/src/makefile.mk
@@ -73,6 +73,8 @@
TARGET_COMPILER := $(call check_variable,TARGET_COMPILER,12 11)
# Library version: 4 -- legacy, 5 -- compat.
VERSION := $(call check_variable,VERSION,5 4)
+# quad precision floating point
+HAVE_QUAD = 1
VPATH += $(src_dir)
VPATH += $(src_dir)i18n/
@@ -171,6 +173,7 @@
ld-flags += -m32 -msse
as-flags += -m32 -msse
endif
+ HAVE_QUAD = 0
endif
ifeq "$(LINK_TYPE)" "dyna"
@@ -596,6 +599,9 @@
gd-flags += -D arch_$(arch)
gd-flags += -D $(LIB_TYPE)
+ifeq "$(HAVE_QUAD)" "1"
+ gd-flags += -D HAVE_QUAD
+endif
ifeq "$(OMP_VERSION)" "40"
gd-flags += -D OMP_40 -D OMP_30
else