Mentions légales du service

Skip to content
Snippets Groups Projects
Commit e2fa5a15 authored by hhakim's avatar hhakim
Browse files

Patch cmake script for finding OpenMP on macOS/clang.

parent ab9acd24
No related branches found
No related tags found
No related merge requests found
......@@ -525,31 +525,37 @@ endif()
if(BUILD_MULTITHREAD)
find_package(OpenMP REQUIRED)
if(NOT OpenMP_FOUND)
message(FATAL_ERROR "OpenMP not found.")
else()
message(STATUS "OpenMP is supported OpenMP_CXX_FOUND: ${OpenMP_CXX_FOUND}, OpenMP_CXX_FLAGS: ${OpenMP_CXX_FLAGS}, OpenMP_CXX_LIB_NAMES: ${OpenMP_CXX_LIB_NAMES}, OpenMP_CXX_LIBRARY: ${OpenMP_CXX_LIBRARY}, OpenMP_CXX_LIBRARIES: ${OpenMP_CXX_LIBRARIES}")
foreach(OMP_FLAG IN LISTS OpenMP_CXX_FLAGS)
set(OMP_CXX_FLAGS "${OMP_CXX_FLAGS} ${OMP_FLAG}")
endforeach()
if(UNIX OR (WIN32 AND ${CMAKE_GENERATOR} MATCHES "MinGW Makefiles"))
foreach(OMP_LFLAG IN LISTS OpenMP_CXX_LIB_NAMES)
set(OMP_CXX_LFLAGS "${OMP_CXX_LFLAGS} -l${OMP_LFLAG}")
endforeach()
foreach(OMP_LFLAG IN LISTS OpenMP_CXX_LIBRARIES)
string(REGEX REPLACE "(.*)(/|\\\\).*" "\\1" OMP_LIB_PATH ${OMP_LFLAG})
set(OMP_CXX_LFLAGS " ${OMP_CXX_LFLAGS} -L${OMP_LIB_PATH}")
endforeach()
elseif(WIN32 AND ${CMAKE_GENERATOR} MATCHES "Visual Studio.*")
# strangely I noticed that findOpenMP gives -openmp instead of /openmp when compiler is msvc cl.exe
string(REGEX REPLACE "-" "/" OMP_CXX_FLAGS ${OMP_CXX_FLAGS})
find_package(OpenMP) #not REQUIRED, allow to fail the first time
if(NOT OpenMP_FOUND) # this section is particularly useful for clang/macOS configuration (OpenMP is not enabled by default, installed it via macports)
# message(STATUS "OpenMP not found automatically, let's help it.")
set(OpenMP_CXX_FLAGS "-I${OpenMP_INC_DIR}")
set(OpenMP_CXX_LIB_NAMES "gomp")
# now retry
find_package(OpenMP REQUIRED) # last chance
if(NOT OpenMP_FOUND)
message(FATAL_ERROR "OpenMP not found. Please try to define cmake variables OpenMP_gomp_LIBRARY -- to the path of libgomp, lib included, and OpenMP_INC_DIR to the parent directory of omp.h")
endif()
string(REGEX REPLACE "(^[ \t\r\n]+)|([ \t\r\n]+$)" "" OMP_CXX_FLAGS ${OMP_CXX_FLAGS})
string(REGEX REPLACE "(^[ \t\r\n]+)|([ \t\r\n]+$)" "" OMP_CXX_LFLAGS ${OMP_CXX_LFLAGS})
message(STATUS OMP_CXX_FLAGS=${OMP_CXX_FLAGS} OMP_CXX_LFLAGS=${OMP_CXX_LFLAGS})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OMP_CXX_FLAGS}")
endif()
message(STATUS "OpenMP is supported OpenMP_CXX_FOUND: ${OpenMP_CXX_FOUND}, OpenMP_CXX_FLAGS: ${OpenMP_CXX_FLAGS}, OpenMP_CXX_LIB_NAMES: ${OpenMP_CXX_LIB_NAMES}, OpenMP_CXX_LIBRARY: ${OpenMP_CXX_LIBRARY}, OpenMP_CXX_LIBRARIES: ${OpenMP_CXX_LIBRARIES}")
foreach(OMP_FLAG IN LISTS OpenMP_CXX_FLAGS)
set(OMP_CXX_FLAGS "${OMP_CXX_FLAGS} ${OMP_FLAG}")
endforeach()
if(UNIX OR (WIN32 AND ${CMAKE_GENERATOR} MATCHES "MinGW Makefiles"))
foreach(OMP_LFLAG IN LISTS OpenMP_CXX_LIB_NAMES)
set(OMP_CXX_LFLAGS "${OMP_CXX_LFLAGS} -l${OMP_LFLAG}")
endforeach()
foreach(OMP_LFLAG IN LISTS OpenMP_CXX_LIBRARIES)
string(REGEX REPLACE "(.*)(/|\\\\).*" "\\1" OMP_LIB_PATH ${OMP_LFLAG})
set(OMP_CXX_LFLAGS " ${OMP_CXX_LFLAGS} -L${OMP_LIB_PATH}")
endforeach()
elseif(WIN32 AND ${CMAKE_GENERATOR} MATCHES "Visual Studio.*")
# strangely I noticed that findOpenMP gives -openmp instead of /openmp when compiler is msvc cl.exe
string(REGEX REPLACE "-" "/" OMP_CXX_FLAGS ${OMP_CXX_FLAGS})
endif()
string(REGEX REPLACE "(^[ \t\r\n]+)|([ \t\r\n]+$)" "" OMP_CXX_FLAGS ${OMP_CXX_FLAGS})
string(REGEX REPLACE "(^[ \t\r\n]+)|([ \t\r\n]+$)" "" OMP_CXX_LFLAGS ${OMP_CXX_LFLAGS})
message(STATUS OMP_CXX_FLAGS=${OMP_CXX_FLAGS} OMP_CXX_LFLAGS=${OMP_CXX_LFLAGS})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OMP_CXX_FLAGS}")
endif(BUILD_MULTITHREAD)
#if( (CMAKE_BUILD_TYPE MATCHES "Debug") OR (CMAKE_BUILD_TYPE MATCHES "debug") OR (CMAKE_BUILD_TYPE MATCHES "DEBUG") )
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment