[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