149da0fa4SScott Kruger# -*- mode: makefile-gmake -*- 2fca490e6SSatish Balay-include petscdir.mk 349da0fa4SScott Kruger 437ed16bcSStefano ZampiniCONFIGDIR := $(PETSC_DIR)/config 549da0fa4SScott Kruger 6fc46264cSScott Kruger# TESTSRCDIR is always relative to gmakefile.test 7fc46264cSScott Kruger# This must be before includes 85b5a9be8SJed Brownmkfile_path := $(abspath $(lastword $(MAKEFILE_LIST))) 95b5a9be8SJed BrownTESTSRCDIR := $(dir $(mkfile_path))src 10fc46264cSScott Kruger 110e03b746SBarry Smith-include $(PETSC_DIR)/$(PETSC_ARCH)/lib/petsc/conf/petscvariables 120e03b746SBarry Smith-include $(PETSC_DIR)/lib/petsc/conf/variables 1349da0fa4SScott Kruger 148e69c5ecSJed BrownTESTDIR ?= ./$(PETSC_ARCH)/tests 154ff3c6a1SScott KrugerMODDIR := $(PETSC_DIR)/$(PETSC_ARCH)/include 16e73aa2c6SSatish BalayTESTLOGTAPFILE ?= $(TESTDIR)/test_$(PETSC_ARCH)_tap.log 17e73aa2c6SSatish BalayTESTLOGERRFILE ?= $(TESTDIR)/test_$(PETSC_ARCH)_err.log 1894666443SJed BrownEXAMPLESDIR := $(TESTSRCDIR) 1949da0fa4SScott Kruger 2049da0fa4SScott Krugerpkgs := sys vec mat dm ksp snes ts tao 2149da0fa4SScott Kruger 224ff3c6a1SScott Krugerpetscconf := $(PETSC_DIR)/$(PETSC_ARCH)/include/petscconf.h 234ff3c6a1SScott Krugerpetscvariables := $(PETSC_DIR)/$(PETSC_ARCH)/lib/petsc/conf/petscvariables 248e69c5ecSJed Browngeneratedtest := $(TESTDIR)/testfiles 2549da0fa4SScott Kruger 2649da0fa4SScott Kruger.SECONDEXPANSION: # to expand $$(@D)/.DIR 2749da0fa4SScott Kruger 2849da0fa4SScott KrugerTESTFLAGS := # Initialize as simple variable 2949da0fa4SScott Kruger 3049da0fa4SScott Kruger#workarround old cygwin versions 3149da0fa4SScott Krugerifeq ($(PETSC_CYGWIN_BROKEN_PIPE),1) 3249da0fa4SScott Krugerifeq ($(shell basename $(AR)),ar) 3349da0fa4SScott Kruger V ?=1 3449da0fa4SScott Krugerendif 3549da0fa4SScott Krugerendif 3649da0fa4SScott KrugerV ?= $(if $(findstring s,$(MAKEFLAGS)),0) 3749da0fa4SScott Krugerifeq ($(V),) # Default 3849da0fa4SScott Kruger quiet_HELP := "Use \"$(MAKE) V=1\" to see verbose compile lines, \"$(MAKE) V=0\" to suppress.\n" 3949da0fa4SScott Kruger quiet = @printf $(quiet_HELP)$(eval quiet_HELP:=)" %10s %s\n" "$1$2" "$@"; $($1) 4049da0fa4SScott Kruger quiettest = @printf " %10s %s\n" "TEST" "$(@:$(TESTDIR)/counts/%.counts=%)"; 4149da0fa4SScott Krugerelse ifeq ($(V),0) # Suppress entire command 4249da0fa4SScott Kruger quiet = @$($1) 4349da0fa4SScott Kruger quiettest = @ 445e361860SScott Kruger TESTFLAGS += -o err_only 4549da0fa4SScott Krugerelse # Show the full command line 4649da0fa4SScott Kruger quiet = $($1) 4749da0fa4SScott Kruger quiettest = 4849da0fa4SScott Kruger TESTFLAGS += -v 4949da0fa4SScott Krugerendif 5049da0fa4SScott Kruger 5149da0fa4SScott Krugerifeq ($(FORCE),1) 5249da0fa4SScott Kruger TESTFLAGS += -f # force test execution 5349da0fa4SScott Krugerendif 5449da0fa4SScott Krugerifeq ($(VALGRIND),1) 5549da0fa4SScott Kruger TESTFLAGS += -V # Add valgrind to the flags 5649da0fa4SScott Krugerendif 5749da0fa4SScott Krugerifeq ($(REPLACE),1) 5849da0fa4SScott Kruger TESTFLAGS += -m # Replace results by passing -m to petscdiff 5949da0fa4SScott Krugerendif 605e361860SScott Krugerifeq ($(OUTPUT),1) 615e361860SScott Kruger TESTFLAGS += -o 'err_only' # Show only the errors on stdout 625e361860SScott Krugerendif 63f50802fbSScott Krugerifeq ($(ALT),1) 64f50802fbSScott Kruger TESTFLAGS += -M # Replace alt files by passing -M to petscdiff 65f50802fbSScott Krugerendif 66e6bdf5b1SSatish BalayPRINTONLY ?= 0 67a6f3f80dSScott Krugerifeq ($(PRINTONLY),1) 68a6f3f80dSScott Kruger TESTFLAGS += -p # Pass -p to petscdiff to print only command 69a6f3f80dSScott Krugerendif 7049da0fa4SScott Krugerifeq ($(DIFF_NUMBERS),1) 7149da0fa4SScott Kruger TESTFLAGS += -j # Pass -j to petscdiff to diff the actual numbers 7249da0fa4SScott Krugerendif 7349da0fa4SScott Krugerifdef OPTIONS 7449da0fa4SScott Kruger TESTFLAGS += -a '$(OPTIONS)' # override arguments 7549da0fa4SScott Krugerendif 7649da0fa4SScott Krugerifdef EXTRA_OPTIONS 7749da0fa4SScott Kruger TESTFLAGS += -e '$(EXTRA_OPTIONS)' # add extra arguments 7849da0fa4SScott Krugerendif 7949da0fa4SScott Krugerifdef NP 8049da0fa4SScott Kruger TESTFLAGS += -n $(NP) # set number of processes 8149da0fa4SScott Krugerendif 8249da0fa4SScott Kruger# Override the default timeout that may be found at the top of config/petsc_harness.sh 8349da0fa4SScott Kruger# This must be an integer. It is given in seconds. 8449da0fa4SScott Krugerifdef TIMEOUT 8549da0fa4SScott Kruger TESTFLAGS += -t $(TIMEOUT) # Override the default timeout 8649da0fa4SScott Krugerendif 8749da0fa4SScott Kruger 88fc46264cSScott Kruger$(generatedtest) : $(petscconf) $(petscvariables) $(CONFIGDIR)/gmakegentest.py $(TESTDIR)/.DIR | $$(@D)/.DIR 898e69c5ecSJed Brown $(PYTHON) $(CONFIGDIR)/gmakegentest.py --petsc-dir=$(PETSC_DIR) --petsc-arch=$(PETSC_ARCH) --testdir=$(TESTDIR) 9049da0fa4SScott Kruger 91fca490e6SSatish Balayifneq ($(filter-out clean check,$(MAKECMDGOALS:clean%=clean)),) 92336d78f1SSatish Balayinclude $(generatedtest) 93535b694aSJed Brownendif 9449da0fa4SScott Kruger 9549da0fa4SScott Krugerifeq ($(PETSC_LANGUAGE),CXXONLY) 9649da0fa4SScott Kruger cc_name := CXX 9749da0fa4SScott Krugerelse 9849da0fa4SScott Kruger cc_name := CC 9949da0fa4SScott Krugerendif 10049da0fa4SScott Kruger 1010b119762SSatish BalayPETSC_COMPILE.c = $(call quiet,$(cc_name)) -c $(PCC_FLAGS) $(PFLAGS) $(CCPPFLAGS) $(C_DEPFLAGS) 1020b119762SSatish BalayPETSC_COMPILE.cxx = $(call quiet,CXX) -c $(CXX_FLAGS) $(CXXFLAGS) $(CXXCPPFLAGS) $(CXX_DEPFLAGS) 10349da0fa4SScott KrugerPETSC_COMPILE.cu = $(call quiet,CUDAC) -c $(CUDAC_FLAGS) --compiler-options="$(PCC_FLAGS) $(CXXFLAGS) $(CCPPFLAGS)" 10449da0fa4SScott KrugerPETSC_GENDEPS.cu = $(call quiet,CUDAC,.dep) --generate-dependencies --output-directory=$(@D) $(CUDAC_FLAGS) --compiler-options="$(PCC_FLAGS) $(CXXFLAGS) $(CCPPFLAGS)" 10549da0fa4SScott KrugerPETSC_COMPILE.F = $(call quiet,FC) -c $(FC_FLAGS) $(FFLAGS) $(FCPPFLAGS) $(FC_DEPFLAGS) 10649da0fa4SScott Kruger 10749da0fa4SScott Krugertestlangs := c cu cxx F F90 108513d7a9cSJed Brown$(foreach lang, $(testlangs), $(eval \ 109513d7a9cSJed Brown testexe.$(lang) = $(foreach pkg, $(pkgs), $(testsrcs-$(pkg).$(lang):%.$(lang)=$(TESTDIR)/%)))) 11049da0fa4SScott Krugerconcattestlang = $(foreach lang, $(2), $(testsrcs-$(1).$(lang):%.$(lang)=$(TESTDIR)/%.o)) 11149da0fa4SScott Krugertestsrcs.o := $(foreach pkg, $(pkgs), $(call concattestlang,$(pkg),$(testlangs))) 112fc46264cSScott Krugertestsrcs-rel := $(foreach pkg, $(pkgs), $(foreach lang, $(testlangs), $(testsrcs-$(pkg).$(lang)))) 113fc46264cSScott Krugertestsrcs := $(foreach sfile, $(testsrcs-rel), $(TESTSRCDIR)/$(sfile)) 11449da0fa4SScott Kruger 115*06fe1a63SSatish Balay# workaround win32fe failure 116*06fe1a63SSatish Balayifneq (,$(findstring win32fe,$(call quiet,$(cc_name)))) 117*06fe1a63SSatish Balay$(TESTDIR)/ts/tutorials/multirate/ex6: | $(TESTDIR)/ts/tutorials/multirate/ex5 118*06fe1a63SSatish Balay$(TESTDIR)/ts/tutorials/multirate/ex8: | $(TESTDIR)/ts/tutorials/multirate/ex6 119*06fe1a63SSatish Balayendif 120*06fe1a63SSatish Balay 12149da0fa4SScott Kruger# Refresh testfiles when sources change, but don't balk if the source file is nonexistent (deleted) 12249da0fa4SScott Kruger$(generatedtest) : $(testsrcs) 12349da0fa4SScott Kruger$(testsrcs) : 12449da0fa4SScott Kruger 1254ff3c6a1SScott Kruger$(TESTDIR)/%.o : $(EXAMPLESDIR)/%.c | $$(@D)/.DIR 12649da0fa4SScott Kruger $(PETSC_COMPILE.c) $(abspath $<) -o $@ 12749da0fa4SScott Kruger 1284ff3c6a1SScott Kruger$(TESTDIR)/%.o : $(EXAMPLESDIR)/%.cxx | $$(@D)/.DIR 12949da0fa4SScott Kruger $(PETSC_COMPILE.cxx) $(abspath $<) -o $@ 13049da0fa4SScott Kruger 1314ff3c6a1SScott Kruger$(TESTDIR)/%.o : $(EXAMPLESDIR)/%.cu | $$(@D)/.DIR 13249da0fa4SScott Kruger $(PETSC_COMPILE.cu) $(abspath $<) -o $@ # Compile first so that if there is an error, it comes from a normal compile 13349da0fa4SScott Kruger @$(PETSC_GENDEPS.cu) $(abspath $<) -o $(@:%.o=%.d) # Generate the dependencies for later 13449da0fa4SScott Kruger 135a55d2495SJed Brown# Test modules go in the same directory as the target *.o 136a55d2495SJed BrownTESTMODDIR = $(@D) 13749da0fa4SScott KrugerFCMOD = cd 1384ff3c6a1SScott Kruger$(TESTDIR)/%.o : $(EXAMPLESDIR)/%.F | $$(@D)/.DIR 13949da0fa4SScott Krugerifeq ($(FC_MODULE_OUTPUT_FLAG),) 140a55d2495SJed Brown $(call quiet,FCMOD) $(TESTMODDIR) && $(FC) -c $(FC_FLAGS) $(FFLAGS) $(FCPPFLAGS) $(FC_DEPFLAGS) -I$(dir $<) $(abspath $<) -o $(abspath $@) 14149da0fa4SScott Krugerelse 142a55d2495SJed Brown $(PETSC_COMPILE.F) -I$(dir $<) $(abspath $<) -o $@ $(FC_MODULE_OUTPUT_FLAG)$(TESTMODDIR) $(FC_MODULE_FLAG)$(TESTMODDIR) 14349da0fa4SScott Krugerendif 1440266c241SJed Brown -@$(GFORTRAN_DEP_CLEANUP) 14549da0fa4SScott Kruger 1464ff3c6a1SScott Kruger$(TESTDIR)/%.o : $(EXAMPLESDIR)/%.F90 | $$(@D)/.DIR 14749da0fa4SScott Krugerifeq ($(FC_MODULE_OUTPUT_FLAG),) 148a55d2495SJed Brown $(call quiet,FCMOD) $(TESTMODDIR) && $(FC) -c $(FC_FLAGS) $(FFLAGS) $(FCPPFLAGS) $(FC_DEPFLAGS) -I$(dir $<) $(abspath $<) -o $(abspath $@) 14949da0fa4SScott Krugerelse 150a55d2495SJed Brown $(PETSC_COMPILE.F) -I$(dir $<) $(abspath $<) -o $@ $(FC_MODULE_OUTPUT_FLAG)$(TESTMODDIR) $(FC_MODULE_FLAG)$(TESTMODDIR) 15149da0fa4SScott Krugerendif 1520266c241SJed Brown -@$(GFORTRAN_DEP_CLEANUP) 1530266c241SJed Brown 154cf7d3547SScott Kruger# This is a hack to fix a broken gfortran. 1550266c241SJed Browndefine GFORTRAN_DEP_CLEANUP 1560266c241SJed Brown if test -e "$(@:%.o=%.d)" && head -1 "$(@:%.o=%.d)" | fgrep -q -v : ; then\ 1574f45eea9SScott Kruger echo "$(@): \\" > $(@:%.o=%.dtemp) ; \ 1580266c241SJed Brown tr '\n' '@' < $(@:%.o=%.d) | cut -d: -f2- | tr '@' '\n' >> $(@:%.o=%.dtemp) ; \ 1590266c241SJed Brown mv $(@:%.o=%.dtemp) $(@:%.o=%.d); \ 1604f45eea9SScott Kruger fi 1610266c241SJed Brownendef 16249da0fa4SScott Kruger 16320844ca6SSatish Balay# link line constructed differently for gmakefile vs gmakefile.test invocation 16420844ca6SSatish Balayifeq ($(libpetscall),) 16520844ca6SSatish BalayPETSC_TEST_LIB = $(PETSC_LIB) 16620844ca6SSatish Balayelse 16720844ca6SSatish BalayPETSC_TEST_LIB = $(C_SH_LIB_PATH) $(PETSC_EXTERNAL_LIB_BASIC) 16820844ca6SSatish Balayendif 16920844ca6SSatish Balay 170bde159b7SSatish Balay# manually list some some library dependencies to check for circular dependencies 171c4762a1bSJed Brown$(TESTDIR)/sys/tests/ex9: PETSC_TEST_LIB = $(PETSC_SYS_LIB) 172c4762a1bSJed Brown$(TESTDIR)/vec/vec/tests/ex1: PETSC_TEST_LIB = $(PETSC_VEC_LIB) 173c4762a1bSJed Brown$(TESTDIR)/mat/tests/ex1: PETSC_TEST_LIB = $(PETSC_MAT_LIB) 174c4762a1bSJed Brown$(TESTDIR)/dm/tests/ex1: PETSC_TEST_LIB = $(PETSC_DM_LIB) 175c4762a1bSJed Brown$(TESTDIR)/ksp/ksp/tests/ex1: PETSC_TEST_LIB = $(PETSC_KSP_LIB) 176c4762a1bSJed Brown$(TESTDIR)/snes/tests/ex1: PETSC_TEST_LIB = $(PETSC_SNES_LIB) 177c4762a1bSJed Brown$(TESTDIR)/ts/tests/ex2: PETSC_TEST_LIB = $(PETSC_TS_LIB) 178c4762a1bSJed Brown$(TESTDIR)/tao/tutorials/ex1: PETSC_TEST_LIB = $(PETSC_TAO_LIB) 179bde159b7SSatish Balay 18049da0fa4SScott Kruger# Test executables 181513d7a9cSJed Brown$(testexe.F) $(testexe.F90) : $(TESTDIR)/% : $(TESTDIR)/%.o $$^ $(libpetscall) 18220844ca6SSatish Balay $(call quiet,FLINKER) -o $@ $^ $(PETSC_TEST_LIB) 18349da0fa4SScott Kruger 184513d7a9cSJed Brown$(testexe.c) $(testexe.cu) : $(TESTDIR)/% : $(TESTDIR)/%.o $$^ $(libpetscall) 18520844ca6SSatish Balay $(call quiet,CLINKER) -o $@ $^ $(PETSC_TEST_LIB) 18649da0fa4SScott Kruger 187513d7a9cSJed Brown$(testexe.cxx) : $(TESTDIR)/% : $(TESTDIR)/%.o $$^ $(libpetscall) 1882f4326f3SSatish Balay $(call quiet,CXXLINKER) -o $@ $^ $(PETSC_TEST_LIB) 189513d7a9cSJed Brown 19049da0fa4SScott Kruger# Fortran source files need petsc*.mod, which isn't explicitly managed in the makefile. 19149da0fa4SScott Kruger$(foreach pkg, $(pkgs), $(call concattestlang,$(pkg),F F90)) : $(libpetscall) 19249da0fa4SScott Kruger 19349da0fa4SScott Kruger# Testing convenience targets 194c173c275SScott Kruger.PHONY: test pre-clean 195c173c275SScott Kruger 196ff7b3809SScott Krugertest: report_tests 197c173c275SScott Kruger 19849da0fa4SScott Krugerpre-clean: 1995e361860SScott Kruger @$(RM) -rf $(TESTDIR)/counts $(TESTLOGTAPFILE) $(TESTLOGERRFILE) 2005e361860SScott Kruger @touch $(TESTLOGTAPFILE) $(TESTLOGERRFILE) 20127d73d1fSBarry Smith @echo "Using MAKEFLAGS:" ${MAKEFLAGS} 20249da0fa4SScott Kruger 2034d9d3ee5SSatish Balaycheck-test-errors: 2045e361860SScott Kruger @grep '^not ok' $(TESTLOGTAPFILE) | grep -v 'Exceeded timeout' | tee $(TESTDIR)/allgtests-tap-err.log 2054d9d3ee5SSatish Balay @test ! -s $(TESTDIR)/allgtests-tap-err.log 2064d9d3ee5SSatish Balay 20749da0fa4SScott Kruger.PHONY: $(foreach pkg, $(pkgs), test-$(pkg) $(foreach lang, $(testlangs), test-$(pkg).$(lang) test-rm-$(pkg).$(lang))) 20849da0fa4SScott Krugertestpkgs := $(foreach pkg, $(pkgs), test-$(pkg)) 20949da0fa4SScott Kruger# Targets to run tests in test-$pkg.$lang and delete the executables, language by language 21049da0fa4SScott Kruger$(testpkgs) : test-% : $(foreach lang, $(testlangs), test-rm-%.$(lang)) 21149da0fa4SScott Kruger# List of raw test run targets 21249da0fa4SScott Krugeralltesttargets := $(foreach tp, $(testpkgs), $(foreach lang, $(testlangs), $($(tp).$(lang)))) 21349da0fa4SScott Kruger 21449da0fa4SScott Kruger# Run targets 21549da0fa4SScott Kruger$(alltesttargets) : % : $(TESTDIR)/counts/%.counts 21649da0fa4SScott Kruger.PHONY: $(alltesttargets) 21749da0fa4SScott Kruger 21849da0fa4SScott Kruger$(TESTDIR)/counts/%.counts : 21949da0fa4SScott Kruger $(quiettest) $< $(TESTFLAGS) 22049da0fa4SScott Kruger 22149da0fa4SScott Kruger# Targets to run tests and remove executables, by package-lang pairs. 22249da0fa4SScott Kruger# Run the tests in each batch using recursive invocation of make because 22349da0fa4SScott Kruger# we need all of them to complete before removing the executables. Make 22449da0fa4SScott Kruger# doesn't guarantee an exploration order for the graph. Only recursive 22549da0fa4SScott Kruger# if there is something to be done. 22649da0fa4SScott Krugeralltest-rm := $(foreach pkg, $(pkgs), $(foreach lang, $(testlangs), test-rm-$(pkg).$(lang))) 22749da0fa4SScott Kruger$(alltest-rm) : test-rm-% : test-% 22849da0fa4SScott Krugerifneq ($(NO_RM),1) 22949da0fa4SScott Kruger $(call quiet,RM) $(addprefix $(TESTDIR)/,$(basename $($(@:test-rm-%=testsrcs-%)))) 23049da0fa4SScott Krugerendif 23149da0fa4SScott Kruger 23249da0fa4SScott Kruger# Remove intermediate .o files 23349da0fa4SScott Kruger# This only removes the files at the end which is insufficient 23449da0fa4SScott Kruger#.INTERMEDIATE: $(testsrcs.o:%.o=%) 23549da0fa4SScott Kruger 23649da0fa4SScott Kruger# all sources should get recompiled when petscvariables changes (i.e when configure is rerun or when petscvariables is manually edited.) 23749da0fa4SScott Kruger$(testsrcs.o) : $(petscvariables) 23849da0fa4SScott Kruger 23949da0fa4SScott Kruger%/.DIR : 24049da0fa4SScott Kruger @mkdir -p $(@D) 24149da0fa4SScott Kruger @touch $@ 24249da0fa4SScott Kruger 24349da0fa4SScott Kruger.PRECIOUS: %/.DIR 24449da0fa4SScott Kruger 24549da0fa4SScott Kruger.SUFFIXES: # Clear .SUFFIXES because we don't use implicit rules 24649da0fa4SScott Kruger.DELETE_ON_ERROR: # Delete likely-corrupt target file if rule fails 24749da0fa4SScott Kruger 24837ed16bcSStefano Zampini.PHONY: clean cleantest all 24949da0fa4SScott Kruger 25049da0fa4SScott Krugercleantest: 25149da0fa4SScott Kruger ${RM} -r $(TESTDIR) $(generatedtest) 25249da0fa4SScott Kruger 25349da0fa4SScott Krugerclean: cleantest 25449da0fa4SScott Kruger 25549da0fa4SScott Krugeralltest.d := $(testsrcs.o:%.o=%.d) 25649da0fa4SScott Kruger# Tell make that alltest.d are all up to date. Without this, the include 25749da0fa4SScott Kruger# below has quadratic complexity, taking more than one second for a 25849da0fa4SScott Kruger# do-nothing build of PETSc (much worse for larger projects) 25949da0fa4SScott Kruger$(alltest.d) : ; 26049da0fa4SScott Kruger 26149da0fa4SScott Kruger-include $(alltest.d) 26249da0fa4SScott Kruger 26349da0fa4SScott Kruger# Tests can be generated by searching 26449da0fa4SScott Kruger# Percent is a wildcard (only one allowed): 26549da0fa4SScott Kruger# make -f gmakefile test search=sys%ex2 26649da0fa4SScott Kruger# To match internal substrings (matches *ex2*): 26749da0fa4SScott Kruger# make -f gmakefile test searchin=ex2 26849da0fa4SScott Kruger# Search and searchin can be combined: 26949da0fa4SScott Kruger# make -f gmakefile test search='sys%' searchin=ex2 27049da0fa4SScott Kruger# For args: 27149da0fa4SScott Kruger# make -f gmakefile test argsearch=cuda 27249da0fa4SScott Kruger# For general glob-style searching using python: 27349da0fa4SScott Kruger# NOTE: uses shell which is possibly slower and is possibly more brittle 27449da0fa4SScott Kruger# make -f gmakefile test globsearch='sys*ex2*' 27549da0fa4SScott Krugerifdef search 27649da0fa4SScott Kruger TESTTARGETS := $(filter $(search),$(alltesttargets)) 27749da0fa4SScott Kruger ifdef searchin 27849da0fa4SScott Kruger TESTTARGETS2 := $(foreach v,$(TESTTARGETS),$(if $(findstring $(searchin),$(v)),$(v))) 27949da0fa4SScott Kruger TESTTARGETS := $(TESTTARGETS2) 28049da0fa4SScott Kruger endif 28149da0fa4SScott Krugerelse ifdef searchin 28249da0fa4SScott Kruger TESTTARGETS := $(foreach v,$(alltesttargets),$(if $(findstring $(searchin),$(v)),$(v))) 28349da0fa4SScott Krugerelse ifdef argsearch 28449da0fa4SScott Kruger TESTTARGETS := $(foreach v,$(alltesttargets),$(if $(findstring $(argsearch),$($(v)_ARGS)),$(v))) 28549da0fa4SScott Krugerelse ifdef globsearch 2865b6dee57SScott Kruger TESTTARGETS := $(shell $(PYTHON) config/query_tests.py 'name' '$(globsearch)') 287feeaa4f6SScott Krugerelse ifdef test-fail 288feeaa4f6SScott Kruger TESTTARGETS := $(shell $(PETSC_ARCH)/tests/echofailures.sh) 2896f5e9bd5SScott Krugerelse ifdef query 2906f5e9bd5SScott Kruger TESTTARGETS := $(shell $(PYTHON) config/query_tests.py '$(query)' '$(queryval)') 29149da0fa4SScott Krugerelse # No filter - run them all, but delete the executables as we go 29249da0fa4SScott Kruger TESTTARGETS := $(testpkgs) 29349da0fa4SScott Krugerendif 29449da0fa4SScott Kruger 29549da0fa4SScott Kruger.PHONY: report_tests print-test 29649da0fa4SScott Kruger 29749da0fa4SScott Krugerprint-test: 2985b6dee57SScott Kruger $(info $(TESTTARGETS)) 2995b6dee57SScott Kruger @true 30049da0fa4SScott Kruger 3016e5deea7SScott Krugershow-fail: 302b711b6a4SScott Kruger -@$(PYTHON) $(CONFIGDIR)/report_tests.py -d $(TESTDIR)/counts -f 303b711b6a4SScott Kruger 3046e5deea7SScott Kruger 3056e5deea7SScott Kruger 306c01c7e64SJed Brown# Don't start running tests until starttime has completed 307c01c7e64SJed Brown$(alltesttargets:%=$(TESTDIR)/counts/%.counts) : starttime 308c01c7e64SJed Brown 309c01c7e64SJed Brown# Ensure that libpetsc (if it is a prerequisite) has been built and clean the counts/logs before starting timer 310c01c7e64SJed Brownstarttime: pre-clean $(libpetscall) 31127d73d1fSBarry Smith @$(eval STARTTIME := $(shell date +%s)) 31227d73d1fSBarry Smith 31327d73d1fSBarry Smithreport_tests: starttime $(TESTTARGETS) 31432f4009dSScott Kruger @$(eval ENDTIME := $(shell date +%s)) 315a6f3f80dSScott Kruger -@if test ${PRINTONLY} -ne 1; then elapsed_time=$$(($(ENDTIME)- $(STARTTIME))) && \ 316a6f3f80dSScott Kruger $(PYTHON) $(CONFIGDIR)/report_tests.py -m $(MAKE) -d $(TESTDIR)/counts -t 5 -e $${elapsed_time};\ 317a6f3f80dSScott Kruger fi 31849da0fa4SScott Kruger 3195e361860SScott Krugercheck_output: 3205e361860SScott Kruger $(PYTHON) $(CONFIGDIR)/gmakegentest.py --petsc-dir=$(PETSC_DIR) --petsc-arch=$(PETSC_ARCH) --testdir=$(TESTDIR) --check-output 3215e361860SScott Kruger 32249da0fa4SScott Kruger# Do not how how to invoke test from makefile 32349da0fa4SScott KrugerHASGMAKEFILE := $(filter gmakefile,$(MAKEFILE_LIST)) 32449da0fa4SScott Krugerifeq ($(HASGMAKEFILE),gmakefile) 32549da0fa4SScott Krugerhelpdeps:=help-make help-targets 32649da0fa4SScott Krugermakefile="gmakefile" 327142b82d2SScott Krugerother_help="To see full test help: make -f gmakefile.test help" 32849da0fa4SScott Krugerelse 32949da0fa4SScott Krugerhelpdeps:=help-make help-targets help-test 33049da0fa4SScott Krugermakefile="gmakefile.test" 331142b82d2SScott Krugerother_help="" 33249da0fa4SScott Krugerendif 33349da0fa4SScott Kruger 33449da0fa4SScott Krugerhelp: ${helpdeps} 33549da0fa4SScott Kruger -@echo "Above is from: ${helpdeps}" 336142b82d2SScott Kruger -@echo "${other_help}" 33749da0fa4SScott Kruger 33849da0fa4SScott Krugerhelp-make: 33949da0fa4SScott Kruger -@echo 34049da0fa4SScott Kruger -@echo "Basic build usage:" 34149da0fa4SScott Kruger -@echo " make -f ${makefile} <options>" 34249da0fa4SScott Kruger -@echo 34349da0fa4SScott Kruger -@echo "Options:" 34449da0fa4SScott Kruger -@echo " V=0 Very quiet builds" 34549da0fa4SScott Kruger -@echo " V=1 Verbose builds" 34649da0fa4SScott Kruger -@echo 34749da0fa4SScott Kruger 34849da0fa4SScott Krugerhelp-targets: 34949da0fa4SScott Kruger -@echo "All makefile targets and their dependencies:" 35049da0fa4SScott Kruger -@grep ^[a-z] ${makefile} | grep : | grep -v = 35149da0fa4SScott Kruger -@echo 35249da0fa4SScott Kruger -@echo 35349da0fa4SScott Kruger 35449da0fa4SScott Krugerhelp-test: 35549da0fa4SScott Kruger -@echo "Basic test usage:" 35649da0fa4SScott Kruger -@echo " make -f ${makefile} test <options>" 35749da0fa4SScott Kruger -@echo 35849da0fa4SScott Kruger -@echo "Options:" 35949da0fa4SScott Kruger -@echo " NO_RM=1 Do not remove the executables after running" 360f50802fbSScott Kruger -@echo " REPLACE=1 Replace the output in PETSC_DIR source tree (-m to test scripts)" 3615e361860SScott Kruger -@echo " OUTPUT=1 Show only the errors on stdout" 362f50802fbSScott Kruger -@echo " ALT=1 Replace 'alt' output in PETSC_DIR source tree (-M to test scripts)" 36349da0fa4SScott Kruger -@echo " DIFF_NUMBERS=1 Diff the numbers in the output (-j to test scripts and petscdiff)" 36449da0fa4SScott Kruger -@echo " VALGRIND=1 Execute the tests using valgrind (-V to test scripts)" 365142b82d2SScott Kruger -@echo " NP=<num proc> Set a number of processors to pass to scripts." 366142b82d2SScott Kruger -@echo " FORCE=1 Force SKIP or TODO tests to run" 367a6f3f80dSScott Kruger -@echo " PRINTONLY=1 Print the command, but do not run. For loops print first command" 368142b82d2SScott Kruger -@echo " TIMEOUT=<time> Test timeout limit in seconds (default in config/petsc_harness.sh)" 369f50802fbSScott Kruger -@echo " TESTDIR='tests' Subdirectory where tests are run ($${PETSC_DIR}/$${PETSC_ARCH}/$${TESTDIR}" 37049da0fa4SScott Kruger -@echo " or $${PREFIX_DIR}/$${TESTDIR}" 37149da0fa4SScott Kruger -@echo " or $${PREFIX_DIR}/share/petsc/examples/$${TESTDIR})" 3724ff3c6a1SScott Kruger -@echo " TESTBASE='tests' Subdirectory where tests are run ($${PETSC_DIR}/$${PETSC_ARCH}/$${TESTDIR}" 37349da0fa4SScott Kruger -@echo " OPTIONS='<args>' Override options to scripts (-a to test scripts)" 37449da0fa4SScott Kruger -@echo " EXTRA_OPTIONS='<args>' Add options to scripts (-e to test scripts)" 37549da0fa4SScott Kruger -@echo 37649da0fa4SScott Kruger -@echo "Tests can be generated by searching:" 37749da0fa4SScott Kruger -@echo " Percent is a wildcard (only one allowed):" 37849da0fa4SScott Kruger -@echo " make -f ${makefile} test search=sys%ex2" 37949da0fa4SScott Kruger -@echo 38049da0fa4SScott Kruger -@echo " To match internal substrings (matches *ex2*):" 38149da0fa4SScott Kruger -@echo " make -f ${makefile} test searchin=ex2" 38249da0fa4SScott Kruger -@echo 38349da0fa4SScott Kruger -@echo " Search and searchin can be combined:" 38449da0fa4SScott Kruger -@echo " make -f ${makefile} test search='sys%' searchin=ex2" 38549da0fa4SScott Kruger -@echo 38649da0fa4SScott Kruger -@echo " To match patterns in the arguments:" 38749da0fa4SScott Kruger -@echo " make -f ${makefile} test argsearch=cuda" 38849da0fa4SScott Kruger -@echo 38949da0fa4SScott Kruger -@echo " For general glob-style searching using python:" 39049da0fa4SScott Kruger -@echo " NOTE: uses shell which is possibly slower and more brittle" 39149da0fa4SScott Kruger -@echo " make -f ${makefile} test globsearch='sys*ex2*'" 39249da0fa4SScott Kruger -@echo 393feeaa4f6SScott Kruger -@echo " To re-run the last tests which failed:" 394feeaa4f6SScott Kruger -@echo " make -f ${makefile} test test-fail='1'" 395feeaa4f6SScott Kruger -@echo 3966f5e9bd5SScott Kruger -@echo " To search for fields from the original test definitions:" 3976f5e9bd5SScott Kruger -@echo " make -f ${makefile} test query='requires' queryval='*MPI_PROCESS_SHARED_MEMORY*'" 3986f5e9bd5SScott Kruger -@echo 39949da0fa4SScott Kruger -@echo " To see which targets match a given pattern (useful for doing a specific target):" 40049da0fa4SScott Kruger -@echo " make -f ${makefile} print-test search=sys%" 40149da0fa4SScott Kruger -@echo " which is equivalent to:" 40249da0fa4SScott Kruger -@echo " make -f ${makefile} print VAR=TESTTARGETS search='sys%'" 40349da0fa4SScott Kruger -@echo 40449da0fa4SScott Kruger -@echo " To build an executable, give full path to location:" 405c4762a1bSJed Brown -@echo ' make -f ${makefile} $${PETSC_ARCH}/tests/sys/tests/ex1' 40649da0fa4SScott Kruger -@echo " or make the test with NO_RM=1" 40749da0fa4SScott Kruger -@echo 408