-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
96 lines (75 loc) · 2.63 KB
/
Copy pathMakefile
File metadata and controls
96 lines (75 loc) · 2.63 KB
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
CC := g++
INSTALLDIR = $(PWD)
CPPFLAGS = -g -O3 -Wall -Wno-padded -std=c++17 -m64 -pipe
IMGUI_DIR = third_party/imgui
IMGUI_CPPFLAGS = $(CPPFLAGS) \
-I$(IMGUI_DIR) \
-I$(IMGUI_DIR)/backends \
-Ithird_party \
$(shell pkg-config --cflags sdl2)
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Darwin)
IMGUI_LIBS = $(shell pkg-config --libs sdl2) -framework OpenGL -framework Cocoa
else
IMGUI_LIBS = $(shell pkg-config --libs sdl2) -lGL -ldl
endif
IMGUI_OBJ = \
$(IMGUI_DIR)/imgui.o \
$(IMGUI_DIR)/imgui_draw.o \
$(IMGUI_DIR)/imgui_tables.o \
$(IMGUI_DIR)/imgui_widgets.o \
$(IMGUI_DIR)/backends/imgui_impl_sdl2.o \
$(IMGUI_DIR)/backends/imgui_impl_opengl3.o \
third_party/ImGuiFileDialog.o \
src/interface/imgui/mips_sim_imgui.o
SIM_OBJ = \
src/assembler/mips_parser.o \
src/assembler/mips_scanner.o \
src/cpu/component/alu.o \
src/cpu/component/control_unit.o \
src/cpu/component/registers_bank.o \
src/cpu/cpu.o \
src/cpu/cpu_multi.o \
src/cpu/cpu_pipelined.o \
src/interface/mipscli.o \
src/mem.o \
src/utils.o \
src/mips_sim.o
BISONFLAGS = -Wall -d
FLEXFLAGS =
all: $(SIM_OBJ) $(IMGUI_OBJ)
$(CC) $(CPPFLAGS) -o mips_sim $(SIM_OBJ) $(IMGUI_OBJ) $(IMGUI_LIBS)
@echo $(INSTALLDIR)
src/assembler/mips_parser.cpp: src/assembler/mips_assembler.y
bison $(BISONFLAGS) -o src/assembler/mips_parser.cpp src/assembler/mips_assembler.y
src/assembler/mips_scanner.cpp: src/assembler/mips_assembler.l
flex $(FLEXFLAGS) -o src/assembler/mips_scanner.cpp src/assembler/mips_assembler.l
src/assembler/%.o: src/assembler/%.cpp
@mkdir -p "$(@D)"
$(CC) $(CPPFLAGS) -c -o $@ $<
# ImGui core files
$(IMGUI_DIR)/%.o: $(IMGUI_DIR)/%.cpp
$(CC) $(IMGUI_CPPFLAGS) -c -o $@ $<
# ImGui SDL2/OpenGL backend files
$(IMGUI_DIR)/backends/%.o: $(IMGUI_DIR)/backends/%.cpp
$(CC) $(IMGUI_CPPFLAGS) -c -o $@ $<
# ImGuiFileDialog (lives in third_party/)
third_party/ImGuiFileDialog.o: third_party/ImGuiFileDialog.cpp
$(CC) $(IMGUI_CPPFLAGS) -c -o $@ $<
# New ImGui GUI interface
src/interface/imgui/%.o: src/interface/imgui/%.cpp
@mkdir -p "$(@D)"
$(CC) -D_IMGUI $(IMGUI_CPPFLAGS) -c -o $@ $<
# Main entry point needs _IMGUI flag and ImGui includes
src/mips_sim.o: src/mips_sim.cpp
@mkdir -p "$(@D)"
$(CC) -D_IMGUI $(IMGUI_CPPFLAGS) -c -o $@ $<
src/%.o: src/%.cpp
@mkdir -p "$(@D)"
$(CC) $(CPPFLAGS) -c -o $@ $<
clean:
find src -name "*.o" | xargs rm -f
find $(IMGUI_DIR) -name "*.o" 2>/dev/null | xargs rm -f
rm -f third_party/ImGuiFileDialog.o
rm -f src/assembler/mips_scanner.cpp src/assembler/mips_parser.cpp
parser: src/assembler/mips_parser.cpp src/assembler/mips_scanner.cpp