diff options
Diffstat (limited to 'cmake/FindGMP.cmake')
-rw-r--r-- | cmake/FindGMP.cmake | 72 |
1 files changed, 64 insertions, 8 deletions
diff --git a/cmake/FindGMP.cmake b/cmake/FindGMP.cmake index 1e1ca26c7..7e81dfd19 100644 --- a/cmake/FindGMP.cmake +++ b/cmake/FindGMP.cmake @@ -9,17 +9,73 @@ ## directory for licensing information. ## # Find GMP -# GMP_FOUND - system has GMP lib -# GMP_INCLUDE_DIR - the GMP include directory -# GMP_LIBRARIES - Libraries needed to use GMP +# GMP_FOUND - should always be true +# GMP - target for the GMP library + +include(deps-helper) find_path(GMP_INCLUDE_DIR NAMES gmp.h gmpxx.h) find_library(GMP_LIBRARIES NAMES gmp) -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(GMP DEFAULT_MSG GMP_INCLUDE_DIR GMP_LIBRARIES) +set(GMP_FOUND_SYSTEM FALSE) +if(GMP_INCLUDE_DIR AND GMP_LIBRARIES) + set(GMP_FOUND_SYSTEM TRUE) + + function(getversionpart OUTPUT FILENAME DESC) + file(STRINGS ${FILENAME} RES REGEX "^#define __GNU_MP_${DESC}[ \\t]+.*") + string(REGEX MATCH "[0-9]+" RES "${RES}") + set(${OUTPUT} + "${RES}" + PARENT_SCOPE + ) + endfunction() + getversionpart(MAJOR "${GMP_INCLUDE_DIR}/gmp.h" "VERSION") + getversionpart(MINOR "${GMP_INCLUDE_DIR}/gmp.h" "VERSION_MINOR") + getversionpart(PATCH "${GMP_INCLUDE_DIR}/gmp.h" "VERSION_PATCHLEVEL") + set(GMP_VERSION + "${MAJOR}.${MINOR}.${PATCH}" + PARENT_SCOPE + ) + + check_system_version("GMP") +endif() + +if(NOT GMP_FOUND_SYSTEM) + include(ExternalProject) + + set(GMP_VERSION "6.2.1") + + ExternalProject_Add( + GMP-EP + PREFIX ${DEPS_PREFIX} + URL https://gmplib.org/download/gmp/gmp-${GMP_VERSION}.tar.bz2 + URL_HASH SHA1=2dcf34d4a432dbe6cce1475a835d20fe44f75822 + CONFIGURE_COMMAND + <SOURCE_DIR>/configure --prefix=<INSTALL_DIR> --enable-cxx --with-pic + --disable-shared --enable-static --host=${TOOLCHAIN_PREFIX} + BUILD_BYPRODUCTS <INSTALL_DIR>/lib/libgmp.a + ) + + set(GMP_INCLUDE_DIR "${DEPS_BASE}/include/") + set(GMP_LIBRARIES "${DEPS_BASE}/lib/libgmp.a") +endif() + +set(GMP_FOUND TRUE) + +add_library(GMP STATIC IMPORTED GLOBAL) +set_target_properties(GMP PROPERTIES IMPORTED_LOCATION "${GMP_LIBRARIES}") +set_target_properties( + GMP PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GMP_INCLUDE_DIR}" +) + +mark_as_advanced(GMP_FOUND) +mark_as_advanced(GMP_FOUND_SYSTEM) +mark_as_advanced(GMP_INCLUDE_DIR) +mark_as_advanced(GMP_LIBRARIES) -mark_as_advanced(GMP_INCLUDE_DIR GMP_LIBRARIES) -if(GMP_LIBRARIES) - message(STATUS "Found GMP libs: ${GMP_LIBRARIES}") +if(GMP_FOUND_SYSTEM) + message(STATUS "Found GMP ${GMP_VERSION}: ${GMP_LIBRARIES}") +else() + message(STATUS "Building GMP ${GMP_VERSION}: ${GMP_LIBRARIES}") + add_dependencies(GMP GMP-EP) endif() |