X-Git-Url: http://rtime.felk.cvut.cz/gitweb/hercules2020/kcf.git/blobdiff_plain/4770a5119990557fbb8cf75f3a2a77af7d31bfbe..c86842736562522396746779fd2bf38b01225458:/Makefile diff --git a/Makefile b/Makefile index 094c5bb..322196b 100644 --- a/Makefile +++ b/Makefile @@ -1,23 +1,24 @@ # Makefile to build all the available variants BUILDS = opencvfft-st opencvfft-async opencvfft-openmp fftw fftw-async fftw-openmp fftw-big fftw-big-openmp cufftw cufftw-big cufftw-big-openmp cufft cufft-openmp cufft-big cufft-big-openmp -TESTSEQ = bag ball1 car1 book -TESTFLAGS = default fit128 +TESTSEQ = bmx ball1 crossing racing book +TESTFLAGS = default fit all: $(BUILDS) +print_%: + @$(foreach v,$($*),echo $(v);) + ninja: build.ninja ninja $(BUILDS): build.ninja ninja build-$@/build.ninja - ninja -C build-$@ + ninja -C $(CURDIR)/build-$@ clean: build.ninja ninja $@ -CMAKE_OPTS += -G Ninja - ## Useful setting - uncomment and modify as needed # CMAKE_OPTS += -DOpenCV_DIR=~/opt/opencv-2.4/share/OpenCV # CMAKE_OPTS += -DCUDA_VERBOSE_BUILD=ON -DCUDA_NVCC_FLAGS="--verbose;--save-temps" @@ -56,7 +57,7 @@ vot2016 $(TESTSEQ:%=vot2016/%): vot2016.zip .INTERMEDIATE: vot2016.zip .SECONDARY: vot2016.zip vot2016.zip: - wget -O $@ http://data.votchallenge.net/vot2016/vot2016.zip + wget --progress=dot:giga -O $@ http://data.votchallenge.net/vot2016/vot2016.zip ################### # Ninja generator # @@ -67,19 +68,24 @@ vot2016.zip: # compiles all variants in the same ways as this makefile, but faster. # The down side is that the build needs about 10 GB of memory. -define nl +# Define echo depending on whether make supports the $(file) function. +$(file >.test.file) +ifneq ($(wildcard .test.file),) + echo = $(file $(1),$(2)) +else + define nl -endef -define echo -echo $(1) '$(subst $(nl),\n,$(subst \,\\,$(2)))'; -endef + endef + echo = echo $(1) '$(subst $(nl),\n,$(subst \,\\,$(2)))'; +endif # Ninja generator - to have faster parallel builds and tests .PHONY: build.ninja -build.ninja: Makefile +build.ninja:: $(MAKEFILE_LIST) + @echo "Generating $@" @$(call echo,>$@,$(ninja-rule)) @$(foreach build,$(BUILDS),\ $(call echo,>>$@,$(call ninja-build,$(build),$(CMAKE_OTPS_$(build))))) @@ -88,27 +94,33 @@ build.ninja: Makefile @$(call echo,>>$@,build test: PRINT_RESULTS $(foreach build,$(BUILDS),$(foreach seq,$(TESTSEQ),$(foreach f,$(TESTFLAGS),$(call ninja-test,$(build),$(seq),$(f))))) | print-test-results) @$(foreach build,$(BUILDS),$(call echo,>>$@,build test-$(build): PRINT_RESULTS $(foreach seq,$(TESTSEQ),$(foreach f,$(TESTFLAGS),$(call ninja-test,$(build),$(seq),$(f)))) | print-test-results)) @$(foreach seq,$(TESTSEQ),$(call echo,>>$@,build test-$(seq): PRINT_RESULTS $(foreach build,$(BUILDS),$(foreach f,$(TESTFLAGS),$(call ninja-test,$(build),$(seq),$(f)))) | print-test-results)) + @$(call echo,>>$@,build plot: PLOT_RESULTS $(foreach build,$(BUILDS),$(foreach seq,$(TESTSEQ),$(foreach f,$(TESTFLAGS),$(call ninja-test,$(build),$(seq),$(f))))) | graphGen.sh) + @$(foreach build,$(BUILDS),$(call echo,>>$@,build plot-$(build): PLOT_RESULTS $(foreach seq,$(TESTSEQ),$(foreach f,$(TESTFLAGS),$(call ninja-test,$(build),$(seq),$(f)))) | graphGen.sh)) + @$(foreach seq,$(TESTSEQ),$(call echo,>>$@,build plot-$(seq): PLOT_RESULTS $(foreach build,$(BUILDS),$(foreach f,$(TESTFLAGS),$(call ninja-test,$(build),$(seq),$(f)))) | graphGen.sh)) @$(foreach seq,$(TESTSEQ),$(call echo,>>$@,build vot2016/$(seq): MAKE)) ninja-test = build-$(1)/kcf_vot-$(2)-$(3).log define ninja-rule rule REGENERATE - command = make $$out BUILDS="$(BUILDS)" TESTSEQ="$(TESTSEQ)" TESTFLAGS="$(TESTFLAGS)" + command = MAKEFLAGS='$(MAKEFLAGS)' $(MAKE) $$out + description = Regenerating $$out generator = 1 rule CMAKE - command = cd $$$$(dirname $$out) && cmake $(CMAKE_OPTS) $$opts .. + command = cd $$subdir && cmake -G Ninja $(CMAKE_OPTS) $$opts .. rule NINJA # Absolute path in -C allows Emacs to properly jump to error message locations - command = ninja -C $(CURDIR)/$$$$(dirname $$out) - description = ninja $$out + command = ninja -C $(CURDIR)/$$subdir restat = 1 rule TEST_SEQ # Errors are ignored - they will be reported by PRINT_RESULTS - command = build-$$build/kcf_vot $$flags $$seq > $$out || : + command = build-$$build/kcf_vot $$flags $$seq $(if $(TRAVIS),2>&1) >$$out $(if $(TRAVIS),| grep -v libdc1394); true rule PRINT_RESULTS description = Print results - command = ./wvtool -w125 -v run ./print-test-results $$in + command = ./wvtool -w120 -v run ./print-test-results $$in +rule PLOT_RESULTS + description = Plot results + command = ./graphGen.sh -f -s $$in rule MAKE command = make $$out pool = make @@ -119,7 +131,7 @@ rule CLEAN description = Cleaning all built files... command = rm -rf $(BUILDS:%=build-%) build clean: CLEAN -build build.ninja: REGENERATE Makefile +build build.ninja: REGENERATE $(MAKEFILE_LIST) endef GIT_LS_FILES := $(shell git ls-files) @@ -127,7 +139,9 @@ GIT_LS_FILES := $(shell git ls-files) define ninja-build build build-$(1)/build.ninja: CMAKE opts = $(2) + subdir = build-$(1) build build-$(1)/kcf_vot: NINJA build-$(1)/build.ninja $(GIT_LS_FILES) + subdir = build-$(1) default build-$(1)/kcf_vot endef @@ -136,5 +150,5 @@ 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) + flags = $(if $(3:fit128=),,--fit=128)$(if $(3:fit=),,--fit) endef