dynamicCode compiler options get overwritten
Summary
When using scalarCodedSource with custom libraries compiler options supplied via codeOptions field get overwritten. The same problem probably exists with codeLibs, but due to this error I could never get to the linking stage of the compilation.
Steps to reproduce
git clone https://develop.openfoam.com/Development/openfoam.git --branch master
cd openfoam/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid
cat > constant/solid/fvOptions << _EOF_
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 2206 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
FoamFile
{
version 2;
format ascii;
class dictionary;
object fvOptions;
}
customHeatSource
{
type scalarCodedSource;
name heatSource;
active true;
scalarCodedSourceCoeffs
{
selectionMode all;
fields ( h );
codeInclude #{ #include <mpi.h> #};
codeOptions #{ #};
codeLibs #{ #};
codeCorrect #{ #};
codeAddSupRho #{ Pout << "hello!" << std::endl #};
codeAddSup #{ #};
codeConstrain #{ #};
}
}
_EOF_
./Allclean
./Allrun.pre
chtMultiRegionSimpleFoam
Observe compilation error mpi.h: No such file or directory.
Add output of pkg-config --cflags mpi-cxx and pkg-config --libs mpi-cxx to codeOptions and codeLibs of constant/solid/fvOptions respectively (sorry, I don't know how to set verbatim fields from foamDictionary). On my machine, edited lines look like this:
codeOptions #{ -pthread -I/usr/lib/x86_64-linux-gnu/openmpi/include -I/usr/lib/x86_64-linux-gnu/openmpi/include/openmpi #};
codeLibs #{ -L/usr/lib/x86_64-linux-gnu/openmpi/lib -lmpi_cxx -lmpi #};
Run compilation again and catch compilation commands using bear.
rm -rf dynamicCode
./Allclean
./Allrun.pre
bear -- chtMultiRegionSimpleFoam
Observe the same compilation error mpi.h: No such file or directory.
Issue command
cat dynamicCode/heatSource/Make/options
and observe that codeOption paths are the same as in fvOptions file
Issue command
cat compile_commands.json
and observe that x86_64-linux-gnu strings in compilation commands were replaced by x86_64-1-gnu.
Example case
See Steps to reproduce
What is the current bug behaviour?
User supplied compiler options are modified before compilation
What is the expected correct behavior?
User supplied compiler options are NOT modified before compilation
Relevant logs and/or images
Environment information
- OpenFOAM version : master 76d719d1
- Operating system : GNU Linux Debian bookworm
- Hardware info : x86-64
- Compiler : gcc (Debian 11.3.0-4) 11.3.0