123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452 |
- project(EigenLapack CXX)
- include(CheckLanguage)
- check_language(Fortran)
- if(CMAKE_Fortran_COMPILER)
- enable_language(Fortran)
- set(EIGEN_Fortran_COMPILER_WORKS ON)
- else()
- set(EIGEN_Fortran_COMPILER_WORKS OFF)
- endif()
- add_custom_target(lapack)
- include_directories(../blas)
- set(EigenLapack_SRCS
- single.cpp double.cpp complex_single.cpp complex_double.cpp ../blas/xerbla.cpp
- )
- if(EIGEN_Fortran_COMPILER_WORKS)
- set(EigenLapack_SRCS ${EigenLapack_SRCS}
- slarft.f dlarft.f clarft.f zlarft.f
- slarfb.f dlarfb.f clarfb.f zlarfb.f
- slarfg.f dlarfg.f clarfg.f zlarfg.f
- slarf.f dlarf.f clarf.f zlarf.f
- sladiv.f dladiv.f cladiv.f zladiv.f
- ilaslr.f iladlr.f ilaclr.f ilazlr.f
- ilaslc.f iladlc.f ilaclc.f ilazlc.f
- dlapy2.f dlapy3.f slapy2.f slapy3.f
- clacgv.f zlacgv.f
- slamch.f dlamch.f
- second_NONE.f dsecnd_NONE.f
- )
- option(EIGEN_ENABLE_LAPACK_TESTS OFF "Enable the Lapack unit tests")
- if(EIGEN_ENABLE_LAPACK_TESTS)
- get_filename_component(eigen_full_path_to_reference_lapack "./reference/" ABSOLUTE)
- if(NOT EXISTS ${eigen_full_path_to_reference_lapack})
- # Download lapack and install sources and testing at the right place
- message(STATUS "Download lapack_addons_3.4.1.tgz...")
-
- file(DOWNLOAD "http://downloads.tuxfamily.org/eigen/lapack_addons_3.4.1.tgz"
- "${CMAKE_CURRENT_SOURCE_DIR}/lapack_addons_3.4.1.tgz"
- INACTIVITY_TIMEOUT 15
- TIMEOUT 240
- STATUS download_status
- EXPECTED_MD5 ab5742640617e3221a873aba44bbdc93
- SHOW_PROGRESS)
-
- message(STATUS ${download_status})
- list(GET download_status 0 download_status_num)
- set(download_status_num 0)
- if(download_status_num EQUAL 0)
- message(STATUS "Setup lapack reference and lapack unit tests")
- execute_process(COMMAND tar xzf "lapack_addons_3.4.1.tgz" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
- else()
- message(STATUS "Download of lapack_addons_3.4.1.tgz failed, LAPACK unit tests won't be enabled")
- set(EIGEN_ENABLE_LAPACK_TESTS false)
- endif()
-
- endif()
-
- get_filename_component(eigen_full_path_to_reference_lapack "./reference/" ABSOLUTE)
- if(EXISTS ${eigen_full_path_to_reference_lapack})
- set(EigenLapack_funcfilenames
- ssyev.f dsyev.f csyev.f zsyev.f
- spotrf.f dpotrf.f cpotrf.f zpotrf.f
- spotrs.f dpotrs.f cpotrs.f zpotrs.f
- sgetrf.f dgetrf.f cgetrf.f zgetrf.f
- sgetrs.f dgetrs.f cgetrs.f zgetrs.f)
-
- file(GLOB ReferenceLapack_SRCS0 RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "reference/*.f")
- foreach(filename1 IN LISTS ReferenceLapack_SRCS0)
- string(REPLACE "reference/" "" filename ${filename1})
- list(FIND EigenLapack_SRCS ${filename} id1)
- list(FIND EigenLapack_funcfilenames ${filename} id2)
- if((id1 EQUAL -1) AND (id2 EQUAL -1))
- set(ReferenceLapack_SRCS ${ReferenceLapack_SRCS} reference/${filename})
- endif()
- endforeach()
- endif()
-
-
- endif()
- endif()
- set(EIGEN_LAPACK_TARGETS "")
- add_library(eigen_lapack_static ${EigenLapack_SRCS} ${ReferenceLapack_SRCS})
- list(APPEND EIGEN_LAPACK_TARGETS eigen_lapack_static)
- if (EIGEN_BUILD_SHARED_LIBS)
- add_library(eigen_lapack SHARED ${EigenLapack_SRCS})
- list(APPEND EIGEN_LAPACK_TARGETS eigen_lapack)
- target_link_libraries(eigen_lapack eigen_blas)
- endif()
- foreach(target IN LISTS EIGEN_LAPACK_TARGETS)
- if(EIGEN_STANDARD_LIBRARIES_TO_LINK_TO)
- target_link_libraries(${target} ${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO})
- endif()
- add_dependencies(lapack ${target})
- install(TARGETS ${target}
- RUNTIME DESTINATION bin
- LIBRARY DESTINATION lib
- ARCHIVE DESTINATION lib)
- endforeach()
- get_filename_component(eigen_full_path_to_testing_lapack "./testing/" ABSOLUTE)
- if(EXISTS ${eigen_full_path_to_testing_lapack})
-
- # The following comes from lapack/TESTING/CMakeLists.txt
- # Get Python
- find_package(PythonInterp)
- message(STATUS "Looking for Python found - ${PYTHONINTERP_FOUND}")
- if (PYTHONINTERP_FOUND)
- message(STATUS "Using Python version ${PYTHON_VERSION_STRING}")
- endif()
- set(LAPACK_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
- set(LAPACK_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
- set(BUILD_SINGLE true)
- set(BUILD_DOUBLE true)
- set(BUILD_COMPLEX true)
- set(BUILD_COMPLEX16E true)
-
- if(MSVC_VERSION)
- # string(REPLACE "/STACK:10000000" "/STACK:900000000000000000"
- # CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
- string(REGEX REPLACE "(.*)/STACK:(.*) (.*)" "\\1/STACK:900000000000000000 \\3"
- CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
- endif()
- file(MAKE_DIRECTORY "${LAPACK_BINARY_DIR}/TESTING")
- add_subdirectory(testing/MATGEN)
- add_subdirectory(testing/LIN)
- add_subdirectory(testing/EIG)
- macro(add_lapack_test output input target)
- set(TEST_INPUT "${LAPACK_SOURCE_DIR}/testing/${input}")
- set(TEST_OUTPUT "${LAPACK_BINARY_DIR}/TESTING/${output}")
- string(REPLACE "." "_" input_name ${input})
- set(testName "${target}_${input_name}")
- if(EXISTS "${TEST_INPUT}")
- add_test(NAME LAPACK-${testName}
- COMMAND "${CMAKE_COMMAND}"
- -DTEST=$<TARGET_FILE:${target}>
- -DINPUT=${TEST_INPUT}
- -DOUTPUT=${TEST_OUTPUT}
- -DINTDIR=${CMAKE_CFG_INTDIR}
- -P "${LAPACK_SOURCE_DIR}/testing/runtest.cmake")
- endif()
- endmacro()
- if (BUILD_SINGLE)
- add_lapack_test(stest.out stest.in xlintsts)
- #
- # ======== SINGLE RFP LIN TESTS ========================
- add_lapack_test(stest_rfp.out stest_rfp.in xlintstrfs)
- #
- #
- # ======== SINGLE EIG TESTS ===========================
- #
- add_lapack_test(snep.out nep.in xeigtsts)
- add_lapack_test(ssep.out sep.in xeigtsts)
- add_lapack_test(ssvd.out svd.in xeigtsts)
- add_lapack_test(sec.out sec.in xeigtsts)
- add_lapack_test(sed.out sed.in xeigtsts)
- add_lapack_test(sgg.out sgg.in xeigtsts)
- add_lapack_test(sgd.out sgd.in xeigtsts)
- add_lapack_test(ssb.out ssb.in xeigtsts)
- add_lapack_test(ssg.out ssg.in xeigtsts)
- add_lapack_test(sbal.out sbal.in xeigtsts)
- add_lapack_test(sbak.out sbak.in xeigtsts)
- add_lapack_test(sgbal.out sgbal.in xeigtsts)
- add_lapack_test(sgbak.out sgbak.in xeigtsts)
- add_lapack_test(sbb.out sbb.in xeigtsts)
- add_lapack_test(sglm.out glm.in xeigtsts)
- add_lapack_test(sgqr.out gqr.in xeigtsts)
- add_lapack_test(sgsv.out gsv.in xeigtsts)
- add_lapack_test(scsd.out csd.in xeigtsts)
- add_lapack_test(slse.out lse.in xeigtsts)
- endif()
- if (BUILD_DOUBLE)
- #
- # ======== DOUBLE LIN TESTS ===========================
- add_lapack_test(dtest.out dtest.in xlintstd)
- #
- # ======== DOUBLE RFP LIN TESTS ========================
- add_lapack_test(dtest_rfp.out dtest_rfp.in xlintstrfd)
- #
- # ======== DOUBLE EIG TESTS ===========================
- add_lapack_test(dnep.out nep.in xeigtstd)
- add_lapack_test(dsep.out sep.in xeigtstd)
- add_lapack_test(dsvd.out svd.in xeigtstd)
- add_lapack_test(dec.out dec.in xeigtstd)
- add_lapack_test(ded.out ded.in xeigtstd)
- add_lapack_test(dgg.out dgg.in xeigtstd)
- add_lapack_test(dgd.out dgd.in xeigtstd)
- add_lapack_test(dsb.out dsb.in xeigtstd)
- add_lapack_test(dsg.out dsg.in xeigtstd)
- add_lapack_test(dbal.out dbal.in xeigtstd)
- add_lapack_test(dbak.out dbak.in xeigtstd)
- add_lapack_test(dgbal.out dgbal.in xeigtstd)
- add_lapack_test(dgbak.out dgbak.in xeigtstd)
- add_lapack_test(dbb.out dbb.in xeigtstd)
- add_lapack_test(dglm.out glm.in xeigtstd)
- add_lapack_test(dgqr.out gqr.in xeigtstd)
- add_lapack_test(dgsv.out gsv.in xeigtstd)
- add_lapack_test(dcsd.out csd.in xeigtstd)
- add_lapack_test(dlse.out lse.in xeigtstd)
- endif()
- if (BUILD_COMPLEX)
- add_lapack_test(ctest.out ctest.in xlintstc)
- #
- # ======== COMPLEX RFP LIN TESTS ========================
- add_lapack_test(ctest_rfp.out ctest_rfp.in xlintstrfc)
- #
- # ======== COMPLEX EIG TESTS ===========================
- add_lapack_test(cnep.out nep.in xeigtstc)
- add_lapack_test(csep.out sep.in xeigtstc)
- add_lapack_test(csvd.out svd.in xeigtstc)
- add_lapack_test(cec.out cec.in xeigtstc)
- add_lapack_test(ced.out ced.in xeigtstc)
- add_lapack_test(cgg.out cgg.in xeigtstc)
- add_lapack_test(cgd.out cgd.in xeigtstc)
- add_lapack_test(csb.out csb.in xeigtstc)
- add_lapack_test(csg.out csg.in xeigtstc)
- add_lapack_test(cbal.out cbal.in xeigtstc)
- add_lapack_test(cbak.out cbak.in xeigtstc)
- add_lapack_test(cgbal.out cgbal.in xeigtstc)
- add_lapack_test(cgbak.out cgbak.in xeigtstc)
- add_lapack_test(cbb.out cbb.in xeigtstc)
- add_lapack_test(cglm.out glm.in xeigtstc)
- add_lapack_test(cgqr.out gqr.in xeigtstc)
- add_lapack_test(cgsv.out gsv.in xeigtstc)
- add_lapack_test(ccsd.out csd.in xeigtstc)
- add_lapack_test(clse.out lse.in xeigtstc)
- endif()
- if (BUILD_COMPLEX16)
- #
- # ======== COMPLEX16 LIN TESTS ========================
- add_lapack_test(ztest.out ztest.in xlintstz)
- #
- # ======== COMPLEX16 RFP LIN TESTS ========================
- add_lapack_test(ztest_rfp.out ztest_rfp.in xlintstrfz)
- #
- # ======== COMPLEX16 EIG TESTS ===========================
- add_lapack_test(znep.out nep.in xeigtstz)
- add_lapack_test(zsep.out sep.in xeigtstz)
- add_lapack_test(zsvd.out svd.in xeigtstz)
- add_lapack_test(zec.out zec.in xeigtstz)
- add_lapack_test(zed.out zed.in xeigtstz)
- add_lapack_test(zgg.out zgg.in xeigtstz)
- add_lapack_test(zgd.out zgd.in xeigtstz)
- add_lapack_test(zsb.out zsb.in xeigtstz)
- add_lapack_test(zsg.out zsg.in xeigtstz)
- add_lapack_test(zbal.out zbal.in xeigtstz)
- add_lapack_test(zbak.out zbak.in xeigtstz)
- add_lapack_test(zgbal.out zgbal.in xeigtstz)
- add_lapack_test(zgbak.out zgbak.in xeigtstz)
- add_lapack_test(zbb.out zbb.in xeigtstz)
- add_lapack_test(zglm.out glm.in xeigtstz)
- add_lapack_test(zgqr.out gqr.in xeigtstz)
- add_lapack_test(zgsv.out gsv.in xeigtstz)
- add_lapack_test(zcsd.out csd.in xeigtstz)
- add_lapack_test(zlse.out lse.in xeigtstz)
- endif()
- if (BUILD_SIMPLE)
- if (BUILD_DOUBLE)
- #
- # ======== SINGLE-DOUBLE PROTO LIN TESTS ==============
- add_lapack_test(dstest.out dstest.in xlintstds)
- endif()
- endif()
- if (BUILD_COMPLEX)
- if (BUILD_COMPLEX16)
- #
- # ======== COMPLEX-COMPLEX16 LIN TESTS ========================
- add_lapack_test(zctest.out zctest.in xlintstzc)
- endif()
- endif()
- # ==============================================================================
- execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${LAPACK_SOURCE_DIR}/testing/lapack_testing.py ${LAPACK_BINARY_DIR})
- add_test(
- NAME LAPACK_Test_Summary
- WORKING_DIRECTORY ${LAPACK_BINARY_DIR}
- COMMAND ${PYTHON_EXECUTABLE} "lapack_testing.py"
- )
- endif()
|