11# check C and Fortran compiler ABI compatibility
22
33if (NOT abi_ok)
4- message (CHECK_START "checking that C and Fortran compilers can link" )
4+ message (CHECK_START "checking that compilers can link together " )
55 try_compile (abi_ok
66 ${CMAKE_CURRENT_BINARY_DIR} /abi_check ${CMAKE_CURRENT_LIST_DIR} /abi_check
77 abi_check
@@ -10,30 +10,58 @@ if(NOT abi_ok)
1010 if (abi_ok)
1111 message (CHECK_PASS "OK" )
1212 else ()
13+ set (err_log ${CMAKE_CURRENT_BINARY_DIR} /abi_check/CMakeError.log )
1314 message (FATAL_ERROR "ABI-incompatible compilers:
1415 C compiler ${CMAKE_C_COMPILER_ID} ${CMAKE_C_COMPILER_VERSION}
1516 Fortran compiler ${CMAKE_Fortran_COMPILER_ID} ${CMAKE_Fortran_COMPILER_VERSION}
16- ${abi_log }
17+ For logged errors see ${err_log }
1718 "
1819 )
20+ file (WRITE ${err_log} ${abi_log} )
1921 endif ()
2022endif ()
2123
22- # --- compiler options
23- # we left off "-std=f2018" type flags as they tend to issue false warnings
24+ # --- C compile flags
25+ if (CMAKE_C_COMPILER_ID MATCHES "Clang|GNU|^Intel" )
26+ add_compile_options (
27+ "$<$<AND:$<COMPILE_LANGUAGE:C>,$<CONFIG:Debug>>:-Wextra>"
28+ "$<$<COMPILE_LANGUAGE:C>:-Wall>"
29+ "$<$<COMPILE_LANGUAGE:C>:-Werror=implicit-function-declaration>"
30+ )
31+ elseif (CMAKE_C_COMPILER_ID MATCHES "MSVC" )
32+ add_compile_options ("$<$<COMPILE_LANGUAGE:C>:/W3>" )
33+ endif ()
2434
35+ if (WIN32 )
36+ if (CMAKE_C_COMPILER_ID MATCHES "^Intel|MSVC" )
37+ add_compile_options ($<$<AND :$<COMPILE_LANGUAGE:C>,$<CONFIG:Debug>>:/Od>)
38+ endif ()
39+ elseif (CMAKE_C_COMPILER_ID MATCHES "^Intel" )
40+ add_compile_options ($<$<AND :$<COMPILE_LANGUAGE:C>,$<CONFIG:Debug>>:-O0>)
41+ endif ()
42+
43+ # --- Fortran compile flags
2544if (CMAKE_Fortran_COMPILER_ID MATCHES "^Intel" )
45+
2646add_compile_options (
2747"$<$<COMPILE_LANGUAGE:Fortran>:-warn>"
2848"$<$<AND:$<COMPILE_LANGUAGE:Fortran>,$<CONFIG:Debug>>:-traceback;-check;-debug>"
2949)
50+
51+ if (WIN32 )
52+ add_compile_options ($<$<AND :$<COMPILE_LANGUAGE:Fortran>,$<CONFIG:Debug>>:/Od>)
53+ else ()
54+ add_compile_options ($<$<AND :$<COMPILE_LANGUAGE:Fortran>,$<CONFIG:Debug>>:-O0>)
55+ endif ()
56+
3057elseif (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" )
31- add_compile_options (-Wall
32- $<$<COMPILE_LANGUAGE:Fortran>:-fimplicit-none>
58+
59+ add_compile_options (
60+ "$<$<COMPILE_LANGUAGE:Fortran>:-Wall;-fimplicit-none;-Wno-maybe-uninitialized>"
3361"$<$<AND:$<COMPILE_LANGUAGE:Fortran>,$<CONFIG:Debug>>:-Wextra;-fcheck=all;-Werror=array-bounds>"
34- "$<$<AND:$<COMPILE_LANGUAGE:Fortran>,$<CONFIG:Release>>:-fno-backtrace;-Wno-maybe-uninitialized>"
35- "$<$<AND:$<COMPILE_LANGUAGE:Fortran>,$<CONFIG:RelWithDebInfo>>:-Wno-maybe-uninitialized>"
62+ "$<$<AND:$<COMPILE_LANGUAGE:Fortran>,$<CONFIG:Release>>:-fno-backtrace>"
3663)
64+
3765endif ()
3866
3967# --- code coverage
@@ -42,3 +70,10 @@ if(coverage)
4270 append_coverage_compiler_flags()
4371 set (COVERAGE_EXCLUDES ${PROJECT_SOURCE_DIR} /test )
4472endif ()
73+
74+ # --- clang-tidy
75+ if (tidy)
76+ find_program (CLANG_TIDY_EXE NAMES "clang-tidy" REQUIRED)
77+ set (CMAKE_C_CLANG_TIDY ${CLANG_TIDY_EXE} )
78+ set (CMAKE_CXX_CLANG_TIDY ${CLANG_TIDY_EXE} )
79+ endif ()
0 commit comments