-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathMakefile
125 lines (104 loc) · 4.45 KB
/
Makefile
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
###############################################################################
# Qemu Simulation Framework (qsim) #
# Qsim is a modified version of the Qemu emulator (www.qemu.org), coupled #
# a C++ API, for the use of computer architecture researchers. #
# #
# This work is licensed under the terms of the GNU GPL, version 2. See the #
# COPYING file in the top-level directory. #
###############################################################################
CXXFLAGS ?= -g -Wall -Idistorm/ -std=c++0x -march=native
QSIM_PREFIX ?= /usr/local
LDFLAGS = -L./
LDLIBS = -lqsim -ldl -lrt -pthread
QEMU_BUILD_DIR=build
UNAMEM := $(shell uname -m)
run_tests=a64_tests
ifneq ($(UNAMEM), aarch64)
run_tests += x86_tests
endif
all: libqsim.so qsim-fastforwarder
debug: CXXFLAGS += -O0
debug: BUILD_DIR = .dbg_build
release: CXXFLAGS += -O3
release: BUILD_DIR = .opt_build
statesaver.o: statesaver.cpp statesaver.h qsim.h
$(CXX) $(CXXFLAGS) -I./ -fPIC -c -o statesaver.o statesaver.cpp
qsim-load.o: qsim-load.cpp qsim-load.h qsim.h
$(CXX) $(CXXFLAGS) -I./ -fPIC -c -o qsim-load.o qsim-load.cpp
qsim-prof.o: qsim-prof.cpp qsim-prof.h qsim.h
$(CXX) $(CXXFLAGS) -I./ -fPIC -c -o qsim-prof.o qsim-prof.cpp
qsim-fastforwarder: fastforwarder.cpp statesaver.o statesaver.h libqsim.so
$(CXX) $(CXXFLAGS) $(LDFLAGS) -I ./ -L ./ -pthread \
-o qsim-fastforwarder fastforwarder.cpp statesaver.o $(LDLIBS)
libqsim.so: qsim.cpp qsim-load.o qsim-prof.o qsim.h qsim-vm.h mgzd.h \
qsim-regs.h qsim-x86-regs.h qsim-arm64-regs.h
$(CXX) $(CXXFLAGS) -shared -fPIC -o $@ $< qsim-load.o qsim-prof.o -ldl -lrt
install: libqsim.so qsim-fastforwarder qsim.h qsim-vm.h mgzd.h \
qsim-load.h qsim-prof.h qsim-regs.h \
qsim-arm-regs.h qsim-x86-regs.h qsim-arm64-regs.h qsim_magic.h
mkdir -p $(QSIM_PREFIX)/lib
mkdir -p $(QSIM_PREFIX)/include
mkdir -p $(QSIM_PREFIX)/bin
cp libqsim.so $(QSIM_PREFIX)/lib/
cp capstone/libcapstone.so $(QSIM_PREFIX)/lib
cp qsim.h qsim-vm.h mgzd.h qsim-load.h qsim-prof.h \
qsim-regs.h qsim-arm-regs.h qsim-x86-regs.h qsim-arm64-regs.h \
qsim_magic.h $(QSIM_PREFIX)/include/
cp capstone/include/capstone/*.h $(QSIM_PREFIX)/include
cp qsim-fastforwarder $(QSIM_PREFIX)/bin/
cp $(QEMU_BUILD_DIR)/x86_64-softmmu/qemu-system-x86_64 \
$(QSIM_PREFIX)/lib/libqemu-qsim-x86.so
cp $(QEMU_BUILD_DIR)/aarch64-softmmu/qemu-system-aarch64 \
$(QSIM_PREFIX)/lib/libqemu-qsim-a64.so
ifeq ($(USER),root) # Only need this if we're installing globally as root.
/sbin/ldconfig
endif
uninstall: $(QSIM_PREFIX)/lib/libqsim.so
rm -f $(QSIM_PREFIX)/lib/libqsim.so $(QSIM_PREFIX)/include/qsim.h \
$(QSIM_PREFIX)/include/qsim-vm.h \
$(QSIM_PREFIX)/include/qsim-regs.h \
$(QSIM_PREFIX)/include/qsim-load.h \
$(QSIM_PREFIX)/include/qsim-prof.h \
$(QSIM_PREFIX)/bin/qsim-fastforwarder
.PHONY: debug
debug: all
./build-qemu.sh $@
.PHONY: release tests
release: all
./build-qemu.sh $@
tests: release install
make $(run_tests)
x86_prep:
if [ ! -e initrd/initrd.cpio.x86 ]; then \
cd initrd && ./getbusybox.sh; fi
x86_tests: x86_prep
if [ ! -e state.1 ]; then \
./qsim-fastforwarder linux/bzImage 1 512 state.1; fi;
cd tests/x86 && make
cd tests && make && \
./tester 1 ../state.1 x86/icount.tar && \
diff x86/icount.out x86/icount_gold.out && \
./tester 1 ../state.1 x86/memory.tar && \
diff x86/memory.out x86/memory_gold.out && \
./tester 1 ../state.1 x86/reg.tar && \
diff x86/reg.out x86/reg_gold.out
a64_prep:
if [ ! -e initrd/initrd.cpio.arm64 ]; then \
cd initrd && ./getbusybox.sh arm64; fi
a64_tests: a64_prep
if [ ! -e state.1.a64 ]; then \
./qsim-fastforwarder linux/Image 1 512 state.1.a64 a64; fi;
cd tests/arm64 && make
cd tests && make && \
./tester 1 ../state.1.a64 arm64/icount.tar && \
diff arm64/icount.out arm64/icount_gold.out && \
./tester 1 ../state.1.a64 arm64/memory.tar && \
diff arm64/memory.out arm64/memory_gold.out
#if [ ! -e state.2.a64 ]; then \
# ./qsim-fastforwarder linux/Image 2 512 state.2.a64 a64; fi;
#cd tests && make && \
#./tester 2 ../state.2.a64 arm64/contention.tar
clean:
rm -f *~ \#*\# libqsim.so *.o test qtm qsim-fastforwarder build
distclean: clean
rm -rf .dbg_build .opt_build