You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
3.5 KiB
91 lines
3.5 KiB
# Expects
|
|
# gmp_INCLUDE_DIR
|
|
# gmp_LIB_DIR
|
|
# gmp_LIBRARIES
|
|
if(TARGET mpfr::mpfr)
|
|
return()
|
|
endif()
|
|
|
|
# Download precompiled .dll on Windows
|
|
if(WIN32)
|
|
include(gmp_mpfr)
|
|
# Find_package will look for our downloaded lib on Windows, and system-wide on Linux/macOS
|
|
find_package(MPFR REQUIRED)
|
|
else()
|
|
message(STATUS "Third-party: creating target 'mpfr::mpfr'")
|
|
|
|
# Praying this will work the same as gmp
|
|
if(APPLE)
|
|
# https://gmplib.org/list-archives/gmp-discuss/2020-November/006607.html
|
|
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND CMAKE_OSX_ARCHITECTURES STREQUAL "arm64")
|
|
set(mpfr_BUILD "x86_64-apple-darwin")
|
|
set(mpfr_HOST "arm64-apple-darwin")
|
|
set(mpfr_CFLAGS "--target=arm64-apple-darwin")
|
|
set(mpfr_LDFLAGS "-arch arm64")
|
|
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" AND CMAKE_OSX_ARCHITECTURES STREQUAL "x86_64")
|
|
set(mpfr_HOST "x86_64-apple-darwin")
|
|
set(mpfr_BUILD "arm64-apple-darwin")
|
|
set(mpfr_CFLAGS "--target=x86_64-apple-darwin13.0.0")
|
|
set(mpfr_LDFLAGS "")
|
|
endif()
|
|
endif()
|
|
|
|
include(FetchContent)
|
|
include(ProcessorCount)
|
|
ProcessorCount(Ncpu)
|
|
include(ExternalProject)
|
|
set(prefix ${FETCHCONTENT_BASE_DIR}/mpfr)
|
|
set(mpfr_INSTALL ${prefix}/install)
|
|
set(mpfr_LIBRARY ${mpfr_INSTALL}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}mpfr${CMAKE_STATIC_LIBRARY_SUFFIX})
|
|
set(mpfr_INCLUDE_DIR ${mpfr_INSTALL}/include)
|
|
|
|
# Try to use CONFIGURE_HANDLED_BY_BUILD ON to avoid constantly reconfiguring
|
|
if(${CMAKE_VERSION} VERSION_LESS 3.20)
|
|
# CMake < 3.20, do not use any extra option
|
|
set(mpfr_ExternalProject_Add_extra_options)
|
|
else()
|
|
# CMake >= 3.20
|
|
set(mpfr_ExternalProject_Add_extra_options "CONFIGURE_HANDLED_BY_BUILD;ON")
|
|
endif()
|
|
|
|
ExternalProject_Add(mpfr
|
|
PREFIX ${prefix}
|
|
DEPENDS gmp
|
|
URL https://ftp.gnu.org/gnu/mpfr/mpfr-4.2.0.tar.xz
|
|
URL_MD5 a25091f337f25830c16d2054d74b5af7
|
|
UPDATE_DISCONNECTED true # need this to avoid constant rebuild
|
|
${mpfr_ExternalProject_Add_extra_options} # avoid constant reconfigure
|
|
CONFIGURE_COMMAND
|
|
${CMAKE_COMMAND} -E env
|
|
CFLAGS=${gmp_CFLAGS}
|
|
LDFLAGS=${gmp_LDFLAGS}
|
|
${prefix}/src/mpfr/configure
|
|
--disable-debug --disable-dependency-tracking --disable-silent-rules --enable-cxx --with-pic
|
|
--with-gmp-include=${gmp_INCLUDE_DIR} --with-gmp-lib=${gmp_LIB_DIR}
|
|
--disable-shared
|
|
--prefix=${mpfr_INSTALL}
|
|
--build=${gmp_BUILD}
|
|
--host=${gmp_HOST}
|
|
--disable-shared
|
|
BUILD_COMMAND make -j${Ncpu}
|
|
INSTALL_COMMAND make -j${Ncpu} install
|
|
INSTALL_DIR ${mpfr_INSTALL}
|
|
TEST_COMMAND ""
|
|
BUILD_BYPRODUCTS ${mpfr_LIBRARY}
|
|
)
|
|
#PATCH_COMMAND curl "https://raw.githubusercontent.com/Homebrew/formula-patches/03cf8088210822aa2c1ab544ed58ea04c897d9c4/libtool/configure-big_sur.diff" "|" sed -e "s/configure.orig/configure/g" "|" git apply -v
|
|
ExternalProject_Get_Property(mpfr SOURCE_DIR)
|
|
set(mpfr_LIBRARIES ${mpfr_LIBRARY})
|
|
add_library(mpfr::mpfr INTERFACE IMPORTED GLOBAL)
|
|
file(MAKE_DIRECTORY ${mpfr_INCLUDE_DIR}) # avoid race condition
|
|
target_include_directories(mpfr::mpfr INTERFACE ${mpfr_INCLUDE_DIR})
|
|
target_link_libraries(mpfr::mpfr INTERFACE "${mpfr_LIBRARIES}") # need the quotes to expand list
|
|
# This is necessary to ensure that mpfr appears before gmp in link order.
|
|
# Otherwise undefined reference errors occur at link time on Linux with gcc
|
|
target_link_libraries(mpfr::mpfr INTERFACE "${gmp_LIBRARIES}")
|
|
add_dependencies(mpfr::mpfr mpfr)
|
|
endif()
|
|
|
|
if(NOT TARGET mpfr::mpfr)
|
|
message(FATAL_ERROR "Creation of target 'mpfr::mpfr' failed")
|
|
endif()
|
|
|