149da0fa4SScott Kruger# -*- mode: makefile-gmake -*- 2fca490e6SSatish Balay-include petscdir.mk 349da0fa4SScott Kruger 450dcbc5aSJunchao Zhang.SUFFIXES: .F .F90 .f90 ${SUFFIXES} .PETSc .C .cc .cpp .cxx .r .rm .so .html .ad .m .tex .make .fig .svg .eps .pdf .jpg .png .dvi .ps .F95 .f95 .fiat .cu .kokkos.cxx .raja.cxx .hip.cpp .sycl.cxx 5c0558f20SBarry Smith 637ed16bcSStefano ZampiniCONFIGDIR := $(PETSC_DIR)/config 749da0fa4SScott Kruger 8fc46264cSScott Kruger# TESTSRCDIR is always relative to gmakefile.test 9fc46264cSScott Kruger# This must be before includes 105b5a9be8SJed Brownmkfile_path := $(abspath $(lastword $(MAKEFILE_LIST))) 118d5d1ea2SBarry SmithTESTSRCDIR ?= $(dir $(mkfile_path))src 12fc46264cSScott Kruger 130e03b746SBarry Smith-include $(PETSC_DIR)/$(PETSC_ARCH)/lib/petsc/conf/petscvariables 140e03b746SBarry Smith-include $(PETSC_DIR)/lib/petsc/conf/variables 1549da0fa4SScott Kruger 1670d5ab12SJacob FaibussowitschTESTDIR ?= ./$(PETSC_ARCH)/tests 174ff3c6a1SScott KrugerMODDIR := $(PETSC_DIR)/$(PETSC_ARCH)/include 18e73aa2c6SSatish BalayTESTLOGTAPFILE ?= $(TESTDIR)/test_$(PETSC_ARCH)_tap.log 19e73aa2c6SSatish BalayTESTLOGERRFILE ?= $(TESTDIR)/test_$(PETSC_ARCH)_err.log 2094666443SJed BrownEXAMPLESDIR := $(TESTSRCDIR) 2149da0fa4SScott Kruger 228d5d1ea2SBarry Smithpkgs ?= sys vec mat dm ksp snes ts tao 2349da0fa4SScott Kruger 244ff3c6a1SScott Krugerpetscconf := $(PETSC_DIR)/$(PETSC_ARCH)/include/petscconf.h 254ff3c6a1SScott Krugerpetscvariables := $(PETSC_DIR)/$(PETSC_ARCH)/lib/petsc/conf/petscvariables 268e69c5ecSJed Browngeneratedtest := $(TESTDIR)/testfiles 2749da0fa4SScott Kruger 2849da0fa4SScott Kruger.SECONDEXPANSION: # to expand $$(@D)/.DIR 2949da0fa4SScott Kruger 3049da0fa4SScott KrugerTESTFLAGS := # Initialize as simple variable 3149da0fa4SScott Kruger 32a5b23f4aSJose E. Roman#workaround old cygwin versions 3349da0fa4SScott Krugerifeq ($(PETSC_CYGWIN_BROKEN_PIPE),1) 3449da0fa4SScott Krugerifeq ($(shell basename $(AR)),ar) 3549da0fa4SScott Kruger V ?=1 3649da0fa4SScott Krugerendif 3749da0fa4SScott Krugerendif 38ef93a428SToby Isaac# gmake should turn '-s', '--silent', and '--quiet' into an 's' in the first word of MAKEFLAGS 39ef93a428SToby IsaacMAKEFLAGS_FW=$(firstword $(MAKEFLAGS)) 40ef93a428SToby Isaac# ignore first work if it starts with -, because then there are no shortoptions 41ef93a428SToby IsaacMAKEFLAGS_SHORT=$(patsubst -%,,$(MAKEFLAGS_FW)) 42ef93a428SToby IsaacMAKEFLAGS_SILENT=$(findstring s,$(MAKEFLAGS_SHORT)) 43ef93a428SToby IsaacV ?= $(if $(MAKEFLAGS_SILENT),0) 4449da0fa4SScott Krugerifeq ($(V),) # Default 4549da0fa4SScott Kruger quiet_HELP := "Use \"$(MAKE) V=1\" to see verbose compile lines, \"$(MAKE) V=0\" to suppress.\n" 4649da0fa4SScott Kruger quiet = @printf $(quiet_HELP)$(eval quiet_HELP:=)" %10s %s\n" "$1$2" "$@"; $($1) 4749da0fa4SScott Kruger quiettest = @printf " %10s %s\n" "TEST" "$(@:$(TESTDIR)/counts/%.counts=%)"; 4849da0fa4SScott Krugerelse ifeq ($(V),0) # Suppress entire command 4949da0fa4SScott Kruger quiet = @$($1) 5049da0fa4SScott Kruger quiettest = @ 515e361860SScott Kruger TESTFLAGS += -o err_only 5249da0fa4SScott Krugerelse # Show the full command line 5349da0fa4SScott Kruger quiet = $($1) 5449da0fa4SScott Kruger quiettest = 5549da0fa4SScott Kruger TESTFLAGS += -v 5649da0fa4SScott Krugerendif 5749da0fa4SScott Kruger 5849da0fa4SScott Krugerifeq ($(FORCE),1) 5949da0fa4SScott Kruger TESTFLAGS += -f # force test execution 6049da0fa4SScott Krugerendif 61baa5c0f4SScott Krugerifeq ($(CUDAMEMCHECK),1) 62baa5c0f4SScott Kruger TESTFLAGS += -U # Add cuda-memcheck option to the flags 63baa5c0f4SScott Krugerendif 6449da0fa4SScott Krugerifeq ($(VALGRIND),1) 65baa5c0f4SScott Kruger TESTFLAGS += -V # Add valgrind option to the flags 6649da0fa4SScott Krugerendif 6785bc9deeSScott Krugerifeq ($(DEBUG),1) 6885bc9deeSScott Kruger TESTFLAGS += -d # Launch test in debugger 6985bc9deeSScott Krugerendif 7049da0fa4SScott Krugerifeq ($(REPLACE),1) 7149da0fa4SScott Kruger TESTFLAGS += -m # Replace results by passing -m to petscdiff 7249da0fa4SScott Krugerendif 735e361860SScott Krugerifeq ($(OUTPUT),1) 745e361860SScott Kruger TESTFLAGS += -o 'err_only' # Show only the errors on stdout 755e361860SScott Krugerendif 76f50802fbSScott Krugerifeq ($(ALT),1) 77f50802fbSScott Kruger TESTFLAGS += -M # Replace alt files by passing -M to petscdiff 78f50802fbSScott Krugerendif 79e6bdf5b1SSatish BalayPRINTONLY ?= 0 80a6f3f80dSScott Krugerifeq ($(PRINTONLY),1) 81a6f3f80dSScott Kruger TESTFLAGS += -p # Pass -p to petscdiff to print only command 82a6f3f80dSScott Krugerendif 8349da0fa4SScott Krugerifeq ($(DIFF_NUMBERS),1) 8449da0fa4SScott Kruger TESTFLAGS += -j # Pass -j to petscdiff to diff the actual numbers 8549da0fa4SScott Krugerendif 8649da0fa4SScott Krugerifdef OPTIONS 8749da0fa4SScott Kruger TESTFLAGS += -a '$(OPTIONS)' # override arguments 8849da0fa4SScott Krugerendif 8949da0fa4SScott Krugerifdef EXTRA_OPTIONS 9049da0fa4SScott Kruger TESTFLAGS += -e '$(EXTRA_OPTIONS)' # add extra arguments 9149da0fa4SScott Krugerendif 9249da0fa4SScott Krugerifdef NP 9349da0fa4SScott Kruger TESTFLAGS += -n $(NP) # set number of processes 9449da0fa4SScott Krugerendif 9549da0fa4SScott Kruger# Override the default timeout that may be found at the top of config/petsc_harness.sh 9649da0fa4SScott Kruger# This must be an integer. It is given in seconds. 9749da0fa4SScott Krugerifdef TIMEOUT 9849da0fa4SScott Kruger TESTFLAGS += -t $(TIMEOUT) # Override the default timeout 9949da0fa4SScott Krugerendif 10049da0fa4SScott Kruger 101fc46264cSScott Kruger$(generatedtest) : $(petscconf) $(petscvariables) $(CONFIGDIR)/gmakegentest.py $(TESTDIR)/.DIR | $$(@D)/.DIR 1028d5d1ea2SBarry Smith $(PYTHON) $(CONFIGDIR)/gmakegentest.py --petsc-dir=$(PETSC_DIR) --petsc-arch=$(PETSC_ARCH) --testdir=$(TESTDIR) --srcdir $(TESTSRCDIR) --pkg-pkgs "$(pkgs)" 10349da0fa4SScott Kruger 104297d5bedSBarry Smithifneq ($(filter-out help docs clean distclean check info gmakeinfo libs all install install-lib checkbadSource checkbadFileChange deletefortranstubs allfortranstubs allfortranstubsinplace alletags clangformat checkclangformat lint get%,$(MAKECMDGOALS:clean%=clean)),) 105336d78f1SSatish Balayinclude $(generatedtest) 106535b694aSJed Brownendif 10749da0fa4SScott Kruger 10849da0fa4SScott Krugerifeq ($(PETSC_LANGUAGE),CXXONLY) 10949da0fa4SScott Kruger cc_name := CXX 11049da0fa4SScott Krugerelse 11149da0fa4SScott Kruger cc_name := CC 11249da0fa4SScott Krugerendif 11349da0fa4SScott Kruger 1143761b06dSJed BrownPETSC_COMPILE.c = $(call quiet,$(cc_name)) -c $(PCC_FLAGS) $($(CLANGUAGE)FLAGS) $(CCPPFLAGS) $(C_DEPFLAGS) 1150b119762SSatish BalayPETSC_COMPILE.cxx = $(call quiet,CXX) -c $(CXX_FLAGS) $(CXXFLAGS) $(CXXCPPFLAGS) $(CXX_DEPFLAGS) 116de364511SSatish BalayPETSC_COMPILE.cu = $(call quiet,CUDAC) -c $(MPICXX_INCLUDES) $(CUDAC_FLAGS) $(CUDAPP_FLAGS) $(CUDAFLAGS) $(CUDA_HOSTFLAGS) 11750dcbc5aSJunchao ZhangPETSC_COMPILE.hip.cpp = $(call quiet,HIPC) -c $(MPICXX_INCLUDES) $(HIPC_FLAGS) $(HIPPP_FLAGS) $(HIPFLAGS) $(HIPPPFLAGS) $(HIPOPTFLAGS) $(HIPC_DEPFLAGS) $(CXXFLAGS) $(CXXCPPFLAGS) $(HIP_DEPFLAGS) 11850dcbc5aSJunchao ZhangPETSC_COMPILE.sycl.cxx = $(call quiet,SYCLC) -c $(MPICXX_INCLUDES) $(SYCLC_FLAGS) $(SYCLPP_FLAGS) $(SYCLFLAGS) $(SYCLPPFLAGS) $(SYCLOPTFLAGS) $(CXXFLAGS) $(CXXCPPFLAGS) $(SYCL_DEPFLAGS) 1198a4d847aSStefano ZampiniPETSC_GENDEPS.cu = ${CUDA_PETSC_GENDEPS} 12049da0fa4SScott KrugerPETSC_COMPILE.F = $(call quiet,FC) -c $(FC_FLAGS) $(FFLAGS) $(FCPPFLAGS) $(FC_DEPFLAGS) 12149da0fa4SScott Kruger 122600dc890SJunchao Zhangifneq ($(KOKKOS_USE_CUDA_COMPILER),) 123600dc890SJunchao Zhang # Kokkos requires nvcc to be in PATH and the C++ compiler to be given in an environmental variable 12464cfe48dSJed Brown KOKC = PATH=`dirname $(CUDAC)`:$(PATH) NVCC_WRAPPER_DEFAULT_COMPILER="$(CUDA_CXX)" $(KOKKOS_BIN)/nvcc_wrapper --expt-extended-lambda 12555bc12c6SJunchao Zhang KOKKOS_COMPILE = $(call quiet,KOKC) -c $(CUDAC_FLAGS) ${PETSC_CXXCPPFLAGS} $(CUDACPPFLAGS) $(CUDA_CXXFLAGS) $(MPICXX_INCLUDES) 1268a4d847aSStefano Zampinielse ifneq ($(KOKKOS_USE_CUDACLANG_COMPILER),) 1278a4d847aSStefano Zampini KOKKOS_COMPILE = $(PETSC_COMPILE.cu) 128600dc890SJunchao Zhangelse ifneq ($(KOKKOS_USE_HIP_COMPILER),) 12955bc12c6SJunchao Zhang KOKKOS_COMPILE = $(PETSC_COMPILE.hip.cpp) 13050dcbc5aSJunchao Zhangelse ifneq ($(KOKKOS_USE_SYCL_COMPILER),) 13155bc12c6SJunchao Zhang KOKKOS_COMPILE = $(PETSC_COMPILE.sycl.cxx) 132600dc890SJunchao Zhangelse 13355bc12c6SJunchao Zhang KOKKOS_COMPILE = $(PETSC_COMPILE.cxx) 134600dc890SJunchao Zhangendif 13555bc12c6SJunchao Zhang# https://github.com/kokkos/kokkos/pull/5473 used a C++17 feature, inline static variables. 13655bc12c6SJunchao Zhang# We found -fvisibility=hidden could hide these variables such that the supposed globally unique 13755bc12c6SJunchao Zhang# variables become local to each file including them and thus have multiple copies (see an example 13855bc12c6SJunchao Zhang# at the end of PR5473). It might be a gcc bug thus we also filed at https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107535 13955bc12c6SJunchao Zhang# See also an older bug report related to visibility, https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59693 14055bc12c6SJunchao Zhang# 14155bc12c6SJunchao Zhang# Our workaround here is to git rid of -fvisibility=hidden from Kokkos compiler options, so that petsc 14255bc12c6SJunchao Zhang# files including Kokkos headers won't be affected by this flag. 14355bc12c6SJunchao Zhang# 14455bc12c6SJunchao Zhang# The solution is not ideal in the sense we have to duplicate the same workaround to any external libraries 14555bc12c6SJunchao Zhang# using C++17 inline static variables. We have to wait for GNU to clarify this issue. 1466a1fbadbSJacob FaibussowitschPETSC_COMPILE.kokkos.cxx = $(filter-out -fvisibility=hidden,$(subst -Xcompiler -fvisibility=hidden ,,$(strip $(KOKKOS_COMPILE)))) 14781a145c3SJunchao ZhangKOKKOS_LINKER = $(filter-out -fvisibility=hidden,$(subst -Xcompiler -fvisibility=hidden ,,$(strip $(CLINKER)))) 148600dc890SJunchao Zhang 149d23021a0SBarry Smithifneq ($(RAJA_USE_CUDA_COMPILER),) 150f09347e2SJunchao Zhang PETSC_COMPILE.raja.cxx = ${CUDAC} $(MPICXX_INCLUDES) ${CUDAC_FLAGS} -x cu -Xcudafe "--display_error_number" -c --compiler-options="${PETSC_CXXCPPFLAGS} ${PETSC_CC_INCLUDES} ${CUDA_CXXFLAGS}" --expt-extended-lambda --expt-relaxed-constexpr 151d23021a0SBarry Smithelse 152d23021a0SBarry Smith PETSC_COMPILE.raja.cxx = ${CXX} -o $*.o -c ${CXX_FLAGS} ${CXXFLAGS} ${CXXCPPFLAGS} 153d23021a0SBarry Smithendif 154d23021a0SBarry Smith 15550dcbc5aSJunchao Zhangtestlangs := c cu cxx F F90 kokkos.cxx hip.cpp sycl.cxx raja.cxx 156513d7a9cSJed Brown$(foreach lang, $(testlangs), $(eval \ 157513d7a9cSJed Brown testexe.$(lang) = $(foreach pkg, $(pkgs), $(testsrcs-$(pkg).$(lang):%.$(lang)=$(TESTDIR)/%)))) 15849da0fa4SScott Krugerconcattestlang = $(foreach lang, $(2), $(testsrcs-$(1).$(lang):%.$(lang)=$(TESTDIR)/%.o)) 15949da0fa4SScott Krugertestsrcs.o := $(foreach pkg, $(pkgs), $(call concattestlang,$(pkg),$(testlangs))) 160fc46264cSScott Krugertestsrcs-rel := $(foreach pkg, $(pkgs), $(foreach lang, $(testlangs), $(testsrcs-$(pkg).$(lang)))) 161fc46264cSScott Krugertestsrcs := $(foreach sfile, $(testsrcs-rel), $(TESTSRCDIR)/$(sfile)) 16249da0fa4SScott Kruger 16306fe1a63SSatish Balay# workaround win32fe failure 1647d7394c2SSatish Balayifneq (,$(findstring win32fe,$(call quiet,$(cc_name)))) 16506fe1a63SSatish Balay$(TESTDIR)/ts/tutorials/multirate/ex6: | $(TESTDIR)/ts/tutorials/multirate/ex5 16606fe1a63SSatish Balay$(TESTDIR)/ts/tutorials/multirate/ex8: | $(TESTDIR)/ts/tutorials/multirate/ex6 16706fe1a63SSatish Balayendif 16806fe1a63SSatish Balay 16949da0fa4SScott Kruger# Refresh testfiles when sources change, but don't balk if the source file is nonexistent (deleted) 17049da0fa4SScott Kruger$(generatedtest) : $(testsrcs) 17149da0fa4SScott Kruger$(testsrcs) : 17249da0fa4SScott Kruger 1734ff3c6a1SScott Kruger$(TESTDIR)/%.o : $(EXAMPLESDIR)/%.c | $$(@D)/.DIR 17449da0fa4SScott Kruger $(PETSC_COMPILE.c) $(abspath $<) -o $@ 17549da0fa4SScott Kruger 176c0558f20SBarry Smith$(TESTDIR)/%.o : $(EXAMPLESDIR)/%.kokkos.cxx | $$(@D)/.DIR 177c0558f20SBarry Smith $(PETSC_COMPILE.kokkos.cxx) $(abspath $<) -o $@ 178c0558f20SBarry Smith 17950dcbc5aSJunchao Zhang$(TESTDIR)/%.o : $(EXAMPLESDIR)/%.sycl.cxx | $$(@D)/.DIR 18050dcbc5aSJunchao Zhang $(PETSC_COMPILE.sycl.cxx) $(abspath $<) -o $@ 18150dcbc5aSJunchao Zhang 182d23021a0SBarry Smith$(TESTDIR)/%.o : $(EXAMPLESDIR)/%.raja.cxx | $$(@D)/.DIR 183d23021a0SBarry Smith $(PETSC_COMPILE.raja.cxx) $(abspath $<) -o $@ 184d23021a0SBarry Smith 1854ff3c6a1SScott Kruger$(TESTDIR)/%.o : $(EXAMPLESDIR)/%.cxx | $$(@D)/.DIR 18649da0fa4SScott Kruger $(PETSC_COMPILE.cxx) $(abspath $<) -o $@ 18749da0fa4SScott Kruger 1884ff3c6a1SScott Kruger$(TESTDIR)/%.o : $(EXAMPLESDIR)/%.cu | $$(@D)/.DIR 18949da0fa4SScott Kruger $(PETSC_COMPILE.cu) $(abspath $<) -o $@ # Compile first so that if there is an error, it comes from a normal compile 19049da0fa4SScott Kruger @$(PETSC_GENDEPS.cu) $(abspath $<) -o $(@:%.o=%.d) # Generate the dependencies for later 19149da0fa4SScott Kruger 1921a5aed34SJunchao Zhang$(TESTDIR)/%.o : $(EXAMPLESDIR)/%.hip.cpp | $$(@D)/.DIR 1931a5aed34SJunchao Zhang $(PETSC_COMPILE.hip.cpp) $(abspath $<) -o $@ 1941a5aed34SJunchao Zhang 195a55d2495SJed Brown# Test modules go in the same directory as the target *.o 196a55d2495SJed BrownTESTMODDIR = $(@D) 19749da0fa4SScott KrugerFCMOD = cd 1984ff3c6a1SScott Kruger$(TESTDIR)/%.o : $(EXAMPLESDIR)/%.F | $$(@D)/.DIR 19949da0fa4SScott Krugerifeq ($(FC_MODULE_OUTPUT_FLAG),) 200a55d2495SJed Brown $(call quiet,FCMOD) $(TESTMODDIR) && $(FC) -c $(FC_FLAGS) $(FFLAGS) $(FCPPFLAGS) $(FC_DEPFLAGS) -I$(dir $<) $(abspath $<) -o $(abspath $@) 20149da0fa4SScott Krugerelse 202a55d2495SJed Brown $(PETSC_COMPILE.F) -I$(dir $<) $(abspath $<) -o $@ $(FC_MODULE_OUTPUT_FLAG)$(TESTMODDIR) $(FC_MODULE_FLAG)$(TESTMODDIR) 20349da0fa4SScott Krugerendif 2040266c241SJed Brown -@$(GFORTRAN_DEP_CLEANUP) 20549da0fa4SScott Kruger 2064ff3c6a1SScott Kruger$(TESTDIR)/%.o : $(EXAMPLESDIR)/%.F90 | $$(@D)/.DIR 20749da0fa4SScott Krugerifeq ($(FC_MODULE_OUTPUT_FLAG),) 208a55d2495SJed Brown $(call quiet,FCMOD) $(TESTMODDIR) && $(FC) -c $(FC_FLAGS) $(FFLAGS) $(FCPPFLAGS) $(FC_DEPFLAGS) -I$(dir $<) $(abspath $<) -o $(abspath $@) 20949da0fa4SScott Krugerelse 210a55d2495SJed Brown $(PETSC_COMPILE.F) -I$(dir $<) $(abspath $<) -o $@ $(FC_MODULE_OUTPUT_FLAG)$(TESTMODDIR) $(FC_MODULE_FLAG)$(TESTMODDIR) 21149da0fa4SScott Krugerendif 2120266c241SJed Brown -@$(GFORTRAN_DEP_CLEANUP) 2130266c241SJed Brown 214cf7d3547SScott Kruger# This is a hack to fix a broken gfortran. 2150266c241SJed Browndefine GFORTRAN_DEP_CLEANUP 216ef0d7cd8SPierre Jolivet if test -e "$(@:%.o=%.d)" && head -1 "$(@:%.o=%.d)" | grep -F -q -v : ; then\ 2174f45eea9SScott Kruger echo "$(@): \\" > $(@:%.o=%.dtemp) ; \ 2180266c241SJed Brown tr '\n' '@' < $(@:%.o=%.d) | cut -d: -f2- | tr '@' '\n' >> $(@:%.o=%.dtemp) ; \ 2190266c241SJed Brown mv $(@:%.o=%.dtemp) $(@:%.o=%.d); \ 2204f45eea9SScott Kruger fi 2210266c241SJed Brownendef 22249da0fa4SScott Kruger 22320844ca6SSatish Balay# link line constructed differently for gmakefile vs gmakefile.test invocation 22420844ca6SSatish Balayifeq ($(libpetscall),) 22520844ca6SSatish BalayPETSC_TEST_LIB = $(PETSC_LIB) 22620844ca6SSatish Balayelse 2278020a2f4SSatish BalayPETSC_TEST_LIB = $(C_SH_LIB_PATH) $(PETSC_EXTERNAL_LIB_BASIC) 22820844ca6SSatish Balayendif 22920844ca6SSatish Balay 23015229ffcSPierre Jolivet# manually list some library dependencies to check for circular dependencies 231c4762a1bSJed Brown$(TESTDIR)/sys/tests/ex9: PETSC_TEST_LIB = $(PETSC_SYS_LIB) 232c4762a1bSJed Brown$(TESTDIR)/vec/vec/tests/ex1: PETSC_TEST_LIB = $(PETSC_VEC_LIB) 233c4762a1bSJed Brown$(TESTDIR)/mat/tests/ex1: PETSC_TEST_LIB = $(PETSC_MAT_LIB) 234c4762a1bSJed Brown$(TESTDIR)/dm/tests/ex1: PETSC_TEST_LIB = $(PETSC_DM_LIB) 235c4762a1bSJed Brown$(TESTDIR)/ksp/ksp/tests/ex1: PETSC_TEST_LIB = $(PETSC_KSP_LIB) 236c4762a1bSJed Brown$(TESTDIR)/snes/tests/ex1: PETSC_TEST_LIB = $(PETSC_SNES_LIB) 237c4762a1bSJed Brown$(TESTDIR)/ts/tests/ex2: PETSC_TEST_LIB = $(PETSC_TS_LIB) 238c4762a1bSJed Brown$(TESTDIR)/tao/tutorials/ex1: PETSC_TEST_LIB = $(PETSC_TAO_LIB) 239bde159b7SSatish Balay 2407cb68e74SVaclav Hapla# MACOS FIREWALL HANDLING 2417cb68e74SVaclav Hapla# - if run with MACOS_FIREWALL=1 2427cb68e74SVaclav Hapla# (automatically set in $PETSC_ARCH/lib/petsc/conf/petscvariables if configured --with-macos-firewall-rules), 2437cb68e74SVaclav Hapla# ensure mpiexec and test executable is on firewall list 2447cb68e74SVaclav Hapla# 2450b148140SVaclav Haplaifeq ($(MACOS_FIREWALL),1) 2460b148140SVaclav HaplaFW := /usr/libexec/ApplicationFirewall/socketfilterfw 2477cb68e74SVaclav Hapla# There is no reliable realpath command in macOS without need for 3rd party tools like homebrew coreutils 2487cb68e74SVaclav Hapla# Using Python's realpath seems like the most robust way here 2497cb68e74SVaclav Haplarealpath-py = $(shell $(PYTHON) -c 'import os, sys; print(os.path.realpath(sys.argv[1]))' $(1)) 2507cb68e74SVaclav Hapla# 2511dcdb15bSVaclav Hapladefine macos-firewall-register 2527cb68e74SVaclav Hapla @APP=$(call realpath-py, $(1)); \ 2531855f086SVaclav Hapla if ! sudo -n true 2>/dev/null; then printf "Asking for sudo password to add new firewall rule for\n $$APP\n"; fi; \ 2547cb68e74SVaclav Hapla sudo $(FW) --remove $$APP --add $$APP --blockapp $$APP 2551dcdb15bSVaclav Haplaendef 2560b148140SVaclav Haplaendif 2577cb68e74SVaclav Hapla# 2587cb68e74SVaclav Haplamacos-firewall-register-mpiexec: 259961fb248SStefano Zampini -$(call macos-firewall-register, $(MPIEXEC)) 2601dcdb15bSVaclav Hapla 26149da0fa4SScott Kruger# Test executables 262513d7a9cSJed Brown$(testexe.F) $(testexe.F90) : $(TESTDIR)/% : $(TESTDIR)/%.o $$^ $(libpetscall) 26320844ca6SSatish Balay $(call quiet,FLINKER) -o $@ $^ $(PETSC_TEST_LIB) 2647cb68e74SVaclav Hapla -$(call macos-firewall-register,$@) 26549da0fa4SScott Kruger 266accbd18bSBarry Smithifneq (,$(findstring emcc,$(CC))) 267accbd18bSBarry Smith$(testexe.c) : $(TESTDIR)/% : $(TESTDIR)/%.o $$^ $(libpetscall) 268accbd18bSBarry Smith -@$(call quiet,CLINKER) -s MAIN_MODULE -s ASSERTIONS=2 -s SAFE_HEAP=1 -s STACK_OVERFLOW_CHECK=1 -s ALLOW_MEMORY_GROWTH $(EXEFLAGS) -o $@.js $@.o $(PETSC_LIB) 269accbd18bSBarry Smith -@printf '#!/usr/bin/env sh\nnode --redirect-warnings=/dev/null $$0.js $$* | grep -v "Heap resize call from"' > $@ 270accbd18bSBarry Smith -@chmod u+x $@ 271accbd18bSBarry Smithelse 272513d7a9cSJed Brown$(testexe.c) $(testexe.cu) : $(TESTDIR)/% : $(TESTDIR)/%.o $$^ $(libpetscall) 2731c6715b8SMatthew G. Knepley $(call quiet,CLINKER) $(EXEFLAGS) -o $@ $^ $(PETSC_TEST_LIB) 2747cb68e74SVaclav Hapla -$(call macos-firewall-register,$@) 27549da0fa4SScott Kruger 276accbd18bSBarry Smithendif 277accbd18bSBarry Smith 2781a5aed34SJunchao Zhang$(testexe.hip.cpp) : $(TESTDIR)/% : $(TESTDIR)/%.o $$^ $(libpetscall) 2791a5aed34SJunchao Zhang $(call quiet,CLINKER) -o $@ $^ $(PETSC_TEST_LIB) 2801a5aed34SJunchao Zhang -$(call macos-firewall-register,$@) 2811a5aed34SJunchao Zhang 282c0558f20SBarry Smith$(testexe.kokkos.cxx) : $(TESTDIR)/% : $(TESTDIR)/%.o $$^ $(libpetscall) 28381a145c3SJunchao Zhang $(call quiet,KOKKOS_LINKER) $(EXEFLAGS) -o $@ $^ $(PETSC_TEST_LIB) 2847cb68e74SVaclav Hapla -$(call macos-firewall-register,$@) 285c0558f20SBarry Smith 286d23021a0SBarry Smith$(testexe.raja.cxx) : $(TESTDIR)/% : $(TESTDIR)/%.o $$^ $(libpetscall) 287d23021a0SBarry Smith $(call quiet,CLINKER) -o $@ $^ $(PETSC_TEST_LIB) 288d23021a0SBarry Smith -$(call macos-firewall-register,$@) 289d23021a0SBarry Smith 290513d7a9cSJed Brown$(testexe.cxx) : $(TESTDIR)/% : $(TESTDIR)/%.o $$^ $(libpetscall) 2912f4326f3SSatish Balay $(call quiet,CXXLINKER) -o $@ $^ $(PETSC_TEST_LIB) 2927cb68e74SVaclav Hapla -$(call macos-firewall-register,$@) 293513d7a9cSJed Brown 29449da0fa4SScott Kruger# Fortran source files need petsc*.mod, which isn't explicitly managed in the makefile. 29549da0fa4SScott Kruger$(foreach pkg, $(pkgs), $(call concattestlang,$(pkg),F F90)) : $(libpetscall) 29649da0fa4SScott Kruger 29749da0fa4SScott Kruger# Testing convenience targets 298c173c275SScott Kruger.PHONY: test pre-clean 299c173c275SScott Kruger 3000e2a8ab2SBarry Smith# The Fortran compiler may use out-dated module files in the tutorial and test directories so delete them all 3010e2a8ab2SBarry Smithremove-test-mod-files: 3020e2a8ab2SBarry Smith -@find src -name "*.mod" -not -path "src/binding/*" -delete 3030e2a8ab2SBarry Smith 3040e2a8ab2SBarry Smithtest: remove-test-mod-files report_tests 305c173c275SScott Kruger 30649da0fa4SScott Krugerpre-clean: 3075e361860SScott Kruger @$(RM) -rf $(TESTDIR)/counts $(TESTLOGTAPFILE) $(TESTLOGERRFILE) 3085e361860SScott Kruger @touch $(TESTLOGTAPFILE) $(TESTLOGERRFILE) 30927d73d1fSBarry Smith @echo "Using MAKEFLAGS:" ${MAKEFLAGS} 31049da0fa4SScott Kruger 3114d9d3ee5SSatish Balaycheck-test-errors: 3125e361860SScott Kruger @grep '^not ok' $(TESTLOGTAPFILE) | grep -v 'Exceeded timeout' | tee $(TESTDIR)/allgtests-tap-err.log 3134d9d3ee5SSatish Balay @test ! -s $(TESTDIR)/allgtests-tap-err.log 3144d9d3ee5SSatish Balay 31549da0fa4SScott Kruger.PHONY: $(foreach pkg, $(pkgs), test-$(pkg) $(foreach lang, $(testlangs), test-$(pkg).$(lang) test-rm-$(pkg).$(lang))) 31649da0fa4SScott Krugertestpkgs := $(foreach pkg, $(pkgs), test-$(pkg)) 31749da0fa4SScott Kruger# Targets to run tests in test-$pkg.$lang and delete the executables, language by language 31849da0fa4SScott Kruger$(testpkgs) : test-% : $(foreach lang, $(testlangs), test-rm-%.$(lang)) 31949da0fa4SScott Kruger# List of raw test run targets 32049da0fa4SScott Krugeralltesttargets := $(foreach tp, $(testpkgs), $(foreach lang, $(testlangs), $($(tp).$(lang)))) 32149da0fa4SScott Kruger 32249da0fa4SScott Kruger# Run targets 32349da0fa4SScott Kruger$(alltesttargets) : % : $(TESTDIR)/counts/%.counts 32449da0fa4SScott Kruger.PHONY: $(alltesttargets) 32549da0fa4SScott Kruger 32649da0fa4SScott Kruger$(TESTDIR)/counts/%.counts : 32749da0fa4SScott Kruger $(quiettest) $< $(TESTFLAGS) 32849da0fa4SScott Kruger 32949da0fa4SScott Kruger# Targets to run tests and remove executables, by package-lang pairs. 33049da0fa4SScott Kruger# Run the tests in each batch using recursive invocation of make because 33149da0fa4SScott Kruger# we need all of them to complete before removing the executables. Make 33249da0fa4SScott Kruger# doesn't guarantee an exploration order for the graph. Only recursive 33349da0fa4SScott Kruger# if there is something to be done. 33449da0fa4SScott Krugeralltest-rm := $(foreach pkg, $(pkgs), $(foreach lang, $(testlangs), test-rm-$(pkg).$(lang))) 33549da0fa4SScott Kruger$(alltest-rm) : test-rm-% : test-% 33649da0fa4SScott Krugerifneq ($(NO_RM),1) 33749da0fa4SScott Kruger $(call quiet,RM) $(addprefix $(TESTDIR)/,$(basename $($(@:test-rm-%=testsrcs-%)))) 33849da0fa4SScott Krugerendif 33949da0fa4SScott Kruger 34049da0fa4SScott Kruger# Remove intermediate .o files 34149da0fa4SScott Kruger# This only removes the files at the end which is insufficient 34249da0fa4SScott Kruger#.INTERMEDIATE: $(testsrcs.o:%.o=%) 34349da0fa4SScott Kruger 34449da0fa4SScott Kruger# all sources should get recompiled when petscvariables changes (i.e when configure is rerun or when petscvariables is manually edited.) 34549da0fa4SScott Kruger$(testsrcs.o) : $(petscvariables) 34649da0fa4SScott Kruger 34749da0fa4SScott Kruger%/.DIR : 34849da0fa4SScott Kruger @mkdir -p $(@D) 34949da0fa4SScott Kruger @touch $@ 35049da0fa4SScott Kruger 35149da0fa4SScott Kruger.PRECIOUS: %/.DIR 35249da0fa4SScott Kruger 35349da0fa4SScott Kruger.SUFFIXES: # Clear .SUFFIXES because we don't use implicit rules 35449da0fa4SScott Kruger.DELETE_ON_ERROR: # Delete likely-corrupt target file if rule fails 35549da0fa4SScott Kruger 35637ed16bcSStefano Zampini.PHONY: clean cleantest all 35749da0fa4SScott Kruger 35849da0fa4SScott Krugercleantest: 35949da0fa4SScott Kruger ${RM} -r $(TESTDIR) $(generatedtest) 36049da0fa4SScott Kruger 36149da0fa4SScott Krugerclean: cleantest 36249da0fa4SScott Kruger 36349da0fa4SScott Krugeralltest.d := $(testsrcs.o:%.o=%.d) 36449da0fa4SScott Kruger# Tell make that alltest.d are all up to date. Without this, the include 36549da0fa4SScott Kruger# below has quadratic complexity, taking more than one second for a 36649da0fa4SScott Kruger# do-nothing build of PETSc (much worse for larger projects) 36749da0fa4SScott Kruger$(alltest.d) : ; 36849da0fa4SScott Kruger 36949da0fa4SScott Kruger-include $(alltest.d) 37049da0fa4SScott Kruger 37163cf4119SScott Kruger# Tests can be generated by searching -- see documentation below 372c9625024SScott Krugershowreport= 37385bc9deeSScott Krugerifndef searchin 37485bc9deeSScott Kruger searchin = " " 37585bc9deeSScott Krugerendif 37685bc9deeSScott Krugerifdef i 37785bc9deeSScott Kruger searchin = $(i) 37885bc9deeSScott Krugerendif 37958da34e9SJed Brownifdef gs 38058da34e9SJed Brown gmakesearch = $(gs) 38158da34e9SJed Brownendif 38263cf4119SScott Krugerifdef gmakesearch 383848cfe54SJed Brown TESTTARGETS := $(filter $(gmakesearch),$(alltesttargets)) 38485bc9deeSScott Kruger ifdef gmakesearchin 38585bc9deeSScott Kruger TESTTARGETS2 := $(foreach v,$(TESTTARGETS),$(if $(findstring $(gmakesearchin),$(v)),$(v))) 38649da0fa4SScott Kruger TESTTARGETS := $(TESTTARGETS2) 38749da0fa4SScott Kruger endif 38885bc9deeSScott Krugerelse ifdef gmakesearchin 38985bc9deeSScott Kruger TESTTARGETS := $(foreach v,$(alltesttargets),$(if $(findstring $(gmakesearchin),$(v)),$(v))) 39049da0fa4SScott Krugerelse ifdef argsearch 39149da0fa4SScott Kruger TESTTARGETS := $(foreach v,$(alltesttargets),$(if $(findstring $(argsearch),$($(v)_ARGS)),$(v))) 39263cf4119SScott Krugerelse ifdef search 3939ea87190SJacob Faibussowitsch TESTTARGETS := $(shell $(PYTHON) $(CONFIGDIR)/query_tests.py --testdir=$(TESTDIR) --petsc-dir=$(PETSC_DIR) --petsc-arch=$(PETSC_ARCH) --searchin=$(searchin) 'name' '$(search)') 39463cf4119SScott Krugerelse ifdef s 3959ea87190SJacob Faibussowitsch TESTTARGETS := $(shell $(PYTHON) $(CONFIGDIR)/query_tests.py --testdir=$(TESTDIR) --petsc-dir=$(PETSC_DIR) --petsc-arch=$(PETSC_ARCH) --searchin=$(searchin) 'name' '$(s)') 396feeaa4f6SScott Krugerelse ifdef test-fail 397f1f6c4e6SStefano Zampini TESTTARGETS := $(shell $(TESTDIR)/echofailures.sh) 3986f5e9bd5SScott Krugerelse ifdef query 3999ea87190SJacob Faibussowitsch TESTTARGETS := $(shell $(PYTHON) $(CONFIGDIR)/query_tests.py --testdir=$(TESTDIR) --petsc-dir=$(PETSC_DIR) --petsc-arch=$(PETSC_ARCH) --searchin=$(searchin) '$(query)' '$(queryval)') 40085bc9deeSScott Krugerelse ifdef q 4019ea87190SJacob Faibussowitsch TESTTARGETS := $(shell $(PYTHON) $(CONFIGDIR)/query_tests.py --testdir=$(TESTDIR) --petsc-dir=$(PETSC_DIR) --petsc-arch=$(PETSC_ARCH) --searchin=$(searchin) '$(q)' '$(qv)') 40249da0fa4SScott Krugerelse # No filter - run them all, but delete the executables as we go 40349da0fa4SScott Kruger TESTTARGETS := $(testpkgs) 404f42deef9SScott Kruger ifneq ($(PRINTONLY),1) 405c9625024SScott Kruger showreport = "-s" # Only show full report when all tests are run 406f42deef9SScott Kruger endif 40749da0fa4SScott Krugerendif 40849da0fa4SScott Kruger 40949da0fa4SScott Kruger.PHONY: report_tests print-test 41049da0fa4SScott Kruger 41149da0fa4SScott Krugerprint-test: 4125b6dee57SScott Kruger $(info $(TESTTARGETS)) 4135b6dee57SScott Kruger @true 41449da0fa4SScott Kruger 4156e5deea7SScott Krugershow-fail: 416b711b6a4SScott Kruger -@$(PYTHON) $(CONFIGDIR)/report_tests.py -d $(TESTDIR)/counts -f 417b711b6a4SScott Kruger 4186e5deea7SScott Kruger 4196e5deea7SScott Kruger 420c01c7e64SJed Brown# Don't start running tests until starttime has completed 421c01c7e64SJed Brown$(alltesttargets:%=$(TESTDIR)/counts/%.counts) : starttime 422c01c7e64SJed Brown 423c01c7e64SJed Brown# Ensure that libpetsc (if it is a prerequisite) has been built and clean the counts/logs before starting timer 4247cb68e74SVaclav Haplastarttime: pre-clean $(libpetscall) macos-firewall-register-mpiexec 42527d73d1fSBarry Smith @$(eval STARTTIME := $(shell date +%s)) 42627d73d1fSBarry Smith 42727d73d1fSBarry Smithreport_tests: starttime $(TESTTARGETS) 42832f4009dSScott Kruger @$(eval ENDTIME := $(shell date +%s)) 429c9625024SScott Kruger -@ elapsed_time=$$(($(ENDTIME)- $(STARTTIME))) && \ 430c9625024SScott Kruger $(PYTHON) $(CONFIGDIR)/report_tests.py -m $(MAKE) -d $(TESTDIR)/counts -t 5 -e $${elapsed_time} $(showreport) 43149da0fa4SScott Kruger 4325e361860SScott Krugercheck_output: 4338d5d1ea2SBarry Smith $(PYTHON) $(CONFIGDIR)/gmakegentest.py --petsc-dir=$(PETSC_DIR) --petsc-arch=$(PETSC_ARCH) --testdir=$(TESTDIR) --srcdir $(TESTSRCDIR) --pkg-pkgs "$(pkgs)" --check-output 4345e361860SScott Kruger 43540a841f6SBarry Smith# If users make is a gnumake then these messages are provided even if the user does not do make -f gmakefile.test 43649da0fa4SScott KrugerHASGMAKEFILE := $(filter gmakefile,$(MAKEFILE_LIST)) 43749da0fa4SScott Krugerifeq ($(HASGMAKEFILE),gmakefile) 43840a841f6SBarry Smithhelpdeps:= help-nontest 43949da0fa4SScott Krugerelse 44040a841f6SBarry Smithhelpdeps:= help-test 44149da0fa4SScott Krugerendif 44249da0fa4SScott Kruger 44340a841f6SBarry Smithhelp: help-make ${helpdeps} 44440a841f6SBarry Smith -@echo "" 44549da0fa4SScott Kruger 44649da0fa4SScott Krugerhelp-make: 44749da0fa4SScott Kruger -@echo 44886a7890dSBarry Smith -@echo "PETSc makefile Basic usage:" 449fff3f5faSBarry Smith -@echo " ${OMAKE} rule <V=1 for verbose output> <other options>" 45049da0fa4SScott Kruger -@echo 45149da0fa4SScott Kruger 45240a841f6SBarry Smithhelp-nontest: 45340a841f6SBarry Smith -@echo "Available rules:" 45440a841f6SBarry Smith -@echo " all - build (update) the PETSc and related libraries in parallel" 45540a841f6SBarry Smith -@echo " libs - build (update) the PETSc and related libraries" 45640a841f6SBarry Smith -@echo " check - run a basic check that the libraries are built correctly and can be used" 45740a841f6SBarry Smith -@echo " " 458*fb8b7a66SBarry Smith -@echo " getversion - print the PETSc version, or $PETSC_DIR/lib/petsc/bin/petscversion" 45991746516SBarry Smith -@echo " getmpiexec - print the mpiexec to use to run PETSc programs" 46040a841f6SBarry Smith -@echo " getlinklibs - print the libraries that a PETSc application must link against" 46140a841f6SBarry Smith -@echo " getincludedirs - print the include directories that a PETSc application must be compiled against" 46240a841f6SBarry Smith -@echo " getcflags - print the C compiler flags PETSc is using" 46340a841f6SBarry Smith -@echo " getcxxflags - print the C++ compiler flags PETSc is using" 46440a841f6SBarry Smith -@echo " getfortranflags - print the Fortran compiler flags PETSc is using" 46540a841f6SBarry Smith -@echo " " 466ea34bbbbSJose E. Roman -@echo " petsc4pytest - run the entire petsc4py test suite" 46740a841f6SBarry Smith -@echo " alltests - run the entire PETSc test suite" 4684c512586SBarry Smith -@echo " test - use \"make help-test\" for help on running the extensive tests" 46949da0fa4SScott Kruger -@echo 47040a841f6SBarry Smith -@echo "Developer rules:" 4714c512586SBarry Smith -@echo " docs - build all the PETSc documentation locally as a website" 47293583aefSBarry Smith -@echo " clean - delete libraries and Fortran module files (used in $PETSC_DIR)" 473145b44c9SPierre Jolivet -@echo " delete compiled examples, .o and related files (used in tutorials or test directories)" 47440a841f6SBarry Smith -@echo " clangformat - run clangformat on the PETSc C/C++ source code" 4754015d3b1SBarry Smith -@echo " clang-tidy - run clang-tidy on the PETSc C code" 47640a841f6SBarry Smith -@echo " allfortranstubs - regenerate Fortran stubs/interface definitions, needed after git pulls or source code changes" 47740a841f6SBarry Smith -@echo " deletefortranstubs - delete the generated Fortran stubs/interface definitions" 47840a841f6SBarry Smith -@echo " checkbadSource - check the source code for violations of coding standards" 47940a841f6SBarry Smith -@echo " abitest - Compare ABI/API of two versions of PETSc library with the old one defined by PETSC_{DIR,ARCH}_ABI_OLD" 48040a841f6SBarry Smith -@echo " reconfigure - delete libraries and Fortran module files and run the previously run configure again" 48186a7890dSBarry Smith -@echo " lint - run lint on the source code, including its embedded documentation" 482fff3f5faSBarry Smith -@echo " Run \"${OMAKE} help-lint\" for lint options" 48386a7890dSBarry Smith -@echo " " 48486a7890dSBarry Smith -@echo "Building website: (run in the doc directory)" 48586a7890dSBarry Smith -@cd doc; ${OMAKE} help 48640a841f6SBarry Smith -@echo " " 48749da0fa4SScott Kruger 48849da0fa4SScott Krugerhelp-test: 48940a841f6SBarry Smith -@echo "Test usage:" 490fff3f5faSBarry Smith -@echo " ${OMAKE} test <options>" 49149da0fa4SScott Kruger -@echo 49249da0fa4SScott Kruger -@echo "Options:" 49349da0fa4SScott Kruger -@echo " NO_RM=1 Do not remove the executables after running" 494f50802fbSScott Kruger -@echo " REPLACE=1 Replace the output in PETSC_DIR source tree (-m to test scripts)" 4955e361860SScott Kruger -@echo " OUTPUT=1 Show only the errors on stdout" 496f50802fbSScott Kruger -@echo " ALT=1 Replace 'alt' output in PETSC_DIR source tree (-M to test scripts)" 49749da0fa4SScott Kruger -@echo " DIFF_NUMBERS=1 Diff the numbers in the output (-j to test scripts and petscdiff)" 498baa5c0f4SScott Kruger -@echo " CUDAMEMCHECK=1 Execute the tests using cuda-memcheck (-U to test scripts)" 499636bfc99SJacob Faibussowitsch -@echo " Use PETSC_CUDAMEMCHECK_COMMAND to change the executable to run and" 500636bfc99SJacob Faibussowitsch -@echo " PETSC_CUDAMEMCHECK_ARGS to change the arguments (note: both" 501636bfc99SJacob Faibussowitsch -@echo " cuda-memcheck and compute-sanitizer are supported)" 50249da0fa4SScott Kruger -@echo " VALGRIND=1 Execute the tests using valgrind (-V to test scripts)" 50385bc9deeSScott Kruger -@echo " DEBUG=1 Launch tests in the debugger (-d to the scripts)" 504142b82d2SScott Kruger -@echo " NP=<num proc> Set a number of processors to pass to scripts." 505142b82d2SScott Kruger -@echo " FORCE=1 Force SKIP or TODO tests to run" 506a6f3f80dSScott Kruger -@echo " PRINTONLY=1 Print the command, but do not run. For loops print first command" 507142b82d2SScott Kruger -@echo " TIMEOUT=<time> Test timeout limit in seconds (default in config/petsc_harness.sh)" 508f50802fbSScott Kruger -@echo " TESTDIR='tests' Subdirectory where tests are run ($${PETSC_DIR}/$${PETSC_ARCH}/$${TESTDIR}" 50949da0fa4SScott Kruger -@echo " or $${PREFIX_DIR}/$${TESTDIR}" 51049da0fa4SScott Kruger -@echo " or $${PREFIX_DIR}/share/petsc/examples/$${TESTDIR})" 5114ff3c6a1SScott Kruger -@echo " TESTBASE='tests' Subdirectory where tests are run ($${PETSC_DIR}/$${PETSC_ARCH}/$${TESTDIR}" 51249da0fa4SScott Kruger -@echo " OPTIONS='<args>' Override options to scripts (-a to test scripts)" 51349da0fa4SScott Kruger -@echo " EXTRA_OPTIONS='<args>' Add options to scripts (-e to test scripts)" 51449da0fa4SScott Kruger -@echo 5150b148140SVaclav Hapla -@echo "Special options for macOS:" 5160b148140SVaclav Hapla -@echo " MACOS_FIREWALL=1 Add each built test to the macOS firewall list to prevent popups. Configure --with-macos-firewall-rules to make this default" 5170b148140SVaclav Hapla -@echo 51863cf4119SScott Kruger -@echo "Tests can be generated by searching with multiple methods" 5192869a97aSJose E. Roman -@echo " For general searching (using config/query_tests.py):" 520fff3f5faSBarry Smith -@echo " ${OMAKE} test search='sys*ex2*'" 52163cf4119SScott Kruger -@echo " or the shortcut using s" 522fff3f5faSBarry Smith -@echo " ${OMAKE} test s='sys*ex2*'" 52385bc9deeSScott Kruger -@echo " You can also use the full path to a file directory" 524fff3f5faSBarry Smith -@echo " ${OMAKE} test s='src/sys/tests/'" 52584533492SBarry Smith -@echo " or a file" 52684533492SBarry Smith -@echo " ${OMAKE} test s='src/sys/tests/ex1.c'" 527feeaa4f6SScott Kruger -@echo 5286f5e9bd5SScott Kruger -@echo " To search for fields from the original test definitions:" 529fff3f5faSBarry Smith -@echo " ${OMAKE} test query='requires' queryval='*MPI_PROCESS_SHARED_MEMORY*'" 53085bc9deeSScott Kruger -@echo " or the shortcut using q and qv" 531fff3f5faSBarry Smith -@echo " ${OMAKE} test q='requires' qv='*MPI_PROCESS_SHARED_MEMORY*'" 53285bc9deeSScott Kruger -@echo " To filter results from other searches, use searchin" 533fff3f5faSBarry Smith -@echo " ${OMAKE} test s='src/sys/tests/' searchin='*options*'" 53463cf4119SScott Kruger -@echo 53563cf4119SScott Kruger -@echo " To re-run the last tests which failed:" 536fff3f5faSBarry Smith -@echo " ${OMAKE} test test-fail='1'" 53763cf4119SScott Kruger -@echo 53849da0fa4SScott Kruger -@echo " To see which targets match a given pattern (useful for doing a specific target):" 539fff3f5faSBarry Smith -@echo " ${OMAKE} print-test search=sys*" 54049da0fa4SScott Kruger -@echo 54149da0fa4SScott Kruger -@echo " To build an executable, give full path to location:" 542fff3f5faSBarry Smith -@echo ' ${OMAKE} $${PETSC_ARCH}/tests/sys/tests/ex1' 54349da0fa4SScott Kruger -@echo " or make the test with NO_RM=1" 54449da0fa4SScott Kruger -@echo 54540a841f6SBarry Smith 54640a841f6SBarry Smithhelp-targets: 54740a841f6SBarry Smith -@echo "All makefile targets and their dependencies:" 54840a841f6SBarry Smith -@grep ^[a-z] ${makefile} | grep : | grep -v = 54940a841f6SBarry Smith -@echo 550