EXT_ORIG ?= ORIG.o EXT_PATCHED ?= PATCHED.o EXT_FAIL ?= PATCHED.FAIL.o EXT_TEST ?= test EXT_OUTPUT ?= OUTPUT.o EXT_TEST_OUTPUT ?= test.out TNAME = $(@:.$(EXT_OUTPUT)=) ifndef VERBOSE MUTE_PASS := >/dev/null MUTE_FAIL := >/dev/null 2>&1 endif SRC_PATH ?= $(realpath ../../../) CDO ?= $(SRC_PATH)/kpatch-build/create-diff-object TENV = PARA_STRUCT_SIZE=16 EX_STRUCT_SIZE=12 BUG_STRUCT_SIZE=12 ALT_STRUCT_SIZE=13 TARGETS = $(patsubst %.$(EXT_ORIG),%.$(EXT_OUTPUT),$(wildcard *.$(EXT_ORIG))) TEST_TARGETS = $(patsubst %.$(EXT_TEST),%.$(EXT_TEST_OUTPUT),$(wildcard *.$(EXT_TEST))) define check_lfs = $(if $(shell head -1 $(1) | grep git-lfs.github.com), $(error $(1) is not fetched. Unittests require https://git-lfs.github.com/), ) endef define check_stripped = $(if $(shell readelf --debug-dump $(1)), $(error $(1) is not properly stripped, use 'strip --strip-debug --keep-file-symbols $(1)' to fix this), ) endef define check_all = $(call check_lfs,$(1)) $(call check_stripped,$(1)) endef all: $(TARGETS) $(TEST_TARGETS) clean: rm -f $(TARGETS) $(TEST_TARGETS) %.$(EXT_TEST_OUTPUT): %.$(EXT_OUTPUT) %.$(EXT_TEST) bash $(@:.$(EXT_TEST_OUTPUT)=.$(EXT_TEST)) $< # Don't rely on script creating this @touch $@ %.$(EXT_OUTPUT): %.$(EXT_ORIG) %.$(EXT_PATCHED) $(CDO) $(call check_all,$(TNAME).$(EXT_ORIG)) $(call check_all,$(TNAME).$(EXT_PATCHED)) $(TENV) $(CDO) $(TNAME).$(EXT_ORIG) $(TNAME).$(EXT_PATCHED) \ $(TNAME).$(EXT_ORIG) $@ /dev/null test_$(TNAME) $(MUTE_PASS) %.$(EXT_OUTPUT): %.$(EXT_ORIG) %.$(EXT_FAIL) $(CDO) $(call check_all,$(TNAME).$(EXT_ORIG)) $(call check_all,$(TNAME).$(EXT_FAIL)) ! $(TENV) $(CDO) $(TNAME).$(EXT_ORIG) $(TNAME).$(EXT_FAIL) \ $(TNAME).$(EXT_ORIG) $@ /dev/null test_$(TNAME) $(MUTE_FAIL) # Expecting to fail, thus create output file manually so we won't rerun the # test without clean @touch $@