ninja: build.ninja
ninja
-# Ninja generator - to have faster parallel builds
+# Ninja generator - to have faster parallel builds and tests
.PHONY: build.ninja
build.ninja:
- $(file >$@,$(ninja-rule))
- $(foreach build,$(BUILDS),$(file >>$@,$(call ninja-build,$(build),$(CMAKE_OTPS_$(build)))))
+ @: $(file >$@,$(ninja-rule))
+ $(foreach build,$(BUILDS),\
+ $(file >>$@,$(call ninja-build,$(build),$(CMAKE_OTPS_$(build)))))
+ $(foreach build,$(BUILDS),$(foreach seq,$(TESTSEQ),$(foreach f,$(TESTFLAGS),\
+ $(file >>$@,$(call ninja-testcase,$(build),$(seq),$(f))))))
+ $(file >>$@,build test: print_results $(foreach build,$(BUILDS),$(foreach seq,$(TESTSEQ),$(foreach f,$(TESTFLAGS),$(call ninja-test,$(build),$(seq),$(f))))))
+ $(foreach build,$(BUILDS),$(file >>$@,build test-$(build): print_results $(foreach seq,$(TESTSEQ),$(foreach f,$(TESTFLAGS),$(call ninja-test,$(build),$(seq),$(f))))))
+ $(foreach seq,$(TESTSEQ),$(file >>$@,build test-$(seq): print_results $(foreach build,$(BUILDS),$(foreach f,$(TESTFLAGS),$(call ninja-test,$(build),$(seq),$(f))))))
+ $(foreach seq,$(TESTSEQ),$(file >>$@,build vot2016/$(seq): make))
+
define ninja-rule
rule cmake
# Absolute path in -C allows Emacs to properly jump to error message locations
command = ninja -C `realpath $$$$(dirname $$out)`
description = Ninja $$out
+rule test_seq
+ command = build-$$build/kcf_vot $$flags $$seq > $$out
+rule print_results
+ description = Print results
+ command = $(call print-test-results,$$in)
+rule make
+ command = make $$out
endef
define ninja-build
build build-$(1)/build.ninja: cmake
opts = $(2)
build build-$(1)/kcf_vot: ninja build-$(1)/build.ninja build.ninja
+default build-$(1)/kcf_vot
+endef
+
+ninja-test = build-$(1)/kcf_vot-$(2)-$(3).log
+
+# Usage: ninja-testcase <build> <seq> <flags>
+define ninja-testcase
+build build-$(1)/kcf_vot-$(2)-$(3).log: test_seq build-$(1)/kcf_vot $(filter-out %/output.txt,$(wildcard vot2016/$(2)/*)) || vot2016/$(2)
+ build = $(1)
+ seq = vot2016/$(2)
+ flags = $(if $(3:fit128=),,--fit=128)
endef