Skip to content

Commit

Permalink
Merge pull request #226 from bluescarni/pr/build_iter
Browse files Browse the repository at this point in the history
(WIP) Build system improvements
  • Loading branch information
bluescarni committed Apr 24, 2020
2 parents 13839be + 1af2a82 commit c8dcf41
Show file tree
Hide file tree
Showing 17 changed files with 148 additions and 229 deletions.
28 changes: 12 additions & 16 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -287,20 +287,20 @@ target_include_directories(mp++ PUBLIC
# Find GMP first of all. We will make mp++ link to the imported
# target later, because of linker sensitivity to the linking order
# on some platforms (see the comment below).
find_package(GMP REQUIRED)
find_package(mp++_GMP REQUIRED)

# Optional dependency on MPFR.
if(MPPP_WITH_MPFR)
find_package(MPFR REQUIRED)
target_link_libraries(mp++ PUBLIC MPFR::MPFR)
find_package(mp++_MPFR REQUIRED)
target_link_libraries(mp++ PUBLIC mp++::MPFR)
set(MPPP_ENABLE_MPFR "#define MPPP_WITH_MPFR")
endif()

# Optional dependency on Arb.
if(MPPP_WITH_ARB)
find_package(FLINT REQUIRED)
find_package(Arb REQUIRED)
target_link_libraries(mp++ PRIVATE Arb::Arb FLINT::FLINT)
find_package(mp++_FLINT REQUIRED)
find_package(mp++_Arb REQUIRED)
target_link_libraries(mp++ PRIVATE mp++::Arb mp++::FLINT)
set(MPPP_ENABLE_ARB "#define MPPP_WITH_ARB")
endif()

Expand All @@ -312,19 +312,15 @@ if(MPPP_WITH_QUADMATH)
message(FATAL_ERROR "The 'MPPP_WITH_QUADMATH' option was enabled but the '__float128' type does not exist.")
endif()
unset(_MPPP_FLOAT128_EXISTS)
find_package(Quadmath REQUIRED COMPONENTS libquadmath header)
# NOTE: both the header and the library functions are used
# only within libmp++. Thus, consumers of mp++ won't
# need to link to them.
target_link_libraries(mp++ PRIVATE Quadmath::libquadmath)
target_link_libraries(mp++ PRIVATE Quadmath::header)
find_package(mp++_quadmath REQUIRED)
target_link_libraries(mp++ PRIVATE mp++::quadmath)
set(MPPP_ENABLE_QUADMATH "#define MPPP_WITH_QUADMATH")
endif()

# Mandatory dependency on GMP.
# NOTE: depend on GMP *after* optionally depending on MPFR, as the order
# of the libraries matters on some platforms.
target_link_libraries(mp++ PUBLIC GMP::GMP)
target_link_libraries(mp++ PUBLIC mp++::GMP)

# Configure config.hpp.
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/config.hpp.in" "${CMAKE_CURRENT_BINARY_DIR}/include/mp++/config.hpp" @ONLY)
Expand All @@ -347,13 +343,13 @@ install(TARGETS mp++
# Setup of the optional deps.
set(_MPPP_CONFIG_OPTIONAL_DEPS)
if(MPPP_WITH_MPFR)
set(_MPPP_CONFIG_OPTIONAL_DEPS "${_MPPP_CONFIG_OPTIONAL_DEPS}find_package(MPFR REQUIRED)\n")
set(_MPPP_CONFIG_OPTIONAL_DEPS "${_MPPP_CONFIG_OPTIONAL_DEPS}find_package(mp++_MPFR REQUIRED)\n")
endif()
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/mp++-config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/mp++-config.cmake" @ONLY)
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/mp++-config.cmake"
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindGMP.cmake"
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindMPFR.cmake"
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/Findmp++_GMP.cmake"
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/Findmp++_MPFR.cmake"
DESTINATION "${MPPP_INSTALL_LIBDIR}/cmake/mp++")
install(EXPORT mp++_export NAMESPACE mp++:: DESTINATION "${MPPP_INSTALL_LIBDIR}/cmake/mp++")
# Take care of versioning.
Expand Down
2 changes: 1 addition & 1 deletion appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ build_script:
- if [%BUILD_TYPE%]==[MSVC15_clang_64] cmake .. -GNinja -DCMAKE_CXX_COMPILER=clang-cl -DCMAKE_C_COMPILER=clang-cl -DCMAKE_BUILD_TYPE=Debug -DMPPP_BUILD_TESTS=yes -DMPPP_WITH_MPFR=yes -DMPPP_BUILD_STATIC_LIBRARY=yes -DCMAKE_CXX_STANDARD=17
- if [%BUILD_TYPE%]==[MSVC15_clang_64] cmake --build . -- -v

- if [%BUILD_TYPE%]==[MinGW] if [%PLATFORM%]==[x64] cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-Os -fconcepts" -DMPPP_BUILD_TESTS=YES -DMPPP_WITH_MPFR=YES -DMPPP_WITH_QUADMATH=yes -DGMP_INCLUDE_DIR=C:/local/include -DGMP_LIBRARY=C:/local/lib/libgmp.a -DMPFR_INCLUDE_DIR=C:/local/include -DMPFR_LIBRARY=C:/local/lib/libmpfr.a -DMPPP_TEST_NSPLIT=%TEST_NSPLIT% -DMPPP_TEST_SPLIT_NUM=%SPLIT_TEST_NUM% ..
- if [%BUILD_TYPE%]==[MinGW] if [%PLATFORM%]==[x64] cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-Os -fconcepts" -DMPPP_BUILD_TESTS=YES -DMPPP_WITH_MPFR=YES -DMPPP_WITH_QUADMATH=yes -DMPPP_GMP_INCLUDE_DIR=C:/local/include -DMPPP_GMP_LIBRARY=C:/local/lib/libgmp.a -DMPPP_MPFR_INCLUDE_DIR=C:/local/include -DMPPP_MPFR_LIBRARY=C:/local/lib/libmpfr.a -DMPPP_TEST_NSPLIT=%TEST_NSPLIT% -DMPPP_TEST_SPLIT_NUM=%SPLIT_TEST_NUM% ..
#- if [%COMPILER%]==[MinGW] cmake --build . --config %BUILD_TYPE% --target all
- if [%BUILD_TYPE%]==[MinGW] mingw32-make -j2 VERBOSE=1

Expand Down
4 changes: 2 additions & 2 deletions benchmark/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ if(NOT TARGET Boost::boost)
endif()

if(MPPP_BENCHMARK_FLINT)
find_package(FLINT REQUIRED)
find_package(mp++_FLINT REQUIRED)
endif()

# Custom target to run all benchmarks.
Expand All @@ -24,7 +24,7 @@ function(ADD_MPPP_BENCHMARK arg1)
target_compile_options(${arg1} PRIVATE "-DMPPP_BENCHMARK_BOOST")
endif()
if(MPPP_BENCHMARK_FLINT)
target_link_libraries(${arg1} PRIVATE FLINT::FLINT)
target_link_libraries(${arg1} PRIVATE mp++::FLINT)
target_compile_options(${arg1} PRIVATE "-DMPPP_BENCHMARK_FLINT")
endif()
target_include_directories(${arg1} PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
Expand Down
147 changes: 0 additions & 147 deletions cmake/FindQuadmath.cmake

This file was deleted.

20 changes: 10 additions & 10 deletions cmake/FindArb.cmake → cmake/Findmp++_Arb.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -28,23 +28,23 @@
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# ------------------------------------------------------------------------------------------

if(Arb_INCLUDE_DIR AND Arb_LIBRARY)
if(MPPP_ARB_INCLUDE_DIR AND MPPP_ARB_LIBRARY)
# Already in cache, be silent
set(Arb_FIND_QUIETLY TRUE)
set(mp++_Arb_FIND_QUIETLY TRUE)
endif()

find_path(Arb_INCLUDE_DIR NAMES arb.h)
find_library(Arb_LIBRARY NAMES arb)
find_path(MPPP_ARB_INCLUDE_DIR NAMES arb.h)
find_library(MPPP_ARB_LIBRARY NAMES arb)

include(FindPackageHandleStandardArgs)

find_package_handle_standard_args(Arb DEFAULT_MSG Arb_INCLUDE_DIR Arb_LIBRARY)
find_package_handle_standard_args(mp++_Arb DEFAULT_MSG MPPP_ARB_INCLUDE_DIR MPPP_ARB_LIBRARY)

mark_as_advanced(Arb_INCLUDE_DIR Arb_LIBRARY)
mark_as_advanced(MPPP_ARB_INCLUDE_DIR MPPP_ARB_LIBRARY)

# NOTE: this has been adapted from CMake's FindPNG.cmake.
if(Arb_FOUND AND NOT TARGET Arb::Arb)
add_library(Arb::Arb UNKNOWN IMPORTED)
set_target_properties(Arb::Arb PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${Arb_INCLUDE_DIR}"
IMPORTED_LINK_INTERFACE_LANGUAGES "C" IMPORTED_LOCATION "${Arb_LIBRARY}")
if(mp++_Arb_FOUND AND NOT TARGET mp++::Arb)
add_library(mp++::Arb UNKNOWN IMPORTED)
set_target_properties(mp++::Arb PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${MPPP_ARB_INCLUDE_DIR}"
IMPORTED_LINK_INTERFACE_LANGUAGES "C" IMPORTED_LOCATION "${MPPP_ARB_LIBRARY}")
endif()
20 changes: 10 additions & 10 deletions cmake/FindFLINT.cmake → cmake/Findmp++_FLINT.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -28,24 +28,24 @@
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# ------------------------------------------------------------------------------------------

if(FLINT_INCLUDE_DIR AND FLINT_LIBRARY)
if(MPPP_FLINT_INCLUDE_DIR AND MPPP_FLINT_LIBRARY)
# Already in cache, be silent
set(FLINT_FIND_QUIETLY TRUE)
set(mp++_FLINT_FIND_QUIETLY TRUE)
endif()

find_path(FLINT_INCLUDE_DIR NAMES flint/flint.h)
find_library(FLINT_LIBRARY NAMES flint)
find_path(MPPP_FLINT_INCLUDE_DIR NAMES flint/flint.h)
find_library(MPPP_FLINT_LIBRARY NAMES flint)

include(FindPackageHandleStandardArgs)

find_package_handle_standard_args(FLINT DEFAULT_MSG FLINT_INCLUDE_DIR FLINT_LIBRARY)
find_package_handle_standard_args(mp++_FLINT DEFAULT_MSG MPPP_FLINT_INCLUDE_DIR MPPP_FLINT_LIBRARY)

mark_as_advanced(FLINT_INCLUDE_DIR FLINT_LIBRARY)
mark_as_advanced(MPPP_FLINT_INCLUDE_DIR MPPP_FLINT_LIBRARY)

# NOTE: this has been adapted from CMake's FindPNG.cmake.
if(FLINT_FOUND AND NOT TARGET FLINT::FLINT)
add_library(FLINT::FLINT UNKNOWN IMPORTED)
set_target_properties(FLINT::FLINT PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FLINT_INCLUDE_DIR}"
if(mp++_FLINT_FOUND AND NOT TARGET mp++::FLINT)
add_library(mp++::FLINT UNKNOWN IMPORTED)
set_target_properties(mp++::FLINT PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${MPPP_FLINT_INCLUDE_DIR}"
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
IMPORTED_LOCATION "${FLINT_LIBRARY}")
IMPORTED_LOCATION "${MPPP_FLINT_LIBRARY}")
endif()
20 changes: 10 additions & 10 deletions cmake/FindGMP.cmake → cmake/Findmp++_GMP.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -28,23 +28,23 @@
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# ------------------------------------------------------------------------------------------

if(GMP_INCLUDE_DIR AND GMP_LIBRARY)
if(MPPP_GMP_INCLUDE_DIR AND MPPP_GMP_LIBRARY)
# Already in cache, be silent
set(GMP_FIND_QUIETLY TRUE)
set(mp++_GMP_FIND_QUIETLY TRUE)
endif()

find_path(GMP_INCLUDE_DIR NAMES gmp.h)
find_library(GMP_LIBRARY NAMES gmp mpir)
find_path(MPPP_GMP_INCLUDE_DIR NAMES gmp.h)
find_library(MPPP_GMP_LIBRARY NAMES gmp mpir)

include(FindPackageHandleStandardArgs)

find_package_handle_standard_args(GMP DEFAULT_MSG GMP_INCLUDE_DIR GMP_LIBRARY)
find_package_handle_standard_args(mp++_GMP DEFAULT_MSG MPPP_GMP_INCLUDE_DIR MPPP_GMP_LIBRARY)

mark_as_advanced(GMP_INCLUDE_DIR GMP_LIBRARY)
mark_as_advanced(MPPP_GMP_INCLUDE_DIR MPPP_GMP_LIBRARY)

# NOTE: this has been adapted from CMake's FindPNG.cmake.
if(GMP_FOUND AND NOT TARGET GMP::GMP)
add_library(GMP::GMP UNKNOWN IMPORTED)
set_target_properties(GMP::GMP PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GMP_INCLUDE_DIR}"
IMPORTED_LINK_INTERFACE_LANGUAGES "C" IMPORTED_LOCATION "${GMP_LIBRARY}")
if(mp++_GMP_FOUND AND NOT TARGET mp++::GMP)
add_library(mp++::GMP UNKNOWN IMPORTED)
set_target_properties(mp++::GMP PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${MPPP_GMP_INCLUDE_DIR}"
IMPORTED_LINK_INTERFACE_LANGUAGES "C" IMPORTED_LOCATION "${MPPP_GMP_LIBRARY}")
endif()
20 changes: 10 additions & 10 deletions cmake/FindMPFR.cmake → cmake/Findmp++_MPFR.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -28,23 +28,23 @@
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# ------------------------------------------------------------------------------------------

if(MPFR_INCLUDE_DIR AND MPFR_LIBRARY)
if(MPPP_MPFR_INCLUDE_DIR AND MPPP_MPFR_LIBRARY)
# Already in cache, be silent
set(MPFR_FIND_QUIETLY TRUE)
set(mp++_MPFR_FIND_QUIETLY TRUE)
endif()

find_path(MPFR_INCLUDE_DIR NAMES mpfr.h)
find_library(MPFR_LIBRARY NAMES mpfr)
find_path(MPPP_MPFR_INCLUDE_DIR NAMES mpfr.h)
find_library(MPPP_MPFR_LIBRARY NAMES mpfr)

include(FindPackageHandleStandardArgs)

find_package_handle_standard_args(MPFR DEFAULT_MSG MPFR_INCLUDE_DIR MPFR_LIBRARY)
find_package_handle_standard_args(mp++_MPFR DEFAULT_MSG MPPP_MPFR_INCLUDE_DIR MPPP_MPFR_LIBRARY)

mark_as_advanced(MPFR_INCLUDE_DIR MPFR_LIBRARY)
mark_as_advanced(MPPP_MPFR_INCLUDE_DIR MPPP_MPFR_LIBRARY)

# NOTE: this has been adapted from CMake's FindPNG.cmake.
if(MPFR_FOUND AND NOT TARGET MPFR::MPFR)
add_library(MPFR::MPFR UNKNOWN IMPORTED)
set_target_properties(MPFR::MPFR PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${MPFR_INCLUDE_DIR}"
IMPORTED_LINK_INTERFACE_LANGUAGES "C" IMPORTED_LOCATION "${MPFR_LIBRARY}")
if(mp++_MPFR_FOUND AND NOT TARGET mp++::MPFR)
add_library(mp++::MPFR UNKNOWN IMPORTED)
set_target_properties(mp++::MPFR PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${MPPP_MPFR_INCLUDE_DIR}"
IMPORTED_LINK_INTERFACE_LANGUAGES "C" IMPORTED_LOCATION "${MPPP_MPFR_LIBRARY}")
endif()

0 comments on commit c8dcf41

Please sign in to comment.