[petsc-dev] COPTFLAGS
Satish Balay
balay at mcs.anl.gov
Wed Nov 13 11:32:29 CST 2013
On Tue, 12 Nov 2013, Jed Brown wrote:
> Passing COPTFLAGS currently causes your flags to be passed _prior_ to
> the flags that get added in compilerOptions.py. This makes ./configure
> COPTFLAGS='-Og -g' useless since -O0 gets passed afterward, for example.
>
> https://bitbucket.org/petsc/petsc/commits/e3218094707942d5674f57c17eb63a9af846a945
>
> > commit e3218094707942d5674f57c17eb63a9af846a945
> > Author: Barry Smith <bsmith at mcs.anl.gov>
> > Date: Sat Mar 17 22:47:44 2012 -0500
> >
> > added -fno-inline for better debugging with gnu compilers; take it out if it breaks something
> >
> > Hg-commit: cee000f4e8f56981f3611284aa810e3c0419aa10
> >
> > Modified config/compilerOptions.py
> > diff --git a/config/compilerOptions.py b/config/compilerOptions.py
> > index e619c8e..612cb3f 100644
> > --- a/config/compilerOptions.py
> > +++ b/config/compilerOptions.py
> > @@ -22,6 +22,8 @@ class CompilerOptions(config.base.Configure):
> > if self.framework.argDB['with-gcov']:
> > flags.extend(['-fprofile-arcs', '-ftest-coverage'])
> > flags.append('-g3')
> > + flags.append('-fno-inline')
>
> -fno-inline
> Do not expand any functions inline apart from those marked with the
> "always_inline" attribute. This is the default when not optimizing.
>
> I.e., this option should have no effect.
>
> > + flags.append('-O0')
>
> This is the default and overrides COPTFLAGS since it comes later.
>
> I would guess this was added to compensate for MPICH putting its CFLAGS
> into the compiler wrappers (you need MPICHLIB_CFLAGS to avoid it), so
> that "mpicc somefile.c" often defaults to high optimization. That
> behavior is bad and I agree that we need to work around it somehow, but
> the fix in this patch was not applied to getCxxFlags or getFortranFlags.
>
> The way I see, it, we can exit early when the user specifies COPTFLAGS
>
> diff --git i/config/BuildSystem/config/compilerOptions.py w/config/BuildSystem/config/compilerOptions.py
> index dadc5fb..2a3cfa0 100644
> --- i/config/BuildSystem/config/compilerOptions.py
> +++ w/config/BuildSystem/config/compilerOptions.py
> @@ -14,6 +14,9 @@ class CompilerOptions(config.base.Configure):
> except:
> pass
>
> + if bopt and 'COPTFLAGS' in self.framework.argDB:
> + return []
> +
I don't understand why this would be needed. Thid code sets the
defaults for bopt='g' or 'O'. But if COPTFLAGS flags is set by user -
it routine should not be called. [so the above 2 lines appear to be
redundant]
Satish
> flags = []
> # GNU gcc
> if config.setCompilers.Configure.isGNU(compiler) or config.setCompilers.Configure.isClang(compiler):
>
> and we can add -O0 to the other languages
>
> @@ -96,6 +101,7 @@ class CompilerOptions(config.base.Configure):
> flags.extend(['-fprofile-arcs', '-ftest-coverage'])
> # -g3 causes an as SEGV on OSX
> flags.append('-g')
> + flags.append('-O0') # MPICH puts CXXFLAGS into wrappers, so ensure that we do not use optimization
> elif bopt in ['O']:
> if os.environ.has_key('USER'):
> flags.append('-O')
>
> (similar for Fortran). But this is also imperfect because some people
> use non-Gnu compilers.
>
> Is there a clean solution?
>
>
> > elif bopt == 'O':
> > flags.append('-O')
> > else:
> > Modified config/packages/MPI.py
> > diff --git a/config/packages/MPI.py b/config/packages/MPI.py
> > index 260acab..2328eb9 100644
> > --- a/config/packages/MPI.py
> > +++ b/config/packages/MPI.py
> > @@ -11,7 +11,7 @@ from stat import *
> > class Configure(config.package.Package):
> > def __init__(self, framework):
> > config.package.Package.__init__(self, framework)
> > - self.download_openmpi = ['http://www.open-mpi.org/software/ompi/v1.5/downloads/openmpi-1.5.4.tar.gz']
> > + self.download_openmpi = ['http://www.open-mpi.org/software/ompi/v1.4/downloads/openmpi-1.4.4.tar.gz']
> > self.download_mpich = ['http://www.mcs.anl.gov/research/projects/mpich2/downloads/tarballs/1.4.1p1/mpich2-1.4.1p1.tar.gz']
> > self.download = ['redefine']
> > self.functions = ['MPI_Init', 'MPI_Comm_create']
> >
> >
>
More information about the petsc-dev
mailing list