diff --git a/CMakeLists.txt b/CMakeLists.txt index 37c83594..732ff2d1 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -275,13 +275,17 @@ endif() # Linear # ------ -# Accelerate solver (Include before Eigen) + if(POLYSOLVE_WITH_ACCELERATE) - set(BLA_VENDOR Apple) - find_package(BLAS REQUIRED) - find_package(LAPACK REQUIRED) - target_link_libraries(polysolve_linear PRIVATE BLAS::BLAS LAPACK::LAPACK) - target_compile_definitions(polysolve_linear PUBLIC POLYSOLVE_WITH_ACCELERATE) + if(POLYSOLVE_LARGE_INDEX) + message(STATUS "POLYSOLVE_LARGE_INDEX is ON: disabling Apple Accelerate (it only supports 32-bit sparse indices).") + else() + set(BLA_VENDOR Apple) + find_package(BLAS REQUIRED) + find_package(LAPACK REQUIRED) + target_link_libraries(polysolve_linear PRIVATE BLAS::BLAS LAPACK::LAPACK) + target_compile_definitions(polysolve_linear PUBLIC POLYSOLVE_WITH_ACCELERATE) + endif() endif() include(eigen) diff --git a/src/polysolve/linear/Solver.cpp b/src/polysolve/linear/Solver.cpp index 4334ac6f..ccdb40f6 100644 --- a/src/polysolve/linear/Solver.cpp +++ b/src/polysolve/linear/Solver.cpp @@ -45,8 +45,12 @@ namespace polysolve::linear #include #endif #ifdef POLYSOLVE_WITH_MKL +#ifndef POLYSOLVE_LARGE_INDEX +// Eigen's PardisoSupport only specializes for int/long long indices, not the +// std::ptrdiff_t (long) StiffnessMatrix used with POLYSOLVE_LARGE_INDEX. #include #endif +#endif #ifdef POLYSOLVE_WITH_PARDISO #include "Pardiso.hpp" #endif @@ -368,6 +372,7 @@ namespace polysolve::linear RETURN_DIRECT_SOLVER_PTR(SPQR, "Eigen::SPQR"); #endif #ifdef POLYSOLVE_WITH_MKL +#ifndef POLYSOLVE_LARGE_INDEX } else if (solver == "Eigen::PardisoLLT") { @@ -381,6 +386,7 @@ namespace polysolve::linear { RETURN_DIRECT_SOLVER_PTR(PardisoLU, "Eigen::PardisoLU"); #endif +#endif #ifdef POLYSOLVE_WITH_PARDISO } else if (solver == "Pardiso") @@ -524,10 +530,12 @@ namespace polysolve::linear "Eigen::SPQR", #endif #ifdef POLYSOLVE_WITH_MKL +#ifndef POLYSOLVE_LARGE_INDEX "Eigen::PardisoLLT", "Eigen::PardisoLDLT", "Eigen::PardisoLU", #endif +#endif #ifdef POLYSOLVE_WITH_PARDISO "Pardiso", #endif