forked from exult/exult
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile.mingw
409 lines (342 loc) · 13.6 KB
/
Makefile.mingw
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
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
# Exult makefile for use in Windows with mingw using gcc 3.2 and msys shell
# It may require a little tweaking. (paths)
# Where is Ultima 7 installed
U7PATH:=C:/Ultima7
# Only used for the Gimp Plug-in
GIMPPATH:=C:/GimpPlugin
# Base of the exult source
SRC=.
ifneq (,$(findstring /mingw64,$(MSYSTEM_PREFIX)))
ARCHFLAGS=-m64
else
ARCHFLAGS=-m32
endif
ifdef USE_CONSOLE
SUBSYSTEM=-mconsole
SYSFLAGS=-DUSE_CONSOLE
else
SUBSYSTEM=-mwindows
SYSFLAGS=
endif
SDL_CFLAGS:=$(shell pkg-config --cflags-only-I SDL2)
### We want to do our own stdout/stderr redirection, thank you.
#SDL_LIBS:=$(shell pkg-config --libs SDL2)
SDL_LIBS:=$(shell pkg-config --libs SDL2)
# -lwinmm
SDL_IMAGE_LIBS:=$(shell pkg-config --libs SDL2_image) $(shell pkg-config --libs SDL2_image)
#-lpng -ltiff -ljpeg -lwebp -lz
### Uncomment these 2 lines, and comment out the 2 above if you want to build
### Exult as a console Win32 application. This is unsupported and is somewhat
### of a hack.
#SDL_LIBS:=$(shell pkg-config --libs-only-L SDL2) $(shell pkg-config --libs-only-l SDL2) -mconsole
#SDL_CFLAGS:=$(shell pkg-config --cflags SDL2)
### Zip File support. Comment out if ZLib isn't installed
### Modify paths, if required
ZIP_CFLAGS:=$(shell pkg-config --cflags zlib) -DHAVE_ZIP_SUPPORT
ifndef STATIC_ZLIB
ZIP_LIBS:=$(shell pkg-config --libs zlib)
else
ZIP_LIBS:=$(shell pkg-config --libs --static zlib)
endif
### FLUIDSYNTH libs, for Exult.
# If this doesn't work, insert output of `pkg-config --libs fluidsynth` manually
FLUIDSYNTH_LIBS:=$(shell pkg-config --libs fluidsynth)
FLUIDSYNTH_CFLAGS:=-DUSE_FLUIDSYNTH_MIDI
### GTK+ libs and includes, for Exult Studio.
# If this doesn't work, insert output of `pkg-config --cflags gtk+-win32-2.0` manually
GTK_INCLUDES:=$(shell pkg-config --cflags gtk+-2.0)
# If this doesn't work, insert output of `pkg-config --libs gtk+-win32-2.0` manually
GTK_LIBS:=$(shell pkg-config --libs gtk+-2.0)
### Glade libs and includes, for Exult Studio.
# If this doesn't work, insert output of 'pkg-config --cflags libglade-2.0' manually
LIBGLADE_INCLUDES:=$(shell pkg-config --cflags libglade-2.0)
# If this doesn't work, insert output of 'pkg-config --libs libglade-2.0' manually
LIBGLADE_LIBS:=$(shell pkg-config --libs libglade-2.0)
### FREETYPE2 libs and includes, for Exult Studio.
# If this doesn't work, insert output of 'pkg-config --cflags freetype2' manually
FREETYPE2_INCLUDES:=$(shell pkg-config --cflags freetype2)
# If this doesn't work, insert output of 'pkg-config --libs freetype2' manually
FREETYPE2_LIBS:=$(shell pkg-config --libs freetype2)
### GIMP libs and includes, for Exult Studio.
# If this doesn't work, insert output of 'pkg-config --cflags gimpui-2.0' manually
GIMP_INCLUDES:=$(shell pkg-config --cflags gimpui-2.0)
# If this doesn't work, insert output of 'pkg-config --libs gimpui-2.0' manually
GIMP_LIBS:=$(shell pkg-config --libs gimpui-2.0)
### Combined Exult Studio includes and libs.
ES_INCLUDES:=$(GTK_INCLUDES) $(LIBGLADE_INCLUDES) $(FREETYPE2_INCLUDES) $(GIMP_INCLUDES)
ES_LIBS:=$(GTK_LIBS) $(LIBGLADE_LIBS) $(FREETYPE2_LIBS) $(ZIP_LIBS) -lpng -luuid -lole32 -lwinmm -lws2_32 $(SUBSYSTEM)
### Ogg vorbis inclides
OGG_INCLUDES:=$(shell pkg-config --cflags ogg vorbis vorbisfile)
OGG_LIBS:=$(shell pkg-config --libs vorbisfile vorbis ogg)
### MT32Emu stuff
MT32EMU_VERSION_MAJOR:=2
MT32EMU_VERSION_MINOR:=0
MT32EMU_VERSION_PATCH:=0
MT32EMU_VERSION:=\"$(MT32EMU_VERSION_MAJOR).$(MT32EMU_VERSION_MINOR).$(MT32EMU_VERSION_PATCH)\"
MT32EMU_CFLAGS:=-DMT32EMU_EXPORTS_TYPE=0 -DMT32EMU_API_TYPE=0 \
-DMT32EMU_VERSION_MAJOR=$(MT32EMU_VERSION_MAJOR) \
-DMT32EMU_VERSION_MINOR=$(MT32EMU_VERSION_MINOR) \
-DMT32EMU_VERSION_PATCH=$(MT32EMU_VERSION_PATCH) \
-DMT32EMU_VERSION=$(MT32EMU_VERSION)
ifdef DEBUG_SYMBOLS
DEBUG_LEVEL=-g3
endif
ifdef DEBUG
DEF_DEBUG=-DDEBUG
endif
ifdef USECODE_CONTAINER
SHOW_USECODE_CONTAINER=-DSHOW_USECODE_CONTAINER
endif
ifdef USECODE_DEBUGGER
USE_USECODE_DEBUGGER=-DUSECODE_DEBUGGER
endif
ifdef SHOW_NONREADIED_OBJECTS
USE_SHOW_NONREADIED_OBJECTS=-DSHOW_NONREADIED_OBJECTS
endif
USING_SJLJ_EXCEPTIONS:=$(findstring --enable-sjlj-exceptions, $(shell gcc -v 2>&1))
ifeq ($(USING_SJLJ_EXCEPTIONS),$())
MTHREADS=
else
WARN:=$(warning This compiler uses SJLJ exceptions; for thread safety, the -mthreads option is being used.)
WARN:=$(warning The compiled binary will depend on MINGWM10.DLL; make sure it is somewhere Exult can find it.)
MTHREADS=-mthreads
endif
EXTRA_OPTIONS=$(DEBUG_LEVEL) $(DEF_DEBUG) $(SHOW_USECODE_CONTAINER) $(USE_USECODE_DEBUGGER) $(USE_SHOW_NONREADIED_OBJECTS)
CPPFLAGS=$(strip -DVERSION=\"$(VERSION)\" -DEXULT_DATADIR=\"data\" \
-DNOMINMAX=1 -D_USE_MATH_DEFINES -DHAVE_NETDB_H=0 $(SYSFLAGS) \
-DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYS_SOCKET_H=0 \
-DHAVE_SNPRINTF -DUSE_FMOPL_MIDI -DUSE_MT32EMU_MIDI $(FLUIDSYNTH_CFLAGS) \
-DUSE_EXULTSTUDIO -DHAVE_PNG_H \
-DHAVE_FREETYPE2 -DUSE_HQ2X_SCALER -DUSE_HQ3X_SCALER -DUSE_HQ4X_SCALER -DUSE_XBR_SCALER \
-I$(SRC) -I$(SRC)/audio -I$(SRC)/audio/midi_drivers -I$(SRC)/conf -I$(SRC)/data \
-I$(SRC)/files -I$(SRC)/files/zip -I$(SRC)/gamemgr -I$(SRC)/gumps -I$(SRC)/headers \
-I$(SRC)/imagewin -I$(SRC)/objs -I$(SRC)/pathfinder -I$(SRC)/server -I$(SRC)/shapes \
-I$(SRC)/tools -I$(SRC)/usecode -I$(SRC)/usecode/compiler -I$(SRC)/usecode/ucxt/include \
-I$(SRC)/mapedit -I$(SRC)/shapes/shapeinf $(SDL_CFLAGS) \
$(ZIP_CFLAGS) $(MT32EMU_CFLAGS) $(ES_INCLUDES) \
$(EXTRA_OPTIONS))
ifndef OPT_LEVEL
OPT_LEVEL=-O2
endif
ifdef DEBUG_SYMBOLS
OPT_LEVEL=-Og
endif
CXXFLAGS=-MMD -std=c++14 $(ARCHFLAGS) $(strip $(OPT_LEVEL) -Wall -Wextra -pedantic -Walloc-zero -Walloca -Wc++14-compat -Wc++17-compat -Wcast-align -Wcast-qual -Wconditionally-supported -Wctor-dtor-privacy -Wdisabled-optimization -Wduplicated-branches -Wduplicated-cond -Wformat-nonliteral -Wformat-security -Wlogical-not-parentheses -Wlogical-op -Wmissing-include-dirs -Wnon-virtual-dtor -Wold-style-cast -Woverloaded-virtual -Wplacement-new -Wredundant-decls -Wshift-negative-value -Wshift-overflow -Wtrigraphs -Wundef -Wuninitialized -Wuseless-cast -Wwrite-strings -Wzero-as-null-pointer-constant -mms-bitfields -Wno-deprecated-declarations)
CXX?=g++
CFLAGS=-MMD $(ARCHFLAGS) $(strip $(OPT_LEVEL) -Wall -Wextra -pedantic -mms-bitfields)
CC?=gcc
LDFLAGS=$(ARCHFLAGS)
LIBS=-lmingw32 $(SDL_LIBS) $(ZIP_LIBS) $(OGG_LIBS) $(FLUIDSYNTH_LIBS) -ldsound -luuid -lole32 -lwinmm -lws2_32 $(SUBSYSTEM) $(MTHREADS)
EXEC=Exult.exe
EXEEXT=.exe
LIBEXT=.dll
EXP_FILE=exult_studio.exp
SERVER_OBJS=\
server/objserial.o \
server/servemsg.o \
server/server.o \
server/servewin32.o
ICON_OBJS=exultico.o
ES_SERVER_OBJS=\
server/objserial.o \
server/servemsg.o \
server/servewin32.o
MAPEDIT_OBJS=\
mapedit/bargeedit.o \
mapedit/chunklst.o \
mapedit/combo.o \
mapedit/compile.o \
mapedit/contedit.o \
mapedit/eggedit.o \
mapedit/execbox.o \
mapedit/exult_studio.o \
mapedit/locator.o \
mapedit/maps.o \
mapedit/npcedit.o \
mapedit/npclst.o \
mapedit/objbrowse.o \
mapedit/objedit.o \
mapedit/paledit.o \
mapedit/shapedraw.o \
mapedit/shapeedit.o \
mapedit/shapefile.o \
mapedit/shapegroup.o \
mapedit/shapelst.o \
mapedit/studio.o \
mapedit/ucbrowse.o \
usecode/ucsymtbl.o
ES_FILES_OBJS=\
files/crc.o \
files/Flat.o \
files/Flex.o \
files/IFF.o \
files/listfiles.o \
files/msgfile.o \
files/Table.o \
files/U7file.o \
files/U7fileman.o \
files/U7obj.o \
files/utils.o
ES_GAMEMGR_OBJS=gamemgr/modmgr.o
ES_IMAGEWIN_OBJS=\
imagewin/ibuf8.o \
imagewin/imagebuf.o
ES_SHAPES_OBJS=\
shapes/font.o \
shapes/fontgen.o \
shapes/fontvga.o \
shapes/items.o \
shapes/pngio.o \
shapes/shapeinf.o \
shapes/shapewrite.o \
shapes/shapevga.o \
shapes/u7drag.o \
shapes/vgafile.o \
shapes/shapeinf/ammoinf.o \
shapes/shapeinf/aniinf.o \
shapes/shapeinf/armorinf.o \
shapes/shapeinf/bodyinf.o \
shapes/shapeinf/continf.o \
shapes/shapeinf/effhpinf.o \
shapes/shapeinf/expinf.o \
shapes/shapeinf/frnameinf.o \
shapes/shapeinf/frflags.o \
shapes/shapeinf/frusefun.o \
shapes/shapeinf/lightinf.o \
shapes/shapeinf/monstinf.o \
shapes/shapeinf/npcdollinf.o \
shapes/shapeinf/objdollinf.o \
shapes/shapeinf/sfxinf.o \
shapes/shapeinf/warminf.o \
shapes/shapeinf/weaponinf.o
MISC_OBJS=exultstudioico.o windrag.o
ES_OBJS=$(MAPEDIT_OBJS) $(ES_FILES_OBJS) $(ES_GAMEMGR_OBJS) $(ES_IMAGEWIN_OBJS) $(ES_SHAPES_OBJS) \
$(ES_SERVER_OBJS) $(CONF_OBJS) $(MISC_OBJS) $(ZIP_OBJS)
TOOL_EXES:=expack$(EXEEXT) cmanip$(EXEEXT) ipack$(EXEEXT) mklink$(EXEEXT) mockup$(EXEEXT) rip$(EXEEXT) \
shp2pcx$(EXEEXT) smooth$(EXEEXT) splitshp$(EXEEXT) textpack$(EXEEXT) wuc$(EXEEXT) u7voice2syx$(EXEEXT) \
ucc$(EXEEXT) libsmooth_randomize$(LIBEXT) libsmooth_smooth$(LIBEXT) libsmooth_stream$(LIBEXT)
define copy_dlls_for_exe
for ff in $$(ldd $(1) | grep -o '$(MSYSTEM_PREFIX)/.\+\.dll' | sort -u); do cp $$ff $(2)/$$(basename $$ff); done
endef
include Makefile.common
OBJECTS=$(OBJS) $(TOOL_OBJS) $(ES_OBJS) mapedit/u7shp.o
exultico.o: win32/exultico.rc win32/exult.ico win32/exult.exe.manifest
windres --include-dir win32 win32/exultico.rc exultico.o
exconfig_rc.o: win32/exconfig.rc
windres --include-dir win32 win32/exconfig.rc exconfig_rc.o
exconfig.dll: win32/exconfig.def $(FILE_OBJS) $(CONF_OBJS) exconfig_rc.o win32/exconfig.o
dllwrap --def win32/exconfig.def -o $@ $(FILE_OBJS) $(CONF_OBJS) exconfig_rc.o win32/exconfig.o -static -lstdc++
exult_studio$(EXEEXT): $(BG_PAPERDOLL) $(FLEXES) $(ES_OBJS) $(EXP_FILE)
$(CXX) $(LDFLAGS) $(EXP_FILE) -o $@ $(ES_OBJS) $(ES_LIBS)
$(EXP_FILE): $(ES_OBJS)
dlltool --output-exp $@ $(ES_OBJS) -D exult_studio$(EXEEXT)
exultstudioico.o: $(SRC)/win32/exultstudioico.rc $(SRC)/win32/exultstudio.ico win32/exult_studio.exe.manifest
windres --include-dir $(SRC)/win32 $(SRC)/win32/exultstudioico.rc $@
u7shp$(EXEEXT) : mapedit/u7shp.o
$(CXX) $(LDFLAGS) -o $(@) $+ $(GTK_LIBS) $(GIMP_LIBS) -mwindows
install: $(EXEC)
mkdir -p $(U7PATH)
strip $(EXEC) -o $(U7PATH)/$(EXEC)
$(call copy_dlls_for_exe, $(EXEC), $(U7PATH))
mkdir -p $(U7PATH)/data
cp data/exult.flx $(U7PATH)/data
cp data/exult_bg.flx $(U7PATH)/data
cp data/exult_si.flx $(U7PATH)/data
debug: $(EXEC)
mkdir -p $(U7PATH)
cp $(EXEC) $(U7PATH)
$(call copy_dlls_for_exe, $(EXEC), $(U7PATH))
mkdir -p $(U7PATH)/data
cp data/exult.flx $(U7PATH)/data
cp data/exult_bg.flx $(U7PATH)/data
cp data/exult_si.flx $(U7PATH)/data
dist: U7PATH:=$(U7PATH)/Exult
dist: $(EXEC) exconfig.dll install
cp AUTHORS $(U7PATH)/AUTHORS.txt
cp ChangeLog $(U7PATH)/ChangeLog.txt
cp COPYING $(U7PATH)/COPYING.txt
cp FAQ $(U7PATH)/FAQ.txt
cp docs/faq.html $(U7PATH)
mkdir -p $(U7PATH)/images
cp docs/images/*.gif $(U7PATH)/images
cp docs/images/docs*.png $(U7PATH)/images
cp NEWS $(U7PATH)/NEWS.txt
cp README $(U7PATH)/README.txt
cp README.1ST $(U7PATH)/README.1ST.txt
cp docs/ReadMe.html $(U7PATH)
cp README.win32 $(U7PATH)/README.win32.txt
cp data/bg/defaultkeys.txt $(U7PATH)/bgdefaultkeys.txt
cp data/si/defaultkeys.txt $(U7PATH)/sidefaultkeys.txt
u2d $(U7PATH)/*.txt
strip exconfig.dll -o $(U7PATH)/exconfig.dll
cp win32/exult_installer.iss $(U7PATH)
toolsinstall: tools
mkdir -p $(U7PATH)
mkdir -p $(U7PATH)/tools
strip ucxt$(EXEEXT) -o $(U7PATH)/ucxt$(EXEEXT)
for ff in $(TOOL_EXES); do strip $$ff -o $(U7PATH)/tools/$$ff; done
$(call copy_dlls_for_exe, ucxt$(EXEEXT), $(U7PATH))
$(call copy_dlls_for_exe, $(TOOL_EXES), $(U7PATH)/tools)
mkdir -p $(U7PATH)/data
cp usecode/ucxt/data/events.data $(U7PATH)/data
cp usecode/ucxt/data/flags.data $(U7PATH)/data
cp usecode/ucxt/data/u7opcodes.data $(U7PATH)/data
cp usecode/ucxt/data/u7misc.data $(U7PATH)/data
cp data/bginclude.uc $(U7PATH)/data
cp data/u7bgintrinsics.data $(U7PATH)/data
cp data/u7siintrinsics.data $(U7PATH)/data
cp data/u7sibetaintrinsics.data $(U7PATH)/data
toolsdist: U7PATH:=$(U7PATH)/Tools
toolsdist: tools toolsinstall
cp tools/expack.txt $(U7PATH)/tools
cp tools/intrins1.txt $(U7PATH)/tools
cp tools/intrins2.txt $(U7PATH)/tools
cp tools/ipack.txt $(U7PATH)/tools
cp tools/shp2pcx.txt $(U7PATH)/tools
cp tools/splitshp.txt $(U7PATH)/tools
cp tools/textpack.txt $(U7PATH)/tools
cp tools/u7bgflag.txt $(U7PATH)/tools
cp tools/u7siflag.txt $(U7PATH)/tools
cp tools/ucformat.txt $(U7PATH)/tools
u2d $(U7PATH)/tools/*.txt
cp win32/exult_tools_installer.iss $(U7PATH)
studioclean:
rm -f $(ES_OBJS) $(ES_OBJS:%.o=%.d) $(EXP_FILE) exult_studio$(EXEEXT)
studioinstall: exult_studio$(EXEEXT)
mkdir -p $(U7PATH)
strip exult_studio$(EXEEXT) -o $(U7PATH)/exult_studio$(EXEEXT)
$(call copy_dlls_for_exe, exult_studio$(EXEEXT), $(U7PATH))
mkdir -p $(U7PATH)/data
cp mapedit/exult_studio.glade $(U7PATH)/data
mkdir -p $(U7PATH)/data/estudio
mkdir -p $(U7PATH)/data/estudio/new
cp data/estudio/new/*.dat $(U7PATH)/data/estudio/new
cp data/estudio/new/*.flx $(U7PATH)/data/estudio/new
cp data/estudio/new/*.vga $(U7PATH)/data/estudio/new
cp data/estudio/new/*.shp $(U7PATH)/data/estudio/new
studiodist: U7PATH:=$(U7PATH)/Studio
studiodist: exult_studio$(EXEEXT) studioinstall
cp docs/exult_studio.html $(U7PATH)
cp docs/exult_studio.txt $(U7PATH)
mkdir -p $(U7PATH)/images
cp docs/images/*.gif $(U7PATH)/images
cp docs/images/studio*.png $(U7PATH)/images
u2d $(U7PATH)/*.txt
cp win32/exult_studio_installer.iss $(U7PATH)
pluginclean:
rm -f u7shp$(EXEEXT) mapedit/u7shp.o mapedit/u7shp.d
plugin: u7shp$(EXEEXT)
plugininstall: plugin
mkdir -p $(GIMPPATH)
strip u7shp$(EXEEXT) -o $(GIMPPATH)/u7shp$(EXEEXT)
$(call copy_dlls_for_exe, u7shp$(EXEEXT), $(GIMPPATH))
plugindist: GIMPPATH:=$(U7PATH)/GimpPlugin
plugindist: plugin plugininstall
cp mapedit/gimpwin32.txt $(GIMPPATH)
u2d $(GIMPPATH)/*.txt
allclean: clean toolsclean studioclean
rm -f exconfig.dll exconfig_rc.o win32/exconfig.o
allinstall: install toolsinstall studioinstall
run:
start $(EXEC)
-include $(OBJECTS:%.o=%.d)