Skip to content

volna2hdf5 build failure: C++17 incompatibility with legacy Eigen2, Boost, and YAC dependencies #10

@anup619

Description

@anup619

Environment

  • OS: Linux (HPC cluster)
  • Compiler: GCC 7.5.0 (attempting to build volna2hdf5)
  • OP2 Built With: GCC 12.4 (C++17 default)
  • OP2 Version: Latest from OP2-Common repository
  • Build Target: volna2hdf5 utility in sp-volna/volna2hdf5
  • Dependencies:
    • OP2-Common (built with GCC 12.4, requires C++17)
    • HDF5 1.14.3 (sequential)
    • OpenMPI 4.1.6
    • ParMETIS (32-bit indices)
    • PT-SCOTCH 7.0.4

Problem Summary
The volna2hdf5 utility cannot be built due to incompatible C++ standards:

  1. OP2 libraries were built with GCC 12.4 (defaults to C++17/C++20)
  2. VOLNA's bundled dependencies (Eigen2, old Boost, YAC) are ancient and incompatible with modern C++ standards
  3. The Makefile in volna2hdf5/ originally specified -std=c++11, which is insufficient for OP2 and incompatible with the legacy libraries

This creates an unresolvable dependency triangle.

Build Errors
Error 1: With -std=c++98 (to satisfy Eigen2/Boost/YAC)

OP2-Common/op2/include/op_lib_core.h:414:1: error: 'constexpr' does not name a type
constexpr size_t round32(size_t x) { return (x + 31) & ~31; }

OP2 headers use C++11+ features.

Error 2: With -std=c++11 (Makefile default)
Eigen2 template parsing error:

volna/volna_init/external/eigen2/Eigen/src/Array/BooleanRedux.h:142:34: 
error: expected primary-expression before 'int'
return this->cast<bool>().cast<int>().sum();

After patching Eigen2 with template keyword, YAC/Boost errors:

volna/volna_init/external/yac/yac_virtual_machine.cpp:379:63: 
error: use of deleted function 'yac::sys_function_node::sys_function_node(const yac::sys_function_node&)'
/scratch/yogeshs/VOLNA/volna/volna_init/external/boost/smart_ptr/shared_ptr.hpp:305:9: 
error: use of deleted function 'boost::shared_ptr<yac::function>::shared_ptr(...)'

Questions for Maintainers

  1. When was VOLNA last successfully built against modern OP2?

    • What compiler version was used?
    • Was OP2 built with an older GCC that still defaulted to C++98/C++03?
  2. Are the bundled external libraries (Eigen2, Boost, YAC) still necessary?

    • Can they be upgraded to modern versions?
    • is YAC still actively used in VOLNA?
  3. Is volna2hdf5 actively maintained?

    • Is it a critical tool or legacy utility?
  4. What is the complete data workflow?

    • Can .h5 files be generated directly without volna2hdf5?
    • Are there example/test .h5 files available?

Should I rebuild OP2 with an older GCC (e.g., GCC 7.5) that defaults to C++11?

Thank you for maintaining VOLNA! Looking forward to guidance on resolving this.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions