Skip to content

Commit e679e51

Browse files
authored
Upgrade to SuiteSparse 7.6 (#2316)
* Upgrade to SuiteSparse 7.6 * Update build scripts Closes #2302
1 parent 4b1e73b commit e679e51

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

75 files changed

+7690
-2750
lines changed

ThirdParty/SuiteSparse/.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ CSparse/Tcov/cov.sort
127127
CSparse/Tcov/cover.out
128128
CSparse/Tcov/covs.out
129129
CSparse/Tcov/cs_*.c
130+
CSparse/Tcov/csparse_version.c
130131
CSparse/Tcov/cstcov_test
131132
CSparse/Tcov/*.out
132133
CSparse/Tcov/cs_demo1
@@ -138,6 +139,7 @@ CXSparse/Tcov/cov.sort
138139
CXSparse/Tcov/cover.out
139140
CXSparse/Tcov/covs.out
140141
CXSparse/Tcov/cs_*.c
142+
CXSparse/Tcov/cxsparse_version.c
141143
CXSparse/Tcov/*.out
142144
CXSparse/Tcov/cs_demo1_ci
143145
CXSparse/Tcov/cs_demo1_cl
@@ -168,7 +170,9 @@ SPQR/Tcov/gpu_results.txt
168170
SPQR/Tcov/gpuqrengine_demo
169171
SPQR/Tcov/qrdemo_gpu
170172
SPQR/Tcov/qrtest
173+
SPQR/Tcov/qrtest32
171174
SPQR/Tcov/qrtest_out.txt
175+
SPQR/Tcov/qrtest_out32.txt
172176
SPQR/Tcov/troll.m
173177
SPQR/Tcov/cov.out
174178

ThirdParty/SuiteSparse/AMD/CMakeLists.txt

Lines changed: 185 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -2,62 +2,59 @@
22
# SuiteSparse/AMD/CMakeLists.txt: cmake for AMD
33
#-------------------------------------------------------------------------------
44

5-
# Copyright (c) 1996-2022, Timothy A. Davis, Patrick Amestoy, Iain Duff.
5+
# Copyright (c) 1996-2023, Timothy A. Davis, Patrick Amestoy, Iain Duff.
66
# All Rights Reserved.
77
# SPDX-License-Identifier: BSD-3-clause
88

99
#-------------------------------------------------------------------------------
1010
# get the version
1111
#-------------------------------------------------------------------------------
1212

13-
cmake_minimum_required ( VERSION 3.19 )
13+
cmake_minimum_required ( VERSION 3.22 )
1414

15-
set ( AMD_DATE "Jan 17, 2023" )
16-
set ( AMD_VERSION_MAJOR 3 )
17-
set ( AMD_VERSION_MINOR 0 )
18-
set ( AMD_VERSION_SUB 3 )
15+
set ( AMD_DATE "Jan 10, 2024" )
16+
set ( AMD_VERSION_MAJOR 3 CACHE STRING "" FORCE )
17+
set ( AMD_VERSION_MINOR 3 CACHE STRING "" FORCE )
18+
set ( AMD_VERSION_SUB 1 CACHE STRING "" FORCE )
1919

2020
message ( STATUS "Building AMD version: v"
2121
${AMD_VERSION_MAJOR}.
2222
${AMD_VERSION_MINOR}.
2323
${AMD_VERSION_SUB} " (" ${AMD_DATE} ")" )
2424

2525
#-------------------------------------------------------------------------------
26-
# SuiteSparse policies
26+
# define the project
2727
#-------------------------------------------------------------------------------
2828

29-
set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
30-
${CMAKE_SOURCE_DIR}/cmake_modules
31-
${CMAKE_SOURCE_DIR}/../SuiteSparse_config/cmake_modules )
32-
33-
include ( SuiteSparsePolicy )
29+
project ( AMD
30+
VERSION "${AMD_VERSION_MAJOR}.${AMD_VERSION_MINOR}.${AMD_VERSION_SUB}"
31+
LANGUAGES C )
3432

3533
#-------------------------------------------------------------------------------
36-
# define the project
34+
# SuiteSparse policies
3735
#-------------------------------------------------------------------------------
3836

39-
if ( WIN32 )
40-
# disable Fortran in AMD when compiling on Windows
41-
set ( NFORTRAN true )
42-
endif ( )
37+
set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
38+
${PROJECT_SOURCE_DIR}/../SuiteSparse_config/cmake_modules )
39+
40+
include ( SuiteSparsePolicy )
4341

44-
if ( NOT NFORTRAN )
42+
if ( SUITESPARSE_HAS_FORTRAN )
4543
# Fortan is available and enabled
46-
project ( amd
47-
VERSION "${AMD_VERSION_MAJOR}.${AMD_VERSION_MINOR}.${AMD_VERSION_SUB}"
48-
LANGUAGES C Fortran )
49-
else ( )
50-
# no Fortran compiler available; do not compile Source/*.f or Demo/*.f
51-
project ( amd
52-
VERSION "${AMD_VERSION_MAJOR}.${AMD_VERSION_MINOR}.${AMD_VERSION_SUB}"
53-
LANGUAGES C )
44+
enable_language ( Fortran )
5445
endif ( )
5546

5647
#-------------------------------------------------------------------------------
5748
# find library dependencies
5849
#-------------------------------------------------------------------------------
5950

60-
find_package ( SuiteSparse_config 7.0.0 REQUIRED )
51+
if ( NOT SUITESPARSE_ROOT_CMAKELISTS )
52+
find_package ( SuiteSparse_config 7.5.0
53+
PATHS ${CMAKE_SOURCE_DIR}/../SuiteSparse_config/build NO_DEFAULT_PATH )
54+
if ( NOT TARGET SuiteSparse::SuiteSparseConfig )
55+
find_package ( SuiteSparse_config 7.5.0 REQUIRED )
56+
endif ( )
57+
endif ( )
6158

6259
#-------------------------------------------------------------------------------
6360
# configure files
@@ -72,85 +69,191 @@ configure_file ( "Config/amd_version.tex.in" "${PROJECT_SOURCE_DIR}/Doc/amd_vers
7269
# include directories
7370
#-------------------------------------------------------------------------------
7471

75-
include_directories ( Source Include ${SUITESPARSE_CONFIG_INCLUDE_DIR} )
72+
include_directories ( Source Include )
7673

7774
#-------------------------------------------------------------------------------
7875
# dynamic amd library properties
7976
#-------------------------------------------------------------------------------
8077

81-
if ( NOT NFORTRAN )
78+
if ( SUITESPARSE_HAS_FORTRAN )
8279
file ( GLOB AMD_SOURCES "Source/*.c" "Source/*.f" )
8380
else ( )
8481
file ( GLOB AMD_SOURCES "Source/*.c" )
8582
endif ( )
8683

87-
add_library ( amd SHARED ${AMD_SOURCES} )
88-
set_target_properties ( amd PROPERTIES
89-
VERSION ${AMD_VERSION_MAJOR}.${AMD_VERSION_MINOR}.${AMD_VERSION_SUB}
90-
C_STANDARD_REQUIRED 11
91-
SOVERSION ${AMD_VERSION_MAJOR}
92-
PUBLIC_HEADER "Include/amd.h"
93-
WINDOWS_EXPORT_ALL_SYMBOLS ON )
84+
if ( BUILD_SHARED_LIBS )
85+
add_library ( AMD SHARED ${AMD_SOURCES} )
86+
set_target_properties ( AMD PROPERTIES
87+
VERSION ${AMD_VERSION_MAJOR}.${AMD_VERSION_MINOR}.${AMD_VERSION_SUB}
88+
C_STANDARD 11
89+
C_STANDARD_REQUIRED ON
90+
OUTPUT_NAME amd
91+
SOVERSION ${AMD_VERSION_MAJOR}
92+
PUBLIC_HEADER "Include/amd.h"
93+
WINDOWS_EXPORT_ALL_SYMBOLS ON )
94+
95+
if ( ${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.25" )
96+
set_target_properties ( AMD PROPERTIES EXPORT_NO_SYSTEM ON )
97+
endif ( )
98+
99+
target_include_directories ( AMD
100+
INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/Include>
101+
$<INSTALL_INTERFACE:${SUITESPARSE_INCLUDEDIR}> )
102+
endif ( )
94103

95104
#-------------------------------------------------------------------------------
96105
# static amd library properties
97106
#-------------------------------------------------------------------------------
98107

99-
if ( NOT NSTATIC )
100-
add_library ( amd_static STATIC ${AMD_SOURCES} )
101-
set_target_properties ( amd_static PROPERTIES
102-
VERSION ${AMD_VERSION_MAJOR}.${AMD_VERSION_MINOR}.${AMD_VERSION_SUB}
103-
C_STANDARD_REQUIRED 11
108+
if ( BUILD_STATIC_LIBS )
109+
add_library ( AMD_static STATIC ${AMD_SOURCES} )
110+
set_target_properties ( AMD_static PROPERTIES
111+
C_STANDARD 11
112+
C_STANDARD_REQUIRED ON
104113
OUTPUT_NAME amd
105-
SOVERSION ${AMD_VERSION_MAJOR} )
114+
PUBLIC_HEADER "Include/amd.h" )
106115

107116
if ( MSVC )
108-
set_target_properties ( amd_static PROPERTIES
117+
set_target_properties ( AMD_static PROPERTIES
109118
OUTPUT_NAME amd_static )
110119
endif ( )
120+
121+
if ( ${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.25" )
122+
set_target_properties ( AMD_static PROPERTIES EXPORT_NO_SYSTEM ON )
123+
endif ( )
124+
125+
target_include_directories ( AMD_static
126+
INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/Include>
127+
$<INSTALL_INTERFACE:${SUITESPARSE_INCLUDEDIR}> )
128+
111129
endif ( )
112130

113131
#-------------------------------------------------------------------------------
114132
# add the library dependencies
115133
#-------------------------------------------------------------------------------
116134

117-
# suitesparseconfig:
118-
target_link_libraries ( amd PUBLIC ${SUITESPARSE_CONFIG_LIBRARIES} )
119-
if ( NOT NSTATIC )
120-
target_link_libraries ( amd_static PUBLIC ${SUITESPARSE_CONFIG_STATIC} )
135+
# SuiteSparseConfig:
136+
if ( BUILD_SHARED_LIBS )
137+
target_link_libraries ( AMD PRIVATE SuiteSparse::SuiteSparseConfig )
138+
target_include_directories ( AMD PUBLIC
139+
"$<TARGET_PROPERTY:SuiteSparse::SuiteSparseConfig,INTERFACE_INCLUDE_DIRECTORIES>" )
140+
endif ( )
141+
if ( BUILD_STATIC_LIBS )
142+
if ( TARGET SuiteSparse::SuiteSparseConfig_static )
143+
target_link_libraries ( AMD_static PUBLIC SuiteSparse::SuiteSparseConfig_static )
144+
else ( )
145+
target_link_libraries ( AMD_static PUBLIC SuiteSparse::SuiteSparseConfig )
146+
endif ( )
121147
endif ( )
122148

123149
# libm:
124150
if ( NOT WIN32 )
125-
target_link_libraries ( amd PUBLIC m )
126-
if ( NOT NSTATIC )
127-
target_link_libraries ( amd_static PUBLIC m )
151+
if ( BUILD_SHARED_LIBS )
152+
target_link_libraries ( AMD PRIVATE m )
153+
endif ( )
154+
if ( BUILD_STATIC_LIBS )
155+
set ( AMD_STATIC_LIBS "${AMD_STATIC_LIBS} -lm" )
156+
target_link_libraries ( AMD_static PUBLIC m )
128157
endif ( )
129158
endif ( )
130159

131160
#-------------------------------------------------------------------------------
132161
# AMD installation location
133162
#-------------------------------------------------------------------------------
134163

135-
install ( TARGETS amd
136-
LIBRARY DESTINATION ${SUITESPARSE_LIBDIR}
137-
ARCHIVE DESTINATION ${SUITESPARSE_LIBDIR}
138-
RUNTIME DESTINATION ${SUITESPARSE_BINDIR}
139-
PUBLIC_HEADER DESTINATION ${SUITESPARSE_INCLUDEDIR} )
140-
install ( FILES ${CMAKE_SOURCE_DIR}/cmake_modules/FindAMD.cmake
141-
DESTINATION ${SUITESPARSE_LIBDIR}/cmake/SuiteSparse
142-
COMPONENT Development )
143-
if ( NOT NSTATIC )
144-
install ( TARGETS amd_static
145-
ARCHIVE DESTINATION ${SUITESPARSE_LIBDIR} )
164+
include ( CMakePackageConfigHelpers )
165+
166+
if ( BUILD_SHARED_LIBS )
167+
install ( TARGETS AMD
168+
EXPORT AMDTargets
169+
LIBRARY DESTINATION ${SUITESPARSE_LIBDIR}
170+
ARCHIVE DESTINATION ${SUITESPARSE_LIBDIR}
171+
RUNTIME DESTINATION ${SUITESPARSE_BINDIR}
172+
PUBLIC_HEADER DESTINATION ${SUITESPARSE_INCLUDEDIR} )
173+
endif ( )
174+
if ( BUILD_STATIC_LIBS )
175+
install ( TARGETS AMD_static
176+
EXPORT AMDTargets
177+
ARCHIVE DESTINATION ${SUITESPARSE_LIBDIR}
178+
PUBLIC_HEADER DESTINATION ${SUITESPARSE_INCLUDEDIR} )
179+
endif ( )
180+
181+
# create (temporary) export target file during build
182+
export ( EXPORT AMDTargets
183+
NAMESPACE SuiteSparse::
184+
FILE ${CMAKE_CURRENT_BINARY_DIR}/AMDTargets.cmake )
185+
186+
# install export target, config and version files for find_package
187+
install ( EXPORT AMDTargets
188+
NAMESPACE SuiteSparse::
189+
DESTINATION ${SUITESPARSE_PKGFILEDIR}/cmake/AMD )
190+
191+
# generate config file to be used in common build tree
192+
set ( SUITESPARSE_IN_BUILD_TREE ON )
193+
configure_package_config_file (
194+
Config/AMDConfig.cmake.in
195+
${CMAKE_CURRENT_BINARY_DIR}/AMDConfig.cmake
196+
INSTALL_DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/AMDConfig.cmake )
197+
198+
# generate config file to be installed
199+
set ( SUITESPARSE_IN_BUILD_TREE OFF )
200+
configure_package_config_file (
201+
Config/AMDConfig.cmake.in
202+
${CMAKE_CURRENT_BINARY_DIR}/target/AMDConfig.cmake
203+
INSTALL_DESTINATION ${SUITESPARSE_PKGFILEDIR}/cmake/AMD )
204+
205+
write_basic_package_version_file (
206+
${CMAKE_CURRENT_BINARY_DIR}/AMDConfigVersion.cmake
207+
COMPATIBILITY SameMajorVersion )
208+
209+
install ( FILES
210+
${CMAKE_CURRENT_BINARY_DIR}/target/AMDConfig.cmake
211+
${CMAKE_CURRENT_BINARY_DIR}/AMDConfigVersion.cmake
212+
DESTINATION ${SUITESPARSE_PKGFILEDIR}/cmake/AMD )
213+
214+
#-------------------------------------------------------------------------------
215+
# create pkg-config file
216+
#-------------------------------------------------------------------------------
217+
218+
if ( NOT MSVC )
219+
set ( prefix "${CMAKE_INSTALL_PREFIX}" )
220+
set ( exec_prefix "\${prefix}" )
221+
cmake_path ( IS_ABSOLUTE SUITESPARSE_LIBDIR SUITESPARSE_LIBDIR_IS_ABSOLUTE )
222+
if (SUITESPARSE_LIBDIR_IS_ABSOLUTE)
223+
set ( libdir "${SUITESPARSE_LIBDIR}")
224+
else ( )
225+
set ( libdir "\${exec_prefix}/${SUITESPARSE_LIBDIR}")
226+
endif ( )
227+
cmake_path ( IS_ABSOLUTE SUITESPARSE_INCLUDEDIR SUITESPARSE_INCLUDEDIR_IS_ABSOLUTE )
228+
if (SUITESPARSE_INCLUDEDIR_IS_ABSOLUTE)
229+
set ( includedir "${SUITESPARSE_INCLUDEDIR}")
230+
else ( )
231+
set ( includedir "\${prefix}/${SUITESPARSE_INCLUDEDIR}")
232+
endif ( )
233+
if ( BUILD_SHARED_LIBS )
234+
set ( SUITESPARSE_LIB_BASE_NAME $<TARGET_FILE_BASE_NAME:AMD> )
235+
else ( )
236+
set ( SUITESPARSE_LIB_BASE_NAME $<TARGET_FILE_BASE_NAME:AMD_static> )
237+
endif ( )
238+
configure_file (
239+
Config/AMD.pc.in
240+
AMD.pc.out
241+
@ONLY
242+
NEWLINE_STYLE LF )
243+
file ( GENERATE
244+
OUTPUT AMD.pc
245+
INPUT ${CMAKE_CURRENT_BINARY_DIR}/AMD.pc.out
246+
NEWLINE_STYLE LF )
247+
install ( FILES
248+
${CMAKE_CURRENT_BINARY_DIR}/AMD.pc
249+
DESTINATION ${SUITESPARSE_PKGFILEDIR}/pkgconfig )
146250
endif ( )
147251

148252
#-------------------------------------------------------------------------------
149253
# Demo library and programs
150254
#-------------------------------------------------------------------------------
151255

152-
option ( DEMO "ON: Build the demo programs. OFF (default): do not build the demo programs." off )
153-
if ( DEMO )
256+
if ( SUITESPARSE_DEMOS )
154257

155258
#---------------------------------------------------------------------------
156259
# demo library
@@ -166,19 +269,30 @@ if ( DEMO )
166269
add_executable ( amd_l_demo "Demo/amd_l_demo.c" )
167270
add_executable ( amd_demo2 "Demo/amd_demo2.c" )
168271
add_executable ( amd_simple "Demo/amd_simple.c" )
169-
if ( NOT NFORTRAN )
272+
if ( SUITESPARSE_HAS_FORTRAN )
170273
add_executable ( amd_f77demo "Demo/amd_f77demo.f" )
171274
add_executable ( amd_f77simple "Demo/amd_f77simple.f" )
172275
endif ( )
173276

174277
# Libraries required for Demo programs
175-
target_link_libraries ( amd_demo PUBLIC amd )
176-
target_link_libraries ( amd_l_demo PUBLIC amd )
177-
target_link_libraries ( amd_demo2 PUBLIC amd )
178-
target_link_libraries ( amd_simple PUBLIC amd )
179-
if ( NOT NFORTRAN )
180-
target_link_libraries ( amd_f77demo PUBLIC amd )
181-
target_link_libraries ( amd_f77simple PUBLIC amd )
278+
if ( BUILD_SHARED_LIBS )
279+
target_link_libraries ( amd_demo PUBLIC AMD )
280+
target_link_libraries ( amd_l_demo PUBLIC AMD )
281+
target_link_libraries ( amd_demo2 PUBLIC AMD )
282+
target_link_libraries ( amd_simple PUBLIC AMD )
283+
if ( SUITESPARSE_HAS_FORTRAN )
284+
target_link_libraries ( amd_f77demo PUBLIC AMD )
285+
target_link_libraries ( amd_f77simple PUBLIC AMD )
286+
endif ( )
287+
else ( )
288+
target_link_libraries ( amd_demo PUBLIC AMD_static )
289+
target_link_libraries ( amd_l_demo PUBLIC AMD_static )
290+
target_link_libraries ( amd_demo2 PUBLIC AMD_static )
291+
target_link_libraries ( amd_simple PUBLIC AMD_static )
292+
if ( SUITESPARSE_HAS_FORTRAN )
293+
target_link_libraries ( amd_f77demo PUBLIC AMD_static )
294+
target_link_libraries ( amd_f77simple PUBLIC AMD_static )
295+
endif ( )
182296
endif ( )
183297

184298
else ( )
@@ -192,4 +306,3 @@ endif ( )
192306
#-------------------------------------------------------------------------------
193307

194308
include ( SuiteSparseReport )
195-

0 commit comments

Comments
 (0)