forked from oneapi-src/oneDNN
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathplatform.cmake
160 lines (149 loc) · 6.99 KB
/
platform.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#===============================================================================
# Copyright 2016-2018 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#===============================================================================
# Manage platform-specific quirks
#===============================================================================
if(platform_cmake_included)
return()
endif()
set(platform_cmake_included true)
include("cmake/utils.cmake")
add_definitions(-DMKLDNN_DLL -DMKLDNN_DLL_EXPORTS)
# UNIT8_MAX-like macros are a part of the C99 standard and not a part of the
# C++ standard (see C99 standard 7.18.2 and 7.18.4)
add_definitions(-D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS)
set(CMAKE_CCXX_FLAGS)
set(CMAKE_CCXX_NOWARN_FLAGS)
set(DEF_ARCH_OPT_FLAGS)
if(MSVC)
set(USERCONFIG_PLATFORM "x64")
if(${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC)
append(CMAKE_CCXX_FLAGS "/MP")
# int -> bool
append(CMAKE_CCXX_NOWARN_FLAGS "/wd4800")
# unknown pragma
append(CMAKE_CCXX_NOWARN_FLAGS "/wd4068")
# double -> float
append(CMAKE_CCXX_NOWARN_FLAGS "/wd4305")
# UNUSED(func)
append(CMAKE_CCXX_NOWARN_FLAGS "/wd4551")
# int64_t -> int (tent)
append(CMAKE_CCXX_NOWARN_FLAGS "/wd4244")
endif()
if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
append(CMAKE_CCXX_FLAGS "/MP")
set(DEF_ARCH_OPT_FLAGS "-QxHOST")
# disable: loop was not vectorized with "simd"
append(CMAKE_CCXX_NOWARN_FLAGS "-Qdiag-disable:15552")
# disable: unknown pragma
append(CMAKE_CCXX_NOWARN_FLAGS "-Qdiag-disable:3180")
endif()
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
# Clang cannot vectorize some loops with #pragma omp simd and gets
# very upset. Tell it that it's okay and that we love it
# unconditionally.
append(CMAKE_CCXX_FLAGS "-Wno-pass-failed")
endif()
elseif(UNIX OR MINGW)
append(CMAKE_CCXX_FLAGS "-Wall -Wno-unknown-pragmas")
append_if_product(CMAKE_CCXX_FLAGS "-Werror")
append(CMAKE_CCXX_FLAGS "-fvisibility=internal")
append(CMAKE_C_FLAGS "-std=c99")
append(CMAKE_CXX_FLAGS "-std=c++11 -fvisibility-inlines-hidden")
# compiler specific settings
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
# Clang cannot vectorize some loops with #pragma omp simd and gets
# very upset. Tell it that it's okay and that we love it
# unconditionally.
append(CMAKE_CCXX_NOWARN_FLAGS "-Wno-pass-failed")
if(MKLDNN_USE_CLANG_SANITIZER MATCHES "Memory(WithOrigin)?")
if(NOT MKLDNN_THREADING STREQUAL "SEQ")
message(WARNING "Clang OpenMP is not compatible with MSan! "
"Expect a lot of false positives!")
endif()
append(CMAKE_CCXX_SANITIZER_FLAGS "-fsanitize=memory")
if(MKLDNN_USE_CLANG_SANITIZER STREQUAL "MemoryWithOrigin")
append(CMAKE_CCXX_SANITIZER_FLAGS
"-fsanitize-memory-track-origins=2")
append(CMAKE_CCXX_SANITIZER_FLAGS
"-fno-omit-frame-pointer")
endif()
set(MKLDNN_ENABLED_CLANG_SANITIZER "${MKLDNN_USE_CLANG_SANITIZER}")
elseif(MKLDNN_USE_CLANG_SANITIZER STREQUAL "Undefined")
append(CMAKE_CCXX_SANITIZER_FLAGS "-fsanitize=undefined")
append(CMAKE_CCXX_SANITIZER_FLAGS
"-fno-sanitize=function,vptr") # work around linking problems
append(CMAKE_CCXX_SANITIZER_FLAGS "-fno-omit-frame-pointer")
set(MKLDNN_ENABLED_CLANG_SANITIZER "${MKLDNN_USE_CLANG_SANITIZER}")
elseif(MKLDNN_USE_CLANG_SANITIZER STREQUAL "Address")
append(CMAKE_CCXX_SANITIZER_FLAGS "-fsanitize=address")
set(MKLDNN_ENABLED_CLANG_SANITIZER "${MKLDNN_USE_CLANG_SANITIZER}")
elseif(MKLDNN_USE_CLANG_SANITIZER STREQUAL "Thread")
append(CMAKE_CCXX_SANITIZER_FLAGS "-fsanitize=thread")
set(MKLDNN_ENABLED_CLANG_SANITIZER "${MKLDNN_USE_CLANG_SANITIZER}")
elseif(MKLDNN_USE_CLANG_SANITIZER STREQUAL "Leak")
append(CMAKE_CCXX_SANITIZER_FLAGS "-fsanitize=leak")
set(MKLDNN_ENABLED_CLANG_SANITIZER "${MKLDNN_USE_CLANG_SANITIZER}")
elseif(NOT MKLDNN_USE_CLANG_SANITIZER STREQUAL "")
message(FATAL_ERROR
"Unsupported Clang sanitizer '${MKLDNN_USE_CLANG_SANITIZER}'")
endif()
if(MKLDNN_ENABLED_CLANG_SANITIZER)
message(STATUS
"Using Clang ${MKLDNN_ENABLED_CLANG_SANITIZER} "
"sanitizer (experimental!)")
append(CMAKE_CCXX_SANITIZER_FLAGS "-g -fno-omit-frame-pointer")
endif()
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0)
set(DEF_ARCH_OPT_FLAGS "-march=native -mtune=native")
endif()
# suppress warning on assumptions made regarding overflow (#146)
append(CMAKE_CCXX_NOWARN_FLAGS "-Wno-strict-overflow")
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
set(DEF_ARCH_OPT_FLAGS "-xHOST")
# workaround for Intel Compiler 16.0 that produces error caused
# by pragma omp simd collapse(..)
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "17.0")
append(CMAKE_CCXX_NOWARN_FLAGS "-diag-disable:13379")
endif()
append(CMAKE_CCXX_NOWARN_FLAGS "-diag-disable:15552")
# disable `was not vectorized: vectorization seems inefficient` remark
append(CMAKE_CCXX_NOWARN_FLAGS "-diag-disable:15335")
endif()
endif()
if(UNIX OR MINGW)
if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
# Link Intel libraries statically (except for iomp5)
append(CMAKE_SHARED_LINKER_FLAGS "-liomp5 -static-intel")
# Tell linker to not complain about missing static libraries
append(CMAKE_SHARED_LINKER_FLAGS "-diag-disable:10237")
endif()
endif()
if(ARCH_OPT_FLAGS STREQUAL "HostOpts")
set(ARCH_OPT_FLAGS "${DEF_ARCH_OPT_FLAGS}")
endif()
append(CMAKE_C_FLAGS "${CMAKE_CCXX_FLAGS} ${ARCH_OPT_FLAGS}")
append(CMAKE_CXX_FLAGS "${CMAKE_CCXX_FLAGS} ${ARCH_OPT_FLAGS}")
if(APPLE)
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
# FIXME: this is ugly but required when compiler does not add its library
# paths to rpath (like Intel compiler...)
foreach(_ ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES})
set(_rpath "-Wl,-rpath,${_}")
append(CMAKE_SHARED_LINKER_FLAGS "${_rpath}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${_rpath}")
endforeach()
endif()