diff options
Diffstat (limited to 'rc3/runtime/cmake/LibompCheckFortranFlag.cmake')
-rw-r--r-- | rc3/runtime/cmake/LibompCheckFortranFlag.cmake | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/rc3/runtime/cmake/LibompCheckFortranFlag.cmake b/rc3/runtime/cmake/LibompCheckFortranFlag.cmake new file mode 100644 index 0000000..c37b3ad --- /dev/null +++ b/rc3/runtime/cmake/LibompCheckFortranFlag.cmake @@ -0,0 +1,73 @@ +# +#//===----------------------------------------------------------------------===// +#// +#// The LLVM Compiler Infrastructure +#// +#// This file is dual licensed under the MIT and the University of Illinois Open +#// Source Licenses. See LICENSE.txt for details. +#// +#//===----------------------------------------------------------------------===// +# + +# Checking a fortran compiler flag +# There is no real trivial way to do this in CMake, so we implement it here +# this will have ${boolean} = TRUE if the flag succeeds, otherwise false. +function(libomp_check_fortran_flag flag boolean) + if(NOT DEFINED "${boolean}") + set(retval TRUE) + set(fortran_source +" program hello + print *, \"Hello World!\" + end program hello") + + set(failed_regexes "[Ee]rror;[Uu]nknown;[Ss]kipping") + if(CMAKE_VERSION VERSION_GREATER 3.1 OR CMAKE_VERSION VERSION_EQUAL 3.1) + include(CheckFortranSourceCompiles) + check_fortran_source_compiles("${fortran_source}" ${boolean} FAIL_REGEX "${failed_regexes}") + set(${boolean} ${${boolean}} PARENT_SCOPE) + return() + else() + # Our manual check for cmake versions that don't have CheckFortranSourceCompiles + set(base_dir ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/fortran_flag_check) + file(MAKE_DIRECTORY ${base_dir}) + file(WRITE ${base_dir}/fortran_source.f "${fortran_source}") + + message(STATUS "Performing Test ${boolean}") + execute_process( + COMMAND ${CMAKE_Fortran_COMPILER} "${flag}" ${base_dir}/fortran_source.f + WORKING_DIRECTORY ${base_dir} + RESULT_VARIABLE exit_code + OUTPUT_VARIABLE OUTPUT + ERROR_VARIABLE OUTPUT + ) + + if(${exit_code} EQUAL 0) + foreach(regex IN LISTS failed_regexes) + if("${OUTPUT}" MATCHES ${regex}) + set(retval FALSE) + endif() + endforeach() + else() + set(retval FALSE) + endif() + + if(${retval}) + set(${boolean} 1 CACHE INTERNAL "Test ${boolean}") + message(STATUS "Performing Test ${boolean} - Success") + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Performing Fortran Compiler Flag test ${boolean} succeeded with the following output:\n" + "${OUTPUT}\n" + "Source file was:\n${fortran_source}\n") + else() + set(${boolean} "" CACHE INTERNAL "Test ${boolean}") + message(STATUS "Performing Test ${boolean} - Failed") + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Performing Fortran Compiler Flag test ${boolean} failed with the following output:\n" + "${OUTPUT}\n" + "Source file was:\n${fortran_source}\n") + endif() + endif() + + set(${boolean} ${retval} PARENT_SCOPE) + endif() +endfunction() |