Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
## This is the makefile for installing SLEPc. See the Users Manual# for directions on installing SLEPc.#ALL: allLOCDIR = .DIRS = src include docsinclude ${SLEPC_DIR}/bmake/slepc_common## Basic targets to build SLEPc libraries.# all: builds the C/C++ and Fortran librariesall:-@${MAKE} slepc_all_build 2>&1 | tee make_log_${PETSC_ARCH}_${BOPT}slepc_all_build: chk_slepc_dir info slepc_chklib_dir slepc_deletelibs slepc_build_c slepc_build_fortran slepc_shared## Prints information about the system and version of SLEPc being compiled#info:-@echo "=========================================="-@echo On `date` on `hostname`-@echo Machine characteristics: `uname -a`-@echo "-----------------------------------------"-@echo "Using C compiler: ${C_CC} ${COPTFLAGS} ${CCPPFLAGS}"-@echo "C Compiler version: " `${C_CCV}`-@echo "Using C++ compiler: ${CXX_CC} ${COPTFLAGS} ${CCPPFLAGS}"-@echo "C++ Compiler version: " `${CXX_CCV}`-@echo "Using Fortran compiler: ${C_FC} ${FOPTFLAGS} ${FCPPFLAGS}"-@echo "Fortran Compiler version: " `${C_FCV}`-@echo "-----------------------------------------"-@grep SLEPC_VERSION_NUMBER ${SLEPC_DIR}/include/slepcversion.h | ${SED} "s/........//"-@echo "-----------------------------------------"-@echo "Using PETSc/SLEPc flags: ${PETSCFLAGS} ${PCONF}"-@echo "-----------------------------------------"-@echo "Using include paths: ${SLEPC_INCLUDE}"-@echo "-----------------------------------------"-@echo "Using SLEPc directory: ${SLEPC_DIR}"-@echo "Using PETSc directory: ${PETSC_DIR}"-@echo "Using PETSc arch: ${PETSC_ARCH}"-@echo "------------------------------------------"-@echo "Using C linker: ${CLINKER}"-@echo "Using Fortran linker: ${FLINKER}"-@echo "Using libraries: ${SLEPC_LIB}"-@echo "=========================================="## Builds the SLEPc libraries#slepc_build_c:-@echo "BEGINNING TO COMPILE SLEPc LIBRARIES IN ALL DIRECTORIES"-@echo "========================================="-@${OMAKE} BOPT=${BOPT} PETSC_ARCH=${PETSC_ARCH} ACTION=libfast tree${RANLIB} ${SLEPC_LIB_DIR}/*.${LIB_SUFFIX}-@echo "Completed building SLEPc libraries"-@echo "========================================="## Builds SLEPc Fortran source#slepc_build_fortran:-@echo "BEGINNING TO COMPILE SLEPc FORTRAN SOURCE"-@echo "========================================="-@cd src/fortran/custom; \${OMAKE} BOPT=${BOPT} PETSC_ARCH=${PETSC_ARCH} libf clean${RANLIB} ${SLEPC_LIB_DIR}/libslepcfortran.a${RANLIB} ${SLEPC_LIB_DIR}/libslepc.a-@echo "Completed compiling SLEPc Fortran source"-@echo "========================================="# Builds SLEPc test examples for a given BOPT and architectureslepc_testexamples: info chkopts-@echo "BEGINNING TO COMPILE AND RUN SLEPc TEST EXAMPLES"-@echo "Due to different numerical round-off on certain"-@echo "machines some of the numbers may not match exactly."-@echo "========================================="-@${OMAKE} BOPT=${BOPT} PETSC_ARCH=${PETSC_ARCH} \ACTION=testexamples_1 tree-@echo "Completed compiling and running test examples"-@echo "========================================="# Builds SLEPc test examples for a given BOPT and architectureslepc_testfortran: info chkopts-@echo "BEGINNING TO COMPILE AND RUN SLEPc FORTRAN TEST EXAMPLES"-@echo "========================================="-@echo "Due to different numerical round-off on certain"-@echo "machines or the way Fortran formats numbers"-@echo "some of the results may not match exactly."-@echo "========================================="-@${OMAKE} BOPT=${BOPT} PETSC_ARCH=${PETSC_ARCH} \ACTION=testexamples_3 tree-@echo "Completed compiling and running Fortran test examples"-@echo "========================================="# Builds SLEPc test examples for a given BOPT and architectureslepc_testexamples_uni: info chkopts-@echo "BEGINNING TO COMPILE AND RUN TEST UNI-PROCESSOR EXAMPLES"-@echo "Due to different numerical round-off on certain"-@echo "machines some of the numbers may not match exactly."-@echo "========================================="-@${OMAKE} BOPT=${BOPT} PETSC_ARCH=${PETSC_ARCH} \ACTION=testexamples_4 tree-@echo "Completed compiling and running uniprocessor test examples"-@echo "========================================="slepc_testfortran_uni: info chkopts-@echo "BEGINNING TO COMPILE AND RUN TEST UNI-PROCESSOR FORTRAN EXAMPLES"-@echo "Due to different numerical round-off on certain"-@echo "machines some of the numbers may not match exactly."-@echo "========================================="-@${OMAKE} BOPT=${BOPT} PETSC_ARCH=${PETSC_ARCH} \ACTION=testexamples_9 tree-@echo "Completed compiling and running uniprocessor fortran test examples"-@echo "========================================="# Ranlib on the librariesslepc_ranlib:${RANLIB} ${SLEPC_LIB_DIR}/*.${LIB_SUFFIX}# Deletes SLEPc librariesslepc_deletelibs: chkopts_basic-${RM} -f ${SLEPC_LIB_DIR}/*slepc_shared: sharedslepc_chklib_dir: chklib_dir## Check if SLEPC_DIR variable specified is valid#chk_slepc_dir:@if [ ! -f ${SLEPC_DIR}/include/slepcversion.h ]; then \echo "Incorrect SLEPC_DIR specified: ${SLEPC_DIR}!"; \echo "You need to use / to separate directories, not \\!"; \echo "Aborting build"; \false; fi# ------------------------------------------------------------------## All remaining actions are intended for SLEPc developers only.# SLEPc users should not generally need to use these commands.#chk_loc:@if [ ${LOC}foo = foo ] ; then \echo "*********************** ERROR ************************" ; \echo " Please specify LOC variable for eg: make allmanualpages LOC=/sandbox/petsc"; \echo "******************************************************"; false; fichk_concepts_dir: chk_loc@if [ ! -d "${LOC}/docs/manualpages/concepts" ]; then \echo Making directory ${LOC}/docs/manualpages/concepts for library; ${MKDIR} ${LOC}/docs/manualpages/concepts; fi# Builds all the documentationslepc_alldoc: slepc_allmanualpages# cd docs/tex; ${OMAKE} ps# Deletes man pages (HTML version)slepc_deletemanualpages:find ${LOC}/docs/manualpages -type f -name "*.html" -exec ${RM} {} \;${RM} ${LOC}/docs/tex/exampleconcepts${RM} ${LOC}/docs/tex/manconcepts${RM} ${LOC}/docs/manualpages/manualpages.cit# -${PETSC_DIR}/maint/update-docs.py ${LOC} clean# Builds all versions of the man pagesslepc_allmanualpages: chk_loc slepc_deletemanualpages chk_concepts_dir-${OMAKE} ACTION=manualpages_buildcite tree_basic LOC=${LOC}-${OMAKE} ACTION=manualpages tree_basic LOC=${LOC}-${PETSC_DIR}/maint/wwwindex.py ${SLEPC_DIR} ${LOC}-${OMAKE} ACTION=slepc_manexamples tree LOC=${LOC}-${OMAKE} manconcepts LOC=${LOC}-${OMAKE} ACTION=getexlist tree LOC=${LOC}-${OMAKE} ACTION=slepc_exampleconcepts tree LOC=${LOC}-${PETSC_DIR}/maint/helpindex.py ${SLEPC_DIR} ${LOC}-${OMAKE} ACTION=slepc_html alltree LOC=${LOC}# -${PETSC_DIR}/maint/update-docs.py ${LOC}cp ${LOC}/docs/manual.htm ${LOC}/docs/index.html# Builds Fortran stub filesslepc_allfortranstubs:# -@${RM} -f src/fortran/auto/*.c# -${OMAKE} ACTION=slepc_fortranstubs tree# -@cd src/fortran/auto; ${OMAKE} -f makefile slepc_fixfortran-@which ${BFORT} > /dev/null 2>&1; \if [ "$$?" != "0" ]; then \echo "No bfort available, skipping building Fortran stubs";\else \${RM} -f ${SLEPC_DIR}/src/fortran/auto/*.c ;\touch ${SLEPC_DIR}/src/fortran/auto/makefile.src ;\${OMAKE} ACTION=slepc_fortranstubs tree_basic ;\cd ${SLEPC_DIR}/src/fortran/auto; ${RM} makefile.src; echo SOURCEC = ` ls *.c | tr -s '\n' ' '` > makefile.src ;\cd ${SLEPC_DIR}/src/fortran/auto; ${OMAKE} slepc_fixfortran ;\fi# -------------------------------------------------------------------------------## Some macros to check if the fortran interface is up-to-date.#slepc_countfortranfunctions:-@cd ${SLEPC_DIR}/src/fortran; egrep '^void' custom/*.c auto/*.c | \cut -d'(' -f1 | tr -s ' ' | cut -d' ' -f2 | uniq | egrep -v "(^$$|Tao)" | \sed "s/_$$//" | sort > /tmp/countfortranfunctionsslepc_countcfunctions:-@ grep -s extern ${SLEPC_DIR}/include/*.h *.h | grep "(" | tr -s ' ' | \cut -d'(' -f1 | cut -d' ' -f3 | grep -v "\*" | tr -s '\012' | \tr 'A-Z' 'a-z' | sort > /tmp/countcfunctionsslepc_difffortranfunctions: slepc_countfortranfunctions slepc_countcfunctions-@echo -------------- Functions missing in the Fortran interface ----------------------@diff /tmp/countcfunctions /tmp/countfortranfunctions | grep "^<" | cut -d' ' -f2-@echo ----------------- Functions missing in the C interface -------------------------@diff /tmp/countcfunctions /tmp/countfortranfunctions | grep "^>" | cut -d' ' -f2-@${RM} /tmp/countcfunctions /tmp/countfortranfunctionsslepc_checkbadfortranstubs:-@echo "========================================="-@echo "Functions with MPI_Comm as an Argument"-@echo "========================================="-@cd ${SLEPC_DIR}/src/fortran/auto; grep '^void' *.c | grep 'MPI_Comm' | \tr -s ' ' | tr -s ':' ' ' |cut -d'(' -f1 | cut -d' ' -f1,3-@echo "========================================="-@echo "Functions with a String as an Argument"-@echo "========================================="-@cd ${SLEPC_DIR}/src/fortran/auto; grep '^void' *.c | grep 'char \*' | \tr -s ' ' | tr -s ':' ' ' |cut -d'(' -f1 | cut -d' ' -f1,3-@echo "========================================="-@echo "Functions with Pointers to SLEPc Objects as Argument"-@echo "========================================="-@cd ${SLEPC_DIR}/src/fortran/auto; \_p_OBJ=`grep _p_ ${SLEPC_DIR}/include/*.h | tr -s ' ' | \cut -d' ' -f 3 | tr -s '\012' | grep -v '{' | cut -d'*' -f1 | \sed "s/_p_//g" | tr -s '\012 ' ' *|' ` ; \for OBJ in $$_p_OBJ; do \grep "$$OBJ \*" *.c | tr -s ' ' | tr -s ':' ' ' | \cut -d'(' -f1 | cut -d' ' -f1,3; \done