|
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,78 @@ 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 | + set( BLASPP_BLAS_LIBRARIES "-D BLA_VENDOR=Generic" ) |
| 504 | + if (NOT BUILD_SHARED_LIBS) |
| 505 | + set( BLASPP_BLAS_LIBRARIES "-D BLAS_LIBRARIES=\"${BLAS_LIBRARIES}\"" ) |
| 506 | + endif() |
| 507 | + |
| 508 | + # Adds target blaspp |
| 509 | + add_custom_target( blaspp ALL |
| 510 | + COMMAND ${CMAKE_COMMAND} |
| 511 | + -B "${blaspp_BINARY_DIR}" |
| 512 | + -D CMAKE_PREFIX_PATH="${PROJECT_BINARY_DIR};${PROJECT_BINARY_DIR}/lib" |
| 513 | + -D CMAKE_INSTALL_PREFIX="${PROJECT_BINARY_DIR}" |
| 514 | + "${BLASPP_BLAS_LIBRARIES}" |
| 515 | + -D build_tests=OFF |
| 516 | + -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} |
| 517 | + COMMAND ${CMAKE_COMMAND} |
| 518 | + --build "${blaspp_BINARY_DIR}" |
| 519 | + --target install |
| 520 | + WORKING_DIRECTORY "${blaspp_SOURCE_DIR}" |
| 521 | + COMMENT "Building BLAS++" |
| 522 | + ) |
| 523 | + |
| 524 | + # Set up dependencies |
| 525 | + if(NOT BLAS_FOUND) |
| 526 | + add_dependencies(blaspp ${BLASLIB}) |
| 527 | + endif() |
| 528 | + if(NOT LATESTLAPACK_FOUND) |
| 529 | + add_dependencies(blaspp ${LAPACKLIB}) |
| 530 | + endif() |
485 | 531 | endif() |
| 532 | + |
486 | 533 | if (LAPACK++) |
487 | | - message (STATUS "linking lapack++ against ${LAPACK_LIBRARIES}") |
488 | 534 | _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 | | - ) |
| 535 | + |
| 536 | + # Check if population has already been performed |
| 537 | + FetchContent_GetProperties(lapackpp) |
| 538 | + if(NOT lapackpp_POPULATED) |
| 539 | + # Fetch the content using previously declared details |
| 540 | + FetchContent_Populate(lapackpp) |
505 | 541 | endif() |
506 | | - ExternalProject_Add_StepDependencies(lapackpp build blaspp ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES}) |
| 542 | + |
| 543 | + # Adds target lapackpp |
| 544 | + add_custom_target( lapackpp ALL |
| 545 | + COMMAND ${CMAKE_COMMAND} |
| 546 | + -B "${lapackpp_BINARY_DIR}" |
| 547 | + -D CMAKE_PREFIX_PATH="${PROJECT_BINARY_DIR}" |
| 548 | + -D CMAKE_INSTALL_PREFIX="${PROJECT_BINARY_DIR}" |
| 549 | + -D BLA_VENDOR=Generic |
| 550 | + -D build_tests=OFF |
| 551 | + -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} |
| 552 | + COMMAND ${CMAKE_COMMAND} |
| 553 | + --build "${lapackpp_BINARY_DIR}" |
| 554 | + --target install |
| 555 | + WORKING_DIRECTORY "${lapackpp_SOURCE_DIR}" |
| 556 | + COMMENT "Building LAPACK++" |
| 557 | + ) |
| 558 | + |
| 559 | + # Set up dependencies |
| 560 | + add_dependencies(lapackpp blaspp) |
507 | 561 | endif() |
508 | 562 |
|
509 | 563 | # -------------------------------------------------- |
|
0 commit comments