-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathMakefile
95 lines (77 loc) · 2.09 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
TARGET_EXEC := ctremu
CC := clang-19
CXX := clang++-19
CSTD := -std=gnu23
CXXSTD := -std=gnu++23
CFLAGS := -Wall -Wimplicit-fallthrough -Wno-format -Werror
CFLAGS_RELEASE := -O3
CFLAGS_DEBUG := -g -fsanitize=address
CPPFLAGS := -MP -MMD -D_GNU_SOURCE -isystem /usr/local/include -Isrc --embed-dir=sys_files
LDFLAGS := -L/usr/local/lib -lm -lSDL3 -lcapstone -lfdk-aac
ifeq ($(OS),Windows_NT)
LTO := -fuse-ld=lld -flto
else
LTO := -flto
endif
ifeq ($(USER), 1)
CFLAGS_RELEASE += $(LTO)
CPPFLAGS += -DNOPORTABLE
else
CFLAGS_RELEASE += -g
endif
ifeq ($(shell getconf PAGESIZE),4096)
CPPFLAGS += -DFASTMEM -DJIT_FASTMEM
endif
ifeq ($(shell uname -m),arm64)
LDFLAGS += -lxbyak_aarch64
endif
ifeq ($(shell uname -m),aarch64)
LDFLAGS += -lxbyak_aarch64
endif
ifeq ($(OS),Windows_NT)
CC := clang
CXX := clang++
LDFLAGS += -lopengl32 -lglew32 -Wl,--stack,8388608
else ifeq ($(shell uname),Darwin)
CC := $(shell brew --prefix)/opt/llvm/bin/clang
CXX := $(shell brew --prefix)/opt/llvm/bin/clang++
CPPFLAGS += -isystem $(shell brew --prefix)/include
LDFLAGS := -L$(shell brew --prefix)/lib $(LDFLAGS)
LDFLAGS += -framework OpenGL -lGLEW
else
LDFLAGS += -lGL -lGLEW
endif
BUILD_DIR := build
SRC_DIR := src
SRCS := $(shell find $(SRC_DIR) -name '*.c')
SRCSCPP := $(shell find $(SRC_DIR) -name '*.cpp')
SRCS := $(SRCS:$(SRC_DIR)/%=%)
SRCSCPP := $(SRCSCPP:$(SRC_DIR)/%=%)
ifeq ($(DEBUG), 1)
OUT_DIR := $(BUILD_DIR)/debug
TARGET_EXEC := $(TARGET_EXEC)d
CFLAGS += $(CFLAGS_DEBUG)
else
OUT_DIR := $(BUILD_DIR)/release
CFLAGS += $(CFLAGS_RELEASE)
endif
OBJS := $(SRCS:%.c=$(OUT_DIR)/%.o) $(SRCSCPP:%.cpp=$(OUT_DIR)/%.o)
DEPS := $(OBJS:.o=.d)
$(OUT_DIR)/$(TARGET_EXEC): $(OBJS)
@echo linking $@...
@$(CXX) -o $@ $(CFLAGS) $(CPPFLAGS) $^ $(LDFLAGS)
@cp $@ $(TARGET_EXEC)
@echo done
$(OUT_DIR)/%.o: $(SRC_DIR)/%.c
@mkdir -p $(dir $@)
@echo $<
@$(CC) $(CPPFLAGS) $(CSTD) $(CFLAGS) -c $< -o $@
$(OUT_DIR)/%.o: $(SRC_DIR)/%.cpp
@mkdir -p $(dir $@)
@echo $<
@$(CXX) $(CPPFLAGS) $(CXXSTD) $(CFLAGS) -c $< -o $@
.PHONY: clean
clean:
@echo clean...
@rm -rf $(BUILD_DIR) $(TARGET_EXEC) $(TARGET_EXEC)d
-include $(DEPS)