Skip to content

Commit 7baaaab

Browse files
committed
add _R16P_SUPPORTED auto detection
1 parent 1ec2283 commit 7baaaab

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

src/lib/CMakeLists.txt

+53
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,59 @@ target_include_directories(${LIB}
2222
$<BUILD_INTERFACE:${CMAKE_Fortran_MODULE_DIRECTORY}>
2323
)
2424

25+
function(check_fortran_source_runs code resultVar)
26+
cmake_parse_arguments(PARSE_ARGV 2 check "" "SRC_EXT" "FAIL_REGEX")
27+
# message("${code}")
28+
# message("${check_SRC_EXT}")
29+
# message("${check_FAIL_REGEX}")
30+
if(DEFINED call_SRC_EXT)
31+
set(ext "${check_SRC_EXT}")
32+
else()
33+
set(ext "f90")
34+
endif()
35+
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/check_fortran_source_runs.${ext} "${code}")
36+
try_run(run_result compile_result
37+
${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/try_run
38+
${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/check_fortran_source_runs.${ext}
39+
RUN_OUTPUT_VARIABLE run_output
40+
)
41+
# message("compile_result: ${compile_result}")
42+
if(compile_result)
43+
# message("run_result: ${run_result}")
44+
if(DEFINED check_FAIL_REGEX)
45+
set(tmpVar FALSE)
46+
foreach(regexp in check_FAIL_REGEXP)
47+
string(REGEXP MATCH ${regexp} match run_output)
48+
if(NOT (${match} STREQUAL ""))
49+
set(tmpVar TRUE)
50+
break()
51+
endif()
52+
endforeach()
53+
set(${resultVar} ${tmpVar} PARENT_SCOPE)
54+
else()
55+
if(${run_result} EQUAL 0)
56+
set(${resultVar} TRUE PARENT_SCOPE)
57+
else()
58+
set(${resultVar} FALSE PARENT_SCOPE)
59+
endif()
60+
endif()
61+
else()
62+
set(${resultVar} FALSE PARENT_SCOPE)
63+
endif()
64+
endfunction()
65+
66+
if(NOT (DEFINED _R16P_SUPPORTED))
67+
check_fortran_source_runs("program r16p_support; integer, parameter :: r16p = selected_real_kind(33, 4931) - 16; stop r16p; end program r16p_support" _r16p_supported SRC_EXT f90)
68+
message(STATUS "Checking wether ${CMAKE_Fortran_COMPILER} supports 16 byte reals -- ${_r16p_supported}")
69+
set(_R16P_SUPPORTED ${_r16p_supported} CACHE BOOL "Fortran compiler supports 16 byte precision reals")
70+
endif()
71+
72+
target_compile_definitions(${LIB}
73+
PRIVATE
74+
$<$<BOOL:${_R16P_SUPPORTED}>:_R16P_SUPPORTED>
75+
${_ascii_supported}
76+
${_ucs4_supported}
77+
)
2578
set_target_properties(${LIB} PROPERTIES
2679
VERSION
2780
${PROJECT_VERSION}

0 commit comments

Comments
 (0)