149da0fa4SScott Kruger# -*- mode: makefile-gmake -*- 249da0fa4SScott Kruger 349da0fa4SScott KrugerCONFIGDIR := config 449da0fa4SScott Kruger 5fc46264cSScott Kruger# TESTSRCDIR is always relative to gmakefile.test 6fc46264cSScott Kruger# This must be before includes 7fc46264cSScott Krugermkfile_path := $(abspath $(MAKEFILE_LIST)) 8fc46264cSScott KrugerTESTSRCDIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST)))) 9fc46264cSScott Kruger 1049da0fa4SScott Kruger# If $(PETSC_ARCH) is empty, this defines it and PETSC_DIR 1149da0fa4SScott Krugerinclude $(PETSC_ARCH)/lib/petsc/conf/petscvariables 1249da0fa4SScott Krugerinclude ./lib/petsc/conf/variables 1349da0fa4SScott Kruger 1449da0fa4SScott Krugerifeq ($(TESTDIR),) # Default 1549da0fa4SScott KrugerTESTDIR := $(PETSC_ARCH)/tests 1649da0fa4SScott Krugergmakegentest_opts= 1749da0fa4SScott Krugerelse 1849da0fa4SScott Krugergmakegentest_opts="-t $(TESTDIR)" 1949da0fa4SScott KrugerTESTDIR := $(TESTDIR) 2049da0fa4SScott Krugerendif 2149da0fa4SScott KrugerMODDIR := $(PETSC_ARCH)/include 2249da0fa4SScott KrugerTESTLOGFILE = $(TESTDIR)/examples-$(PETSC_ARCH).log 2349da0fa4SScott Kruger 2449da0fa4SScott Krugerpkgs := sys vec mat dm ksp snes ts tao 2549da0fa4SScott Kruger 2649da0fa4SScott Krugerpetscconf := $(PETSC_ARCH)/include/petscconf.h 2749da0fa4SScott Krugerpetscvariables := $(PETSC_ARCH)/lib/petsc/conf/petscvariables 2849da0fa4SScott Krugergeneratedtest := $(PETSC_ARCH)/lib/petsc/conf/testfiles 2949da0fa4SScott Kruger 3049da0fa4SScott Kruger.SECONDEXPANSION: # to expand $$(@D)/.DIR 3149da0fa4SScott Kruger 3249da0fa4SScott KrugerTESTFLAGS := # Initialize as simple variable 3349da0fa4SScott Kruger 3449da0fa4SScott Kruger#workarround old cygwin versions 3549da0fa4SScott Krugerifeq ($(PETSC_CYGWIN_BROKEN_PIPE),1) 3649da0fa4SScott Krugerifeq ($(shell basename $(AR)),ar) 3749da0fa4SScott Kruger V ?=1 3849da0fa4SScott Krugerendif 3949da0fa4SScott Krugerendif 4049da0fa4SScott KrugerV ?= $(if $(findstring s,$(MAKEFLAGS)),0) 4149da0fa4SScott Krugerifeq ($(V),) # Default 4249da0fa4SScott Kruger quiet_HELP := "Use \"$(MAKE) V=1\" to see verbose compile lines, \"$(MAKE) V=0\" to suppress.\n" 4349da0fa4SScott Kruger quiet = @printf $(quiet_HELP)$(eval quiet_HELP:=)" %10s %s\n" "$1$2" "$@"; $($1) 4449da0fa4SScott Kruger quiettest = @printf " %10s %s\n" "TEST" "$(@:$(TESTDIR)/counts/%.counts=%)"; 4549da0fa4SScott Krugerelse ifeq ($(V),0) # Suppress entire command 4649da0fa4SScott Kruger quiet = @$($1) 4749da0fa4SScott Kruger quiettest = @ 4849da0fa4SScott Krugerelse # Show the full command line 4949da0fa4SScott Kruger quiet = $($1) 5049da0fa4SScott Kruger quiettest = 5149da0fa4SScott Kruger TESTFLAGS += -v 5249da0fa4SScott Krugerendif 5349da0fa4SScott Kruger 5449da0fa4SScott Krugerifeq ($(FORCE),1) 5549da0fa4SScott Kruger TESTFLAGS += -f # force test execution 5649da0fa4SScott Krugerendif 5749da0fa4SScott Krugerifeq ($(VALGRIND),1) 5849da0fa4SScott Kruger TESTFLAGS += -V # Add valgrind to the flags 5949da0fa4SScott Krugerendif 6049da0fa4SScott Krugerifeq ($(REPLACE),1) 6149da0fa4SScott Kruger TESTFLAGS += -m # Replace results by passing -m to petscdiff 6249da0fa4SScott Krugerendif 63f50802fbSScott Krugerifeq ($(ALT),1) 64f50802fbSScott Kruger TESTFLAGS += -M # Replace alt files by passing -M to petscdiff 65f50802fbSScott Krugerendif 6649da0fa4SScott Krugerifeq ($(DIFF_NUMBERS),1) 6749da0fa4SScott Kruger TESTFLAGS += -j # Pass -j to petscdiff to diff the actual numbers 6849da0fa4SScott Krugerendif 6949da0fa4SScott Krugerifdef OPTIONS 7049da0fa4SScott Kruger TESTFLAGS += -a '$(OPTIONS)' # override arguments 7149da0fa4SScott Krugerendif 7249da0fa4SScott Krugerifdef EXTRA_OPTIONS 7349da0fa4SScott Kruger TESTFLAGS += -e '$(EXTRA_OPTIONS)' # add extra arguments 7449da0fa4SScott Krugerendif 7549da0fa4SScott Krugerifdef NP 7649da0fa4SScott Kruger TESTFLAGS += -n $(NP) # set number of processes 7749da0fa4SScott Krugerendif 7849da0fa4SScott Kruger# Override the default timeout that may be found at the top of config/petsc_harness.sh 7949da0fa4SScott Kruger# This must be an integer. It is given in seconds. 8049da0fa4SScott Krugerifdef TIMEOUT 8149da0fa4SScott Kruger TESTFLAGS += -t $(TIMEOUT) # Override the default timeout 8249da0fa4SScott Krugerendif 8349da0fa4SScott Kruger 8449da0fa4SScott Kruger 8549da0fa4SScott Kruger 86fc46264cSScott Kruger$(generatedtest) : $(petscconf) $(petscvariables) $(CONFIGDIR)/gmakegentest.py $(TESTDIR)/.DIR | $$(@D)/.DIR 8749da0fa4SScott Kruger $(PYTHON) $(CONFIGDIR)/gmakegentest.py --petsc-arch=$(PETSC_ARCH) $(gmakegentest_opts) 8849da0fa4SScott Kruger 8949da0fa4SScott Kruger-include $(generatedtest) 9049da0fa4SScott Kruger 9149da0fa4SScott Krugerifeq ($(PETSC_LANGUAGE),CXXONLY) 9249da0fa4SScott Kruger cc_name := CXX 9349da0fa4SScott Krugerelse 9449da0fa4SScott Kruger cc_name := CC 9549da0fa4SScott Krugerendif 9649da0fa4SScott Kruger 9749da0fa4SScott KrugerPETSC_COMPILE.c = $(call quiet,$(cc_name)) -c $(PCC_FLAGS) $(CFLAGS) $(CCPPFLAGS) $(C_DEPFLAGS) 9849da0fa4SScott KrugerPETSC_COMPILE.cxx = $(call quiet,CXX) -c $(CXX_FLAGS) $(CFLAGS) $(CCPPFLAGS) $(CXX_DEPFLAGS) 9949da0fa4SScott KrugerPETSC_COMPILE.cu = $(call quiet,CUDAC) -c $(CUDAC_FLAGS) --compiler-options="$(PCC_FLAGS) $(CXXFLAGS) $(CCPPFLAGS)" 10049da0fa4SScott KrugerPETSC_GENDEPS.cu = $(call quiet,CUDAC,.dep) --generate-dependencies --output-directory=$(@D) $(CUDAC_FLAGS) --compiler-options="$(PCC_FLAGS) $(CXXFLAGS) $(CCPPFLAGS)" 10149da0fa4SScott KrugerPETSC_COMPILE.F = $(call quiet,FC) -c $(FC_FLAGS) $(FFLAGS) $(FCPPFLAGS) $(FC_DEPFLAGS) 10249da0fa4SScott Kruger 10349da0fa4SScott Krugertestlangs := c cu cxx F F90 10449da0fa4SScott Krugerconcattestlang = $(foreach lang, $(2), $(testsrcs-$(1).$(lang):%.$(lang)=$(TESTDIR)/%.o)) 10549da0fa4SScott Krugertestsrcs.o := $(foreach pkg, $(pkgs), $(call concattestlang,$(pkg),$(testlangs))) 106fc46264cSScott Krugertestsrcs-rel := $(foreach pkg, $(pkgs), $(foreach lang, $(testlangs), $(testsrcs-$(pkg).$(lang)))) 107fc46264cSScott Krugertestsrcs := $(foreach sfile, $(testsrcs-rel), $(TESTSRCDIR)/$(sfile)) 10849da0fa4SScott Kruger 10949da0fa4SScott Kruger# Refresh testfiles when sources change, but don't balk if the source file is nonexistent (deleted) 11049da0fa4SScott Kruger$(generatedtest) : $(testsrcs) 11149da0fa4SScott Kruger$(testsrcs) : 11249da0fa4SScott Kruger 11349da0fa4SScott Kruger$(TESTDIR)/%.o : %.c | $$(@D)/.DIR 11449da0fa4SScott Kruger $(PETSC_COMPILE.c) $(abspath $<) -o $@ 11549da0fa4SScott Kruger 11649da0fa4SScott Kruger$(TESTDIR)/%.o : %.cxx | $$(@D)/.DIR 11749da0fa4SScott Kruger $(PETSC_COMPILE.cxx) $(abspath $<) -o $@ 11849da0fa4SScott Kruger 11949da0fa4SScott Kruger$(TESTDIR)/%.o : %.cu | $$(@D)/.DIR 12049da0fa4SScott Kruger $(PETSC_COMPILE.cu) $(abspath $<) -o $@ # Compile first so that if there is an error, it comes from a normal compile 12149da0fa4SScott Kruger @$(PETSC_GENDEPS.cu) $(abspath $<) -o $(@:%.o=%.d) # Generate the dependencies for later 12249da0fa4SScott Kruger 12349da0fa4SScott Kruger# Test modules go in a different directory 12449da0fa4SScott Kruger$(TESTDIR)/%.o : MODDIR = $(@D) 12549da0fa4SScott KrugerFCMOD = cd 12649da0fa4SScott Kruger$(TESTDIR)/%.o : %.F | $$(@D)/.DIR 12749da0fa4SScott Krugerifeq ($(FC_MODULE_OUTPUT_FLAG),) 12849da0fa4SScott Kruger $(call quiet,FCMOD) $(MODDIR) && $(FC) -c $(FC_FLAGS) $(FFLAGS) $(FCPPFLAGS) $(FC_DEPFLAGS) $(abspath $<) -o $(abspath $@) 12949da0fa4SScott Krugerelse 13049da0fa4SScott Kruger $(PETSC_COMPILE.F) $(abspath $<) -o $@ $(FC_MODULE_OUTPUT_FLAG)$(MODDIR) 13149da0fa4SScott Krugerendif 13249da0fa4SScott Kruger 13349da0fa4SScott Kruger$(TESTDIR)/%.o : %.F90 | $$(@D)/.DIR 13449da0fa4SScott Krugerifeq ($(FC_MODULE_OUTPUT_FLAG),) 13549da0fa4SScott Kruger $(call quiet,FCMOD) $(MODDIR) && $(FC) -c $(FC_FLAGS) $(FFLAGS) $(FCPPFLAGS) $(FC_DEPFLAGS) $(abspath $<) -o $(abspath $@) 13649da0fa4SScott Krugerelse 13749da0fa4SScott Kruger $(PETSC_COMPILE.F) $(abspath $<) -o $@ $(FC_MODULE_OUTPUT_FLAG)$(MODDIR) 13849da0fa4SScott Krugerendif 139*cf7d3547SScott Kruger# This is a hack to fix a broken gfortran. 140*cf7d3547SScott Kruger @echo "$(@F): $(@) \\" > $(@:%.o=%.dtemp) 141*cf7d3547SScott Kruger @grep "\.F90 " $(@:%.o=%.d) | sed 's/.$$//' >> $(@:%.o=%.dtemp) 142*cf7d3547SScott Kruger @mv $(@:%.o=%.dtemp) $(@:%.o=%.d) 14349da0fa4SScott Kruger 14420844ca6SSatish Balay# link line constructed differently for gmakefile vs gmakefile.test invocation 14520844ca6SSatish Balayifeq ($(libpetscall),) 14620844ca6SSatish BalayPETSC_TEST_LIB = $(PETSC_LIB) 14720844ca6SSatish Balayelse 14820844ca6SSatish BalayPETSC_TEST_LIB = $(C_SH_LIB_PATH) $(PETSC_EXTERNAL_LIB_BASIC) 14920844ca6SSatish Balayendif 15020844ca6SSatish Balay 15149da0fa4SScott Kruger# Test executables 15223462f55SSatish Balay$(TESTDIR)/%f : $(TESTDIR)/%f.o $$^ $(libpetscall) 15320844ca6SSatish Balay $(call quiet,FLINKER) -o $@ $^ $(PETSC_TEST_LIB) 15449da0fa4SScott Kruger 15523462f55SSatish Balay$(TESTDIR)/%f90 : $(TESTDIR)/%f90.o $$^ $(libpetscall) 15620844ca6SSatish Balay $(call quiet,FLINKER) -o $@ $^ $(PETSC_TEST_LIB) 15749da0fa4SScott Kruger 15823462f55SSatish Balay$(TESTDIR)/% : $(TESTDIR)/%.o $$^ $(libpetscall) 15920844ca6SSatish Balay $(call quiet,CLINKER) -o $@ $^ $(PETSC_TEST_LIB) 16049da0fa4SScott Kruger 16149da0fa4SScott Kruger# Fortran source files need petsc*.mod, which isn't explicitly managed in the makefile. 16249da0fa4SScott Kruger$(foreach pkg, $(pkgs), $(call concattestlang,$(pkg),F F90)) : $(libpetscall) 16349da0fa4SScott Kruger 16449da0fa4SScott Kruger# Testing convenience targets 165c173c275SScott Kruger.PHONY: test pre-clean 166c173c275SScott Kruger 16749da0fa4SScott Krugertest: pre-clean report_tests 168c173c275SScott Kruger 16949da0fa4SScott Krugerpre-clean: 17049da0fa4SScott Kruger @$(RM) -r $(TESTDIR)/counts $(TESTLOGFILE) 17149da0fa4SScott Kruger @touch $(TESTLOGFILE) 17249da0fa4SScott Kruger 17349da0fa4SScott Kruger.PHONY: $(foreach pkg, $(pkgs), test-$(pkg) $(foreach lang, $(testlangs), test-$(pkg).$(lang) test-rm-$(pkg).$(lang))) 17449da0fa4SScott Krugertestpkgs := $(foreach pkg, $(pkgs), test-$(pkg)) 17549da0fa4SScott Kruger# Targets to run tests in test-$pkg.$lang and delete the executables, language by language 17649da0fa4SScott Kruger$(testpkgs) : test-% : $(foreach lang, $(testlangs), test-rm-%.$(lang)) 17749da0fa4SScott Kruger# List of raw test run targets 17849da0fa4SScott Krugeralltesttargets := $(foreach tp, $(testpkgs), $(foreach lang, $(testlangs), $($(tp).$(lang)))) 17949da0fa4SScott Kruger 18049da0fa4SScott Kruger# Run targets 18149da0fa4SScott Kruger$(alltesttargets) : % : $(TESTDIR)/counts/%.counts 18249da0fa4SScott Kruger.PHONY: $(alltesttargets) 18349da0fa4SScott Kruger 18449da0fa4SScott Kruger$(TESTDIR)/counts/%.counts : 18549da0fa4SScott Kruger $(quiettest) $< $(TESTFLAGS) 18649da0fa4SScott Kruger 18749da0fa4SScott Kruger# Targets to run tests and remove executables, by package-lang pairs. 18849da0fa4SScott Kruger# Run the tests in each batch using recursive invocation of make because 18949da0fa4SScott Kruger# we need all of them to complete before removing the executables. Make 19049da0fa4SScott Kruger# doesn't guarantee an exploration order for the graph. Only recursive 19149da0fa4SScott Kruger# if there is something to be done. 19249da0fa4SScott Krugeralltest-rm := $(foreach pkg, $(pkgs), $(foreach lang, $(testlangs), test-rm-$(pkg).$(lang))) 19349da0fa4SScott Kruger$(alltest-rm) : test-rm-% : test-% 19449da0fa4SScott Krugerifneq ($(NO_RM),1) 19549da0fa4SScott Kruger $(call quiet,RM) $(addprefix $(TESTDIR)/,$(basename $($(@:test-rm-%=testsrcs-%)))) 19649da0fa4SScott Krugerendif 19749da0fa4SScott Kruger 19849da0fa4SScott Kruger# Remove intermediate .o files 19949da0fa4SScott Kruger# This only removes the files at the end which is insufficient 20049da0fa4SScott Kruger#.INTERMEDIATE: $(testsrcs.o:%.o=%) 20149da0fa4SScott Kruger 20249da0fa4SScott Kruger# all sources should get recompiled when petscvariables changes (i.e when configure is rerun or when petscvariables is manually edited.) 20349da0fa4SScott Kruger$(testsrcs.o) : $(petscvariables) 20449da0fa4SScott Kruger 20549da0fa4SScott Kruger%/.DIR : 20649da0fa4SScott Kruger @mkdir -p $(@D) 20749da0fa4SScott Kruger @touch $@ 20849da0fa4SScott Kruger 20949da0fa4SScott Kruger.PRECIOUS: %/.DIR 21049da0fa4SScott Kruger 21149da0fa4SScott Kruger.SUFFIXES: # Clear .SUFFIXES because we don't use implicit rules 21249da0fa4SScott Kruger.DELETE_ON_ERROR: # Delete likely-corrupt target file if rule fails 21349da0fa4SScott Kruger 21449da0fa4SScott Kruger.PHONY: clean cleantest all print 21549da0fa4SScott Kruger 21649da0fa4SScott Krugercleantest: 21749da0fa4SScott Kruger ${RM} -r $(TESTDIR) $(generatedtest) 21849da0fa4SScott Kruger 21949da0fa4SScott Krugerclean: cleantest 22049da0fa4SScott Kruger 22149da0fa4SScott Kruger# make print VAR=the-variable 22249da0fa4SScott Krugerprint: 22349da0fa4SScott Kruger @echo $($(VAR)) 22449da0fa4SScott Kruger 22549da0fa4SScott Krugeralltest.d := $(testsrcs.o:%.o=%.d) 22649da0fa4SScott Kruger# Tell make that alltest.d are all up to date. Without this, the include 22749da0fa4SScott Kruger# below has quadratic complexity, taking more than one second for a 22849da0fa4SScott Kruger# do-nothing build of PETSc (much worse for larger projects) 22949da0fa4SScott Kruger$(alltest.d) : ; 23049da0fa4SScott Kruger 23149da0fa4SScott Kruger-include $(alltest.d) 23249da0fa4SScott Kruger 23349da0fa4SScott Kruger# Tests can be generated by searching 23449da0fa4SScott Kruger# Percent is a wildcard (only one allowed): 23549da0fa4SScott Kruger# make -f gmakefile test search=sys%ex2 23649da0fa4SScott Kruger# To match internal substrings (matches *ex2*): 23749da0fa4SScott Kruger# make -f gmakefile test searchin=ex2 23849da0fa4SScott Kruger# Search and searchin can be combined: 23949da0fa4SScott Kruger# make -f gmakefile test search='sys%' searchin=ex2 24049da0fa4SScott Kruger# For args: 24149da0fa4SScott Kruger# make -f gmakefile test argsearch=cuda 24249da0fa4SScott Kruger# For general glob-style searching using python: 24349da0fa4SScott Kruger# NOTE: uses shell which is possibly slower and is possibly more brittle 24449da0fa4SScott Kruger# make -f gmakefile test globsearch='sys*ex2*' 24549da0fa4SScott Krugerifdef search 24649da0fa4SScott Kruger TESTTARGETS := $(filter $(search),$(alltesttargets)) 24749da0fa4SScott Kruger ifdef searchin 24849da0fa4SScott Kruger TESTTARGETS2 := $(foreach v,$(TESTTARGETS),$(if $(findstring $(searchin),$(v)),$(v))) 24949da0fa4SScott Kruger TESTTARGETS := $(TESTTARGETS2) 25049da0fa4SScott Kruger endif 25149da0fa4SScott Krugerelse ifdef searchin 25249da0fa4SScott Kruger TESTTARGETS := $(foreach v,$(alltesttargets),$(if $(findstring $(searchin),$(v)),$(v))) 25349da0fa4SScott Krugerelse ifdef argsearch 25449da0fa4SScott Kruger TESTTARGETS := $(foreach v,$(alltesttargets),$(if $(findstring $(argsearch),$($(v)_ARGS)),$(v))) 25549da0fa4SScott Krugerelse ifdef globsearch 25649da0fa4SScott Kruger TESTTARGETS := $(shell $(PYTHON) -c"import sys,fnmatch; print ' '.join(fnmatch.filter(sys.argv[2].split(),sys.argv[1]))" '$(globsearch)' '$(alltesttargets)') 25749da0fa4SScott Krugerelse # No filter - run them all, but delete the executables as we go 25849da0fa4SScott Kruger TESTTARGETS := $(testpkgs) 25949da0fa4SScott Krugerendif 26049da0fa4SScott Kruger 26149da0fa4SScott Kruger.PHONY: report_tests print-test 26249da0fa4SScott Kruger 26349da0fa4SScott Krugerprint-test: 26449da0fa4SScott Kruger -@echo $(TESTTARGETS) 26549da0fa4SScott Kruger 26649da0fa4SScott Krugerreport_tests: $(TESTTARGETS) 2673054ff8cSScott Kruger -@$(PYTHON) $(CONFIGDIR)/report_tests.py -m $(MAKE) -d $(PETSC_ARCH)/tests/counts 26849da0fa4SScott Kruger 26949da0fa4SScott Kruger# Do not how how to invoke test from makefile 27049da0fa4SScott KrugerHASGMAKEFILE := $(filter gmakefile,$(MAKEFILE_LIST)) 27149da0fa4SScott Krugerifeq ($(HASGMAKEFILE),gmakefile) 27249da0fa4SScott Krugerhelpdeps:=help-make help-targets 27349da0fa4SScott Krugermakefile="gmakefile" 27449da0fa4SScott Krugerelse 27549da0fa4SScott Krugerhelpdeps:=help-make help-targets help-test 27649da0fa4SScott Krugermakefile="gmakefile.test" 27749da0fa4SScott Krugerendif 27849da0fa4SScott Kruger 27949da0fa4SScott Krugerhelp: ${helpdeps} 28049da0fa4SScott Kruger -@echo "Above is from: ${helpdeps}" 28149da0fa4SScott Kruger 28249da0fa4SScott Krugerhelp-make: 28349da0fa4SScott Kruger -@echo 28449da0fa4SScott Kruger -@echo "Basic build usage:" 28549da0fa4SScott Kruger -@echo " make -f ${makefile} <options>" 28649da0fa4SScott Kruger -@echo 28749da0fa4SScott Kruger -@echo "Options:" 28849da0fa4SScott Kruger -@echo " V=0 Very quiet builds" 28949da0fa4SScott Kruger -@echo " V=1 Verbose builds" 29049da0fa4SScott Kruger -@echo 29149da0fa4SScott Kruger 29249da0fa4SScott Krugerhelp-targets: 29349da0fa4SScott Kruger -@echo "All makefile targets and their dependencies:" 29449da0fa4SScott Kruger -@grep ^[a-z] ${makefile} | grep : | grep -v = 29549da0fa4SScott Kruger -@echo 29649da0fa4SScott Kruger -@echo 29749da0fa4SScott Kruger 29849da0fa4SScott Krugerhelp-test: 29949da0fa4SScott Kruger -@echo "Basic test usage:" 30049da0fa4SScott Kruger -@echo " make -f ${makefile} test <options>" 30149da0fa4SScott Kruger -@echo 30249da0fa4SScott Kruger -@echo "Options:" 30349da0fa4SScott Kruger -@echo " NO_RM=1 Do not remove the executables after running" 304f50802fbSScott Kruger -@echo " REPLACE=1 Replace the output in PETSC_DIR source tree (-m to test scripts)" 305f50802fbSScott Kruger -@echo " ALT=1 Replace 'alt' output in PETSC_DIR source tree (-M to test scripts)" 30649da0fa4SScott Kruger -@echo " DIFF_NUMBERS=1 Diff the numbers in the output (-j to test scripts and petscdiff)" 30749da0fa4SScott Kruger -@echo " VALGRIND=1 Execute the tests using valgrind (-V to test scripts)" 308f50802fbSScott Kruger -@echo " TESTDIR='tests' Subdirectory where tests are run ($${PETSC_DIR}/$${PETSC_ARCH}/$${TESTDIR}" 30949da0fa4SScott Kruger -@echo " or $${PREFIX_DIR}/$${TESTDIR}" 31049da0fa4SScott Kruger -@echo " or $${PREFIX_DIR}/share/petsc/examples/$${TESTDIR})" 31149da0fa4SScott Kruger -@echo " OPTIONS='<args>' Override options to scripts (-a to test scripts)" 31249da0fa4SScott Kruger -@echo " EXTRA_OPTIONS='<args>' Add options to scripts (-e to test scripts)" 31349da0fa4SScott Kruger -@echo 31449da0fa4SScott Kruger -@echo "Tests can be generated by searching:" 31549da0fa4SScott Kruger -@echo " Percent is a wildcard (only one allowed):" 31649da0fa4SScott Kruger -@echo " make -f ${makefile} test search=sys%ex2" 31749da0fa4SScott Kruger -@echo 31849da0fa4SScott Kruger -@echo " To match internal substrings (matches *ex2*):" 31949da0fa4SScott Kruger -@echo " make -f ${makefile} test searchin=ex2" 32049da0fa4SScott Kruger -@echo 32149da0fa4SScott Kruger -@echo " Search and searchin can be combined:" 32249da0fa4SScott Kruger -@echo " make -f ${makefile} test search='sys%' searchin=ex2" 32349da0fa4SScott Kruger -@echo 32449da0fa4SScott Kruger -@echo " To match patterns in the arguments:" 32549da0fa4SScott Kruger -@echo " make -f ${makefile} test argsearch=cuda" 32649da0fa4SScott Kruger -@echo 32749da0fa4SScott Kruger -@echo " For general glob-style searching using python:" 32849da0fa4SScott Kruger -@echo " NOTE: uses shell which is possibly slower and more brittle" 32949da0fa4SScott Kruger -@echo " make -f ${makefile} test globsearch='sys*ex2*'" 33049da0fa4SScott Kruger -@echo 33149da0fa4SScott Kruger -@echo " To see which targets match a given pattern (useful for doing a specific target):" 33249da0fa4SScott Kruger -@echo " make -f ${makefile} print-test search=sys%" 33349da0fa4SScott Kruger -@echo " which is equivalent to:" 33449da0fa4SScott Kruger -@echo " make -f ${makefile} print VAR=TESTTARGETS search='sys%'" 33549da0fa4SScott Kruger -@echo 33649da0fa4SScott Kruger -@echo " To build an executable, give full path to location:" 33749da0fa4SScott Kruger -@echo ' make -f ${makefile} $${PETSC_ARCH}/tests/src/sys/examples/tests/ex1' 33849da0fa4SScott Kruger -@echo " or make the test with NO_RM=1" 33949da0fa4SScott Kruger -@echo 340