diff options
-rw-r--r-- | Help/release/dev/FindLAPACK-import-target.rst | 4 | ||||
-rw-r--r-- | Modules/FindLAPACK.cmake | 25 | ||||
-rw-r--r-- | Tests/CMakeLists.txt | 1 | ||||
-rw-r--r-- | Tests/FindLAPACK/CMakeLists.txt | 10 | ||||
-rw-r--r-- | Tests/FindLAPACK/Test/CMakeLists.txt | 13 | ||||
-rw-r--r-- | Tests/FindLAPACK/Test/main.c | 20 |
6 files changed, 73 insertions, 0 deletions
diff --git a/Help/release/dev/FindLAPACK-import-target.rst b/Help/release/dev/FindLAPACK-import-target.rst new file mode 100644 index 0000000..912d642 --- /dev/null +++ b/Help/release/dev/FindLAPACK-import-target.rst @@ -0,0 +1,4 @@ +FindLAPACK-import-target +------------------------ + +* The :module:`FindLAPACK` module now provides an imported target. diff --git a/Modules/FindLAPACK.cmake b/Modules/FindLAPACK.cmake index e5bd58d..e275946 100644 --- a/Modules/FindLAPACK.cmake +++ b/Modules/FindLAPACK.cmake @@ -47,6 +47,14 @@ The following variables may be set to influence this module's behavior: ``BLA_F95`` if ``ON`` tries to find the BLAS95/LAPACK95 interfaces +Imported targets +^^^^^^^^^^^^^^^^ + +This module defines the following :prop_tgt:`IMPORTED` target: + +``LAPACK::LAPACK`` + The libraries to use for LAPACK, if found. + Result Variables ^^^^^^^^^^^^^^^^ @@ -526,5 +534,22 @@ if(LAPACK_LIBRARIES STREQUAL "LAPACK_LIBRARIES-PLACEHOLDER-FOR-EMPTY-LIBRARIES") set(LAPACK_LIBRARIES "") endif() +if(NOT TARGET LAPACK::LAPACK) + add_library(LAPACK::LAPACK INTERFACE IMPORTED) + set(_lapack_libs "${LAPACK_LIBRARIES}") + if(_lapack_libs AND TARGET BLAS::BLAS) + # remove the ${BLAS_LIBRARIES} from the interface and replace it + # with the BLAS::BLAS target + list(REMOVE_ITEM _lapack_libs "${BLAS_LIBRARIES}") + endif() + + if(_lapack_libs) + set_target_properties(LAPACK::LAPACK PROPERTIES + INTERFACE_LINK_LIBRARIES "${_lapack_libs}" + ) + endif() + unset(_lapack_libs) +endif() + cmake_pop_check_state() set(CMAKE_FIND_LIBRARY_SUFFIXES ${_lapack_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES}) diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index ed472a1..5011863 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -1434,6 +1434,7 @@ ${CMake_SOURCE_DIR}/Utilities/Release/push.bash --dir dev -- '${CMake_BUILD_NIGH ICU JPEG JsonCpp + LAPACK LibArchive LibLZMA LibRHash diff --git a/Tests/FindLAPACK/CMakeLists.txt b/Tests/FindLAPACK/CMakeLists.txt new file mode 100644 index 0000000..2081d59 --- /dev/null +++ b/Tests/FindLAPACK/CMakeLists.txt @@ -0,0 +1,10 @@ +add_test(NAME FindLAPACK.Test COMMAND + ${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION> + --build-and-test + "${CMake_SOURCE_DIR}/Tests/FindLAPACK/Test" + "${CMake_BINARY_DIR}/Tests/FindLAPACK/Test" + ${build_generator_args} + --build-project TestFindLAPACK + --build-options ${build_options} + --test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION> + ) diff --git a/Tests/FindLAPACK/Test/CMakeLists.txt b/Tests/FindLAPACK/Test/CMakeLists.txt new file mode 100644 index 0000000..8afa36a --- /dev/null +++ b/Tests/FindLAPACK/Test/CMakeLists.txt @@ -0,0 +1,13 @@ +cmake_minimum_required(VERSION 3.4) +project(TestFindLAPACK C) +include(CTest) + +find_package(LAPACK REQUIRED) + +add_executable(test_tgt main.c) +target_link_libraries(test_tgt LAPACK::LAPACK) +add_test(NAME test_tgt COMMAND test_tgt) + +add_executable(test_var main.c) +target_link_libraries(test_var PRIVATE ${LAPACK_LIBRARIES}) +add_test(NAME test_var COMMAND test_var) diff --git a/Tests/FindLAPACK/Test/main.c b/Tests/FindLAPACK/Test/main.c new file mode 100644 index 0000000..5873e7b --- /dev/null +++ b/Tests/FindLAPACK/Test/main.c @@ -0,0 +1,20 @@ +#include <assert.h> +#include <string.h> + +// declare what parts of the lapack C-API we need +void dgesv_(int*, int*, double*, int*, int*, double*, int*, int*); + +int main() +{ + double A[8] = { + 0, 1, 2, 3, 4, 5, 6, 7, + }; + double B[2] = { 0, 5 }; + int ipiv[2] = { 0, 0 }; + int info = 0; + + int dim = 2; + int numCols = 1; + dgesv_(&dim, &numCols, A, &dim, ipiv, B, &dim, &info); + return 0; +} |