[petsc-dev] user makefile

Barry Smith bsmith at petsc.dev
Fri Jan 14 20:21:19 CST 2022


   The MR is ready for review https://gitlab.com/petsc/petsc/-/merge_requests/4719

   I consider Mark's email a very serious bug report; as bad as a bug report that says "PETSc programs are randomly crashing right and left on all kinds of machines" since the documentation on this topic is __so__ bad (people had tried but not enough gelled). Hence I felt I should take the day to work on improving it, updating it, and making it comprehensive. Please input your comments (as suggestions whenever possible) and also if you feel things are missing feel free to add more commits adding in your approaches.

  Barry


> On Jan 14, 2022, at 10:41 AM, Jed Brown <jed at jedbrown.org> wrote:
> 
> Makefile.user is meant to be the example that doesn't import a zillion variables and in which you can readily add other packages that provide pkg-config. (Just add them to one line.) If you already use pkg-config for other dependencies, it also makes clear how to add PETSc. This is symmetric, where as including PETSc makefiles is fundamentally nonsymmetric (they're full of rules and non-namespaced variables likely to conflict with other packages).
> 
> While we could create a makefile that defines only namespaced variables and does not define rules, that would actually require more effort per package because you'd be needing CPPFLAGS = $(PETSC_CPPFLAGS) $(X_CPPFLAGS) $(Y_CPPFLAGS). In Makefile.user, you can add additional packages with one line.
> 
> PACKAGES := $(petsc.pc) $(x.pc) $(y.pc)
> 
> where the x.pc variable can either be the plain package name (to look for it in default locations) or a path to the x.pc file.
> 
> Mark Adams <mfadams at lbl.gov> writes:
> 
>> I want an example that I can clone for an existing makefile. I don't even
>> see PETSC_LIB in Makefile.user
>> 
>> Makefile.user is where you start if 0) you are starting from scratch and
>> are all-in on PETSc.
>> 
>> I think the vast majority of our users either 1) have a makefile and want
>> to add PETSc or 2) want to keep more control than this turn-key method.
>> 
>> I think something like Victor's material is useful even if it goes out of
>> date (
>> https://pages.tacc.utexas.edu/~eijkhout/taccnotes/petsclinking/petsclinking.html
>> ).
>> 
>> Barry's "Writing Application Codes with PETSc" addresses (0) and then jumps
>> to 3) no makefile just cut and paste (nice, not what I'm looking for, but
>> cleaner than making an example).
>> 
>> (I have literally never done any of the methods, shown in the PETSc docs,
>> before. I have alway owned the makefile with my targets, and all of my
>> current users do this now.)
>> 
>> The first thing I googled was "petsc user makefile" and found and
>> interesting stackoverflow post (
>> https://stackoverflow.com/questions/21338718/using-petsc-on-makefile-within-my-user-defined-makefile
>> )
>> 
>> Maybe just a FAQ "Adding PETSc to a user Makefile" and you could just have
>> a link to Victor's page (and have him update the include path line)
>> 
>> 
>> On Thu, Jan 13, 2022 at 11:15 PM Jed Brown <jed at jedbrown.org> wrote:
>> 
>>> No makefile is needed to build foo from foo.c.
>>> 
>>> $ make -f $PETSC_DIR/share/petsc/Makefile.user foo
>>> 
>>> 
>>> In the example below, you don't have to write the recipe (the ${CLINKER}
>>> line). It's enough to write
>>> 
>>> foo: foo.o baz.o
>>> 
>>> Matthew Knepley <knepley at gmail.com> writes:
>>> 
>>>> foo: foo .o
>>>>      ${CLINKER} -o $@ $^ ${PETSC_LIB}
>>>> 
>>>>   Matt
>>>> 
>>>> On Thu, Jan 13, 2022 at 9:54 PM Jacob Faibussowitsch <
>>> jacob.fai at gmail.com>
>>>> wrote:
>>>> 
>>>>> Is share/petsc/Makefile.user what you are looking for?
>>>>> 
>>>>> Best regards,
>>>>> 
>>>>> Jacob Faibussowitsch
>>>>> (Jacob Fai - booss - oh - vitch)
>>>>> 
>>>>> On Jan 13, 2022, at 21:49, Barry Smith <bsmith at petsc.dev> wrote:
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>> https://petsc.org/release/docs/manual/getting_started/?highlight=user%20makefile
>>>>> 
>>>>> Search for Writing Application Codes with PETSc
>>>>> 
>>>>> Perhaps this needs to clearer or have links to it from the FAQ.
>>>>> 
>>>>> 
>>>>> 
>>>>> On Jan 13, 2022, at 9:38 PM, Mark Adams <mfadams at lbl.gov> wrote:
>>>>> 
>>>>> I am finding it pretty hard to find an example of a makefile target to
>>>>> build an app with PETSc.
>>>>> 
>>>>> I can not find it on the docs page.
>>>>> 
>>>>> With Google:
>>>>> 
>>>>> Victor has a little example that looks fine ($PETSC_LIB). (sort of, see
>>>>> below)
>>>>> 
>>>>> Another one is bigger and has this at the end:
>>>>> 
>>>>>    -${CLINKER} $< -o bin.x $(OBJ_FILES) ${PETSC_KSP_LIB}
>>>>> -I$(PETSC_DIR)/include
>>>>> 
>>>>> I recall using PETSC_KSP_LIB the last time I wrote a makefile 20 years
>>> ago.
>>>>> 
>>>>> Maybe there should be a FAQ that a search would find like "Example of
>>> user
>>>>> makefile" with something like Victor's (dropping v2 and updating it,
>>> this
>>>>> looks wrong):
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> *PETSc linkingThe easiest way to link PETSc to your code is to have this
>>>>> line in your makefile:include ${PETSC_DIR}/conf/baseThis will
>>> automatically
>>>>> give you the compilation rules. For linking you then do:${CLINKER} -o
>>> ex1
>>>>> ex1.o ${PETSC_LIB}(or FLINKER for fortran)You can also use this include
>>>>> line:include ${PETSC_DIR}/conf/variablesand then you have to give the
>>>>> compile rules yourself. In this case, dosomething like${CC} -c ex1.c
>>>>> ${PETSC_INCLUDE}to compile. (This is for petsc version 3, for version 2
>>>>> useinclude ${PETSC_DIR}/bmake/common/baseand replace base by variables
>>> to
>>>>> omit petsc’s make rules.)If you insist on having all the libraries and
>>>>> includes explicitly, usemake getlinklibsmake getincludedirs*
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>> 
>>>> --
>>>> 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/>
>>> 



More information about the petsc-dev mailing list