1XEN_ROOT=$(CURDIR)/../../..
2include $(XEN_ROOT)/tools/Rules.mk
3
4.PHONY: x86-insn-fuzz-all
5ifeq ($(CONFIG_X86_64),y)
6x86-insn-fuzz-all: x86-insn-fuzzer.a fuzz-emul.o afl
7else
8x86-insn-fuzz-all:
9endif
10
11# Add libx86 to the build
12%.c: $(XEN_ROOT)/xen/lib/x86/%.c FORCE
13	ln -nsf $< $@
14
15x86_emulate: FORCE
16	mkdir -p $@
17	ln -sf $(XEN_ROOT)/xen/arch/x86/$@/*.[ch] $@/
18
19x86_emulate/%.c: x86_emulate ;
20x86_emulate/%.h: x86_emulate ;
21
22%.c: $(XEN_ROOT)/tools/tests/x86_emulator/%.c FORCE
23	ln -nsf $< $@
24%.h: $(XEN_ROOT)/tools/tests/x86_emulator/%.h FORCE
25	ln -nsf $< $@
26
27CFLAGS += $(CFLAGS_xeninclude) -D__XEN_TOOLS__ -iquote .
28cpuid.o: CFLAGS += -iquote $(XEN_ROOT)/xen/lib/x86
29
30GCOV_FLAGS := --coverage
31%-cov.o: %.c
32	$(CC) -c $(CFLAGS) $(GCOV_FLAGS) $< -o $@
33
34OBJS := fuzz-emul.o x86-emulate.o
35OBJS += x86_emulate/0f01.o x86_emulate/0fae.o x86_emulate/0fc7.o
36OBJS += x86_emulate/decode.o x86_emulate/fpu.o
37
38WRAPPED = $(shell sed -n 's,^ *WRAP(\([[:alnum:]_]*\));,\1,p' x86-emulate.h)
39
40private.h := x86-emulate.h x86_emulate/x86_emulate.h x86_emulate/private.h
41
42x86-emulate.h: x86_emulate/x86_emulate.h
43x86-emulate.o x86-emulate-cov.o: x86_emulate/x86_emulate.c $(private.h)
44fuzz-emul.o fuzz-emul-cov.o wrappers.o: x86-emulate.h
45
46$(filter x86_emulate/%.o,$(OBJS)): x86_emulate/%.o: x86_emulate/%.c $(private.h)
47	$(CC) $(CPPFLAGS) $(CFLAGS) $(CFLAGS_$*.o) -c -o $@ $< $(APPEND_CFLAGS)
48
49$(patsubst %.o,%-cov.o,$(filter x86_emulate/%.o,$(OBJS))): x86_emulate/%-cov.o: x86_emulate/%.c $(private.h)
50	$(CC) $(CPPFLAGS) $(CFLAGS) $(CFLAGS_$*.o) $(GCOV_FLAGS) -c -o $@ $< $(APPEND_CFLAGS)
51
52x86-insn-fuzzer.a: $(OBJS) cpuid.o
53	$(AR) rc $@ $^
54
55afl-harness: afl-harness.o $(OBJS) cpuid.o wrappers.o
56	$(CC) $(CFLAGS) $(addprefix -Wl$(comma)--wrap=,$(WRAPPED)) $^ -o $@
57
58afl-harness-cov: afl-harness-cov.o $(patsubst %.o,%-cov.o,$(OBJS)) cpuid.o wrappers.o
59	$(CC) $(CFLAGS) $(GCOV_FLAGS) $(addprefix -Wl$(comma)--wrap=,$(WRAPPED)) $^ -o $@
60
61libfuzzer-harness: $(OBJS) cpuid.o wrappers.o
62	$(CC) $(CFLAGS) $(LIB_FUZZING_ENGINE) -fsanitize=fuzzer $(addprefix -Wl$(comma)--wrap=,$(WRAPPED)) $^ -o $@
63
64# Common targets
65.PHONY: all
66all: x86-insn-fuzz-all
67
68.PHONY: distclean
69distclean: clean
70
71.PHONY: clean
72clean:
73	rm -f *.a *.o $(DEPS_RM) *.gcda *.gcno *.gcov
74	rm -f afl-harness afl-harness-cov libfuzzer-harness
75	rm -rf x86_emulate x86-emulate.c x86-emulate.h wrappers.c cpuid.c
76
77.PHONY: install
78install: all
79
80.PHONY: uninstall
81
82.PHONY: afl
83afl: afl-harness
84
85.PHONY: afl-cov
86afl-cov: afl-harness-cov
87
88-include $(DEPS_INCLUDE)
89