]> git.xonotic.org Git - xonotic/darkplaces.git/blob - makefile
Revert "removed modplug support, the library is too insecure and barely used by anyone"
[xonotic/darkplaces.git] / makefile
1 #####  DP_MAKE_TARGET autodetection and arch specific variables #####
2
3 ifndef DP_MAKE_TARGET
4
5 # Win32
6 ifdef WINDIR
7         DP_MAKE_TARGET=mingw
8 else
9
10 # UNIXes
11 DP_ARCH:=$(shell uname)
12 ifneq ($(filter %BSD,$(DP_ARCH)),)
13         DP_MAKE_TARGET=bsd
14 else
15 ifeq ($(DP_ARCH), Darwin)
16         DP_MAKE_TARGET=macosx
17 else
18 ifeq ($(DP_ARCH), SunOS)
19         DP_MAKE_TARGET=sunos
20 else
21         DP_MAKE_TARGET=linux
22
23 endif  # ifeq ($(DP_ARCH), SunOS)
24 endif  # ifeq ($(DP_ARCH), Darwin)
25 endif  # ifneq ($(filter %BSD,$(DP_ARCH)),)
26 endif  # ifdef windir
27 endif  # ifndef DP_MAKE_TARGET
28
29 # If we're not on compiling for Win32, we need additional information
30 ifneq ($(DP_MAKE_TARGET), mingw)
31         DP_ARCH:=$(shell uname)
32         DP_MACHINE:=$(shell uname -m)
33 endif
34
35 # Makefile name
36 MAKEFILE=makefile
37
38 # Commands
39 ifdef windir
40         CMD_RM=del
41         CMD_CP=copy /y
42         CMD_MKDIR=mkdir
43 else
44         CMD_RM=$(CMD_UNIXRM)
45         CMD_CP=$(CMD_UNIXCP)
46         CMD_MKDIR=$(CMD_UNIXMKDIR)
47 endif
48
49 # 64bits AMD CPUs use another lib directory
50 ifeq ($(DP_MACHINE),x86_64)
51         UNIX_X11LIBPATH:=/usr/X11R6/lib64
52 else
53         UNIX_X11LIBPATH:=/usr/X11R6/lib
54 endif
55
56 # default targets
57 TARGETS_DEBUG=sv-debug cl-debug sdl-debug
58 TARGETS_PROFILE=sv-profile cl-profile sdl-profile
59 TARGETS_RELEASE=sv-release cl-release sdl-release
60 TARGETS_RELEASE_PROFILE=sv-release-profile cl-release-profile sdl-release-profile
61 TARGETS_NEXUIZ=sv-nexuiz cl-nexuiz sdl-nexuiz
62
63 ###### Optional features #####
64 DP_CDDA?=enabled
65 ifeq ($(DP_CDDA), enabled)
66         OBJ_SDLCD=$(OBJ_CD_COMMON) cd_sdl.o
67         OBJ_LINUXCD=$(OBJ_CD_COMMON) cd_linux.o
68         OBJ_BSDCD=$(OBJ_CD_COMMON) cd_bsd.o
69         OBJ_WINCD=$(OBJ_CD_COMMON) cd_win.o
70 else
71         OBJ_SDLCD=$(OBJ_CD_COMMON) $(OBJ_NOCD)
72         OBJ_LINUXCD=$(OBJ_CD_COMMON) $(OBJ_NOCD)
73         OBJ_BSDCD=$(OBJ_CD_COMMON) $(OBJ_NOCD)
74         OBJ_WINCD=$(OBJ_CD_COMMON) $(OBJ_NOCD)
75 endif
76
77 DP_VIDEO_CAPTURE?=enabled
78 ifeq ($(DP_VIDEO_CAPTURE), enabled)
79         CFLAGS_VIDEO_CAPTURE=-DCONFIG_VIDEO_CAPTURE
80         OBJ_VIDEO_CAPTURE= cap_avi.o cap_ogg.o
81 else
82         CFLAGS_VIDEO_CAPTURE=
83         OBJ_VIDEO_CAPTURE=
84 endif
85
86 # Linux configuration
87 ifeq ($(DP_MAKE_TARGET), linux)
88         DEFAULT_SNDAPI=ALSA
89         OBJ_CD=$(OBJ_LINUXCD)
90
91         OBJ_CL=$(OBJ_GLX)
92         OBJ_ICON=
93         OBJ_ICON_NEXUIZ=
94
95         LDFLAGS_CL=$(LDFLAGS_LINUXCL)
96         LDFLAGS_SV=$(LDFLAGS_LINUXSV)
97         LDFLAGS_SDL=$(LDFLAGS_LINUXSDL)
98
99         SDLCONFIG_CFLAGS=$(SDLCONFIG_UNIXCFLAGS) $(SDLCONFIG_UNIXCFLAGS_X11)
100         SDLCONFIG_LIBS=$(SDLCONFIG_UNIXLIBS) $(SDLCONFIG_UNIXLIBS_X11)
101         SDLCONFIG_STATICLIBS=$(SDLCONFIG_UNIXSTATICLIBS) $(SDLCONFIG_UNIXSTATICLIBS_X11)
102
103         EXE_CL=$(EXE_UNIXCL)
104         EXE_SV=$(EXE_UNIXSV)
105         EXE_SDL=$(EXE_UNIXSDL)
106         EXE_CLNEXUIZ=$(EXE_UNIXCLNEXUIZ)
107         EXE_SVNEXUIZ=$(EXE_UNIXSVNEXUIZ)
108         EXE_SDLNEXUIZ=$(EXE_UNIXSDLNEXUIZ)
109
110         DP_LINK_ZLIB?=shared
111         DP_LINK_JPEG?=shared
112         DP_LINK_ODE?=dlopen
113         DP_LINK_CRYPTO?=dlopen
114         DP_LINK_CRYPTO_RIJNDAEL?=dlopen
115         DP_LINK_MODPLUG?=dlopen
116 endif
117
118 # Mac OS X configuration
119 ifeq ($(DP_MAKE_TARGET), macosx)
120         DEFAULT_SNDAPI=COREAUDIO
121         OBJ_CD=$(OBJ_MACOSXCD)
122
123         OBJ_CL=$(OBJ_AGL)
124         OBJ_ICON=
125         OBJ_ICON_NEXUIZ=
126
127         LDFLAGS_CL=$(LDFLAGS_MACOSXCL)
128         LDFLAGS_SV=$(LDFLAGS_MACOSXSV)
129         LDFLAGS_SDL=$(LDFLAGS_MACOSXSDL)
130
131         SDLCONFIG_CFLAGS=$(SDLCONFIG_MACOSXCFLAGS)
132         SDLCONFIG_LIBS=$(SDLCONFIG_MACOSXLIBS)
133         SDLCONFIG_STATICLIBS=$(SDLCONFIG_MACOSXSTATICLIBS)
134
135         EXE_CL=$(EXE_MACOSXCL)
136         EXE_SV=$(EXE_UNIXSV)
137         EXE_SDL=$(EXE_UNIXSDL)
138         EXE_CLNEXUIZ=$(EXE_MACOSXCLNEXUIZ)
139         EXE_SVNEXUIZ=$(EXE_UNIXSVNEXUIZ)
140         EXE_SDLNEXUIZ=$(EXE_UNIXSDLNEXUIZ)
141
142         ifeq ($(word 2, $(filter -arch, $(CC))), -arch)
143                 CFLAGS_MAKEDEP=
144         endif
145
146         DP_LINK_ZLIB?=shared
147         DP_LINK_JPEG?=dlopen
148         DP_LINK_ODE?=dlopen
149         DP_LINK_CRYPTO?=dlopen
150         DP_LINK_CRYPTO_RIJNDAEL?=dlopen
151         DP_LINK_MODPLUG?=dlopen
152
153         # on OS X, we don't build the CL by default because it uses deprecated
154         # and not-implemented-in-64bit Carbon
155         TARGETS_DEBUG=sv-debug sdl-debug
156         TARGETS_PROFILE=sv-profile sdl-profile
157         TARGETS_RELEASE=sv-release sdl-release
158         TARGETS_RELEASE_PROFILE=sv-release-profile sdl-release-profile
159         TARGETS_NEXUIZ=sv-nexuiz sdl-nexuiz
160 endif
161
162 # SunOS configuration (Solaris)
163 ifeq ($(DP_MAKE_TARGET), sunos)
164         DEFAULT_SNDAPI=BSD
165         OBJ_CD=$(OBJ_SUNOSCD)
166
167         OBJ_CL=$(OBJ_GLX)
168         OBJ_ICON=
169         OBJ_ICON_NEXUIZ=
170
171         CFLAGS_EXTRA=$(CFLAGS_SUNOS)
172
173         LDFLAGS_CL=$(LDFLAGS_SUNOSCL)
174         LDFLAGS_SV=$(LDFLAGS_SUNOSSV)
175         LDFLAGS_SDL=$(LDFLAGS_SUNOSSDL)
176
177         SDLCONFIG_CFLAGS=$(SDLCONFIG_UNIXCFLAGS) $(SDLCONFIG_UNIXCFLAGS_X11)
178         SDLCONFIG_LIBS=$(SDLCONFIG_UNIXLIBS) $(SDLCONFIG_UNIXLIBS_X11)
179         SDLCONFIG_STATICLIBS=$(SDLCONFIG_UNIXSTATICLIBS) $(SDLCONFIG_UNIXSTATICLIBS_X11)
180
181         EXE_CL=$(EXE_UNIXCL)
182         EXE_SV=$(EXE_UNIXSV)
183         EXE_SDL=$(EXE_UNIXSDL)
184         EXE_CLNEXUIZ=$(EXE_UNIXCLNEXUIZ)
185         EXE_SVNEXUIZ=$(EXE_UNIXSVNEXUIZ)
186         EXE_SDLNEXUIZ=$(EXE_UNIXSDLNEXUIZ)
187
188         DP_LINK_ZLIB?=shared
189         DP_LINK_JPEG?=shared
190         DP_LINK_ODE?=dlopen
191         DP_LINK_CRYPTO?=dlopen
192         DP_LINK_CRYPTO_RIJNDAEL?=dlopen
193         DP_LINK_MODPLUG?=dlopen
194 endif
195
196 # BSD configuration
197 ifeq ($(DP_MAKE_TARGET), bsd)
198 ifeq ($(DP_ARCH),FreeBSD)
199         DEFAULT_SNDAPI=OSS
200 else
201         DEFAULT_SNDAPI=BSD
202 endif
203         OBJ_CD=$(OBJ_BSDCD)
204
205         OBJ_CL=$(OBJ_GLX)
206         OBJ_ICON=
207         OBJ_ICON_NEXUIZ=
208
209         LDFLAGS_CL=$(LDFLAGS_BSDCL)
210         LDFLAGS_SV=$(LDFLAGS_BSDSV)
211         LDFLAGS_SDL=$(LDFLAGS_BSDSDL)
212
213         SDLCONFIG_CFLAGS=$(SDLCONFIG_UNIXCFLAGS) $(SDLCONFIG_UNIXCFLAGS_X11)
214         SDLCONFIG_LIBS=$(SDLCONFIG_UNIXLIBS) $(SDLCONFIG_UNIXLIBS_X11)
215         SDLCONFIG_STATICLIBS=$(SDLCONFIG_UNIXSTATICLIBS) $(SDLCONFIG_UNIXSTATICLIBS_X11)
216
217         EXE_CL=$(EXE_UNIXCL)
218         EXE_SV=$(EXE_UNIXSV)
219         EXE_SDL=$(EXE_UNIXSDL)
220         EXE_CLNEXUIZ=$(EXE_UNIXCLNEXUIZ)
221         EXE_SVNEXUIZ=$(EXE_UNIXSVNEXUIZ)
222         EXE_SDLNEXUIZ=$(EXE_UNIXSDLNEXUIZ)
223
224         DP_LINK_ZLIB?=shared
225         DP_LINK_JPEG?=shared
226         DP_LINK_ODE?=dlopen
227         DP_LINK_CRYPTO?=dlopen
228         DP_LINK_CRYPTO_RIJNDAEL?=dlopen
229         DP_LINK_MODPLUG?=dlopen
230 endif
231
232 # Win32 configuration
233 ifeq ($(WIN32RELEASE), 1)
234 #       TARGET=i686-pc-mingw32
235 #       CC=$(TARGET)-g++
236 #       WINDRES=$(TARGET)-windres
237         CPUOPTIMIZATIONS=-march=pentium3 -mfpmath=sse -fno-math-errno -ffinite-math-only -fno-rounding-math -fno-signaling-nans -fno-trapping-math
238 #       CPUOPTIMIZATIONS+=-DUSE_WSPIAPI_H -DSUPPORTIPV6
239         LDFLAGS_WINCOMMON=-Wl,--large-address-aware
240 else
241         LDFLAGS_WINCOMMON=
242 endif
243
244 ifeq ($(WIN64RELEASE), 1)
245 #       TARGET=x86_64-pc-mingw32
246 #       CC=$(TARGET)-g++
247 #       WINDRES=$(TARGET)-windres
248 endif
249
250 ifeq ($(D3D), 1)
251         CFLAGS_D3D=-DSUPPORTD3D -DSUPPORTDIRECTX
252         CFLAGS_WARNINGS=-Wall
253         LDFLAGS_D3D=-ld3d9
254 else
255         CFLAGS_D3D=
256         CFLAGS_WARNINGS=-Wall -Wold-style-definition -Wstrict-prototypes -Wsign-compare -Wdeclaration-after-statement -Wmissing-prototypes
257         LDFLAGS_D3D=
258 endif
259
260
261 ifeq ($(DP_MAKE_TARGET), mingw)
262         DEFAULT_SNDAPI=WIN
263         OBJ_CD=$(OBJ_WINCD)
264
265         OBJ_CL=$(OBJ_WGL)
266         OBJ_ICON=darkplaces.o
267         OBJ_ICON_NEXUIZ=nexuiz.o
268
269         LDFLAGS_CL=$(LDFLAGS_WINCL)
270         LDFLAGS_SV=$(LDFLAGS_WINSV)
271         LDFLAGS_SDL=$(LDFLAGS_WINSDL)
272
273         SDLCONFIG_CFLAGS=$(SDLCONFIG_UNIXCFLAGS)
274         SDLCONFIG_LIBS=$(SDLCONFIG_UNIXLIBS)
275         SDLCONFIG_STATICLIBS=$(SDLCONFIG_UNIXSTATICLIBS)
276
277         EXE_CL=$(EXE_WINCL)
278         EXE_SV=$(EXE_WINSV)
279         EXE_SDL=$(EXE_WINSDL)
280         EXE_CLNEXUIZ=$(EXE_WINCLNEXUIZ)
281         EXE_SVNEXUIZ=$(EXE_WINSVNEXUIZ)
282         EXE_SDLNEXUIZ=$(EXE_WINSDLNEXUIZ)
283
284         DP_LINK_ZLIB?=dlopen
285         DP_LINK_JPEG?=shared
286         DP_LINK_ODE?=dlopen
287         DP_LINK_CRYPTO?=dlopen
288         DP_LINK_CRYPTO_RIJNDAEL?=dlopen
289         DP_LINK_MODPLUG?=dlopen
290 endif
291
292 # set these to "" if you want to use dynamic loading instead
293 # zlib
294 ifeq ($(DP_LINK_ZLIB), shared)
295         CFLAGS_LIBZ=-DLINK_TO_ZLIB
296         LIB_Z=-lz
297 endif
298 ifeq ($(DP_LINK_ZLIB), dlopen)
299         CFLAGS_LIBZ=
300         LIB_Z=
301 endif
302
303 # jpeg
304 ifeq ($(DP_LINK_JPEG), shared)
305         CFLAGS_LIBJPEG=-DLINK_TO_LIBJPEG
306         LIB_JPEG=-ljpeg
307 endif
308 ifeq ($(DP_LINK_JPEG), dlopen)
309         CFLAGS_LIBJPEG=
310         LIB_JPEG=
311 endif
312
313 # ode
314 ifeq ($(DP_LINK_ODE), shared)
315         ODE_CONFIG?=ode-config
316         LIB_ODE=`$(ODE_CONFIG) --libs`
317         CFLAGS_ODE=`$(ODE_CONFIG) --cflags` -DUSEODE -DLINK_TO_LIBODE
318 endif
319 ifeq ($(DP_LINK_ODE), dlopen)
320         LIB_ODE=
321         CFLAGS_ODE=-DUSEODE
322 endif
323
324 # d0_blind_id
325 ifeq ($(DP_LINK_CRYPTO), shared)
326         LIB_CRYPTO=-ld0_blind_id
327         CFLAGS_CRYPTO=-DLINK_TO_CRYPTO
328 endif
329 ifeq ($(DP_LINK_CRYPTO), dlopen)
330         LIB_CRYPTO=
331         CFLAGS_CRYPTO=
332 endif
333 ifeq ($(DP_LINK_CRYPTO_RIJNDAEL), shared)
334         LIB_CRYPTO_RIJNDAEL=-ld0_rijndael
335         CFLAGS_CRYPTO_RIJNDAEL=-DLINK_TO_CRYPTO_RIJNDAEL
336 endif
337 ifeq ($(DP_LINK_CRYPTO_RIJNDAEL), dlopen)
338         LIB_CRYPTO_RIJNDAEL=
339         CFLAGS_CRYPTO_RIJNDAEL=
340 endif
341
342 # modplug
343 ifeq ($(DP_LINK_MODPLUG), shared)
344         CFLAGS_SND_MODPLUG=-DLINK_TO_LIBMODPLUG
345         LIB_SND_MODPLUG=-lmodplug
346 endif
347 ifeq ($(DP_LINK_MODPLUG), dlopen)
348         CFLAGS_SND_MODPLUG=
349         LIB_SND_MODPLUG=
350 endif
351
352
353 ##### Sound configuration #####
354
355 ifndef DP_SOUND_API
356         DP_SOUND_API=$(DEFAULT_SNDAPI)
357 endif
358
359 # NULL: no sound
360 ifeq ($(DP_SOUND_API), NULL)
361         OBJ_SOUND=$(OBJ_SND_NULL)
362         LIB_SOUND=$(LIB_SND_NULL)
363 endif
364
365 # OSS: Open Sound System
366 ifeq ($(DP_SOUND_API), OSS)
367         OBJ_SOUND=$(OBJ_SND_OSS)
368         LIB_SOUND=$(LIB_SND_OSS)
369 endif
370
371 # ALSA: Advanced Linux Sound Architecture
372 ifeq ($(DP_SOUND_API), ALSA)
373         OBJ_SOUND=$(OBJ_SND_ALSA)
374         LIB_SOUND=$(LIB_SND_ALSA)
375 endif
376
377 # COREAUDIO: Core Audio
378 ifeq ($(DP_SOUND_API), COREAUDIO)
379         OBJ_SOUND=$(OBJ_SND_COREAUDIO)
380         LIB_SOUND=$(LIB_SND_COREAUDIO)
381 endif
382
383 # BSD: BSD / Sun audio API
384 ifeq ($(DP_SOUND_API), BSD)
385         OBJ_SOUND=$(OBJ_SND_BSD)
386         LIB_SOUND=$(LIB_SND_BSD)
387 endif
388
389 # WIN: DirectX and Win32 WAVE output
390 ifeq ($(DP_SOUND_API), WIN)
391         OBJ_SOUND=$(OBJ_SND_WIN)
392         LIB_SOUND=$(LIB_SND_WIN)
393 endif
394
395 ifeq ($(DP_SOUND_API),3DRAS)
396         OBJ_SOUND=$(OBJ_SND_3DRAS)
397         LIB_SOUND=$(LIB_SND_3DRAS)
398 endif
399
400 ##### Extra CFLAGS #####
401
402 CFLAGS_MAKEDEP?=-MMD
403 ifdef DP_FS_BASEDIR
404         CFLAGS_FS=-DDP_FS_BASEDIR=\"$(DP_FS_BASEDIR)\"
405 else
406         CFLAGS_FS=
407 endif
408
409 CFLAGS_PRELOAD=
410 ifneq ($(DP_MAKE_TARGET), mingw)
411 ifdef DP_PRELOAD_DEPENDENCIES
412 # DP_PRELOAD_DEPENDENCIES: when set, link against the libraries needed using -l
413 # dynamically so they won't get loaded at runtime using dlopen
414         LDFLAGS_CL+=$(LDFLAGS_UNIXCL_PRELOAD)
415         LDFLAGS_SV+=$(LDFLAGS_UNIXSV_PRELOAD)
416         LDFLAGS_SDL+=$(LDFLAGS_UNIXSDL_PRELOAD)
417         CFLAGS_PRELOAD=$(CFLAGS_UNIX_PRELOAD)
418 endif
419 endif
420
421 ##### GNU Make specific definitions #####
422
423 DO_LD=$(CC) -o ../../../$@ $^ $(LDFLAGS)
424
425
426 ##### Definitions shared by all makefiles #####
427 include makefile.inc
428
429
430 ##### Dependency files #####
431
432 -include *.d
433
434 # hack to deal with no-longer-needed .h files
435 %.h:
436         @echo
437         @echo "NOTE: file $@ mentioned in dependencies missing, continuing..."
438         @echo "HINT: consider 'make clean'"
439         @echo