Fix bug #760: complete Eigen's lapack interface with default Lapack for SPQR if there is no fortran compiler.

This commit is contained in:
Gael Guennebaud 2014-03-12 21:33:45 +01:00
parent 2379ccffcb
commit 847d801a4c

View File

@ -13,11 +13,26 @@ if(NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/split_test_helper.h)
endforeach() endforeach()
endif() endif()
# check if we have a Fortran compiler
include("../cmake/language_support.cmake")
workaround_9220(Fortran EIGEN_Fortran_COMPILER_WORKS)
if(EIGEN_Fortran_COMPILER_WORKS)
enable_language(Fortran OPTIONAL)
if(NOT CMAKE_Fortran_COMPILER)
set(EIGEN_Fortran_COMPILER_WORKS OFF)
endif()
endif()
if(NOT EIGEN_Fortran_COMPILER_WORKS)
# search for a default Lapack library to complete Eigen's one
find_package(LAPACK)
endif()
# configure blas/lapack (use Eigen's ones) # configure blas/lapack (use Eigen's ones)
set(BLAS_FOUND TRUE) set(EIGEN_BLAS_LIBRARIES eigen_blas)
set(LAPACK_FOUND TRUE) set(EIGEN_LAPACK_LIBRARIES eigen_lapack)
set(BLAS_LIBRARIES eigen_blas)
set(LAPACK_LIBRARIES eigen_lapack)
set(EIGEN_TEST_MATRIX_DIR "" CACHE STRING "Enable testing of realword sparse matrices contained in the specified path") set(EIGEN_TEST_MATRIX_DIR "" CACHE STRING "Enable testing of realword sparse matrices contained in the specified path")
if(EIGEN_TEST_MATRIX_DIR) if(EIGEN_TEST_MATRIX_DIR)
@ -32,33 +47,33 @@ endif(EIGEN_TEST_MATRIX_DIR)
set(SPARSE_LIBS " ") set(SPARSE_LIBS " ")
find_package(Cholmod) find_package(Cholmod)
if(CHOLMOD_FOUND AND BLAS_FOUND AND LAPACK_FOUND) if(CHOLMOD_FOUND)
add_definitions("-DEIGEN_CHOLMOD_SUPPORT") add_definitions("-DEIGEN_CHOLMOD_SUPPORT")
include_directories(${CHOLMOD_INCLUDES}) include_directories(${CHOLMOD_INCLUDES})
set(SPARSE_LIBS ${SPARSE_LIBS} ${CHOLMOD_LIBRARIES} ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES}) set(SPARSE_LIBS ${SPARSE_LIBS} ${CHOLMOD_LIBRARIES} ${EIGEN_BLAS_LIBRARIES} ${EIGEN_LAPACK_LIBRARIES})
set(CHOLMOD_ALL_LIBS ${CHOLMOD_LIBRARIES} ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES}) set(CHOLMOD_ALL_LIBS ${CHOLMOD_LIBRARIES} ${EIGEN_BLAS_LIBRARIES} ${EIGEN_LAPACK_LIBRARIES})
ei_add_property(EIGEN_TESTED_BACKENDS "Cholmod, ") ei_add_property(EIGEN_TESTED_BACKENDS "Cholmod, ")
else() else()
ei_add_property(EIGEN_MISSING_BACKENDS "Cholmod, ") ei_add_property(EIGEN_MISSING_BACKENDS "Cholmod, ")
endif() endif()
find_package(Umfpack) find_package(Umfpack)
if(UMFPACK_FOUND AND BLAS_FOUND) if(UMFPACK_FOUND)
add_definitions("-DEIGEN_UMFPACK_SUPPORT") add_definitions("-DEIGEN_UMFPACK_SUPPORT")
include_directories(${UMFPACK_INCLUDES}) include_directories(${UMFPACK_INCLUDES})
set(SPARSE_LIBS ${SPARSE_LIBS} ${UMFPACK_LIBRARIES} ${BLAS_LIBRARIES}) set(SPARSE_LIBS ${SPARSE_LIBS} ${UMFPACK_LIBRARIES} ${EIGEN_BLAS_LIBRARIES})
set(UMFPACK_ALL_LIBS ${UMFPACK_LIBRARIES} ${BLAS_LIBRARIES}) set(UMFPACK_ALL_LIBS ${UMFPACK_LIBRARIES} ${EIGEN_BLAS_LIBRARIES})
ei_add_property(EIGEN_TESTED_BACKENDS "UmfPack, ") ei_add_property(EIGEN_TESTED_BACKENDS "UmfPack, ")
else() else()
ei_add_property(EIGEN_MISSING_BACKENDS "UmfPack, ") ei_add_property(EIGEN_MISSING_BACKENDS "UmfPack, ")
endif() endif()
find_package(SuperLU) find_package(SuperLU)
if(SUPERLU_FOUND AND BLAS_FOUND) if(SUPERLU_FOUND)
add_definitions("-DEIGEN_SUPERLU_SUPPORT") add_definitions("-DEIGEN_SUPERLU_SUPPORT")
include_directories(${SUPERLU_INCLUDES}) include_directories(${SUPERLU_INCLUDES})
set(SPARSE_LIBS ${SPARSE_LIBS} ${SUPERLU_LIBRARIES} ${BLAS_LIBRARIES}) set(SPARSE_LIBS ${SPARSE_LIBS} ${SUPERLU_LIBRARIES} ${EIGEN_BLAS_LIBRARIES})
set(SUPERLU_ALL_LIBS ${SUPERLU_LIBRARIES} ${BLAS_LIBRARIES}) set(SUPERLU_ALL_LIBS ${SUPERLU_LIBRARIES} ${EIGEN_BLAS_LIBRARIES})
ei_add_property(EIGEN_TESTED_BACKENDS "SuperLU, ") ei_add_property(EIGEN_TESTED_BACKENDS "SuperLU, ")
else() else()
ei_add_property(EIGEN_MISSING_BACKENDS "SuperLU, ") ei_add_property(EIGEN_MISSING_BACKENDS "SuperLU, ")
@ -68,7 +83,7 @@ endif()
find_package(Pastix) find_package(Pastix)
find_package(Scotch) find_package(Scotch)
find_package(Metis) find_package(Metis)
if(PASTIX_FOUND AND BLAS_FOUND) if(PASTIX_FOUND)
add_definitions("-DEIGEN_PASTIX_SUPPORT") add_definitions("-DEIGEN_PASTIX_SUPPORT")
include_directories(${PASTIX_INCLUDES}) include_directories(${PASTIX_INCLUDES})
if(SCOTCH_FOUND) if(SCOTCH_FOUND)
@ -80,8 +95,8 @@ if(PASTIX_FOUND AND BLAS_FOUND)
else(SCOTCH_FOUND) else(SCOTCH_FOUND)
ei_add_property(EIGEN_MISSING_BACKENDS "PaStiX, ") ei_add_property(EIGEN_MISSING_BACKENDS "PaStiX, ")
endif(SCOTCH_FOUND) endif(SCOTCH_FOUND)
set(SPARSE_LIBS ${SPARSE_LIBS} ${PASTIX_LIBRARIES} ${ORDERING_LIBRARIES} ${BLAS_LIBRARIES}) set(SPARSE_LIBS ${SPARSE_LIBS} ${PASTIX_LIBRARIES} ${ORDERING_LIBRARIES} ${EIGEN_BLAS_LIBRARIES})
set(PASTIX_ALL_LIBS ${PASTIX_LIBRARIES} ${BLAS_LIBRARIES}) set(PASTIX_ALL_LIBS ${PASTIX_LIBRARIES} ${EIGEN_BLAS_LIBRARIES})
ei_add_property(EIGEN_TESTED_BACKENDS "PaStiX, ") ei_add_property(EIGEN_TESTED_BACKENDS "PaStiX, ")
else() else()
ei_add_property(EIGEN_MISSING_BACKENDS "PaStiX, ") ei_add_property(EIGEN_MISSING_BACKENDS "PaStiX, ")
@ -96,16 +111,14 @@ else()
endif() endif()
find_package(SPQR) find_package(SPQR)
if(SPQR_FOUND AND BLAS_FOUND AND LAPACK_FOUND) if(SPQR_FOUND AND CHOLMOD_FOUND AND (EIGEN_Fortran_COMPILER_WORKS OR LAPACK_FOUND) )
if(CHOLMOD_FOUND)
add_definitions("-DEIGEN_SPQR_SUPPORT") add_definitions("-DEIGEN_SPQR_SUPPORT")
include_directories(${SPQR_INCLUDES}) include_directories(${SPQR_INCLUDES})
set(SPQR_ALL_LIBS ${SPQR_LIBRARIES} ${CHOLMOD_LIBRARIES} ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES}) set(SPQR_ALL_LIBS ${SPQR_LIBRARIES} ${CHOLMOD_LIBRARIES} ${EIGEN_LAPACK_LIBRARIES} ${EIGEN_BLAS_LIBRARIES} ${LAPACK_LIBRARIES})
set(SPARSE_LIBS ${SPARSE_LIBS} ${SPQR_ALL_LIBS}) set(SPARSE_LIBS ${SPARSE_LIBS} ${SPQR_ALL_LIBS})
ei_add_property(EIGEN_TESTED_BACKENDS "SPQR, ") ei_add_property(EIGEN_TESTED_BACKENDS "SPQR, ")
else(CHOLMOD_FOUND) else()
ei_add_property(EIGEN_MISSING_BACKENDS "SPQR, ") ei_add_property(EIGEN_MISSING_BACKENDS "SPQR, ")
endif(CHOLMOD_FOUND)
endif() endif()
option(EIGEN_TEST_NOQT "Disable Qt support in unit tests" OFF) option(EIGEN_TEST_NOQT "Disable Qt support in unit tests" OFF)