root/Makefile

Revision 34:fef9c670375b, 36.2 kB (checked in by mdoison, 3 years ago)

Remove ffast-math and -O3 optimisation flags in makefile

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