1#
2# Tremulous Makefile
3#
4# Nov '98 by Zoid <zoid@idsoftware.com>
5#
6# Loki Hacking by Bernd Kreimeier
7#  and a little more by Ryan C. Gordon.
8#  and a little more by Rafael Barrero
9#  and a little more by the ioq3 cr3w
10#  and a little more by Tim Angus
11#
12# GNU Make required
13#
14
15COMPILE_PLATFORM=$(shell uname|sed -e s/_.*//|tr A-Z a-z)
16
17ifeq ($(COMPILE_PLATFORM),darwin)
18  # Apple does some things a little differently...
19  COMPILE_ARCH=$(shell uname -p | sed -e s/i.86/x86/)
20else
21  COMPILE_ARCH=$(shell uname -m | sed -e s/i.86/x86/)
22endif
23
24ifeq ($(COMPILE_PLATFORM),mingw32)
25  ifeq ($(COMPILE_ARCH),i386)
26    COMPILE_ARCH=x86
27  endif
28endif
29
30BUILD_CLIENT?=0
31BUILD_CLIENT_SMP?=0
32BUILD_GAME_QVM?=0
33BUILD_GAME_SO?=0
34BUILD_MASTER_SERVER?=0
35BUILD_SERVER?=0
36HAVE_VM_COMPILED?=false
37USE_CODEC_VORBIS?=0
38USE_LOCAL_HEADERS?=0
39USE_OPENAL?=0
40USE_OPENAL_DLOPEN?=0
41USE_OPTIMIZED_CFLAGS?=0
42USE_SDL_AUDIO?=0
43USE_SDL_VIDEO?=0
44
45#############################################################################
46#
47# If you require a different configuration from the defaults below, create a
48# new file named "Makefile.local" in the same directory as this file and define
49# your parameters there. This allows you to change configuration without
50# causing problems with keeping up to date with the repository.
51#
52#############################################################################
53-include Makefile.local
54
55ifndef PLATFORM
56PLATFORM=$(COMPILE_PLATFORM)
57endif
58export PLATFORM
59
60ifndef ARCH
61ARCH=$(COMPILE_ARCH)
62endif
63
64ifeq ($(ARCH),powerpc)
65  ARCH=ppc
66endif
67export ARCH
68
69ifneq ($(PLATFORM),$(COMPILE_PLATFORM))
70  CROSS_COMPILING=1
71else
72  CROSS_COMPILING=0
73
74  ifneq ($(ARCH),$(COMPILE_ARCH))
75    CROSS_COMPILING=1
76  endif
77endif
78export CROSS_COMPILING
79
80ifndef COPYDIR
81COPYDIR="/usr/local/games/tremulous"
82endif
83
84ifndef MOUNT_DIR
85MOUNT_DIR=src
86endif
87
88ifndef BUILD_DIR
89BUILD_DIR=build
90endif
91
92ifndef GENERATE_DEPENDENCIES
93GENERATE_DEPENDENCIES=1
94endif
95
96ifndef USE_CCACHE
97USE_CCACHE=0
98endif
99export USE_CCACHE
100
101#############################################################################
102
103BD=$(BUILD_DIR)/debug-$(PLATFORM)-$(ARCH)
104BR=$(BUILD_DIR)/release
105CDIR=$(MOUNT_DIR)/client
106SDIR=$(MOUNT_DIR)/server
107RDIR=$(MOUNT_DIR)/renderer
108CMDIR=$(MOUNT_DIR)/qcommon
109UDIR=$(MOUNT_DIR)/unix
110W32DIR=$(MOUNT_DIR)/win32
111GDIR=$(MOUNT_DIR)/game
112CGDIR=$(MOUNT_DIR)/cgame
113BLIBDIR=$(MOUNT_DIR)/botlib
114NDIR=$(MOUNT_DIR)/null
115UIDIR=$(MOUNT_DIR)/ui
116JPDIR=$(MOUNT_DIR)/jpeg-6
117TOOLSDIR=$(MOUNT_DIR)/tools
118LOKISETUPDIR=$(UDIR)/setup
119SDLHDIR=$(MOUNT_DIR)/SDL12
120LIBSDIR=$(MOUNT_DIR)/libs
121MASTERDIR=$(MOUNT_DIR)/master
122
123# extract version info
124VERSION=$(shell grep Q3_VERSION $(CMDIR)/q_shared.h | \
125  sed -e 's/.*tremulous\ \(.*\)"/\1/')
126
127ifeq ($(wildcard .svn),.svn)
128  SVN_VERSION=$(VERSION)_SVN$(shell LANG=C svnversion .)
129else
130  SVN_VERSION=$(VERSION)
131endif
132
133
134#############################################################################
135# SETUP AND BUILD -- LINUX
136#############################################################################
137
138## Defaults
139VM_PPC=
140
141LIB=lib
142
143INSTALL=install
144MKDIR=mkdir
145
146ifeq ($(PLATFORM),linux)
147
148  CC=gcc
149
150  ifeq ($(ARCH),alpha)
151    ARCH=axp
152  else
153  ifeq ($(ARCH),x86_64)
154    LIB=lib64
155  else
156  ifeq ($(ARCH),ppc64)
157    LIB=lib64
158  else
159  ifeq ($(ARCH),s390x)
160    LIB=lib64
161  endif
162  endif
163  endif
164  endif
165
166  BASE_CFLAGS = -Wall -fno-strict-aliasing -Wimplicit -Wstrict-prototypes -pipe
167
168  ifeq ($(USE_OPENAL),1)
169    BASE_CFLAGS += -DUSE_OPENAL=1
170    ifeq ($(USE_OPENAL_DLOPEN),1)
171      BASE_CFLAGS += -DUSE_OPENAL_DLOPEN=1
172    endif
173  endif
174
175  ifeq ($(USE_CODEC_VORBIS),1)
176    BASE_CFLAGS += -DUSE_CODEC_VORBIS=1
177  endif
178
179  ifeq ($(USE_SDL),1)
180    BASE_CFLAGS += -DUSE_SDL_VIDEO=1 -DUSE_SDL_SOUND=1 $(shell sdl-config --cflags)
181    GL_CFLAGS =
182  else
183    GL_CFLAGS = -I/usr/X11R6/include
184  endif
185
186  OPTIMIZE = -O3 -ffast-math -funroll-loops -fomit-frame-pointer
187
188  ifeq ($(ARCH),x86_64)
189    OPTIMIZE = -O3 -fomit-frame-pointer -ffast-math -funroll-loops \
190      -falign-functions=2 -fstrength-reduce
191    # experimental x86_64 jit compiler! you need GNU as
192    HAVE_VM_COMPILED = true
193  else
194  ifeq ($(ARCH),x86)
195    OPTIMIZE = -O3 -march=i586 -fomit-frame-pointer -ffast-math \
196      -funroll-loops -falign-functions=2 -fstrength-reduce
197    HAVE_VM_COMPILED=true
198  else
199  ifeq ($(ARCH),ppc)
200    BASE_CFLAGS += -maltivec
201    ifneq ($(VM_PPC),)
202      HAVE_VM_COMPILED=true
203    endif
204  endif
205  endif
206  endif
207
208  ifneq ($(HAVE_VM_COMPILED),true)
209    BASE_CFLAGS += -DNO_VM_COMPILED
210  endif
211
212  DEBUG_CFLAGS = $(BASE_CFLAGS) -g -O0
213
214  RELEASE_CFLAGS=$(BASE_CFLAGS) -DNDEBUG $(OPTIMIZE)
215
216  SHLIBEXT=so
217  SHLIBCFLAGS=-fPIC
218  SHLIBLDFLAGS=-shared $(LDFLAGS)
219
220  THREAD_LDFLAGS=-lpthread
221  LDFLAGS=-ldl -lm
222
223  ifeq ($(USE_SDL),1)
224    CLIENT_LDFLAGS=$(shell sdl-config --libs)
225  else
226    CLIENT_LDFLAGS=-L/usr/X11R6/$(LIB) -lX11 -lXext -lXxf86dga -lXxf86vm
227  endif
228
229  ifeq ($(USE_OPENAL),1)
230    ifneq ($(USE_OPENAL_DLOPEN),1)
231      CLIENT_LDFLAGS += -lopenal
232    endif
233  endif
234
235  ifeq ($(USE_CODEC_VORBIS),1)
236    CLIENT_LDFLAGS += -lvorbisfile -lvorbis -logg
237  endif
238
239  ifeq ($(ARCH),x86)
240    # linux32 make ...
241    BASE_CFLAGS += -m32
242    LDFLAGS+=-m32
243  endif
244
245else # ifeq Linux
246
247#############################################################################
248# SETUP AND BUILD -- MAC OS X
249#############################################################################
250
251ifeq ($(PLATFORM),darwin)
252  CC=gcc
253
254  # !!! FIXME: calling conventions are still broken! See Bugzilla #2519
255  #VM_PPC=vm_ppc_new
256
257  BASE_CFLAGS = -Wall -fno-strict-aliasing -Wimplicit -Wstrict-prototypes
258  BASE_CFLAGS += -DMACOS_X -fno-common -pipe
259
260  # Always include debug symbols...you can strip the binary later...
261  BASE_CFLAGS += -gfull
262
263  ifeq ($(USE_OPENAL),1)
264    BASE_CFLAGS += -DUSE_OPENAL=1
265    ifeq ($(USE_OPENAL_DLOPEN),1)
266      BASE_CFLAGS += -DUSE_OPENAL_DLOPEN=1
267    endif
268  endif
269
270  ifeq ($(USE_CODEC_VORBIS),1)
271    BASE_CFLAGS += -DUSE_CODEC_VORBIS=1
272  endif
273
274  ifeq ($(USE_SDL),1)
275    BASE_CFLAGS += -DUSE_SDL_VIDEO=1 -DUSE_SDL_SOUND=1 -D_THREAD_SAFE=1 -I$(SDLHDIR)/include
276    GL_CFLAGS =
277  endif
278
279  OPTIMIZE = -O3 -ffast-math
280
281  ifeq ($(ARCH),ppc)
282  BASE_CFLAGS += -faltivec
283    ifneq ($(VM_PPC),)
284      HAVE_VM_COMPILED=true
285    endif
286  endif
287
288  ifeq ($(ARCH),x86)
289    # !!! FIXME: x86-specific flags here...
290  endif
291
292  ifneq ($(HAVE_VM_COMPILED),true)
293    BASE_CFLAGS += -DNO_VM_COMPILED
294  endif
295
296  DEBUG_CFLAGS = $(BASE_CFLAGS) -g -O0
297
298  RELEASE_CFLAGS=$(BASE_CFLAGS) -DNDEBUG $(OPTIMIZE)
299
300  SHLIBEXT=dylib
301  SHLIBCFLAGS=-fPIC -fno-common
302  SHLIBLDFLAGS=-dynamiclib $(LDFLAGS)
303
304  NOTSHLIBCFLAGS=-mdynamic-no-pic
305
306  #THREAD_LDFLAGS=-lpthread
307  #LDFLAGS=-ldl -lm
308  LDFLAGS += -framework Carbon
309
310  ifeq ($(USE_SDL),1)
311    # We copy sdlmain before ranlib'ing it so that subversion doesn't think
312    #  the file has been modified by each build.
313    LIBSDLMAIN=$(B)/libSDLmain.a
314    LIBSDLMAINSRC=$(LIBSDIR)/macosx/libSDLmain.a
315    CLIENT_LDFLAGS=-framework Cocoa -framework OpenGL $(LIBSDIR)/macosx/libSDL-1.2.0.dylib
316  else
317    # !!! FIXME: frameworks: OpenGL, Carbon, etc...
318    #CLIENT_LDFLAGS=-L/usr/X11R6/$(LIB) -lX11 -lXext -lXxf86dga -lXxf86vm
319  endif
320
321  # -framework OpenAL requires 10.4 or later...for builds shipping to the
322  #  public, you'll want to use USE_OPENAL_DLOPEN and ship your own OpenAL
323  #  library (http://openal.org/ or http://icculus.org/al_osx/)
324  ifeq ($(USE_OPENAL),1)
325    ifneq ($(USE_OPENAL_DLOPEN),1)
326      CLIENT_LDFLAGS += -framework OpenAL
327    endif
328  endif
329
330  ifeq ($(USE_CODEC_VORBIS),1)
331    CLIENT_LDFLAGS += -lvorbisfile -lvorbis -logg
332  endif
333
334else # ifeq darwin
335
336
337#############################################################################
338# SETUP AND BUILD -- MINGW32
339#############################################################################
340
341ifeq ($(PLATFORM),mingw32)
342
343  CC=gcc
344  WINDRES=windres
345
346  ARCH=x86
347
348  BASE_CFLAGS = -Wall -fno-strict-aliasing -Wimplicit -Wstrict-prototypes
349
350  ifeq ($(USE_OPENAL),1)
351    BASE_CFLAGS += -DUSE_OPENAL=1 -DUSE_OPENAL_DLOPEN=1
352  endif
353
354  ifeq ($(USE_CODEC_VORBIS),1)
355    BASE_CFLAGS += -DUSE_CODEC_VORBIS=1
356  endif
357
358  GL_CFLAGS =
359  MINGW_CFLAGS = -DDONT_TYPEDEF_INT32
360
361  OPTIMIZE = -O3 -march=i586 -fomit-frame-pointer -ffast-math \
362    -funroll-loops -falign-functions=2 -fstrength-reduce
363
364  DEBUG_CFLAGS=$(BASE_CFLAGS) -g -O0
365
366  RELEASE_CFLAGS=$(BASE_CFLAGS) -DNDEBUG $(OPTIMIZE)
367
368  SHLIBEXT=dll
369  SHLIBCFLAGS=
370  SHLIBLDFLAGS=-shared $(LDFLAGS)
371
372  BINEXT=.exe
373
374  LDFLAGS= -mwindows -lwsock32 -lgdi32 -lwinmm -lole32
375  CLIENT_LDFLAGS=
376
377  ifeq ($(USE_CODEC_VORBIS),1)
378    CLIENT_LDFLAGS += -lvorbisfile -lvorbis -logg
379  endif
380
381  ifeq ($(ARCH),x86)
382    # build 32bit
383    BASE_CFLAGS += -m32
384    LDFLAGS+=-m32
385  endif
386
387  BUILD_SERVER = 0
388  BUILD_CLIENT_SMP = 0
389
390else # ifeq mingw32
391
392#############################################################################
393# SETUP AND BUILD -- FREEBSD
394#############################################################################
395
396ifeq ($(PLATFORM),dragonfly)
397
398  BASE_CFLAGS = -I$(LOCALBASE)/include -DARCH='\"$(ARCH)\"' -Wall -fno-strict-aliasing -Wimplicit -Wstrict-prototypes
399
400  GL_CFLAGS = -I$(LOCALBASE)/include
401
402  DEBUG_CFLAGS=$(BASE_CFLAGS) -g
403  RELEASE_CFLAGS=$(BASE_CFLAGS) -DNDEBUG -pipe
404
405  ifeq ($(USE_OPENAL),1)
406    BASE_CFLAGS += -DUSE_OPENAL=1
407    ifeq ($(USE_OPENAL_DLOPEN),1)
408      BASE_CFLAGS += -DUSE_OPENAL_DLOPEN=1
409    endif
410  endif
411
412  ifeq ($(USE_CODEC_VORBIS),1)
413    BASE_CFLAGS += -DUSE_CODEC_VORBIS=1
414  endif
415
416  ifeq ($(USE_SDL_AUDIO),1)
417    BASE_CFLAGS += $(shell $(SDL_CONFIG) --cflags)
418  else
419    ifeq ($(USE_SDL_VIDEO),1)
420      BASE_CFLAGS += $(shell $(SDL_CONFIG) --cflags)
421    endif
422  endif
423
424  ifeq ($(USE_SDL_AUDIO),1)
425    BASE_CFLAGS += -DUSE_SDL_SOUND=1
426  endif
427
428  ifeq ($(USE_SDL_VIDEO),1)
429    BASE_CFLAGS += -DUSE_SDL_VIDEO=1
430  endif
431
432  ifeq ($(USE_OPTIMIZED_CFLAGS),1)
433    RELEASE_CFLAGS+=-O3 -ffast-math -funroll-loops -fomit-frame-pointer \
434       -fexpensive-optimizations
435    ifeq ($(ARCH),i386)
436      RELEASE_CFLAGS+=-falign-functions=2 -fstrength-reduce
437    endif
438  endif
439
440  HAVE_VM_COMPILED?=false
441  ifneq ($(HAVE_VM_COMPILED),true)
442    BASE_CFLAGS += -DNO_VM_COMPILED
443  endif
444
445  SHLIBEXT=so
446  SHLIBCFLAGS=-fPIC
447  SHLIBLDFLAGS=-shared $(LDFLAGS)
448
449  THREAD_LDFLAGS=$(PTHREAD_LIBS)
450  # don't need -ldl (FreeBSD)
451  LDFLAGS+=-lm
452
453  CLIENT_LDFLAGS = -L$(LOCALBASE)/lib
454
455  ifeq ($(USE_SDL_AUDIO),1)
456    CLIENT_LDFLAGS += $(shell $(SDL_CONFIG) --libs)
457  else
458    ifeq ($(USE_SDL_VIDEO),1)
459      CLIENT_LDFLAGS += $(shell $(SDL_CONFIG) --libs)
460    endif
461  endif
462
463  ifneq ($(USE_SDL_VIDEO),1)
464    CLIENT_LDFLAGS += -L$(LOCALBASE)/lib -lGL -lX11 -lXext -lXxf86dga -lXxf86vm
465  endif
466
467  ifeq ($(USE_OPENAL),1)
468    CLIENT_LDFLAGS += $(THREAD_LDFLAGS)
469    ifneq ($(USE_OPENAL_DLOPEN),1)
470      CLIENT_LDFLAGS += -lopenal
471    endif
472  endif
473
474  ifeq ($(USE_CODEC_VORBIS),1)
475    CLIENT_LDFLAGS += -lvorbisfile -lvorbis -logg
476  endif
477
478
479else # ifeq dragonfly
480
481#############################################################################
482# SETUP AND BUILD -- NETBSD
483#############################################################################
484
485ifeq ($(PLATFORM),netbsd)
486
487  ifeq ($(shell uname -m),i386)
488    ARCH=x86
489  endif
490
491  CC=gcc
492  LDFLAGS=-lm
493  SHLIBEXT=so
494  SHLIBCFLAGS=-fPIC
495  SHLIBLDFLAGS=-shared $(LDFLAGS)
496  THREAD_LDFLAGS=-lpthread
497
498  BASE_CFLAGS = -Wall -fno-strict-aliasing -Wimplicit -Wstrict-prototypes
499  DEBUG_CFLAGS=$(BASE_CFLAGS) -g
500
501  ifneq ($(ARCH),x86)
502    BASE_CFLAGS += -DNO_VM_COMPILED
503  endif
504
505  BUILD_CLIENT = 0
506  BUILD_GAME_QVM = 0
507
508else # ifeq netbsd
509
510#############################################################################
511# SETUP AND BUILD -- IRIX
512#############################################################################
513
514ifeq ($(PLATFORM),irix)
515
516  ARCH=mips  #default to MIPS
517
518  CC=cc
519  BASE_CFLAGS=-Dstricmp=strcasecmp -Xcpluscomm -woff 1185 -mips3 \
520    -nostdinc -I. -I$(ROOT)/usr/include -DNO_VM_COMPILED
521  RELEASE_CFLAGS=$(BASE_CFLAGS) -O3
522  DEBUG_CFLAGS=$(BASE_CFLAGS) -g
523
524  SHLIBEXT=so
525  SHLIBCFLAGS=
526  SHLIBLDFLAGS=-shared
527
528  LDFLAGS=-ldl -lm
529  CLIENT_LDFLAGS=-L/usr/X11/$(LIB) -lGL -lX11 -lXext -lm
530
531else # ifeq IRIX
532
533#############################################################################
534# SETUP AND BUILD -- SunOS
535#############################################################################
536
537ifeq ($(PLATFORM),SunOS)
538
539  CC=gcc
540  INSTALL=ginstall
541  MKDIR=gmkdir
542  COPYDIR="/usr/local/share/games/tremulous"
543
544  ifneq (,$(findstring i86pc,$(shell uname -m)))
545    ARCH=x86
546  else #default to sparc
547    ARCH=sparc
548  endif
549
550  ifneq ($(ARCH),x86)
551    ifneq ($(ARCH),sparc)
552      $(error arch $(ARCH) is currently not supported)
553    endif
554  endif
555
556
557  BASE_CFLAGS = -Wall -fno-strict-aliasing -Wimplicit -Wstrict-prototypes -pipe
558
559  ifeq ($(USE_SDL),1)
560    BASE_CFLAGS += -DUSE_SDL_SOUND=1 $(shell sdl-config --cflags)
561    GL_CFLAGS =
562  else
563    GL_CFLAGS = -I/usr/openwin/include
564  endif
565
566  OPTIMIZE = -O3 -ffast-math -funroll-loops
567
568  ifeq ($(ARCH),sparc)
569    OPTIMIZE = -O3 -ffast-math \
570      -falign-functions=2 -fstrength-reduce \
571      -mtune=ultrasparc -mv8plus -mno-faster-structs \
572      -funroll-loops
573    BASE_CFLAGS += -DNO_VM_COMPILED
574  else
575  ifeq ($(ARCH),x86)
576    OPTIMIZE = -O3 -march=i586  -ffast-math \
577      -falign-functions=2 -funroll-loops -fstrength-reduce
578  endif
579  endif
580
581  DEBUG_CFLAGS = $(BASE_CFLAGS) -ggdb -O0
582
583  RELEASE_CFLAGS=$(BASE_CFLAGS) -DNDEBUG $(OPTIMIZE)
584
585  SHLIBEXT=so
586  SHLIBCFLAGS=-fPIC
587  SHLIBLDFLAGS=-shared $(LDFLAGS)
588
589  THREAD_LDFLAGS=-lpthread
590  LDFLAGS=-lsocket -lnsl -ldl -lm
591
592  BOTCFLAGS=-O0
593
594  ifeq ($(USE_SDL),1)
595    CLIENT_LDFLAGS=$(shell sdl-config --libs) -L/usr/X11/lib -lGLU -lX11 -lXext
596  else
597    CLIENT_LDFLAGS=-L/usr/openwin/$(LIB) -L/usr/X11/lib -lGLU -lX11 -lXext
598  endif
599
600  ifeq ($(ARCH),x86)
601    # Solarix x86 make ...
602    BASE_CFLAGS += -m32
603    LDFLAGS+=-m32
604  endif
605
606else # ifeq SunOS
607
608#############################################################################
609# SETUP AND BUILD -- GENERIC
610#############################################################################
611  CC=cc
612  BASE_CFLAGS=-DNO_VM_COMPILED
613  DEBUG_CFLAGS=$(BASE_CFLAGS) -g
614  RELEASE_CFLAGS=$(BASE_CFLAGS) -DNDEBUG -O3
615
616  SHLIBEXT=so
617  SHLIBCFLAGS=-fPIC
618  SHLIBLDFLAGS=-shared
619
620endif #Linux
621endif #darwin
622endif #mingw32
623endif #FreeBSD
624endif #NetBSD
625endif #IRIX
626endif #SunOS
627
628TARGETS =
629
630ifneq ($(BUILD_SERVER),0)
631  TARGETS += $(B)/tremded$(BINEXT)
632endif
633
634ifneq ($(BUILD_CLIENT),0)
635  TARGETS += $(B)/tremulous$(BINEXT)
636endif
637
638ifneq ($(BUILD_CLIENT_SMP),0)
639  TARGETS += $(B)/tremulous-smp$(BINEXT)
640endif
641
642ifneq ($(BUILD_GAME_SO),0)
643  TARGETS += \
644    $(B)/base/cgame.$(SHLIBEXT) \
645    $(B)/base/game.$(SHLIBEXT) \
646    $(B)/base/ui.$(SHLIBEXT)
647endif
648
649ifneq ($(BUILD_GAME_QVM),0)
650  ifneq ($(CROSS_COMPILING),1)
651    TARGETS += \
652      $(B)/base/vm/cgame.qvm \
653      $(B)/base/vm/game.qvm \
654      $(B)/base/vm/ui.qvm \
655      qvmdeps
656  endif
657endif
658
659ifeq ($(USE_CCACHE),1)
660  CC := ccache $(CC)
661endif
662
663ifdef DEFAULT_BASEDIR
664  BASE_CFLAGS += -DDEFAULT_BASEDIR=\\\"$(DEFAULT_BASEDIR)\\\"
665endif
666
667ifeq ($(USE_LOCAL_HEADERS),1)
668  BASE_CFLAGS += -DUSE_LOCAL_HEADERS=1
669endif
670
671ifeq ($(GENERATE_DEPENDENCIES),1)
672  ifeq ($(CC),gcc)
673    DEPEND_CFLAGS=-MMD
674  endif
675endif
676
677DO_CC=$(CC) $(NOTSHLIBCFLAGS) $(CFLAGS) -o $@ -c $<
678DO_SMP_CC=$(CC) $(NOTSHLIBCFLAGS) $(CFLAGS) -DSMP -o $@ -c $<
679DO_BOT_CC=$(CC) $(NOTSHLIBCFLAGS) $(CFLAGS) $(BOTCFLAGS) -DBOTLIB -o $@ -c $<   # $(SHLIBCFLAGS) # bk001212
680DO_DEBUG_CC=$(CC) $(NOTSHLIBCFLAGS) $(DEBUG_CFLAGS) -o $@ -c $<
681DO_SHLIB_CC=$(CC) $(CFLAGS) $(SHLIBCFLAGS) -o $@ -c $<
682DO_SHLIB_DEBUG_CC=$(CC) $(DEBUG_CFLAGS) $(SHLIBCFLAGS) -o $@ -c $<
683DO_AS=$(CC) $(CFLAGS) -DELF -x assembler-with-cpp -o $@ -c $<
684DO_DED_CC=$(CC) $(NOTSHLIBCFLAGS) -DDEDICATED $(CFLAGS) -o $@ -c $<
685DO_WINDRES=$(WINDRES) -i $< -o $@
686
687#############################################################################
688# MAIN TARGETS
689#############################################################################
690
691default:build_release
692
693debug: build_debug
694release: build_release
695
696build_debug: B=$(BD)
697build_debug: makedirs tools
698	$(MAKE) targets B=$(BD) CFLAGS="$(CFLAGS) $(DEBUG_CFLAGS) $(DEPEND_CFLAGS)"
699ifeq ($(BUILD_MASTER_SERVER),1)
700	$(MAKE) -C $(MASTERDIR) debug
701endif
702
703build_release: B=$(BR)
704build_release: makedirs
705	$(MAKE) targets B=$(BR) CFLAGS="$(CFLAGS) $(RELEASE_CFLAGS) $(DEPEND_CFLAGS)"
706ifeq ($(BUILD_MASTER_SERVER),1)
707	$(MAKE) -C $(MASTERDIR) release
708endif
709
710#Build both debug and release builds
711all:build_release
712
713targets: $(TARGETS)
714
715makedirs:
716	@if [ ! -d $(BUILD_DIR) ];then $(MKDIR) $(BUILD_DIR);fi
717	@if [ ! -d $(B) ];then $(MKDIR) $(B);fi
718	@if [ ! -d $(B)/client ];then $(MKDIR) $(B)/client;fi
719	@if [ ! -d $(B)/ded ];then $(MKDIR) $(B)/ded;fi
720	@if [ ! -d $(B)/base ];then $(MKDIR) $(B)/base;fi
721	@if [ ! -d $(B)/base/cgame ];then $(MKDIR) $(B)/base/cgame;fi
722	@if [ ! -d $(B)/base/game ];then $(MKDIR) $(B)/base/game;fi
723	@if [ ! -d $(B)/base/ui ];then $(MKDIR) $(B)/base/ui;fi
724	@if [ ! -d $(B)/base/qcommon ];then $(MKDIR) $(B)/base/qcommon;fi
725	@if [ ! -d $(B)/base/vm ];then $(MKDIR) $(B)/base/vm;fi
726
727#############################################################################
728# QVM BUILD TOOLS
729#############################################################################
730
731Q3LCC=$(TOOLSDIR)/q3lcc$(BINEXT)
732Q3ASM=$(TOOLSDIR)/q3asm$(BINEXT)
733
734ifeq ($(CROSS_COMPILING),1)
735tools:
736	echo QVM tools not built when cross-compiling
737else
738tools:
739	$(MAKE) -C $(TOOLSDIR)/lcc install
740	$(MAKE) -C $(TOOLSDIR)/asm install
741endif
742
743DO_Q3LCC=$(Q3LCC) -o $@ $<
744
745#############################################################################
746# CLIENT/SERVER
747#############################################################################
748
749Q3OBJ = \
750  $(B)/client/cl_cgame.o \
751  $(B)/client/cl_cin.o \
752  $(B)/client/cl_console.o \
753  $(B)/client/cl_input.o \
754  $(B)/client/cl_keys.o \
755  $(B)/client/cl_main.o \
756  $(B)/client/cl_net_chan.o \
757  $(B)/client/cl_parse.o \
758  $(B)/client/cl_scrn.o \
759  $(B)/client/cl_ui.o \
760  $(B)/client/cl_avi.o \
761  \
762  $(B)/client/cm_load.o \
763  $(B)/client/cm_patch.o \
764  $(B)/client/cm_polylib.o \
765  $(B)/client/cm_test.o \
766  $(B)/client/cm_trace.o \
767  \
768  $(B)/client/cmd.o \
769  $(B)/client/common.o \
770  $(B)/client/cvar.o \
771  $(B)/client/files.o \
772  $(B)/client/md4.o \
773  $(B)/client/msg.o \
774  $(B)/client/net_chan.o \
775  $(B)/client/huffman.o \
776  \
777  $(B)/client/snd_adpcm.o \
778  $(B)/client/snd_dma.o \
779  $(B)/client/snd_mem.o \
780  $(B)/client/snd_mix.o \
781  $(B)/client/snd_wavelet.o \
782  \
783  $(B)/client/snd_main.o \
784  $(B)/client/snd_codec.o \
785  $(B)/client/snd_codec_wav.o \
786  $(B)/client/snd_codec_ogg.o \
787  \
788  $(B)/client/qal.o \
789  $(B)/client/snd_openal.o \
790  \
791  $(B)/client/sv_bot.o \
792  $(B)/client/sv_ccmds.o \
793  $(B)/client/sv_client.o \
794  $(B)/client/sv_game.o \
795  $(B)/client/sv_init.o \
796  $(B)/client/sv_main.o \
797  $(B)/client/sv_net_chan.o \
798  $(B)/client/sv_snapshot.o \
799  $(B)/client/sv_world.o \
800  \
801  $(B)/client/q_math.o \
802  $(B)/client/q_shared.o \
803  \
804  $(B)/client/unzip.o \
805  $(B)/client/vm.o \
806  $(B)/client/vm_interpreted.o \
807  \
808  $(B)/client/be_aas_bspq3.o \
809  $(B)/client/be_aas_cluster.o \
810  $(B)/client/be_aas_debug.o \
811  $(B)/client/be_aas_entity.o \
812  $(B)/client/be_aas_file.o \
813  $(B)/client/be_aas_main.o \
814  $(B)/client/be_aas_move.o \
815  $(B)/client/be_aas_optimize.o \
816  $(B)/client/be_aas_reach.o \
817  $(B)/client/be_aas_route.o \
818  $(B)/client/be_aas_routealt.o \
819  $(B)/client/be_aas_sample.o \
820  $(B)/client/be_ai_char.o \
821  $(B)/client/be_ai_chat.o \
822  $(B)/client/be_ai_gen.o \
823  $(B)/client/be_ai_goal.o \
824  $(B)/client/be_ai_move.o \
825  $(B)/client/be_ai_weap.o \
826  $(B)/client/be_ai_weight.o \
827  $(B)/client/be_ea.o \
828  $(B)/client/be_interface.o \
829  $(B)/client/l_crc.o \
830  $(B)/client/l_libvar.o \
831  $(B)/client/l_log.o \
832  $(B)/client/l_memory.o \
833  $(B)/client/l_precomp.o \
834  $(B)/client/l_script.o \
835  $(B)/client/l_struct.o \
836  \
837  $(B)/client/jcapimin.o \
838  $(B)/client/jchuff.o   \
839  $(B)/client/jcinit.o \
840  $(B)/client/jccoefct.o  \
841  $(B)/client/jccolor.o \
842  $(B)/client/jfdctflt.o \
843  $(B)/client/jcdctmgr.o \
844  $(B)/client/jcphuff.o \
845  $(B)/client/jcmainct.o \
846  $(B)/client/jcmarker.o \
847  $(B)/client/jcmaster.o \
848  $(B)/client/jcomapi.o \
849  $(B)/client/jcparam.o \
850  $(B)/client/jcprepct.o \
851  $(B)/client/jcsample.o \
852  $(B)/client/jdapimin.o \
853  $(B)/client/jdapistd.o \
854  $(B)/client/jdatasrc.o \
855  $(B)/client/jdcoefct.o \
856  $(B)/client/jdcolor.o \
857  $(B)/client/jddctmgr.o \
858  $(B)/client/jdhuff.o \
859  $(B)/client/jdinput.o \
860  $(B)/client/jdmainct.o \
861  $(B)/client/jdmarker.o \
862  $(B)/client/jdmaster.o \
863  $(B)/client/jdpostct.o \
864  $(B)/client/jdsample.o \
865  $(B)/client/jdtrans.o \
866  $(B)/client/jerror.o \
867  $(B)/client/jidctflt.o \
868  $(B)/client/jmemmgr.o \
869  $(B)/client/jmemnobs.o \
870  $(B)/client/jutils.o \
871  \
872  $(B)/client/tr_animation.o \
873  $(B)/client/tr_backend.o \
874  $(B)/client/tr_bsp.o \
875  $(B)/client/tr_cmds.o \
876  $(B)/client/tr_curve.o \
877  $(B)/client/tr_flares.o \
878  $(B)/client/tr_font.o \
879  $(B)/client/tr_image.o \
880  $(B)/client/tr_init.o \
881  $(B)/client/tr_light.o \
882  $(B)/client/tr_main.o \
883  $(B)/client/tr_marks.o \
884  $(B)/client/tr_mesh.o \
885  $(B)/client/tr_model.o \
886  $(B)/client/tr_noise.o \
887  $(B)/client/tr_scene.o \
888  $(B)/client/tr_shade.o \
889  $(B)/client/tr_shade_calc.o \
890  $(B)/client/tr_shader.o \
891  $(B)/client/tr_shadows.o \
892  $(B)/client/tr_sky.o \
893  $(B)/client/tr_surface.o \
894  $(B)/client/tr_world.o \
895
896ifeq ($(ARCH),i386)
897  Q3OBJ += $(B)/client/vm_x86.o
898  Q3OBJ += \
899    $(B)/client/snd_mixa.o \
900    $(B)/client/matha.o \
901    $(B)/client/ftola.o \
902    $(B)/client/snapvectora.o
903endif
904
905ifeq ($(ARCH),amd64)
906  Q3OBJ += $(B)/client/vm_x86_64.o
907endif
908
909ifeq ($(ARCH),ppc)
910  ifneq ($(VM_PPC),)
911    Q3OBJ += $(B)/client/$(VM_PPC).o
912  endif
913endif
914
915ifeq ($(PLATFORM),mingw32)
916  Q3OBJ += \
917    $(B)/client/win_gamma.o \
918    $(B)/client/win_glimp.o \
919    $(B)/client/win_input.o \
920    $(B)/client/win_main.o \
921    $(B)/client/win_net.o \
922    $(B)/client/win_qgl.o \
923    $(B)/client/win_shared.o \
924    $(B)/client/win_snd.o \
925    $(B)/client/win_syscon.o \
926    $(B)/client/win_wndproc.o \
927    $(B)/client/win_resource.o
928else
929  Q3OBJ += \
930    $(B)/client/unix_main.o \
931    $(B)/client/unix_net.o \
932    $(B)/client/unix_shared.o \
933    $(B)/client/linux_signals.o \
934    $(B)/client/linux_qgl.o \
935    $(B)/client/linux_snd.o \
936    $(B)/client/sdl_snd.o
937
938  ifeq ($(PLATFORM),linux)
939    Q3OBJ += $(B)/client/linux_joystick.o
940  endif
941
942  ifeq ($(USE_SDL),1)
943    ifneq ($(PLATFORM),darwin)
944      BUILD_CLIENT_SMP = 0
945    endif
946  endif
947
948  Q3POBJ = \
949    $(B)/client/linux_glimp.o \
950    $(B)/client/sdl_glimp.o
951
952  Q3POBJ_SMP = \
953    $(B)/client/linux_glimp_smp.o \
954    $(B)/client/sdl_glimp_smp.o
955endif
956
957$(B)/tremulous$(BINEXT): $(Q3OBJ) $(Q3POBJ) $(LIBSDLMAIN)
958	$(CC)  -o $@ $(Q3OBJ) $(Q3POBJ) $(CLIENT_LDFLAGS) $(LDFLAGS) $(LIBSDLMAIN)
959
960$(B)/tremulous-smp$(BINEXT): $(Q3OBJ) $(Q3POBJ_SMP) $(LIBSDLMAIN)
961	$(CC)  -o $@ $(Q3OBJ) $(Q3POBJ_SMP) $(CLIENT_LDFLAGS) \
962		$(THREAD_LDFLAGS) $(LDFLAGS) $(LIBSDLMAIN)
963
964ifneq ($(strip $(LIBSDLMAIN)),)
965ifneq ($(strip $(LIBSDLMAINSRC)),)
966$(LIBSDLMAIN) : $(LIBSDLMAINSRC)
967	cp $< $@
968	ranlib $@
969endif
970endif
971
972$(B)/client/cl_cgame.o : $(CDIR)/cl_cgame.c; $(DO_CC)
973$(B)/client/cl_cin.o : $(CDIR)/cl_cin.c; $(DO_CC)
974$(B)/client/cl_console.o : $(CDIR)/cl_console.c; $(DO_CC)
975$(B)/client/cl_input.o : $(CDIR)/cl_input.c; $(DO_CC)
976$(B)/client/cl_keys.o : $(CDIR)/cl_keys.c; $(DO_CC)
977$(B)/client/cl_main.o : $(CDIR)/cl_main.c; $(DO_CC)
978$(B)/client/cl_net_chan.o : $(CDIR)/cl_net_chan.c; $(DO_CC)
979$(B)/client/cl_parse.o : $(CDIR)/cl_parse.c; $(DO_CC)
980$(B)/client/cl_scrn.o : $(CDIR)/cl_scrn.c; $(DO_CC)
981$(B)/client/cl_ui.o : $(CDIR)/cl_ui.c; $(DO_CC)
982$(B)/client/cl_avi.o : $(CDIR)/cl_avi.c; $(DO_CC)
983$(B)/client/snd_adpcm.o : $(CDIR)/snd_adpcm.c; $(DO_CC)
984$(B)/client/snd_dma.o : $(CDIR)/snd_dma.c; $(DO_CC)
985$(B)/client/snd_mem.o : $(CDIR)/snd_mem.c; $(DO_CC)
986$(B)/client/snd_mix.o : $(CDIR)/snd_mix.c; $(DO_CC)
987$(B)/client/snd_wavelet.o : $(CDIR)/snd_wavelet.c; $(DO_CC)
988
989$(B)/client/snd_main.o : $(CDIR)/snd_main.c; $(DO_CC)
990$(B)/client/snd_codec.o : $(CDIR)/snd_codec.c; $(DO_CC)
991$(B)/client/snd_codec_wav.o : $(CDIR)/snd_codec_wav.c; $(DO_CC)
992$(B)/client/snd_codec_ogg.o : $(CDIR)/snd_codec_ogg.c; $(DO_CC)
993
994$(B)/client/qal.o : $(CDIR)/qal.c; $(DO_CC)
995$(B)/client/snd_openal.o : $(CDIR)/snd_openal.c; $(DO_CC)
996
997$(B)/client/sv_bot.o : $(SDIR)/sv_bot.c; $(DO_CC)
998$(B)/client/sv_client.o : $(SDIR)/sv_client.c; $(DO_CC)
999$(B)/client/sv_ccmds.o : $(SDIR)/sv_ccmds.c; $(DO_CC)
1000$(B)/client/sv_game.o : $(SDIR)/sv_game.c; $(DO_CC)
1001$(B)/client/sv_init.o : $(SDIR)/sv_init.c; $(DO_CC)
1002$(B)/client/sv_main.o : $(SDIR)/sv_main.c; $(DO_CC)
1003$(B)/client/sv_net_chan.o : $(SDIR)/sv_net_chan.c; $(DO_CC)
1004$(B)/client/sv_snapshot.o : $(SDIR)/sv_snapshot.c; $(DO_CC)
1005$(B)/client/sv_world.o : $(SDIR)/sv_world.c; $(DO_CC)
1006$(B)/client/cm_trace.o : $(CMDIR)/cm_trace.c; $(DO_CC)
1007$(B)/client/cm_load.o : $(CMDIR)/cm_load.c; $(DO_CC)
1008$(B)/client/cm_test.o : $(CMDIR)/cm_test.c; $(DO_CC)
1009$(B)/client/cm_patch.o : $(CMDIR)/cm_patch.c; $(DO_CC)
1010$(B)/client/cm_polylib.o : $(CMDIR)/cm_polylib.c; $(DO_CC)
1011$(B)/client/cmd.o : $(CMDIR)/cmd.c; $(DO_CC)
1012$(B)/client/common.o : $(CMDIR)/common.c; $(DO_CC)
1013$(B)/client/cvar.o : $(CMDIR)/cvar.c; $(DO_CC)
1014$(B)/client/files.o : $(CMDIR)/files.c; $(DO_CC)
1015$(B)/client/md4.o : $(CMDIR)/md4.c; $(DO_CC)
1016$(B)/client/msg.o : $(CMDIR)/msg.c; $(DO_CC)
1017$(B)/client/net_chan.o : $(CMDIR)/net_chan.c; $(DO_CC)
1018$(B)/client/huffman.o : $(CMDIR)/huffman.c; $(DO_CC)
1019$(B)/client/q_shared.o : $(CMDIR)/q_shared.c; $(DO_CC)
1020$(B)/client/q_math.o : $(CMDIR)/q_math.c; $(DO_CC)
1021
1022$(B)/client/be_aas_bspq3.o : $(BLIBDIR)/be_aas_bspq3.c; $(DO_BOT_CC)
1023$(B)/client/be_aas_cluster.o : $(BLIBDIR)/be_aas_cluster.c; $(DO_BOT_CC)
1024$(B)/client/be_aas_debug.o : $(BLIBDIR)/be_aas_debug.c; $(DO_BOT_CC)
1025$(B)/client/be_aas_entity.o : $(BLIBDIR)/be_aas_entity.c; $(DO_BOT_CC)
1026$(B)/client/be_aas_file.o : $(BLIBDIR)/be_aas_file.c; $(DO_BOT_CC)
1027$(B)/client/be_aas_main.o : $(BLIBDIR)/be_aas_main.c; $(DO_BOT_CC)
1028$(B)/client/be_aas_move.o : $(BLIBDIR)/be_aas_move.c; $(DO_BOT_CC)
1029$(B)/client/be_aas_optimize.o : $(BLIBDIR)/be_aas_optimize.c; $(DO_BOT_CC)
1030$(B)/client/be_aas_reach.o : $(BLIBDIR)/be_aas_reach.c; $(DO_BOT_CC)
1031$(B)/client/be_aas_route.o : $(BLIBDIR)/be_aas_route.c; $(DO_BOT_CC)
1032$(B)/client/be_aas_routealt.o : $(BLIBDIR)/be_aas_routealt.c; $(DO_BOT_CC)
1033$(B)/client/be_aas_sample.o : $(BLIBDIR)/be_aas_sample.c; $(DO_BOT_CC)
1034$(B)/client/be_ai_char.o : $(BLIBDIR)/be_ai_char.c; $(DO_BOT_CC)
1035$(B)/client/be_ai_chat.o : $(BLIBDIR)/be_ai_chat.c; $(DO_BOT_CC)
1036$(B)/client/be_ai_gen.o : $(BLIBDIR)/be_ai_gen.c; $(DO_BOT_CC)
1037$(B)/client/be_ai_goal.o : $(BLIBDIR)/be_ai_goal.c; $(DO_BOT_CC)
1038$(B)/client/be_ai_move.o : $(BLIBDIR)/be_ai_move.c; $(DO_BOT_CC)
1039$(B)/client/be_ai_weap.o : $(BLIBDIR)/be_ai_weap.c; $(DO_BOT_CC)
1040$(B)/client/be_ai_weight.o : $(BLIBDIR)/be_ai_weight.c; $(DO_BOT_CC)
1041$(B)/client/be_ea.o : $(BLIBDIR)/be_ea.c; $(DO_BOT_CC)
1042$(B)/client/be_interface.o : $(BLIBDIR)/be_interface.c; $(DO_BOT_CC)
1043$(B)/client/l_crc.o : $(BLIBDIR)/l_crc.c; $(DO_BOT_CC)
1044$(B)/client/l_libvar.o : $(BLIBDIR)/l_libvar.c; $(DO_BOT_CC)
1045$(B)/client/l_log.o : $(BLIBDIR)/l_log.c; $(DO_BOT_CC)
1046$(B)/client/l_memory.o : $(BLIBDIR)/l_memory.c; $(DO_BOT_CC)
1047$(B)/client/l_precomp.o : $(BLIBDIR)/l_precomp.c; $(DO_BOT_CC)
1048$(B)/client/l_script.o : $(BLIBDIR)/l_script.c; $(DO_BOT_CC)
1049$(B)/client/l_struct.o : $(BLIBDIR)/l_struct.c; $(DO_BOT_CC)
1050
1051$(B)/client/jcapimin.o : $(JPDIR)/jcapimin.c; $(DO_CC)
1052$(B)/client/jchuff.o : $(JPDIR)/jchuff.c; $(DO_CC)
1053$(B)/client/jcinit.o : $(JPDIR)/jcinit.c; $(DO_CC)
1054$(B)/client/jccoefct.o : $(JPDIR)/jccoefct.c; $(DO_CC)
1055$(B)/client/jccolor.o : $(JPDIR)/jccolor.c; $(DO_CC)
1056$(B)/client/jfdctflt.o : $(JPDIR)/jfdctflt.c; $(DO_CC)
1057$(B)/client/jcdctmgr.o : $(JPDIR)/jcdctmgr.c; $(DO_CC)
1058$(B)/client/jcmainct.o : $(JPDIR)/jcmainct.c; $(DO_CC)
1059$(B)/client/jcmarker.o : $(JPDIR)/jcmarker.c; $(DO_CC)
1060$(B)/client/jcmaster.o : $(JPDIR)/jcmaster.c; $(DO_CC)
1061$(B)/client/jcomapi.o : $(JPDIR)/jcomapi.c; $(DO_CC)
1062$(B)/client/jcparam.o : $(JPDIR)/jcparam.c;  $(DO_CC)
1063$(B)/client/jcprepct.o : $(JPDIR)/jcprepct.c; $(DO_CC)
1064$(B)/client/jcsample.o : $(JPDIR)/jcsample.c; $(DO_CC)
1065
1066$(B)/client/jdapimin.o : $(JPDIR)/jdapimin.c; $(DO_CC)
1067$(B)/client/jdapistd.o : $(JPDIR)/jdapistd.c; $(DO_CC)
1068$(B)/client/jdatasrc.o : $(JPDIR)/jdatasrc.c; $(DO_CC)
1069$(B)/client/jdcoefct.o : $(JPDIR)/jdcoefct.c; $(DO_CC)
1070$(B)/client/jdcolor.o : $(JPDIR)/jdcolor.c; $(DO_CC)
1071$(B)/client/jcphuff.o : $(JPDIR)/jcphuff.c; $(DO_CC)
1072$(B)/client/jddctmgr.o : $(JPDIR)/jddctmgr.c; $(DO_CC)
1073$(B)/client/jdhuff.o : $(JPDIR)/jdhuff.c; $(DO_CC)
1074$(B)/client/jdinput.o : $(JPDIR)/jdinput.c; $(DO_CC)
1075$(B)/client/jdmainct.o : $(JPDIR)/jdmainct.c; $(DO_CC)
1076$(B)/client/jdmarker.o : $(JPDIR)/jdmarker.c; $(DO_CC)
1077$(B)/client/jdmaster.o : $(JPDIR)/jdmaster.c; $(DO_CC)
1078$(B)/client/jdpostct.o : $(JPDIR)/jdpostct.c; $(DO_CC)
1079$(B)/client/jdsample.o : $(JPDIR)/jdsample.c; $(DO_CC)
1080$(B)/client/jdtrans.o : $(JPDIR)/jdtrans.c; $(DO_CC)
1081$(B)/client/jerror.o : $(JPDIR)/jerror.c; $(DO_CC) $(GL_CFLAGS) $(MINGW_CFLAGS)
1082$(B)/client/jidctflt.o : $(JPDIR)/jidctflt.c; $(DO_CC)
1083$(B)/client/jmemmgr.o : $(JPDIR)/jmemmgr.c; $(DO_CC)
1084$(B)/client/jmemnobs.o : $(JPDIR)/jmemnobs.c; $(DO_CC)  $(GL_CFLAGS) $(MINGW_CFLAGS)
1085$(B)/client/jutils.o : $(JPDIR)/jutils.c; $(DO_CC)
1086
1087$(B)/client/tr_bsp.o : $(RDIR)/tr_bsp.c; $(DO_CC)  $(GL_CFLAGS)
1088$(B)/client/tr_animation.o : $(RDIR)/tr_animation.c; $(DO_CC)  $(GL_CFLAGS)
1089$(B)/client/tr_backend.o : $(RDIR)/tr_backend.c; $(DO_CC)  $(GL_CFLAGS)
1090$(B)/client/tr_cmds.o : $(RDIR)/tr_cmds.c; $(DO_CC)  $(GL_CFLAGS)
1091$(B)/client/tr_curve.o : $(RDIR)/tr_curve.c; $(DO_CC)  $(GL_CFLAGS)
1092$(B)/client/tr_flares.o : $(RDIR)/tr_flares.c; $(DO_CC)  $(GL_CFLAGS)
1093$(B)/client/tr_font.o : $(RDIR)/tr_font.c; $(DO_CC)   $(GL_CFLAGS)
1094$(B)/client/tr_image.o : $(RDIR)/tr_image.c; $(DO_CC)   $(GL_CFLAGS) $(MINGW_CFLAGS)
1095$(B)/client/tr_init.o : $(RDIR)/tr_init.c; $(DO_CC)    $(GL_CFLAGS)
1096$(B)/client/tr_light.o : $(RDIR)/tr_light.c; $(DO_CC)  $(GL_CFLAGS)
1097$(B)/client/tr_main.o : $(RDIR)/tr_main.c; $(DO_CC)   $(GL_CFLAGS)
1098$(B)/client/tr_marks.o : $(RDIR)/tr_marks.c; $(DO_CC)   $(GL_CFLAGS)
1099$(B)/client/tr_mesh.o : $(RDIR)/tr_mesh.c; $(DO_CC)   $(GL_CFLAGS)
1100$(B)/client/tr_model.o : $(RDIR)/tr_model.c; $(DO_CC)   $(GL_CFLAGS)
1101$(B)/client/tr_noise.o : $(RDIR)/tr_noise.c; $(DO_CC)   $(GL_CFLAGS)
1102$(B)/client/tr_scene.o : $(RDIR)/tr_scene.c; $(DO_CC)   $(GL_CFLAGS)
1103$(B)/client/tr_shade.o : $(RDIR)/tr_shade.c; $(DO_CC)   $(GL_CFLAGS)
1104$(B)/client/tr_shader.o : $(RDIR)/tr_shader.c; $(DO_CC)   $(GL_CFLAGS)
1105$(B)/client/tr_shade_calc.o : $(RDIR)/tr_shade_calc.c; $(DO_CC)  $(GL_CFLAGS)
1106$(B)/client/tr_shadows.o : $(RDIR)/tr_shadows.c; $(DO_CC)   $(GL_CFLAGS)
1107$(B)/client/tr_sky.o : $(RDIR)/tr_sky.c; $(DO_CC)   $(GL_CFLAGS)
1108$(B)/client/tr_smp.o : $(RDIR)/tr_smp.c; $(DO_CC)   $(GL_CFLAGS)
1109$(B)/client/tr_stripify.o : $(RDIR)/tr_stripify.c; $(DO_CC)   $(GL_CFLAGS)
1110$(B)/client/tr_subdivide.o : $(RDIR)/tr_subdivide.c; $(DO_CC)   $(GL_CFLAGS)
1111$(B)/client/tr_surface.o : $(RDIR)/tr_surface.c; $(DO_CC)  $(GL_CFLAGS)
1112$(B)/client/tr_world.o : $(RDIR)/tr_world.c; $(DO_CC)   $(GL_CFLAGS)
1113
1114$(B)/client/unix_qgl.o : $(UDIR)/unix_qgl.c; $(DO_CC)  $(GL_CFLAGS)
1115$(B)/client/unix_main.o : $(UDIR)/unix_main.c; $(DO_CC)
1116$(B)/client/unix_net.o : $(UDIR)/unix_net.c; $(DO_CC)
1117$(B)/client/unix_shared.o : $(UDIR)/unix_shared.c; $(DO_CC)
1118$(B)/client/irix_glimp.o : $(UDIR)/irix_glimp.c; $(DO_CC)
1119$(B)/client/irix_glimp_smp.o : $(UDIR)/irix_glimp.c; $(DO_SMP_CC)
1120$(B)/client/irix_snd.o : $(UDIR)/irix_snd.c; $(DO_CC)
1121$(B)/client/irix_input.o : $(UDIR)/irix_input.c; $(DO_CC)
1122$(B)/client/linux_signals.o : $(UDIR)/linux_signals.c; $(DO_CC) $(GL_CFLAGS)
1123$(B)/client/linux_glimp.o : $(UDIR)/linux_glimp.c; $(DO_CC)  $(GL_CFLAGS)
1124$(B)/client/sdl_glimp.o : $(UDIR)/sdl_glimp.c; $(DO_CC)  $(GL_CFLAGS)
1125$(B)/client/linux_glimp_smp.o : $(UDIR)/linux_glimp.c; $(DO_SMP_CC)  $(GL_CFLAGS)
1126$(B)/client/sdl_glimp_smp.o : $(UDIR)/sdl_glimp.c; $(DO_SMP_CC)  $(GL_CFLAGS)
1127$(B)/client/linux_joystick.o : $(UDIR)/linux_joystick.c; $(DO_CC)
1128$(B)/client/linux_qgl.o : $(UDIR)/linux_qgl.c; $(DO_CC)  $(GL_CFLAGS)
1129$(B)/client/linux_input.o : $(UDIR)/linux_input.c; $(DO_CC)
1130$(B)/client/linux_snd.o : $(UDIR)/linux_snd.c; $(DO_CC)
1131$(B)/client/sdl_snd.o : $(UDIR)/sdl_snd.c; $(DO_CC)
1132$(B)/client/snd_mixa.o : $(UDIR)/snd_mixa.s; $(DO_AS)
1133$(B)/client/matha.o : $(UDIR)/matha.s; $(DO_AS)
1134$(B)/client/ftola.o : $(UDIR)/ftola.s; $(DO_AS)
1135$(B)/client/snapvectora.o : $(UDIR)/snapvectora.s; $(DO_AS)
1136
1137$(B)/client/win_gamma.o : $(W32DIR)/win_gamma.c; $(DO_CC)
1138$(B)/client/win_glimp.o : $(W32DIR)/win_glimp.c; $(DO_CC)
1139$(B)/client/win_input.o : $(W32DIR)/win_input.c; $(DO_CC)
1140$(B)/client/win_main.o : $(W32DIR)/win_main.c; $(DO_CC)
1141$(B)/client/win_net.o : $(W32DIR)/win_net.c; $(DO_CC)
1142$(B)/client/win_qgl.o : $(W32DIR)/win_qgl.c; $(DO_CC)
1143$(B)/client/win_shared.o : $(W32DIR)/win_shared.c; $(DO_CC)
1144$(B)/client/win_snd.o : $(W32DIR)/win_snd.c; $(DO_CC)
1145$(B)/client/win_syscon.o : $(W32DIR)/win_syscon.c; $(DO_CC)
1146$(B)/client/win_wndproc.o : $(W32DIR)/win_wndproc.c; $(DO_CC)
1147$(B)/client/win_resource.o : $(W32DIR)/win_resource.rc; $(DO_WINDRES)
1148
1149$(B)/client/vm_x86.o : $(CMDIR)/vm_x86.c; $(DO_CC)
1150$(B)/client/vm_x86_64.o : $(CMDIR)/vm_x86_64.c; $(DO_CC)
1151ifneq ($(VM_PPC),)
1152$(B)/client/$(VM_PPC).o : $(CMDIR)/$(VM_PPC).c; $(DO_CC)
1153endif
1154
1155$(B)/client/unzip.o : $(CMDIR)/unzip.c; $(DO_CC)
1156$(B)/client/vm.o : $(CMDIR)/vm.c; $(DO_CC)
1157$(B)/client/vm_interpreted.o : $(CMDIR)/vm_interpreted.c; $(DO_CC)
1158
1159#############################################################################
1160# DEDICATED SERVER
1161#############################################################################
1162
1163Q3DOBJ = \
1164  $(B)/ded/sv_bot.o \
1165  $(B)/ded/sv_client.o \
1166  $(B)/ded/sv_ccmds.o \
1167  $(B)/ded/sv_game.o \
1168  $(B)/ded/sv_init.o \
1169  $(B)/ded/sv_main.o \
1170  $(B)/ded/sv_net_chan.o \
1171  $(B)/ded/sv_snapshot.o \
1172  $(B)/ded/sv_world.o \
1173  \
1174  $(B)/ded/cm_load.o \
1175  $(B)/ded/cm_patch.o \
1176  $(B)/ded/cm_polylib.o \
1177  $(B)/ded/cm_test.o \
1178  $(B)/ded/cm_trace.o \
1179  $(B)/ded/cmd.o \
1180  $(B)/ded/common.o \
1181  $(B)/ded/cvar.o \
1182  $(B)/ded/files.o \
1183  $(B)/ded/md4.o \
1184  $(B)/ded/msg.o \
1185  $(B)/ded/net_chan.o \
1186  $(B)/ded/huffman.o \
1187  \
1188  $(B)/ded/q_math.o \
1189  $(B)/ded/q_shared.o \
1190  \
1191  $(B)/ded/unzip.o \
1192  $(B)/ded/vm.o \
1193  $(B)/ded/vm_interpreted.o \
1194  \
1195  $(B)/ded/be_aas_bspq3.o \
1196  $(B)/ded/be_aas_cluster.o \
1197  $(B)/ded/be_aas_debug.o \
1198  $(B)/ded/be_aas_entity.o \
1199  $(B)/ded/be_aas_file.o \
1200  $(B)/ded/be_aas_main.o \
1201  $(B)/ded/be_aas_move.o \
1202  $(B)/ded/be_aas_optimize.o \
1203  $(B)/ded/be_aas_reach.o \
1204  $(B)/ded/be_aas_route.o \
1205  $(B)/ded/be_aas_routealt.o \
1206  $(B)/ded/be_aas_sample.o \
1207  $(B)/ded/be_ai_char.o \
1208  $(B)/ded/be_ai_chat.o \
1209  $(B)/ded/be_ai_gen.o \
1210  $(B)/ded/be_ai_goal.o \
1211  $(B)/ded/be_ai_move.o \
1212  $(B)/ded/be_ai_weap.o \
1213  $(B)/ded/be_ai_weight.o \
1214  $(B)/ded/be_ea.o \
1215  $(B)/ded/be_interface.o \
1216  $(B)/ded/l_crc.o \
1217  $(B)/ded/l_libvar.o \
1218  $(B)/ded/l_log.o \
1219  $(B)/ded/l_memory.o \
1220  $(B)/ded/l_precomp.o \
1221  $(B)/ded/l_script.o \
1222  $(B)/ded/l_struct.o \
1223  \
1224  $(B)/ded/linux_signals.o \
1225  $(B)/ded/unix_main.o \
1226  $(B)/ded/unix_net.o \
1227  $(B)/ded/unix_shared.o \
1228  \
1229  $(B)/ded/null_client.o \
1230  $(B)/ded/null_input.o \
1231  $(B)/ded/null_snddma.o
1232
1233ifeq ($(ARCH),i386)
1234  Q3DOBJ += $(B)/ded/vm_x86.o $(B)/ded/ftola.o \
1235      $(B)/ded/snapvectora.o $(B)/ded/matha.o
1236endif
1237
1238ifeq ($(ARCH),amd64)
1239  Q3DOBJ += $(B)/ded/vm_x86_64.o
1240endif
1241
1242ifeq ($(ARCH),ppc)
1243  ifneq ($(VM_PPC),)
1244    Q3DOBJ += $(B)/ded/$(VM_PPC).o
1245  endif
1246endif
1247
1248$(B)/tremded$(BINEXT): $(Q3DOBJ)
1249	$(CC) -o $@ $(Q3DOBJ) $(LDFLAGS)
1250
1251$(B)/ded/sv_bot.o : $(SDIR)/sv_bot.c; $(DO_DED_CC)
1252$(B)/ded/sv_client.o : $(SDIR)/sv_client.c; $(DO_DED_CC)
1253$(B)/ded/sv_ccmds.o : $(SDIR)/sv_ccmds.c; $(DO_DED_CC)
1254$(B)/ded/sv_game.o : $(SDIR)/sv_game.c; $(DO_DED_CC)
1255$(B)/ded/sv_init.o : $(SDIR)/sv_init.c; $(DO_DED_CC)
1256$(B)/ded/sv_main.o : $(SDIR)/sv_main.c; $(DO_DED_CC)
1257$(B)/ded/sv_net_chan.o : $(SDIR)/sv_net_chan.c; $(DO_DED_CC)
1258$(B)/ded/sv_snapshot.o : $(SDIR)/sv_snapshot.c; $(DO_DED_CC)
1259$(B)/ded/sv_world.o : $(SDIR)/sv_world.c; $(DO_DED_CC)
1260$(B)/ded/cm_load.o : $(CMDIR)/cm_load.c; $(DO_DED_CC)
1261$(B)/ded/cm_polylib.o : $(CMDIR)/cm_polylib.c; $(DO_DED_CC)
1262$(B)/ded/cm_test.o : $(CMDIR)/cm_test.c; $(DO_DED_CC)
1263$(B)/ded/cm_trace.o : $(CMDIR)/cm_trace.c; $(DO_DED_CC)
1264$(B)/ded/cm_patch.o : $(CMDIR)/cm_patch.c; $(DO_DED_CC)
1265$(B)/ded/cmd.o : $(CMDIR)/cmd.c; $(DO_DED_CC)
1266$(B)/ded/common.o : $(CMDIR)/common.c; $(DO_DED_CC)
1267$(B)/ded/cvar.o : $(CMDIR)/cvar.c; $(DO_DED_CC)
1268$(B)/ded/files.o : $(CMDIR)/files.c; $(DO_DED_CC)
1269$(B)/ded/md4.o : $(CMDIR)/md4.c; $(DO_DED_CC)
1270$(B)/ded/msg.o : $(CMDIR)/msg.c; $(DO_DED_CC)
1271$(B)/ded/net_chan.o : $(CMDIR)/net_chan.c; $(DO_DED_CC)
1272$(B)/ded/huffman.o : $(CMDIR)/huffman.c; $(DO_DED_CC)
1273$(B)/ded/q_shared.o : $(CMDIR)/q_shared.c; $(DO_DED_CC)
1274$(B)/ded/q_math.o : $(CMDIR)/q_math.c; $(DO_DED_CC)
1275
1276$(B)/ded/be_aas_bspq3.o : $(BLIBDIR)/be_aas_bspq3.c; $(DO_BOT_CC)
1277$(B)/ded/be_aas_cluster.o : $(BLIBDIR)/be_aas_cluster.c; $(DO_BOT_CC)
1278$(B)/ded/be_aas_debug.o : $(BLIBDIR)/be_aas_debug.c; $(DO_BOT_CC)
1279$(B)/ded/be_aas_entity.o : $(BLIBDIR)/be_aas_entity.c; $(DO_BOT_CC)
1280$(B)/ded/be_aas_file.o : $(BLIBDIR)/be_aas_file.c; $(DO_BOT_CC)
1281$(B)/ded/be_aas_main.o : $(BLIBDIR)/be_aas_main.c; $(DO_BOT_CC)
1282$(B)/ded/be_aas_move.o : $(BLIBDIR)/be_aas_move.c; $(DO_BOT_CC)
1283$(B)/ded/be_aas_optimize.o : $(BLIBDIR)/be_aas_optimize.c; $(DO_BOT_CC)
1284$(B)/ded/be_aas_reach.o : $(BLIBDIR)/be_aas_reach.c; $(DO_BOT_CC)
1285$(B)/ded/be_aas_route.o : $(BLIBDIR)/be_aas_route.c; $(DO_BOT_CC)
1286$(B)/ded/be_aas_routealt.o : $(BLIBDIR)/be_aas_routealt.c; $(DO_BOT_CC)
1287$(B)/ded/be_aas_sample.o : $(BLIBDIR)/be_aas_sample.c; $(DO_BOT_CC)
1288$(B)/ded/be_ai_char.o : $(BLIBDIR)/be_ai_char.c; $(DO_BOT_CC)
1289$(B)/ded/be_ai_chat.o : $(BLIBDIR)/be_ai_chat.c; $(DO_BOT_CC)
1290$(B)/ded/be_ai_gen.o : $(BLIBDIR)/be_ai_gen.c; $(DO_BOT_CC)
1291$(B)/ded/be_ai_goal.o : $(BLIBDIR)/be_ai_goal.c; $(DO_BOT_CC)
1292$(B)/ded/be_ai_move.o : $(BLIBDIR)/be_ai_move.c; $(DO_BOT_CC)
1293$(B)/ded/be_ai_weap.o : $(BLIBDIR)/be_ai_weap.c; $(DO_BOT_CC)
1294$(B)/ded/be_ai_weight.o : $(BLIBDIR)/be_ai_weight.c; $(DO_BOT_CC)
1295$(B)/ded/be_ea.o : $(BLIBDIR)/be_ea.c; $(DO_BOT_CC)
1296$(B)/ded/be_interface.o : $(BLIBDIR)/be_interface.c; $(DO_BOT_CC)
1297$(B)/ded/l_crc.o : $(BLIBDIR)/l_crc.c; $(DO_BOT_CC)
1298$(B)/ded/l_libvar.o : $(BLIBDIR)/l_libvar.c; $(DO_BOT_CC)
1299$(B)/ded/l_log.o : $(BLIBDIR)/l_log.c; $(DO_BOT_CC)
1300$(B)/ded/l_memory.o : $(BLIBDIR)/l_memory.c; $(DO_BOT_CC)
1301$(B)/ded/l_precomp.o : $(BLIBDIR)/l_precomp.c; $(DO_BOT_CC)
1302$(B)/ded/l_script.o : $(BLIBDIR)/l_script.c; $(DO_BOT_CC)
1303$(B)/ded/l_struct.o : $(BLIBDIR)/l_struct.c; $(DO_BOT_CC)
1304
1305$(B)/ded/linux_signals.o : $(UDIR)/linux_signals.c; $(DO_DED_CC)
1306$(B)/ded/unix_main.o : $(UDIR)/unix_main.c; $(DO_DED_CC)
1307$(B)/ded/unix_net.o : $(UDIR)/unix_net.c; $(DO_DED_CC)
1308$(B)/ded/unix_shared.o : $(UDIR)/unix_shared.c; $(DO_DED_CC)
1309
1310$(B)/ded/null_client.o : $(NDIR)/null_client.c; $(DO_DED_CC)
1311$(B)/ded/null_input.o : $(NDIR)/null_input.c; $(DO_DED_CC)
1312$(B)/ded/null_snddma.o : $(NDIR)/null_snddma.c; $(DO_DED_CC)
1313$(B)/ded/unzip.o : $(CMDIR)/unzip.c; $(DO_DED_CC)
1314$(B)/ded/vm.o : $(CMDIR)/vm.c; $(DO_DED_CC)
1315$(B)/ded/vm_interpreted.o : $(CMDIR)/vm_interpreted.c; $(DO_DED_CC)
1316
1317$(B)/ded/ftola.o : $(UDIR)/ftola.s; $(DO_AS)
1318$(B)/ded/snapvectora.o : $(UDIR)/snapvectora.s; $(DO_AS)
1319$(B)/ded/matha.o : $(UDIR)/matha.s; $(DO_AS)
1320
1321$(B)/ded/vm_x86.o : $(CMDIR)/vm_x86.c; $(DO_DED_CC)
1322$(B)/ded/vm_x86_64.o : $(CMDIR)/vm_x86_64.c; $(DO_DED_CC)
1323ifneq ($(VM_PPC),)
1324$(B)/ded/$(VM_PPC).o : $(CMDIR)/$(VM_PPC).c; $(DO_DED_CC)
1325endif
1326
1327
1328
1329#############################################################################
1330## TREMULOUS CGAME
1331#############################################################################
1332
1333CGOBJ_ = \
1334  $(B)/base/cgame/cg_main.o \
1335  $(B)/base/game/bg_misc.o \
1336  $(B)/base/game/bg_pmove.o \
1337  $(B)/base/game/bg_slidemove.o \
1338  $(B)/base/cgame/cg_consolecmds.o \
1339  $(B)/base/cgame/cg_buildable.o \
1340  $(B)/base/cgame/cg_animation.o \
1341  $(B)/base/cgame/cg_animmapobj.o \
1342  $(B)/base/cgame/cg_draw.o \
1343  $(B)/base/cgame/cg_drawtools.o \
1344  $(B)/base/cgame/cg_ents.o \
1345  $(B)/base/cgame/cg_event.o \
1346  $(B)/base/cgame/cg_marks.o \
1347  $(B)/base/cgame/cg_players.o \
1348  $(B)/base/cgame/cg_playerstate.o \
1349  $(B)/base/cgame/cg_predict.o \
1350  $(B)/base/cgame/cg_servercmds.o \
1351  $(B)/base/cgame/cg_snapshot.o \
1352  $(B)/base/cgame/cg_view.o \
1353  $(B)/base/cgame/cg_weapons.o \
1354  $(B)/base/cgame/cg_mem.o \
1355  $(B)/base/cgame/cg_scanner.o \
1356  $(B)/base/cgame/cg_attachment.o \
1357  $(B)/base/cgame/cg_trails.o \
1358  $(B)/base/cgame/cg_particles.o \
1359  $(B)/base/cgame/cg_ptr.o \
1360  $(B)/base/cgame/cg_tutorial.o \
1361  $(B)/base/ui/ui_shared.o \
1362  \
1363  $(B)/base/qcommon/q_math.o \
1364  $(B)/base/qcommon/q_shared.o
1365
1366CGOBJ = $(CGOBJ_) $(B)/base/cgame/cg_syscalls.o
1367CGVMOBJ = $(CGOBJ_:%.o=%.asm) $(B)/base/game/bg_lib.asm
1368
1369$(B)/base/cgame.$(SHLIBEXT) : $(CGOBJ)
1370	$(CC) $(SHLIBLDFLAGS) -o $@ $(CGOBJ)
1371
1372$(B)/base/vm/cgame.qvm: $(CGVMOBJ) $(CGDIR)/cg_syscalls.asm
1373	$(Q3ASM) -o $@ $(CGVMOBJ) $(CGDIR)/cg_syscalls.asm
1374
1375
1376
1377#############################################################################
1378## TREMULOUS GAME
1379#############################################################################
1380
1381GOBJ_ = \
1382  $(B)/base/game/g_main.o \
1383  $(B)/base/game/bg_misc.o \
1384  $(B)/base/game/bg_pmove.o \
1385  $(B)/base/game/bg_slidemove.o \
1386  $(B)/base/game/g_mem.o \
1387  $(B)/base/game/g_active.o \
1388  $(B)/base/game/g_client.o \
1389  $(B)/base/game/g_cmds.o \
1390  $(B)/base/game/g_combat.o \
1391  $(B)/base/game/g_physics.o \
1392  $(B)/base/game/g_buildable.o \
1393  $(B)/base/game/g_misc.o \
1394  $(B)/base/game/g_missile.o \
1395  $(B)/base/game/g_mover.o \
1396  $(B)/base/game/g_session.o \
1397  $(B)/base/game/g_spawn.o \
1398  $(B)/base/game/g_svcmds.o \
1399  $(B)/base/game/g_target.o \
1400  $(B)/base/game/g_team.o \
1401  $(B)/base/game/g_trigger.o \
1402  $(B)/base/game/g_utils.o \
1403  $(B)/base/game/g_maprotation.o \
1404  $(B)/base/game/g_ptr.o \
1405  $(B)/base/game/g_weapon.o \
1406  \
1407  $(B)/base/qcommon/q_math.o \
1408  $(B)/base/qcommon/q_shared.o
1409
1410GOBJ = $(GOBJ_) $(B)/base/game/g_syscalls.o
1411GVMOBJ = $(GOBJ_:%.o=%.asm) $(B)/base/game/bg_lib.asm
1412
1413$(B)/base/game.$(SHLIBEXT) : $(GOBJ)
1414	$(CC) $(SHLIBLDFLAGS) -o $@ $(GOBJ)
1415
1416$(B)/base/vm/game.qvm: $(GVMOBJ) $(GDIR)/g_syscalls.asm
1417	$(Q3ASM) -o $@ $(GVMOBJ) $(GDIR)/g_syscalls.asm
1418
1419
1420
1421#############################################################################
1422## TREMULOUS UI
1423#############################################################################
1424
1425UIOBJ_ = \
1426  $(B)/base/ui/ui_main.o \
1427  $(B)/base/ui/ui_atoms.o \
1428  $(B)/base/ui/ui_players.o \
1429  $(B)/base/ui/ui_shared.o \
1430  $(B)/base/ui/ui_gameinfo.o \
1431  \
1432  $(B)/base/game/bg_misc.o \
1433  $(B)/base/qcommon/q_math.o \
1434  $(B)/base/qcommon/q_shared.o
1435
1436UIOBJ = $(UIOBJ_) $(B)/base/ui/ui_syscalls.o
1437UIVMOBJ = $(UIOBJ_:%.o=%.asm) $(B)/base/game/bg_lib.asm
1438
1439$(B)/base/ui.$(SHLIBEXT) : $(UIOBJ)
1440	$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(UIOBJ)
1441
1442$(B)/base/vm/ui.qvm: $(UIVMOBJ) $(UIDIR)/ui_syscalls.asm
1443	$(Q3ASM) -o $@ $(UIVMOBJ) $(UIDIR)/ui_syscalls.asm
1444
1445
1446#############################################################################
1447## GAME MODULE RULES
1448#############################################################################
1449
1450$(B)/base/cgame/%.o: $(CGDIR)/%.c
1451	$(DO_SHLIB_CC)
1452
1453$(B)/base/cgame/%.asm: $(CGDIR)/%.c
1454	$(DO_Q3LCC)
1455
1456
1457$(B)/base/game/%.o: $(GDIR)/%.c
1458	$(DO_SHLIB_CC)
1459
1460$(B)/base/game/%.asm: $(GDIR)/%.c
1461	$(DO_Q3LCC)
1462
1463
1464$(B)/base/ui/%.o: $(UIDIR)/%.c
1465	$(DO_SHLIB_CC)
1466
1467$(B)/base/ui/%.asm: $(UIDIR)/%.c
1468	$(DO_Q3LCC)
1469
1470
1471$(B)/base/qcommon/%.o: $(CMDIR)/%.c
1472	$(DO_SHLIB_CC)
1473
1474$(B)/base/qcommon/%.asm: $(CMDIR)/%.c
1475	$(DO_Q3LCC)
1476
1477
1478#############################################################################
1479# MISC
1480#############################################################################
1481
1482clean:clean-debug clean-release
1483	$(MAKE) -C $(MASTERDIR) clean
1484
1485clean2:
1486	if [ -d $(B) ];then (find $(B) -name '*.d' -exec rm {} \;)fi
1487	rm -f $(Q3OBJ) $(Q3POBJ) $(Q3POBJ_SMP) $(Q3DOBJ) \
1488		$(GOBJ) $(CGOBJ) $(UIOBJ) \
1489		$(GVMOBJ) $(CGVMOBJ) $(UIVMOBJ)
1490	rm -f $(TARGETS)
1491
1492clean-debug:
1493	$(MAKE) clean2 B=$(BD) CFLAGS="$(DEBUG_CFLAGS)"
1494
1495clean-release:
1496	$(MAKE) clean2 B=$(BR) CFLAGS="$(RELEASE_CFLAGS)"
1497
1498toolsclean:
1499	$(MAKE) -C $(TOOLSDIR)/asm clean uninstall
1500	$(MAKE) -C $(TOOLSDIR)/lcc clean uninstall
1501
1502distclean: clean toolsclean
1503	rm -rf $(BUILD_DIR)
1504
1505installer: build_release
1506	$(MAKE) VERSION=$(VERSION) -C $(LOKISETUPDIR)
1507
1508dist:
1509	rm -rf tremulous-$(SVN_VERSION)
1510	svn export . tremulous-$(SVN_VERSION)
1511	tar --force-local -cjf tremulous-$(SVN_VERSION).tar.bz2 tremulous-$(SVN_VERSION)
1512	rm -rf tremulous-$(SVN_VERSION)
1513
1514#############################################################################
1515# DEPENDENCIES
1516#############################################################################
1517
1518D_FILES=$(shell find . -name '*.d')
1519
1520$(B)/base/vm/vm.d: $(GOBJ) $(CGOBJ) $(UIOBJ)
1521	cat $(^:%.o=%.d) | sed -e 's/\.o/\.asm/g' > $@
1522
1523qvmdeps: $(B)/base/vm/vm.d
1524
1525ifneq ($(strip $(D_FILES)),)
1526  include $(D_FILES)
1527endif
1528
1529.PHONY: release debug clean distclean copyfiles installer dist
1530