This email from fertinaz@gmail.com originates from outside Imperial. Do not click on links and attachments unless you recognise the sender. If you trust the sender, add them to your safe senders list to disable email stamping for this address.

 

Hello everyone

After a couple of unsuccessful attempts, I decided to write here for some help.

I've tried to build Nektar++-5.0.0 from its source using two different environments:
  • On a machine that has Ubuntu-16.04, GCC-9.3.0 and OpenMPI-4.0.4
  • On a Docker environment (hosted on the Ubuntu machine) with CentOS-7, GCC-4.8.5 and OpenMPI-4.0.4
I initially tried using Docker because I'm preparing containers for a project I'm developing at the moment. I had some environment related troubles with GCC-7.3.0, so decided to stick with the default GCC which is 4.8. I don't have the logs right now but build failed with something like:
MMFAdvection.cpp:945:35: error: 'dF' may be used uninitialized in this function [-Werror=maybe-uninitialized

I thought this might be due to the old GCC version (which now I think it's not), and decided to complete the installation using the new GCC suite on my laptop which is the system I shared in the first item above.

However, these new attempts also have failed.

This my build script:
export PATH=/opt/openmpi-4.0.4/bin:$PATH
export LD_LIBRARY_PATH=/opt/openmpi-4.0.4/lib:$LD_LIBRARY_PATH
cmake .. \ # I'm in src/build
    -DCMAKE_INSTALL_PREFIX=/opt/nektar++-5.0.0  \
    -DNEKTAR_BUILD_DEMOS=ON     \
    -DNEKTAR_BUILD_LIBRARY=ON   \
    -DNEKTAR_BUILD_SOLVERS=ON   \
    -DNEKTAR_BUILD_UTILITIEs=ON \
    -DNEKTAR_USE_MPI=ON         \
    -DNEKTAR_USE_OPENBLAS=ON    \
    -DNEKTAR_USE_BOOST=ON       \
    -DNEKTAR_USE_SCOTCH=ON      \
    -DTHIRDPARTY_BUILD_OPENBLAS=ON \
    -DTHIRDPARTY_BUILD_BOOST=ON    \
    -DTHIRDPARTY_BUILD_SCOTCH=ON
    
make install

This is the shorter script which I've excluded FFTW, HDF5, ARPACK, PETSC and METIS. 

When HDF5 is enabled, the build fails with:
[ 13%] Building CXX object library/LibUtilities/CMakeFiles/LibUtilities.dir/BasicUtils/FieldIOHdf5.cpp.o
/home/fertinaz/nektar/nektar++-5.0.0/library/LibUtilities/BasicUtils/FieldIOHdf5.cpp: In member function ‘virtual void Nektar::LibUtilities::FieldIOHdf5::v_Import(const string&, std::vector<std::shared_ptr<Nektar::LibUtilities::FieldDefinitions> >&, std::vector<std::vector<double> >&, Nektar::LibUtilities::FieldMetaDataMap&, const Nektar::Array<Nektar::OneD, int>&)’:
/home/fertinaz/nektar/nektar++-5.0.0/library/LibUtilities/BasicUtils/FieldIOHdf5.cpp:1028:31: error: implicitly-declared ‘Nektar::LibUtilities::FieldIOHdf5::OffsetHelper& Nektar::LibUtilities::FieldIOHdf5::OffsetHelper::operator=(const Nektar::LibUtilities::FieldIOHdf5::OffsetHelper&)’ is deprecated [-Werror=deprecated-copy]
 1028 |         decompsToOffsets[i] = running;
      |                               ^~~~~~~

So I've disabled HDF5 and a couple of others. Eventually, I want them too, but I wanted to use as little external libs as possible in the first step.

Then initiated a new build which failed with the following error:
[ 20%] Building CXX object library/SpatialDomains/CMakeFiles/SpatialDomains.dir/MeshGraph.cpp.o
/home/fertinaz/nektar/nektar++-5.0.0/library/SpatialDomains/MeshGraph.cpp: In member function ‘void Nektar::SpatialDomains::MeshGraph::SetExpansionsToEvenlySpacedPoints(int)’:
/home/fertinaz/nektar/nektar++-5.0.0/library/SpatialDomains/MeshGraph.cpp:1529:54: error: implicitly-declared ‘Nektar::LibUtilities::BasisKey& Nektar::LibUtilities::BasisKey::operator=(const Nektar::LibUtilities::BasisKey&)’ is deprecated [-Werror=deprecated-copy]
 1529 |                 expIt->second->m_basisKeyVector[i] = bkeynew;

Error due to "bkeynew" assignment repeats itself a couple of times and then the build exits with:
cc1plus: all warnings being treated as errors <<<
library/SpatialDomains/CMakeFiles/SpatialDomains.dir/build.make:254: recipe for target 'library/SpatialDomains/CMakeFiles/SpatialDomains.dir/MeshGraph.cpp.o' failed
make[2]: *** [library/SpatialDomains/CMakeFiles/SpatialDomains.dir/MeshGraph.cpp.o] Error 1
CMakeFiles/Makefile2:2271: recipe for target 'library/SpatialDomains/CMakeFiles/SpatialDomains.dir/all' failed
make[1]: *** [library/SpatialDomains/CMakeFiles/SpatialDomains.dir/all] Error 2
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2

See the line I've highlighted. All of these errors occur because "-Werror" flag is enabled. I know this is the right way of doing things, however on a large application like Nektar I'm not sure if it must be this strict.

So the question is what would be the best solution to tackle those warnings? I'm planning to disable the "Werror" flag unless there is a better idea.

Thank you

Fatih Ertinaz