Removed
Link Here
|
1 |
Avoid looking for pthread by simply asserting that it is there. |
2 |
Otherwise openmp can't be found because the pthread library |
3 |
lives in /usr/lib and CMake 3.11 doesn't look there anymore |
4 |
while looking for openmp. PR 223678. |
5 |
|
6 |
Look for omp.h in LOCALBASE and pass suitable -I and -L flags |
7 |
if those are necessary. Also use OpenMP flags when linking. |
8 |
PR 223678 and PR 234050. |
9 |
|
10 |
--- Modules/FindOpenMP.cmake.orig 2022-11-17 13:55:41 UTC |
11 |
+++ Modules/FindOpenMP.cmake |
12 |
@@ -97,6 +97,33 @@ cmake_policy(SET CMP0012 NEW) # if() recognizes number |
13 |
cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced |
14 |
cmake_policy(SET CMP0057 NEW) # if IN_LIST |
15 |
|
16 |
+set(OpenMP_pthread_LIBRARY -lpthread) |
17 |
+ |
18 |
+# If the compiler itself has support for OpenMP, then omp.h is hidden |
19 |
+# away somewhere and it won't be found here; but if the support comes |
20 |
+# from an external package, it needs to have the right -I and -L flags. |
21 |
+find_file(_path_to_omp_h omp.h) |
22 |
+if(NOT _path_to_omp_h) |
23 |
+ find_file(_path_to_omp_h omp.h |
24 |
+ HINTS $ENV{LOCALBASE}/include /usr/local/include) |
25 |
+endif() |
26 |
+if(_path_to_omp_h) |
27 |
+ get_filename_component(OpenMP_INCLUDE_DIR ${_path_to_omp_h} DIRECTORY) |
28 |
+else() |
29 |
+ set(OpenMP_INCLUDE_DIR "omp_h-NOTFOUND") |
30 |
+endif() |
31 |
+ |
32 |
+find_library(_path_to_omp_lib omp) |
33 |
+if(NOT _path_to_omp_lib) |
34 |
+ find_library(_path_to_omp_lib omp |
35 |
+ PATHS $ENV{LOCALBASE}/lib /usr/local/lib) |
36 |
+endif() |
37 |
+if(_path_to_omp_lib) |
38 |
+ get_filename_component(OpenMP_LIB_DIR ${_path_to_omp_lib} DIRECTORY) |
39 |
+else() |
40 |
+ set(OpenMP_LIB_DIR "omp_lib-NOTFOUND") |
41 |
+endif() |
42 |
+ |
43 |
function(_OPENMP_FLAG_CANDIDATES LANG) |
44 |
if(NOT OpenMP_${LANG}_FLAG) |
45 |
unset(OpenMP_FLAG_CANDIDATES) |
46 |
@@ -211,6 +238,15 @@ function(_OPENMP_GET_FLAGS LANG FLAG_MODE OPENMP_FLAG_ |
47 |
if(OpenMP_VERBOSE_COMPILE_OPTIONS) |
48 |
string(APPEND OPENMP_FLAGS_TEST " ${OpenMP_VERBOSE_COMPILE_OPTIONS}") |
49 |
endif() |
50 |
+ set(_extra_flag "") |
51 |
+ if(OpenMP_INCLUDE_DIR) |
52 |
+ string(APPEND _extra_flag " -I${OpenMP_INCLUDE_DIR}") |
53 |
+ endif() |
54 |
+ if(OpenMP_LIB_DIR) |
55 |
+ string(APPEND _extra_flag " -L${OpenMP_LIB_DIR}") |
56 |
+ endif() |
57 |
+ set(_need_extra FALSE) |
58 |
+ |
59 |
string(REGEX REPLACE "[-/=+]" "" OPENMP_PLAIN_FLAG "${OPENMP_FLAG}") |
60 |
try_compile( OpenMP_COMPILE_RESULT_${FLAG_MODE}_${OPENMP_PLAIN_FLAG} |
61 |
SOURCE_FROM_VAR "${_OPENMP_TEST_SRC_NAME}" _OPENMP_TEST_SRC_CONTENT |
62 |
@@ -219,8 +255,23 @@ function(_OPENMP_GET_FLAGS LANG FLAG_MODE OPENMP_FLAG_ |
63 |
OUTPUT_VARIABLE OpenMP_TRY_COMPILE_OUTPUT |
64 |
) |
65 |
|
66 |
+ # Might need that -I -L after all.. |
67 |
+ if(NOT OpenMP_COMPILE_RESULT_${FLAG_MODE}_${OPENMP_PLAIN_FLAG}) |
68 |
+ unset(OpenMP_COMPILE_RESULT_${FLAG_MODE}_${OPENMP_PLAIN_FLAG}) |
69 |
+ try_compile( OpenMP_COMPILE_RESULT_${FLAG_MODE}_${OPENMP_PLAIN_FLAG} ${CMAKE_BINARY_DIR} ${_OPENMP_TEST_SRC} |
70 |
+ CMAKE_FLAGS "-DCOMPILE_DEFINITIONS:STRING=${OPENMP_FLAGS_TEST} ${_extra_flag}" |
71 |
+ LINK_LIBRARIES ${CMAKE_${LANG}_VERBOSE_FLAG} |
72 |
+ OUTPUT_VARIABLE OpenMP_TRY_COMPILE_OUTPUT |
73 |
+ ) |
74 |
+ set(_need_extra TRUE) |
75 |
+ endif() |
76 |
+ |
77 |
if(OpenMP_COMPILE_RESULT_${FLAG_MODE}_${OPENMP_PLAIN_FLAG}) |
78 |
- set("${OPENMP_FLAG_VAR}" "${OPENMP_FLAG}" PARENT_SCOPE) |
79 |
+ if(_need_extra) |
80 |
+ set("${OPENMP_FLAG_VAR}" "${OPENMP_FLAG} ${_extra_flag}" PARENT_SCOPE) |
81 |
+ else() |
82 |
+ set("${OPENMP_FLAG_VAR}" "${OPENMP_FLAG}" PARENT_SCOPE) |
83 |
+ endif() |
84 |
|
85 |
if(CMAKE_${LANG}_VERBOSE_FLAG) |
86 |
unset(OpenMP_${LANG}_IMPLICIT_LIBRARIES) |
87 |
@@ -603,9 +654,16 @@ foreach(LANG IN LISTS OpenMP_FINDLIST) |
88 |
add_library(OpenMP::OpenMP_${LANG} INTERFACE IMPORTED) |
89 |
endif() |
90 |
if(OpenMP_${LANG}_FLAGS) |
91 |
- separate_arguments(_OpenMP_${LANG}_OPTIONS NATIVE_COMMAND "${OpenMP_${LANG}_FLAGS}") |
92 |
+ # All the options except -L.. |
93 |
+ separate_arguments(_OpenMP_${LANG}_COMPILE_OPTIONS NATIVE_COMMAND "${OpenMP_${LANG}_FLAGS}") |
94 |
+ list(FILTER _OpenMP_${LANG}_COMPILE_OPTIONS EXCLUDE REGEX "^-L/") |
95 |
+ # All the options except -I.. |
96 |
+ separate_arguments(_OpenMP_${LANG}_LINK_OPTIONS NATIVE_COMMAND "${OpenMP_${LANG}_FLAGS}") |
97 |
+ list(FILTER _OpenMP_${LANG}_LINK_OPTIONS EXCLUDE REGEX "^-I/") |
98 |
set_property(TARGET OpenMP::OpenMP_${LANG} PROPERTY |
99 |
- INTERFACE_COMPILE_OPTIONS "$<$<COMPILE_LANGUAGE:${LANG}>:${_OpenMP_${LANG}_OPTIONS}>") |
100 |
+ INTERFACE_COMPILE_OPTIONS "$<$<COMPILE_LANGUAGE:${LANG}>:${_OpenMP_${LANG}_COMPILE_OPTIONS}>") |
101 |
+ set_property(TARGET OpenMP::OpenMP_${LANG} PROPERTY |
102 |
+ INTERFACE_LINK_OPTIONS "$<$<COMPILE_LANGUAGE:${LANG}>:${_OpenMP_${LANG}_LINK_OPTIONS}>") |
103 |
if(CMAKE_${LANG}_COMPILER_ID STREQUAL "Fujitsu" |
104 |
OR ${CMAKE_${LANG}_COMPILER_ID} STREQUAL "IntelLLVM") |
105 |
set_property(TARGET OpenMP::OpenMP_${LANG} PROPERTY |
106 |
- |