blob: 4bdbf8f71435db3a4a90ea7023aa17144ce401da [file] [log] [blame]
Jonathan Peyton2e013352015-07-15 16:05:30 +00001#
2#//===----------------------------------------------------------------------===//
3#//
4#// The LLVM Compiler Infrastructure
5#//
6#// This file is dual licensed under the MIT and the University of Illinois Open
7#// Source Licenses. See LICENSE.txt for details.
8#//
9#//===----------------------------------------------------------------------===//
10#
11
12# Setup the flags correctly for cmake (covert to string)
13# Pretty them up (STRIP any beginning and trailing whitespace,
14# remove duplicates, remove empty entries)
15macro(libomp_setup_flags flags)
Jonathan Peyton5b4acbd2015-07-15 16:57:19 +000016 if(NOT "${${flags}}" STREQUAL "") # if flags are empty, don't do anything
17 set(flags_local)
18 list(REMOVE_DUPLICATES ${flags}) # remove duplicates
19 list(REMOVE_ITEM ${flags} "") # remove empty items
20 libomp_list_to_string("${${flags}}" flags_local)
21 string(STRIP "${flags_local}" flags_local)
22 set(${flags} "${flags_local}")
23 endif()
Jonathan Peyton2e013352015-07-15 16:05:30 +000024endmacro()
25
26# Gets flags common to both the C and C++ compiler
27function(libomp_get_c_and_cxxflags_common flags)
Jonathan Peyton5b4acbd2015-07-15 16:57:19 +000028 set(flags_local)
Jonathan Peyton5b4acbd2015-07-15 16:57:19 +000029 libomp_append(flags_local -fno-exceptions LIBOMP_HAVE_FNO_EXCEPTIONS_FLAG)
Jonathan Peyton1cdd87a2016-11-14 21:08:35 +000030 libomp_append(flags_local -fno-rtti LIBOMP_HAVE_FNO_RTTI_FLAG)
Chandler Carruth51451562015-07-18 03:14:02 +000031 libomp_append(flags_local -Wno-sign-compare LIBOMP_HAVE_WNO_SIGN_COMPARE_FLAG)
32 libomp_append(flags_local -Wno-unused-function LIBOMP_HAVE_WNO_UNUSED_FUNCTION_FLAG)
33 libomp_append(flags_local -Wno-unused-local-typedef LIBOMP_HAVE_WNO_UNUSED_LOCAL_TYPEDEF_FLAG)
Jonathan Peyton5b4acbd2015-07-15 16:57:19 +000034 libomp_append(flags_local -Wno-unused-value LIBOMP_HAVE_WNO_UNUSED_VALUE_FLAG)
Chandler Carruth51451562015-07-18 03:14:02 +000035 libomp_append(flags_local -Wno-unused-variable LIBOMP_HAVE_WNO_UNUSED_VARIABLE_FLAG)
Jonathan Peyton5b4acbd2015-07-15 16:57:19 +000036 libomp_append(flags_local -Wno-switch LIBOMP_HAVE_WNO_SWITCH_FLAG)
Chandler Carruth51451562015-07-18 03:14:02 +000037 libomp_append(flags_local -Wno-covered-switch-default LIBOMP_HAVE_WNO_COVERED_SWITCH_DEFAULT_FLAG)
Jonathan Peyton5b4acbd2015-07-15 16:57:19 +000038 libomp_append(flags_local -Wno-deprecated-register LIBOMP_HAVE_WNO_DEPRECATED_REGISTER_FLAG)
Chandler Carruth51451562015-07-18 03:14:02 +000039 libomp_append(flags_local -Wno-gnu-anonymous-struct LIBOMP_HAVE_WNO_GNU_ANONYMOUS_STRUCT_FLAG)
40 libomp_append(flags_local -Wno-unknown-pragmas LIBOMP_HAVE_WNO_UNKNOWN_PRAGMAS_FLAG)
41 libomp_append(flags_local -Wno-missing-field-initializers LIBOMP_HAVE_WNO_MISSING_FIELD_INITIALIZERS_FLAG)
42 libomp_append(flags_local -Wno-missing-braces LIBOMP_HAVE_WNO_MISSING_BRACES_FLAG)
43 libomp_append(flags_local -Wno-comment LIBOMP_HAVE_WNO_COMMENT_FLAG)
44 libomp_append(flags_local -Wno-self-assign LIBOMP_HAVE_WNO_SELF_ASSIGN_FLAG)
45 libomp_append(flags_local -Wno-vla-extension LIBOMP_HAVE_WNO_VLA_EXTENSION_FLAG)
46 libomp_append(flags_local -Wno-format-pedantic LIBOMP_HAVE_WNO_FORMAT_PEDANTIC_FLAG)
Jonathan Peyton5b4acbd2015-07-15 16:57:19 +000047 libomp_append(flags_local /GS LIBOMP_HAVE_GS_FLAG)
48 libomp_append(flags_local /EHsc LIBOMP_HAVE_EHSC_FLAG)
49 libomp_append(flags_local /Oy- LIBOMP_HAVE_OY__FLAG)
50 # Intel(R) C Compiler flags
51 libomp_append(flags_local /Qsafeseh LIBOMP_HAVE_QSAFESEH_FLAG)
52 libomp_append(flags_local -Qoption,cpp,--extended_float_types LIBOMP_HAVE_EXTENDED_FLOAT_TYPES_FLAG)
53 libomp_append(flags_local -Qlong_double LIBOMP_HAVE_LONG_DOUBLE_FLAG)
54 libomp_append(flags_local -Qdiag-disable:177 LIBOMP_HAVE_DIAG_DISABLE_177_FLAG)
55 if(${RELEASE_BUILD} OR ${RELWITHDEBINFO_BUILD})
56 libomp_append(flags_local -Qinline-min-size=1 LIBOMP_HAVE_INLINE_MIN_SIZE_FLAG)
57 endif()
58 # Architectural C and C++ flags
59 if(${IA32})
60 if(CMAKE_SIZEOF_VOID_P EQUAL 8)
61 libomp_append(flags_local -m32 LIBOMP_HAVE_M32_FLAG)
Jonathan Peyton2e013352015-07-15 16:05:30 +000062 endif()
Jonathan Peyton5b4acbd2015-07-15 16:57:19 +000063 libomp_append(flags_local /arch:SSE2 LIBOMP_HAVE_ARCH_SSE2_FLAG)
64 libomp_append(flags_local -msse2 LIBOMP_HAVE_MSSE2_FLAG)
65 libomp_append(flags_local -falign-stack=maintain-16-byte LIBOMP_HAVE_FALIGN_STACK_FLAG)
66 elseif(${MIC})
67 libomp_append(flags_local -mmic LIBOMP_HAVE_MMIC_FLAG)
68 libomp_append(flags_local -ftls-model=initial-exec LIBOMP_HAVE_FTLS_MODEL_FLAG)
69 libomp_append(flags_local "-opt-streaming-stores never" LIBOMP_HAVE_OPT_STREAMING_STORES_FLAG)
70 endif()
71 set(${flags} ${flags_local} PARENT_SCOPE)
Jonathan Peyton2e013352015-07-15 16:05:30 +000072endfunction()
73
74# C compiler flags
75function(libomp_get_cflags cflags)
Jonathan Peyton5b4acbd2015-07-15 16:57:19 +000076 set(cflags_local)
77 libomp_get_c_and_cxxflags_common(cflags_local)
78 # flags only for the C Compiler
79 libomp_append(cflags_local /TP LIBOMP_HAVE_TP_FLAG)
80 libomp_append(cflags_local "-x c++" LIBOMP_HAVE_X_CPP_FLAG)
81 set(cflags_local ${cflags_local} ${LIBOMP_CFLAGS})
82 libomp_setup_flags(cflags_local)
83 set(${cflags} ${cflags_local} PARENT_SCOPE)
Jonathan Peyton2e013352015-07-15 16:05:30 +000084endfunction()
85
86# C++ compiler flags
87function(libomp_get_cxxflags cxxflags)
Jonathan Peyton5b4acbd2015-07-15 16:57:19 +000088 set(cxxflags_local)
89 libomp_get_c_and_cxxflags_common(cxxflags_local)
90 set(cxxflags_local ${cxxflags_local} ${LIBOMP_CXXFLAGS})
91 libomp_setup_flags(cxxflags_local)
92 set(${cxxflags} ${cxxflags_local} PARENT_SCOPE)
Jonathan Peyton2e013352015-07-15 16:05:30 +000093endfunction()
94
95# Assembler flags
96function(libomp_get_asmflags asmflags)
Jonathan Peyton5b4acbd2015-07-15 16:57:19 +000097 set(asmflags_local)
98 libomp_append(asmflags_local "-x assembler-with-cpp" LIBOMP_HAVE_X_ASSEMBLER_WITH_CPP_FLAG)
99 # Architectural assembler flags
100 if(${IA32})
101 if(CMAKE_SIZEOF_VOID_P EQUAL 8)
102 libomp_append(asmflags_local -m32 LIBOMP_HAVE_M32_FLAG)
Jonathan Peyton2e013352015-07-15 16:05:30 +0000103 endif()
Jonathan Peyton5b4acbd2015-07-15 16:57:19 +0000104 libomp_append(asmflags_local /safeseh LIBOMP_HAVE_SAFESEH_MASM_FLAG)
105 libomp_append(asmflags_local /coff LIBOMP_HAVE_COFF_MASM_FLAG)
106 elseif(${MIC})
107 libomp_append(asmflags_local -mmic LIBOMP_HAVE_MMIC_FLAG)
108 endif()
109 set(asmflags_local ${asmflags_local} ${LIBOMP_ASMFLAGS})
110 libomp_setup_flags(asmflags_local)
111 set(${asmflags} ${asmflags_local} PARENT_SCOPE)
Jonathan Peyton2e013352015-07-15 16:05:30 +0000112endfunction()
113
114# Linker flags
115function(libomp_get_ldflags ldflags)
Jonathan Peyton5b4acbd2015-07-15 16:57:19 +0000116 set(ldflags_local)
117 libomp_append(ldflags_local "${CMAKE_LINK_DEF_FILE_FLAG}${CMAKE_CURRENT_BINARY_DIR}/${LIBOMP_LIB_NAME}.def"
118 IF_DEFINED CMAKE_LINK_DEF_FILE_FLAG)
Jonathan Peytonc0225ca2015-08-28 18:42:10 +0000119 libomp_append(ldflags_local "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}${LIBOMP_VERSION_MAJOR}.${LIBOMP_VERSION_MINOR}"
Jonathan Peyton5b4acbd2015-07-15 16:57:19 +0000120 IF_DEFINED CMAKE_C_OSX_CURRENT_VERSION_FLAG)
Jonathan Peytonc0225ca2015-08-28 18:42:10 +0000121 libomp_append(ldflags_local "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}${LIBOMP_VERSION_MAJOR}.${LIBOMP_VERSION_MINOR}"
Jonathan Peyton5b4acbd2015-07-15 16:57:19 +0000122 IF_DEFINED CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG)
123 libomp_append(ldflags_local -Wl,--warn-shared-textrel LIBOMP_HAVE_WARN_SHARED_TEXTREL_FLAG)
124 libomp_append(ldflags_local -Wl,--as-needed LIBOMP_HAVE_AS_NEEDED_FLAG)
125 libomp_append(ldflags_local "-Wl,--version-script=${LIBOMP_SRC_DIR}/exports_so.txt" LIBOMP_HAVE_VERSION_SCRIPT_FLAG)
126 libomp_append(ldflags_local -static-libgcc LIBOMP_HAVE_STATIC_LIBGCC_FLAG)
127 libomp_append(ldflags_local -Wl,-z,noexecstack LIBOMP_HAVE_Z_NOEXECSTACK_FLAG)
128 libomp_append(ldflags_local -Wl,-fini=__kmp_internal_end_fini LIBOMP_HAVE_FINI_FLAG)
129 libomp_append(ldflags_local -no-intel-extensions LIBOMP_HAVE_NO_INTEL_EXTENSIONS_FLAG)
130 libomp_append(ldflags_local -static-intel LIBOMP_HAVE_STATIC_INTEL_FLAG)
131 libomp_append(ldflags_local /SAFESEH LIBOMP_HAVE_SAFESEH_FLAG)
132 # Architectural linker flags
133 if(${IA32})
134 if(CMAKE_SIZEOF_VOID_P EQUAL 8)
135 libomp_append(ldflags_local -m32 LIBOMP_HAVE_M32_FLAG)
Jonathan Peyton2e013352015-07-15 16:05:30 +0000136 endif()
Jonathan Peyton5b4acbd2015-07-15 16:57:19 +0000137 libomp_append(ldflags_local -msse2 LIBOMP_HAVE_MSSE2_FLAG)
138 elseif(${MIC})
139 libomp_append(ldflags_local -mmic LIBOMP_HAVE_MMIC_FLAG)
140 libomp_append(ldflags_local -Wl,-x LIBOMP_HAVE_X_FLAG)
141 endif()
142 set(ldflags_local ${ldflags_local} ${LIBOMP_LDFLAGS})
143 libomp_setup_flags(ldflags_local)
144 set(${ldflags} ${ldflags_local} PARENT_SCOPE)
Jonathan Peyton2e013352015-07-15 16:05:30 +0000145endfunction()
146
147# Library flags
148function(libomp_get_libflags libflags)
Jonathan Peyton5b4acbd2015-07-15 16:57:19 +0000149 set(libflags_local)
150 libomp_append(libflags_local "${CMAKE_THREAD_LIBS_INIT}")
Jonathan Peyton01dcf362015-11-30 20:02:59 +0000151 libomp_append(libflags_local "${LIBOMP_HWLOC_LIBRARY}" LIBOMP_USE_HWLOC)
Jonathan Peyton5b4acbd2015-07-15 16:57:19 +0000152 if(${IA32})
153 libomp_append(libflags_local -lirc_pic LIBOMP_HAVE_IRC_PIC_LIBRARY)
154 endif()
Joerg Sonnenberger8abf7c82015-09-21 20:21:02 +0000155 IF(${CMAKE_SYSTEM_NAME} MATCHES "NetBSD")
156 libomp_append(libflags_local -lm)
157 ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "NetBSD")
Jonathan Peyton5b4acbd2015-07-15 16:57:19 +0000158 set(libflags_local ${libflags_local} ${LIBOMP_LIBFLAGS})
159 libomp_setup_flags(libflags_local)
160 set(${libflags} ${libflags_local} PARENT_SCOPE)
Jonathan Peyton2e013352015-07-15 16:05:30 +0000161endfunction()
162
163# Fortran flags
164function(libomp_get_fflags fflags)
Jonathan Peyton5b4acbd2015-07-15 16:57:19 +0000165 set(fflags_local)
166 if(${IA32})
167 libomp_append(fflags_local -m32 LIBOMP_HAVE_M32_FORTRAN_FLAG)
168 endif()
169 set(fflags_local ${fflags_local} ${LIBOMP_FFLAGS})
170 libomp_setup_flags(fflags_local)
171 set(${fflags} ${fflags_local} PARENT_SCOPE)
Jonathan Peyton2e013352015-07-15 16:05:30 +0000172endfunction()
173
Jonathan Peyton2e013352015-07-15 16:05:30 +0000174# Perl generate-defs.pl flags (For Windows only)
175function(libomp_get_gdflags gdflags)
Jonathan Peyton5b4acbd2015-07-15 16:57:19 +0000176 set(gdflags_local)
177 if(${IA32})
178 set(libomp_gdflag_arch arch_32)
179 elseif(${INTEL64})
180 set(libomp_gdflag_arch arch_32e)
181 else()
182 set(libomp_gdflag_arch arch_${LIBOMP_ARCH})
183 endif()
184 libomp_append(gdflags_local "-D ${libomp_gdflag_arch}")
185 libomp_append(gdflags_local "-D msvc_compat")
186 libomp_append(gdflags_local "-D norm" NORMAL_LIBRARY)
187 libomp_append(gdflags_local "-D prof" PROFILE_LIBRARY)
188 libomp_append(gdflags_local "-D stub" STUBS_LIBRARY)
189 libomp_append(gdflags_local "-D HAVE_QUAD" LIBOMP_USE_QUAD_PRECISION)
Jonathan Peyton3c4dd1c2015-08-06 15:16:54 +0000190 libomp_append(gdflags_local "-D USE_DEBUGGER" LIBOMP_USE_DEBUGGER)
Jonathan Peytone844a542017-03-06 22:07:40 +0000191 if(${LIBOMP_OMP_VERSION} GREATER 50 OR ${LIBOMP_OMP_VERSION} EQUAL 50)
192 libomp_append(gdflags_local "-D OMP_50")
193 endif()
Jonathan Peytondf6818b2016-06-14 17:57:47 +0000194 if(${LIBOMP_OMP_VERSION} GREATER 45 OR ${LIBOMP_OMP_VERSION} EQUAL 45)
195 libomp_append(gdflags_local "-D OMP_45")
Jonathan Peyton5b4acbd2015-07-15 16:57:19 +0000196 endif()
197 if(${LIBOMP_OMP_VERSION} GREATER 40 OR ${LIBOMP_OMP_VERSION} EQUAL 40)
198 libomp_append(gdflags_local "-D OMP_40")
199 endif()
200 if(${LIBOMP_OMP_VERSION} GREATER 30 OR ${LIBOMP_OMP_VERSION} EQUAL 30)
201 libomp_append(gdflags_local "-D OMP_30")
202 endif()
203 if(${DEBUG_BUILD} OR ${RELWITHDEBINFO_BUILD})
204 libomp_append(gdflags_local "-D KMP_DEBUG")
205 endif()
206 set(${gdflags} ${gdflags_local} PARENT_SCOPE)
Jonathan Peyton2e013352015-07-15 16:05:30 +0000207endfunction()