-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
95 lines (74 loc) · 2.26 KB
/
Copy pathMakefile
File metadata and controls
95 lines (74 loc) · 2.26 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
CC ?= clang
CXX ?= clang++
CFLAGS ?= -O2 -Wall -Wextra -std=c11 -g -Ilib
CXXFLAGS ?= -O2 -Wall -Wextra -std=c++17 -g -Ilib
# --- library ---
LIB_SRCS := lib/memreader.c lib/scanner.c
LIB_OBJS := $(LIB_SRCS:.c=.o)
LIB := libmacce.a
# --- CLI ---
CLI_SRCS := cli/cli_main.c
CLI_OBJS := $(CLI_SRCS:.c=.o)
CLI := macce
# --- GUI (ImGui + GLFW) ---
GLFW_PREFIX := $(shell brew --prefix glfw 2>/dev/null)
IMGUI_DIR := gui/third_party/imgui
GUI_CXX_SRCS := \
gui/gui_main.cpp \
gui/app.cpp \
$(IMGUI_DIR)/imgui.cpp \
$(IMGUI_DIR)/imgui_draw.cpp \
$(IMGUI_DIR)/imgui_tables.cpp \
$(IMGUI_DIR)/imgui_widgets.cpp \
$(IMGUI_DIR)/backends/imgui_impl_glfw.cpp \
$(IMGUI_DIR)/backends/imgui_impl_opengl2.cpp
GUI_OBJS := $(GUI_CXX_SRCS:.cpp=.o)
GUI := macce-gui
GUI_CXXFLAGS := $(CXXFLAGS) \
-I$(IMGUI_DIR) -I$(IMGUI_DIR)/backends \
-I$(GLFW_PREFIX)/include \
-Wno-unused-parameter
GUI_LDFLAGS := \
-L$(GLFW_PREFIX)/lib -lglfw \
-framework Cocoa -framework IOKit -framework OpenGL
ENT := entitlements.plist
all: $(CLI)
# --- library rules ---
$(LIB): $(LIB_OBJS)
ar rcs $@ $(LIB_OBJS)
lib/%.o: lib/%.c
$(CC) $(CFLAGS) -c $< -o $@
# --- CLI rules ---
cli/%.o: cli/%.c
$(CC) $(CFLAGS) -c $< -o $@
$(CLI): $(CLI_OBJS) $(LIB)
$(CC) $(CFLAGS) $(CLI_OBJS) $(LIB) -o $@
codesign --force --sign - --entitlements $(ENT) $@
# --- GUI rules ---
$(IMGUI_DIR)/imgui.cpp:
@echo "==> ImGui not vendored. Run 'make imgui' first."
@exit 1
imgui:
@mkdir -p gui/third_party
@if [ ! -d $(IMGUI_DIR) ]; then \
git clone --depth 1 --branch v1.91.5 \
https://github.com/ocornut/imgui.git $(IMGUI_DIR); \
fi
@echo "ImGui ready at $(IMGUI_DIR)"
gui/%.o: gui/%.cpp
$(CXX) $(GUI_CXXFLAGS) -c $< -o $@
$(IMGUI_DIR)/%.o: $(IMGUI_DIR)/%.cpp
$(CXX) $(GUI_CXXFLAGS) -c $< -o $@
$(IMGUI_DIR)/backends/%.o: $(IMGUI_DIR)/backends/%.cpp
$(CXX) $(GUI_CXXFLAGS) -c $< -o $@
gui: $(GUI)
$(GUI): $(GUI_OBJS) $(LIB)
$(CXX) $(GUI_CXXFLAGS) $(GUI_OBJS) $(LIB) $(GUI_LDFLAGS) -o $@
codesign --force --sign - --entitlements $(ENT) $@
# --- clean ---
clean:
rm -rf $(LIB) $(CLI) $(GUI) $(CLI).dSYM $(GUI).dSYM
find lib cli gui -name '*.o' -delete 2>/dev/null || true
distclean: clean
rm -rf $(IMGUI_DIR)
.PHONY: all gui imgui clean distclean