10006be33SJames WrightCONFIG ?= config.mk 2066464baSJames Wright-include $(CONFIG) 30006be33SJames WrightCOMMON ?= common.mk 44f863122SJeremy L Thompson-include $(COMMON) 54f863122SJeremy L Thompson 60006be33SJames Wrightpkgconf-path = $(if $(wildcard $(1)/$(2).pc),$(1)/$(2).pc,$(2)) 7ea10196cSJeremy L Thompson 80006be33SJames Wright# Library dependencies 90006be33SJames Wright# Note: PETSC_ARCH can be undefined or empty for installations which do not use 100006be33SJames Wright# PETSC_ARCH - for example when using PETSc installed through Spack. 110006be33SJames Wrightifneq ($(wildcard ../petsc/lib/libpetsc.*),) 120006be33SJames Wright PETSC_DIR ?= ../petsc 130006be33SJames Wrightendif 140006be33SJames Wrightpetsc.pc := $(call pkgconf-path,$(PETSC_DIR)/$(PETSC_ARCH)/lib/pkgconfig,petsc) 150006be33SJames Wright 160006be33SJames WrightCEED_DIR ?= $(if $(wildcard $(PETSC_DIR)/$(PETSC_ARCH)/lib/pkgconfig/ceed.pc),$(PETSC_DIR)/$(PETSC_ARCH),../libCEED) 170006be33SJames Wrightceed.pc := $(call pkgconf-path,$(CEED_DIR)/lib/pkgconfig,ceed) 180006be33SJames Wright 19a39fefe2SJeremy L Thompsonpkgconf = $(shell pkg-config $(if $(STATIC),--static) $1 | $(SED) -e 's/^"//g' -e 's/"$$//g') 200006be33SJames Wright 210006be33SJames Wright# Error checking flags 220006be33SJames WrightPEDANTIC ?= 230006be33SJames WrightPEDANTICFLAGS ?= -Werror -pedantic 240006be33SJames Wright 250006be33SJames WrightCC = $(call pkgconf, --variable=ccompiler $(petsc.pc) $(ceed.pc)) 26a515125bSLeila GhaffariCFLAGS = -std=c99 \ 270006be33SJames Wright $(call pkgconf, --variable=cflags_extra $(petsc.pc)) \ 280006be33SJames Wright $(call pkgconf, --cflags-only-other $(petsc.pc)) \ 290006be33SJames Wright $(OPT) 300006be33SJames WrightCPPFLAGS = $(call pkgconf, --cflags-only-I $(petsc.pc) $(ceed.pc)) \ 310006be33SJames Wright $(call pkgconf, --variable=cflags_dep $(petsc.pc)) 320006be33SJames WrightCXX = $(call pkgconf, --variable=cxxcompiler $(petsc.pc) $(ceed.pc)) 334c07ec22SJames WrightCXXFLAGS = -std=c++17 -Wno-deprecated -Wno-tautological-compare 340006be33SJames WrightLDFLAGS = $(call pkgconf, --libs-only-L --libs-only-other $(petsc.pc) $(ceed.pc)) 350006be33SJames WrightLDFLAGS += $(patsubst -L%, $(call pkgconf, --variable=ldflag_rpath $(petsc.pc))%, $(call pkgconf, --libs-only-L $(petsc.pc) $(ceed.pc))) 360006be33SJames WrightLDLIBS = $(call pkgconf, --libs-only-l $(petsc.pc) $(ceed.pc)) -lm -lstdc++ 37ea10196cSJeremy L Thompson 384c07ec22SJames Wright# ASAN must be left empty if you don't want to use it 394c07ec22SJames WrightASAN ?= 400006be33SJames Wright 414c07ec22SJames WrightAFLAGS ?= -fsanitize=address 427df379d9SJames WrightCFLAGS += $(if $(ASAN),$(AFLAGS)) 437df379d9SJames WrightFFLAGS += $(if $(ASAN),$(AFLAGS)) 447df379d9SJames WrightLDFLAGS += $(if $(ASAN),$(AFLAGS)) 450006be33SJames Wright 4645101827SJames WrightCPPFLAGS += -I./include 477df379d9SJames Wright 48a39fefe2SJeremy L Thompson# External tools 49a39fefe2SJeremy L ThompsonPYTHON ?= python3 50a39fefe2SJeremy L ThompsonSED ?= sed 51a39fefe2SJeremy L Thompson 524c07ec22SJames Wright# LibTorch 534c07ec22SJames WrightUSE_TORCH ?= 544c07ec22SJames Wrightifeq ($(USE_TORCH),1) 55a39fefe2SJeremy L Thompson libtorch.pc := $(shell $(PYTHON) ./pytorch_pkgconfig.py) 564c07ec22SJames Wright CPPFLAGS += $(call pkgconf, --cflags-only-I $(libtorch.pc)) 574c07ec22SJames Wright CXXFLAGS += $(call pkgconf, --cflags-only-other $(libtorch.pc)) 584c07ec22SJames Wright LDFLAGS += $(call pkgconf, --libs-only-L --libs-only-other $(libtorch.pc)) 590006be33SJames Wright LDFLAGS += $(patsubst -L%, $(call pkgconf, --variable=ldflag_rpath $(petsc.pc))%, $(call pkgconf, --libs-only-L $(libtorch.pc))) 604c07ec22SJames Wright LDLIBS += $(call pkgconf, --libs-only-l $(libtorch.pc)) 614c07ec22SJames Wright 624c07ec22SJames Wright src.cpp += $(sort $(wildcard $(PROBLEMDIR)/torch/*.cpp)) 634c07ec22SJames Wright src.c += $(sort $(wildcard $(PROBLEMDIR)/torch/*.c)) 644c07ec22SJames Wright 654c07ec22SJames Wright # Intel Pytorch EXtension (IPEX) 664c07ec22SJames Wright IPEX_DIR ?= 674c07ec22SJames Wright ifdef IPEX_DIR 684c07ec22SJames Wright LDFLAGS += -L$(IPEX_DIR)/lib/ 694c07ec22SJames Wright LDFLAGS += -Wl,-rpath,$(IPEX_DIR)/lib/ 704c07ec22SJames Wright LDLIBS += -lintel-ext-pt-gpu 714c07ec22SJames Wright endif 724c07ec22SJames Wrightendif 734c07ec22SJames Wright 744c07ec22SJames Wright# Source Files 75a515125bSLeila GhaffariOBJDIR := build 76a515125bSLeila GhaffariSRCDIR := src 77a515125bSLeila GhaffariPROBLEMDIR := problems 78ea10196cSJeremy L Thompson 79dae7673aSJames Wrightsrc.c := examples/navierstokes.c $(filter-out $(wildcard **/smartsim/*), $(sort $(wildcard $(PROBLEMDIR)/*.c)) $(sort $(wildcard $(SRCDIR)/*.c)) $(sort $(wildcard $(SRCDIR)/**/*.c))) 804c07ec22SJames Wrightsrc.o = $(src.c:%.c=$(OBJDIR)/%.o) $(src.cpp:%.cpp=$(OBJDIR)/%.o) 81a515125bSLeila Ghaffari 829e6f9b5eSJames Wright# Path to install directory for SmartRedis. Example: /software/smartredis/install 839e6f9b5eSJames WrightSMARTREDIS_DIR ?= 849e6f9b5eSJames Wrightifdef SMARTREDIS_DIR 8548969772SJames Wright CPPFLAGS += -I$(SMARTREDIS_DIR)/include 8648969772SJames Wright LDFLAGS += -L$(SMARTREDIS_DIR)/lib $(call pkgconf, --variable=ldflag_rpath $(petsc.pc))$(SMARTREDIS_DIR)/lib 8748969772SJames Wright LDLIBS += -lsmartredis 889e6f9b5eSJames Wright src.c += $(sort $(wildcard $(SRCDIR)/smartsim/*.c)) 899e6f9b5eSJames Wrightendif 902120e86cSJeremy L Thompson 91947fa354SJeremy L Thompsonall: navierstokes 922120e86cSJeremy L Thompson 932120e86cSJeremy L Thompson# Diagnostic information 942120e86cSJeremy L Thompsoninfo-basic: 952120e86cSJeremy L Thompson $(info -----------------------------------------) 962120e86cSJeremy L Thompson $(info | __ ______ _ ______________ |) 972120e86cSJeremy L Thompson $(info | / / / / __ \/ | / / ____/ ____/ |) 982120e86cSJeremy L Thompson $(info | / /_/ / / / / |/ / __/ / __/ |) 992120e86cSJeremy L Thompson $(info | / __ / /_/ / /| / /___/ /___ |) 1002120e86cSJeremy L Thompson $(info | /_/ /_/\____/_/ |_/_____/_____/ |) 1012120e86cSJeremy L Thompson $(info -----------------------------------------) 1022120e86cSJeremy L Thompson $(info ) 1032120e86cSJeremy L Thompson $(info -----------------------------------------) 1042120e86cSJeremy L Thompson $(info ) 1052120e86cSJeremy L Thompson $(info Dependencies:) 1062120e86cSJeremy L Thompson $(info CEED_DIR = $(CEED_DIR)) 1072120e86cSJeremy L Thompson $(info PETSC_DIR = $(PETSC_DIR)) 1082120e86cSJeremy L Thompson $(info PETSC_ARCH = $(PETSC_ARCH)) 1092120e86cSJeremy L Thompson $(info ) 1102120e86cSJeremy L Thompson $(info Optional Dependencies:) 1112120e86cSJeremy L Thompson $(info SMARTREDIS_DIR = $(or $(SMARTREDIS_DIR),(not found))) 1122120e86cSJeremy L Thompson $(info USE_TORCH = $(USE_TORCH)) 1132120e86cSJeremy L Thompson $(info ) 1142120e86cSJeremy L Thompson $(info -----------------------------------------) 1152120e86cSJeremy L Thompson $(info ) 1162120e86cSJeremy L Thompson @true 1172120e86cSJeremy L Thompson 1182120e86cSJeremy L Thompsoninfo: 1192120e86cSJeremy L Thompson $(info -----------------------------------------) 1202120e86cSJeremy L Thompson $(info | __ ______ _ ______________ |) 1212120e86cSJeremy L Thompson $(info | / / / / __ \/ | / / ____/ ____/ |) 1222120e86cSJeremy L Thompson $(info | / /_/ / / / / |/ / __/ / __/ |) 1232120e86cSJeremy L Thompson $(info | / __ / /_/ / /| / /___/ /___ |) 1242120e86cSJeremy L Thompson $(info | /_/ /_/\____/_/ |_/_____/_____/ |) 1252120e86cSJeremy L Thompson $(info -----------------------------------------) 1262120e86cSJeremy L Thompson $(info ) 1272120e86cSJeremy L Thompson $(info -----------------------------------------) 1282120e86cSJeremy L Thompson $(info ) 1292120e86cSJeremy L Thompson $(info Dependencies:) 1302120e86cSJeremy L Thompson $(info CEED_DIR = $(CEED_DIR)) 1312120e86cSJeremy L Thompson $(info PETSC_DIR = $(PETSC_DIR)) 1322120e86cSJeremy L Thompson $(info PETSC_ARCH = $(PETSC_ARCH)) 1332120e86cSJeremy L Thompson $(info ) 1342120e86cSJeremy L Thompson $(info Optional Dependencies:) 1352120e86cSJeremy L Thompson $(info SMARTREDIS_DIR = $(or $(SMARTREDIS_DIR),(not found))) 1362120e86cSJeremy L Thompson $(info USE_TORCH = $(USE_TORCH)) 1372120e86cSJeremy L Thompson $(info ) 1382120e86cSJeremy L Thompson $(info -----------------------------------------) 1392120e86cSJeremy L Thompson $(info ) 1402120e86cSJeremy L Thompson $(info Build Options:) 1412120e86cSJeremy L Thompson $(info CC = $(CC)) 1422120e86cSJeremy L Thompson $(info CFLAGS = $(CFLAGS)) 1432120e86cSJeremy L Thompson $(info CPPFLAGS = $(CPPFLAGS)) 1442120e86cSJeremy L Thompson $(info LDFLAGS = $(LDFLAGS)) 1452120e86cSJeremy L Thompson $(info LDLIBS = $(LDLIBS)) 1462120e86cSJeremy L Thompson $(info AR = $(AR)) 1472120e86cSJeremy L Thompson $(info ARFLAGS = $(ARFLAGS)) 1482120e86cSJeremy L Thompson $(info OPT = $(OPT)) 1492120e86cSJeremy L Thompson $(info AFLAGS = $(AFLAGS)) 1502120e86cSJeremy L Thompson $(info ASAN = $(or $(ASAN),(empty))) 1512120e86cSJeremy L Thompson $(info VERBOSE = $(or $(V),(empty)) [verbose=$(if $(V),on,off)]) 1522120e86cSJeremy L Thompson $(info ) 1532120e86cSJeremy L Thompson $(info -----------------------------------------) 1542120e86cSJeremy L Thompson $(info ) 1552120e86cSJeremy L Thompson $(info Format and Style Options:) 1562120e86cSJeremy L Thompson $(info CLANG_FORMAT = $(CLANG_FORMAT)) 1572120e86cSJeremy L Thompson $(info FORMAT_OPTS = $(FORMAT_OPTS)) 1582120e86cSJeremy L Thompson $(info CLANG_TIDY = $(CLANG_TIDY)) 1592120e86cSJeremy L Thompson $(info TIDY_OPTS = $(TIDY_OPTS)) 1602120e86cSJeremy L Thompson $(info TIDY_FILE_OPTS = $(TIDY_FILE_OPTS)) 1612120e86cSJeremy L Thompson $(info ) 1622120e86cSJeremy L Thompson $(info -----------------------------------------) 1632120e86cSJeremy L Thompson $(info ) 164a5677b81SMohi $(info Git:) 165a5677b81SMohi $(info describe = $(GIT_DESCRIBE)) 166a5677b81SMohi $(info ) 167a5677b81SMohi $(info -----------------------------------------) 168a5677b81SMohi $(info ) 1692120e86cSJeremy L Thompson @true 1709e6f9b5eSJames Wright 171d9688174SJeremy L Thompson# Get number of processors of the machine 172d9688174SJeremy L ThompsonNPROCS := $(shell getconf _NPROCESSORS_ONLN) 173d9688174SJeremy L Thompson# prepare make options to run in parallel 174d9688174SJeremy L ThompsonMFLAGS := -j $(NPROCS) --warn-undefined-variables \ 175d9688174SJeremy L Thompson --no-print-directory --no-keep-going 176d9688174SJeremy L Thompson 1770006be33SJames Wright$(OBJDIR)/navierstokes: $(src.o) | navierstokes 1780006be33SJames Wrightnavierstokes: $(src.o) | $(petsc.pc) $(ceed.pc) 1790006be33SJames Wright $(call quiet,LINK.o) $(LDFLAGS) $^ $(LOADLIBES) $(LDLIBS) -o $(OBJDIR)/$@ 180a515125bSLeila Ghaffari 181a515125bSLeila Ghaffari.SECONDEXPANSION: # to expand $$(@D)/.DIR 182a515125bSLeila Ghaffari%/.DIR : 183a515125bSLeila Ghaffari @mkdir -p $(@D) 184a515125bSLeila Ghaffari @touch $@ 185ea10196cSJeremy L Thompson 1864f863122SJeremy L Thompson# Quiet, color output 1874f863122SJeremy L Thompsonquiet ?= $($(1)) 1884f863122SJeremy L Thompson 189a5677b81SMohi# Inject Git/version macros when compiling honee-version.c 1902ef6950eSJames WrightGIT_DESCRIBE := $(shell git -c safe.directory=$PWD describe --always --dirty 2>/dev/null || printf "unknown\n") 191a5677b81SMohi 192a5677b81SMohi$(OBJDIR)/src/honee-config.o: Makefile 193a5677b81SMohi$(OBJDIR)/src/honee-config.o src/honee-config.c.tidy: CONFIGFLAGS += -DHONEE_GIT_VERSION="\"$(GIT_DESCRIBE)\"" 194a5677b81SMohi$(OBJDIR)/src/honee-config.o src/honee-config.c.tidy: CONFIGFLAGS += -DHONEE_BUILD_CONFIGURATION="\"// Build Configuration:$(foreach v,$(CONFIG_VARS),\n$(v) = $($(v)))\"" 195a5677b81SMohi 196b03da087SJames Wright$(OBJDIR)/%.o : %.c | $$(@D)/.DIR 197a5677b81SMohi $(call quiet,CC) $(CPPFLAGS) $(CFLAGS) $(CONFIGFLAGS) -c -o $@ $(abspath $<) 198a515125bSLeila Ghaffari 199b03da087SJames Wright$(OBJDIR)/%.o : %.cpp | $$(@D)/.DIR 2004c07ec22SJames Wright $(call quiet,CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(abspath $<) 2014c07ec22SJames Wright 2020006be33SJames Wrightprint: $(petsc.pc) $(ceed.pc) 203ea10196cSJeremy L Thompson $(info CC : $(CC)) 204ea10196cSJeremy L Thompson $(info CFLAGS : $(CFLAGS)) 205ea10196cSJeremy L Thompson $(info CPPFLAGS: $(CPPFLAGS)) 206ea10196cSJeremy L Thompson $(info LDFLAGS : $(LDFLAGS)) 207ea10196cSJeremy L Thompson $(info LDLIBS : $(LDLIBS)) 208ea10196cSJeremy L Thompson $(info OPT : $(OPT)) 209ea10196cSJeremy L Thompson @true 210ea10196cSJeremy L Thompson 2110e8fe9d5SJames Wrightprint-% : 2120e8fe9d5SJames Wright $(info [ variable name]: $*) 2130e8fe9d5SJames Wright $(info [ origin]: $(origin $*)) 2140e8fe9d5SJames Wright $(info [ flavor]: $(flavor $*)) 2150e8fe9d5SJames Wright $(info [ value]: $(value $*)) 2160e8fe9d5SJames Wright $(info [expanded value]: $($*)) 2170e8fe9d5SJames Wright $(info ) 2180e8fe9d5SJames Wright @true 2190e8fe9d5SJames Wright 220ea10196cSJeremy L Thompsonclean: 221a515125bSLeila Ghaffari $(RM) -r $(OBJDIR) navierstokes *.vtu *.bin* *.csv *.png 222ea10196cSJeremy L Thompson 2230006be33SJames Wright$(petsc.pc): 224ea10196cSJeremy L Thompson $(if $(wildcard $@),,$(error \ 225ea10196cSJeremy L Thompson PETSc config not found. Please set PETSC_DIR and PETSC_ARCH)) 226ea10196cSJeremy L Thompson 227ea10196cSJeremy L Thompson.PHONY: all print clean 228ea10196cSJeremy L Thompson 229aa34f9e7SJames Wright# Define test files 230149fb536SJames Wrightexamples.c := $(sort $(wildcard examples/*.c)) 231149fb536SJames Wrightexamples := $(examples.c:examples/%.c=$(OBJDIR)/%) 23267f3e659SJames Wrighttests.smartsim := test-smartsim 23367f3e659SJames Wrighttests += $(tests.smartsim:%=$(OBJDIR)/%) 2340006be33SJames Wright 23567f3e659SJames Wright$(tests.smartsim:%=$(OBJDIR)/%): $(OBJDIR)/navierstokes 2360006be33SJames Wright 237965d9f74SJames Wright# Documentation 238965d9f74SJames WrightDOXYGEN ?= doxygen 239965d9f74SJames WrightDOXYGENOPTS ?= -q 240965d9f74SJames Wrightdoxygen : 241965d9f74SJames Wright $(DOXYGEN) $(DOXYGENOPTS) Doxyfile 242965d9f74SJames Wright 243965d9f74SJames WrightSPHINXOPTS = 244965d9f74SJames WrightSPHINXBUILD = sphinx-build 245965d9f74SJames WrightSPHINXAUTOBUILD = sphinx-autobuild 24667f3e659SJames WrightSPHINXPROJ = HONEE 247965d9f74SJames WrightSPHINXBUILDDIR = doc/build 248965d9f74SJames Wright 249965d9f74SJames Wrightdoc-html doc-dirhtml doc-latexpdf doc-epub doc-help : doc-% : doxygen 250965d9f74SJames Wright @$(SPHINXBUILD) -M $* . "$(SPHINXBUILDDIR)" $(SPHINXOPTS) 251965d9f74SJames Wright 252965d9f74SJames Wrightdoc-livehtml : doxygen 253965d9f74SJames Wright @$(SPHINXAUTOBUILD) . "$(SPHINXBUILDDIR)" $(SPHINXOPTS) 254965d9f74SJames Wright 255965d9f74SJames Wrightdoc : doc-html 256965d9f74SJames Wright 257965d9f74SJames Wrightdoc-clean: 258965d9f74SJames Wright $(RM) -r doc/html doc/build 259965d9f74SJames Wright 260a39fefe2SJeremy L Thompson# Tidy 261a39fefe2SJeremy L ThompsonCLANG_TIDY ?= clang-tidy 262a39fefe2SJeremy L ThompsonTIDY_OPTS ?= --quiet 263a5677b81SMohiTIDY_FILE_OPTS += $(CPPFLAGS) $(CONFIGFLAGS) --std=c99 264a39fefe2SJeremy L Thompson 265a39fefe2SJeremy L Thompson%.c.tidy : %.c 266a39fefe2SJeremy L Thompson $(call quiet,CLANG_TIDY) $(TIDY_OPTS) $^ -- $(TIDY_FILE_OPTS) 267a39fefe2SJeremy L Thompson 268a39fefe2SJeremy L Thompsontidy-c : $(src.c:%=%.tidy) 269a39fefe2SJeremy L Thompson 270a39fefe2SJeremy L Thompsontidy : tidy-c 271a39fefe2SJeremy L Thompson 272a39fefe2SJeremy L Thompson# Style 273a39fefe2SJeremy L ThompsonCLANG_FORMAT ?= clang-format 274a39fefe2SJeremy L ThompsonFORMAT_OPTS += -style=file -i 275a39fefe2SJeremy L ThompsonAUTOPEP8 ?= autopep8 276a39fefe2SJeremy L ThompsonAUTOPEP8_OPTS += --in-place --aggressive --max-line-length 120 277a39fefe2SJeremy L ThompsonSED_FMT_OPTS += -r 's/\s+$$//' -i 278a39fefe2SJeremy L Thompson 279a39fefe2SJeremy L Thompson%.format : % 280a39fefe2SJeremy L Thompson $(call quiet,CLANG_FORMAT) $(FORMAT_OPTS) $^ 281a39fefe2SJeremy L Thompson 28242aed787SJames Wrightformat.ch := $(shell git ls-files '*.[ch]pp' '*.[ch]') 283a39fefe2SJeremy L Thompsonformat.py := $(filter-out tests/junit-xml/junit_xml/__init__.py, $(shell git ls-files '*.py')) 28442aed787SJames Wrightformat.ot := $(shell git ls-files '*.md') 285a39fefe2SJeremy L Thompson 286a39fefe2SJeremy L Thompsonformat-c : 287a39fefe2SJeremy L Thompson $(call quiet,CLANG_FORMAT) $(FORMAT_OPTS) $(format.ch) 288a39fefe2SJeremy L Thompson 289a39fefe2SJeremy L Thompsonformat-py : 290a39fefe2SJeremy L Thompson $(call quiet,AUTOPEP8) $(AUTOPEP8_OPTS) $(format.py) 291a39fefe2SJeremy L Thompson 292a39fefe2SJeremy L Thompsonformat-ot : 293a39fefe2SJeremy L Thompson $(call quiet,SED) $(SED_FMT_OPTS) $(format.ot) 294a39fefe2SJeremy L Thompson 295a39fefe2SJeremy L Thompsonformat : format-c format-py format-ot 296a39fefe2SJeremy L Thompson 2970006be33SJames Wright# Testing 2980006be33SJames Wrightifeq ($(COVERAGE), 1) 2990006be33SJames Wright CFLAGS += --coverage 3000006be33SJames Wright LDFLAGS += --coverage 3010006be33SJames Wrightendif 3020006be33SJames Wright 3030006be33SJames WrightPROVE ?= prove 3040006be33SJames WrightPROVE_OPTS ?= -j $(NPROCS) 3050006be33SJames Wright 3060006be33SJames Wright# Set libCEED backends for testing 3070006be33SJames WrightCEED_BACKENDS ?= /cpu/self 3080006be33SJames Wrightexport CEED_BACKENDS 3090006be33SJames Wright 3100006be33SJames Wright# Set number processes for testing 3110006be33SJames WrightNPROC_TEST ?= 1 3120006be33SJames Wrightexport NPROC_TEST 3130006be33SJames Wright 3140006be33SJames Wright# Set pool size for testing 3150006be33SJames WrightNPROC_POOL ?= 1 3160006be33SJames Wrightexport NPROC_POOL 3170006be33SJames Wright 3180006be33SJames WrightJUNIT_BATCH ?= '' 3190006be33SJames Wright 3200006be33SJames Wrightrun-% : $(OBJDIR)/% 321*e45c6f40SZach Atkins @$(PYTHON) tests/junit.py --ceed-backends $(CEED_BACKENDS) --mode tap $(if $(SMARTREDIS_DIR),--smartredis-dir $(SMARTREDIS_DIR) ) $(if $(USE_TORCH),--has-torch $(USE_TORCH) )--nproc $(NPROC_TEST) --pool-size $(NPROC_POOL) --search '$(subsearch)' $(<:$(OBJDIR)/%=%) 3220006be33SJames Wright 3230006be33SJames Wright# The test and prove targets can be controlled via pattern searches. The default 3240006be33SJames Wright# is to run all tests and examples. Examples of finer grained control: 3250006be33SJames Wright# 3260006be33SJames Wright# make prove search='t3' # t3xx series tests 3270006be33SJames Wright# make junit search='t ex' # core tests and examples 3280006be33SJames Wrightsearch ?= navierstokes 329*e45c6f40SZach Atkinssubsearch ?= .* 3300006be33SJames Wrightrealsearch = $(search:%=%%) 3310006be33SJames Wrightmatched = $(foreach pattern,$(realsearch),$(filter $(OBJDIR)/$(pattern),$(tests) $(examples))) 3320006be33SJames Wright 3330006be33SJames Wright# Test 3340006be33SJames Wrighttest : $(matched:$(OBJDIR)/%=run-%) 3350006be33SJames Wright 3360006be33SJames Wrighttst : ;@$(MAKE) $(MFLAGS) V=$(V) test 3370006be33SJames Wright 3380006be33SJames Wright# Test with TAP output 3390006be33SJames Wrightprove : $(matched) 3400006be33SJames Wright $(info Running unit tests) 3410006be33SJames Wright $(info - Testing with libCEED backends: $(CEED_BACKENDS)) 3420006be33SJames Wright $(info - Testing on $(NPROC_TEST) processes) 343*e45c6f40SZach Atkins $(PROVE) $(PROVE_OPTS) --exec '$(PYTHON) tests/junit.py' $(matched:$(OBJDIR)/%=%) :: --ceed-backends $(CEED_BACKENDS) --mode tap $(if $(SMARTREDIS_DIR),--smartredis-dir $(SMARTREDIS_DIR) ) $(if $(USE_TORCH),--has-torch $(USE_TORCH) )--nproc $(NPROC_TEST) --pool-size $(NPROC_POOL) --search '$(subsearch)' 3440006be33SJames Wright 3450006be33SJames Wrightprv : ;@$(MAKE) $(MFLAGS) V=$(V) prove 3460006be33SJames Wright 3470006be33SJames Wrightprove-all : 3480006be33SJames Wright +$(MAKE) prove realsearch=% 3490006be33SJames Wright 3500006be33SJames Wright# Test with JUNIT output 3510006be33SJames Wrightjunit-% : $(OBJDIR)/% 352*e45c6f40SZach Atkins @printf " %10s %s\n" TEST $(<:$(OBJDIR)/%=%); $(PYTHON) tests/junit.py --junit-batch $(JUNIT_BATCH) --ceed-backends $(CEED_BACKENDS) $(if $(SMARTREDIS_DIR),--smartredis-dir $(SMARTREDIS_DIR) ) $(if $(USE_TORCH),--has-torch $(USE_TORCH) )--nproc $(NPROC_TEST) --pool-size $(NPROC_POOL) --search '$(subsearch)' $(<:$(OBJDIR)/%=%) 3530006be33SJames Wright 3540006be33SJames Wrightjunit : $(matched:$(OBJDIR)/%=junit-%) 3550006be33SJames Wright 3560006be33SJames Wright 3570006be33SJames Wright# Configure 3580006be33SJames Wright# "make configure" detects any variables passed on the command line or 3590006be33SJames Wright# previously set in config.mk, caching them in config.mk as simple 3600006be33SJames Wright# (:=) variables. Variables set in config.mk or on the command line 3610006be33SJames Wright# take precedence over the defaults provided in the file. Typical 3620006be33SJames Wright# usage: 3630006be33SJames Wright# 3640006be33SJames Wright# make configure CC=/path/to/my/cc CUDA_DIR=/opt/cuda 3650006be33SJames Wright# make 3660006be33SJames Wright# make prove 3670006be33SJames Wright# 3680006be33SJames Wright# The values in the file can be updated by passing them on the command 3690006be33SJames Wright# line, e.g., 3700006be33SJames Wright# 3710006be33SJames Wright# make configure CC=/path/to/other/clang 3720006be33SJames Wright 3730006be33SJames Wright# All variables to consider for caching 374362ddf03SJames WrightCONFIG_VARS = CEED_DIR PETSC_DIR PETSC_ARCH OPT CFLAGS CPPFLAGS AR ARFLAGS LDFLAGS LDLIBS SED USE_TORCH SMARTREDIS_DIR 3750006be33SJames Wright 3760006be33SJames Wright# $(call needs_save,CFLAGS) returns true (a nonempty string) if CFLAGS 3770006be33SJames Wright# was set on the command line or in config.mk (where it will appear as 3780006be33SJames Wright# a simple variable). 3790006be33SJames Wrightneeds_save = $(or $(filter command line,$(origin $(1))),$(filter simple,$(flavor $(1)))) 3800006be33SJames Wright 3810006be33SJames Wrightconfigure : 3820006be33SJames Wright $(file > $(CONFIG)) 3830006be33SJames Wright $(foreach v,$(CONFIG_VARS),$(if $(call needs_save,$(v)),$(file >> $(CONFIG),$(v) := $($(v))))) 3840006be33SJames Wright @echo "Configuration cached in $(CONFIG):" 3850006be33SJames Wright @cat $(CONFIG) 386a515125bSLeila Ghaffari 387a515125bSLeila Ghaffari-include $(src.o:%.o=%.d) 388