1#
2# Quake Makefile for Linux 2.0
3#
4# Aug '98 by Zoid <zoid@idsoftware.com>
5#
6# ELF only
7#
8# Modified by QuDos at http://qudos.quakedev.com
9#
10
11BASEVERSION=1.09
12VERSION=$(BASEVERSION)
13
14#BUILD_SDL=YES	# quake sdl glx executable (uses SDL for cdrom and sound)
15
16ifneq (,$(findstring libc6,$(shell if [ -e /lib/libc.so.6 ];then echo libc6;fi)))
17GLIBC=-glibc
18else
19GLIBC=
20endif
21
22ifneq (,$(findstring alpha,$(shell uname -m)))
23ARCH=axp
24else
25ARCH=i386
26endif
27NOARCH=noarch
28
29MOUNT_DIR=./src
30
31BUILD_DEBUG_DIR=debug
32BUILD_RELEASE_DIR=release
33
34CC?=gcc
35ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc/ -e s/sparc64/sparc/ -e s/arm.*/arm/ -e s/sa110/arm/ -e s/alpha/axp/)
36USE_OPTIMIZED_CFLAGS?=YES
37
38ifeq ($(ARCH),i386)
39USE_X86_ASM?=YES
40else
41USE_X86_ASM=NO
42endif
43
44BASE_CFLAGS=$(CFLAGS) -Dstricmp=strcasecmp #-Wall
45
46ifeq ($(strip $(USE_X86_ASM)),YES)
47BASE_CFLAGS+=-Did386
48endif
49
50RELEASE_CFLAGS=$(BASE_CFLAGS)
51
52ifeq ($(strip $(USE_OPTIMIZED_CFLAGS)),YES)
53RELEASE_CFLAGS+=-O2 -ffast-math -funroll-loops \
54	-fomit-frame-pointer -fexpensive-optimizations -fno-strict-aliasing
55endif
56
57DEBUG_CFLAGS=$(BASE_CFLAGS) -g
58
59LDFLAGS+=-lm -lz
60
61ifeq ($(strip $(BUILD_SDL)),YES)
62 SDLCFLAGS=$(shell $(SDL_CONFIG) --cflags)
63 SDLLDFLAGS=$(shell $(SDL_CONFIG) --libs)
64 BASE_CFLAGS += \
65    -D_SDL_BIN
66endif
67
68GLLDFLAGS=-L$(LOCALBASE)/lib -lGL -lX11 -lXext -lXxf86dga -lXxf86vm
69GLCFLAGS=-DGLQUAKE -I$(LOCALBASE)/include
70
71DO_CC=$(CC) $(CFLAGS) -o $@ -c $<
72DO_DEBUG_CC=$(CC) $(DEBUG_CFLAGS) -o $@ -c $<
73DO_GL_CC=$(CC) $(CFLAGS) $(GLCFLAGS) -o $@ -c $<
74DO_GL_DEBUG_CC=$(CC) $(DEBUG_CFLAGS) $(GLCFLAGS) -o $@ -c $<
75DO_X11_CC=$(CC) $(CFLAGS) $(XCFLAGS) -o $@ -c $<
76DO_X11_DEBUG_CC=$(CC) $(DEBUG_CFLAGS) $(XCFLAGS) -o $@ -c $<
77DO_O_CC=$(CC) -O $(CFLAGS) -o $@ -c $<
78DO_AS=$(CC) $(CFLAGS) -DELF -x assembler-with-cpp -o $@ -c $<
79DO_GL_AS=$(CC) $(CFLAGS) $(GLCFLAGS) -DELF -x assembler-with-cpp -o $@ -c $<
80
81#############################################################################
82# SETUP AND BUILD
83#############################################################################
84
85
86	TARGETS=$(BUILDDIR)/nehahra
87
88ifeq ($(strip $(BUILD_SDL)),YES)
89	TARGETS +=$(BUILDDIR)/nehahra-sdl
90endif
91
92all:
93	@echo
94	@echo Possible targets:
95	@echo
96	@echo ">> make release	               build the binary for a release."
97	@echo ">> make debug	               build the binary for debuging mode."
98	@echo ">> make clean "
99	@echo
100	@echo ">> SDL binaries options "
101	@echo ">> make release BUILD_SDL=YES  build the binary for a SDL release."
102	@echo ">> make debug BUILD_SDL=YES    build the binary for SDL debuging mode."
103	@echo ">> make clean BUILD_SDL=YES"
104	@echo
105debug:
106	@-mkdir $(BUILD_DEBUG_DIR) \
107	$(BUILD_DEBUG_DIR)/glquake
108	$(MAKE) targets BUILDDIR=$(BUILD_DEBUG_DIR) CFLAGS="$(DEBUG_CFLAGS)"
109
110release:
111	@-mkdir $(BUILD_RELEASE_DIR) \
112	$(BUILD_RELEASE_DIR)/glquake
113	$(MAKE) targets BUILDDIR=$(BUILD_RELEASE_DIR) CFLAGS="$(RELEASE_CFLAGS)"
114
115
116targets: $(TARGETS)
117
118#############################################################################
119# GLQuake
120#############################################################################
121
122GLQUAKE_OBJS= \
123	$(BUILDDIR)/glquake/cl_demo.o \
124	$(BUILDDIR)/glquake/cl_input.o \
125	$(BUILDDIR)/glquake/cl_main.o \
126	$(BUILDDIR)/glquake/cl_parse.o \
127	$(BUILDDIR)/glquake/cl_tent.o \
128	$(BUILDDIR)/glquake/chase.o \
129	$(BUILDDIR)/glquake/cmd.o \
130	$(BUILDDIR)/glquake/common.o \
131	$(BUILDDIR)/glquake/console.o \
132	$(BUILDDIR)/glquake/crc.o \
133	$(BUILDDIR)/glquake/cvar.o \
134	$(BUILDDIR)/glquake/d_vars.o \
135	\
136	$(BUILDDIR)/glquake/dzipcrc.o \
137	$(BUILDDIR)/glquake/dzipdecode.o \
138	$(BUILDDIR)/glquake/dzipun.o \
139	$(BUILDDIR)/glquake/dzipmain.o \
140	\
141	$(BUILDDIR)/glquake/gl_draw.o \
142	$(BUILDDIR)/glquake/gl_mesh.o \
143	$(BUILDDIR)/glquake/gl_model.o \
144	$(BUILDDIR)/glquake/gl_refrag.o \
145	$(BUILDDIR)/glquake/gl_rlight.o \
146	$(BUILDDIR)/glquake/gl_rmain.o \
147	$(BUILDDIR)/glquake/gl_rmisc.o \
148	$(BUILDDIR)/glquake/gl_rsurf.o \
149	$(BUILDDIR)/glquake/gl_screen.o \
150	$(BUILDDIR)/glquake/gl_warp.o \
151	\
152	$(BUILDDIR)/glquake/host.o \
153	$(BUILDDIR)/glquake/host_cmd.o \
154	$(BUILDDIR)/glquake/keys.o \
155	$(BUILDDIR)/glquake/menu.o \
156	$(BUILDDIR)/glquake/mathlib.o \
157	$(BUILDDIR)/glquake/neh.o \
158	$(BUILDDIR)/glquake/net_dgrm.o \
159	$(BUILDDIR)/glquake/net_loop.o \
160	$(BUILDDIR)/glquake/net_main.o \
161	$(BUILDDIR)/glquake/net_vcr.o \
162	$(BUILDDIR)/glquake/net_udp.o \
163	$(BUILDDIR)/glquake/net_bsd.o \
164	$(BUILDDIR)/glquake/pr_cmds.o \
165	$(BUILDDIR)/glquake/pr_edict.o \
166	$(BUILDDIR)/glquake/pr_exec.o \
167	$(BUILDDIR)/glquake/r_part.o \
168	$(BUILDDIR)/glquake/r_vars.o \
169	$(BUILDDIR)/glquake/sbar.o \
170	$(BUILDDIR)/glquake/sv_main.o \
171	$(BUILDDIR)/glquake/sv_phys.o \
172	$(BUILDDIR)/glquake/sv_move.o \
173	$(BUILDDIR)/glquake/sv_user.o \
174	$(BUILDDIR)/glquake/zone.o	\
175	$(BUILDDIR)/glquake/view.o	\
176	$(BUILDDIR)/glquake/wad.o \
177	$(BUILDDIR)/glquake/world.o \
178	$(BUILDDIR)/glquake/sys_linux.o \
179	$(BUILDDIR)/glquake/snd_dma.o \
180	$(BUILDDIR)/glquake/snd_mem.o \
181	$(BUILDDIR)/glquake/snd_mix.o
182
183ifeq ($(strip $(USE_X86_ASM)),YES)
184GLQUAKE_OBJS+= \
185	$(BUILDDIR)/glquake/math.o \
186	$(BUILDDIR)/glquake/worlda.o \
187	$(BUILDDIR)/glquake/snd_mixa.o \
188	$(BUILDDIR)/glquake/sys_dosa.o
189endif
190
191GLQUAKE_LNX_OBJS = \
192   $(BUILDDIR)/glquake/cd_linux.o \
193   $(BUILDDIR)/glquake/snd_linux.o
194
195GLQUAKE_SDL_OBJS = \
196   $(BUILDDIR)/glquake/cd_sdl.o \
197   $(BUILDDIR)/glquake/snd_linux_sdl.o
198
199GLX_OBJS=$(BUILDDIR)/glquake/gl_vidlinuxglx.o
200
201$(BUILDDIR)/nehahra : $(GLQUAKE_OBJS) $(GLQUAKE_LNX_OBJS)  $(GLX_OBJS)
202	$(CC) $(CFLAGS) -o $@ $(GLQUAKE_OBJS) $(GLX_OBJS) $(GLQUAKE_LNX_OBJS)  $(GLLDFLAGS) $(LDFLAGS)
203
204$(BUILDDIR)/nehahra-sdl : $(GLQUAKE_OBJS) $(GLQUAKE_SDL_OBJS)  $(GLX_OBJS)
205	$(CC) $(CFLAGS) -o $@ $(GLQUAKE_OBJS) $(GLX_OBJS) $(GLQUAKE_SDL_OBJS)  $(GLLDFLAGS) $(LDFLAGS) $(SDLLDFLAGS)
206
207$(BUILDDIR)/glquake/cl_demo.o :      $(MOUNT_DIR)/cl_demo.c
208	$(DO_GL_CC)
209
210$(BUILDDIR)/glquake/cl_input.o :     $(MOUNT_DIR)/cl_input.c
211	$(DO_GL_CC)
212
213$(BUILDDIR)/glquake/cl_main.o :      $(MOUNT_DIR)/cl_main.c
214	$(DO_GL_CC)
215
216$(BUILDDIR)/glquake/cl_parse.o :     $(MOUNT_DIR)/cl_parse.c
217	$(DO_GL_CC)
218
219$(BUILDDIR)/glquake/cl_tent.o :      $(MOUNT_DIR)/cl_tent.c
220	$(DO_GL_CC)
221
222$(BUILDDIR)/glquake/chase.o :        $(MOUNT_DIR)/chase.c
223	$(DO_GL_CC)
224
225$(BUILDDIR)/glquake/cmd.o :          $(MOUNT_DIR)/cmd.c
226	$(DO_GL_CC)
227
228$(BUILDDIR)/glquake/common.o :       $(MOUNT_DIR)/common.c
229	$(DO_GL_DEBUG_CC)
230
231$(BUILDDIR)/glquake/console.o :      $(MOUNT_DIR)/console.c
232	$(DO_GL_CC)
233
234$(BUILDDIR)/glquake/crc.o :          $(MOUNT_DIR)/crc.c
235	$(DO_GL_CC)
236
237$(BUILDDIR)/glquake/cvar.o :         $(MOUNT_DIR)/cvar.c
238	$(DO_GL_CC)
239
240$(BUILDDIR)/glquake/d_vars.o :       $(MOUNT_DIR)/d_vars.c
241	$(DO_GL_CC)
242
243$(BUILDDIR)/glquake/dzipcrc.o :      $(MOUNT_DIR)/dzipcrc.c
244	$(DO_GL_CC)
245
246$(BUILDDIR)/glquake/dzipdecode.o :   $(MOUNT_DIR)/dzipdecode.c
247	$(DO_GL_CC)
248
249$(BUILDDIR)/glquake/dzipun.o :       $(MOUNT_DIR)/dzipun.c
250	$(DO_GL_CC)
251
252$(BUILDDIR)/glquake/dzipmain.o :     $(MOUNT_DIR)/dzipmain.c
253	$(DO_GL_CC)
254
255$(BUILDDIR)/glquake/gl_draw.o :      $(MOUNT_DIR)/gl_draw.c
256	$(DO_GL_CC)
257
258$(BUILDDIR)/glquake/gl_mesh.o :      $(MOUNT_DIR)/gl_mesh.c
259	$(DO_GL_CC)
260
261$(BUILDDIR)/glquake/gl_model.o :     $(MOUNT_DIR)/gl_model.c
262	$(DO_GL_CC)
263
264$(BUILDDIR)/glquake/gl_refrag.o :    $(MOUNT_DIR)/gl_refrag.c
265	$(DO_GL_CC)
266
267$(BUILDDIR)/glquake/gl_rlight.o :    $(MOUNT_DIR)/gl_rlight.c
268	$(DO_GL_CC)
269
270$(BUILDDIR)/glquake/gl_rmain.o :     $(MOUNT_DIR)/gl_rmain.c
271	$(DO_GL_CC)
272
273$(BUILDDIR)/glquake/gl_rmisc.o :     $(MOUNT_DIR)/gl_rmisc.c
274	$(DO_GL_CC)
275
276$(BUILDDIR)/glquake/gl_rsurf.o :     $(MOUNT_DIR)/gl_rsurf.c
277	$(DO_GL_CC)
278
279$(BUILDDIR)/glquake/gl_screen.o :    $(MOUNT_DIR)/gl_screen.c
280	$(DO_GL_CC)
281
282$(BUILDDIR)/glquake/gl_vidlinuxglx.o :  $(MOUNT_DIR)/gl_vidlinuxglx.c
283	$(DO_GL_CC)
284
285$(BUILDDIR)/glquake/gl_warp.o :      $(MOUNT_DIR)/gl_warp.c
286	$(DO_GL_CC)
287
288$(BUILDDIR)/glquake/host.o :         $(MOUNT_DIR)/host.c
289	$(DO_GL_CC)
290
291$(BUILDDIR)/glquake/host_cmd.o :     $(MOUNT_DIR)/host_cmd.c
292	$(DO_GL_CC)
293
294$(BUILDDIR)/glquake/keys.o :         $(MOUNT_DIR)/keys.c
295	$(DO_GL_CC)
296
297$(BUILDDIR)/glquake/menu.o :         $(MOUNT_DIR)/menu.c
298	$(DO_GL_CC)
299
300$(BUILDDIR)/glquake/neh.o :          $(MOUNT_DIR)/neh.c
301	$(DO_GL_CC)
302
303$(BUILDDIR)/glquake/mathlib.o :      $(MOUNT_DIR)/mathlib.c
304	$(DO_GL_CC)
305
306$(BUILDDIR)/glquake/net_dgrm.o :     $(MOUNT_DIR)/net_dgrm.c
307	$(DO_GL_CC)
308
309$(BUILDDIR)/glquake/net_loop.o :     $(MOUNT_DIR)/net_loop.c
310	$(DO_GL_CC)
311
312$(BUILDDIR)/glquake/net_main.o :     $(MOUNT_DIR)/net_main.c
313	$(DO_GL_CC)
314
315$(BUILDDIR)/glquake/net_vcr.o :      $(MOUNT_DIR)/net_vcr.c
316	$(DO_GL_CC)
317
318$(BUILDDIR)/glquake/net_udp.o :      $(MOUNT_DIR)/net_udp.c
319	$(DO_GL_CC)
320
321$(BUILDDIR)/glquake/net_bsd.o :      $(MOUNT_DIR)/net_bsd.c
322	$(DO_GL_CC)
323
324$(BUILDDIR)/glquake/pr_cmds.o :      $(MOUNT_DIR)/pr_cmds.c
325	$(DO_GL_CC)
326
327$(BUILDDIR)/glquake/pr_edict.o :     $(MOUNT_DIR)/pr_edict.c
328	$(DO_GL_CC)
329
330$(BUILDDIR)/glquake/pr_exec.o :      $(MOUNT_DIR)/pr_exec.c
331	$(DO_GL_CC)
332
333$(BUILDDIR)/glquake/r_part.o :       $(MOUNT_DIR)/r_part.c
334	$(DO_GL_CC)
335
336$(BUILDDIR)/glquake/r_vars.o :       $(MOUNT_DIR)/r_vars.c
337	$(DO_GL_CC)
338
339$(BUILDDIR)/glquake/sbar.o :         $(MOUNT_DIR)/sbar.c
340	$(DO_GL_CC)
341
342$(BUILDDIR)/glquake/sv_main.o :      $(MOUNT_DIR)/sv_main.c
343	$(DO_GL_CC)
344
345$(BUILDDIR)/glquake/sv_phys.o :      $(MOUNT_DIR)/sv_phys.c
346	$(DO_GL_CC)
347
348$(BUILDDIR)/glquake/sv_move.o :      $(MOUNT_DIR)/sv_move.c
349	$(DO_GL_CC)
350
351$(BUILDDIR)/glquake/sv_user.o :      $(MOUNT_DIR)/sv_user.c
352	$(DO_GL_CC)
353
354$(BUILDDIR)/glquake/zone.o	:    $(MOUNT_DIR)/zone.c
355	$(DO_GL_CC)
356
357$(BUILDDIR)/glquake/view.o	:    $(MOUNT_DIR)/view.c
358	$(DO_GL_CC)
359
360$(BUILDDIR)/glquake/wad.o :          $(MOUNT_DIR)/wad.c
361	$(DO_GL_CC)
362
363$(BUILDDIR)/glquake/world.o :        $(MOUNT_DIR)/world.c
364	$(DO_GL_CC)
365
366$(BUILDDIR)/glquake/cd_linux.o :     $(MOUNT_DIR)/cd_linux.c
367	$(DO_GL_CC)
368
369$(BUILDDIR)/glquake/cd_sdl.o   :     $(MOUNT_DIR)/cd_sdl.c
370	$(DO_GL_CC) $(SDLCFLAGS)
371
372$(BUILDDIR)/glquake/sys_linux.o :    $(MOUNT_DIR)/sys_linux.c
373	$(DO_GL_CC)
374
375$(BUILDDIR)/glquake/snd_dma.o :      $(MOUNT_DIR)/snd_dma.c
376	$(DO_GL_CC)
377
378$(BUILDDIR)/glquake/snd_mem.o :      $(MOUNT_DIR)/snd_mem.c
379	$(DO_GL_CC)
380
381$(BUILDDIR)/glquake/snd_mix.o :      $(MOUNT_DIR)/snd_mix.c
382	$(DO_GL_CC)
383
384$(BUILDDIR)/glquake/snd_linux.o :    $(MOUNT_DIR)/snd_linux.c
385	$(DO_GL_CC)
386
387$(BUILDDIR)/glquake/snd_linux_sdl.o : $(MOUNT_DIR)/snd_linux_sdl.c
388	$(DO_GL_CC) $(SDLCFLAGS)
389
390$(BUILDDIR)/glquake/math.o :         $(MOUNT_DIR)/math.s
391	$(DO_GL_AS)
392
393$(BUILDDIR)/glquake/snd_mixa.o :     $(MOUNT_DIR)/snd_mixa.s
394	$(DO_GL_AS)
395
396$(BUILDDIR)/glquake/sys_dosa.o :     $(MOUNT_DIR)/sys_dosa.s
397	$(DO_GL_AS)
398
399$(BUILDDIR)/glquake/worlda.o :     $(MOUNT_DIR)/worlda.s
400	$(DO_GL_AS)
401
402#############################################################################
403# MISC
404#############################################################################
405clean: clean-debug clean-release
406
407clean-debug:
408	$(MAKE) clean2 BUILDDIR=$(BUILD_DEBUG_DIR) CFLAGS="$(DEBUG_CFLAGS)"
409
410clean-release:
411	$(MAKE) clean2 BUILDDIR=$(BUILD_RELEASE_DIR) CFLAGS="$(DEBUG_CFLAGS)"
412
413clean2:
414	-rm -f $(GLQUAKE_OBJS) \
415	$(GLX_OBJS) \
416	$(GLQUAKE_LNX_OBJS) \
417	$(GLQUAKE_SDL_OBJS)
418
419
420