-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile
213 lines (186 loc) · 5.41 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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
OBJFOLDER = obj
RESOURCEFOLDER = res
DATAFOLDER = gameData
SOURCEFOLDER = src
ifeq ($(RELEASE), 1)
CXXFLAGS = -O3 -frename-registers -flto -s
LDFLGAGS = -s
EXECUTABLENAME_DEF = DoukutsuRelease
else
CXXFLAGS = -Og -ggdb
EXECUTABLENAME_DEF = DoukutsuDebug
ifneq ($(CONSOLE), 0)
CONSOLE = 1
endif
endif
ifeq ($(JAPANESE), 1)
BUILDFOLDER = buildJp
FILESFOLDER = $(RESOURCEFOLDER)/filesJp
CXXFLAGS += -DJAPANESE
ifeq ($(RELEASE), 1)
EXECUTABLENAME_DEF = DoukutsuReleaseJp
else
EXECUTABLENAME_DEF = DoukutsuDebugJp
endif
else
BUILDFOLDER = buildEn
FILESFOLDER = $(RESOURCEFOLDER)/filesEn
endif
EXECUTABLENAME ?= $(EXECUTABLENAME_DEF)
ifeq ($(FIX_BUGS), 1)
CXXFLAGS += -DFIX_BUGS
endif
ifeq ($(WINDOWS), 1)
ifeq ($(CONSOLE), 1)
CXXFLAGS += -mconsole
endif
CXXFLAGS += -DWINDOWS
LIBS += -lkernel32
endif
ifeq ($(RASPBERRY_PI), 1)
CXXFLAGS += -DRASPBERRY_PI
endif
ifeq ($(WARNINGS), 1)
CXXFLAGS += -Wall -Wextra -Wpedantic
endif
ifeq ($(ALL_WARNINGS),1)
ifneq ($(findstring clang,$(CXX)),)
# Use clang-specific flag -Weverything
CXXFLAGS += -Weverything
else
# Assume g++-compatible compiler (this might requires at least 7.3.0)
CXXFLAGS += -pedantic -Wall -Wextra -Walloc-zero -Walloca -Wbool-compare -Wcast-align -Wcast-qual -Wchar-subscripts -Wchkp -Wctor-dtor-privacy -Wdangling-else -Wdisabled-optimization -Wdouble-promotion -Wduplicated-branches -Wduplicated-cond -Wfloat-conversion -Wformat=2 -Wformat-nonliteral -Wformat-overflow=2 -Wformat-security -Wformat-signedness -Wformat-truncation=2 -Wformat-y2k -Wimport -Winit-self -Winvalid-pch -Wlogical-not-parentheses -Wlogical-op -Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dirs -Wmissing-noreturn -Wnoexcept -Wnoexcept-type -Wnon-virtual-dtor -Wnormalized=nfc -Wold-style-cast -Woverloaded-virtual -Wpointer-arith -Wregister -Wreorder -Wrestrict -Wshadow -Wsizeof-array-argument -Wstack-protector -Wstrict-aliasing=3 -Wstrict-null-sentinel -Wsuggest-attribute=const -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wsuggest-override -Wstrict-null-sentinel -Wswitch-bool -Wundef -Wunreachable-code -Wunused -Wunused-local-typedefs -Wunused-macros -Wunused-parameter -Wvariadic-macros -Wwrite-strings -Wzero-as-null-pointer-constant
endif
endif
# Base command-line when calling the compiler
# `sdl2-config --cflags` to get the flags needed to compile with SDL2
# -MMD -MP -MF $@.d to make the compiler generate dependency files
CXXFLAGS += -std=c++17 `sdl2-config --cflags` `pkg-config freetype2 --cflags` -MMD -MP -MF $@.d -DLODEPNG_NO_COMPILE_ENCODER -DLODEPNG_NO_COMPILE_ERROR_TEXT -DLODEPNG_NO_COMPILE_CPP
LIBS += `sdl2-config --static-libs` `pkg-config freetype2 --libs`
ifeq ($(STATIC), 1)
LDFLAGS += -static
LIBS += `pkg-config sdl2 --libs --static` `pkg-config freetype2 --libs --static` -lfreetype
else
LIBS += `pkg-config sdl2 --libs` `pkg-config freetype2 --libs`
endif
# For an accurate result to the original's code, compile in alphabetical order
SOURCES = \
lodepng/lodepng \
ArmsItem \
Back \
Boss \
BossAlmo1 \
BossAlmo2 \
BossBallos \
BossFrog \
BossIronH \
BossLife \
BossOhm \
BossPress \
BossTwinD \
BossX \
BulHit \
Bullet \
Caret \
Config \
Draw \
Ending \
Escape \
Fade \
File \
Flags \
Flash \
Font \
Frame \
Game \
Generic \
GenericLoad \
Input \
KeyControl \
Main \
Map \
MapName \
MiniMap \
MyChar \
MycHit \
MycParam \
NpcAct000 \
NpcAct020 \
NpcAct040 \
NpcAct060 \
NpcAct080 \
NpcAct100 \
NpcAct120 \
NpcAct140 \
NpcAct160 \
NpcAct180 \
NpcAct200 \
NpcAct220 \
NpcAct240 \
NpcAct260 \
NpcAct280 \
NpcAct300 \
NpcAct320 \
NpcAct340 \
NpChar \
NpcHit \
NpcTbl \
Organya \
PixTone \
Profile \
Resource \
SelStage \
Shoot \
Sound \
Stage \
Star \
TextScr \
Triangle \
ValueView
RESOURCES =
OBJECTS = $(addprefix $(OBJFOLDER)/$(EXECUTABLENAME)/, $(addsuffix .o, $(SOURCES)))
DEPENDENCIES := $(addsuffix .d, $(OBJS))
DEPENDENCIES = $(addprefix obj/$(FILENAME)/, $(addsuffix .o.d, $(SOURCES)))
ifeq ($(WINDOWS), 1)
OBJECTS += $(OBJFOLDER)/$(EXECUTABLENAME)/win_icon.o
endif
all: $(BUILDFOLDER)/$(EXECUTABLENAME) dummyDataTarget
@echo Build finished without errors !
dummyDataTarget:
@echo Syncing data files...
@rsync -a $(FILESFOLDER)/ $(BUILDFOLDER)
@echo Synced data files
$(BUILDFOLDER)/$(EXECUTABLENAME): $(OBJECTS)
@mkdir -p $(@D)
@echo Linking to $@...
@$(CXX) $(CXXFLAGS) $(LDFLAGS) $^ -o $@ $(LIBS)
@echo Finished compiling $@
$(OBJFOLDER)/$(EXECUTABLENAME)/%.o: $(SOURCEFOLDER)/%.cpp
@mkdir -p $(@D)
@echo Compiling $<...
@$(CXX) $(CXXFLAGS) $< -o $@ -c
@echo Finished compiling $<
$(OBJFOLDER)/$(EXECUTABLENAME)/Resource.o: $(SOURCEFOLDER)/Resource.cpp $(addprefix $(SOURCEFOLDER)/Resource/, $(addsuffix .h, $(RESOURCES)))
@mkdir -p $(@D)
@echo Compiling $<...
@$(CXX) $(CXXFLAGS) $< -o $@ -c
@echo Finished compiling $<
$(SOURCEFOLDER)/Resource/%.h: $(RESOURCEFOLDER)/% $(OBJFOLDER)/bin2h
@mkdir -p $(@D)
@echo Converting $<...
@$(OBJFOLDER)/bin2h $< $@
@echo Finished converting $<
$(OBJFOLDER)/bin2h: $(SRCFOLDER)/misc/bin2h.c
@mkdir -p $(@D)
@echo Compiling $^...
@$(CC) -O3 -s -std=c11 $^ -o $@
@echo Finished compiling $^
$(OBJFOLDER)/$(EXECUTABLENAME)/win_icon.o: $(RESOURCEFOLDER)/ICON/ICON.rc $(RESOURCEFOLDER)ICON/0.ico $(RESOURCEFOLDER)/ICON/ICON_MINI.ico
@mkdir -p $(@D)
@echo Making $^...
@windres $< $@
@echo Finished making $^
# Include dependencies
include $(wildcard $(DEPENDENCIES))
clean:
@rm -rf $(BUILDFOLDER) $(OBJFOLDER)