-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
100 lines (76 loc) · 3.44 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
# RocketMod - Rocket Launchers-Only Plugin
# Copyright 2004-2025
# https://github.com/thecybermind/rocketmod_qmm/
# 3-clause BSD license: https://opensource.org/license/bsd-3-clause
# Created By: Kevin Masterson < cybermind@gmail.com >
BIN_32 := rocketmod_qmm.so
BIN_64 := rocketmod_qmm_x86_64.so
GAMES := Q3A
CC := g++
SRC_DIR := src
OBJ_DIR := obj
BIN_DIR := bin
SRC_FILES := $(wildcard $(SRC_DIR)/*.cpp)
OBJ_FILES := $(SRC_FILES:$(SRC_DIR)/%.cpp=%.o)
CPPFLAGS := -MMD -MP -I ./include -isystem ../qmm_sdks -isystem ../qmm2/include
CFLAGS := -Wall -pipe -fPIC
LDFLAGS := -shared -fPIC
LDLIBS :=
REL_CPPFLAGS := $(CPPFLAGS)
DBG_CPPFLAGS := $(CPPFLAGS) -D_DEBUG
REL_CFLAGS_32 := $(CFLAGS) -m32 -O2 -ffast-math -falign-loops=2 -falign-jumps=2 -falign-functions=2 -fno-strict-aliasing -fstrength-reduce
REL_CFLAGS_64 := $(CFLAGS) -O2 -ffast-math -falign-loops=2 -falign-jumps=2 -falign-functions=2 -fno-strict-aliasing -fstrength-reduce
DBG_CFLAGS_32 := $(CFLAGS) -m32 -g -pg
DBG_CFLAGS_64 := $(CFLAGS) -g -pg
REL_LDFLAGS_32 := $(LDFLAGS) -m32
REL_LDFLAGS_64 := $(LDFLAGS)
DBG_LDFLAGS_32 := $(LDFLAGS) -m32 -g -pg
DBG_LDFLAGS_64 := $(LDFLAGS) -g -pg
.PHONY: all clean release debug release32 debug32 release64 debug64 $(addprefix game-,$(GAMES)) $(addprefix release-,$(GAMES)) $(addprefix debug-,$(GAMES))
all: release debug
release: release32 release64
release32: $(addprefix release32-,$(GAMES))
release64: $(addprefix release64-,$(GAMES))
debug: debug32 debug64
debug32: $(addprefix debug32-,$(GAMES))
debug64: $(addprefix debug64-,$(GAMES))
define gen_rules
game-$(1): release-$(1) debug-$(1)
release-$(1): release32-$(1) release64-$(1)
debug-$(1): debug32-$(1) debug64-$(1)
release32-$(1): $(BIN_DIR)/release-$(1)/x86/$(BIN_32)_$(1)
release64-$(1): $(BIN_DIR)/release-$(1)/x86_64/$(BIN_64)_$(1)
debug32-$(1): $(BIN_DIR)/debug-$(1)/x86/$(BIN_32)_$(1)
debug64-$(1): $(BIN_DIR)/debug-$(1)/x86_64/$(BIN_64)_$(1)
$(BIN_DIR)/release-$(1)/x86/$(BIN_32)_$(1): $$(addprefix $(OBJ_DIR)/release-$(1)/x86/,$(OBJ_FILES))
mkdir -p $$(@D)
$(CC) $(REL_LDFLAGS_32) -o $$@ $(LDLIBS) $$^
$(BIN_DIR)/release-$(1)/x86_64/$(BIN_64)_$(1): $$(addprefix $(OBJ_DIR)/release-$(1)/x86_64/,$(OBJ_FILES))
mkdir -p $$(@D)
$(CC) $(REL_LDFLAGS_64) -o $$@ $(LDLIBS) $$^
$(BIN_DIR)/debug-$(1)/x86/$(BIN_32)_$(1): $$(addprefix $(OBJ_DIR)/debug-$(1)/x86/,$(OBJ_FILES))
mkdir -p $$(@D)
$(CC) $(DBG_LDFLAGS_32) -o $$@ $(LDLIBS) $$^
$(BIN_DIR)/debug-$(1)/x86_64/$(BIN_64)_$(1): $$(addprefix $(OBJ_DIR)/debug-$(1)/x86_64/,$(OBJ_FILES))
mkdir -p $$(@D)
$(CC) $(DBG_LDFLAGS_64) -o $$@ $(LDLIBS) $$^
$(OBJ_DIR)/release-$(1)/x86/%.o: $(SRC_DIR)/%.cpp
mkdir -p $$(@D)
$(CC) $(REL_CPPFLAGS) -DGAME_$(1) $(REL_CFLAGS_32) -c $$< -o $$@
$(OBJ_DIR)/release-$(1)/x86_64/%.o: $(SRC_DIR)/%.cpp
mkdir -p $$(@D)
$(CC) $(REL_CPPFLAGS) -DGAME_$(1) $(REL_CFLAGS_64) -c $$< -o $$@
$(OBJ_DIR)/debug-$(1)/x86/%.o: $(SRC_DIR)/%.cpp
mkdir -p $$(@D)
$(CC) $(DBG_CPPFLAGS) -DGAME_$(1) $(DBG_CFLAGS_32) -c $$< -o $$@
$(OBJ_DIR)/debug-$(1)/x86_64/%.o: $(SRC_DIR)/%.cpp
mkdir -p $$(@D)
$(CC) $(DBG_CPPFLAGS) -DGAME_$(1) $(DBG_CFLAGS_64) -c $$< -o $$@
-include $$(addprefix $(OBJ_DIR)/release-$(1)/x86/,$(OBJ_FILES:.o=.d))
-include $$(addprefix $(OBJ_DIR)/release-$(1)/x86_64/,$(OBJ_FILES:.o=.d))
-include $$(addprefix $(OBJ_DIR)/debug-$(1)/x86/,$(OBJ_FILES:.o=.d))
-include $$(addprefix $(OBJ_DIR)/debug-$(1)/x86_64/,$(OBJ_FILES:.o=.d))
endef
$(foreach game,$(GAMES),$(eval $(call gen_rules,$(game))))
clean:
@$(RM) -rv $(BIN_DIR) $(OBJ_DIR)