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