Skip to content

Conversation

@nkoukpaizan
Copy link
Collaborator

@nkoukpaizan nkoukpaizan commented Jan 29, 2026

Merge request type

  • New feature
  • Resolves bug
  • Documentation
  • Other

Relates to

  • OPFLOW
  • SOPFLOW
  • SCOPFLOW
  • TCOPFLOW
  • CMake build system
  • Spack configuration
  • Manual
  • Web docs
  • Other

This MR updates

  • Header files
  • Source code
  • CMake build system
  • Spack configuration
  • Web docs
  • Manual
  • Other

Summary

This upgrades the Spack submodule to v1.1.1 and deprecates incompatible build configurations (deception, newell and incline) that are not being tested with the new configuration.

  • With the Spack upgrade, now pointing to upstream Spack and using local Spack repos for modified packages that have yet to be contributed upstream. I plan to submit appropriate PRs to spack-packages once we know this works.
  • Updated Frontier modules accordingly. romcc is no longer a supported compiler, and mixes compiler modules are deprecated on Frontier. The only way to get a performant Fortran compiler for coinhsl, etc., and support HIP is to load PrgEnv-gnu and rocm. So, most packages are built built withgcc unless there is HIP code.
  • Moved deprecated configurations to deprecated folders with corresponding README files.

Linked Issue(s)

@nkoukpaizan nkoukpaizan self-assigned this Jan 29, 2026
@nkoukpaizan nkoukpaizan added enhancement New feature or request spack-build labels Jan 29, 2026
@pelesh
Copy link
Collaborator

pelesh commented Jan 29, 2026

CC @cameronrutherford

@pelesh pelesh requested review from abhyshr and pelesh January 29, 2026 22:25
@nkoukpaizan
Copy link
Collaborator Author

@cameronrutherford Do you know a fix for the error I'm seeing?

Error: invalid push configuration for mirror local-buildcache: environment variable `***` (secret_variable) not set

Everything is building fine, but the push to the container registry is not working.

@nkoukpaizan
Copy link
Collaborator Author

@cameronrutherford Do you know a fix for the error I'm seeing?

Error: invalid push configuration for mirror local-buildcache: environment variable `***` (secret_variable) not set

Everything is building fine, but the push to the container registry is not working.

Finally figured out a way to make it work!

@nkoukpaizan nkoukpaizan marked this pull request as ready for review January 30, 2026 21:25
Copy link
Collaborator

@cameronrutherford cameronrutherford left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some NITs, some other more interesting comments.


#- name: Test Build
# run: cd $(spack -e . location --build-dir exago@develop) && ctest -VV
#- name: Test Build
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can't remember why this is commented out.. perhaps there's an issue for it? Would be good to test things work before pushing.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The reason was that no tests were ever running in GH-Actions. We've been relying on manually testing on Frontier, and just checking that things build in GH-Actions.

The Spack package relied on Spack's --run-tests to set EXAGO_RUN_TESTS. If I recall correctly, we can't used the built-in testing because of the need to install first. I've just added an independent testing option in the Spack package, independent of --run-tests, which revealed a number of failing tests. I'll have to look into it.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we could fix easily the issue where we need to install before testing. As far as I remember, there was an issue about finding test input files and it was "fixed" by installing them first, and then accessing them in the installation directory. Also see #148.

# -fPIC required for spdlog for use with python wrapper
set_property(TARGET spdlog PROPERTY POSITION_INDEPENDENT_CODE ON)
find_package(spdlog REQUIRED)
find_package(fmt REQUIRED)
Copy link
Collaborator

@cameronrutherford cameronrutherford Jan 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is the Python wrapper needing position independent code not relevant anymore?

Also, should we give a hint to the path here for the submodule?

Perhaps we only enforce that property here / in spack when Python is enabled.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm requiring spdlog as an external dependency here, so I wouldn't use the submodule and PIC does not apply to the external target.

def submodules(package):
submodules = []
submodules.append("tpl/pybind11")
submodules.append("tpl/spdlog")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you're making this an external dependency, then we should probably consider doing the following in pursuit of removing submodules (I think this is an existing issue / desirable goal):

  1. Figure out a way to only clone some submodules for different versions of ExaGO. I imagine it's doable as package is passed to the function.
  2. Add this as a dependency at the spack level (build time, link time?) for only certain versions.
  3. Figure out how to express the dependency for PIC if it's necessary only for the Python wrapper(?)

This can also be another issue for later if you just want this merged and it works IMO.

Copy link
Collaborator Author

@nkoukpaizan nkoukpaizan Feb 1, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I only made spdlog an external dependency, since that is truly optional. We can remove the submodule in a subsequent PR once the edits are propagated upstream. We will also need to add patches to older versions when we make that change. The Spack-level dependency only applies to develop at the moment.

I have not addressed pybind11 and toml11. One thing to consider it that making these external puts the burden on the user to have them installed.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would suggest we discuss it a little more before we decide to treat toml and pybind as external packages. ExaGO already has too many dependencies and I agree with @nkoukpaizan that we need to minimize burden on the user.

@cameronrutherford
Copy link
Collaborator

LGTM if CI passes. I'm sure you'll get a better review from a maintainer about the package.py recipe anyway.

Comment on lines +92 to +93
variant("sparse", default=False, description="Enable/Disable Sparse linear algebra")
variant(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think HiOp should be built with sparse support by default. We are going to deprecate mixed dense-sparse module in ExaGO and PriDec and sparse HiOp modules will be pretty much all we'll need.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That is the HiOp package, so I'll argue that the default value falls under the purview of HiOp. Not ExaGO.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, HiOp default is that sparse linear algebra is on. Perhaps the HiOp spack package has not been updated accordingly.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request spack-build

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants