1#
2# ioq3 Makefile
3#
4# GNU Make required
5#
6
7COMPILE_PLATFORM=$(shell uname|sed -e s/_.*//|tr '[:upper:]' '[:lower:]')
8
9COMPILE_ARCH=$(shell uname -m | sed -e s/i.86/i386/)
10
11ifeq ($(COMPILE_PLATFORM),sunos)
12  # Solaris uname and GNU uname differ
13  COMPILE_ARCH=$(shell uname -p | sed -e s/i.86/i386/)
14endif
15ifeq ($(COMPILE_PLATFORM),darwin)
16  # Apple does some things a little differently...
17  COMPILE_ARCH=$(shell uname -p | sed -e s/i.86/i386/)
18endif
19ifeq ($(COMPILE_PLATFORM),freebsd)
20  # FreeBSD does some things a little differently...
21  COMPILE_ARCH=$(shell uname -p)
22endif
23
24ifeq ($(COMPILE_PLATFORM),mingw32)
25  ifeq ($(COMPILE_ARCH),i386)
26    COMPILE_ARCH=x86
27  endif
28endif
29
30ifndef BUILD_STANDALONE
31  BUILD_STANDALONE =
32endif
33ifndef BUILD_CLIENT
34  BUILD_CLIENT     =
35endif
36ifndef BUILD_CLIENT_SMP
37  BUILD_CLIENT_SMP =
38endif
39ifndef BUILD_SERVER
40  BUILD_SERVER     =
41endif
42ifndef BUILD_GAME_SO
43  BUILD_GAME_SO    =
44endif
45ifndef BUILD_GAME_QVM
46  BUILD_GAME_QVM   =
47endif
48ifndef BUILD_MISSIONPACK
49  BUILD_MISSIONPACK=
50endif
51
52ifneq ($(PLATFORM),darwin)
53  BUILD_CLIENT_SMP = 0
54endif
55
56#############################################################################
57#
58# If you require a different configuration from the defaults below, create a
59# new file named "Makefile.local" in the same directory as this file and define
60# your parameters there. This allows you to change configuration without
61# causing problems with keeping up to date with the repository.
62#
63#############################################################################
64-include Makefile.local
65
66ifndef PLATFORM
67PLATFORM=$(COMPILE_PLATFORM)
68endif
69export PLATFORM
70
71ifeq ($(COMPILE_ARCH),powerpc)
72  COMPILE_ARCH=ppc
73endif
74ifeq ($(COMPILE_ARCH),powerpc64)
75  COMPILE_ARCH=ppc64
76endif
77ifeq ($(COMPILE_ARCH),powerpc64le)
78  COMPILE_ARCH=ppc64le
79endif
80
81ifndef ARCH
82ARCH=$(COMPILE_ARCH)
83endif
84export ARCH
85
86ifneq ($(PLATFORM),$(COMPILE_PLATFORM))
87  CROSS_COMPILING=1
88else
89  CROSS_COMPILING=0
90
91  ifneq ($(ARCH),$(COMPILE_ARCH))
92    CROSS_COMPILING=1
93  endif
94endif
95export CROSS_COMPILING
96
97ifndef COPYDIR
98COPYDIR="/usr/local/games/quake3"
99endif
100
101ifndef MOUNT_DIR
102MOUNT_DIR=code
103endif
104
105ifndef BUILD_DIR
106BUILD_DIR=build
107endif
108
109ifndef GENERATE_DEPENDENCIES
110GENERATE_DEPENDENCIES=1
111endif
112
113ifndef USE_OPENAL
114USE_OPENAL=1
115endif
116
117ifndef USE_OPENAL_DLOPEN
118  ifeq ($(PLATFORM),mingw32)
119    USE_OPENAL_DLOPEN=1
120  else
121    USE_OPENAL_DLOPEN=0
122  endif
123endif
124
125ifndef USE_CURL
126USE_CURL=1
127endif
128
129ifndef USE_CURL_DLOPEN
130  ifeq ($(PLATFORM),mingw32)
131    USE_CURL_DLOPEN=0
132  else
133    USE_CURL_DLOPEN=1
134  endif
135endif
136
137ifndef USE_CODEC_VORBIS
138USE_CODEC_VORBIS=0
139endif
140
141ifndef USE_MUMBLE
142USE_MUMBLE=1
143endif
144
145ifndef USE_VOIP
146USE_VOIP=1
147endif
148
149ifndef USE_INTERNAL_SPEEX
150USE_INTERNAL_SPEEX=1
151endif
152
153ifndef USE_LOCAL_HEADERS
154USE_LOCAL_HEADERS=1
155endif
156
157#############################################################################
158
159BD=$(BUILD_DIR)/debug-$(PLATFORM)-$(ARCH)
160BR=$(BUILD_DIR)/release-$(PLATFORM)-$(ARCH)
161CDIR=$(MOUNT_DIR)/client
162SDIR=$(MOUNT_DIR)/server
163RDIR=$(MOUNT_DIR)/renderer
164CMDIR=$(MOUNT_DIR)/qcommon
165SDLDIR=$(MOUNT_DIR)/sdl
166ASMDIR=$(MOUNT_DIR)/asm
167SYSDIR=$(MOUNT_DIR)/sys
168GDIR=$(MOUNT_DIR)/game
169CGDIR=$(MOUNT_DIR)/cgame
170BLIBDIR=$(MOUNT_DIR)/botlib
171NDIR=$(MOUNT_DIR)/null
172UIDIR=$(MOUNT_DIR)/ui
173Q3UIDIR=$(MOUNT_DIR)/q3_ui
174JPDIR=$(MOUNT_DIR)/jpeg-6b
175SPEEXDIR=$(MOUNT_DIR)/libspeex
176Q3ASMDIR=$(MOUNT_DIR)/tools/asm
177LBURGDIR=$(MOUNT_DIR)/tools/lcc/lburg
178Q3CPPDIR=$(MOUNT_DIR)/tools/lcc/cpp
179Q3LCCETCDIR=$(MOUNT_DIR)/tools/lcc/etc
180Q3LCCSRCDIR=$(MOUNT_DIR)/tools/lcc/src
181LOKISETUPDIR=misc/setup
182NSISDIR=misc/nsis
183SDLHDIR=$(MOUNT_DIR)/SDL12
184LIBSDIR=$(MOUNT_DIR)/libs
185TEMPDIR=/tmp
186
187# set PKG_CONFIG_PATH to influence this, e.g.
188# PKG_CONFIG_PATH=/opt/cross/i386-mingw32msvc/lib/pkgconfig
189ifeq ($(shell which pkg-config > /dev/null; echo $$?),0)
190  CURL_CFLAGS=$(shell pkg-config --cflags libcurl)
191  CURL_LIBS=$(shell pkg-config --libs libcurl)
192  OPENAL_CFLAGS=$(shell pkg-config --cflags openal)
193  OPENAL_LIBS=$(shell pkg-config --libs openal)
194  # FIXME: introduce CLIENT_CFLAGS
195  SDL_CFLAGS=$(shell pkg-config --cflags sdl|sed 's/-Dmain=SDL_main//')
196  SDL_LIBS=$(shell pkg-config --libs sdl)
197  VORBIS_CFLAGS=$(shell pkg-config --silence-errors --cflags vorbis vorbisfile)
198  VORBIS_LIBS=$(shell pkg-config --silence-errors --libs vorbis vorbisfile)
199endif
200
201# version info
202VERSION=1.36
203
204USE_SVN=
205ifeq ($(wildcard .svn),.svn)
206  SVN_REV=$(shell LANG=C svnversion .)
207  ifneq ($(SVN_REV),)
208    VERSION:=$(VERSION)_SVN$(SVN_REV)
209    USE_SVN=1
210  endif
211else
212ifeq ($(wildcard .git/svn/.metadata),.git/svn/.metadata)
213  SVN_REV=$(shell LANG=C git svn info | awk '$$1 == "Revision:" {print $$2; exit 0}')
214  ifneq ($(SVN_REV),)
215    VERSION:=$(VERSION)_SVN$(SVN_REV)
216  endif
217endif
218endif
219
220
221#############################################################################
222# SETUP AND BUILD -- LINUX
223#############################################################################
224
225## Defaults
226LIB=lib
227
228INSTALL=install
229MKDIR=mkdir
230
231ifeq ($(PLATFORM),linux)
232
233  ifeq ($(ARCH),alpha)
234    ARCH=axp
235  else
236  ifeq ($(ARCH),x86_64)
237    LIB=lib64
238  else
239  ifeq ($(ARCH),ppc64)
240    LIB=lib64
241  else
242  ifeq ($(ARCH),s390x)
243    LIB=lib64
244  endif
245  endif
246  endif
247  endif
248
249  BASE_CFLAGS = -Wall -fno-strict-aliasing -Wimplicit -Wstrict-prototypes \
250    -pipe -DUSE_ICON $(shell sdl-config --cflags)
251
252  ifeq ($(USE_OPENAL),1)
253    BASE_CFLAGS += -DUSE_OPENAL
254    ifeq ($(USE_OPENAL_DLOPEN),1)
255      BASE_CFLAGS += -DUSE_OPENAL_DLOPEN
256    endif
257  endif
258
259  ifeq ($(USE_CURL),1)
260    BASE_CFLAGS += -DUSE_CURL
261    ifeq ($(USE_CURL_DLOPEN),1)
262      BASE_CFLAGS += -DUSE_CURL_DLOPEN
263    endif
264  endif
265
266  ifeq ($(USE_CODEC_VORBIS),1)
267    BASE_CFLAGS += -DUSE_CODEC_VORBIS
268  endif
269
270  OPTIMIZE = -O3 -ffast-math -funroll-loops -fomit-frame-pointer
271
272  ifeq ($(ARCH),x86_64)
273    OPTIMIZE = -O3 -fomit-frame-pointer -ffast-math -funroll-loops \
274      -falign-loops=2 -falign-jumps=2 -falign-functions=2 \
275      -fstrength-reduce
276    # experimental x86_64 jit compiler! you need GNU as
277    HAVE_VM_COMPILED = true
278  else
279  ifeq ($(ARCH),i386)
280    OPTIMIZE = -O3 -march=i586 -fomit-frame-pointer -ffast-math \
281      -funroll-loops -falign-loops=2 -falign-jumps=2 \
282      -falign-functions=2 -fstrength-reduce
283    HAVE_VM_COMPILED=true
284  else
285  ifeq ($(ARCH),ppc)
286    BASE_CFLAGS += -maltivec
287    HAVE_VM_COMPILED=true
288  endif
289  ifeq ($(ARCH),ppc64)
290    BASE_CFLAGS += -maltivec
291    HAVE_VM_COMPILED=true
292  endif
293  ifeq ($(ARCH),sparc)
294    OPTIMIZE += -mtune=ultrasparc3 -mv8plus
295    HAVE_VM_COMPILED=true
296  endif
297  endif
298  endif
299
300  ifneq ($(HAVE_VM_COMPILED),true)
301    BASE_CFLAGS += -DNO_VM_COMPILED
302  endif
303
304  SHLIBEXT=so
305  SHLIBCFLAGS=-fPIC
306  SHLIBLDFLAGS=-shared $(LDFLAGS)
307
308  THREAD_LIBS=-lpthread
309  LIBS=-ldl -lm
310
311  CLIENT_LIBS=$(shell sdl-config --libs) -lGL
312
313  ifeq ($(USE_OPENAL),1)
314    ifneq ($(USE_OPENAL_DLOPEN),1)
315      CLIENT_LIBS += -lopenal
316    endif
317  endif
318
319  ifeq ($(USE_CURL),1)
320    ifneq ($(USE_CURL_DLOPEN),1)
321      CLIENT_LIBS += -lcurl
322    endif
323  endif
324
325  ifeq ($(USE_CODEC_VORBIS),1)
326    CLIENT_LIBS += -lvorbisfile -lvorbis -logg
327  endif
328
329  ifeq ($(USE_MUMBLE),1)
330    CLIENT_LIBS += -lrt
331  endif
332
333ifeq ($(USE_LOCAL_HEADERS),1)
334    BASE_CFLAGS += -I$(SDLHDIR)/include
335  endif
336
337  ifeq ($(ARCH),i386)
338    # linux32 make ...
339    BASE_CFLAGS += -m32
340  else
341  ifeq ($(ARCH),ppc64)
342    BASE_CFLAGS += -m64
343  endif
344  endif
345
346  DEBUG_CFLAGS = $(BASE_CFLAGS) -g -O0
347  RELEASE_CFLAGS=$(BASE_CFLAGS) -DNDEBUG $(OPTIMIZE)
348
349else # ifeq Linux
350
351#############################################################################
352# SETUP AND BUILD -- MAC OS X
353#############################################################################
354
355ifeq ($(PLATFORM),darwin)
356  HAVE_VM_COMPILED=true
357  CLIENT_LIBS=
358  OPTIMIZE=
359
360  BASE_CFLAGS = -Wall -Wimplicit -Wstrict-prototypes
361
362  ifeq ($(ARCH),ppc)
363    BASE_CFLAGS += -faltivec
364    OPTIMIZE += -O3
365  endif
366  ifeq ($(ARCH),ppc64)
367    BASE_CFLAGS += -faltivec
368  endif
369  ifeq ($(ARCH),i386)
370    OPTIMIZE += -march=prescott -mfpmath=sse
371    # x86 vm will crash without -mstackrealign since MMX instructions will be
372    # used no matter what and they corrupt the frame pointer in VM calls
373    BASE_CFLAGS += -mstackrealign
374  endif
375
376  BASE_CFLAGS += -fno-strict-aliasing -DMACOS_X -fno-common -pipe
377
378  ifeq ($(USE_OPENAL),1)
379    BASE_CFLAGS += -DUSE_OPENAL
380    ifneq ($(USE_OPENAL_DLOPEN),1)
381      CLIENT_LIBS += -framework OpenAL
382    else
383      BASE_CFLAGS += -DUSE_OPENAL_DLOPEN
384    endif
385  endif
386
387  ifeq ($(USE_CURL),1)
388    BASE_CFLAGS += -DUSE_CURL
389    ifneq ($(USE_CURL_DLOPEN),1)
390      CLIENT_LIBS += -lcurl
391    else
392      BASE_CFLAGS += -DUSE_CURL_DLOPEN
393    endif
394  endif
395
396  ifeq ($(USE_CODEC_VORBIS),1)
397    BASE_CFLAGS += -DUSE_CODEC_VORBIS
398    CLIENT_LIBS += -lvorbisfile -lvorbis -logg
399  endif
400
401  BASE_CFLAGS += -D_THREAD_SAFE=1
402
403  ifeq ($(USE_LOCAL_HEADERS),1)
404    BASE_CFLAGS += -I$(SDLHDIR)/include
405  endif
406
407  # We copy sdlmain before ranlib'ing it so that subversion doesn't think
408  #  the file has been modified by each build.
409  LIBSDLMAIN=$(B)/libSDLmain.a
410  LIBSDLMAINSRC=$(LIBSDIR)/macosx/libSDLmain.a
411  CLIENT_LIBS += -framework Cocoa -framework IOKit -framework OpenGL \
412    $(LIBSDIR)/macosx/libSDL-1.2.0.dylib
413
414  OPTIMIZE += -ffast-math -falign-loops=16
415
416  ifneq ($(HAVE_VM_COMPILED),true)
417    BASE_CFLAGS += -DNO_VM_COMPILED
418  endif
419
420  DEBUG_CFLAGS = $(BASE_CFLAGS) -g -O0
421
422  RELEASE_CFLAGS=$(BASE_CFLAGS) -DNDEBUG $(OPTIMIZE)
423
424  SHLIBEXT=dylib
425  SHLIBCFLAGS=-fPIC -fno-common
426  SHLIBLDFLAGS=-dynamiclib $(LDFLAGS)
427
428  NOTSHLIBCFLAGS=-mdynamic-no-pic
429
430  TOOLS_CFLAGS += -DMACOS_X
431
432else # ifeq darwin
433
434
435#############################################################################
436# SETUP AND BUILD -- MINGW32
437#############################################################################
438
439ifeq ($(PLATFORM),mingw32)
440
441  ifndef WINDRES
442    WINDRES=windres
443  endif
444
445  ARCH=x86
446
447  BASE_CFLAGS = -Wall -fno-strict-aliasing -Wimplicit -Wstrict-prototypes \
448    -DUSE_ICON
449
450  # In the absence of wspiapi.h, require Windows XP or later
451  ifeq ($(shell test -e $(CMDIR)/wspiapi.h; echo $$?),1)
452    BASE_CFLAGS += -DWINVER=0x501
453  endif
454
455  ifeq ($(USE_OPENAL),1)
456    BASE_CFLAGS += -DUSE_OPENAL
457    BASE_CFLAGS += $(OPENAL_CFLAGS)
458    ifeq ($(USE_OPENAL_DLOPEN),1)
459      BASE_CFLAGS += -DUSE_OPENAL_DLOPEN
460    else
461      CLIENT_LDFLAGS += $(OPENAL_LDFLAGS)
462    endif
463  endif
464
465  ifeq ($(USE_CODEC_VORBIS),1)
466    BASE_CFLAGS += -DUSE_CODEC_VORBIS
467  endif
468
469  OPTIMIZE = -O3 -march=i586 -fno-omit-frame-pointer -ffast-math \
470    -falign-loops=2 -funroll-loops -falign-jumps=2 -falign-functions=2 \
471    -fstrength-reduce
472
473  HAVE_VM_COMPILED = true
474
475  SHLIBEXT=dll
476  SHLIBCFLAGS=
477  SHLIBLDFLAGS=-shared $(LDFLAGS)
478
479  BINEXT=.exe
480
481  LIBS= -lws2_32 -lwinmm
482  CLIENT_LDFLAGS = -mwindows
483  CLIENT_LIBS = -lgdi32 -lole32 -lopengl32
484
485  ifeq ($(USE_CURL),1)
486    BASE_CFLAGS += -DUSE_CURL
487    BASE_CFLAGS += $(CURL_CFLAGS)
488    ifneq ($(USE_CURL_DLOPEN),1)
489      ifeq ($(USE_LOCAL_HEADERS),1)
490        BASE_CFLAGS += -DCURL_STATICLIB
491        CLIENT_LIBS += $(LIBSDIR)/win32/libcurl.a
492      else
493        CLIENT_LIBS += $(CURL_LIBS)
494      endif
495    endif
496  endif
497
498  ifeq ($(USE_CODEC_VORBIS),1)
499    CLIENT_LIBS += -lvorbisfile -lvorbis -logg
500  endif
501
502  ifeq ($(ARCH),x86)
503    # build 32bit
504    BASE_CFLAGS += -m32
505  endif
506
507  DEBUG_CFLAGS=$(BASE_CFLAGS) -g -O0
508  RELEASE_CFLAGS=$(BASE_CFLAGS) -DNDEBUG $(OPTIMIZE)
509
510  # libmingw32 must be linked before libSDLmain
511  CLIENT_LIBS += -lmingw32
512  ifeq ($(USE_LOCAL_HEADERS),1)
513    BASE_CFLAGS += -I$(SDLHDIR)/include
514    CLIENT_LIBS += $(LIBSDIR)/win32/libSDLmain.a \
515                      $(LIBSDIR)/win32/libSDL.dll.a
516  else
517    BASE_CFLAGS += $(SDL_CFLAGS)
518    CLIENT_LIBS += $(SDL_LIBS)
519  endif
520
521
522
523  BUILD_CLIENT_SMP = 0
524
525else # ifeq mingw32
526
527#############################################################################
528# SETUP AND BUILD -- FREEBSD
529#############################################################################
530
531ifeq ($(PLATFORM),freebsd)
532
533   ifndef HOMEPATH
534     HOMEPATH = /.ioquake3
535   endif
536
537   ifndef DEFAULT_LIBDIR
538     DEFAULT_LIBDIR = /usr/local/lib/ioquake3
539   endif
540
541  # flags
542  BASE_CFLAGS = $(shell env MACHINE_ARCH=$(ARCH) make -f /dev/null -VCFLAGS) \
543    -Wall -fno-strict-aliasing -Wimplicit -Wstrict-prototypes \
544    -DHOMEPATH=\\\"$(HOMEPATH)\\\" \
545    -DDEFAULT_LIBDIR=\\\"$(DEFAULT_LIBDIR)\\\" \
546    -DUSE_ICON
547  CLIENT_CFLAGS += $(SDL_CFLAGS)
548  HAVE_VM_COMPILED = true
549
550  OPTIMIZEVM = -O3 -funroll-loops -fomit-frame-pointer
551  OPTIMIZE = $(OPTIMIZEVM) -ffast-math
552
553  SHLIBEXT=so
554  SHLIBCFLAGS=-fPIC
555  SHLIBLDFLAGS=-shared $(LDFLAGS)
556
557  THREAD_LIBS=-lpthread
558  # don't need -ldl (FreeBSD)
559  LIBS=-lm
560
561  CLIENT_LIBS = $(SDL_LIBS) -lGL
562
563  # optional features/libraries
564  ifeq ($(USE_OPENAL),1)
565    CLIENT_LIBS += $(THREAD_LIBS) $(OPENAL_LIBS)
566    CLIENT_CFLAGS += -DUSE_OPENAL
567    ifneq ($(USE_LOCAL_HEADERS),1)
568      CLIENT_CFLAGS += $(OPENAL_CFLAGS)
569    endif
570  endif
571
572  ifeq ($(USE_CURL),1)
573    CLIENT_LIBS += $(CURL_LIBS)
574    CLIENT_CFLAGS += -DUSE_CURL
575    ifneq ($(USE_LOCAL_HEADERS),1)
576      CLIENT_CFLAGS += $(CURL_CFLAGS)
577    endif
578  endif
579
580  ifeq ($(USE_CODEC_VORBIS),1)
581    CLIENT_LIBS += $(VORBIS_LIBS)
582    CLIENT_CFLAGS += -DUSE_CODEC_VORBIS
583    ifneq ($(USE_LOCAL_HEADERS),1)
584      CLIENT_CFLAGS += $(VORBIS_CFLAGS)
585    endif
586  endif
587
588  ifeq ($(BUILD_CLIENT),1)
589    BASE_CFLAGS += $(CLIENT_CFLAGS)
590  endif
591
592  # cross-compiling tweaks
593  ifeq ($(ARCH),i386)
594    ifeq ($(CROSS_COMPILING),1)
595      BASE_CFLAGS += -m32
596    endif
597  endif
598  ifeq ($(ARCH),amd64)
599    ifeq ($(CROSS_COMPILING),1)
600      BASE_CFLAGS += -m64
601    endif
602  endif
603
604  RELEASE_CFLAGS = $(BASE_CFLAGS)
605  DEBUG_CFLAGS = $(BASE_CFLAGS) -g
606
607else # ifeq freebsd
608
609#############################################################################
610# SETUP AND BUILD -- OPENBSD
611#############################################################################
612
613ifeq ($(PLATFORM),openbsd)
614
615  #default to i386, no tests done on anything else
616  ARCH=i386
617
618
619  BASE_CFLAGS = -Wall -fno-strict-aliasing -Wimplicit -Wstrict-prototypes \
620    -DUSE_ICON $(shell sdl-config --cflags)
621
622  ifeq ($(USE_OPENAL),1)
623    BASE_CFLAGS += -DUSE_OPENAL
624    ifeq ($(USE_OPENAL_DLOPEN),1)
625      BASE_CFLAGS += -DUSE_OPENAL_DLOPEN
626    endif
627  endif
628
629  ifeq ($(USE_CODEC_VORBIS),1)
630    BASE_CFLAGS += -DUSE_CODEC_VORBIS
631  endif
632
633  BASE_CFLAGS += -DNO_VM_COMPILED -I/usr/X11R6/include -I/usr/local/include
634  RELEASE_CFLAGS=$(BASE_CFLAGS) -DNDEBUG -O3 \
635    -march=pentium -fomit-frame-pointer -pipe -ffast-math \
636    -falign-loops=2 -falign-jumps=2 -falign-functions=2 \
637    -funroll-loops -fstrength-reduce
638  HAVE_VM_COMPILED=false
639
640  DEBUG_CFLAGS=$(BASE_CFLAGS) -g
641
642  SHLIBEXT=so
643  SHLIBCFLAGS=-fPIC
644  SHLIBLDFLAGS=-shared $(LDFLAGS)
645
646  THREAD_LIBS=-lpthread
647  LIBS=-lm
648
649  CLIENT_LIBS =
650
651  CLIENT_LIBS += $(shell sdl-config --libs) -lGL
652
653  ifeq ($(USE_OPENAL),1)
654    ifneq ($(USE_OPENAL_DLOPEN),1)
655      CLIENT_LIBS += $(THREAD_LIBS) -lossaudio -lopenal
656    endif
657  endif
658
659  ifeq ($(USE_CODEC_VORBIS),1)
660    CLIENT_LIBS += -lvorbisfile -lvorbis -logg
661  endif
662
663else # ifeq openbsd
664
665#############################################################################
666# SETUP AND BUILD -- NETBSD
667#############################################################################
668
669ifeq ($(PLATFORM),netbsd)
670
671  ifeq ($(shell uname -m),i386)
672    ARCH=i386
673  endif
674
675  LIBS=-lm
676  SHLIBEXT=so
677  SHLIBCFLAGS=-fPIC
678  SHLIBLDFLAGS=-shared $(LDFLAGS)
679  THREAD_LIBS=-lpthread
680
681  BASE_CFLAGS = -Wall -fno-strict-aliasing -Wimplicit -Wstrict-prototypes
682
683  ifneq ($(ARCH),i386)
684    BASE_CFLAGS += -DNO_VM_COMPILED
685  endif
686
687  DEBUG_CFLAGS=$(BASE_CFLAGS) -g
688
689  BUILD_CLIENT = 0
690  BUILD_GAME_QVM = 0
691
692else # ifeq netbsd
693
694#############################################################################
695# SETUP AND BUILD -- IRIX
696#############################################################################
697
698ifeq ($(PLATFORM),irix64)
699
700  ARCH=mips  #default to MIPS
701
702  CC = c99
703  MKDIR = mkdir -p
704
705  BASE_CFLAGS=-Dstricmp=strcasecmp -Xcpluscomm -woff 1185 \
706    -I. $(shell sdl-config --cflags) -I$(ROOT)/usr/include -DNO_VM_COMPILED
707  RELEASE_CFLAGS=$(BASE_CFLAGS) -O3
708  DEBUG_CFLAGS=$(BASE_CFLAGS) -g
709
710  SHLIBEXT=so
711  SHLIBCFLAGS=
712  SHLIBLDFLAGS=-shared
713
714  LIBS=-ldl -lm -lgen
715  # FIXME: The X libraries probably aren't necessary?
716  CLIENT_LIBS=-L/usr/X11/$(LIB) $(shell sdl-config --libs) -lGL \
717    -lX11 -lXext -lm
718
719else # ifeq IRIX
720
721#############################################################################
722# SETUP AND BUILD -- SunOS
723#############################################################################
724
725ifeq ($(PLATFORM),sunos)
726
727  CC=gcc
728  INSTALL=ginstall
729  MKDIR=gmkdir
730  COPYDIR="/usr/local/share/games/quake3"
731
732  ifneq (,$(findstring i86pc,$(shell uname -m)))
733    ARCH=i386
734  else #default to sparc
735    ARCH=sparc
736  endif
737
738  ifneq ($(ARCH),i386)
739    ifneq ($(ARCH),sparc)
740      $(error arch $(ARCH) is currently not supported)
741    endif
742  endif
743
744
745  BASE_CFLAGS = -Wall -fno-strict-aliasing -Wimplicit -Wstrict-prototypes \
746    -pipe -DUSE_ICON $(shell sdl-config --cflags)
747
748  OPTIMIZE = -O3 -ffast-math -funroll-loops
749
750  ifeq ($(ARCH),sparc)
751    OPTIMIZE = -O3 -ffast-math \
752      -fstrength-reduce -falign-functions=2 \
753      -mtune=ultrasparc3 -mv8plus -mno-faster-structs \
754      -funroll-loops #-mv8plus
755  else
756  ifeq ($(ARCH),i386)
757    OPTIMIZE = -O3 -march=i586 -fomit-frame-pointer -ffast-math \
758      -funroll-loops -falign-loops=2 -falign-jumps=2 \
759      -falign-functions=2 -fstrength-reduce
760    HAVE_VM_COMPILED=true
761    BASE_CFLAGS += -m32
762    BASE_CFLAGS += -I/usr/X11/include/NVIDIA
763    CLIENT_LDFLAGS += -L/usr/X11/lib/NVIDIA -R/usr/X11/lib/NVIDIA
764  endif
765  endif
766
767  ifneq ($(HAVE_VM_COMPILED),true)
768    BASE_CFLAGS += -DNO_VM_COMPILED
769  endif
770
771  DEBUG_CFLAGS = $(BASE_CFLAGS) -ggdb -O0
772
773  RELEASE_CFLAGS=$(BASE_CFLAGS) -DNDEBUG $(OPTIMIZE)
774
775  SHLIBEXT=so
776  SHLIBCFLAGS=-fPIC
777  SHLIBLDFLAGS=-shared $(LDFLAGS)
778
779  THREAD_LIBS=-lpthread
780  LIBS=-lsocket -lnsl -ldl -lm
781
782  BOTCFLAGS=-O0
783
784  CLIENT_LIBS +=$(shell sdl-config --libs) -lGL
785
786else # ifeq sunos
787
788#############################################################################
789# SETUP AND BUILD -- GENERIC
790#############################################################################
791  BASE_CFLAGS=-DNO_VM_COMPILED
792  DEBUG_CFLAGS=$(BASE_CFLAGS) -g
793  RELEASE_CFLAGS=$(BASE_CFLAGS) -DNDEBUG -O3
794
795  SHLIBEXT=so
796  SHLIBCFLAGS=-fPIC
797  SHLIBLDFLAGS=-shared
798
799endif #Linux
800endif #darwin
801endif #mingw32
802endif #FreeBSD
803endif #OpenBSD
804endif #NetBSD
805endif #IRIX
806endif #SunOS
807
808TARGETS =
809
810ifneq ($(BUILD_SERVER),0)
811  TARGETS += $(B)/ioq3ded.$(ARCH)$(BINEXT)
812endif
813
814ifneq ($(BUILD_CLIENT),0)
815  TARGETS += $(B)/ioquake3.$(ARCH)$(BINEXT)
816  ifneq ($(BUILD_CLIENT_SMP),0)
817    TARGETS += $(B)/ioquake3-smp.$(ARCH)$(BINEXT)
818  endif
819endif
820
821ifneq ($(BUILD_GAME_SO),0)
822  TARGETS += \
823    $(B)/baseq3/cgame$(ARCH).$(SHLIBEXT) \
824    $(B)/baseq3/qagame$(ARCH).$(SHLIBEXT) \
825    $(B)/baseq3/ui$(ARCH).$(SHLIBEXT)
826  ifneq ($(BUILD_MISSIONPACK),0)
827    TARGETS += \
828    $(B)/missionpack/cgame$(ARCH).$(SHLIBEXT) \
829    $(B)/missionpack/qagame$(ARCH).$(SHLIBEXT) \
830    $(B)/missionpack/ui$(ARCH).$(SHLIBEXT)
831  endif
832endif
833
834ifneq ($(BUILD_GAME_QVM),0)
835  ifneq ($(CROSS_COMPILING),1)
836    TARGETS += \
837      $(B)/baseq3/vm/cgame.qvm \
838      $(B)/baseq3/vm/qagame.qvm \
839      $(B)/baseq3/vm/ui.qvm
840    ifneq ($(BUILD_MISSIONPACK),0)
841      TARGETS += \
842      $(B)/missionpack/vm/qagame.qvm \
843      $(B)/missionpack/vm/cgame.qvm \
844      $(B)/missionpack/vm/ui.qvm
845    endif
846  endif
847endif
848
849ifeq ($(USE_MUMBLE),1)
850  BASE_CFLAGS += -DUSE_MUMBLE
851endif
852
853ifeq ($(USE_VOIP),1)
854  BASE_CFLAGS += -DUSE_VOIP
855  ifeq ($(USE_INTERNAL_SPEEX),1)
856    BASE_CFLAGS := -I$(SPEEXDIR)/include -DFLOATING_POINT -DUSE_ALLOCA $(BASE_CFLAGS)
857  else
858    CLIENT_LIBS += -lspeex
859  endif
860endif
861
862ifdef DEFAULT_BASEDIR
863  BASE_CFLAGS += -DDEFAULT_BASEDIR=\\\"$(DEFAULT_BASEDIR)\\\"
864endif
865
866ifeq ($(USE_LOCAL_HEADERS),1)
867  BASE_CFLAGS += -DUSE_LOCAL_HEADERS
868endif
869
870ifeq ($(BUILD_STANDALONE),1)
871  BASE_CFLAGS += -DSTANDALONE
872endif
873
874ifeq ($(GENERATE_DEPENDENCIES),1)
875  DEPEND_CFLAGS = -MMD
876else
877  DEPEND_CFLAGS =
878endif
879
880BASE_CFLAGS += -DPRODUCT_VERSION=\\\"$(VERSION)\\\"
881
882ifeq ($(V),1)
883echo_cmd=@:
884Q=
885else
886echo_cmd=@echo
887Q=@
888endif
889
890define DO_CC
891$(echo_cmd) "CC $<"
892$(Q)$(CC) $(NOTSHLIBCFLAGS) $(CFLAGS) -o $@ -c $<
893endef
894
895define DO_SMP_CC
896$(echo_cmd) "SMP_CC $<"
897$(Q)$(CC) $(NOTSHLIBCFLAGS) $(CFLAGS) -DSMP -o $@ -c $<
898endef
899
900define DO_BOT_CC
901$(echo_cmd) "BOT_CC $<"
902$(Q)$(CC) $(NOTSHLIBCFLAGS) $(CFLAGS) $(BOTCFLAGS) -DBOTLIB -o $@ -c $<
903endef
904
905ifeq ($(GENERATE_DEPENDENCIES),1)
906  DO_QVM_DEP=cat $(@:%.o=%.d) | sed -e 's/\.o/\.asm/g' >> $(@:%.o=%.d)
907endif
908
909define DO_SHLIB_CC
910$(echo_cmd) "SHLIB_CC $<"
911$(Q)$(CC) $(CFLAGS) $(SHLIBCFLAGS) -o $@ -c $<
912$(Q)$(DO_QVM_DEP)
913endef
914
915define DO_GAME_CC
916$(echo_cmd) "GAME_CC $<"
917$(Q)$(CC) -DQAGAME $(CFLAGS) $(SHLIBCFLAGS) -o $@ -c $<
918$(Q)$(DO_QVM_DEP)
919endef
920
921define DO_CGAME_CC
922$(echo_cmd) "CGAME_CC $<"
923$(Q)$(CC) -DCGAME $(CFLAGS) $(SHLIBCFLAGS) -o $@ -c $<
924$(Q)$(DO_QVM_DEP)
925endef
926
927define DO_UI_CC
928$(echo_cmd) "UI_CC $<"
929$(Q)$(CC) -DUI $(CFLAGS) $(SHLIBCFLAGS) -o $@ -c $<
930$(Q)$(DO_QVM_DEP)
931endef
932
933define DO_SHLIB_CC_MISSIONPACK
934$(echo_cmd) "SHLIB_CC_MISSIONPACK $<"
935$(Q)$(CC) -DMISSIONPACK $(CFLAGS) $(SHLIBCFLAGS) -o $@ -c $<
936$(Q)$(DO_QVM_DEP)
937endef
938
939define DO_GAME_CC_MISSIONPACK
940$(echo_cmd) "GAME_CC_MISSIONPACK $<"
941$(Q)$(CC) -DMISSIONPACK -DQAGAME $(CFLAGS) $(SHLIBCFLAGS) -o $@ -c $<
942$(Q)$(DO_QVM_DEP)
943endef
944
945define DO_CGAME_CC_MISSIONPACK
946$(echo_cmd) "CGAME_CC_MISSIONPACK $<"
947$(Q)$(CC) -DMISSIONPACK -DCGAME $(CFLAGS) $(SHLIBCFLAGS) -o $@ -c $<
948$(Q)$(DO_QVM_DEP)
949endef
950
951define DO_UI_CC_MISSIONPACK
952$(echo_cmd) "UI_CC_MISSIONPACK $<"
953$(Q)$(CC) -DMISSIONPACK -DUI $(CFLAGS) $(SHLIBCFLAGS) -o $@ -c $<
954$(Q)$(DO_QVM_DEP)
955endef
956
957define DO_AS
958$(echo_cmd) "AS $<"
959$(Q)$(CC) $(CFLAGS) -x assembler-with-cpp -o $@ -c $<
960endef
961
962define DO_DED_CC
963$(echo_cmd) "DED_CC $<"
964$(Q)$(CC) $(NOTSHLIBCFLAGS) -DDEDICATED $(CFLAGS) -o $@ -c $<
965endef
966
967define DO_WINDRES
968$(echo_cmd) "WINDRES $<"
969$(Q)$(WINDRES) -i $< -o $@
970endef
971
972
973#############################################################################
974# MAIN TARGETS
975#############################################################################
976
977default: release
978all: debug release
979
980debug:
981	@$(MAKE) targets B=$(BD) CFLAGS="$(CFLAGS) $(DEPEND_CFLAGS) \
982		$(DEBUG_CFLAGS)" V=$(V)
983
984release:
985	@$(MAKE) targets B=$(BR) CFLAGS="$(CFLAGS) $(DEPEND_CFLAGS) \
986		$(RELEASE_CFLAGS)" V=$(V)
987
988# Create the build directories, check libraries and print out
989# an informational message, then start building
990targets: makedirs
991	@echo ""
992	@echo "Building ioquake3 in $(B):"
993	@echo "  PLATFORM: $(PLATFORM)"
994	@echo "  ARCH: $(ARCH)"
995	@echo "  VERSION: $(VERSION)"
996	@echo "  COMPILE_PLATFORM: $(COMPILE_PLATFORM)"
997	@echo "  COMPILE_ARCH: $(COMPILE_ARCH)"
998	@echo "  CC: $(CC)"
999	@echo ""
1000	@echo "  CFLAGS:"
1001	-@for i in $(CFLAGS); \
1002	do \
1003		echo "    $$i"; \
1004	done
1005	@echo ""
1006	@echo "  LDFLAGS:"
1007	-@for i in $(LDFLAGS); \
1008	do \
1009		echo "    $$i"; \
1010	done
1011	@echo ""
1012	@echo "  LIBS:"
1013	-@for i in $(LIBS); \
1014	do \
1015		echo "    $$i"; \
1016	done
1017	@echo ""
1018	@echo "  Output:"
1019	-@for i in $(TARGETS); \
1020	do \
1021		echo "    $$i"; \
1022	done
1023	@echo ""
1024ifneq ($(TARGETS),)
1025	@$(MAKE) $(TARGETS) V=$(V)
1026endif
1027
1028makedirs:
1029	@if [ ! -d $(BUILD_DIR) ];then $(MKDIR) $(BUILD_DIR);fi
1030	@if [ ! -d $(B) ];then $(MKDIR) $(B);fi
1031	@if [ ! -d $(B)/client ];then $(MKDIR) $(B)/client;fi
1032	@if [ ! -d $(B)/clientsmp ];then $(MKDIR) $(B)/clientsmp;fi
1033	@if [ ! -d $(B)/ded ];then $(MKDIR) $(B)/ded;fi
1034	@if [ ! -d $(B)/baseq3 ];then $(MKDIR) $(B)/baseq3;fi
1035	@if [ ! -d $(B)/baseq3/cgame ];then $(MKDIR) $(B)/baseq3/cgame;fi
1036	@if [ ! -d $(B)/baseq3/game ];then $(MKDIR) $(B)/baseq3/game;fi
1037	@if [ ! -d $(B)/baseq3/ui ];then $(MKDIR) $(B)/baseq3/ui;fi
1038	@if [ ! -d $(B)/baseq3/qcommon ];then $(MKDIR) $(B)/baseq3/qcommon;fi
1039	@if [ ! -d $(B)/baseq3/vm ];then $(MKDIR) $(B)/baseq3/vm;fi
1040	@if [ ! -d $(B)/missionpack ];then $(MKDIR) $(B)/missionpack;fi
1041	@if [ ! -d $(B)/missionpack/cgame ];then $(MKDIR) $(B)/missionpack/cgame;fi
1042	@if [ ! -d $(B)/missionpack/game ];then $(MKDIR) $(B)/missionpack/game;fi
1043	@if [ ! -d $(B)/missionpack/ui ];then $(MKDIR) $(B)/missionpack/ui;fi
1044	@if [ ! -d $(B)/missionpack/qcommon ];then $(MKDIR) $(B)/missionpack/qcommon;fi
1045	@if [ ! -d $(B)/missionpack/vm ];then $(MKDIR) $(B)/missionpack/vm;fi
1046	@if [ ! -d $(B)/tools ];then $(MKDIR) $(B)/tools;fi
1047	@if [ ! -d $(B)/tools/asm ];then $(MKDIR) $(B)/tools/asm;fi
1048	@if [ ! -d $(B)/tools/etc ];then $(MKDIR) $(B)/tools/etc;fi
1049	@if [ ! -d $(B)/tools/rcc ];then $(MKDIR) $(B)/tools/rcc;fi
1050	@if [ ! -d $(B)/tools/cpp ];then $(MKDIR) $(B)/tools/cpp;fi
1051	@if [ ! -d $(B)/tools/lburg ];then $(MKDIR) $(B)/tools/lburg;fi
1052
1053#############################################################################
1054# QVM BUILD TOOLS
1055#############################################################################
1056
1057TOOLS_OPTIMIZE = -g -O1 -Wall -fno-strict-aliasing
1058TOOLS_CFLAGS = $(TOOLS_OPTIMIZE) \
1059               -DTEMPDIR=\"$(TEMPDIR)\" -DSYSTEM=\"\" \
1060               -I$(Q3LCCSRCDIR) \
1061               -I$(LBURGDIR)
1062TOOLS_LIBS =
1063TOOLS_LDFLAGS =
1064
1065ifeq ($(GENERATE_DEPENDENCIES),1)
1066	TOOLS_CFLAGS += -MMD
1067endif
1068
1069define DO_TOOLS_CC
1070$(echo_cmd) "TOOLS_CC $<"
1071$(Q)$(CC) $(TOOLS_CFLAGS) -o $@ -c $<
1072endef
1073
1074define DO_TOOLS_CC_DAGCHECK
1075$(echo_cmd) "TOOLS_CC_DAGCHECK $<"
1076$(Q)$(CC) $(TOOLS_CFLAGS) -Wno-unused -o $@ -c $<
1077endef
1078
1079LBURG       = $(B)/tools/lburg/lburg$(BINEXT)
1080DAGCHECK_C  = $(B)/tools/rcc/dagcheck.c
1081Q3RCC       = $(B)/tools/q3rcc$(BINEXT)
1082Q3CPP       = $(B)/tools/q3cpp$(BINEXT)
1083Q3LCC       = $(B)/tools/q3lcc$(BINEXT)
1084Q3ASM       = $(B)/tools/q3asm$(BINEXT)
1085
1086LBURGOBJ= \
1087	$(B)/tools/lburg/lburg.o \
1088	$(B)/tools/lburg/gram.o
1089
1090$(B)/tools/lburg/%.o: $(LBURGDIR)/%.c
1091	$(DO_TOOLS_CC)
1092
1093$(LBURG): $(LBURGOBJ)
1094	$(echo_cmd) "LD $@"
1095	$(Q)$(CC) $(TOOLS_CFLAGS) $(TOOLS_LDFLAGS) -o $@ $^ $(TOOLS_LIBS)
1096
1097Q3RCCOBJ = \
1098  $(B)/tools/rcc/alloc.o \
1099  $(B)/tools/rcc/bind.o \
1100  $(B)/tools/rcc/bytecode.o \
1101  $(B)/tools/rcc/dag.o \
1102  $(B)/tools/rcc/dagcheck.o \
1103  $(B)/tools/rcc/decl.o \
1104  $(B)/tools/rcc/enode.o \
1105  $(B)/tools/rcc/error.o \
1106  $(B)/tools/rcc/event.o \
1107  $(B)/tools/rcc/expr.o \
1108  $(B)/tools/rcc/gen.o \
1109  $(B)/tools/rcc/init.o \
1110  $(B)/tools/rcc/inits.o \
1111  $(B)/tools/rcc/input.o \
1112  $(B)/tools/rcc/lex.o \
1113  $(B)/tools/rcc/list.o \
1114  $(B)/tools/rcc/main.o \
1115  $(B)/tools/rcc/null.o \
1116  $(B)/tools/rcc/output.o \
1117  $(B)/tools/rcc/prof.o \
1118  $(B)/tools/rcc/profio.o \
1119  $(B)/tools/rcc/simp.o \
1120  $(B)/tools/rcc/stmt.o \
1121  $(B)/tools/rcc/string.o \
1122  $(B)/tools/rcc/sym.o \
1123  $(B)/tools/rcc/symbolic.o \
1124  $(B)/tools/rcc/trace.o \
1125  $(B)/tools/rcc/tree.o \
1126  $(B)/tools/rcc/types.o
1127
1128$(DAGCHECK_C): $(LBURG) $(Q3LCCSRCDIR)/dagcheck.md
1129	$(echo_cmd) "LBURG $(Q3LCCSRCDIR)/dagcheck.md"
1130	$(Q)$(LBURG) $(Q3LCCSRCDIR)/dagcheck.md $@
1131
1132$(B)/tools/rcc/dagcheck.o: $(DAGCHECK_C)
1133	$(DO_TOOLS_CC_DAGCHECK)
1134
1135$(B)/tools/rcc/%.o: $(Q3LCCSRCDIR)/%.c
1136	$(DO_TOOLS_CC)
1137
1138$(Q3RCC): $(Q3RCCOBJ)
1139	$(echo_cmd) "LD $@"
1140	$(Q)$(CC) $(TOOLS_CFLAGS) $(TOOLS_LDFLAGS) -o $@ $^ $(TOOLS_LIBS)
1141
1142Q3CPPOBJ = \
1143	$(B)/tools/cpp/cpp.o \
1144	$(B)/tools/cpp/lex.o \
1145	$(B)/tools/cpp/nlist.o \
1146	$(B)/tools/cpp/tokens.o \
1147	$(B)/tools/cpp/macro.o \
1148	$(B)/tools/cpp/eval.o \
1149	$(B)/tools/cpp/include.o \
1150	$(B)/tools/cpp/hideset.o \
1151	$(B)/tools/cpp/getopt.o \
1152	$(B)/tools/cpp/unix.o
1153
1154$(B)/tools/cpp/%.o: $(Q3CPPDIR)/%.c
1155	$(DO_TOOLS_CC)
1156
1157$(Q3CPP): $(Q3CPPOBJ)
1158	$(echo_cmd) "LD $@"
1159	$(Q)$(CC) $(TOOLS_CFLAGS) $(TOOLS_LDFLAGS) -o $@ $^ $(TOOLS_LIBS)
1160
1161Q3LCCOBJ = \
1162	$(B)/tools/etc/lcc.o \
1163	$(B)/tools/etc/bytecode.o
1164
1165$(B)/tools/etc/%.o: $(Q3LCCETCDIR)/%.c
1166	$(DO_TOOLS_CC)
1167
1168$(Q3LCC): $(Q3LCCOBJ) $(Q3RCC) $(Q3CPP)
1169	$(echo_cmd) "LD $@"
1170	$(Q)$(CC) $(TOOLS_CFLAGS) $(TOOLS_LDFLAGS) -o $@ $(Q3LCCOBJ) $(TOOLS_LIBS)
1171
1172define DO_Q3LCC
1173$(echo_cmd) "Q3LCC $<"
1174$(Q)$(Q3LCC) -o $@ $<
1175endef
1176
1177define DO_CGAME_Q3LCC
1178$(echo_cmd) "CGAME_Q3LCC $<"
1179$(Q)$(Q3LCC) -DCGAME -o $@ $<
1180endef
1181
1182define DO_GAME_Q3LCC
1183$(echo_cmd) "GAME_Q3LCC $<"
1184$(Q)$(Q3LCC) -DQAGAME -o $@ $<
1185endef
1186
1187define DO_UI_Q3LCC
1188$(echo_cmd) "UI_Q3LCC $<"
1189$(Q)$(Q3LCC) -DUI -o $@ $<
1190endef
1191
1192define DO_Q3LCC_MISSIONPACK
1193$(echo_cmd) "Q3LCC_MISSIONPACK $<"
1194$(Q)$(Q3LCC) -DMISSIONPACK -o $@ $<
1195endef
1196
1197define DO_CGAME_Q3LCC_MISSIONPACK
1198$(echo_cmd) "CGAME_Q3LCC_MISSIONPACK $<"
1199$(Q)$(Q3LCC) -DMISSIONPACK -DCGAME -o $@ $<
1200endef
1201
1202define DO_GAME_Q3LCC_MISSIONPACK
1203$(echo_cmd) "GAME_Q3LCC_MISSIONPACK $<"
1204$(Q)$(Q3LCC) -DMISSIONPACK -DQAGAME -o $@ $<
1205endef
1206
1207define DO_UI_Q3LCC_MISSIONPACK
1208$(echo_cmd) "UI_Q3LCC_MISSIONPACK $<"
1209$(Q)$(Q3LCC) -DMISSIONPACK -DUI -o $@ $<
1210endef
1211
1212
1213Q3ASMOBJ = \
1214  $(B)/tools/asm/q3asm.o \
1215  $(B)/tools/asm/cmdlib.o
1216
1217$(B)/tools/asm/%.o: $(Q3ASMDIR)/%.c
1218	$(DO_TOOLS_CC)
1219
1220$(Q3ASM): $(Q3ASMOBJ)
1221	$(echo_cmd) "LD $@"
1222	$(Q)$(CC) $(TOOLS_CFLAGS) $(TOOLS_LDFLAGS) -o $@ $^ $(TOOLS_LIBS)
1223
1224
1225#############################################################################
1226# CLIENT/SERVER
1227#############################################################################
1228
1229Q3OBJ = \
1230  $(B)/client/cl_cgame.o \
1231  $(B)/client/cl_cin.o \
1232  $(B)/client/cl_console.o \
1233  $(B)/client/cl_input.o \
1234  $(B)/client/cl_keys.o \
1235  $(B)/client/cl_main.o \
1236  $(B)/client/cl_net_chan.o \
1237  $(B)/client/cl_parse.o \
1238  $(B)/client/cl_scrn.o \
1239  $(B)/client/cl_ui.o \
1240  $(B)/client/cl_avi.o \
1241  \
1242  $(B)/client/cm_load.o \
1243  $(B)/client/cm_patch.o \
1244  $(B)/client/cm_polylib.o \
1245  $(B)/client/cm_test.o \
1246  $(B)/client/cm_trace.o \
1247  \
1248  $(B)/client/cmd.o \
1249  $(B)/client/common.o \
1250  $(B)/client/cvar.o \
1251  $(B)/client/files.o \
1252  $(B)/client/md4.o \
1253  $(B)/client/md5.o \
1254  $(B)/client/msg.o \
1255  $(B)/client/net_chan.o \
1256  $(B)/client/net_ip.o \
1257  $(B)/client/huffman.o \
1258  \
1259  $(B)/client/snd_adpcm.o \
1260  $(B)/client/snd_dma.o \
1261  $(B)/client/snd_mem.o \
1262  $(B)/client/snd_mix.o \
1263  $(B)/client/snd_wavelet.o \
1264  \
1265  $(B)/client/snd_main.o \
1266  $(B)/client/snd_codec.o \
1267  $(B)/client/snd_codec_wav.o \
1268  $(B)/client/snd_codec_ogg.o \
1269  \
1270  $(B)/client/qal.o \
1271  $(B)/client/snd_openal.o \
1272  \
1273  $(B)/client/cl_curl.o \
1274  \
1275  $(B)/client/sv_bot.o \
1276  $(B)/client/sv_ccmds.o \
1277  $(B)/client/sv_client.o \
1278  $(B)/client/sv_game.o \
1279  $(B)/client/sv_init.o \
1280  $(B)/client/sv_main.o \
1281  $(B)/client/sv_net_chan.o \
1282  $(B)/client/sv_snapshot.o \
1283  $(B)/client/sv_world.o \
1284  \
1285  $(B)/client/q_math.o \
1286  $(B)/client/q_shared.o \
1287  \
1288  $(B)/client/unzip.o \
1289  $(B)/client/puff.o \
1290  $(B)/client/vm.o \
1291  $(B)/client/vm_interpreted.o \
1292  \
1293  $(B)/client/be_aas_bspq3.o \
1294  $(B)/client/be_aas_cluster.o \
1295  $(B)/client/be_aas_debug.o \
1296  $(B)/client/be_aas_entity.o \
1297  $(B)/client/be_aas_file.o \
1298  $(B)/client/be_aas_main.o \
1299  $(B)/client/be_aas_move.o \
1300  $(B)/client/be_aas_optimize.o \
1301  $(B)/client/be_aas_reach.o \
1302  $(B)/client/be_aas_route.o \
1303  $(B)/client/be_aas_routealt.o \
1304  $(B)/client/be_aas_sample.o \
1305  $(B)/client/be_ai_char.o \
1306  $(B)/client/be_ai_chat.o \
1307  $(B)/client/be_ai_gen.o \
1308  $(B)/client/be_ai_goal.o \
1309  $(B)/client/be_ai_move.o \
1310  $(B)/client/be_ai_weap.o \
1311  $(B)/client/be_ai_weight.o \
1312  $(B)/client/be_ea.o \
1313  $(B)/client/be_interface.o \
1314  $(B)/client/l_crc.o \
1315  $(B)/client/l_libvar.o \
1316  $(B)/client/l_log.o \
1317  $(B)/client/l_memory.o \
1318  $(B)/client/l_precomp.o \
1319  $(B)/client/l_script.o \
1320  $(B)/client/l_struct.o \
1321  \
1322  $(B)/client/jcapimin.o \
1323  $(B)/client/jcapistd.o \
1324  $(B)/client/jccoefct.o  \
1325  $(B)/client/jccolor.o \
1326  $(B)/client/jcdctmgr.o \
1327  $(B)/client/jchuff.o   \
1328  $(B)/client/jcinit.o \
1329  $(B)/client/jcmainct.o \
1330  $(B)/client/jcmarker.o \
1331  $(B)/client/jcmaster.o \
1332  $(B)/client/jcomapi.o \
1333  $(B)/client/jcparam.o \
1334  $(B)/client/jcphuff.o \
1335  $(B)/client/jcprepct.o \
1336  $(B)/client/jcsample.o \
1337  $(B)/client/jdapimin.o \
1338  $(B)/client/jdapistd.o \
1339  $(B)/client/jdatasrc.o \
1340  $(B)/client/jdcoefct.o \
1341  $(B)/client/jdcolor.o \
1342  $(B)/client/jddctmgr.o \
1343  $(B)/client/jdhuff.o \
1344  $(B)/client/jdinput.o \
1345  $(B)/client/jdmainct.o \
1346  $(B)/client/jdmarker.o \
1347  $(B)/client/jdmaster.o \
1348  $(B)/client/jdpostct.o \
1349  $(B)/client/jdsample.o \
1350  $(B)/client/jdtrans.o \
1351  $(B)/client/jerror.o \
1352  $(B)/client/jfdctflt.o \
1353  $(B)/client/jidctflt.o \
1354  $(B)/client/jmemmgr.o \
1355  $(B)/client/jmemnobs.o \
1356  $(B)/client/jutils.o \
1357  \
1358  $(B)/client/tr_animation.o \
1359  $(B)/client/tr_backend.o \
1360  $(B)/client/tr_bsp.o \
1361  $(B)/client/tr_cmds.o \
1362  $(B)/client/tr_curve.o \
1363  $(B)/client/tr_flares.o \
1364  $(B)/client/tr_font.o \
1365  $(B)/client/tr_image.o \
1366  $(B)/client/tr_image_png.o \
1367  $(B)/client/tr_image_jpg.o \
1368  $(B)/client/tr_image_bmp.o \
1369  $(B)/client/tr_image_tga.o \
1370  $(B)/client/tr_image_pcx.o \
1371  $(B)/client/tr_init.o \
1372  $(B)/client/tr_light.o \
1373  $(B)/client/tr_main.o \
1374  $(B)/client/tr_marks.o \
1375  $(B)/client/tr_mesh.o \
1376  $(B)/client/tr_model.o \
1377  $(B)/client/tr_noise.o \
1378  $(B)/client/tr_scene.o \
1379  $(B)/client/tr_shade.o \
1380  $(B)/client/tr_shade_calc.o \
1381  $(B)/client/tr_shader.o \
1382  $(B)/client/tr_shadows.o \
1383  $(B)/client/tr_sky.o \
1384  $(B)/client/tr_surface.o \
1385  $(B)/client/tr_world.o \
1386  \
1387  $(B)/client/sdl_gamma.o \
1388  $(B)/client/sdl_input.o \
1389  $(B)/client/sdl_snd.o \
1390  \
1391  $(B)/client/con_passive.o \
1392  $(B)/client/con_log.o \
1393  $(B)/client/sys_main.o
1394
1395ifeq ($(ARCH),i386)
1396  Q3OBJ += \
1397    $(B)/client/snd_mixa.o \
1398    $(B)/client/matha.o \
1399    $(B)/client/ftola.o \
1400    $(B)/client/snapvectora.o
1401endif
1402ifeq ($(ARCH),x86)
1403  Q3OBJ += \
1404    $(B)/client/snd_mixa.o \
1405    $(B)/client/matha.o \
1406    $(B)/client/ftola.o \
1407    $(B)/client/snapvectora.o
1408endif
1409
1410ifeq ($(USE_VOIP),1)
1411ifeq ($(USE_INTERNAL_SPEEX),1)
1412Q3OBJ += \
1413  $(B)/client/bits.o \
1414  $(B)/client/buffer.o \
1415  $(B)/client/cb_search.o \
1416  $(B)/client/exc_10_16_table.o \
1417  $(B)/client/exc_10_32_table.o \
1418  $(B)/client/exc_20_32_table.o \
1419  $(B)/client/exc_5_256_table.o \
1420  $(B)/client/exc_5_64_table.o \
1421  $(B)/client/exc_8_128_table.o \
1422  $(B)/client/fftwrap.o \
1423  $(B)/client/filterbank.o \
1424  $(B)/client/filters.o \
1425  $(B)/client/gain_table.o \
1426  $(B)/client/gain_table_lbr.o \
1427  $(B)/client/hexc_10_32_table.o \
1428  $(B)/client/hexc_table.o \
1429  $(B)/client/high_lsp_tables.o \
1430  $(B)/client/jitter.o \
1431  $(B)/client/kiss_fft.o \
1432  $(B)/client/kiss_fftr.o \
1433  $(B)/client/lpc.o \
1434  $(B)/client/lsp.o \
1435  $(B)/client/lsp_tables_nb.o \
1436  $(B)/client/ltp.o \
1437  $(B)/client/mdf.o \
1438  $(B)/client/modes.o \
1439  $(B)/client/modes_wb.o \
1440  $(B)/client/nb_celp.o \
1441  $(B)/client/preprocess.o \
1442  $(B)/client/quant_lsp.o \
1443  $(B)/client/resample.o \
1444  $(B)/client/sb_celp.o \
1445  $(B)/client/smallft.o \
1446  $(B)/client/speex.o \
1447  $(B)/client/speex_callbacks.o \
1448  $(B)/client/speex_header.o \
1449  $(B)/client/stereo.o \
1450  $(B)/client/vbr.o \
1451  $(B)/client/vq.o \
1452  $(B)/client/window.o
1453endif
1454endif
1455
1456
1457ifeq ($(HAVE_VM_COMPILED),true)
1458  ifeq ($(ARCH),i386)
1459    Q3OBJ += $(B)/client/vm_x86.o
1460  endif
1461  ifeq ($(ARCH),x86)
1462    Q3OBJ += $(B)/client/vm_x86.o
1463  endif
1464  ifeq ($(ARCH),x86_64)
1465    Q3OBJ += $(B)/client/vm_x86_64.o $(B)/client/vm_x86_64_assembler.o
1466  endif
1467  ifeq ($(ARCH),amd64)
1468    Q3OBJ += $(B)/client/vm_x86_64.o $(B)/client/vm_x86_64_assembler.o
1469  endif
1470  ifeq ($(ARCH),ppc)
1471    Q3OBJ += $(B)/client/vm_powerpc.o $(B)/client/vm_powerpc_asm.o
1472  endif
1473  ifeq ($(ARCH),ppc64)
1474    Q3OBJ += $(B)/client/vm_powerpc.o $(B)/client/vm_powerpc_asm.o
1475  endif
1476  ifeq ($(ARCH),ppc64le)
1477    Q3OBJ += $(B)/client/vm_powerpc.o $(B)/client/vm_powerpc_asm.o
1478  endif
1479  ifeq ($(ARCH),sparc)
1480    Q3OBJ += $(B)/client/vm_sparc.o
1481  endif
1482endif
1483
1484ifeq ($(PLATFORM),mingw32)
1485  Q3OBJ += \
1486    $(B)/client/win_resource.o \
1487    $(B)/client/sys_win32.o
1488else
1489  Q3OBJ += \
1490    $(B)/client/sys_unix.o
1491endif
1492
1493ifeq ($(USE_MUMBLE),1)
1494  Q3OBJ += \
1495    $(B)/client/libmumblelink.o
1496endif
1497
1498Q3POBJ += \
1499  $(B)/client/sdl_glimp.o
1500
1501Q3POBJ_SMP += \
1502  $(B)/clientsmp/sdl_glimp.o
1503
1504$(B)/ioquake3.$(ARCH)$(BINEXT): $(Q3OBJ) $(Q3POBJ) $(LIBSDLMAIN)
1505	$(echo_cmd) "LD $@"
1506	$(Q)$(CC) $(CLIENT_CFLAGS) $(CFLAGS) $(CLIENT_LDFLAGS) $(LDFLAGS) \
1507		-o $@ $(Q3OBJ) $(Q3POBJ) \
1508		$(LIBSDLMAIN) $(CLIENT_LIBS) $(LIBS)
1509
1510$(B)/ioquake3-smp.$(ARCH)$(BINEXT): $(Q3OBJ) $(Q3POBJ_SMP) $(LIBSDLMAIN)
1511	$(echo_cmd) "LD $@"
1512	$(Q)$(CC) $(CLIENT_CFLAGS) $(CFLAGS) $(CLIENT_LDFLAGS) $(LDFLAGS) $(THREAD_LDFLAGS) \
1513		-o $@ $(Q3OBJ) $(Q3POBJ_SMP) \
1514		$(THREAD_LIBS) $(LIBSDLMAIN) $(CLIENT_LIBS) $(LIBS)
1515
1516ifneq ($(strip $(LIBSDLMAIN)),)
1517ifneq ($(strip $(LIBSDLMAINSRC)),)
1518$(LIBSDLMAIN) : $(LIBSDLMAINSRC)
1519	cp $< $@
1520	ranlib $@
1521endif
1522endif
1523
1524
1525
1526#############################################################################
1527# DEDICATED SERVER
1528#############################################################################
1529
1530Q3DOBJ = \
1531  $(B)/ded/sv_bot.o \
1532  $(B)/ded/sv_client.o \
1533  $(B)/ded/sv_ccmds.o \
1534  $(B)/ded/sv_game.o \
1535  $(B)/ded/sv_init.o \
1536  $(B)/ded/sv_main.o \
1537  $(B)/ded/sv_net_chan.o \
1538  $(B)/ded/sv_snapshot.o \
1539  $(B)/ded/sv_world.o \
1540  \
1541  $(B)/ded/cm_load.o \
1542  $(B)/ded/cm_patch.o \
1543  $(B)/ded/cm_polylib.o \
1544  $(B)/ded/cm_test.o \
1545  $(B)/ded/cm_trace.o \
1546  $(B)/ded/cmd.o \
1547  $(B)/ded/common.o \
1548  $(B)/ded/cvar.o \
1549  $(B)/ded/files.o \
1550  $(B)/ded/md4.o \
1551  $(B)/ded/msg.o \
1552  $(B)/ded/net_chan.o \
1553  $(B)/ded/net_ip.o \
1554  $(B)/ded/huffman.o \
1555  \
1556  $(B)/ded/q_math.o \
1557  $(B)/ded/q_shared.o \
1558  \
1559  $(B)/ded/unzip.o \
1560  $(B)/ded/vm.o \
1561  $(B)/ded/vm_interpreted.o \
1562  \
1563  $(B)/ded/be_aas_bspq3.o \
1564  $(B)/ded/be_aas_cluster.o \
1565  $(B)/ded/be_aas_debug.o \
1566  $(B)/ded/be_aas_entity.o \
1567  $(B)/ded/be_aas_file.o \
1568  $(B)/ded/be_aas_main.o \
1569  $(B)/ded/be_aas_move.o \
1570  $(B)/ded/be_aas_optimize.o \
1571  $(B)/ded/be_aas_reach.o \
1572  $(B)/ded/be_aas_route.o \
1573  $(B)/ded/be_aas_routealt.o \
1574  $(B)/ded/be_aas_sample.o \
1575  $(B)/ded/be_ai_char.o \
1576  $(B)/ded/be_ai_chat.o \
1577  $(B)/ded/be_ai_gen.o \
1578  $(B)/ded/be_ai_goal.o \
1579  $(B)/ded/be_ai_move.o \
1580  $(B)/ded/be_ai_weap.o \
1581  $(B)/ded/be_ai_weight.o \
1582  $(B)/ded/be_ea.o \
1583  $(B)/ded/be_interface.o \
1584  $(B)/ded/l_crc.o \
1585  $(B)/ded/l_libvar.o \
1586  $(B)/ded/l_log.o \
1587  $(B)/ded/l_memory.o \
1588  $(B)/ded/l_precomp.o \
1589  $(B)/ded/l_script.o \
1590  $(B)/ded/l_struct.o \
1591  \
1592  $(B)/ded/null_client.o \
1593  $(B)/ded/null_input.o \
1594  $(B)/ded/null_snddma.o \
1595  \
1596  $(B)/ded/con_log.o \
1597  $(B)/ded/sys_main.o
1598
1599ifeq ($(ARCH),i386)
1600  Q3DOBJ += \
1601      $(B)/ded/ftola.o \
1602      $(B)/ded/snapvectora.o \
1603      $(B)/ded/matha.o
1604endif
1605ifeq ($(ARCH),x86)
1606  Q3DOBJ += \
1607      $(B)/ded/ftola.o \
1608      $(B)/ded/snapvectora.o \
1609      $(B)/ded/matha.o
1610endif
1611
1612ifeq ($(HAVE_VM_COMPILED),true)
1613  ifeq ($(ARCH),i386)
1614    Q3DOBJ += $(B)/ded/vm_x86.o
1615  endif
1616  ifeq ($(ARCH),x86)
1617    Q3DOBJ += $(B)/ded/vm_x86.o
1618  endif
1619  ifeq ($(ARCH),x86_64)
1620    Q3DOBJ += $(B)/ded/vm_x86_64.o $(B)/ded/vm_x86_64_assembler.o
1621  endif
1622  ifeq ($(ARCH),amd64)
1623    Q3DOBJ += $(B)/ded/vm_x86_64.o $(B)/ded/vm_x86_64_assembler.o
1624  endif
1625  ifeq ($(ARCH),ppc)
1626    Q3DOBJ += $(B)/ded/vm_powerpc.o $(B)/ded/vm_powerpc_asm.o
1627  endif
1628  ifeq ($(ARCH),ppc64)
1629    Q3DOBJ += $(B)/ded/vm_powerpc.o $(B)/ded/vm_powerpc_asm.o
1630  endif
1631  ifeq ($(ARCH),ppc64le)
1632    Q3DOBJ += $(B)/ded/vm_powerpc.o $(B)/ded/vm_powerpc_asm.o
1633  endif
1634  ifeq ($(ARCH),sparc)
1635    Q3DOBJ += $(B)/ded/vm_sparc.o
1636  endif
1637endif
1638
1639ifeq ($(PLATFORM),mingw32)
1640  Q3DOBJ += \
1641    $(B)/ded/win_resource.o \
1642    $(B)/ded/sys_win32.o \
1643    $(B)/ded/con_win32.o
1644else
1645  Q3DOBJ += \
1646    $(B)/ded/sys_unix.o \
1647    $(B)/ded/con_tty.o
1648endif
1649
1650$(B)/ioq3ded.$(ARCH)$(BINEXT): $(Q3DOBJ)
1651	$(echo_cmd) "LD $@"
1652	$(Q)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(Q3DOBJ) $(LIBS)
1653
1654
1655
1656#############################################################################
1657## BASEQ3 CGAME
1658#############################################################################
1659
1660Q3CGOBJ_ = \
1661  $(B)/baseq3/cgame/cg_main.o \
1662  $(B)/baseq3/cgame/bg_misc.o \
1663  $(B)/baseq3/cgame/bg_pmove.o \
1664  $(B)/baseq3/cgame/bg_slidemove.o \
1665  $(B)/baseq3/cgame/bg_lib.o \
1666  $(B)/baseq3/cgame/cg_consolecmds.o \
1667  $(B)/baseq3/cgame/cg_draw.o \
1668  $(B)/baseq3/cgame/cg_drawtools.o \
1669  $(B)/baseq3/cgame/cg_effects.o \
1670  $(B)/baseq3/cgame/cg_ents.o \
1671  $(B)/baseq3/cgame/cg_event.o \
1672  $(B)/baseq3/cgame/cg_info.o \
1673  $(B)/baseq3/cgame/cg_localents.o \
1674  $(B)/baseq3/cgame/cg_marks.o \
1675  $(B)/baseq3/cgame/cg_players.o \
1676  $(B)/baseq3/cgame/cg_playerstate.o \
1677  $(B)/baseq3/cgame/cg_predict.o \
1678  $(B)/baseq3/cgame/cg_scoreboard.o \
1679  $(B)/baseq3/cgame/cg_servercmds.o \
1680  $(B)/baseq3/cgame/cg_snapshot.o \
1681  $(B)/baseq3/cgame/cg_view.o \
1682  $(B)/baseq3/cgame/cg_weapons.o \
1683  \
1684  $(B)/baseq3/qcommon/q_math.o \
1685  $(B)/baseq3/qcommon/q_shared.o
1686
1687Q3CGOBJ = $(Q3CGOBJ_) $(B)/baseq3/cgame/cg_syscalls.o
1688Q3CGVMOBJ = $(Q3CGOBJ_:%.o=%.asm)
1689
1690$(B)/baseq3/cgame$(ARCH).$(SHLIBEXT): $(Q3CGOBJ)
1691	$(echo_cmd) "LD $@"
1692	$(Q)$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(Q3CGOBJ)
1693
1694$(B)/baseq3/vm/cgame.qvm: $(Q3CGVMOBJ) $(CGDIR)/cg_syscalls.asm $(Q3ASM)
1695	$(echo_cmd) "Q3ASM $@"
1696	$(Q)$(Q3ASM) -o $@ $(Q3CGVMOBJ) $(CGDIR)/cg_syscalls.asm
1697
1698#############################################################################
1699## MISSIONPACK CGAME
1700#############################################################################
1701
1702MPCGOBJ_ = \
1703  $(B)/missionpack/cgame/cg_main.o \
1704  $(B)/missionpack/cgame/bg_misc.o \
1705  $(B)/missionpack/cgame/bg_pmove.o \
1706  $(B)/missionpack/cgame/bg_slidemove.o \
1707  $(B)/missionpack/cgame/bg_lib.o \
1708  $(B)/missionpack/cgame/cg_consolecmds.o \
1709  $(B)/missionpack/cgame/cg_newdraw.o \
1710  $(B)/missionpack/cgame/cg_draw.o \
1711  $(B)/missionpack/cgame/cg_drawtools.o \
1712  $(B)/missionpack/cgame/cg_effects.o \
1713  $(B)/missionpack/cgame/cg_ents.o \
1714  $(B)/missionpack/cgame/cg_event.o \
1715  $(B)/missionpack/cgame/cg_info.o \
1716  $(B)/missionpack/cgame/cg_localents.o \
1717  $(B)/missionpack/cgame/cg_marks.o \
1718  $(B)/missionpack/cgame/cg_players.o \
1719  $(B)/missionpack/cgame/cg_playerstate.o \
1720  $(B)/missionpack/cgame/cg_predict.o \
1721  $(B)/missionpack/cgame/cg_scoreboard.o \
1722  $(B)/missionpack/cgame/cg_servercmds.o \
1723  $(B)/missionpack/cgame/cg_snapshot.o \
1724  $(B)/missionpack/cgame/cg_view.o \
1725  $(B)/missionpack/cgame/cg_weapons.o \
1726  $(B)/missionpack/ui/ui_shared.o \
1727  \
1728  $(B)/missionpack/qcommon/q_math.o \
1729  $(B)/missionpack/qcommon/q_shared.o
1730
1731MPCGOBJ = $(MPCGOBJ_) $(B)/missionpack/cgame/cg_syscalls.o
1732MPCGVMOBJ = $(MPCGOBJ_:%.o=%.asm)
1733
1734$(B)/missionpack/cgame$(ARCH).$(SHLIBEXT): $(MPCGOBJ)
1735	$(echo_cmd) "LD $@"
1736	$(Q)$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(MPCGOBJ)
1737
1738$(B)/missionpack/vm/cgame.qvm: $(MPCGVMOBJ) $(CGDIR)/cg_syscalls.asm $(Q3ASM)
1739	$(echo_cmd) "Q3ASM $@"
1740	$(Q)$(Q3ASM) -o $@ $(MPCGVMOBJ) $(CGDIR)/cg_syscalls.asm
1741
1742
1743
1744#############################################################################
1745## BASEQ3 GAME
1746#############################################################################
1747
1748Q3GOBJ_ = \
1749  $(B)/baseq3/game/g_main.o \
1750  $(B)/baseq3/game/ai_chat.o \
1751  $(B)/baseq3/game/ai_cmd.o \
1752  $(B)/baseq3/game/ai_dmnet.o \
1753  $(B)/baseq3/game/ai_dmq3.o \
1754  $(B)/baseq3/game/ai_main.o \
1755  $(B)/baseq3/game/ai_team.o \
1756  $(B)/baseq3/game/ai_vcmd.o \
1757  $(B)/baseq3/game/bg_misc.o \
1758  $(B)/baseq3/game/bg_pmove.o \
1759  $(B)/baseq3/game/bg_slidemove.o \
1760  $(B)/baseq3/game/bg_lib.o \
1761  $(B)/baseq3/game/g_active.o \
1762  $(B)/baseq3/game/g_arenas.o \
1763  $(B)/baseq3/game/g_bot.o \
1764  $(B)/baseq3/game/g_client.o \
1765  $(B)/baseq3/game/g_cmds.o \
1766  $(B)/baseq3/game/g_combat.o \
1767  $(B)/baseq3/game/g_items.o \
1768  $(B)/baseq3/game/g_mem.o \
1769  $(B)/baseq3/game/g_misc.o \
1770  $(B)/baseq3/game/g_missile.o \
1771  $(B)/baseq3/game/g_mover.o \
1772  $(B)/baseq3/game/g_session.o \
1773  $(B)/baseq3/game/g_spawn.o \
1774  $(B)/baseq3/game/g_svcmds.o \
1775  $(B)/baseq3/game/g_target.o \
1776  $(B)/baseq3/game/g_team.o \
1777  $(B)/baseq3/game/g_trigger.o \
1778  $(B)/baseq3/game/g_utils.o \
1779  $(B)/baseq3/game/g_weapon.o \
1780  \
1781  $(B)/baseq3/qcommon/q_math.o \
1782  $(B)/baseq3/qcommon/q_shared.o
1783
1784Q3GOBJ = $(Q3GOBJ_) $(B)/baseq3/game/g_syscalls.o
1785Q3GVMOBJ = $(Q3GOBJ_:%.o=%.asm)
1786
1787$(B)/baseq3/qagame$(ARCH).$(SHLIBEXT): $(Q3GOBJ)
1788	$(echo_cmd) "LD $@"
1789	$(Q)$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(Q3GOBJ)
1790
1791$(B)/baseq3/vm/qagame.qvm: $(Q3GVMOBJ) $(GDIR)/g_syscalls.asm $(Q3ASM)
1792	$(echo_cmd) "Q3ASM $@"
1793	$(Q)$(Q3ASM) -o $@ $(Q3GVMOBJ) $(GDIR)/g_syscalls.asm
1794
1795#############################################################################
1796## MISSIONPACK GAME
1797#############################################################################
1798
1799MPGOBJ_ = \
1800  $(B)/missionpack/game/g_main.o \
1801  $(B)/missionpack/game/ai_chat.o \
1802  $(B)/missionpack/game/ai_cmd.o \
1803  $(B)/missionpack/game/ai_dmnet.o \
1804  $(B)/missionpack/game/ai_dmq3.o \
1805  $(B)/missionpack/game/ai_main.o \
1806  $(B)/missionpack/game/ai_team.o \
1807  $(B)/missionpack/game/ai_vcmd.o \
1808  $(B)/missionpack/game/bg_misc.o \
1809  $(B)/missionpack/game/bg_pmove.o \
1810  $(B)/missionpack/game/bg_slidemove.o \
1811  $(B)/missionpack/game/bg_lib.o \
1812  $(B)/missionpack/game/g_active.o \
1813  $(B)/missionpack/game/g_arenas.o \
1814  $(B)/missionpack/game/g_bot.o \
1815  $(B)/missionpack/game/g_client.o \
1816  $(B)/missionpack/game/g_cmds.o \
1817  $(B)/missionpack/game/g_combat.o \
1818  $(B)/missionpack/game/g_items.o \
1819  $(B)/missionpack/game/g_mem.o \
1820  $(B)/missionpack/game/g_misc.o \
1821  $(B)/missionpack/game/g_missile.o \
1822  $(B)/missionpack/game/g_mover.o \
1823  $(B)/missionpack/game/g_session.o \
1824  $(B)/missionpack/game/g_spawn.o \
1825  $(B)/missionpack/game/g_svcmds.o \
1826  $(B)/missionpack/game/g_target.o \
1827  $(B)/missionpack/game/g_team.o \
1828  $(B)/missionpack/game/g_trigger.o \
1829  $(B)/missionpack/game/g_utils.o \
1830  $(B)/missionpack/game/g_weapon.o \
1831  \
1832  $(B)/missionpack/qcommon/q_math.o \
1833  $(B)/missionpack/qcommon/q_shared.o
1834
1835MPGOBJ = $(MPGOBJ_) $(B)/missionpack/game/g_syscalls.o
1836MPGVMOBJ = $(MPGOBJ_:%.o=%.asm)
1837
1838$(B)/missionpack/qagame$(ARCH).$(SHLIBEXT): $(MPGOBJ)
1839	$(echo_cmd) "LD $@"
1840	$(Q)$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(MPGOBJ)
1841
1842$(B)/missionpack/vm/qagame.qvm: $(MPGVMOBJ) $(GDIR)/g_syscalls.asm $(Q3ASM)
1843	$(echo_cmd) "Q3ASM $@"
1844	$(Q)$(Q3ASM) -o $@ $(MPGVMOBJ) $(GDIR)/g_syscalls.asm
1845
1846
1847
1848#############################################################################
1849## BASEQ3 UI
1850#############################################################################
1851
1852Q3UIOBJ_ = \
1853  $(B)/baseq3/ui/ui_main.o \
1854  $(B)/baseq3/ui/bg_misc.o \
1855  $(B)/baseq3/ui/bg_lib.o \
1856  $(B)/baseq3/ui/ui_addbots.o \
1857  $(B)/baseq3/ui/ui_atoms.o \
1858  $(B)/baseq3/ui/ui_cdkey.o \
1859  $(B)/baseq3/ui/ui_cinematics.o \
1860  $(B)/baseq3/ui/ui_confirm.o \
1861  $(B)/baseq3/ui/ui_connect.o \
1862  $(B)/baseq3/ui/ui_controls2.o \
1863  $(B)/baseq3/ui/ui_credits.o \
1864  $(B)/baseq3/ui/ui_demo2.o \
1865  $(B)/baseq3/ui/ui_display.o \
1866  $(B)/baseq3/ui/ui_gameinfo.o \
1867  $(B)/baseq3/ui/ui_ingame.o \
1868  $(B)/baseq3/ui/ui_loadconfig.o \
1869  $(B)/baseq3/ui/ui_menu.o \
1870  $(B)/baseq3/ui/ui_mfield.o \
1871  $(B)/baseq3/ui/ui_mods.o \
1872  $(B)/baseq3/ui/ui_network.o \
1873  $(B)/baseq3/ui/ui_options.o \
1874  $(B)/baseq3/ui/ui_playermodel.o \
1875  $(B)/baseq3/ui/ui_players.o \
1876  $(B)/baseq3/ui/ui_playersettings.o \
1877  $(B)/baseq3/ui/ui_preferences.o \
1878  $(B)/baseq3/ui/ui_qmenu.o \
1879  $(B)/baseq3/ui/ui_removebots.o \
1880  $(B)/baseq3/ui/ui_saveconfig.o \
1881  $(B)/baseq3/ui/ui_serverinfo.o \
1882  $(B)/baseq3/ui/ui_servers2.o \
1883  $(B)/baseq3/ui/ui_setup.o \
1884  $(B)/baseq3/ui/ui_sound.o \
1885  $(B)/baseq3/ui/ui_sparena.o \
1886  $(B)/baseq3/ui/ui_specifyserver.o \
1887  $(B)/baseq3/ui/ui_splevel.o \
1888  $(B)/baseq3/ui/ui_sppostgame.o \
1889  $(B)/baseq3/ui/ui_spskill.o \
1890  $(B)/baseq3/ui/ui_startserver.o \
1891  $(B)/baseq3/ui/ui_team.o \
1892  $(B)/baseq3/ui/ui_teamorders.o \
1893  $(B)/baseq3/ui/ui_video.o \
1894  \
1895  $(B)/baseq3/qcommon/q_math.o \
1896  $(B)/baseq3/qcommon/q_shared.o
1897
1898Q3UIOBJ = $(Q3UIOBJ_) $(B)/missionpack/ui/ui_syscalls.o
1899Q3UIVMOBJ = $(Q3UIOBJ_:%.o=%.asm)
1900
1901$(B)/baseq3/ui$(ARCH).$(SHLIBEXT): $(Q3UIOBJ)
1902	$(echo_cmd) "LD $@"
1903	$(Q)$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(Q3UIOBJ)
1904
1905$(B)/baseq3/vm/ui.qvm: $(Q3UIVMOBJ) $(UIDIR)/ui_syscalls.asm $(Q3ASM)
1906	$(echo_cmd) "Q3ASM $@"
1907	$(Q)$(Q3ASM) -o $@ $(Q3UIVMOBJ) $(UIDIR)/ui_syscalls.asm
1908
1909#############################################################################
1910## MISSIONPACK UI
1911#############################################################################
1912
1913MPUIOBJ_ = \
1914  $(B)/missionpack/ui/ui_main.o \
1915  $(B)/missionpack/ui/ui_atoms.o \
1916  $(B)/missionpack/ui/ui_gameinfo.o \
1917  $(B)/missionpack/ui/ui_players.o \
1918  $(B)/missionpack/ui/ui_shared.o \
1919  \
1920  $(B)/missionpack/ui/bg_misc.o \
1921  $(B)/missionpack/ui/bg_lib.o \
1922  \
1923  $(B)/missionpack/qcommon/q_math.o \
1924  $(B)/missionpack/qcommon/q_shared.o
1925
1926MPUIOBJ = $(MPUIOBJ_) $(B)/missionpack/ui/ui_syscalls.o
1927MPUIVMOBJ = $(MPUIOBJ_:%.o=%.asm)
1928
1929$(B)/missionpack/ui$(ARCH).$(SHLIBEXT): $(MPUIOBJ)
1930	$(echo_cmd) "LD $@"
1931	$(Q)$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(MPUIOBJ)
1932
1933$(B)/missionpack/vm/ui.qvm: $(MPUIVMOBJ) $(UIDIR)/ui_syscalls.asm $(Q3ASM)
1934	$(echo_cmd) "Q3ASM $@"
1935	$(Q)$(Q3ASM) -o $@ $(MPUIVMOBJ) $(UIDIR)/ui_syscalls.asm
1936
1937
1938
1939#############################################################################
1940## CLIENT/SERVER RULES
1941#############################################################################
1942
1943$(B)/client/%.o: $(ASMDIR)/%.s
1944	$(DO_AS)
1945
1946$(B)/client/%.o: $(CDIR)/%.c
1947	$(DO_CC)
1948
1949$(B)/client/%.o: $(SDIR)/%.c
1950	$(DO_CC)
1951
1952$(B)/client/%.o: $(CMDIR)/%.c
1953	$(DO_CC)
1954
1955$(B)/client/%.o: $(BLIBDIR)/%.c
1956	$(DO_BOT_CC)
1957
1958$(B)/client/%.o: $(JPDIR)/%.c
1959	$(DO_CC)
1960
1961$(B)/client/%.o: $(SPEEXDIR)/%.c
1962	$(DO_CC)
1963
1964$(B)/client/%.o: $(RDIR)/%.c
1965	$(DO_CC)
1966
1967$(B)/client/%.o: $(SDLDIR)/%.c
1968	$(DO_CC)
1969
1970$(B)/clientsmp/%.o: $(SDLDIR)/%.c
1971	$(DO_SMP_CC)
1972
1973$(B)/client/%.o: $(SYSDIR)/%.c
1974	$(DO_CC)
1975
1976$(B)/client/%.o: $(SYSDIR)/%.rc
1977	$(DO_WINDRES)
1978
1979
1980$(B)/ded/%.o: $(ASMDIR)/%.s
1981	$(DO_AS)
1982
1983$(B)/ded/%.o: $(SDIR)/%.c
1984	$(DO_DED_CC)
1985
1986$(B)/ded/%.o: $(CMDIR)/%.c
1987	$(DO_DED_CC)
1988
1989$(B)/ded/%.o: $(BLIBDIR)/%.c
1990	$(DO_BOT_CC)
1991
1992$(B)/ded/%.o: $(SYSDIR)/%.c
1993	$(DO_DED_CC)
1994
1995$(B)/ded/%.o: $(SYSDIR)/%.rc
1996	$(DO_WINDRES)
1997
1998$(B)/ded/%.o: $(NDIR)/%.c
1999	$(DO_DED_CC)
2000
2001# Extra dependencies to ensure the SVN version is incorporated
2002ifeq ($(USE_SVN),1)
2003  $(B)/client/cl_console.o : .svn/entries
2004  $(B)/client/common.o : .svn/entries
2005  $(B)/ded/common.o : .svn/entries
2006endif
2007
2008
2009#############################################################################
2010## GAME MODULE RULES
2011#############################################################################
2012
2013$(B)/baseq3/cgame/bg_%.o: $(GDIR)/bg_%.c
2014	$(DO_CGAME_CC)
2015
2016$(B)/baseq3/cgame/%.o: $(CGDIR)/%.c
2017	$(DO_CGAME_CC)
2018
2019$(B)/baseq3/cgame/bg_%.asm: $(GDIR)/bg_%.c $(Q3LCC)
2020	$(DO_CGAME_Q3LCC)
2021
2022$(B)/baseq3/cgame/%.asm: $(CGDIR)/%.c $(Q3LCC)
2023	$(DO_CGAME_Q3LCC)
2024
2025$(B)/missionpack/cgame/bg_%.o: $(GDIR)/bg_%.c
2026	$(DO_CGAME_CC_MISSIONPACK)
2027
2028$(B)/missionpack/cgame/%.o: $(CGDIR)/%.c
2029	$(DO_CGAME_CC_MISSIONPACK)
2030
2031$(B)/missionpack/cgame/bg_%.asm: $(GDIR)/bg_%.c $(Q3LCC)
2032	$(DO_CGAME_Q3LCC_MISSIONPACK)
2033
2034$(B)/missionpack/cgame/%.asm: $(CGDIR)/%.c $(Q3LCC)
2035	$(DO_CGAME_Q3LCC_MISSIONPACK)
2036
2037
2038$(B)/baseq3/game/%.o: $(GDIR)/%.c
2039	$(DO_GAME_CC)
2040
2041$(B)/baseq3/game/%.asm: $(GDIR)/%.c $(Q3LCC)
2042	$(DO_GAME_Q3LCC)
2043
2044$(B)/missionpack/game/%.o: $(GDIR)/%.c
2045	$(DO_GAME_CC_MISSIONPACK)
2046
2047$(B)/missionpack/game/%.asm: $(GDIR)/%.c $(Q3LCC)
2048	$(DO_GAME_Q3LCC_MISSIONPACK)
2049
2050
2051$(B)/baseq3/ui/bg_%.o: $(GDIR)/bg_%.c
2052	$(DO_UI_CC)
2053
2054$(B)/baseq3/ui/%.o: $(Q3UIDIR)/%.c
2055	$(DO_UI_CC)
2056
2057$(B)/baseq3/ui/bg_%.asm: $(GDIR)/bg_%.c $(Q3LCC)
2058	$(DO_UI_Q3LCC)
2059
2060$(B)/baseq3/ui/%.asm: $(Q3UIDIR)/%.c $(Q3LCC)
2061	$(DO_UI_Q3LCC)
2062
2063$(B)/missionpack/ui/bg_%.o: $(GDIR)/bg_%.c
2064	$(DO_UI_CC_MISSIONPACK)
2065
2066$(B)/missionpack/ui/%.o: $(UIDIR)/%.c
2067	$(DO_UI_CC_MISSIONPACK)
2068
2069$(B)/missionpack/ui/bg_%.asm: $(GDIR)/bg_%.c $(Q3LCC)
2070	$(DO_UI_Q3LCC_MISSIONPACK)
2071
2072$(B)/missionpack/ui/%.asm: $(UIDIR)/%.c $(Q3LCC)
2073	$(DO_UI_Q3LCC_MISSIONPACK)
2074
2075
2076$(B)/baseq3/qcommon/%.o: $(CMDIR)/%.c
2077	$(DO_SHLIB_CC)
2078
2079$(B)/baseq3/qcommon/%.asm: $(CMDIR)/%.c $(Q3LCC)
2080	$(DO_Q3LCC)
2081
2082$(B)/missionpack/qcommon/%.o: $(CMDIR)/%.c
2083	$(DO_SHLIB_CC_MISSIONPACK)
2084
2085$(B)/missionpack/qcommon/%.asm: $(CMDIR)/%.c $(Q3LCC)
2086	$(DO_Q3LCC_MISSIONPACK)
2087
2088
2089#############################################################################
2090# MISC
2091#############################################################################
2092
2093OBJ = $(Q3OBJ) $(Q3POBJ) $(Q3POBJ_SMP) $(Q3DOBJ) \
2094  $(MPGOBJ) $(Q3GOBJ) $(Q3CGOBJ) $(MPCGOBJ) $(Q3UIOBJ) $(MPUIOBJ) \
2095  $(MPGVMOBJ) $(Q3GVMOBJ) $(Q3CGVMOBJ) $(MPCGVMOBJ) $(Q3UIVMOBJ) $(MPUIVMOBJ)
2096TOOLSOBJ = $(LBURGOBJ) $(Q3CPPOBJ) $(Q3RCCOBJ) $(Q3LCCOBJ) $(Q3ASMOBJ)
2097
2098
2099copyfiles: release
2100	@if [ ! -d $(COPYDIR)/baseq3 ]; then echo "You need to set COPYDIR to where your Quake3 data is!"; fi
2101	-$(MKDIR) -p -m 0755 $(COPYDIR)/baseq3
2102	-$(MKDIR) -p -m 0755 $(COPYDIR)/missionpack
2103
2104ifneq ($(BUILD_CLIENT),0)
2105	$(INSTALL) -s -m 0755 $(BR)/ioquake3.$(ARCH)$(BINEXT) $(COPYDIR)/ioquake3.$(ARCH)$(BINEXT)
2106endif
2107
2108# Don't copy the SMP until it's working together with SDL.
2109#ifneq ($(BUILD_CLIENT_SMP),0)
2110#	$(INSTALL) -s -m 0755 $(BR)/ioquake3-smp.$(ARCH)$(BINEXT) $(COPYDIR)/ioquake3-smp.$(ARCH)$(BINEXT)
2111#endif
2112
2113ifneq ($(BUILD_SERVER),0)
2114	@if [ -f $(BR)/ioq3ded.$(ARCH)$(BINEXT) ]; then \
2115		$(INSTALL) -s -m 0755 $(BR)/ioq3ded.$(ARCH)$(BINEXT) $(COPYDIR)/ioq3ded.$(ARCH)$(BINEXT); \
2116	fi
2117endif
2118
2119ifneq ($(BUILD_GAME_SO),0)
2120	$(INSTALL) -s -m 0755 $(BR)/baseq3/cgame$(ARCH).$(SHLIBEXT) \
2121					$(COPYDIR)/baseq3/.
2122	$(INSTALL) -s -m 0755 $(BR)/baseq3/qagame$(ARCH).$(SHLIBEXT) \
2123					$(COPYDIR)/baseq3/.
2124	$(INSTALL) -s -m 0755 $(BR)/baseq3/ui$(ARCH).$(SHLIBEXT) \
2125					$(COPYDIR)/baseq3/.
2126  ifneq ($(BUILD_MISSIONPACK),0)
2127	-$(MKDIR) -p -m 0755 $(COPYDIR)/missionpack
2128	$(INSTALL) -s -m 0755 $(BR)/missionpack/cgame$(ARCH).$(SHLIBEXT) \
2129					$(COPYDIR)/missionpack/.
2130	$(INSTALL) -s -m 0755 $(BR)/missionpack/qagame$(ARCH).$(SHLIBEXT) \
2131					$(COPYDIR)/missionpack/.
2132	$(INSTALL) -s -m 0755 $(BR)/missionpack/ui$(ARCH).$(SHLIBEXT) \
2133					$(COPYDIR)/missionpack/.
2134  endif
2135endif
2136
2137clean: clean-debug clean-release
2138ifeq ($(PLATFORM),mingw32)
2139	@$(MAKE) -C $(NSISDIR) clean
2140else
2141	@$(MAKE) -C $(LOKISETUPDIR) clean
2142endif
2143
2144clean-debug:
2145	@$(MAKE) clean2 B=$(BD)
2146
2147clean-release:
2148	@$(MAKE) clean2 B=$(BR)
2149
2150clean2:
2151	@echo "CLEAN $(B)"
2152	@rm -f $(OBJ)
2153	@rm -f $(OBJ_D_FILES)
2154	@rm -f $(TARGETS)
2155
2156toolsclean: toolsclean-debug toolsclean-release
2157
2158toolsclean-debug:
2159	@$(MAKE) toolsclean2 B=$(BD)
2160
2161toolsclean-release:
2162	@$(MAKE) toolsclean2 B=$(BR)
2163
2164toolsclean2:
2165	@echo "TOOLS_CLEAN $(B)"
2166	@rm -f $(TOOLSOBJ)
2167	@rm -f $(TOOLSOBJ_D_FILES)
2168	@rm -f $(LBURG) $(DAGCHECK_C) $(Q3RCC) $(Q3CPP) $(Q3LCC) $(Q3ASM)
2169
2170distclean: clean toolsclean
2171	@rm -rf $(BUILD_DIR)
2172
2173installer: release
2174ifeq ($(PLATFORM),mingw32)
2175	@$(MAKE) VERSION=$(VERSION) -C $(NSISDIR) V=$(V)
2176else
2177	@$(MAKE) VERSION=$(VERSION) -C $(LOKISETUPDIR) V=$(V)
2178endif
2179
2180dist:
2181	rm -rf ioquake3-$(VERSION)
2182	svn export . ioquake3-$(VERSION)
2183	tar --owner=root --group=root --force-local --exclude=misc/osxfe -cjf ioquake3-$(VERSION).tar.bz2 ioquake3-$(VERSION)
2184	rm -rf ioquake3-$(VERSION)
2185
2186#############################################################################
2187# DEPENDENCIES
2188#############################################################################
2189
2190OBJ_D_FILES=$(filter %.d,$(OBJ:%.o=%.d))
2191TOOLSOBJ_D_FILES=$(filter %.d,$(TOOLSOBJ:%.o=%.d))
2192-include $(OBJ_D_FILES) $(TOOLSOBJ_D_FILES)
2193
2194.PHONY: all clean clean2 clean-debug clean-release copyfiles \
2195	debug default dist distclean installer makedirs \
2196	release targets \
2197	toolsclean toolsclean2 toolsclean-debug toolsclean-release
2198