Re: [petsc-dev] configureLibrary fails for c++11 projects
And I think there are some flags that can't be used at link time [so they have to go into CPPFLAGS and not CFLAGS - as CFLAGS gets used with CLINKER aswell] Satish On Tue, 23 Mar 2021, Satish Balay via petsc-dev wrote:
I'm not sure if we can eliminate preprocessing. [mpi.h detection is one place where its used - don't remember others - perhaps detection of most includes? - some externalpacakges need them listed separately?]
And as long as we need preprocessing as a separate step [and some compile flags give errors when used with processor] - we'll need separate PPFLAGS.
Satish
On Tue, 23 Mar 2021, Junchao Zhang wrote:
Can we combine CXXPPFLAGS and CXXFLAGS into one CXXFLAGS? --Junchao Zhang
On Tue, Mar 23, 2021 at 11:38 AM Patrick Sanan <[email protected]> wrote:
I had a related (I think) issue trying to build with Kokkos. Those headers throw an #error if they're expecting OpenMP and the compiler doesn't have the OpenMP flag. I have an open MR here (number 60^2!) which thus adds the OpenMP flag to the CXXPPFLAGS: https://gitlab.com/petsc/petsc/-/merge_requests/3600
My collaborator at CSCS was testing with the latest Kokkos and ran into an even hairier version of this problem trying to use CUDA - the Kokkos headers now apparently check that you're using nvcc. He has some workaround which I'll review and hopefully be able to submit.
Am 23.03.2021 um 17:04 schrieb Stefano Zampini <[email protected]
:
The check fails within buildsystem when running mpicc -E (which uses CXXPPFLAGS) The package header needs c++11 to be included properly. C++11 is also needed at preprocessing time
Il Mar 23 Mar 2021, 18:59 Satish Balay <[email protected]> ha scritto:
-std=cxx11 for sure is a compile flag. But don't really know if its also needed at pre-process stage and/or at link stage.
And for compile stage both CXXFLAGS and CXXPPFLAGS should get used. [PETSc makefiles make sure this is the case]
And for link stage CXXFLAGS and LDFLAGS get used [but then sometimes we have CLINKER, and FLINKER - and they certainly don't use CXXFLAGS - so -std=cxx11 isn't really needed at link time?
So the previous default of CXXPPFLAGS=-std=cxx11 looks reasonable to me.
However if this project is not using PETSc makefiles - it should make sure all compile flags are grabbed.
# lib/petsc/conf/variables PETSC_CXXCPPFLAGS = ${PETSC_CC_INCLUDES} ${PETSCFLAGS} ${CXXPP_FLAGS} ${CXXPPFLAGS} CXXCPPFLAGS = ${PETSC_CXXCPPFLAGS} PETSC_CXXCOMPILE_SINGLE = ${CXX} -o $*.o -c ${CXX_FLAGS} ${CXXFLAGS} ${CXXCPPFLAGS}
# lib/petsc/conf/rules .cpp.o .cxx.o .cc.o .C.o: ${PETSC_CXXCOMPILE_SINGLE} `pwd`/$<
# gmakefile.test PETSC_COMPILE.cxx = $(call quiet,CXX) -c $(CXX_FLAGS) $(CXXFLAGS) $(CXXCPPFLAGS) $(CXX_DEPFLAGS)
# lib/petsc/conf/test LINK.cc = $(CXXLINKER) $(CXX_FLAGS) $(CXXFLAGS) $(CXXCPPFLAGS) $(LDFLAGS)
Satish
On Tue, 23 Mar 2021, Junchao Zhang wrote:
I would rather directly change the project to use CXXFLAGS instead of CXXPPFLAGS.
--Junchao Zhang
On Tue, Mar 23, 2021 at 10:01 AM Satish Balay via petsc-dev < [email protected]> wrote:
On Tue, 23 Mar 2021, Stefano Zampini wrote:
Just tried out of main, and and the include tests of a c++11 project fail Below my fix, if we agree on, I'll make a MR
diff --git a/config/BuildSystem/config/compilers.py b/config/BuildSystem/config/compilers.py index c96967e..44e4657 100644 --- a/config/BuildSystem/config/compilers.py +++ b/config/BuildSystem/config/compilers.py @@ -527,6 +527,8 @@ class Configure(config.base.Configure): if self.setCompilers.checkCompilerFlag(flag, includes, body+body14): newflag = getattr(self.setCompilers,LANG+'FLAGS') + ' ' + flag # append flag to the old setattr(self.setCompilers,LANG+'FLAGS',newflag) + newflag = getattr(self.setCompilers,LANG+'PPFLAGS') + ' ' + flag # append flag to the old + setattr(self.setCompilers,LANG+'PPFLAGS',newflag)
https://gitlab.com/petsc/petsc/commit/ead1aa4045d7bca177e78933b9ca25145fc3c5...
self.setCompilers.CXXPPFLAGS += ' ' + flag newflag = getattr(self.setCompilers,LANG+'FLAGS') + ' ' +
flag #
append flag to the old setattr(self.setCompilers,LANG+'FLAGS',newflag)
So the old code was setting 'PPFLAGS' - but this commit changed to 'FLAGS'. Maybe this flag is needed at both compile time and link time?
So this project is somehow using CXXPPFLAGS - but not CXXFLAGS?
I'm fine with adding it to PPFLAGS - duplicate listing hopefully shouldn't cause grief.
Satish
cxxdialect = 'C++14' self.addDefine('HAVE_'+LANG+'_DIALECT_CXX14',1) self.addDefine('HAVE_'+LANG+'_DIALECT_CXX11',1) @@ -546,6 +548,8 @@ class Configure(config.base.Configure): if self.setCompilers.checkCompilerFlag(flag, includes,
body):
newflag = getattr(self.setCompilers,LANG+'FLAGS') + ' ' +
flag #
append flag to the old setattr(self.setCompilers,LANG+'FLAGS',newflag) + newflag = getattr(self.setCompilers,LANG+'PPFLAGS') + ' ' + flag # append flag to the old + setattr(self.setCompilers,LANG+'PPFLAGS',newflag) cxxdialect = 'C++11' self.addDefine('HAVE_'+LANG+'_DIALECT_CXX11',1) break
participants (1)
-
Satish Balay