1*49da0fa4SScott Kruger# -*- mode: makefile-gmake -*- 2*49da0fa4SScott Kruger 3*49da0fa4SScott KrugerCONFIGDIR := config 4*49da0fa4SScott Kruger 5*49da0fa4SScott Kruger# If $(PETSC_ARCH) is empty, this defines it and PETSC_DIR 6*49da0fa4SScott Krugerinclude $(PETSC_ARCH)/lib/petsc/conf/petscvariables 7*49da0fa4SScott Krugerinclude ./lib/petsc/conf/variables 8*49da0fa4SScott Kruger 9*49da0fa4SScott Krugerifeq ($(TESTDIR),) # Default 10*49da0fa4SScott KrugerTESTDIR := $(PETSC_ARCH)/tests 11*49da0fa4SScott Krugergmakegentest_opts= 12*49da0fa4SScott Krugerelse 13*49da0fa4SScott Krugergmakegentest_opts="-t $(TESTDIR)" 14*49da0fa4SScott KrugerTESTDIR := $(TESTDIR) 15*49da0fa4SScott Krugerendif 16*49da0fa4SScott KrugerMODDIR := $(PETSC_ARCH)/include 17*49da0fa4SScott KrugerTESTLOGFILE = $(TESTDIR)/examples-$(PETSC_ARCH).log 18*49da0fa4SScott Kruger 19*49da0fa4SScott Krugerpkgs := sys vec mat dm ksp snes ts tao 20*49da0fa4SScott Kruger 21*49da0fa4SScott Krugerpetscconf := $(PETSC_ARCH)/include/petscconf.h 22*49da0fa4SScott Krugerpetscvariables := $(PETSC_ARCH)/lib/petsc/conf/petscvariables 23*49da0fa4SScott Krugergeneratedtest := $(PETSC_ARCH)/lib/petsc/conf/testfiles 24*49da0fa4SScott Kruger 25*49da0fa4SScott Kruger.SECONDEXPANSION: # to expand $$(@D)/.DIR 26*49da0fa4SScott Kruger 27*49da0fa4SScott KrugerTESTFLAGS := # Initialize as simple variable 28*49da0fa4SScott Kruger 29*49da0fa4SScott Kruger#workarround old cygwin versions 30*49da0fa4SScott Krugerifeq ($(PETSC_CYGWIN_BROKEN_PIPE),1) 31*49da0fa4SScott Krugerifeq ($(shell basename $(AR)),ar) 32*49da0fa4SScott Kruger V ?=1 33*49da0fa4SScott Krugerendif 34*49da0fa4SScott Krugerendif 35*49da0fa4SScott KrugerV ?= $(if $(findstring s,$(MAKEFLAGS)),0) 36*49da0fa4SScott Krugerifeq ($(V),) # Default 37*49da0fa4SScott Kruger quiet_HELP := "Use \"$(MAKE) V=1\" to see verbose compile lines, \"$(MAKE) V=0\" to suppress.\n" 38*49da0fa4SScott Kruger quiet = @printf $(quiet_HELP)$(eval quiet_HELP:=)" %10s %s\n" "$1$2" "$@"; $($1) 39*49da0fa4SScott Kruger quiettest = @printf " %10s %s\n" "TEST" "$(@:$(TESTDIR)/counts/%.counts=%)"; 40*49da0fa4SScott Krugerelse ifeq ($(V),0) # Suppress entire command 41*49da0fa4SScott Kruger quiet = @$($1) 42*49da0fa4SScott Kruger quiettest = @ 43*49da0fa4SScott Krugerelse # Show the full command line 44*49da0fa4SScott Kruger quiet = $($1) 45*49da0fa4SScott Kruger quiettest = 46*49da0fa4SScott Kruger TESTFLAGS += -v 47*49da0fa4SScott Krugerendif 48*49da0fa4SScott Kruger 49*49da0fa4SScott Krugerifeq ($(FORCE),1) 50*49da0fa4SScott Kruger TESTFLAGS += -f # force test execution 51*49da0fa4SScott Krugerendif 52*49da0fa4SScott Krugerifeq ($(VALGRIND),1) 53*49da0fa4SScott Kruger TESTFLAGS += -V # Add valgrind to the flags 54*49da0fa4SScott Krugerendif 55*49da0fa4SScott Krugerifeq ($(REPLACE),1) 56*49da0fa4SScott Kruger TESTFLAGS += -m # Replace results by passing -m to petscdiff 57*49da0fa4SScott Krugerendif 58*49da0fa4SScott Krugerifeq ($(DIFF_NUMBERS),1) 59*49da0fa4SScott Kruger TESTFLAGS += -j # Pass -j to petscdiff to diff the actual numbers 60*49da0fa4SScott Krugerendif 61*49da0fa4SScott Krugerifdef OPTIONS 62*49da0fa4SScott Kruger TESTFLAGS += -a '$(OPTIONS)' # override arguments 63*49da0fa4SScott Krugerendif 64*49da0fa4SScott Krugerifdef EXTRA_OPTIONS 65*49da0fa4SScott Kruger TESTFLAGS += -e '$(EXTRA_OPTIONS)' # add extra arguments 66*49da0fa4SScott Krugerendif 67*49da0fa4SScott Krugerifdef NP 68*49da0fa4SScott Kruger TESTFLAGS += -n $(NP) # set number of processes 69*49da0fa4SScott Krugerendif 70*49da0fa4SScott Kruger# Override the default timeout that may be found at the top of config/petsc_harness.sh 71*49da0fa4SScott Kruger# This must be an integer. It is given in seconds. 72*49da0fa4SScott Krugerifdef TIMEOUT 73*49da0fa4SScott Kruger TESTFLAGS += -t $(TIMEOUT) # Override the default timeout 74*49da0fa4SScott Krugerendif 75*49da0fa4SScott Kruger 76*49da0fa4SScott Kruger 77*49da0fa4SScott Kruger 78*49da0fa4SScott Kruger$(generatedtest) : $(petscconf) $(petscvariables) $(CONFIGDIR)/gmakegentest.py | $$(@D)/.DIR 79*49da0fa4SScott Kruger $(PYTHON) $(CONFIGDIR)/gmakegentest.py --petsc-arch=$(PETSC_ARCH) $(gmakegentest_opts) 80*49da0fa4SScott Kruger 81*49da0fa4SScott Kruger-include $(generatedtest) 82*49da0fa4SScott Kruger 83*49da0fa4SScott Krugerifeq ($(PETSC_LANGUAGE),CXXONLY) 84*49da0fa4SScott Kruger cc_name := CXX 85*49da0fa4SScott Krugerelse 86*49da0fa4SScott Kruger cc_name := CC 87*49da0fa4SScott Krugerendif 88*49da0fa4SScott Kruger 89*49da0fa4SScott KrugerPETSC_COMPILE.c = $(call quiet,$(cc_name)) -c $(PCC_FLAGS) $(CFLAGS) $(CCPPFLAGS) $(C_DEPFLAGS) 90*49da0fa4SScott KrugerPETSC_COMPILE.cxx = $(call quiet,CXX) -c $(CXX_FLAGS) $(CFLAGS) $(CCPPFLAGS) $(CXX_DEPFLAGS) 91*49da0fa4SScott KrugerPETSC_COMPILE.cu = $(call quiet,CUDAC) -c $(CUDAC_FLAGS) --compiler-options="$(PCC_FLAGS) $(CXXFLAGS) $(CCPPFLAGS)" 92*49da0fa4SScott KrugerPETSC_GENDEPS.cu = $(call quiet,CUDAC,.dep) --generate-dependencies --output-directory=$(@D) $(CUDAC_FLAGS) --compiler-options="$(PCC_FLAGS) $(CXXFLAGS) $(CCPPFLAGS)" 93*49da0fa4SScott KrugerPETSC_COMPILE.F = $(call quiet,FC) -c $(FC_FLAGS) $(FFLAGS) $(FCPPFLAGS) $(FC_DEPFLAGS) 94*49da0fa4SScott Kruger 95*49da0fa4SScott Krugertestlangs := c cu cxx F F90 96*49da0fa4SScott Krugerconcattestlang = $(foreach lang, $(2), $(testsrcs-$(1).$(lang):%.$(lang)=$(TESTDIR)/%.o)) 97*49da0fa4SScott Krugertestsrcs.o := $(foreach pkg, $(pkgs), $(call concattestlang,$(pkg),$(testlangs))) 98*49da0fa4SScott Krugertestsrcs := $(foreach pkg, $(pkgs), $(foreach lang, $(testlangs), $(testsrcs-$(pkg).$(lang)))) 99*49da0fa4SScott Kruger 100*49da0fa4SScott Kruger# Refresh testfiles when sources change, but don't balk if the source file is nonexistent (deleted) 101*49da0fa4SScott Kruger$(generatedtest) : $(testsrcs) 102*49da0fa4SScott Kruger$(testsrcs) : 103*49da0fa4SScott Kruger 104*49da0fa4SScott Kruger$(TESTDIR)/%.o : %.c | $$(@D)/.DIR 105*49da0fa4SScott Kruger $(PETSC_COMPILE.c) $(abspath $<) -o $@ 106*49da0fa4SScott Kruger 107*49da0fa4SScott Kruger$(TESTDIR)/%.o : %.cxx | $$(@D)/.DIR 108*49da0fa4SScott Kruger $(PETSC_COMPILE.cxx) $(abspath $<) -o $@ 109*49da0fa4SScott Kruger 110*49da0fa4SScott Kruger$(TESTDIR)/%.o : %.cu | $$(@D)/.DIR 111*49da0fa4SScott Kruger $(PETSC_COMPILE.cu) $(abspath $<) -o $@ # Compile first so that if there is an error, it comes from a normal compile 112*49da0fa4SScott Kruger @$(PETSC_GENDEPS.cu) $(abspath $<) -o $(@:%.o=%.d) # Generate the dependencies for later 113*49da0fa4SScott Kruger 114*49da0fa4SScott Kruger# Test modules go in a different directory 115*49da0fa4SScott Kruger$(TESTDIR)/%.o : MODDIR = $(@D) 116*49da0fa4SScott KrugerFCMOD = cd 117*49da0fa4SScott Kruger$(TESTDIR)/%.o : %.F | $$(@D)/.DIR 118*49da0fa4SScott Krugerifeq ($(FC_MODULE_OUTPUT_FLAG),) 119*49da0fa4SScott Kruger $(call quiet,FCMOD) $(MODDIR) && $(FC) -c $(FC_FLAGS) $(FFLAGS) $(FCPPFLAGS) $(FC_DEPFLAGS) $(abspath $<) -o $(abspath $@) 120*49da0fa4SScott Krugerelse 121*49da0fa4SScott Kruger $(PETSC_COMPILE.F) $(abspath $<) -o $@ $(FC_MODULE_OUTPUT_FLAG)$(MODDIR) 122*49da0fa4SScott Krugerendif 123*49da0fa4SScott Kruger 124*49da0fa4SScott Kruger$(TESTDIR)/%.o : %.F90 | $$(@D)/.DIR 125*49da0fa4SScott Krugerifeq ($(FC_MODULE_OUTPUT_FLAG),) 126*49da0fa4SScott Kruger $(call quiet,FCMOD) $(MODDIR) && $(FC) -c $(FC_FLAGS) $(FFLAGS) $(FCPPFLAGS) $(FC_DEPFLAGS) $(abspath $<) -o $(abspath $@) 127*49da0fa4SScott Krugerelse 128*49da0fa4SScott Kruger $(PETSC_COMPILE.F) $(abspath $<) -o $@ $(FC_MODULE_OUTPUT_FLAG)$(MODDIR) 129*49da0fa4SScott Krugerendif 130*49da0fa4SScott Kruger 131*49da0fa4SScott Kruger# Test executables 132*49da0fa4SScott Kruger$(TESTDIR)/%f : $(TESTDIR)/%f.o $(libpetscall) 133*49da0fa4SScott Kruger $(call quiet,FLINKER) -o $@ $< $(PETSC_LIB) 134*49da0fa4SScott Kruger 135*49da0fa4SScott Kruger$(TESTDIR)/%f90 : $(TESTDIR)/%f90.o $(libpetscall) 136*49da0fa4SScott Kruger $(call quiet,FLINKER) -o $@ $< $(PETSC_LIB) 137*49da0fa4SScott Kruger 138*49da0fa4SScott Kruger$(TESTDIR)/% : $(TESTDIR)/%.o $(libpetscall) 139*49da0fa4SScott Kruger $(call quiet,CLINKER) -o $@ $< $(PETSC_LIB) 140*49da0fa4SScott Kruger 141*49da0fa4SScott Kruger# Fortran source files need petsc*.mod, which isn't explicitly managed in the makefile. 142*49da0fa4SScott Kruger$(foreach pkg, $(pkgs), $(call concattestlang,$(pkg),F F90)) : $(libpetscall) 143*49da0fa4SScott Kruger 144*49da0fa4SScott Kruger# Testing convenience targets 145*49da0fa4SScott Kruger.PHONY: alltest test pre-clean 146*49da0fa4SScott Krugertest: pre-clean report_tests 147*49da0fa4SScott Krugerpre-clean: 148*49da0fa4SScott Kruger @$(RM) -r $(TESTDIR)/counts $(TESTLOGFILE) 149*49da0fa4SScott Kruger @touch $(TESTLOGFILE) 150*49da0fa4SScott Kruger 151*49da0fa4SScott Kruger.PHONY: $(foreach pkg, $(pkgs), test-$(pkg) $(foreach lang, $(testlangs), test-$(pkg).$(lang) test-rm-$(pkg).$(lang))) 152*49da0fa4SScott Krugertestpkgs := $(foreach pkg, $(pkgs), test-$(pkg)) 153*49da0fa4SScott Kruger# Targets to run tests in test-$pkg.$lang and delete the executables, language by language 154*49da0fa4SScott Kruger$(testpkgs) : test-% : $(foreach lang, $(testlangs), test-rm-%.$(lang)) 155*49da0fa4SScott Kruger# List of raw test run targets 156*49da0fa4SScott Krugeralltesttargets := $(foreach tp, $(testpkgs), $(foreach lang, $(testlangs), $($(tp).$(lang)))) 157*49da0fa4SScott Kruger 158*49da0fa4SScott Kruger# Run targets 159*49da0fa4SScott Kruger$(alltesttargets) : % : $(TESTDIR)/counts/%.counts 160*49da0fa4SScott Kruger.PHONY: $(alltesttargets) 161*49da0fa4SScott Kruger 162*49da0fa4SScott Kruger$(TESTDIR)/counts/%.counts : 163*49da0fa4SScott Kruger $(quiettest) $< $(TESTFLAGS) 164*49da0fa4SScott Kruger 165*49da0fa4SScott Kruger# Targets to run tests and remove executables, by package-lang pairs. 166*49da0fa4SScott Kruger# Run the tests in each batch using recursive invocation of make because 167*49da0fa4SScott Kruger# we need all of them to complete before removing the executables. Make 168*49da0fa4SScott Kruger# doesn't guarantee an exploration order for the graph. Only recursive 169*49da0fa4SScott Kruger# if there is something to be done. 170*49da0fa4SScott Krugeralltest-rm := $(foreach pkg, $(pkgs), $(foreach lang, $(testlangs), test-rm-$(pkg).$(lang))) 171*49da0fa4SScott Kruger$(alltest-rm) : test-rm-% : test-% 172*49da0fa4SScott Krugerifneq ($(NO_RM),1) 173*49da0fa4SScott Kruger $(call quiet,RM) $(addprefix $(TESTDIR)/,$(basename $($(@:test-rm-%=testsrcs-%)))) 174*49da0fa4SScott Krugerendif 175*49da0fa4SScott Kruger 176*49da0fa4SScott Kruger# Remove intermediate .o files 177*49da0fa4SScott Kruger# This only removes the files at the end which is insufficient 178*49da0fa4SScott Kruger#.INTERMEDIATE: $(testsrcs.o:%.o=%) 179*49da0fa4SScott Kruger 180*49da0fa4SScott Kruger# all sources should get recompiled when petscvariables changes (i.e when configure is rerun or when petscvariables is manually edited.) 181*49da0fa4SScott Kruger$(testsrcs.o) : $(petscvariables) 182*49da0fa4SScott Kruger 183*49da0fa4SScott Kruger%/.DIR : 184*49da0fa4SScott Kruger @mkdir -p $(@D) 185*49da0fa4SScott Kruger @touch $@ 186*49da0fa4SScott Kruger 187*49da0fa4SScott Kruger.PRECIOUS: %/.DIR 188*49da0fa4SScott Kruger 189*49da0fa4SScott Kruger.SUFFIXES: # Clear .SUFFIXES because we don't use implicit rules 190*49da0fa4SScott Kruger.DELETE_ON_ERROR: # Delete likely-corrupt target file if rule fails 191*49da0fa4SScott Kruger 192*49da0fa4SScott Kruger.PHONY: clean cleantest all print 193*49da0fa4SScott Kruger 194*49da0fa4SScott Krugercleantest: 195*49da0fa4SScott Kruger ${RM} -r $(TESTDIR) $(generatedtest) 196*49da0fa4SScott Kruger 197*49da0fa4SScott Krugerclean: cleantest 198*49da0fa4SScott Kruger 199*49da0fa4SScott Kruger# make print VAR=the-variable 200*49da0fa4SScott Krugerprint: 201*49da0fa4SScott Kruger @echo $($(VAR)) 202*49da0fa4SScott Kruger 203*49da0fa4SScott Krugeralltest.d := $(testsrcs.o:%.o=%.d) 204*49da0fa4SScott Kruger# Tell make that alltest.d are all up to date. Without this, the include 205*49da0fa4SScott Kruger# below has quadratic complexity, taking more than one second for a 206*49da0fa4SScott Kruger# do-nothing build of PETSc (much worse for larger projects) 207*49da0fa4SScott Kruger$(alltest.d) : ; 208*49da0fa4SScott Kruger 209*49da0fa4SScott Kruger-include $(alltest.d) 210*49da0fa4SScott Kruger 211*49da0fa4SScott Kruger# Tests can be generated by searching 212*49da0fa4SScott Kruger# Percent is a wildcard (only one allowed): 213*49da0fa4SScott Kruger# make -f gmakefile test search=sys%ex2 214*49da0fa4SScott Kruger# To match internal substrings (matches *ex2*): 215*49da0fa4SScott Kruger# make -f gmakefile test searchin=ex2 216*49da0fa4SScott Kruger# Search and searchin can be combined: 217*49da0fa4SScott Kruger# make -f gmakefile test search='sys%' searchin=ex2 218*49da0fa4SScott Kruger# For args: 219*49da0fa4SScott Kruger# make -f gmakefile test argsearch=cuda 220*49da0fa4SScott Kruger# For general glob-style searching using python: 221*49da0fa4SScott Kruger# NOTE: uses shell which is possibly slower and is possibly more brittle 222*49da0fa4SScott Kruger# make -f gmakefile test globsearch='sys*ex2*' 223*49da0fa4SScott Krugerifdef search 224*49da0fa4SScott Kruger TESTTARGETS := $(filter $(search),$(alltesttargets)) 225*49da0fa4SScott Kruger ifdef searchin 226*49da0fa4SScott Kruger TESTTARGETS2 := $(foreach v,$(TESTTARGETS),$(if $(findstring $(searchin),$(v)),$(v))) 227*49da0fa4SScott Kruger TESTTARGETS := $(TESTTARGETS2) 228*49da0fa4SScott Kruger endif 229*49da0fa4SScott Krugerelse ifdef searchin 230*49da0fa4SScott Kruger TESTTARGETS := $(foreach v,$(alltesttargets),$(if $(findstring $(searchin),$(v)),$(v))) 231*49da0fa4SScott Krugerelse ifdef argsearch 232*49da0fa4SScott Kruger TESTTARGETS := $(foreach v,$(alltesttargets),$(if $(findstring $(argsearch),$($(v)_ARGS)),$(v))) 233*49da0fa4SScott Krugerelse ifdef globsearch 234*49da0fa4SScott Kruger TESTTARGETS := $(shell $(PYTHON) -c"import sys,fnmatch; print ' '.join(fnmatch.filter(sys.argv[2].split(),sys.argv[1]))" '$(globsearch)' '$(alltesttargets)') 235*49da0fa4SScott Krugerelse # No filter - run them all, but delete the executables as we go 236*49da0fa4SScott Kruger TESTTARGETS := $(testpkgs) 237*49da0fa4SScott Krugerendif 238*49da0fa4SScott Kruger 239*49da0fa4SScott Kruger.PHONY: report_tests print-test 240*49da0fa4SScott Kruger 241*49da0fa4SScott Krugerprint-test: 242*49da0fa4SScott Kruger -@echo $(TESTTARGETS) 243*49da0fa4SScott Kruger 244*49da0fa4SScott Krugerreport_tests: $(TESTTARGETS) 245*49da0fa4SScott Kruger -@$(PYTHON) $(CONFIGDIR)/report_tests.py -d $(PETSC_ARCH)/tests/counts 246*49da0fa4SScott Kruger 247*49da0fa4SScott Kruger# Do not how how to invoke test from makefile 248*49da0fa4SScott KrugerHASGMAKEFILE := $(filter gmakefile,$(MAKEFILE_LIST)) 249*49da0fa4SScott Krugerifeq ($(HASGMAKEFILE),gmakefile) 250*49da0fa4SScott Krugerhelpdeps:=help-make help-targets 251*49da0fa4SScott Krugermakefile="gmakefile" 252*49da0fa4SScott Krugerelse 253*49da0fa4SScott Krugerhelpdeps:=help-make help-targets help-test 254*49da0fa4SScott Krugermakefile="gmakefile.test" 255*49da0fa4SScott Krugerendif 256*49da0fa4SScott Kruger 257*49da0fa4SScott Krugerhelp: ${helpdeps} 258*49da0fa4SScott Kruger -@echo "Above is from: ${helpdeps}" 259*49da0fa4SScott Kruger 260*49da0fa4SScott Krugerhelp-make: 261*49da0fa4SScott Kruger -@echo 262*49da0fa4SScott Kruger -@echo "Basic build usage:" 263*49da0fa4SScott Kruger -@echo " make -f ${makefile} <options>" 264*49da0fa4SScott Kruger -@echo 265*49da0fa4SScott Kruger -@echo "Options:" 266*49da0fa4SScott Kruger -@echo " V=0 Very quiet builds" 267*49da0fa4SScott Kruger -@echo " V=1 Verbose builds" 268*49da0fa4SScott Kruger -@echo 269*49da0fa4SScott Kruger 270*49da0fa4SScott Krugerhelp-targets: 271*49da0fa4SScott Kruger -@echo "All makefile targets and their dependencies:" 272*49da0fa4SScott Kruger -@grep ^[a-z] ${makefile} | grep : | grep -v = 273*49da0fa4SScott Kruger -@echo 274*49da0fa4SScott Kruger -@echo 275*49da0fa4SScott Kruger 276*49da0fa4SScott Krugerhelp-test: 277*49da0fa4SScott Kruger -@echo "Basic test usage:" 278*49da0fa4SScott Kruger -@echo " make -f ${makefile} test <options>" 279*49da0fa4SScott Kruger -@echo 280*49da0fa4SScott Kruger -@echo "Options:" 281*49da0fa4SScott Kruger -@echo " NO_RM=1 Do not remove the executables after running" 282*49da0fa4SScott Kruger -@echo " REPLACE=1 Replace the output in the PETSC_DIR source tree (-m to test scripts)" 283*49da0fa4SScott Kruger -@echo " DIFF_NUMBERS=1 Diff the numbers in the output (-j to test scripts and petscdiff)" 284*49da0fa4SScott Kruger -@echo " VALGRIND=1 Execute the tests using valgrind (-V to test scripts)" 285*49da0fa4SScott Kruger -@echo " TESTDIR='tests' Subdirectory where the tests are run ($${PETSC_DIR}/$${PETSC_ARCH}/$${TESTDIR}" 286*49da0fa4SScott Kruger -@echo " or $${PREFIX_DIR}/$${TESTDIR}" 287*49da0fa4SScott Kruger -@echo " or $${PREFIX_DIR}/share/petsc/examples/$${TESTDIR})" 288*49da0fa4SScott Kruger -@echo " OPTIONS='<args>' Override options to scripts (-a to test scripts)" 289*49da0fa4SScott Kruger -@echo " EXTRA_OPTIONS='<args>' Add options to scripts (-e to test scripts)" 290*49da0fa4SScott Kruger -@echo 291*49da0fa4SScott Kruger -@echo "Tests can be generated by searching:" 292*49da0fa4SScott Kruger -@echo " Percent is a wildcard (only one allowed):" 293*49da0fa4SScott Kruger -@echo " make -f ${makefile} test search=sys%ex2" 294*49da0fa4SScott Kruger -@echo 295*49da0fa4SScott Kruger -@echo " To match internal substrings (matches *ex2*):" 296*49da0fa4SScott Kruger -@echo " make -f ${makefile} test searchin=ex2" 297*49da0fa4SScott Kruger -@echo 298*49da0fa4SScott Kruger -@echo " Search and searchin can be combined:" 299*49da0fa4SScott Kruger -@echo " make -f ${makefile} test search='sys%' searchin=ex2" 300*49da0fa4SScott Kruger -@echo 301*49da0fa4SScott Kruger -@echo " To match patterns in the arguments:" 302*49da0fa4SScott Kruger -@echo " make -f ${makefile} test argsearch=cuda" 303*49da0fa4SScott Kruger -@echo 304*49da0fa4SScott Kruger -@echo " For general glob-style searching using python:" 305*49da0fa4SScott Kruger -@echo " NOTE: uses shell which is possibly slower and more brittle" 306*49da0fa4SScott Kruger -@echo " make -f ${makefile} test globsearch='sys*ex2*'" 307*49da0fa4SScott Kruger -@echo 308*49da0fa4SScott Kruger -@echo " To see which targets match a given pattern (useful for doing a specific target):" 309*49da0fa4SScott Kruger -@echo " make -f ${makefile} print-test search=sys%" 310*49da0fa4SScott Kruger -@echo " which is equivalent to:" 311*49da0fa4SScott Kruger -@echo " make -f ${makefile} print VAR=TESTTARGETS search='sys%'" 312*49da0fa4SScott Kruger -@echo 313*49da0fa4SScott Kruger -@echo " To build an executable, give full path to location:" 314*49da0fa4SScott Kruger -@echo ' make -f ${makefile} $${PETSC_ARCH}/tests/src/sys/examples/tests/ex1' 315*49da0fa4SScott Kruger -@echo " or make the test with NO_RM=1" 316*49da0fa4SScott Kruger -@echo 317