[petsc-users] makefile changes since release 12
Jed Brown
jed at jedbrown.org
Fri Apr 24 09:13:22 CDT 2020
I'd say yes, that's the right thing. These are vestigial remnants of
the legacy make system.
I believe PETSc doesn't use this anywhere internally, and thus can be
removed. I don't know if the following patch would break any existing
correct usage.
diff --git i/lib/petsc/conf/variables w/lib/petsc/conf/variables
index a7de68e2ae..07bc4254c9 100644
--- i/lib/petsc/conf/variables
+++ w/lib/petsc/conf/variables
@@ -36,13 +36,13 @@ F_SH_LIB_PATH = ${PETSC_F_SH_LIB_PATH}
PSOURCEC = $(SOURCEC:%=`pwd`/%)
PSOURCECXX= $(SOURCECXX:%=`pwd`/%)
PSOURCECU = $(SOURCECU:%=`pwd`/%)
-PETSC_COMPILE = ${PCC} -c ${PCC_FLAGS} ${PFLAGS} ${CCPPFLAGS} ${PSOURCEC}
+PETSC_COMPILE = ${PCC} -c ${PCC_FLAGS} ${PFLAGS} ${CCPPFLAGS}
PETSC_CCOMPILE = ${CC} -c ${CC_FLAGS} ${CPPFLAGS} ${PETSC_CC_INCLUDES}
-PETSC_CXXCOMPILE = ${CXX} -c ${CXX_FLAGS} ${CXXFLAGS} ${CXXCPPFLAGS} ${PSOURCECXX}
+PETSC_CXXCOMPILE = ${CXX} -c ${CXX_FLAGS} ${CXXFLAGS} ${CXXCPPFLAGS}
PETSC_COMPILE_SINGLE = ${PCC} -o $*.o -c ${PCC_FLAGS} ${PFLAGS} ${CCPPFLAGS}
PETSC_CXXCOMPILE_SINGLE = ${CXX} -o $*.o -c ${CXX_FLAGS} ${CXXFLAGS} ${CXXCPPFLAGS}
-PETSC_FCOMPILE = ${FC} -c ${FC_FLAGS} ${FFLAGS} ${FCPPFLAGS} ${SOURCEF} ${SOURCEF90}
-PETSC_CUCOMPILE = ${CUDAC} ${CUDAC_FLAGS} -c --compiler-options="${PCC_FLAGS} ${CFLAGS} ${CCPPFLAGS}" ${PSOURCECU}
+PETSC_FCOMPILE = ${FC} -c ${FC_FLAGS} ${FFLAGS} ${FCPPFLAGS}
+PETSC_CUCOMPILE = ${CUDAC} ${CUDAC_FLAGS} -c --compiler-options="${PCC_FLAGS} ${CFLAGS} ${CCPPFLAGS}"
PETSC_CUCOMPILE_SINGLE = ${CUDAC} -o $*.o ${CUDAC_FLAGS} -c --compiler-options="${PCC_FLAGS} ${CFLAGS} ${CCPPFLAGS}"
#
# define OBJSC OBJSCXX and OBJSF OBJSCU
Crossing over to dev discussion, I wish we could make these names more
standard, like the following predefined ones (see `make -p`).
COMPILE.F = $(FC) $(FFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
%.o: %.F
# recipe to execute (built-in):
$(COMPILE.F) $(OUTPUT_OPTION) $<
LINK.F = $(FC) $(FFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
%: %.F
# recipe to execute (built-in):
$(LINK.F) $^ $(LOADLIBES) $(LDLIBS) -o $@
So we could define PETSC_COMPILE.F, PETSC_LINK.F, etc., and a user could write
COMPILE.F = PETSC_COMPILE.F
if all their *.F sources use PETSc, in which case all the standard rules
would work. Or, they could use PETSc-enabled build only for a subset of
their sources:
$(SOURCES_USING_PETSC:%.F=%.o) : %.o : %.F
$(PETSC_COMPILE.F) $(OUTPUT_OPTION) $<
Aldo Bonfiglioli <aldo.bonfiglioli at unibas.it> writes:
> Hi there,
>
> the makefile I have been using for ages (up to 11.4) now fails with 12.5.
>
> I noticed that there have been several changes in
>
> include $(PETSC_DIR)/lib/petsc/conf/variables
> include $(PETSC_DIR)/lib/petsc/conf/rules
>
> btw. the two aforementioned versions.
>
> If I'm not wrong, *.F files should now be compiled with:
>
>>
>> .F.o .F90.o .F95.o:
>> ${PETSC_FCOMPILE} -o $@ $<
> However, in ${PETSC_FCOMPILE} there are also my ${SOURCEF} fortran sources,
>
> so that I get the following compilation error:
>
>> gfortran -c -fPIC -Wall -ffree-line-length-0
>> -Wno-unused-dummy-argument -g -I../../include/ -I.
>> -I/home/abonfi/src/petsc-3.12.5/include
>> -I/home/abonfi/src/petsc-3.12.5/linux_gnu/include getidx.f
>> ApplicationFunction.F ApplicationFunction_t.F bndry_iset.F
>> JacobianBoundaryConditions.F RHSFunction.F RHSFunction_t.F
>> RHSJacobian.F RHSJacobian_t.F blockdata.f bndvflx.F clearmem.F
>> lhsbc5.F lhsbc6.F exgeo.F newgeo.F ghost.F ghost2.F init.F iset.F
>> iset_t.F main.F matsch.F MotionSolver.F myTS.F nodres.F nodres_t.F
>> noname.f printmat2.F printmat.F printmatmm.F qb.F rdat.F readat.F
>> rgrdpts.F rhsbc1.F rhsbc4.F rhsbc5.F rhsbc5c.F sclsch.F
>> setbc4laplace.F setibc.F seterr.F setupRHS.F setupRHS_t.F setupLHS_b.F
>> solzne.F MatAllocaSeq.F test.F tmodel.F turbini.F turbsch.F update2.F
>> update3.F update4.F weakbc.F -o ApplicationFunction_t.o
>> ApplicationFunction_t.F
>> gfortran: fatal error: cannot specify ‘-o’ with ‘-c’, ‘-S’ or ‘-E’
>> with multiple files
>> compilation terminated.
>
> If I remove ${SOURCEF} from the ${PETSC_FCOMPILE} definition in
>
> $(PETSC_DIR)/lib/petsc/conf/variables
>
> things work, but I am not sure that this is the right thing to do.
>
> Thanks,
>
> Aldo
>
> PS My makefile is attached
>
> --
> Dr. Aldo Bonfiglioli
> Associate professor of Fluid Machines
> Scuola di Ingegneria
> Universita' della Basilicata
> V.le dell'Ateneo lucano, 10 85100 Potenza ITALY
> tel:+39.0971.205203 fax:+39.0971.205215
> web: http://docenti.unibas.it/site/home/docente.html?m=002423
>
> VERSION = 3.12.0
> PROGRAM = eulfs$(VERSION)-$(PETSC_ARCH)
> all: $(PROGRAM)
> FFLAGS = -I../../include/ -I.
> FCPPFLAGS = $(FCPPFLAGS) -I../../include/ -I.
> CFLAGS =
> #
> # ad hoc fix for SP3
> #
> #FCPPFLAGS = ${PETSC_INCLUDE} ${PCONF} ${PETSCFLAGS} ${PETSC_PARCH} \
> ${FPPFLAGS} -I$(FSPL_DIR)/include/
>
> include $(PETSC_DIR)/lib/petsc/conf/variables
> include $(PETSC_DIR)/lib/petsc/conf/rules
>
>
> DEST = $(HOME)/bin/$(PETSC_ARCH)
> INSTALL = cp
> SOURCEC =
> SOURCEF = \
> getidx.f \
> ApplicationFunction.F \
> ApplicationFunction_t.F \
> bndry_iset.F \
> JacobianBoundaryConditions.F \
> RHSFunction.F \
> RHSFunction_t.F \
> RHSJacobian.F \
> RHSJacobian_t.F \
> blockdata.f \
> bndvflx.F \
> clearmem.F \
> lhsbc5.F \
> lhsbc6.F \
> exgeo.F \
> newgeo.F \
> ghost.F \
> ghost2.F \
> init.F \
> iset.F \
> iset_t.F \
> main.F \
> matsch.F \
> MotionSolver.F \
> myTS.F \
> nodres.F \
> nodres_t.F \
> noname.f \
> printmat2.F \
> printmat.F \
> printmatmm.F \
> qb.F \
> rdat.F \
> readat.F \
> rgrdpts.F \
> rhsbc1.F \
> rhsbc4.F \
> rhsbc5.F \
> rhsbc5c.F \
> sclsch.F \
> setbc4laplace.F \
> setibc.F \
> seterr.F \
> setupRHS.F \
> setupRHS_t.F \
> setupLHS_b.F \
> solzne.F \
> MatAllocaSeq.F \
> test.F \
> tmodel.F \
> turbini.F \
> turbsch.F \
> update2.F \
> update3.F \
> update4.F \
> weakbc.F
> SOURCEH =
> OBJSC =
> OBJSF = \
> getidx.o \
> ApplicationFunction.o \
> ApplicationFunction_t.o \
> bndry_iset.o \
> JacobianBoundaryConditions.o \
> RHSFunction.o \
> RHSFunction_t.o \
> RHSJacobian.o \
> RHSJacobian_t.o \
> blockdata.o \
> bndvflx.o \
> clearmem.o \
> lhsbc5.o \
> lhsbc6.o \
> exgeo.o \
> newgeo.o \
> ghost.o \
> ghost2.o \
> init.o \
> iset.o \
> iset_t.o \
> main.o \
> matsch.o \
> MotionSolver.o \
> myTS.o \
> nodres.o \
> nodres_t.o \
> noname.o \
> printmat2.o \
> printmat.o \
> printmatmm.o \
> qb.o \
> rdat.o \
> readat.o \
> rgrdpts.o \
> rhsbc1.o \
> rhsbc4.o \
> rhsbc5.o \
> rhsbc5c.o \
> sclsch.o \
> setbc4laplace.o \
> setibc.o \
> seterr.o \
> setupRHS.o \
> setupRHS_t.o \
> setupLHS_b.o \
> solzne.o \
> MatAllocaSeq.o \
> test.o \
> tmodel.o \
> turbini.o \
> turbsch.o \
> update2.o \
> update3.o \
> update4.o \
> weakbc.o
> LIBBASE =
> #LIBFLAGS = -L$(HOME)/lib/$(PETSC_ARCH) -lfxdr -lport -lmynag -lskit
> LIBFLAGS = -L$(HOME)/lib/$(PETSC_ARCH) -lfxdr -lport -lsparse-blas -lskit -ltirpc
> LIBS = \
> $(FSPL_DIR)/lib/$(PETSC_ARCH)/libscalar.a \
> $(FSPL_DIR)/lib/$(PETSC_ARCH)/libeuler.a \
> $(FSPL_DIR)/lib/$(PETSC_ARCH)/libspl.a \
> $(FSPL_DIR)/lib/$(PETSC_ARCH)/libns.a \
> $(FSPL_DIR)/lib/$(PETSC_ARCH)/libturbo.a \
> $(FSPL_DIR)/lib/$(PETSC_ARCH)/libgeo.a \
> $(FSPL_DIR)/lib/$(PETSC_ARCH)/libchem.a \
> $(FSPL_DIR)/lib/$(PETSC_ARCH)/libutil.a
> #
> # CLDFILES to be defined only for CRAY
> #
> #CLDFILES = dp_lapack.cld dp_blas.cld pat.cld
> #CLDFILES = dp_lapack.cld dp_blas.cld
>
> #look:; @echo $(SOURCEALL) $(OBJSF)
> look:; @echo "Look man! Isn't it weird? " $(PETSC_FCOMPILE)
>
>
> $(PROGRAM): $(OBJSF) $(OBJSC) $(LIBS)
> -$(FLINKER) $(CLDFILES) -o $(PROGRAM) $(OBJSF) $(OBJSC) $(LIBS) \
> $(PETSC_FORTRAN_LIB) $(PETSC_LIB) $(LIBFLAGS)
>
>
> $(FSPL_DIR)/lib/$(PETSC_ARCH)/libgeo.a:
> cd $(FSPL_DIR)/src/geometry; $(MAKE) install
> $(FSPL_DIR)/lib/$(PETSC_ARCH)/libeuler.a:
> cd $(FSPL_DIR)/src/euler; $(MAKE) install
> $(FSPL_DIR)/lib/$(PETSC_ARCH)/libspl.a:
> cd $(FSPL_DIR)/src/schemes; $(MAKE) install
> $(FSPL_DIR)/lib/$(PETSC_ARCH)/libns.a:
> cd $(FSPL_DIR)/src/navier-stokes; $(MAKE) install
> $(FSPL_DIR)/lib/$(PETSC_ARCH)/libscalar.a:
> cd $(FSPL_DIR)/src/scalar; $(MAKE) install
> $(FSPL_DIR)/lib/$(PETSC_ARCH)/libturbo.a:
> cd $(FSPL_DIR)/src/turbo; $(MAKE) install
> $(FSPL_DIR)/lib/$(PETSC_ARCH)/libchem.a:
> cd $(FSPL_DIR)/src/chemistry; $(MAKE) install
> $(FSPL_DIR)/lib/$(PETSC_ARCH)/libutil.a:
> cd $(FSPL_DIR)/src/util; $(MAKE) install
>
>
> #.SUFFIXES:
> #.F.o:
> # $(U_FC) -c $(FFLAGS) $(FCPPFLAGS) $<
> #.f.o:
> # $(U_FC) -c $(FFLAGS) $<
> #########
>
>
> checkout:; @co $(SOURCEF)
>
> install: $(PROGRAM)
> @echo Installing $(PROGRAM) in $(DEST)
> @if [ $(DEST) != . ]; then \
> (rm -f $(DEST)/$(PROGRAM); $(INSTALL) $(PROGRAM) $(DEST)); fi
> ###
> blockdata.o: ../../include/paramt.h ../../include/bnd.h \
> ../../include/constants.h ../../include/bnd.com \
> ../../include/conv.com ../../include/implicit.h \
> ../../include/nboun.com ../../include/three.com
> bndvflx.o: ../../include/paramt.h ../../include/constants.h \
> ../../include/implicit.h ../../include/bnd.h ../../include/bnd.com \
> ../../include/three.com ../../include/nloc.com ../../include/flags.com \
> ../../include/stream.com ../../include/io.com
> exgeo.o: ../../include/io.com ../../include/constants.h ../../include/nloc.com
> iset.o: ../../include/iset.com
> lhsbc5.o: ../../include/iset.com
> main.o: ../../include/stack.com
> matsch.o: ../../include/flags.com
> mshcnt.o: ../../include/verbose.com ../../include/io.com
> nodres.o: ../../include/paramt.h ../../include/bnd.h ../../include/constants.h \
> ../../include/bnd.com ../../include/nloc.com ../../include/flags.com \
> ../../include/stream.com ../../include/conv.com \
> ../../include/nboun.com ../../include/implicit.h ../../include/io.com
> psub.o: ../../include/constants.h ../../include/paramt.h ../../include/nloc.com \
> ../../include/flags.com
> rdat.o: ../../include/paramt.h ../../include/bnd.h ../../include/implicit.h \
> ../../include/visco.com ../../include/constants.h \
> ../../include/conv.com ../../include/stream.com \
> ../../include/chorin.com ../../include/scalar.com \
> ../../include/flags.com ../../include/turb.com \
> ../../include/bnd.com ../../include/io.com \
> ../../include/verbose.com
> readat.o: ../../include/constants.h ../../include/bnd.h ../../include/paramt.h \
> ../../include/io.com ../../include/nloc.com ../../include/flags.com \
> ../../include/stream.com
> rhsbc1.o: ../../include/paramt.h ../../include/constants.h \
> ../../include/iset.com
> rhsbc4.o: ../../include/paramt.h ../../include/constants.h \
> ../../include/iset.com
> rhsbc5.o: ../../include/paramt.h ../../include/iset.com \
> ../../include/constants.h
> sclsch.o: ../../include/flags.com
> solzne.o: ../../include/io.com
> turbcomp.o: ../../include/paramt.h ../../include/constants.h ../../include/nloc.com \
> ../../include/three.com ../../include/flags.com ../../include/turb.com \
> ../../include/trip.com ../../include/visco.com \
> ../../include/nboun.com ../../include/implicit.h ../../include/io.com
> update2.o: ../../include/constants.h ../../include/paramt.h \
> ../../include/conv.com ../../include/nloc.com ../../include/verbose.com \
> ../../include/implicit.h ../../include/iset.com \
> ../../include/flags.com ../../include/io.com
> update3.o: ../../include/constants.h ../../include/paramt.h \
> ../../include/implicit.h ../../include/conv.com ../../include/nloc.com \
> ../../include/verbose.com ../../include/iset.com \
> ../../include/flags.com ../../include/io.com
> update4.o: ../../include/constants.h ../../include/paramt.h \
> ../../include/conv.com ../../include/nboun.com ../../include/nloc.com \
> ../../include/verbose.com ../../include/implicit.h ../../include/io.com
> weakbc.o: ../../include/paramt.h ../../include/constants.h ../../include/bnd.h \
> ../../include/bnd.com ../../include/three.com ../../include/nloc.com \
> ../../include/implicit.h rotaterhs.f rotaterhs2.f
More information about the petsc-users
mailing list