|
1 | | -cmake_minimum_required(VERSION 3.6) |
| 1 | +cmake_minimum_required(VERSION 3.11) |
| 2 | +# VERSION 3.11: FetchContent |
2 | 3 |
|
3 | 4 | project(LAPACK) |
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}") |
@@ -412,38 +426,86 @@ function(_display_cpp_implementation_msg name) |
412 | 426 | message( STATUS "For support ${name}++ related question, please email: [email protected]") |
413 | 427 | message(STATUS "----------------") |
414 | 428 | endfunction() |
415 | | -if (BLAS++) |
416 | | - _display_cpp_implementation_msg("BLAS") |
417 | | - include(ExternalProject) |
418 | | - ExternalProject_Add(blaspp |
419 | | - URL https://bitbucket.org/icl/blaspp/downloads/blaspp-2020.10.02.tar.gz |
420 | | - 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 |
421 | | - BUILD_COMMAND ${CMAKE_COMMAND} -E env LIBRARY_PATH=$ENV{LIBRARY_PATH}:${PROJECT_BINARY_DIR}/lib LIB_SUFFIX="" ${CMAKE_COMMAND} --build . |
422 | | - INSTALL_COMMAND ${CMAKE_COMMAND} -E env PREFIX=${PROJECT_BINARY_DIR} LIB_SUFFIX="" ${CMAKE_COMMAND} --install . |
423 | | - ) |
424 | | - ExternalProject_Add_StepDependencies(blaspp build ${BLAS_LIBRARIES}) |
| 429 | + |
| 430 | +if (BLAS++ OR LAPACK++) |
| 431 | + |
| 432 | + if (BLAS++) |
| 433 | + _display_cpp_implementation_msg("BLAS") |
| 434 | + endif() |
| 435 | + |
| 436 | + # Check if population has already been performed |
| 437 | + FetchContent_GetProperties(blaspp) |
| 438 | + if(NOT blaspp_POPULATED) |
| 439 | + # Fetch the content using previously declared details |
| 440 | + FetchContent_Populate(blaspp) |
| 441 | + endif() |
| 442 | + |
| 443 | + # For static builds, we may need to link against a Fortran library |
| 444 | + set(BLAS_Fortran_LIB "") |
| 445 | + if (NOT BLAS_FOUND AND NOT BUILD_SHARED_LIBS) |
| 446 | + if (CMAKE_Fortran_COMPILER_ID MATCHES GNU) |
| 447 | + set(BLAS_Fortran_LIB ";-lgfortran") |
| 448 | + else() |
| 449 | + # TODO: This is incomplete. Fill in the other cases. |
| 450 | + set(BLAS_Fortran_LIB "") |
| 451 | + endif() |
| 452 | + endif() |
| 453 | + |
| 454 | + # Adds target blaspp |
| 455 | + add_custom_target( blaspp ALL |
| 456 | + COMMAND ${CMAKE_COMMAND} |
| 457 | + -B "${blaspp_BINARY_DIR}" |
| 458 | + -D CMAKE_INSTALL_PREFIX="${PROJECT_BINARY_DIR}" |
| 459 | + -D blas_libraries_cached="" |
| 460 | + "-DBLAS_LIBRARIES=\"$<IF:$<BOOL:${BLAS_FOUND}>,${BLAS_LIBRARIES},$<TARGET_FILE:${BLASLIB}>>${BLAS_Fortran_LIB}\"" |
| 461 | + -D lapack_libraries_cached="" |
| 462 | + "-DLAPACK_LIBRARIES=\"$<IF:$<BOOL:${LATESTLAPACK_FOUND}>,${LAPACK_LIBRARIES},$<TARGET_FILE:${LAPACKLIB}>>\"" |
| 463 | + -D build_tests=OFF |
| 464 | + -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} |
| 465 | + COMMAND ${CMAKE_COMMAND} |
| 466 | + --build "${blaspp_BINARY_DIR}" |
| 467 | + --target install |
| 468 | + WORKING_DIRECTORY "${blaspp_SOURCE_DIR}" |
| 469 | + COMMENT "Building BLAS++" |
| 470 | + ) |
| 471 | + |
| 472 | + # Set up dependencies |
| 473 | + if(NOT BLAS_FOUND) |
| 474 | + add_dependencies(blaspp ${BLASLIB}) |
| 475 | + endif() |
| 476 | + if(NOT LATESTLAPACK_FOUND) |
| 477 | + add_dependencies(blaspp ${LAPACKLIB}) |
| 478 | + endif() |
425 | 479 | endif() |
| 480 | + |
426 | 481 | if (LAPACK++) |
427 | | - message (STATUS "linking lapack++ against ${LAPACK_LIBRARIES}") |
428 | 482 | _display_cpp_implementation_msg("LAPACK") |
429 | | - include(ExternalProject) |
430 | | - if (BUILD_SHARED_LIBS) |
431 | | - ExternalProject_Add(lapackpp |
432 | | - URL https://bitbucket.org/icl/lapackpp/downloads/lapackpp-2020.10.02.tar.gz |
433 | | - 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 |
434 | | - BUILD_COMMAND ${CMAKE_COMMAND} -E env LIBRARY_PATH=$ENV{LIBRARY_PATH}:${PROJECT_BINARY_DIR}/lib LIB_SUFFIX="" ${CMAKE_COMMAND} --build . |
435 | | - INSTALL_COMMAND ${CMAKE_COMMAND} -E env PREFIX=${PROJECT_BINARY_DIR} LIB_SUFFIX="" ${CMAKE_COMMAND} --install . |
436 | | - ) |
437 | | - else () |
438 | | -# FIXME this does not really work as the libraries list gets converted to a semicolon-separated list somewhere in the lapack++ build files |
439 | | - ExternalProject_Add(lapackpp |
440 | | - URL https://bitbucket.org/icl/lapackpp/downloads/lapackpp-2020.10.02.tar.gz |
441 | | - 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 |
442 | | - BUILD_COMMAND env LIBRARY_PATH=$ENV{LIBRARY_PATH}:${PROJECT_BINARY_DIR}/lib LIB_SUFFIX="" ${CMAKE_COMMAND} --build . |
443 | | - INSTALL_COMMAND ${CMAKE_COMMAND} -E env PREFIX=${PROJECT_BINARY_DIR} LIB_SUFFIX="" ${CMAKE_COMMAND} --install . |
444 | | - ) |
| 483 | + |
| 484 | + # Check if population has already been performed |
| 485 | + FetchContent_GetProperties(lapackpp) |
| 486 | + if(NOT lapackpp_POPULATED) |
| 487 | + # Fetch the content using previously declared details |
| 488 | + FetchContent_Populate(lapackpp) |
445 | 489 | endif() |
446 | | - ExternalProject_Add_StepDependencies(lapackpp build blaspp ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES}) |
| 490 | + |
| 491 | + # Adds target lapackpp |
| 492 | + add_custom_target( lapackpp ALL |
| 493 | + COMMAND ${CMAKE_COMMAND} |
| 494 | + -B "${lapackpp_BINARY_DIR}" |
| 495 | + -D CMAKE_INSTALL_PREFIX="${PROJECT_BINARY_DIR}" |
| 496 | + -D lapack_libraries_cached="" |
| 497 | + "-DLAPACK_LIBRARIES=\"$<IF:$<BOOL:${LATESTLAPACK_FOUND}>,${LAPACK_LIBRARIES},$<TARGET_FILE:${LAPACKLIB}>>\"" |
| 498 | + -D build_tests=OFF |
| 499 | + -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} |
| 500 | + COMMAND ${CMAKE_COMMAND} |
| 501 | + --build "${lapackpp_BINARY_DIR}" |
| 502 | + --target install |
| 503 | + WORKING_DIRECTORY "${lapackpp_SOURCE_DIR}" |
| 504 | + COMMENT "Building LAPACK++" |
| 505 | + ) |
| 506 | + |
| 507 | + # Set up dependencies |
| 508 | + add_dependencies(lapackpp blaspp) |
447 | 509 | endif() |
448 | 510 |
|
449 | 511 | # -------------------------------------------------- |
@@ -557,41 +619,36 @@ if (LAPACK++) |
557 | 619 | DESTINATION ${CMAKE_INSTALL_LIBDIR} |
558 | 620 | FILES_MATCHING REGEX "liblapackpp.(a|so)$" |
559 | 621 | ) |
560 | | - install( |
561 | | - DIRECTORY "${PROJECT_BINARY_DIR}/lapackpp-prefix/src/lapackpp/include/" |
562 | | - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" |
563 | | - FILES_MATCHING REGEX "\\.(h|hh)$" |
564 | | - ) |
565 | 622 | write_basic_package_version_file( |
566 | 623 | "lapackppConfigVersion.cmake" |
567 | | - VERSION 2020.10.02 |
| 624 | + VERSION 2023.08.25 |
568 | 625 | COMPATIBILITY AnyNewerVersion |
569 | 626 | ) |
570 | 627 | install( |
571 | | - FILES "${CMAKE_CURRENT_BINARY_DIR}/lib/lapackpp/lapackppConfig.cmake" |
572 | | - "${CMAKE_CURRENT_BINARY_DIR}/lib/lapackpp/lapackppConfigVersion.cmake" |
| 628 | + FILES "${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/lapackpp/lapackppConfig.cmake" |
| 629 | + "${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/lapackpp/lapackppConfigVersion.cmake" |
573 | 630 | DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/" |
574 | 631 | ) |
575 | 632 |
|
576 | 633 | endif() |
577 | 634 | if (BLAS++) |
| 635 | + install( |
| 636 | + DIRECTORY "${LAPACK_BINARY_DIR}/lib/" |
| 637 | + DESTINATION ${CMAKE_INSTALL_LIBDIR} |
| 638 | + FILES_MATCHING REGEX "libblaspp.(a|so)$" |
| 639 | + ) |
578 | 640 | write_basic_package_version_file( |
579 | 641 | "blasppConfigVersion.cmake" |
580 | | - VERSION 2020.10.02 |
| 642 | + VERSION 2023.08.25 |
581 | 643 | COMPATIBILITY AnyNewerVersion |
582 | 644 | ) |
583 | 645 | install( |
584 | | - FILES "${CMAKE_CURRENT_BINARY_DIR}/lib/blaspp/blasppConfig.cmake" |
585 | | - "${CMAKE_CURRENT_BINARY_DIR}/lib/blaspp/blasppConfigVersion.cmake" |
| 646 | + FILES "${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/blaspp/blasppConfig.cmake" |
| 647 | + "${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/blaspp/blasppConfigVersion.cmake" |
586 | 648 | DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/" |
587 | 649 | ) |
588 | 650 | install( |
589 | | - DIRECTORY "${LAPACK_BINARY_DIR}/lib/" |
590 | | - DESTINATION ${CMAKE_INSTALL_LIBDIR} |
591 | | - FILES_MATCHING REGEX "libblaspp.(a|so)$" |
592 | | - ) |
593 | | - install( |
594 | | - DIRECTORY "${PROJECT_BINARY_DIR}/blaspp-prefix/src/blaspp/include/" |
| 651 | + DIRECTORY "${PROJECT_BINARY_DIR}/include/" |
595 | 652 | DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" |
596 | 653 | FILES_MATCHING REGEX "\\.(h|hh)$" |
597 | 654 | ) |
|
0 commit comments