Index: CMakeLists.txt =================================================================== --- CMakeLists.txt (revision 1294) +++ CMakeLists.txt (working copy) @@ -94,10 +94,6 @@ # Precision to build # By default all precisions are generated -option(BUILD_SINGLE "Build LAPACK Single Precision" ON) -option(BUILD_DOUBLE "Build LAPACK Double Precision" ON) -option(BUILD_COMPLEX "Build LAPACK Complex Precision" ON) -option(BUILD_COMPLEX16 "Build LAPACK Double Complex Precision" ON) # -------------------------------------------------- # Subdirectories that need to be processed @@ -147,7 +143,49 @@ find_library(XBLAS_LIBRARY NAMES xblas) endif(USE_XBLAS) -add_subdirectory(SRC) +option(USE_OPTIMIZED_LAPACK "Whether or not to use an optimized LAPACK library instead of included netlib LAPACK" OFF) + +# Check the usage of the user provided LAPACK libraries +if(LAPACK_LIBRARIES) + include(CheckFortranFunctionExists) + set(CMAKE_REQUIRED_LIBRARIES ${LAPACK_LIBRARIES}) + CHECK_FORTRAN_FUNCTION_EXISTS("dpotrf" LAPACK_FOUND) + unset( CMAKE_REQUIRED_LIBRARIES ) + if(LAPACK_FOUND) + message(STATUS "--> LAPACK supplied by user is WORKING, will use ${LAPACK_LIBRARIES}.") + else(LAPACK_FOUND) + message(ERROR "--> LAPACK supplied by user is not WORKING, CANNOT USE $LAPACK_LIBRARIES}.") + message(ERROR "--> Will use REFERENCE LAPACK (by default)") + message(ERROR "--> Or Correct your LAPACK_LIBRARIES entry ") + message(ERROR "--> Or Consider checking USE_OPTIMIZED_LAPACK") + endif(LAPACK_FOUND) + + # User did not provide a LAPACK Library but specified to search for one +elseif( USE_OPTIMIZED_LAPACK ) + find_package( LAPACK ) +endif (LAPACK_LIBRARIES) + +# Neither user specified or optimized LAPACK libraries can be used +if(NOT LAPACK_FOUND) + message(STATUS "Using supplied NETLIB LAPACK implementation") + set( LAPACK_LIBRARIES lapack ) + option(BUILD_SINGLE "Build LAPACK Single Precision" ON) + option(BUILD_DOUBLE "Build LAPACK Double Precision" ON) + option(BUILD_COMPLEX "Build LAPACK Complex Precision" ON) + option(BUILD_COMPLEX16 "Build LAPACK Double Complex Precision" ON) + add_subdirectory(SRC) +else() + set( CMAKE_EXE_LINKER_FLAGS + "${CMAKE_EXE_LINKER_FLAGS} ${LAPACK_LINKER_FLAGS}" + CACHE STRING "Linker flags for executables" FORCE) + set( CMAKE_MODULE_LINKER_FLAGS + "${CMAKE_MODULE_LINKER_FLAGS} ${LAPACK_LINKER_FLAGS}" + CACHE STRING "Linker flags for modules" FORCE) + set( CMAKE_SHARED_LINKER_FLAGS + "${CMAKE_SHARED_LINKER_FLAGS} ${LAPACK_LINKER_FLAGS}" + CACHE STRING "Linker flags for shared libs" FORCE) +endif( NOT LAPACK_FOUND ) + if(BUILD_TESTING) add_subdirectory(TESTING) endif(BUILD_TESTING) @@ -155,6 +193,10 @@ # -------------------------------------------------- # LAPACKE option(LAPACKE "Build LAPACKE" OFF) +if(LAPACKE) + add_subdirectory(lapacke) +endif(LAPACKE) + # LAPACKE has also the interface to some routines from tmglib, # if LAPACKE_WITH_TMG is selected, we need to add those routines to LAPACKE option(LAPACKE_WITH_TMG "Build LAPACKE with tmglib routines" OFF) @@ -162,9 +204,6 @@ option(LAPACKE "Build LAPACKE" ON) endif(LAPACKE_WITH_TMG) -if(LAPACKE) - add_subdirectory(lapacke) -endif(LAPACKE) # -------------------------------------------------- # CPACK Packaging @@ -202,20 +241,24 @@ OPTION(BUILD_STATIC_LIBS "Build static libraries" ON ) #OPTION(BUILD_SHARED_LIBS "Build shared libraries" ON ) -if( NOT BLAS_FOUND ) - if(LAPACKE) - export(TARGETS blas lapack tmglib lapacke FILE lapack-targets.cmake) - else (LAPACKE) - export(TARGETS blas lapack tmglib FILE lapack-targets.cmake) - endif(LAPACKE) -else( NOT BLAS_FOUND ) - if(LAPACKE) - export(TARGETS lapack tmglib lapacke FILE lapack-targets.cmake) - else (LAPACKE) - export(TARGETS lapack tmglib FILE lapack-targets.cmake) - endif(LAPACKE) -endif( NOT BLAS_FOUND ) +if(NOT BLAS_FOUND) + set(ALL_TARGETS ${ALL_TARGETS} blas) +endif(NOT BLAS_FOUND) +if(NOT LAPACK_FOUND) + set(ALL_TARGETS ${ALL_TARGETS} lapack) +endif(NOT LAPACK_FOUND) + +if(BUILD_TESTING OR LAPACKE_WITH_TMG) + set(ALL_TARGETS ${ALL_TARGETS} tmglib) +endif(BUILD_TESTING OR LAPACKE_WITH_TMG) + +if(LAPACKE) + set(ALL_TARGETS ${ALL_TARGETS} lapacke) +endif(LAPACKE) + +export(TARGETS ${ALL_TARGETS} FILE lapack-targets.cmake) + configure_file(${LAPACK_SOURCE_DIR}/CMAKE/lapack-config-version.cmake.in ${LAPACK_BINARY_DIR}/lapack-config-version.cmake @ONLY) configure_file(${LAPACK_SOURCE_DIR}/CMAKE/lapack-config-build.cmake.in Index: lapacke/example/CMakeLists.txt =================================================================== --- lapacke/example/CMakeLists.txt (revision 1294) +++ lapacke/example/CMakeLists.txt (working copy) @@ -1,8 +1,8 @@ add_executable(xexample_DGESV_rowmajor example_DGESV_rowmajor.c) add_executable(xexample_ZGESV_rowmajor example_ZGESV_rowmajor.c) -target_link_libraries(xexample_DGESV_rowmajor lapacke lapack ${BLAS_LIBRARIES}) -target_link_libraries(xexample_ZGESV_rowmajor lapacke lapack ${BLAS_LIBRARIES}) +target_link_libraries(xexample_DGESV_rowmajor lapacke ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES}) +target_link_libraries(xexample_ZGESV_rowmajor lapacke ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES}) add_test(example_DGESV_rowmajor ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/xexample_DGESV_rowmajor) add_test(example_ZGESV_rowmajor ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/xexample_ZGESV_rowmajor) Index: lapacke/CMakeLists.txt =================================================================== --- lapacke/CMakeLists.txt (revision 1294) +++ lapacke/CMakeLists.txt (working copy) @@ -45,14 +45,14 @@ if (USE_XBLAS) add_library(lapacke ${SRC_OBJ} ${SRCX_OBJ} ${UTILS_OBJ}) - target_link_libraries(lapacke lapack ${BLAS_LIBRARIES} ${XBLAS_LIBRARY}) + target_link_libraries(lapacke ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES} ${XBLAS_LIBRARY}) else (USE_XBLAS) if (LAPACKE_WITH_TMG) add_library(lapacke ${SRC_OBJ} ${MATGEN_OBJ} ${UTILS_OBJ}) - target_link_libraries(lapacke tmglib lapack ${BLAS_LIBRARIES} ) + target_link_libraries(lapacke tmglib ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES}) else (LAPACKE_WITH_TMG) add_library(lapacke ${SRC_OBJ} ${UTILS_OBJ}) - target_link_libraries(lapacke lapack ${BLAS_LIBRARIES} ) + target_link_libraries(lapacke ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES}) endif(LAPACKE_WITH_TMG) endif(USE_XBLAS) Index: TESTING/LIN/CMakeLists.txt =================================================================== --- TESTING/LIN/CMakeLists.txt (revision 1294) +++ TESTING/LIN/CMakeLists.txt (working copy) @@ -193,7 +193,7 @@ macro(add_lin_executable name ) add_executable(${name} ${ARGN}) - target_link_libraries(${name} tmglib lapack) + target_link_libraries(${name} tmglib ${LAPACK_LIBRARIES}) endmacro(add_lin_executable) IF(BUILD_SINGLE) Index: TESTING/EIG/CMakeLists.txt =================================================================== --- TESTING/EIG/CMakeLists.txt (revision 1294) +++ TESTING/EIG/CMakeLists.txt (working copy) @@ -119,7 +119,7 @@ macro(add_eig_executable name ) add_executable(${name} ${ARGN}) - target_link_libraries(${name} tmglib lapack ) + target_link_libraries(${name} tmglib ${LAPACK_LIBRARIES}) endmacro(add_eig_executable) if (BUILD_SINGLE) Index: TESTING/MATGEN/CMakeLists.txt =================================================================== --- TESTING/MATGEN/CMakeLists.txt (revision 1294) +++ TESTING/MATGEN/CMakeLists.txt (working copy) @@ -64,12 +64,12 @@ set(ALLOBJ ${ALLOBJ} ${ZMATGEN} ${DZATGEN}) endif() -list(REMOVE_DUPLICATES ALLOBJ) - if (NOT ALLOBJ) set(ALLOBJ ${SMATGEN} ${CMATGEN} ${SCATGEN} ${DMATGEN} ${ZMATGEN} ${DZATGEN}) +else() + list(REMOVE_DUPLICATES ALLOBJ) endif() add_library(tmglib ${ALLOBJ} ) -target_link_libraries(tmglib lapack) +target_link_libraries(tmglib ${LAPACK_LIBRARIES}) lapack_install_library(tmglib)