diff --git a/CMLibCommon.cmake b/CMLibCommon.cmake index 53d088d..8c5a77b 100644 --- a/CMLibCommon.cmake +++ b/CMLibCommon.cmake @@ -30,6 +30,7 @@ include(CMLibLSBInfo) include(CMLibCompiler) include(CMLibCompilerFlags) include(CMLibDistCC) +include(CMLibHighPrecisionMath) include(CMLibGenerateCompilerFeaturesHPP) include(CMLibFlagRemove) include(CMLibCotire) diff --git a/CMLibHighPrecisionMath.cmake b/CMLibHighPrecisionMath.cmake new file mode 100644 index 0000000..3204f60 --- /dev/null +++ b/CMLibHighPrecisionMath.cmake @@ -0,0 +1,40 @@ +function(enable_high_precision_math) + set(options QUAD MPFR) + set(oneValueArgs) + set(multiValueArgs) + + cmake_parse_arguments(_PKG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if(MPFR AND QUAD) + message(FATAL_ERROR "Mutually exclusive options QUAD and MPFR") + endif() + + if(MPFR) + find_package(MPFR) + if(MPFR_FOUND) + find_package(MPFRCppThirdparty) + endif() + return() + endif() + + if(QUAD) + find_package(Quadmath) + if(QUADMATH_FOUND) + add_definitions(-DHAVE_QUADMATH=1) + endif() + return() + endif() + + # Default + find_package(Quadmath) + if(QUADMATH_FOUND) + add_definitions(-DHAVE_QUADMATH=1) + else() + find_package(MPFR) + if(MPFR_FOUND) + find_package(MPFRCppThirdparty) + else() + message(FATAL_ERROR "Nor Quadmath, nor MPFR found.") + endif() + endif() +endfunction()