From 2e9ed8f6a5e9c2a99f47f609c56998c87370b0ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=BCtzel?= Date: Fri, 29 Dec 2023 22:30:21 +0100 Subject: [PATCH 1/3] Example: Add files for building with autotools Simple example for downstream projects using autotools. --- Example/CMakeLists.txt | 4 +-- Example/Demo/my_demo.cc | 32 +++++++++++++++++++ Example/Makefile.am | 69 +++++++++++++++++++++++++++++++++++++++++ Example/configure.ac | 41 ++++++++++++++++++++++++ 4 files changed, 144 insertions(+), 2 deletions(-) create mode 100644 Example/Demo/my_demo.cc create mode 100644 Example/Makefile.am create mode 100644 Example/configure.ac diff --git a/Example/CMakeLists.txt b/Example/CMakeLists.txt index 8f48ea555c..5502cba1a3 100644 --- a/Example/CMakeLists.txt +++ b/Example/CMakeLists.txt @@ -630,7 +630,7 @@ if ( BUILD_SHARED_LIBS ) add_executable ( my_demo "Demo/my_demo.c" ) target_link_libraries ( my_demo PUBLIC my ) - add_executable ( my_cxx_demo "Demo/my_demo.c" ) + add_executable ( my_cxx_demo "Demo/my_demo.cc" ) target_link_libraries ( my_cxx_demo PUBLIC my_cxx ) endif ( ) @@ -638,7 +638,7 @@ if ( BUILD_STATIC_LIBS ) add_executable ( my_demo_static "Demo/my_demo.c" ) target_link_libraries ( my_demo_static PUBLIC my_static ) - add_executable ( my_cxx_demo_static "Demo/my_demo.c" ) + add_executable ( my_cxx_demo_static "Demo/my_demo.cc" ) target_link_libraries ( my_cxx_demo_static PUBLIC my_cxx_static ) endif ( ) diff --git a/Example/Demo/my_demo.cc b/Example/Demo/my_demo.cc new file mode 100644 index 0000000000..127a95de70 --- /dev/null +++ b/Example/Demo/my_demo.cc @@ -0,0 +1,32 @@ +//------------------------------------------------------------------------------ +// SuiteSparse/Example/Demo/my_demo.c +//------------------------------------------------------------------------------ + +// Copyright (c) 2022-2023, Timothy A. Davis, All Rights Reserved. +// SPDX-License-Identifier: BSD-3-clause + +//------------------------------------------------------------------------------ + +// Example user program + +#include + +#include "my.h" + +int main (void) +{ + std::cout << "My demo" << std::endl ; + int version [3] ; + char date [128] ; + my_version (version, date) ; + std::cout << "Date from #include 'my.h': " << MY_DATE << std::endl ; + std::cout << "Date from compiled library: " << date << std::endl ; + std::cout << "version from #include 'my.h.': " << + MY_MAJOR_VERSION << '.' << MY_MINOR_VERSION << '.' << MY_PATCH_VERSION << std::endl ; + std::cout << "version from compiled library: " << + version [0] << '.' << version [1] << '.' << version [2] << std::endl ; + + int result = my_function ( ) ; + return (result) ; +} + diff --git a/Example/Makefile.am b/Example/Makefile.am new file mode 100644 index 0000000000..2484bde191 --- /dev/null +++ b/Example/Makefile.am @@ -0,0 +1,69 @@ +#------------------------------------------------------------------------------- +# SuiteSparse/Example/Makefile +#------------------------------------------------------------------------------- + +# Example: Copyright (c) 2023, Timothy A. Davis, All Rights Reserved. +# SPDX-License-Identifier: BSD-3-Clause + +#------------------------------------------------------------------------------- + +# A simple Makefile for the MY library in SuiteSparse/Example, which relies on +# libtool. + +# To compile with an alternate compiler: +# +# make CC=gcc CXX=g++ +# +# To clean up the files: +# +# make clean + +noinst_LTLIBRARIES = \ + %reldir%/libmy.la \ + %reldir%/libmy_cxx.la + +%canon_reldir%_libmy_la_SOURCES = %reldir%/Source/my.c +%canon_reldir%_libmy_la_CPPFLAGS = -I../Include @SUITESPARSE_CFLAGS@ +%canon_reldir%_libmy_la_LIBADD = @SUITESPARSE_LIBS@ + +%canon_reldir%_libmy_cxx_la_SOURCES = %reldir%/Source/my_cxx.cc +%canon_reldir%_libmy_cxx_la_CPPFLAGS = -I../Include @SUITESPARSE_CFLAGS@ +%canon_reldir%_libmy_cxx_la_LIBADD = @SUITESPARSE_LIBS@ + +if AMCOND_HAVE_GRAPHBLAS +%canon_reldir%_libmy_la_CPPFLAGS += @GRAPHBLAS_CFLAGS@ +%canon_reldir%_libmy_la_LIBADD += @GRAPHBLAS_LIBS@ + +%canon_reldir%_libmy_cxx_la_CPPFLAGS += @GRAPHBLAS_CFLAGS@ +%canon_reldir%_libmy_cxx_la_LIBADD += @GRAPHBLAS_LIBS@ +else +%canon_reldir%_libmy_la_CPPFLAGS += -DNO_GRAPHBLAS + +%canon_reldir%_libmy_cxx_la_CPPFLAGS += -DNO_GRAPHBLAS +endif + +if AMCOND_HAVE_LAGRAPH +%canon_reldir%_libmy_la_CPPFLAGS += @LAGRAPH_CFLAGS@ +%canon_reldir%_libmy_la_LIBADD += @LAGRAPH_LIBS@ + +%canon_reldir%_libmy_cxx_la_CPPFLAGS += @LAGRAPH_CFLAGS@ +%canon_reldir%_libmy_cxx_la_LIBADD += @LAGRAPH_LIBS@ +else +%canon_reldir%_libmy_la_CPPFLAGS += -DNO_LAGRAPH + +%canon_reldir%_libmy_cxx_la_CPPFLAGS += -DNO_LAGRAPH +endif + +demo_PROGRAMS = \ + %reldir%/my_demo \ + %reldir%/my_cxx_demo + +demodir = %canon_reldir% + +%canon_reldir%_my_demo_SOURCES = %reldir%/Demo/my_demo.c +%canon_reldir%_my_demo_CPPFLAGS = -I../Include +%canon_reldir%_my_demo_LDADD = %reldir%/libmy.la + +%canon_reldir%_my_cxx_demo_SOURCES = %reldir%/Demo/my_demo.cc +%canon_reldir%_my_cxx_demo_CPPFLAGS = -I../Include +%canon_reldir%_my_cxx_demo_LDADD = %reldir%/libmy_cxx.la diff --git a/Example/configure.ac b/Example/configure.ac new file mode 100644 index 0000000000..70766e2416 --- /dev/null +++ b/Example/configure.ac @@ -0,0 +1,41 @@ +# simple configure file for example project in SuiteSparse + +# initialize +AC_INIT([example], [1.6.0]) + +AM_INIT_AUTOMAKE([foreign subdir-objects]) + +LT_INIT + +# check for working compilers +AC_PROG_CC +AC_PROG_CXX + +# find pkg-config executable +PKG_PROG_PKG_CONFIG() + +if test "$enable_static" = yes; then + PKG_CONFIG="$PKG_CONFIG --static" +fi + +# find installed SuiteSparse libraries +PKG_CHECK_MODULES([SUITESPARSE], [SuiteSparse_config AMD BTF CAMD CCOLAMD CHOLMOD COLAMD CXSparse KLU KLU_CHOLMOD LDL SuiteSparse_Mongoose ParU RBio SPEX SPQR UMFPACK]) + +PKG_CHECK_MODULES([GRAPHBLAS], [GraphBLAS], [use_graphblas=yes], [use_graphblas=no]) +AM_CONDITIONAL([AMCOND_HAVE_GRAPHBLAS], [test $use_graphblas = yes]) + +PKG_CHECK_MODULES([LAGRAPH], [LAGraph], [use_lagraph=yes], [use_lagraph=no]) +AM_CONDITIONAL([AMCOND_HAVE_LAGRAPH], [test $use_lagraph = yes]) + +# Check if linker flags are needed for function fmax. +# Adds -lm to LIBS if needed. +AC_CHECK_FUNC(fmax, [], AC_CHECK_LIB(m, fmax)) + +# Check for C++ STL. +# If found, this will add -lstdc++ to LIBS. +# FIXME: This is a workaround to allow linking CUDA libraries to a C binary. +AC_CHECK_LIB(stdc++, __gxx_personality_v0) + +# create Makefile.in from Makefile.am +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT From a7df90757fba2c3436fbcc80660988cb662a8ffc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=BCtzel?= Date: Fri, 29 Dec 2023 22:36:43 +0100 Subject: [PATCH 2/3] CI: Add step that builds example project with autotools That checks if the pkg-config files are working correctly. --- .github/workflows/build-arch-emu.yaml | 24 +++++++++++- .github/workflows/build.yaml | 51 +++++++++++++++++++++++++- .github/workflows/root-cmakelists.yaml | 27 +++++++++++++- 3 files changed, 98 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-arch-emu.yaml b/.github/workflows/build-arch-emu.yaml index 371a2bd218..3415c452ab 100644 --- a/.github/workflows/build-arch-emu.yaml +++ b/.github/workflows/build-arch-emu.yaml @@ -75,6 +75,9 @@ jobs: lapack-dev valgrind util-linux-misc + autoconf + automake + libtool - name: get CPU information (emulated) run: lscpu @@ -170,7 +173,7 @@ jobs: echo "::endgroup::" done - - name: build example + - name: build example using CMake run: | cd ${GITHUB_WORKSPACE}/Example/build printf "::group::\033[0;32m==>\033[0m Configuring example\n" @@ -193,3 +196,22 @@ jobs: ./my_cxx_demo_static echo "::endgroup::" + - name: build example using autotools + run: | + cd ${GITHUB_WORKSPACE}/Example + printf "::group::\033[0;32m==>\033[0m Configuring example\n" + autoreconf -fi + mkdir build-autotools + cd build-autotools + PKG_CONFIG_PATH=${GITHUB_WORKSPACE}/lib/pkgconfig/ \ + ../configure --enable-shared --disable-static + echo "::endgroup::" + printf "::group::\033[0;32m==>\033[0m Building example\n" + make all + echo "::endgroup::" + printf "::group::\033[0;32m==>\033[0m Executing example\n" + printf "\033[1;35m C binary\033[0m\n" + LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/lib ./my_demo + printf "\033[1;35m C++ binary\033[0m\n" + LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/lib ./my_cxx_demo + echo "::endgroup::" diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 135eed7740..0252adaf2b 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -201,7 +201,7 @@ jobs: echo "::endgroup::" done - - name: build example + - name: build example using CMake run: | cd ${GITHUB_WORKSPACE}/Example/build printf "::group::\033[0;32m==>\033[0m Configuring example\n" @@ -228,6 +228,31 @@ jobs: ./my_cxx_demo_static echo "::endgroup::" + - name: build example using autotools + run: | + cd ${GITHUB_WORKSPACE}/Example + printf "::group::\033[0;32m==>\033[0m Configuring example\n" + autoreconf -fi + mkdir build-autotools + cd build-autotools + if [ "${{ matrix.link }}" = static ]; then + _extra_config_flags="--enable-static --disable-shared" + else + _extra_config_flags="--enable-shared --disable-static" + fi + PKG_CONFIG_PATH=${GITHUB_WORKSPACE}/lib/pkgconfig/ \ + ../configure ${_extra_config_flags} + echo "::endgroup::" + printf "::group::\033[0;32m==>\033[0m Building example\n" + make all + echo "::endgroup::" + printf "::group::\033[0;32m==>\033[0m Executing example\n" + printf "\033[1;35m C binary\033[0m\n" + LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/lib ./my_demo + printf "\033[1;35m C++ binary\033[0m\n" + LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/lib ./my_cxx_demo + echo "::endgroup::" + mingw: # For available GitHub-hosted runners, see: # https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners @@ -372,7 +397,7 @@ jobs: path: ${{ steps.ccache-prepare.outputs.ccachedir }} key: ${{ steps.ccache-prepare.outputs.key }} - - name: build example + - name: build example using CMake run: | cd ${GITHUB_WORKSPACE}/Example/build printf "::group::\033[0;32m==>\033[0m Configuring example\n" @@ -399,3 +424,25 @@ jobs: PATH="${GITHUB_WORKSPACE}/bin:${PATH}" \ ./my_cxx_demo_static echo "::endgroup::" + + - name: build example using autotools + run: | + cd ${GITHUB_WORKSPACE}/Example + printf "::group::\033[0;32m==>\033[0m Configuring example\n" + autoreconf -fi + mkdir build-autotools + cd build-autotools + PKG_CONFIG_PATH=${GITHUB_WORKSPACE}/lib/pkgconfig/ \ + ../configure --enable-shared --disable-static + echo "::endgroup::" + printf "::group::\033[0;32m==>\033[0m Building example\n" + make all + echo "::endgroup::" + printf "::group::\033[0;32m==>\033[0m Executing example\n" + printf "\033[1;35m C binary\033[0m\n" + PATH="${GITHUB_WORKSPACE}/bin:${PATH}" \ + ./my_demo + printf "\033[1;35m C++ binary\033[0m\n" + PATH="${GITHUB_WORKSPACE}/bin:${PATH}" \ + ./my_cxx_demo + echo "::endgroup::" diff --git a/.github/workflows/root-cmakelists.yaml b/.github/workflows/root-cmakelists.yaml index 6dc761a71b..07b505b972 100644 --- a/.github/workflows/root-cmakelists.yaml +++ b/.github/workflows/root-cmakelists.yaml @@ -184,7 +184,7 @@ jobs: cd ${GITHUB_WORKSPACE}/build cmake --install . - - name: build example + - name: build example using CMake run: | cd ${GITHUB_WORKSPACE}/Example/build printf "::group::\033[0;32m==>\033[0m Configuring example\n" @@ -211,6 +211,31 @@ jobs: ./my_cxx_demo_static echo "::endgroup::" + - name: build example using autotools + run: | + cd ${GITHUB_WORKSPACE}/Example + printf "::group::\033[0;32m==>\033[0m Configuring example\n" + autoreconf -fi + mkdir build-autotools + cd build-autotools + if [ "${{ matrix.link }}" = static ]; then + _extra_config_flags="--enable-static --disable-shared" + else + _extra_config_flags="--enable-shared --disable-static" + fi + PKG_CONFIG_PATH=${GITHUB_WORKSPACE}/lib/pkgconfig/ \ + ../configure ${_extra_config_flags} + echo "::endgroup::" + printf "::group::\033[0;32m==>\033[0m Building example\n" + make all + echo "::endgroup::" + printf "::group::\033[0;32m==>\033[0m Executing example\n" + printf "\033[1;35m C binary\033[0m\n" + LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/lib ./my_demo + printf "\033[1;35m C++ binary\033[0m\n" + LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/lib ./my_cxx_demo + echo "::endgroup::" + msvc: # For available GitHub-hosted runners, see: From cd8b020fd2c54e6cc661daf6375f84f0acd30ef6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=BCtzel?= Date: Sat, 30 Dec 2023 18:51:00 +0100 Subject: [PATCH 3/3] Include CUDA static linker flags in pkg-config files --- CHOLMOD/CMakeLists.txt | 22 ++++++++++++++++--- CHOLMOD/Config/CHOLMOD.pc.in | 2 -- SPQR/GPUQREngine/CMakeLists.txt | 12 ++++++++-- SPQR/GPUQREngine/Config/GPUQREngine.pc.in | 3 +-- SPQR/GPURuntime/CMakeLists.txt | 12 ++++++++-- .../Config/SuiteSparse_GPURuntime.pc.in | 3 +-- 6 files changed, 41 insertions(+), 13 deletions(-) diff --git a/CHOLMOD/CMakeLists.txt b/CHOLMOD/CMakeLists.txt index 30fc0c2a98..6084265e60 100644 --- a/CHOLMOD/CMakeLists.txt +++ b/CHOLMOD/CMakeLists.txt @@ -532,9 +532,20 @@ if ( CHOLMOD_HAS_CUDA ) $ ) endif ( ) if ( BUILD_STATIC_LIBS ) - target_link_libraries ( CHOLMOD_static PRIVATE CUDA::nvrtc CUDA::cudart_static CUDA::cublas ) - target_include_directories ( CHOLMOD_static INTERFACE - $ ) + target_link_libraries ( CHOLMOD_static PRIVATE CUDA::nvrtc CUDA::cudart_static ) + # FIXME: Ok to hardcode CUDA library names like this? + list ( APPEND CHOLMOD_STATIC_LIBS "-L${CUDAToolkit_LIBRARY_DIR};-lcuda;-lcudart_static" ) + if ( TARGET CUDA::cublas_static ) + target_link_libraries ( CHOLMOD_static PRIVATE CUDA::cublas_static ) + target_include_directories ( CHOLMOD_static INTERFACE + $ ) + list ( APPEND CHOLMOD_STATIC_LIBS "-lcublas_static;-lcublasLt_static;-lculibos" ) + else ( ) + target_link_libraries ( CHOLMOD_static PRIVATE CUDA::cublas ) + target_include_directories ( CHOLMOD_static INTERFACE + $ ) + list ( APPEND CHOLMOD_STATIC_LIBS "-lcublas" ) + endif ( ) endif ( ) set ( old_CMAKE_EXTRA_INCLUDE_FILES CMAKE_EXTRA_INCLUDE_FILES ) @@ -628,6 +639,11 @@ if ( NOT MSVC ) set ( CHOLMOD_STATIC_LIBS_LIST ${CHOLMOD_STATIC_LIBS} ) set ( CHOLMOD_STATIC_LIBS "" ) foreach ( _lib ${CHOLMOD_STATIC_LIBS_LIST} ) + if ( ${_lib} MATCHES "-[lL].*" ) + # take -L or -l flags as is + set ( CHOLMOD_STATIC_LIBS "${CHOLMOD_STATIC_LIBS} ${_lib}" ) + continue () + endif ( ) string ( FIND ${_lib} "." _pos REVERSE ) if ( ${_pos} EQUAL "-1" ) set ( CHOLMOD_STATIC_LIBS "${CHOLMOD_STATIC_LIBS} -l${_lib}" ) diff --git a/CHOLMOD/Config/CHOLMOD.pc.in b/CHOLMOD/Config/CHOLMOD.pc.in index d22987a890..fb9d43b52d 100644 --- a/CHOLMOD/Config/CHOLMOD.pc.in +++ b/CHOLMOD/Config/CHOLMOD.pc.in @@ -7,8 +7,6 @@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ -# FIXME: Which flags do we need to statically link CUDA if needed? - Name: CHOLMOD URL: https://github.com/DrTimothyAldenDavis/SuiteSparse Description: Routines for factorizing sparse symmetric positive definite matrices in SuiteSparse diff --git a/SPQR/GPUQREngine/CMakeLists.txt b/SPQR/GPUQREngine/CMakeLists.txt index cd25523dbe..b899e36287 100644 --- a/SPQR/GPUQREngine/CMakeLists.txt +++ b/SPQR/GPUQREngine/CMakeLists.txt @@ -142,9 +142,17 @@ if ( BUILD_STATIC_LIBS ) CUDA_SEPARABLE_COMPILATION ON CUDA_RESOLVE_DEVICE_SYMBOLS ON CUDA_RUNTIME_LIBRARY Static ) - target_link_libraries ( GPUQREngine_static PRIVATE - CUDA::nvrtc CUDA::cudart_static CUDA::cublas ) + target_link_libraries ( GPUQREngine_static PRIVATE CUDA::nvrtc CUDA::cudart_static ) target_compile_definitions ( GPUQREngine_static PRIVATE "SPQR_HAS_CUDA" ) + # FIXME: Ok to hardcode CUDA library names like this? + set ( GPUQRENGINE_STATIC_LIBS "-L${CUDAToolkit_LIBRARY_DIR} -lcuda -lcudart_static" ) + if ( TARGET CUDA::cublas_static ) + target_link_libraries ( GPUQREngine_static PRIVATE CUDA::cublas_static ) + set ( GPUQRENGINE_STATIC_LIBS "${GPUQRENGINE_STATIC_LIBS} -lcublas_static -lcublasLt_static -lculibos" ) + else ( ) + target_link_libraries ( GPUQREngine_static PRIVATE CUDA::cublas ) + set ( GPUQRENGINE_STATIC_LIBS "${GPUQRENGINE_STATIC_LIBS} -lcublas" ) + endif ( ) target_include_directories ( GPUQREngine_static INTERFACE $ diff --git a/SPQR/GPUQREngine/Config/GPUQREngine.pc.in b/SPQR/GPUQREngine/Config/GPUQREngine.pc.in index f5a534fde0..5d73e8647a 100644 --- a/SPQR/GPUQREngine/Config/GPUQREngine.pc.in +++ b/SPQR/GPUQREngine/Config/GPUQREngine.pc.in @@ -7,11 +7,10 @@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ -# FIXME: Which flags do we need to statically link CUDA - Name: GPUQREngine URL: https://github.com/DrTimothyAldenDavis/SuiteSparse Description: GPU-accelerated QR factorization engine supporting SuiteSparseQR in SuiteSparse Version: @SPQR_VERSION_MAJOR@.@SPQR_VERSION_MINOR@.@SPQR_VERSION_SUB@ Libs: -L${libdir} -l@SUITESPARSE_LIB_BASE_NAME@ +Libs.private: @GPUQRENGINE_STATIC_LIBS@ Cflags: -I${includedir} diff --git a/SPQR/GPURuntime/CMakeLists.txt b/SPQR/GPURuntime/CMakeLists.txt index 60210801b8..6d06047144 100644 --- a/SPQR/GPURuntime/CMakeLists.txt +++ b/SPQR/GPURuntime/CMakeLists.txt @@ -117,9 +117,17 @@ if ( BUILD_STATIC_LIBS ) POSITION_INDEPENDENT_CODE ON CUDA_SEPARABLE_COMPILATION ON CUDA_RUNTIME_LIBRARY Static ) - target_link_libraries ( GPURuntime_static PRIVATE - CUDA::nvrtc CUDA::cudart_static CUDA::cublas ) + target_link_libraries ( GPURuntime_static PRIVATE CUDA::nvrtc CUDA::cudart_static ) target_compile_definitions ( GPURuntime_static PRIVATE "SPQR_HAS_CUDA" ) + # FIXME: Ok to hardcode CUDA library names like this? + set ( GPURUNTIME_STATIC_LIBS "-L${CUDAToolkit_LIBRARY_DIR} -lcuda -lcudart_static" ) + if ( TARGET CUDA::cublas_static ) + target_link_libraries ( GPURuntime_static PRIVATE CUDA::cublas_static ) + set ( GPURUNTIME_STATIC_LIBS "${GPURUNTIME_STATIC_LIBS} -lcublas_static -lcublasLt_static -lculibos" ) + else ( ) + target_link_libraries ( GPURuntime_static PRIVATE CUDA::cublas ) + set ( GPURUNTIME_STATIC_LIBS "${GPURUNTIME_STATIC_LIBS} -lcublas" ) + endif ( ) target_include_directories ( GPURuntime_static INTERFACE $ diff --git a/SPQR/GPURuntime/Config/SuiteSparse_GPURuntime.pc.in b/SPQR/GPURuntime/Config/SuiteSparse_GPURuntime.pc.in index 273dbdc5a6..45beff71a0 100644 --- a/SPQR/GPURuntime/Config/SuiteSparse_GPURuntime.pc.in +++ b/SPQR/GPURuntime/Config/SuiteSparse_GPURuntime.pc.in @@ -7,12 +7,11 @@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ -# FIXME: Which flags do we need to statically link CUDA - Name: SuiteSparse_GPURuntime URL: https://github.com/DrTimothyAldenDavis/SuiteSparse Description: Helper functions for the GPU in SuiteSparse Version: @SPQR_VERSION_MAJOR@.@SPQR_VERSION_MINOR@.@SPQR_VERSION_SUB@ Requires.private: SuiteSparse_config Libs: -L${libdir} -l@SUITESPARSE_LIB_BASE_NAME@ +Libs.private: @GPURUNTIME_STATIC_LIBS@ Cflags: -I${includedir}