|
1 | | -cmake_minimum_required(VERSION 3.2) |
| 1 | +cmake_minimum_required(VERSION 3.11) |
| 2 | +# VERSION 3.11: FetchContent |
2 | 3 |
|
3 | 4 | project(LAPACK Fortran C) |
4 | 5 |
|
|
10 | 11 | ${LAPACK_MAJOR_VERSION}.${LAPACK_MINOR_VERSION}.${LAPACK_PATCH_VERSION} |
11 | 12 | ) |
12 | 13 |
|
| 14 | +# Dependencies on other projects |
| 15 | +include(FetchContent) |
| 16 | +FetchContent_Declare( |
| 17 | + blaspp |
| 18 | + GIT_REPOSITORY https://github.com/icl-utk-edu/blaspp |
| 19 | + GIT_TAG f8f983d5b45a8f366aae41fbe9888b14cbae20f8 # v2023.08.25 |
| 20 | +) |
| 21 | +FetchContent_Declare( |
| 22 | + lapackpp |
| 23 | + GIT_REPOSITORY https://github.com/icl-utk-edu/lapackpp |
| 24 | + GIT_TAG 62680a16a9aba2a426e3d089dd13e18bfd140c74 # v2023.08.25 |
| 25 | +) |
| 26 | + |
13 | 27 | # Allow setting a prefix for the library names |
14 | 28 | set(CMAKE_STATIC_LIBRARY_PREFIX "lib${LIBRARY_PREFIX}") |
15 | 29 | set(CMAKE_SHARED_LIBRARY_PREFIX "lib${LIBRARY_PREFIX}") |
@@ -472,38 +486,86 @@ function(_display_cpp_implementation_msg name) |
472 | 486 | message( STATUS "For support ${name}++ related question, please email: [email protected]") |
473 | 487 | message(STATUS "----------------") |
474 | 488 | endfunction() |
475 | | -if (BLAS++) |
476 | | - _display_cpp_implementation_msg("BLAS") |
477 | | - include(ExternalProject) |
478 | | - ExternalProject_Add(blaspp |
479 | | - URL https://bitbucket.org/icl/blaspp/downloads/blaspp-2020.10.02.tar.gz |
480 | | - CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env LIBRARY_PATH=$ENV{LIBRARY_PATH}:${CMAKE_BINARY_DIR}/lib LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH}:${PROJECT_BINARY_DIR}/lib ${CMAKE_COMMAND} -DCMAKE_INSTALL_PREFIX=${PROJECT_BINARY_DIR} -DCMAKE_INSTALL_LIBDIR=lib -Dbuild_tests=OFF -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} ${PROJECT_BINARY_DIR}/blaspp-prefix/src/blaspp |
481 | | - BUILD_COMMAND ${CMAKE_COMMAND} -E env LIBRARY_PATH=$ENV{LIBRARY_PATH}:${PROJECT_BINARY_DIR}/lib LIB_SUFFIX="" ${CMAKE_COMMAND} --build . |
482 | | - INSTALL_COMMAND ${CMAKE_COMMAND} -E env PREFIX=${PROJECT_BINARY_DIR} LIB_SUFFIX="" ${CMAKE_COMMAND} --install . |
483 | | - ) |
484 | | - ExternalProject_Add_StepDependencies(blaspp build ${BLAS_LIBRARIES}) |
| 489 | + |
| 490 | +if (BLAS++ OR LAPACK++) |
| 491 | + |
| 492 | + if (BLAS++) |
| 493 | + _display_cpp_implementation_msg("BLAS") |
| 494 | + endif() |
| 495 | + |
| 496 | + # Check if population has already been performed |
| 497 | + FetchContent_GetProperties(blaspp) |
| 498 | + if(NOT blaspp_POPULATED) |
| 499 | + # Fetch the content using previously declared details |
| 500 | + FetchContent_Populate(blaspp) |
| 501 | + endif() |
| 502 | + |
| 503 | + # For static builds, we may need to link against a Fortran library |
| 504 | + set(BLAS_Fortran_LIB "") |
| 505 | + if (NOT BLAS_FOUND AND NOT BUILD_SHARED_LIBS) |
| 506 | + if (CMAKE_Fortran_COMPILER_ID MATCHES GNU) |
| 507 | + set(BLAS_Fortran_LIB ";-lgfortran") |
| 508 | + else() |
| 509 | + # TODO: This is incomplete. Fill in the other cases. |
| 510 | + set(BLAS_Fortran_LIB "") |
| 511 | + endif() |
| 512 | + endif() |
| 513 | + |
| 514 | + # Adds target blaspp |
| 515 | + add_custom_target( blaspp ALL |
| 516 | + COMMAND ${CMAKE_COMMAND} |
| 517 | + -B "${blaspp_BINARY_DIR}" |
| 518 | + -D CMAKE_INSTALL_PREFIX="${PROJECT_BINARY_DIR}" |
| 519 | + -D blas_libraries_cached="" |
| 520 | + "-DBLAS_LIBRARIES=\"$<IF:$<BOOL:${BLAS_FOUND}>,${BLAS_LIBRARIES},$<TARGET_FILE:${BLASLIB}>>${BLAS_Fortran_LIB}\"" |
| 521 | + -D lapack_libraries_cached="" |
| 522 | + "-DLAPACK_LIBRARIES=\"$<IF:$<BOOL:${LATESTLAPACK_FOUND}>,${LAPACK_LIBRARIES},$<TARGET_FILE:${LAPACKLIB}>>\"" |
| 523 | + -D build_tests=OFF |
| 524 | + -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} |
| 525 | + COMMAND ${CMAKE_COMMAND} |
| 526 | + --build "${blaspp_BINARY_DIR}" |
| 527 | + --target install |
| 528 | + WORKING_DIRECTORY "${blaspp_SOURCE_DIR}" |
| 529 | + COMMENT "Building BLAS++" |
| 530 | + ) |
| 531 | + |
| 532 | + # Set up dependencies |
| 533 | + if(NOT BLAS_FOUND) |
| 534 | + add_dependencies(blaspp ${BLASLIB}) |
| 535 | + endif() |
| 536 | + if(NOT LATESTLAPACK_FOUND) |
| 537 | + add_dependencies(blaspp ${LAPACKLIB}) |
| 538 | + endif() |
485 | 539 | endif() |
| 540 | + |
486 | 541 | if (LAPACK++) |
487 | | - message (STATUS "linking lapack++ against ${LAPACK_LIBRARIES}") |
488 | 542 | _display_cpp_implementation_msg("LAPACK") |
489 | | - include(ExternalProject) |
490 | | - if (BUILD_SHARED_LIBS) |
491 | | - ExternalProject_Add(lapackpp |
492 | | - URL https://bitbucket.org/icl/lapackpp/downloads/lapackpp-2020.10.02.tar.gz |
493 | | - CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env LIBRARY_PATH=$ENV{LIBRARY_PATH}:${CMAKE_BINARY_DIR}/lib LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH}:${PROJECT_BINARY_DIR}/lib ${CMAKE_COMMAND} -DCMAKE_INSTALL_PREFIX=${PROJECT_BINARY_DIR} -DCMAKE_INSTALL_LIBDIR=lib -DLAPACK_LIBRARIES=${LAPACK_LIBRARIES} -Dbuild_tests=OFF -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} ${PROJECT_BINARY_DIR}/lapackpp-prefix/src/lapackpp |
494 | | - BUILD_COMMAND ${CMAKE_COMMAND} -E env LIBRARY_PATH=$ENV{LIBRARY_PATH}:${PROJECT_BINARY_DIR}/lib LIB_SUFFIX="" ${CMAKE_COMMAND} --build . |
495 | | - INSTALL_COMMAND ${CMAKE_COMMAND} -E env PREFIX=${PROJECT_BINARY_DIR} LIB_SUFFIX="" ${CMAKE_COMMAND} --install . |
496 | | - ) |
497 | | - else () |
498 | | -# FIXME this does not really work as the libraries list gets converted to a semicolon-separated list somewhere in the lapack++ build files |
499 | | - ExternalProject_Add(lapackpp |
500 | | - URL https://bitbucket.org/icl/lapackpp/downloads/lapackpp-2020.10.02.tar.gz |
501 | | - CONFIGURE_COMMAND env LIBRARY_PATH=$ENV{LIBRARY_PATH}:${CMAKE_BINARY_DIR}/lib LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH}:${PROJECT_BINARY_DIR}/lib ${CMAKE_COMMAND} -DCMAKE_INSTALL_PREFIX=${PROJECT_BINARY_DIR} -DCMAKE_INSTALL_LIBDIR=lib -DLAPACK_LIBRARIES="${PROJECT_BINARY_DIR}/lib/liblapack.a -lgfortran" -Dbuild_tests=OFF -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} ${PROJECT_BINARY_DIR}/lapackpp-prefix/src/lapackpp |
502 | | - BUILD_COMMAND env LIBRARY_PATH=$ENV{LIBRARY_PATH}:${PROJECT_BINARY_DIR}/lib LIB_SUFFIX="" ${CMAKE_COMMAND} --build . |
503 | | - INSTALL_COMMAND ${CMAKE_COMMAND} -E env PREFIX=${PROJECT_BINARY_DIR} LIB_SUFFIX="" ${CMAKE_COMMAND} --install . |
504 | | - ) |
| 543 | + |
| 544 | + # Check if population has already been performed |
| 545 | + FetchContent_GetProperties(lapackpp) |
| 546 | + if(NOT lapackpp_POPULATED) |
| 547 | + # Fetch the content using previously declared details |
| 548 | + FetchContent_Populate(lapackpp) |
505 | 549 | endif() |
506 | | - ExternalProject_Add_StepDependencies(lapackpp build blaspp ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES}) |
| 550 | + |
| 551 | + # Adds target lapackpp |
| 552 | + add_custom_target( lapackpp ALL |
| 553 | + COMMAND ${CMAKE_COMMAND} |
| 554 | + -B "${lapackpp_BINARY_DIR}" |
| 555 | + -D CMAKE_INSTALL_PREFIX="${PROJECT_BINARY_DIR}" |
| 556 | + -D lapack_libraries_cached="" |
| 557 | + "-DLAPACK_LIBRARIES=\"$<IF:$<BOOL:${LATESTLAPACK_FOUND}>,${LAPACK_LIBRARIES},$<TARGET_FILE:${LAPACKLIB}>>\"" |
| 558 | + -D build_tests=OFF |
| 559 | + -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} |
| 560 | + COMMAND ${CMAKE_COMMAND} |
| 561 | + --build "${lapackpp_BINARY_DIR}" |
| 562 | + --target install |
| 563 | + WORKING_DIRECTORY "${lapackpp_SOURCE_DIR}" |
| 564 | + COMMENT "Building LAPACK++" |
| 565 | + ) |
| 566 | + |
| 567 | + # Set up dependencies |
| 568 | + add_dependencies(lapackpp blaspp) |
507 | 569 | endif() |
508 | 570 |
|
509 | 571 | # -------------------------------------------------- |
@@ -617,41 +679,36 @@ if (LAPACK++) |
617 | 679 | DESTINATION ${CMAKE_INSTALL_LIBDIR} |
618 | 680 | FILES_MATCHING REGEX "liblapackpp.(a|so)$" |
619 | 681 | ) |
620 | | - install( |
621 | | - DIRECTORY "${PROJECT_BINARY_DIR}/lapackpp-prefix/src/lapackpp/include/" |
622 | | - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" |
623 | | - FILES_MATCHING REGEX "\\.(h|hh)$" |
624 | | - ) |
625 | 682 | write_basic_package_version_file( |
626 | 683 | "lapackppConfigVersion.cmake" |
627 | | - VERSION 2020.10.02 |
| 684 | + VERSION 2023.08.25 |
628 | 685 | COMPATIBILITY AnyNewerVersion |
629 | 686 | ) |
630 | 687 | install( |
631 | | - FILES "${CMAKE_CURRENT_BINARY_DIR}/lib/lapackpp/lapackppConfig.cmake" |
632 | | - "${CMAKE_CURRENT_BINARY_DIR}/lib/lapackpp/lapackppConfigVersion.cmake" |
| 688 | + FILES "${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/lapackpp/lapackppConfig.cmake" |
| 689 | + "${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/lapackpp/lapackppConfigVersion.cmake" |
633 | 690 | DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/" |
634 | 691 | ) |
635 | 692 |
|
636 | 693 | endif() |
637 | 694 | if (BLAS++) |
| 695 | + install( |
| 696 | + DIRECTORY "${LAPACK_BINARY_DIR}/lib/" |
| 697 | + DESTINATION ${CMAKE_INSTALL_LIBDIR} |
| 698 | + FILES_MATCHING REGEX "libblaspp.(a|so)$" |
| 699 | + ) |
638 | 700 | write_basic_package_version_file( |
639 | 701 | "blasppConfigVersion.cmake" |
640 | | - VERSION 2020.10.02 |
| 702 | + VERSION 2023.08.25 |
641 | 703 | COMPATIBILITY AnyNewerVersion |
642 | 704 | ) |
643 | 705 | install( |
644 | | - FILES "${CMAKE_CURRENT_BINARY_DIR}/lib/blaspp/blasppConfig.cmake" |
645 | | - "${CMAKE_CURRENT_BINARY_DIR}/lib/blaspp/blasppConfigVersion.cmake" |
| 706 | + FILES "${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/blaspp/blasppConfig.cmake" |
| 707 | + "${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/blaspp/blasppConfigVersion.cmake" |
646 | 708 | DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/" |
647 | 709 | ) |
648 | 710 | install( |
649 | | - DIRECTORY "${LAPACK_BINARY_DIR}/lib/" |
650 | | - DESTINATION ${CMAKE_INSTALL_LIBDIR} |
651 | | - FILES_MATCHING REGEX "libblaspp.(a|so)$" |
652 | | - ) |
653 | | - install( |
654 | | - DIRECTORY "${PROJECT_BINARY_DIR}/blaspp-prefix/src/blaspp/include/" |
| 711 | + DIRECTORY "${PROJECT_BINARY_DIR}/include/" |
655 | 712 | DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" |
656 | 713 | FILES_MATCHING REGEX "\\.(h|hh)$" |
657 | 714 | ) |
|
0 commit comments