Same for me. There seems to be no way to get around this. Fortran is
horrible, and hurts everyone all the time.

   Matt

On Fri, Jan 3, 2020 at 7:03 PM <j...@jedbrown.org> wrote:

> The time to rebuild Fortran modules, which is pretty much an entire
> lifetime. I disable Fortran in most arches that I rebuild frequently.
>
> On Jan 3, 2020 16:58, "Smith, Barry F." <bsm...@mcs.anl.gov> wrote:
>
>
>   And it you don't skip Fortran modules?
>
>
>
> > On Jan 3, 2020, at 4:36 PM, j...@jedbrown.org wrote:
> >
> > A few seconds if you skip Fortran modules.
> >
> > I didn't realize there were any active developers not using ccache. We
> should add a note to the manual.
> >
> > On Jan 3, 2020 15:04, "Smith, Barry F." <bsm...@mcs.anl.gov> wrote:
> >
> >
> > > On Jan 3, 2020, at 3:07 PM, Matthew Knepley <knep...@gmail.com>
> wrote:
> > >
> > > On Fri, Jan 3, 2020 at 3:52 PM Smith, Barry F. <bsm...@mcs.anl.gov>
> wrote:
> > >
> > >    A long time ago Oana suggested a tool that allowed switching
> between PETSc configurations after pulls etc that didn't require waiting to
> recompile code or rerun configure. Based on her ideas I finally got
> something that has been behaving reasonably satisfactory for me. Note that
> it is only useful if you work with PETSc in a way that you have multiple
> branches and PETSc arches you are dealing with. If you are essentially
> always in one branch it offers no advantages. (Unfortunately since Fortran
> stubs are stored in the source for branch changes that
> > > change the stubs the will require recompiles). This is my first public
> release so may have glitches. It saves me tons of time.
> > >
> > > Barry, I had the same problem, but it went away when I started using
> ccache in front of the compiler for every arch. Does
> > > this not work for you?
> >
> >    I don't know, never tried it. Still it must "compile" the code (that
> is generate all the .o) and rebuild the libraries which takes some time?
> >
> >   Barry
> >
> > >
> > >   Thanks,
> > >
> > >      Matt
> > >
> > >    Put this in your .bashrc file and run source ~/.bashrc  Docs are at
> the bottom.
> > >
> > > #
> > > #  Utility function used by gitcheckout bash function
> > > #    uses the basename of the branch to build the PETSC_ARCH
> > > #
> > > function branchtoarch () {
> > >     basename `echo $1 | sed s?/maint?-maint?g` | sed -e s?/?-?g -e
> s?^?arch-?g
> > > }
> > >
> > > #
> > > # Used by the git alias provided below; not used directly
> > > #
> > > # Implements a git checkout, but preserves any previously compiled
> (.o) code so it won't unneccessariy get recompiled
> > > #
> > > # Sets PETSC_ARCH automatically based on the branch name
> > > #
> > > # How it works:
> > > #    1) before changing from the current PETSC_ARCH branch combination
> it deletes all out-dated .o files for that PETSC_ARCH (using make --dry-run
> to find these)
> > > #    2) after checking into the new PETSC_ARCH branch combination it
> updates the time-stamps of all remaing .o files for the new PETSC_ARCH so
> they are
> > > #       more recent than any timestamps on the source files that git
> may have changed (it can do this because it knows from 1) that any
> out-of-date
> > > #       .o files have already been deleted)
> > > #
> > > #   Does not change the timestamps or touch in any way the source
> code, only .o files
> > > #
> > > function gitcheckout {
> > >     new_branch=$1
> > >     current_branch=`command git rev-parse --abbrev-ref HEAD`
> > >
> > >     if [ -f ${new_branch} ]; then
> > >       command git checkout ${new_branch}
> > >       return 0
> > >     fi
> > >
> > >     if [ "${new_branch}" == "-b" ]; then
> > >       command git rev-parse --verify $2 > /dev/null  2>&1
> > >       if [ "$?" == "0" ]; then
> > >         echo "Branch you are trying to create $2 already exists,
> aborting"
> > >         return 9
> > >       else
> > >         # create the new branch, do not yet check it out
> > >         new_branch=$2
> > >         command git branch ${new_branch}
> > >       fi
> > >     else
> > >       if [ "${current_branch}" == "${new_branch}" ]; then
> > >         echo "Already in branch ${new_branch}"
> > >         return 0
> > >       fi
> > >       changes=`command git status --untracked-files=no --porcelain`
> > >       if [ "${changes}" != "" ]; then
> > >         echo "You have modified or new files; not changing branches"
> > >         echo ${changes}
> > >         return 5
> > >       fi
> > >     fi
> > >
> > >     current_arch=`branchtoarch ${current_branch}`
> > >     new_arch=`branchtoarch ${new_branch}`
> > >
> > >     isbranch=0
> > >     command git rev-parse --verify ${new_branch} > /dev/null  2>&1
> > >     if [ "$?" == "0" ]; then
> > >       isbranch=1
> > >     else
> > >       command git rev-parse --verify origin/${new_branch} > /dev/null
> 2>&1
> > >       if [ "$?" == "0" ]; then
> > >         isbranch=1
> > >       fi
> > >     fi
> > >     if [ "${isbranch}" == "0" ]; then
> > >       echo "Branch ${new_branch} does not exist"
> > >       return 3
> > >     fi
> > >
> > >     echo "Checking out branch ${new_branch} and PETSC_ARCH
> ${new_arch}"
> > >
> > >     if [ "${PETSC_ARCH}" != "${current_arch}" ]; then
> > >       echo "Current PETSC_ARCH ${PETSC_ARCH} not equal to expected
> value ${current_arch} unable to removed out-dated object files"
> > >     else
> > >       #  delete all out-dated .o files
> > >       if [[ -f
> ${PETSC_DIR}/${PETSC_ARCH}/lib/petsc/conf/petscvariables && -d
> ${PETSC_DIR}/${PETSC_ARCH}/obj ]]; then
> > >         pushd ${PETSC_DIR}
> > >         make --dry-run -f gmakefile  | sed -n
> 's?[[:print:][:cntrl:]]*-o[[:blank:]]\([-[:alpha:]/]*\.o\)[[:print:][:cntrl:]]*?\1?gp'
> | xargs rm -f
> > >         popd
> > >       fi
> > >     fi
> > >
> > >     command git checkout ${new_branch}
> > >     if [ "$?" != "0" ]; then
> > >       echo "Unable to checkout branch ${new_branch}"
> > >       return 4
> > >     fi
> > >
> > >     export PETSC_ARCH=${new_arch}
> > >     #  update the timestamps of all .o that remain for this PETSC_ARCH
> and the library
> > >     if [[ -f ${PETSC_DIR}/${PETSC_ARCH}/lib/petsc/conf/petscvariables
> && -d ${PETSC_DIR}/${PETSC_ARCH}/obj ]]; then
> > >       find ${PETSC_DIR}/${PETSC_ARCH}/obj -type f -name *.o -exec
> touch -m {} +
> > >       touch -m ${PETSC_DIR}/${PETSC_ARCH}/lib/libpetsc*
> > > #      /usr/bin/dsymutil libpetsc.3.011.3.dylib
> > >     fi
> > > }
> > >
> > > #
> > > #  An alias for git checkout that manages resetting the PETSC_ARCH to
> the branch name and preserving compiled code associated with the branch
> checked out
> > > #
> > > #  Oana suggested the idea to save waiting for code to recompile after
> changing branches and the use of touch to force code to not get recompiled
> unnecessarily
> > > #
> > > #  Usage:
> > > #     git checkout branchname
> > > #
> > > #  Examples:
> > > #      $ git checkout next
> > > #          Checking out branch next and PETSC_ARCH arch-none
> > > #          Switched to branch 'next'
> > > #          ~/Src/petsc (next<) arch-next
> > > #
> > > #      $ git checkout master
> > > #          Checking out branch master and PETSC_ARCH arch-master
> > > #          Switched to branch 'master'
> > > #          ~/Src/petsc (master=) arch-master
> > > #
> > > #      $ git checkout -b barry/mynewbranch
> > > #           Switched to branch 'barry/mynewbranch'
> > > #           ~/Src/petsc (barry/mynewbranch=) arch-mynewbranch
> > > #
> > > # Uses the bash function gitcheckout
> > > #
> > > function git {
> > >   groot=`command git rev-parse --absolute-git-dir 2> /dev/null`
> > >   if [[ "$1" == "checkout" && "$@" != *"--help"* && "${PETSC_DIR}" !=
> "" && "${PETSC_DIR}/.git" == "${groot}" ]]; then
> > >     shift 1
> > >     if [ "$1" == "git" ]; then
> > >       shift 2
> > >     fi
> > >     gitcheckout "$@"
> > >   else
> > >     command git "$@"
> > >   fi
> > > }
> > >
> > >
> > >
> > >
> > > --
> > > What most experimenters take for granted before they begin their
> experiments is infinitely more interesting than any results to which their
> experiments lead.
> > > -- Norbert Wiener
> > >
> > > https://www.cse.buffalo.edu/~knepley/
> >
> >
> >
>
>
>

-- 
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which their
experiments lead.
-- Norbert Wiener

https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>

Reply via email to