sparsemat / sprs

sparse linear algebra library for rust
Apache License 2.0
386 stars 45 forks source link

Building suitesparse from source #230

Closed mulimoen closed 3 years ago

mulimoen commented 3 years ago

I've made a prototype to build suitesparse from source here. Are the suitsparse bindings popular enough to implement and test on all major platforms (through CI)?

vbarrielle commented 3 years ago

I think suitesparse is state of the art for many matrix decompositions, so building it from source looks like the best way to have it available on Windows and MacOS. I don't know what's the best way to do it on linux, relying on the package manager is easy, but it's probably a good idea to be able to build from source to control the exact version of suitesparse.

From what I've seen in your prototype, you have suitesparse as a submodule, which looks like the best way to get it and control its version. It's made of lots of components, have you seen if it's easy to build only a few of them with build.rs scripts?

mulimoen commented 3 years ago

It is very simple to build suitesparse, and you can see in the prototype how each component is feature gated, making sure only requested components are built. The requested library is exported as a path to be linked with the associated -sys crate.

mulimoen commented 3 years ago

This approach is very useful to clearly separate the intellectual works, handy for licensing and keeping the crate size down.

vbarrielle commented 3 years ago

Looks like your prototype is very nice indeed. To answer your original question, I think building and testing the suitesparse bindings on CI for all major platforms is the way to go. In particular I've tried to make the bindings correct under windows by closely reading the documentations, but have never tested them, so this build from source will be a huge boon!

mulimoen commented 3 years ago

I will make some tests for linking, and integrate this into the CI and create a PR. Since these crates are not used in sprs, it should not be a blocker for the 0.9.0 release

mulimoen commented 3 years ago

Implemented in #233