FindOpenMP: Add support for Fortran (#14656)
This commit is contained in:
parent
7386d0d6df
commit
d067840854
|
@ -0,0 +1,4 @@
|
||||||
|
FindOpenMP-add-Fortran-support
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
* The :module:`FindOpenMP` module learned to support Fortran.
|
|
@ -16,6 +16,7 @@
|
||||||
#
|
#
|
||||||
# OpenMP_C_FLAGS - flags to add to the C compiler for OpenMP support
|
# OpenMP_C_FLAGS - flags to add to the C compiler for OpenMP support
|
||||||
# OpenMP_CXX_FLAGS - flags to add to the CXX compiler for OpenMP support
|
# OpenMP_CXX_FLAGS - flags to add to the CXX compiler for OpenMP support
|
||||||
|
# OpenMP_Fortran_FLAGS - flags to add to the Fortran compiler for OpenMP support
|
||||||
# OPENMP_FOUND - true if openmp is detected
|
# OPENMP_FOUND - true if openmp is detected
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
@ -27,6 +28,7 @@
|
||||||
# Copyright 2009 Kitware, Inc.
|
# Copyright 2009 Kitware, Inc.
|
||||||
# Copyright 2008-2009 André Rigland Brodtkorb <Andre.Brodtkorb@ifi.uio.no>
|
# Copyright 2008-2009 André Rigland Brodtkorb <Andre.Brodtkorb@ifi.uio.no>
|
||||||
# Copyright 2012 Rolf Eike Beer <eike@sf-mail.de>
|
# Copyright 2012 Rolf Eike Beer <eike@sf-mail.de>
|
||||||
|
# Copyright 2014 Nicolas Bock <nicolasbock@gmail.com>
|
||||||
#
|
#
|
||||||
# Distributed under the OSI-approved BSD License (the "License");
|
# Distributed under the OSI-approved BSD License (the "License");
|
||||||
# see accompanying file Copyright.txt for details.
|
# see accompanying file Copyright.txt for details.
|
||||||
|
@ -106,6 +108,17 @@ int main() {
|
||||||
}
|
}
|
||||||
")
|
")
|
||||||
|
|
||||||
|
# same in Fortran
|
||||||
|
set(OpenMP_Fortran_TEST_SOURCE
|
||||||
|
"
|
||||||
|
program test
|
||||||
|
use omp_lib
|
||||||
|
integer :: n
|
||||||
|
n = omp_get_num_threads()
|
||||||
|
end program test
|
||||||
|
"
|
||||||
|
)
|
||||||
|
|
||||||
# check c compiler
|
# check c compiler
|
||||||
if(CMAKE_C_COMPILER_LOADED)
|
if(CMAKE_C_COMPILER_LOADED)
|
||||||
# if these are set then do not try to find them again,
|
# if these are set then do not try to find them again,
|
||||||
|
@ -176,6 +189,40 @@ if(CMAKE_CXX_COMPILER_LOADED)
|
||||||
unset(OpenMP_CXX_TEST_SOURCE)
|
unset(OpenMP_CXX_TEST_SOURCE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# check Fortran compiler
|
||||||
|
if(CMAKE_Fortran_COMPILER_LOADED)
|
||||||
|
# if these are set then do not try to find them again,
|
||||||
|
# by avoiding any try_compiles for the flags
|
||||||
|
if(OpenMP_Fortran_FLAGS)
|
||||||
|
unset(OpenMP_Fortran_FLAG_CANDIDATES)
|
||||||
|
else()
|
||||||
|
_OPENMP_FLAG_CANDIDATES("Fortran")
|
||||||
|
include(${CMAKE_CURRENT_LIST_DIR}/CheckFortranSourceCompiles.cmake)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
foreach(FLAG IN LISTS OpenMP_Fortran_FLAG_CANDIDATES)
|
||||||
|
set(SAFE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
|
||||||
|
set(CMAKE_REQUIRED_FLAGS "${FLAG}")
|
||||||
|
unset(OpenMP_FLAG_DETECTED CACHE)
|
||||||
|
if(NOT CMAKE_REQUIRED_QUIET)
|
||||||
|
message(STATUS "Try OpenMP Fortran flag = [${FLAG}]")
|
||||||
|
endif()
|
||||||
|
check_fortran_source_compiles("${OpenMP_Fortran_TEST_SOURCE}" OpenMP_FLAG_DETECTED)
|
||||||
|
set(CMAKE_REQUIRED_FLAGS "${SAFE_CMAKE_REQUIRED_FLAGS}")
|
||||||
|
if(OpenMP_FLAG_DETECTED)
|
||||||
|
set(OpenMP_Fortran_FLAGS_INTERNAL "${FLAG}")
|
||||||
|
break()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
set(OpenMP_Fortran_FLAGS "${OpenMP_Fortran_FLAGS_INTERNAL}"
|
||||||
|
CACHE STRING "Fortran compiler flags for OpenMP parallization")
|
||||||
|
|
||||||
|
list(APPEND _OPENMP_REQUIRED_VARS OpenMP_Fortran_FLAGS)
|
||||||
|
unset(OpenMP_Fortran_FLAG_CANDIDATES)
|
||||||
|
unset(OpenMP_Fortran_TEST_SOURCE)
|
||||||
|
endif()
|
||||||
|
|
||||||
set(CMAKE_REQUIRED_QUIET ${CMAKE_REQUIRED_QUIET_SAVE})
|
set(CMAKE_REQUIRED_QUIET ${CMAKE_REQUIRED_QUIET_SAVE})
|
||||||
|
|
||||||
if(_OPENMP_REQUIRED_VARS)
|
if(_OPENMP_REQUIRED_VARS)
|
||||||
|
|
Loading…
Reference in New Issue