summaryrefslogtreecommitdiff
path: root/Makefile
blob: e1576dcf86d56a49792aacc0917585c4ffb7bb75 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#UNAME_S := $(shell uname -s)
#ifeq ($(UNAME_S),Darwin)
#	LIB := -L/Applications/Binary\ Ninja.app/Contents/MacOS/ -lbinaryninjacore
#else
#	LIB := -L$(HOME)/binaryninja/ -lbinaryninjacore
#endif

INSTALLPATH := ~/binaryninja

TARGETDIR := bin
TARGETNAME := libbinaryninjaapi
TARGET := $(TARGETDIR)/$(TARGETNAME)

SRCEXT = .cpp
SOURCES = $(wildcard *$(SRCEXT))
OBJECTS = $(SOURCES:.cpp=.o) json.o


CFLAGS := -c -fPIC -O2 -pipe -std=gnu++11 -Wall -W -Wextra -Wshadow
CPPFLAGS := -O2 -std=c++11 -Wall -W -Wextra -Wshadow
ifeq ($(UNAME_S),Darwin)
	CC := $(shell xcrun -f g++)
	AR := $(shell xcrun -f ar)
	CFLAGS += -stdlib=libc++
else
	CC := g++
	AR := ar
endif

all: $(TARGET).a

$(TARGET).a: $(OBJECTS)
	@mkdir -p $(TARGETDIR)
	$(AR) rcs $@ $^
 
%.o: %.cpp
	@echo " Compiling... $@ $<"
	$(CC) $(CFLAGS) $(INC) -c -o $@ $<

json.o: ./json/jsoncpp.cpp ./json/json.h ./json/json-forwards.h
	$(CC) $(CFLAGS) -I. -c -o $@ $<

install: generate $(TARGET).a
	@echo "Installing binaryninja API.";
	cp -r python/* $(INSTALLPATH)/python/binaryninja
	cp $(TARGET).a $(INSTALLPATH)
	@echo "Done.";

generator: python/generator.cpp $(TARGET).a
	@echo "Building generator...";
	$(CC) $(CPPFLAGS) -I . $< -L$(TARGETDIR) -lbinaryninjaapi -L $(INSTALLPATH) -lbinaryninjacore -o $@
	chmod +x $@

generate: generator
	@echo "Running generator...";
	LD_LIBRARY_PATH=$(INSTALLPATH) ./generator binaryninjacore.h python/_binaryninjacore.py python/enums.py

python/_binaryninjacore.py: generate

python/enums.py: generate

python_test: environment python/_binaryninjacore.py python/enums.py
	python2 suite/unit.py
	python3 suite/unit.py

oracle: environment python/_binaryninjacore.py python/enums.py
	python3 suite/generator.py

environment: environment_clean python/_binaryninjacore.py python/enums.py 
	@echo "Copying over libs..."
	cp $(INSTALLPATH)/libbinaryninjacore.so.1 .
	cp $(INSTALLPATH)/libbinaryninjacore.so.1 python/

	@echo "Building 'binaryninja' Packages..."
	mkdir -p suite/binaryninja/
	cp -r python/* suite/binaryninja/
	cp -r suite/binaryninja/ python/examples/

	@echo "Copying Architectures Over..."
	cp -r $(INSTALLPATH)/types/ .
	cp -r $(INSTALLPATH)/plugins/ .
	cp -r $(INSTALLPATH)/types/ python/
	cp -r $(INSTALLPATH)/plugins/ python/

environment_clean:
	@echo "Removing 'binaryninja' Packages..."
	rm -rf suite/binaryninja/
	rm -rf python/examples/binaryninja/
	
	@echo "Removing libs..."
	rm -f libbinaryninjacore.so.1
	rm -f python/libbinaryninjacore.so.1

	@echo "Removing Architectures..."
	rm -rf types/
	rm -rf plugins/
	rm -rf python/types/
	rm -rf python/plugins/

clean: 
	@echo " Cleaning...";
	$(RM) -r *.o $(TARGETDIR) generator

squeaky: clean environment_clean

.PHONY: clean environment_clean squeaky python/_binaryninjacore.py python/enums.py