1# Capstone Disassembler Engine
2# By Philippe Antoine <contact@catenacyber.fr>, 2018
3
4include ../../config.mk
5include ../../functions.mk
6
7ifneq ($(CAPSTONE_STATIC),yes)
8$(error Needs static capstone.)
9endif
10
11# Verbose output?
12V ?= 0
13
14INCDIR = ../../include
15ifndef BUILDDIR
16TESTDIR = .
17OBJDIR = .
18LIBDIR = ../..
19else
20TESTDIR = $(BUILDDIR)/tests
21OBJDIR = $(BUILDDIR)/obj/tests
22LIBDIR = $(BUILDDIR)
23endif
24
25CFLAGS += -Wall -I$(INCDIR)
26LDFLAGS += -L$(LIBDIR)
27
28CFLAGS += $(foreach arch,$(LIBARCHS),-arch $(arch))
29LDFLAGS += $(foreach arch,$(LIBARCHS),-arch $(arch))
30
31LIBNAME = capstone
32
33BIN_EXT =
34AR_EXT = a
35
36
37ARCHIVE = $(LIBDIR)/lib$(LIBNAME).$(AR_EXT)
38
39.PHONY: all clean
40
41SOURCES = fuzz_disasm.c drivermc.c fuzz_harness.c driverbin.c
42OBJS = $(addprefix $(OBJDIR)/,$(SOURCES:.c=.o))
43BINARY = $(addprefix $(TESTDIR)/,fuzz_disasm$(BIN_EXT))
44BINARYBIN = $(addprefix $(TESTDIR)/,fuzz_bindisasm$(BIN_EXT))
45
46all: $(BINARY) $(BINARYBIN)
47
48clean:
49	rm -rf fuzz_harness $(OBJS) $(BINARY) $(BINARYBIN) $(OBJDIR)/lib$(LIBNAME).* $(OBJDIR)/$(LIBNAME).*
50
51$(BINARY): fuzz_disasm.o drivermc.o
52	@mkdir -p $(@D)
53ifeq ($(V),0)
54	$(call log,LINK,$(notdir $@))
55	@$(link-static)
56else
57	$(link-static)
58endif
59
60$(BINARYBIN): fuzz_disasm.o driverbin.o
61	@mkdir -p $(@D)
62ifeq ($(V),0)
63	$(call log,LINK,$(notdir $@))
64	@$(link-static)
65else
66	$(link-static)
67endif
68
69$(OBJDIR)/%.o: %.c
70	@mkdir -p $(@D)
71ifeq ($(V),0)
72	$(call log,CC,$(@:$(OBJDIR)/%=%))
73	@$(compile)
74else
75	$(compile)
76endif
77
78
79
80define link-static
81	$(CC) $(LDFLAGS) $^ $(ARCHIVE) -o $@
82endef
83
84fuzz_harness: fuzz_harness.o
85	${CC} $< -O3 -Wall -l$(LIBNAME) -o $@
86