Skip to content

Commit c0e3b06

Browse files
authored
Fix new suitesparse version and Apple Clang compiling (#473)
https://swift-nav.atlassian.net/browse/OC-729 Handle new Suitesparse version and dix Apple Clang compiling Submodule links need to be corrected for Cmake and eigen after these PRs are merged swift-nav/cmake#171 swift-nav/eigen#4
1 parent 95579dd commit c0e3b06

File tree

3 files changed

+40
-6
lines changed

3 files changed

+40
-6
lines changed

include/albatross/src/cereal/suitesparse.hpp

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,11 @@ inline void save(Archive &ar, cholmod_common const &cc,
149149
// workspace, so we don't even do anything special when we
150150
// deserialize.
151151
ar(CEREAL_NVP(cc.itype));
152+
153+
#if CHOLMOD_VERSION < CHOLMOD_VER_CODE(5, 0)
152154
ar(CEREAL_NVP(cc.dtype));
155+
#endif
156+
153157
ar(CEREAL_NVP(cc.no_workspace_reallocate));
154158
ar(CEREAL_NVP(cc.status));
155159
ar(CEREAL_NVP(cc.fl));
@@ -177,8 +181,18 @@ inline void save(Archive &ar, cholmod_common const &cc,
177181
ar(CEREAL_NVP(cc.SPQR_flopcount_bound));
178182
ar(CEREAL_NVP(cc.SPQR_tol_used));
179183
ar(CEREAL_NVP(cc.SPQR_norm_E_fro));
180-
static_assert(sizeof(cc.SPQR_istat) == 10 * sizeof(SuiteSparse_long),
181-
"cholmod_common.SPQR_istat expected to have 10 elements.");
184+
185+
// The number of elements was size 10 in CHOLMOD v4.2; reduced to 8 in CHOLMOD
186+
// v5:
187+
#if CHOLMOD_VERSION < CHOLMOD_VER_CODE(5, 0)
188+
constexpr size_t cNumSPQRElements = 10;
189+
#else
190+
constexpr size_t cNumSPQRElements = 8;
191+
#endif
192+
static_assert(
193+
sizeof(cc.SPQR_istat) == cNumSPQRElements * sizeof(SuiteSparse_long),
194+
"cholmod_common.SPQR_istat expected to have certain number of elements.");
195+
182196
ar(::cereal::make_nvp("cc.SPQR_istat0", cc.SPQR_istat[0]));
183197
ar(::cereal::make_nvp("cc.SPQR_istat1", cc.SPQR_istat[1]));
184198
ar(::cereal::make_nvp("cc.SPQR_istat2", cc.SPQR_istat[2]));
@@ -187,8 +201,11 @@ inline void save(Archive &ar, cholmod_common const &cc,
187201
ar(::cereal::make_nvp("cc.SPQR_istat5", cc.SPQR_istat[5]));
188202
ar(::cereal::make_nvp("cc.SPQR_istat6", cc.SPQR_istat[6]));
189203
ar(::cereal::make_nvp("cc.SPQR_istat7", cc.SPQR_istat[7]));
204+
205+
#if CHOLMOD_VERSION < CHOLMOD_VER_CODE(5, 0)
190206
ar(::cereal::make_nvp("cc.SPQR_istat8", cc.SPQR_istat[8]));
191207
ar(::cereal::make_nvp("cc.SPQR_istat9", cc.SPQR_istat[9]));
208+
#endif
192209

193210
// Completely ignore all the GPU stuff.
194211
#ifdef GPU_BLAS
@@ -261,7 +278,11 @@ inline void load(Archive &ar, cholmod_common &cc,
261278
ar(CEREAL_NVP(cc.mark));
262279
ALBATROSS_ASSERT(cholmod_l_free_work(&cc) == 1);
263280
ar(CEREAL_NVP(cc.itype));
281+
282+
#if CHOLMOD_VERSION < CHOLMOD_VER_CODE(5, 0)
264283
ar(CEREAL_NVP(cc.dtype));
284+
#endif
285+
265286
ar(CEREAL_NVP(cc.no_workspace_reallocate));
266287
ar(CEREAL_NVP(cc.status));
267288
ar(CEREAL_NVP(cc.fl));
@@ -289,8 +310,18 @@ inline void load(Archive &ar, cholmod_common &cc,
289310
ar(CEREAL_NVP(cc.SPQR_flopcount_bound));
290311
ar(CEREAL_NVP(cc.SPQR_tol_used));
291312
ar(CEREAL_NVP(cc.SPQR_norm_E_fro));
292-
static_assert(sizeof(cc.SPQR_istat) == 10 * sizeof(SuiteSparse_long),
293-
"cholmod_common.SPQR_istat expected to have 10 elements.");
313+
314+
// The number of elements was size 10 in CHOLMOD v4.2; reduced to 8 in CHOLMOD
315+
// v5:
316+
#if CHOLMOD_VERSION < CHOLMOD_VER_CODE(5, 0)
317+
constexpr size_t cNumSPQRElements = 10;
318+
#else
319+
constexpr size_t cNumSPQRElements = 8;
320+
#endif
321+
322+
static_assert(
323+
sizeof(cc.SPQR_istat) == cNumSPQRElements * sizeof(SuiteSparse_long),
324+
"cholmod_common.SPQR_istat expected to have certain number of elements.");
294325
ar(::cereal::make_nvp("cc.SPQR_istat0", cc.SPQR_istat[0]));
295326
ar(::cereal::make_nvp("cc.SPQR_istat1", cc.SPQR_istat[1]));
296327
ar(::cereal::make_nvp("cc.SPQR_istat2", cc.SPQR_istat[2]));
@@ -299,8 +330,11 @@ inline void load(Archive &ar, cholmod_common &cc,
299330
ar(::cereal::make_nvp("cc.SPQR_istat5", cc.SPQR_istat[5]));
300331
ar(::cereal::make_nvp("cc.SPQR_istat6", cc.SPQR_istat[6]));
301332
ar(::cereal::make_nvp("cc.SPQR_istat7", cc.SPQR_istat[7]));
333+
334+
#if CHOLMOD_VERSION < CHOLMOD_VER_CODE(5, 0)
302335
ar(::cereal::make_nvp("cc.SPQR_istat8", cc.SPQR_istat[8]));
303336
ar(::cereal::make_nvp("cc.SPQR_istat9", cc.SPQR_istat[9]));
337+
#endif
304338

305339
// Completely ignore all the GPU stuff.
306340
#ifdef GPU_BLAS

third_party/eigen

0 commit comments

Comments
 (0)