From 9bba252ca6ed12d0f6b04258b98c7d81e14feb22 Mon Sep 17 00:00:00 2001 From: Weslley S Pereira Date: Wed, 30 Aug 2023 17:38:52 -0600 Subject: [PATCH 01/10] Fix BLAS++ and LAPACK++ build --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 59aaed1525..64c0ebf2eb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -404,7 +404,7 @@ if (BLAS++) include(ExternalProject) ExternalProject_Add(blaspp URL https://bitbucket.org/icl/blaspp/downloads/blaspp-2020.10.02.tar.gz - 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_SHARED_LIBS=${BUILD_SHARED_LIBS} ${PROJECT_BINARY_DIR}/blaspp-prefix/src/blaspp + 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 BUILD_COMMAND ${CMAKE_COMMAND} -E env LIBRARY_PATH=$ENV{LIBRARY_PATH}:${PROJECT_BINARY_DIR}/lib LIB_SUFFIX="" ${CMAKE_COMMAND} --build . INSTALL_COMMAND ${CMAKE_COMMAND} -E env PREFIX=${PROJECT_BINARY_DIR} LIB_SUFFIX="" ${CMAKE_COMMAND} --install . ) @@ -417,7 +417,7 @@ if (LAPACK++) if (BUILD_SHARED_LIBS) ExternalProject_Add(lapackpp URL https://bitbucket.org/icl/lapackpp/downloads/lapackpp-2020.10.02.tar.gz - 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_SHARED_LIBS=${BUILD_SHARED_LIBS} ${PROJECT_BINARY_DIR}/lapackpp-prefix/src/lapackpp + 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 BUILD_COMMAND ${CMAKE_COMMAND} -E env LIBRARY_PATH=$ENV{LIBRARY_PATH}:${PROJECT_BINARY_DIR}/lib LIB_SUFFIX="" ${CMAKE_COMMAND} --build . INSTALL_COMMAND ${CMAKE_COMMAND} -E env PREFIX=${PROJECT_BINARY_DIR} LIB_SUFFIX="" ${CMAKE_COMMAND} --install . ) @@ -425,7 +425,7 @@ if (LAPACK++) # FIXME this does not really work as the libraries list gets converted to a semicolon-separated list somewhere in the lapack++ build files ExternalProject_Add(lapackpp URL https://bitbucket.org/icl/lapackpp/downloads/lapackpp-2020.10.02.tar.gz - 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_SHARED_LIBS=${BUILD_SHARED_LIBS} ${PROJECT_BINARY_DIR}/lapackpp-prefix/src/lapackpp + 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 BUILD_COMMAND env LIBRARY_PATH=$ENV{LIBRARY_PATH}:${PROJECT_BINARY_DIR}/lib LIB_SUFFIX="" ${CMAKE_COMMAND} --build . INSTALL_COMMAND ${CMAKE_COMMAND} -E env PREFIX=${PROJECT_BINARY_DIR} LIB_SUFFIX="" ${CMAKE_COMMAND} --install . ) From 15a47d722b6ba05b6e1ea483c905225959d0dd58 Mon Sep 17 00:00:00 2001 From: Weslley S Pereira Date: Thu, 31 Aug 2023 15:02:13 -0600 Subject: [PATCH 02/10] Add test to the CI for BLAS++ and LAPACK++ flags --- .github/workflows/cmake.yml | 88 +++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 087ed262d4..3ea677bc00 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -238,3 +238,91 @@ jobs: done exit 0 fi + + test-blaspp-flag: + runs-on: ubuntu-latest + + env: + BUILD_TYPE: Release + FFLAGS: "-Wall -Wno-unused-dummy-argument -Wno-unused-variable -Wno-unused-label -Werror=conversion -fimplicit-none -frecursive -fcheck=all" + + strategy: + fail-fast: false + matrix: + sharedlib: [ ON, OFF ] + lapackpp: [ ON, OFF ] + + steps: + + - name: Checkout LAPACK + uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 + + - name: Install ninja-build tool + uses: seanmiddleditch/gha-setup-ninja@16b940825621068d98711680b6c3ff92201f8fc0 # v3 + + - name: Install the Basics + # Adding some noise to the system: libopenblas-dev liblapack-dev should not + # be linked to BLAS++ or LAPACK++. + run: | + sudo apt update + sudo apt install -y cmake gfortran + # sudo apt purge libopenblas-dev liblapack-dev + + - name: Configure CMake + run: > + cmake -B build -G Ninja + -D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} + -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/lapack_install + -D CBLAS:BOOL=OFF + -D LAPACKE:BOOL=OFF + -D BUILD_TESTING:BOOL=OFF + -D BUILD_SHARED_LIBS:BOOL=${{ matrix.sharedlib }} + -D BLAS++:BOOL=ON + -D LAPACK++:BOOL=${{ matrix.lapackpp }} + + - name: Build + run: cmake --build build --config ${{env.BUILD_TYPE}} + + - name: Check dependencies of BLAS++ + working-directory: ${{github.workspace}}/build + run: | + if [[ ${{ matrix.sharedlib }} == 'ON' ]]; then + blaspp_blas=$(ldd lib/libblaspp.so | grep libblas.so | { grep -v grep || true; }) + if [[ -z $blaspp_blas || "$blaspp_blas" != *"${{github.workspace}}/build"* ]]; then + echo "BLAS++ dependency to BLAS is not correct!" + echo "ldd lib/libblaspp.so:" + ldd lib/libblaspp.so + exit 1 + fi + else + blaspp_blas=$(cat lib/blaspp/blasppConfig.cmake | grep -lblas | { grep -v grep || true; }) + if [[ -z $blaspp_blas ]]; then + echo "BLAS++ dependency to BLAS is not correct!" + echo "We could not find -lblas in lib/blaspp/blasppConfig.cmake" + exit 1 + fi + fi + + - name: Check dependencies when LAPACK++ is ON + if: ${{ matrix.lapackpp == 'ON' }} + working-directory: ${{github.workspace}}/build + run: | + if [[ ${{ matrix.sharedlib }} == 'ON' ]]; then + lapackpp_lapack=$(ldd lib/liblapackpp.so | grep liblapack.so | { grep -v grep || true; }) + if [[ -z $lapackpp_lapack || $lapackpp_lapack != *"${{github.workspace}}/build"* ]]; then + echo "LAPACK++ dependency to LAPACK is not correct!" + echo "ldd lib/liblapackpp.so:" + ldd lib/liblapackpp.so + exit 1 + fi + else + lapackpp_lapack=$(cat lib/lapackpp/lapackppConfig.cmake | grep -llapack | { grep -v grep || true; }) + if [[ -z $lapackpp_lapack ]]; then + echo "LAPACK++ dependency to LAPACK is not correct!" + echo "We could not find -llapack in lib/lapackpp/lapackppConfig.cmake" + exit 1 + fi + fi + + - name: Install + run: cmake --build build --target install -j2 From 147558fe2d333ba3f8adae47ff08e3fce93bd8d5 Mon Sep 17 00:00:00 2001 From: Weslley S Pereira Date: Tue, 5 Sep 2023 09:11:56 -0600 Subject: [PATCH 03/10] Try to fix BLAS++ and LAPACK++ installation so that the tests pass --- .github/workflows/cmake.yml | 51 ++++--------- CMakeLists.txt | 146 +++++++++++++++++++++++++----------- 2 files changed, 115 insertions(+), 82 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 3ea677bc00..330cd2b1dc 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -250,7 +250,7 @@ jobs: fail-fast: false matrix: sharedlib: [ ON, OFF ] - lapackpp: [ ON, OFF ] + lapackpp: [ OFF ] steps: @@ -266,7 +266,7 @@ jobs: run: | sudo apt update sudo apt install -y cmake gfortran - # sudo apt purge libopenblas-dev liblapack-dev + sudo apt purge libopenblas-dev liblapack-dev - name: Configure CMake run: > @@ -286,42 +286,19 @@ jobs: - name: Check dependencies of BLAS++ working-directory: ${{github.workspace}}/build run: | - if [[ ${{ matrix.sharedlib }} == 'ON' ]]; then - blaspp_blas=$(ldd lib/libblaspp.so | grep libblas.so | { grep -v grep || true; }) - if [[ -z $blaspp_blas || "$blaspp_blas" != *"${{github.workspace}}/build"* ]]; then - echo "BLAS++ dependency to BLAS is not correct!" - echo "ldd lib/libblaspp.so:" - ldd lib/libblaspp.so - exit 1 - fi - else - blaspp_blas=$(cat lib/blaspp/blasppConfig.cmake | grep -lblas | { grep -v grep || true; }) - if [[ -z $blaspp_blas ]]; then - echo "BLAS++ dependency to BLAS is not correct!" - echo "We could not find -lblas in lib/blaspp/blasppConfig.cmake" - exit 1 - fi + blaspp_blas=$(cat lib/cmake/blaspp/blasppConfig.cmake | grep "${{github.workspace}}/build/lib/libblas" | { grep -v grep || true; }) + echo "blaspp_blas: $blaspp_blas" + if [[ -z $blaspp_blas ]]; then + echo "BLAS++ dependency to BLAS is not correct!" + echo "CMake could not find ${{github.workspace}}/build/lib/libblas in lib/cmake/blaspp/blasppConfig.cmake" + exit 1 fi - - - name: Check dependencies when LAPACK++ is ON - if: ${{ matrix.lapackpp == 'ON' }} - working-directory: ${{github.workspace}}/build - run: | - if [[ ${{ matrix.sharedlib }} == 'ON' ]]; then - lapackpp_lapack=$(ldd lib/liblapackpp.so | grep liblapack.so | { grep -v grep || true; }) - if [[ -z $lapackpp_lapack || $lapackpp_lapack != *"${{github.workspace}}/build"* ]]; then - echo "LAPACK++ dependency to LAPACK is not correct!" - echo "ldd lib/liblapackpp.so:" - ldd lib/liblapackpp.so - exit 1 - fi - else - lapackpp_lapack=$(cat lib/lapackpp/lapackppConfig.cmake | grep -llapack | { grep -v grep || true; }) - if [[ -z $lapackpp_lapack ]]; then - echo "LAPACK++ dependency to LAPACK is not correct!" - echo "We could not find -llapack in lib/lapackpp/lapackppConfig.cmake" - exit 1 - fi + blaspp_lapack=$(cat lib/cmake/blaspp/blasppConfig.cmake | grep "${{github.workspace}}/build/lib/liblapack" | { grep -v grep || true; }) + echo "blaspp_lapack: $blaspp_lapack" + if [[ -z $blaspp_lapack ]]; then + echo "BLAS++ dependency to LAPACK is not correct!" + echo "CMake could not find ${{github.workspace}}/build/lib/liblapack in lib/cmake/blaspp/blasppConfig.cmake" + exit 1 fi - name: Install diff --git a/CMakeLists.txt b/CMakeLists.txt index 64c0ebf2eb..b5dd27d995 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,6 +10,19 @@ set( ${LAPACK_MAJOR_VERSION}.${LAPACK_MINOR_VERSION}.${LAPACK_PATCH_VERSION} ) +# Dependencies on other projects +include(FetchContent) +FetchContent_Declare( + blaspp + GIT_REPOSITORY https://github.com/icl-utk-edu/blaspp + GIT_TAG f8f983d5b45a8f366aae41fbe9888b14cbae20f8 # v2023.08.25 +) +FetchContent_Declare( + lapackpp + GIT_REPOSITORY https://github.com/icl-utk-edu/lapackpp + GIT_TAG 62680a16a9aba2a426e3d089dd13e18bfd140c74 # v2023.08.25 +) + # Allow setting a prefix for the library names set(CMAKE_STATIC_LIBRARY_PREFIX "lib${LIBRARY_PREFIX}") set(CMAKE_SHARED_LIBRARY_PREFIX "lib${LIBRARY_PREFIX}") @@ -399,38 +412,86 @@ function(_display_cpp_implementation_msg name) message(STATUS "For support ${name}++ related question, please email: slate-user@icl.utk.edu") message(STATUS "----------------") endfunction() -if (BLAS++) - _display_cpp_implementation_msg("BLAS") - include(ExternalProject) - ExternalProject_Add(blaspp - URL https://bitbucket.org/icl/blaspp/downloads/blaspp-2020.10.02.tar.gz - 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 - BUILD_COMMAND ${CMAKE_COMMAND} -E env LIBRARY_PATH=$ENV{LIBRARY_PATH}:${PROJECT_BINARY_DIR}/lib LIB_SUFFIX="" ${CMAKE_COMMAND} --build . - INSTALL_COMMAND ${CMAKE_COMMAND} -E env PREFIX=${PROJECT_BINARY_DIR} LIB_SUFFIX="" ${CMAKE_COMMAND} --install . - ) - ExternalProject_Add_StepDependencies(blaspp build ${BLAS_LIBRARIES}) + +if (BLAS++ OR LAPACK++) + + if (BLAS++) + _display_cpp_implementation_msg("BLAS") + endif() + + # Check if population has already been performed + FetchContent_GetProperties(blaspp) + if(NOT blaspp_POPULATED) + # Fetch the content using previously declared details + FetchContent_Populate(blaspp) + endif() + + # For static builds, we may need to link against a Fortran library + set(BLAS_Fortran_LIB "") + if (NOT BLAS_FOUND AND NOT BUILD_SHARED_LIBS) + if (CMAKE_Fortran_COMPILER_ID MATCHES GNU) + set(BLAS_Fortran_LIB ";-lgfortran") + else() + # TODO: This is incomplete. Fill in the other cases. + set(BLAS_Fortran_LIB "") + endif() + endif() + + # Adds target blaspp + add_custom_target( blaspp ALL + COMMAND ${CMAKE_COMMAND} + -B "${blaspp_BINARY_DIR}" + -D CMAKE_INSTALL_PREFIX="${PROJECT_BINARY_DIR}" + -D blas_libraries_cached="" + "-DBLAS_LIBRARIES=\"$,${BLAS_LIBRARIES},$>${BLAS_Fortran_LIB}\"" + -D lapack_libraries_cached="" + "-DLAPACK_LIBRARIES=\"$,${LAPACK_LIBRARIES},$>\"" + -D build_tests=OFF + -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} + COMMAND ${CMAKE_COMMAND} + --build "${blaspp_BINARY_DIR}" + --target install + WORKING_DIRECTORY "${blaspp_SOURCE_DIR}" + COMMENT "Building BLAS++" + ) + + # Set up dependencies + if(NOT BLAS_FOUND) + add_dependencies(blaspp ${BLASLIB}) + endif() + if(NOT LATESTLAPACK_FOUND) + add_dependencies(blaspp ${LAPACKLIB}) + endif() endif() + if (LAPACK++) - message (STATUS "linking lapack++ against ${LAPACK_LIBRARIES}") _display_cpp_implementation_msg("LAPACK") - include(ExternalProject) - if (BUILD_SHARED_LIBS) - ExternalProject_Add(lapackpp - URL https://bitbucket.org/icl/lapackpp/downloads/lapackpp-2020.10.02.tar.gz - 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 - BUILD_COMMAND ${CMAKE_COMMAND} -E env LIBRARY_PATH=$ENV{LIBRARY_PATH}:${PROJECT_BINARY_DIR}/lib LIB_SUFFIX="" ${CMAKE_COMMAND} --build . - INSTALL_COMMAND ${CMAKE_COMMAND} -E env PREFIX=${PROJECT_BINARY_DIR} LIB_SUFFIX="" ${CMAKE_COMMAND} --install . - ) - else () -# FIXME this does not really work as the libraries list gets converted to a semicolon-separated list somewhere in the lapack++ build files - ExternalProject_Add(lapackpp - URL https://bitbucket.org/icl/lapackpp/downloads/lapackpp-2020.10.02.tar.gz - 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 - BUILD_COMMAND env LIBRARY_PATH=$ENV{LIBRARY_PATH}:${PROJECT_BINARY_DIR}/lib LIB_SUFFIX="" ${CMAKE_COMMAND} --build . - INSTALL_COMMAND ${CMAKE_COMMAND} -E env PREFIX=${PROJECT_BINARY_DIR} LIB_SUFFIX="" ${CMAKE_COMMAND} --install . - ) + + # Check if population has already been performed + FetchContent_GetProperties(lapackpp) + if(NOT lapackpp_POPULATED) + # Fetch the content using previously declared details + FetchContent_Populate(lapackpp) endif() - ExternalProject_Add_StepDependencies(lapackpp build blaspp ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES}) + + # Adds target lapackpp + add_custom_target( lapackpp ALL + COMMAND ${CMAKE_COMMAND} + -B "${lapackpp_BINARY_DIR}" + -D CMAKE_INSTALL_PREFIX="${PROJECT_BINARY_DIR}" + -D lapack_libraries_cached="" + "-DLAPACK_LIBRARIES=\"$,${LAPACK_LIBRARIES},$>\"" + -D build_tests=OFF + -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} + COMMAND ${CMAKE_COMMAND} + --build "${lapackpp_BINARY_DIR}" + --target install + WORKING_DIRECTORY "${lapackpp_SOURCE_DIR}" + COMMENT "Building LAPACK++" + ) + + # Set up dependencies + add_dependencies(lapackpp blaspp) endif() # -------------------------------------------------- @@ -544,41 +605,36 @@ if (LAPACK++) DESTINATION "${CMAKE_INSTALL_LIBDIR}${LAPACK_BINARY_PATH_SUFFIX}" FILES_MATCHING REGEX "liblapackpp.(a|so)$" ) - install( - DIRECTORY "${PROJECT_BINARY_DIR}/lapackpp-prefix/src/lapackpp/include/" - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" - FILES_MATCHING REGEX "\\.(h|hh)$" - ) write_basic_package_version_file( "lapackppConfigVersion.cmake" - VERSION 2020.10.02 + VERSION 2023.08.25 COMPATIBILITY AnyNewerVersion ) install( - FILES "${CMAKE_CURRENT_BINARY_DIR}/lib/lapackpp/lapackppConfig.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/lib/lapackpp/lapackppConfigVersion.cmake" + FILES "${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/lapackpp/lapackppConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/lapackpp/lapackppConfigVersion.cmake" DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/" ) endif() if (BLAS++) + install( + DIRECTORY "${LAPACK_BINARY_DIR}/lib/" + DESTINATION "${CMAKE_INSTALL_LIBDIR}${LAPACK_BINARY_PATH_SUFFIX}" + FILES_MATCHING REGEX "libblaspp.(a|so)$" + ) write_basic_package_version_file( "blasppConfigVersion.cmake" - VERSION 2020.10.02 + VERSION 2023.08.25 COMPATIBILITY AnyNewerVersion ) install( - FILES "${CMAKE_CURRENT_BINARY_DIR}/lib/blaspp/blasppConfig.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/lib/blaspp/blasppConfigVersion.cmake" + FILES "${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/blaspp/blasppConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/blaspp/blasppConfigVersion.cmake" DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/" ) install( - DIRECTORY "${LAPACK_BINARY_DIR}/lib/" - DESTINATION "${CMAKE_INSTALL_LIBDIR}${LAPACK_BINARY_PATH_SUFFIX}" - FILES_MATCHING REGEX "libblaspp.(a|so)$" - ) - install( - DIRECTORY "${PROJECT_BINARY_DIR}/blaspp-prefix/src/blaspp/include/" + DIRECTORY "${PROJECT_BINARY_DIR}/include/" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" FILES_MATCHING REGEX "\\.(h|hh)$" ) From 34269611f4b824e5ecf535d30268c9b2f5626ff3 Mon Sep 17 00:00:00 2001 From: Weslley S Pereira Date: Fri, 8 Sep 2023 12:32:31 -0600 Subject: [PATCH 04/10] More changes to improve flags BLAS++ and LAPACK++ --- .github/workflows/cmake.yml | 53 ++++++++++------ CMakeLists.txt | 122 +++++++++++++++++++++++++----------- 2 files changed, 118 insertions(+), 57 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 330cd2b1dc..fe7363e554 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -249,8 +249,13 @@ jobs: strategy: fail-fast: false matrix: - sharedlib: [ ON, OFF ] + sharedlib: [ OFF, ON ] lapackpp: [ OFF ] + optblas: [ OFF, ON ] + optlapack: [ OFF, ON ] + exclude: + - optblas: ON + optlapack: ON steps: @@ -261,12 +266,9 @@ jobs: uses: seanmiddleditch/gha-setup-ninja@16b940825621068d98711680b6c3ff92201f8fc0 # v3 - name: Install the Basics - # Adding some noise to the system: libopenblas-dev liblapack-dev should not - # be linked to BLAS++ or LAPACK++. run: | sudo apt update - sudo apt install -y cmake gfortran - sudo apt purge libopenblas-dev liblapack-dev + sudo apt install -y cmake gfortran libopenblas-dev - name: Configure CMake run: > @@ -279,26 +281,39 @@ jobs: -D BUILD_SHARED_LIBS:BOOL=${{ matrix.sharedlib }} -D BLAS++:BOOL=ON -D LAPACK++:BOOL=${{ matrix.lapackpp }} + -D USE_OPTIMIZED_BLAS:BOOL=${{ matrix.optblas }} + -D USE_OPTIMIZED_LAPACK:BOOL=${{ matrix.optlapack }} - name: Build run: cmake --build build --config ${{env.BUILD_TYPE}} - - name: Check dependencies of BLAS++ + - name: Check dependencies of BLAS++ on BLAS and LAPACK working-directory: ${{github.workspace}}/build run: | - blaspp_blas=$(cat lib/cmake/blaspp/blasppConfig.cmake | grep "${{github.workspace}}/build/lib/libblas" | { grep -v grep || true; }) - echo "blaspp_blas: $blaspp_blas" - if [[ -z $blaspp_blas ]]; then - echo "BLAS++ dependency to BLAS is not correct!" - echo "CMake could not find ${{github.workspace}}/build/lib/libblas in lib/cmake/blaspp/blasppConfig.cmake" - exit 1 - fi - blaspp_lapack=$(cat lib/cmake/blaspp/blasppConfig.cmake | grep "${{github.workspace}}/build/lib/liblapack" | { grep -v grep || true; }) - echo "blaspp_lapack: $blaspp_lapack" - if [[ -z $blaspp_lapack ]]; then - echo "BLAS++ dependency to LAPACK is not correct!" - echo "CMake could not find ${{github.workspace}}/build/lib/liblapack in lib/cmake/blaspp/blasppConfig.cmake" - exit 1 + configFile="lib/cmake/blaspp/blasppConfig.cmake" + if [[ ${{ matrix.optblas }} == 'ON' || ${{ matrix.optlapack }} == 'ON' ]]; then + if grep -q "openblas" $configFile; then + echo "BLAS++ dependency to openblas is correct." + else + echo "CMake could not find openblas in $configFile:" + cat $configFile + exit 1 + fi + else + if grep -q "${{github.workspace}}/build/lib/libblas" $configFile; then + echo "BLAS++ dependency to BLAS is correct." + else + echo "CMake could not find ${{github.workspace}}/build/lib/libblas in $configFile:" + cat $configFile + exit 1 + fi + if grep -q "${{github.workspace}}/build/lib/liblapack" $configFile; then + echo "BLAS++ dependency to LAPACK is correct." + else + echo "CMake could not find ${{github.workspace}}/build/lib/liblapack in $configFile:" + cat $configFile + exit 1 + fi fi - name: Install diff --git a/CMakeLists.txt b/CMakeLists.txt index b5dd27d995..14998557a5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -438,21 +438,55 @@ if (BLAS++ OR LAPACK++) endif() # Adds target blaspp - add_custom_target( blaspp ALL + add_custom_target( blaspp ALL DEPENDS blaspp-cmd ) + add_custom_command( OUTPUT blaspp-cmd + WORKING_DIRECTORY "${blaspp_SOURCE_DIR}" + COMMENT "Building BLAS++" ) + + # Set up information about the BLAS and LAPACK libraries + if(NOT BLAS_FOUND) + if(NOT LATESTLAPACK_FOUND) + add_custom_command( OUTPUT blaspp-cmd APPEND + COMMAND ${CMAKE_COMMAND} + -B "${blaspp_BINARY_DIR}" + -D BLAS_LIBRARIES="$${BLAS_Fortran_LIB}" + -D LAPACK_LIBRARIES="$" ) + else() + add_custom_command( OUTPUT blaspp-cmd APPEND + COMMAND ${CMAKE_COMMAND} + -B "${blaspp_BINARY_DIR}" + -D BLAS_LIBRARIES="$${BLAS_Fortran_LIB}" + -D LAPACK_LIBRARIES="${LAPACK_LIBRARIES}" ) + endif() + else() + if(NOT LATESTLAPACK_FOUND) + add_custom_command( OUTPUT blaspp-cmd APPEND + COMMAND ${CMAKE_COMMAND} + -B "${blaspp_BINARY_DIR}" + -D BLAS_LIBRARIES="${BLAS_LIBRARIES}" + -D LAPACK_LIBRARIES="$${BLAS_Fortran_LIB}" ) + else() + add_custom_command( OUTPUT blaspp-cmd APPEND + COMMAND ${CMAKE_COMMAND} + -B "${blaspp_BINARY_DIR}" + -D BLAS_LIBRARIES="${BLAS_LIBRARIES}" + -D LAPACK_LIBRARIES="${LAPACK_LIBRARIES}" ) + endif() + endif() + + # Setup remaining configuration options and installation + add_custom_command( OUTPUT blaspp-cmd APPEND COMMAND ${CMAKE_COMMAND} - -B "${blaspp_BINARY_DIR}" - -D CMAKE_INSTALL_PREFIX="${PROJECT_BINARY_DIR}" - -D blas_libraries_cached="" - "-DBLAS_LIBRARIES=\"$,${BLAS_LIBRARIES},$>${BLAS_Fortran_LIB}\"" - -D lapack_libraries_cached="" - "-DLAPACK_LIBRARIES=\"$,${LAPACK_LIBRARIES},$>\"" - -D build_tests=OFF - -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} + -B "${blaspp_BINARY_DIR}" + -D CMAKE_INSTALL_PREFIX="${blaspp_BINARY_DIR}" + -D CMAKE_INSTALL_LIBDIR="${PROJECT_BINARY_DIR}/lib" + -D blas_libraries_cached="" + -D lapack_libraries_cached="" + -D build_tests=OFF + -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} COMMAND ${CMAKE_COMMAND} --build "${blaspp_BINARY_DIR}" --target install - WORKING_DIRECTORY "${blaspp_SOURCE_DIR}" - COMMENT "Building BLAS++" ) # Set up dependencies @@ -475,19 +509,36 @@ if (LAPACK++) endif() # Adds target lapackpp - add_custom_target( lapackpp ALL - COMMAND ${CMAKE_COMMAND} + add_custom_target( lapackpp ALL DEPENDS lapackpp-cmd ) + add_custom_command( OUTPUT lapackpp-cmd + WORKING_DIRECTORY "${lapackpp_SOURCE_DIR}" + COMMENT "Building LAPACK++" ) + + # Set up information about the LAPACK library + if(NOT LATESTLAPACK_FOUND) + add_custom_command( OUTPUT lapackpp-cmd APPEND + COMMAND ${CMAKE_COMMAND} -B "${lapackpp_BINARY_DIR}" - -D CMAKE_INSTALL_PREFIX="${PROJECT_BINARY_DIR}" - -D lapack_libraries_cached="" - "-DLAPACK_LIBRARIES=\"$,${LAPACK_LIBRARIES},$>\"" - -D build_tests=OFF - -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} + -D LAPACK_LIBRARIES="$${BLAS_Fortran_LIB}" ) + else() + add_custom_command( OUTPUT lapackpp-cmd APPEND + COMMAND ${CMAKE_COMMAND} + -B "${lapackpp_BINARY_DIR}" + -D LAPACK_LIBRARIES="${LAPACK_LIBRARIES}" ) + endif() + + # Setup remaining configuration options and installation + add_custom_command( OUTPUT lapackpp-cmd APPEND + COMMAND ${CMAKE_COMMAND} + -B "${lapackpp_BINARY_DIR}" + -D CMAKE_INSTALL_PREFIX="${lapackpp_BINARY_DIR}" + -D CMAKE_INSTALL_LIBDIR="${PROJECT_BINARY_DIR}/lib" + -D lapack_libraries_cached="" + -D build_tests=OFF + -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} COMMAND ${CMAKE_COMMAND} --build "${lapackpp_BINARY_DIR}" --target install - WORKING_DIRECTORY "${lapackpp_SOURCE_DIR}" - COMMENT "Building LAPACK++" ) # Set up dependencies @@ -601,14 +652,14 @@ install(FILES ) if (LAPACK++) install( - DIRECTORY "${LAPACK_BINARY_DIR}/lib/" - DESTINATION "${CMAKE_INSTALL_LIBDIR}${LAPACK_BINARY_PATH_SUFFIX}" - FILES_MATCHING REGEX "liblapackpp.(a|so)$" + DIRECTORY "${LAPACK_BINARY_DIR}/lib/" + DESTINATION "${CMAKE_INSTALL_LIBDIR}${LAPACK_BINARY_PATH_SUFFIX}" + FILES_MATCHING REGEX "liblapackpp.(a|so)$" ) - write_basic_package_version_file( - "lapackppConfigVersion.cmake" - VERSION 2023.08.25 - COMPATIBILITY AnyNewerVersion + install( + DIRECTORY "${lapackpp_BINARY_DIR}/include/" + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" + FILES_MATCHING REGEX "\\.(h|hh)$" ) install( FILES "${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/lapackpp/lapackppConfig.cmake" @@ -618,23 +669,18 @@ if (LAPACK++) endif() if (BLAS++) - install( - DIRECTORY "${LAPACK_BINARY_DIR}/lib/" - DESTINATION "${CMAKE_INSTALL_LIBDIR}${LAPACK_BINARY_PATH_SUFFIX}" - FILES_MATCHING REGEX "libblaspp.(a|so)$" - ) - write_basic_package_version_file( - "blasppConfigVersion.cmake" - VERSION 2023.08.25 - COMPATIBILITY AnyNewerVersion - ) install( FILES "${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/blaspp/blasppConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/blaspp/blasppConfigVersion.cmake" DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/" ) install( - DIRECTORY "${PROJECT_BINARY_DIR}/include/" + DIRECTORY "${LAPACK_BINARY_DIR}/lib/" + DESTINATION ${CMAKE_INSTALL_LIBDIR} + FILES_MATCHING REGEX "libblaspp.(a|so)$" + ) + install( + DIRECTORY "${blaspp_BINARY_DIR}/include/" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" FILES_MATCHING REGEX "\\.(h|hh)$" ) From 5db3c7d99bc07fa0dfd49f9e1f91dd6aebe393fc Mon Sep 17 00:00:00 2001 From: Weslley S Pereira Date: Tue, 10 Oct 2023 10:57:25 -0600 Subject: [PATCH 05/10] Apply @mgates3's patch and add BUILD_TYPE to BLAS++ and LAPACK++ See https://github.com/mgates3/lapack/commit/ecf6f41a57e2021244ed2b43fc40c6da160004e5 --- CMakeLists.txt | 153 +++++++++++++++++-------------------------------- 1 file changed, 54 insertions(+), 99 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 14998557a5..432b051fed 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,12 +15,12 @@ include(FetchContent) FetchContent_Declare( blaspp GIT_REPOSITORY https://github.com/icl-utk-edu/blaspp - GIT_TAG f8f983d5b45a8f366aae41fbe9888b14cbae20f8 # v2023.08.25 + GIT_TAG 91dd418fa910498cc03dee397826099914cc3185 # v2023.08.25 + ) FetchContent_Declare( lapackpp GIT_REPOSITORY https://github.com/icl-utk-edu/lapackpp - GIT_TAG 62680a16a9aba2a426e3d089dd13e18bfd140c74 # v2023.08.25 + GIT_TAG 88088c33cd9467475e8f139f42d158620f11e64d # v2023.08.25 + ) # Allow setting a prefix for the library names @@ -402,22 +402,8 @@ endif() option(BLAS++ "Build BLAS++" OFF) option(LAPACK++ "Build LAPACK++" OFF) - -function(_display_cpp_implementation_msg name) - string(TOLOWER ${name} name_lc) - message(STATUS "${name}++ enable") - message(STATUS "----------------") - message(STATUS "Thank you for your interest in ${name}++, a newly developed C++ API for ${name} library") - message(STATUS "The objective of ${name}++ is to provide a convenient, performance oriented API for development in the C++ language, that, for the most part, preserves established conventions, while, at the same time, takes advantages of modern C++ features, such as: namespaces, templates, exceptions, etc.") - message(STATUS "For support ${name}++ related question, please email: slate-user@icl.utk.edu") - message(STATUS "----------------") -endfunction() - if (BLAS++ OR LAPACK++) - - if (BLAS++) - _display_cpp_implementation_msg("BLAS") - endif() + message( STATUS "BLAS++ enabled; for support, email slate-user@icl.utk.edu" ) # Check if population has already been performed FetchContent_GetProperties(blaspp) @@ -426,16 +412,35 @@ if (BLAS++ OR LAPACK++) FetchContent_Populate(blaspp) endif() - # For static builds, we may need to link against a Fortran library - set(BLAS_Fortran_LIB "") - if (NOT BLAS_FOUND AND NOT BUILD_SHARED_LIBS) + # Determine Fortran runtime library. + # todo: CMake ought to know this already -- how to access? + set( Fortran_LIB "" ) + if (NOT BUILD_SHARED_LIBS) if (CMAKE_Fortran_COMPILER_ID MATCHES GNU) - set(BLAS_Fortran_LIB ";-lgfortran") + set( Fortran_LIB ";-lgfortran" ) else() # TODO: This is incomplete. Fill in the other cases. - set(BLAS_Fortran_LIB "") endif() endif() + message( DEBUG "Fortran_LIB '${Fortran_LIB}'" ) + + if (NOT BLAS_FOUND) + # Link with Reference BLAS. + set( BLAS_LIBS "$${Fortran_LIB}" ) + else() + # Link with optimized BLAS. + set( BLAS_LIBS "${BLAS_LIBRARIES}" ) + endif() + message( DEBUG "BLAS_LIBS '${BLAS_LIBS}'" ) + + if (NOT LATESTLAPACK_FOUND) + # Link with Reference LAPACK. + set( LAPACK_LIBS "$${Fortran_LIB}" ) + else() + # Link with optimized BLAS. + set( LAPACK_LIBS "${LAPACK_LIBRARIES}" ) + endif() + message( DEBUG "LAPACK_LIBS '${LAPACK_LIBS}'" ) # Adds target blaspp add_custom_target( blaspp ALL DEPENDS blaspp-cmd ) @@ -444,48 +449,19 @@ if (BLAS++ OR LAPACK++) COMMENT "Building BLAS++" ) # Set up information about the BLAS and LAPACK libraries - if(NOT BLAS_FOUND) - if(NOT LATESTLAPACK_FOUND) - add_custom_command( OUTPUT blaspp-cmd APPEND - COMMAND ${CMAKE_COMMAND} - -B "${blaspp_BINARY_DIR}" - -D BLAS_LIBRARIES="$${BLAS_Fortran_LIB}" - -D LAPACK_LIBRARIES="$" ) - else() - add_custom_command( OUTPUT blaspp-cmd APPEND - COMMAND ${CMAKE_COMMAND} - -B "${blaspp_BINARY_DIR}" - -D BLAS_LIBRARIES="$${BLAS_Fortran_LIB}" - -D LAPACK_LIBRARIES="${LAPACK_LIBRARIES}" ) - endif() - else() - if(NOT LATESTLAPACK_FOUND) - add_custom_command( OUTPUT blaspp-cmd APPEND - COMMAND ${CMAKE_COMMAND} - -B "${blaspp_BINARY_DIR}" - -D BLAS_LIBRARIES="${BLAS_LIBRARIES}" - -D LAPACK_LIBRARIES="$${BLAS_Fortran_LIB}" ) - else() - add_custom_command( OUTPUT blaspp-cmd APPEND - COMMAND ${CMAKE_COMMAND} - -B "${blaspp_BINARY_DIR}" - -D BLAS_LIBRARIES="${BLAS_LIBRARIES}" - -D LAPACK_LIBRARIES="${LAPACK_LIBRARIES}" ) - endif() - endif() - - # Setup remaining configuration options and installation add_custom_command( OUTPUT blaspp-cmd APPEND COMMAND ${CMAKE_COMMAND} - -B "${blaspp_BINARY_DIR}" - -D CMAKE_INSTALL_PREFIX="${blaspp_BINARY_DIR}" - -D CMAKE_INSTALL_LIBDIR="${PROJECT_BINARY_DIR}/lib" - -D blas_libraries_cached="" - -D lapack_libraries_cached="" - -D build_tests=OFF - -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} + -B "${blaspp_BINARY_DIR}" + -D CMAKE_INSTALL_PREFIX="${LAPACK_BINARY_DIR}" + -D BLAS_LIBRARIES="${BLAS_LIBS}" + -D LAPACK_LIBRARIES="${LAPACK_LIBS}" + -D build_tests=OFF + -D CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} + COMMAND ${CMAKE_COMMAND} --build "${blaspp_BINARY_DIR}" + --config ${CMAKE_BUILD_TYPE} --target install ) @@ -499,7 +475,7 @@ if (BLAS++ OR LAPACK++) endif() if (LAPACK++) - _display_cpp_implementation_msg("LAPACK") + message( STATUS "LAPACK++ enabled; for support, email slate-user@icl.utk.edu" ) # Check if population has already been performed FetchContent_GetProperties(lapackpp) @@ -514,30 +490,20 @@ if (LAPACK++) WORKING_DIRECTORY "${lapackpp_SOURCE_DIR}" COMMENT "Building LAPACK++" ) - # Set up information about the LAPACK library - if(NOT LATESTLAPACK_FOUND) - add_custom_command( OUTPUT lapackpp-cmd APPEND - COMMAND ${CMAKE_COMMAND} - -B "${lapackpp_BINARY_DIR}" - -D LAPACK_LIBRARIES="$${BLAS_Fortran_LIB}" ) - else() - add_custom_command( OUTPUT lapackpp-cmd APPEND - COMMAND ${CMAKE_COMMAND} - -B "${lapackpp_BINARY_DIR}" - -D LAPACK_LIBRARIES="${LAPACK_LIBRARIES}" ) - endif() - # Setup remaining configuration options and installation add_custom_command( OUTPUT lapackpp-cmd APPEND COMMAND ${CMAKE_COMMAND} - -B "${lapackpp_BINARY_DIR}" - -D CMAKE_INSTALL_PREFIX="${lapackpp_BINARY_DIR}" - -D CMAKE_INSTALL_LIBDIR="${PROJECT_BINARY_DIR}/lib" - -D lapack_libraries_cached="" - -D build_tests=OFF - -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} + -B "${lapackpp_BINARY_DIR}" + -D CMAKE_INSTALL_PREFIX="${LAPACK_BINARY_DIR}" + -D blaspp_DIR="${PROJECT_BINARY_DIR}/lib/cmake/blaspp" + -D LAPACK_LIBRARIES="${LAPACK_LIBS}" + -D build_tests=OFF + -D CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} + COMMAND ${CMAKE_COMMAND} --build "${lapackpp_BINARY_DIR}" + --config ${CMAKE_BUILD_TYPE} --target install ) @@ -650,37 +616,26 @@ install(FILES DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${LAPACKLIB}-${LAPACK_VERSION} COMPONENT Development ) + if (LAPACK++) install( DIRECTORY "${LAPACK_BINARY_DIR}/lib/" DESTINATION "${CMAKE_INSTALL_LIBDIR}${LAPACK_BINARY_PATH_SUFFIX}" - FILES_MATCHING REGEX "liblapackpp.(a|so)$" - ) - install( - DIRECTORY "${lapackpp_BINARY_DIR}/include/" - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" - FILES_MATCHING REGEX "\\.(h|hh)$" - ) - install( - FILES "${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/lapackpp/lapackppConfig.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/lapackpp/lapackppConfigVersion.cmake" - DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/" + FILES_MATCHING REGEX "lapackpp" ) - endif() + if (BLAS++) - install( - FILES "${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/blaspp/blasppConfig.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/blaspp/blasppConfigVersion.cmake" - DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/" - ) install( DIRECTORY "${LAPACK_BINARY_DIR}/lib/" DESTINATION ${CMAKE_INSTALL_LIBDIR} - FILES_MATCHING REGEX "libblaspp.(a|so)$" + FILES_MATCHING REGEX "blaspp" ) +endif() + +if (BLAS++ OR LAPACK++) install( - DIRECTORY "${blaspp_BINARY_DIR}/include/" + DIRECTORY "${LAPACK_BINARY_DIR}/include/" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" FILES_MATCHING REGEX "\\.(h|hh)$" ) From 88b485d14c363a3b10ea60edb1e7e5f528c965ab Mon Sep 17 00:00:00 2001 From: Weslley S Pereira Date: Wed, 8 Nov 2023 15:13:13 -0700 Subject: [PATCH 06/10] Updates BLAS++ and LAPACK++ to v2023.11.05 --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 432b051fed..1736543aa9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,12 +15,12 @@ include(FetchContent) FetchContent_Declare( blaspp GIT_REPOSITORY https://github.com/icl-utk-edu/blaspp - GIT_TAG 91dd418fa910498cc03dee397826099914cc3185 # v2023.08.25 + + GIT_TAG 3c47832f5162b5215b2164c21c4132544c65563d # v2023.11.05 ) FetchContent_Declare( lapackpp GIT_REPOSITORY https://github.com/icl-utk-edu/lapackpp - GIT_TAG 88088c33cd9467475e8f139f42d158620f11e64d # v2023.08.25 + + GIT_TAG e3aa0156b873d1e1349d083d7e5b66cfbdf9fb08 # v2023.11.05 ) # Allow setting a prefix for the library names From be80dd59c503592c95d7462c5a5457e2229eaba3 Mon Sep 17 00:00:00 2001 From: Weslley S Pereira Date: Sun, 12 Nov 2023 10:32:44 -0700 Subject: [PATCH 07/10] Applies @mgates3 patch to fix BLAS++ and LAPACK++ installation https://github.com/Reference-LAPACK/lapack/pull/903#pullrequestreview-1726137959 --- CMakeLists.txt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1736543aa9..93f2c236c4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -625,15 +625,13 @@ if (LAPACK++) ) endif() -if (BLAS++) +if (BLAS++ OR LAPACK++) install( - DIRECTORY "${LAPACK_BINARY_DIR}/lib/" + DIRECTORY "${LAPACK_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/" DESTINATION ${CMAKE_INSTALL_LIBDIR} FILES_MATCHING REGEX "blaspp" ) -endif() -if (BLAS++ OR LAPACK++) install( DIRECTORY "${LAPACK_BINARY_DIR}/include/" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" From 80be947a6f610f5a84837ce8d4e90d25b470df67 Mon Sep 17 00:00:00 2001 From: Weslley da Silva Pereira Date: Thu, 27 Mar 2025 10:33:32 -0600 Subject: [PATCH 08/10] Rebased and updated BLAS++ to v2024.10.26 --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 93f2c236c4..ebcfa02528 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,12 +15,12 @@ include(FetchContent) FetchContent_Declare( blaspp GIT_REPOSITORY https://github.com/icl-utk-edu/blaspp - GIT_TAG 3c47832f5162b5215b2164c21c4132544c65563d # v2023.11.05 + GIT_TAG 8d770a94797e000bea098776e1fce7590e9363b2 # v2024.10.26 ) FetchContent_Declare( lapackpp GIT_REPOSITORY https://github.com/icl-utk-edu/lapackpp - GIT_TAG e3aa0156b873d1e1349d083d7e5b66cfbdf9fb08 # v2023.11.05 + GIT_TAG 07cd703c4613cd1f51661148debfc4eccc5d84a2 # v2024.10.26 ) # Allow setting a prefix for the library names From 6cf667f1fcb2659c853bcb1a6b8cbb26fcc18265 Mon Sep 17 00:00:00 2001 From: Weslley da Silva Pereira Date: Thu, 27 Mar 2025 10:55:35 -0600 Subject: [PATCH 09/10] Adds a fix that got lost in the rebase --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ebcfa02528..a8a37211d8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -619,7 +619,7 @@ install(FILES if (LAPACK++) install( - DIRECTORY "${LAPACK_BINARY_DIR}/lib/" + DIRECTORY "${LAPACK_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/" DESTINATION "${CMAKE_INSTALL_LIBDIR}${LAPACK_BINARY_PATH_SUFFIX}" FILES_MATCHING REGEX "lapackpp" ) From a5c5d4d3ed475b2cd7d1306b4f97c59c61f7759c Mon Sep 17 00:00:00 2001 From: Weslley da Silva Pereira Date: Thu, 27 Mar 2025 10:57:16 -0600 Subject: [PATCH 10/10] Enable LAPACK++ tests in the action test-blaspp-flag --- .github/workflows/cmake.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index fe7363e554..14abbd4dd8 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -250,7 +250,7 @@ jobs: fail-fast: false matrix: sharedlib: [ OFF, ON ] - lapackpp: [ OFF ] + lapackpp: [ OFF, ON ] optblas: [ OFF, ON ] optlapack: [ OFF, ON ] exclude: