Its internal organization of some old code.

Previously we had 2 things:

- PETSC_COMPILE (perhaps PETSC_COMPILE_MULTIPLE is a more appropriate name) did 
something equivalent to 'gcc -c a.c b.c c.c' - i.e compile multiple files at 
the same time.

- PETSC_COMPILE_SINGLE used was to compile one file at a time. [gcc -c a.c]

Some of the old build infrastructure that uses PETSC_COMPILE is no longer used 
and removed [ i.e make target 'libfast']

And somehow the remaining *_SINGLE targets had this error [i.e PETSC_COMPILE 
was used incorrectly instead of PETSC_COMPILE_SINGLE] which got fixed.

Satish

On Tue, 15 Dec 2020, Alex Koshkarov wrote:

> Thank you! 
> 
> It makes sense to use share/petsc/Makefile.user - I will try to understand 
> it. However, can you please tell me what is the meaning of "_SINGLE" in 
> "PETSC_COMPILE_SINGLE"? Does it mean compile only one source file?
> 
> Best regards,
> Alex Koshkarov.
> 
> On 12/15/20, 9:25 AM, "Satish Balay" <[email protected]> wrote:
> 
>     On Tue, 15 Dec 2020, Alex Koshkarov wrote:
> 
>     > Hi All,
>     > 
>     > I have been using trivial makefile (see below) for the code which uses 
> petsc. The makefile relies on variable PETSC_COMPILE which disappeared in new 
> petsc version (absent in 3.14.2, but present in 3.13.4). What would be the 
> right way to fix the makefile? (should I use something like 
> PETSC_COMPILE_SINGLE ?).
> 
>     Yes - this change was a bugfix.
> 
>     > Is it a very bad practice to use such makefile?
> 
>     For most use cases the default targets work. However this usage [where 
> sources and obj files are in different dirs] is not covered by them.
> 
>     So - I think using such targets is appropriate.
> 
>     There is also share/petsc/Makefile.user - which attempts to provide a 
> portable way to create user makefiles [that don't rely on internals like 
> PETSC_COMPILE_SINGLE] - but requires gnumake and pkgconfig
> 
>     Satish
> 
> 
>     > 
>     > p.s. sorry if this is a duplicate message, I believe I sent the first 
> one to the wrong address.
>     > 
>     > Thank you very much,
>     > Alex Koshkarov.
>     > 
>     > 
>     > Example of makefile, it assumes sources in “src” and creats objects in 
> “objects”:
>     > 
>     > CPP := $(wildcard src/*.c)
>     > DEP := $(wildcard src/*.h)
>     > OBJ := $(addprefix objects/,$(notdir $(CPP:.c=.o)))
>     > 
>     > include ${PETSC_DIR}/lib/petsc/conf/variables
>     > include ${PETSC_DIR}/lib/petsc/conf/rules
>     > 
>     > driver: $(OBJ)
>     >                 -${CLINKER} -o $@ $^ ${PETSC_LIB} ${EXTRALIBS} ${CFLAGS}
>     > 
>     > objects/%.o: src/%.c $(DEP)
>     >                 ${PETSC_COMPILE} -c $< -o $@
>     > 
>     > 
> 
> 

Reply via email to