# Makefile for building BUILD on Unix/Cygwin systems. # # Written by Ryan C. Gordon (icculus@clutteredmind.org) # Do NOT contact Ken Silverman for support of BUILD on Unix or Linux. #---------------------------------------------------------------------------- linux_ppc := false beos := false macosx := false freebsd := false solaris := false linux64 := false #-----------------------------------------------------------------------------# # If this makefile fails to detect Cygwin correctly, or you want to force # the build process's behaviour, set it to "true" or "false" (w/o quotes). #-----------------------------------------------------------------------------# #cygwin := true #cygwin := false cygwin := autodetect #-----------------------------------------------------------------------------# # You only need to set SDL_INC_DIR and SDL_LIB_DIR if you are using cygwin. # SDL_INC_DIR is where SDL.h and associated headers can be found, and # SDL_LIB_DIR is where SDL.lib and SDL.dll are located. These may be set as # environment variables, if you'd prefer to not hack the Makefile. # # examples: # SDL_INC_DIR := C:/2/SDL-1.1.8/include # SDL_LIB_DIR := C:/2/SDL-1.1.8/lib #-----------------------------------------------------------------------------# ifeq ($(strip $(SDL_INC_DIR)),) SDL_INC_DIR := please_set_me_cygwin_users endif ifeq ($(strip $(SDL_LIB_DIR)),) SDL_LIB_DIR := please_set_me_cygwin_users endif CC = gcc LINKER = gcc #-----------------------------------------------------------------------------# # To use a different platform's ASM or portable C, change this. #-----------------------------------------------------------------------------# #USE_ASM := -DUSE_I386_ASM #-----------------------------------------------------------------------------# # Don't touch this unless you know what you are doing. #-----------------------------------------------------------------------------# #useperl := true useperl := false #useopengl := true useopengl := false GL_INCLDIR := /usr/X11R6/include #usedlls := true usedlls := false #usephysfs := true usephysfs := false #networking := stubbed networking := udp #-----------------------------------------------------------------------------# # Everything below this line is probably okay. #-----------------------------------------------------------------------------# # been told this doesn't work on BeOS right now... ifeq ($(strip $(beos)),true) networking := stubbed USE_ASM := endif CFLAGS += -m32 LDFLAGS +=-m32 -L/usr/lib ifeq ($(strip $(solaris)),true) LINKER= cc CC = cc LDFLAGS += -lsocket -lnsl CFLAGS += -DPLATFORM_SOLARIS endif ifeq ($(strip $(cygwin)),autodetect) ifneq ($(strip $(shell gcc -v 2>&1 |grep "cygwin")),) cygwin := true else cygwin := false endif endif ifeq ($(strip $(cygwin)),true) # (no choice on Cygwin right now...) usedlls := false ifeq ($(strip $(SDL_INC_DIR)),please_set_me_cygwin_users) $(error Cygwin users need to set the SDL_INC_DIR envr var.) else SDL_CFLAGS := -I$(SDL_INC_DIR) endif ifeq ($(strip $(SDL_LIB_DIR)),please_set_me_cygwin_users) $(error Cygwin users need to set the SDL_LIB_DIR envr var.) else SDL_LDFLAGS := -L$(SDL_LIB_DIR) -lSDL endif else ifneq ($(strip $(freebsd)),true) SDL_CFLAGS := $(shell /usr/bin/32/sdl-config --cflags) SDL_LDFLAGS := $(shell /usr/bin/32/sdl-config --libs) endif endif # Uncomment to use the Intel compiler (v6.0) # Note: Version 6.0 Build 020312Z fails to compile engine.c #CC = icc #CFLAGS = -g $(SDL_CFLAGS) -DUSE_SDL=1 -O2 ifeq ($(strip $(cygwin)),true) ASM = nasmw DLL_EXT = .dll EXE_EXT = .exe ASMOBJFMT = win32 ASMDEFS = -dC_IDENTIFIERS_UNDERSCORED CFLAGS += -DC_IDENTIFIERS_UNDERSCORED else ASM = nasm DLL_EXT = .so EXE_EXT = ASMOBJFMT = elf endif ifeq ($(strip $(macosx)),true) CFLAGS += -DPLATFORM_MACOSX=1 -faltivec -mdynamic-no-pic -falign-loops=32 -falign-functions=32 LDFLAGS += -framework AppKit -lSDL -lSDLmain endif ifeq ($(strip $(freebsd)),true) CFLAGS += -DPLATFORM_FREEBSD=1 SDL_CFLAGS := $(shell sdl11-config --cflags) SDL_LDFLAGS := $(shell sdl11-config --libs) -L. endif ifeq ($(strip $(linux_ppc)),true) CFLAGS += -DPLATFORM_LINUXPPC=1 endif ifeq ($(strip $(useopengl)),true) CFLAGS += -DUSE_OPENGL -I$(GL_INCLDIR) endif ifeq ($(strip $(useperl)),true) CFLAGS += -DUSE_PERL LDPERL := $(shell perl -MExtUtils::Embed -e ldopts) CCPERL := $(shell perl -MExtUtils::Embed -e ccopts) # !!! can I lose the explicit path somehow? PERLOBJS += buildperl.o /usr/lib/perl5/i386-linux/CORE/libperl.a endif ifeq ($(strip $(usephysfs)),true) CFLAGS += -DUSE_PHYSICSFS LDFLAGS += -lphysfs endif ifeq ($(strip $(usedlls)),true) ENGINEBASE = buildengine ENGINEDLL = $(strip $(ENGINEBASE))$(strip $(DLL_EXT)) NETBASE = buildnet NETDLL = $(strip $(NETBASE))$(strip $(DLL_EXT)) endif ifeq ($(strip $(networking)),stubbed) CFLAGS += -DSTUB_NETWORKING=1 endif ifeq ($(strip $(networking)),udp) CFLAGS += -DUDP_NETWORKING=1 endif # fixes code generation bug. ifeq ($(strip $(beos)),true) CFLAGS += -no-fpic endif ENGINESRCS = engine.c cache1d.c sdl_driver.c unix_compat.c ifeq ($(strip $(USE_ASM)),-DUSE_I386_ASM) ENGINESRCS += a_nasm.asm pragmas.c a_gnu.c else ENGINESRCS += a.c pragmas.c endif ifeq ($(strip $(useopengl)),true) ENGINESRCS += buildgl.c endif NETSRCS = mmulti.c GAMEEXE = game GAMESRCS = game.c #GAMESRCS += multi.c k.asm kdmeng.c ifneq ($(strip $(usedlls)),true) GAMESRCS += $(ENGINESRCS) GAMESRCS += $(NETSRCS) endif BUILDEXE = build BUILDSRCS = build.c bstub.c ifneq ($(strip $(usedlls)),true) BUILDSRCS += $(ENGINESRCS) endif ENGINEDIR = . ASMFLAGS = -f $(ASMOBJFMT) $(ASMDEFS) CFLAGS += $(USE_ASM) -DPLATFORM_UNIX -g $(SDL_CFLAGS) LDFLAGS += -g $(SDL_LDFLAGS) ifeq ($(strip $(solaris)),true) CFLAGS += -xO5 -xchar=u else # Always turn OFF strict aliasing, even when optimizing. Otherwise, this is # just an accident waiting to happen... --ryan. CFLAGS += -fno-strict-aliasing CFLAGS += -fno-omit-frame-pointer -Wall -O3 -funsigned-char endif # Rules for turning source files into .o files %.o: %.c $(CC) -c -o $@ $< $(CFLAGS) %.o: %.asm $(ASM) $(ASMFLAGS) -o $@ $< # Rule for getting list of objects from source ENGINEOBJS1 := $(ENGINESRCS:.c=.o) ENGINEOBJS := $(ENGINEOBJS1:.asm=.o) NETOBJS1 := $(NETSRCS:.c=.o) NETOBJS := $(NETOBJS1:.asm=.o) GAMEOBJS1 := $(GAMESRCS:.c=.o) GAMEOBJS := $(GAMEOBJS1:.asm=.o) BUILDOBJS1 := $(BUILDSRCS:.c=.o) BUILDOBJS := $(BUILDOBJS1:.asm=.o) CLEANUP = $(GAMEOBJS) $(BUILDOBJS) $(PERLOBJS) $(NETOBJS) \ $(GAMEEXE) $(BUILDEXE) $(ENGINEOBJS) $(ENGINEDLL) \ $(wildcard *.exe) $(wildcard *.obj) \ $(wildcard *~) $(wildcard *.err) \ $(wildcard .\#*) core all: $(BUILDEXE) $(GAMEEXE) ifeq ($(strip $(useperl)),true) buildperl.o : buildperl.c $(CC) -c -o $@ $< $(CFLAGS) $(CCPERL) endif ifeq ($(strip $(usedlls)),true) $(ENGINEDLL) : $(ENGINEOBJS) $(LINKER) -shared -o $(ENGINEDLL) $(LDFLAGS) $(ENGINEOBJS) $(NETDLL) : $(NETOBJS) $(LINKER) -shared -o $(NETDLL) $(LDFLAGS) $(NETOBJS) endif $(GAMEEXE) : $(ENGINEDLL) $(NETDLL) $(GAMEOBJS) $(PERLOBJS) $(LINKER) -o $(GAMEEXE) $(LDFLAGS) $(LDPERL) $(PERLOBJS) $(GAMEOBJS) $(ENGINEDLL) $(NETDLL) $(BUILDEXE) : $(ENGINEDLL) $(BUILDOBJS) $(LINKER) -o $(BUILDEXE) $(LDFLAGS) $(BUILDOBJS) $(ENGINEDLL) listclean: @echo "A 'make clean' would remove" $(CLEANUP) distclean: clean clean: rm -f $(CLEANUP) #-----------------------------------------------------------------------------# # This section is pretty much just for Ryan's use to make distributions. # You Probably Should Not Touch. #-----------------------------------------------------------------------------# # These are the files needed in a binary distribution, regardless of what # platform is being used. BINSCOMMON = build$(strip $(EXE_EXT)) game$(strip $(EXE_EXT)) BINSCOMMON += ascboard.map boards.map evilal.map kensig.map nsnoal.map BINSCOMMON += test.map nukeland.map BINSCOMMON += stuff.dat BINSCOMMON += BUILDLIC.TXT BINSCOMMON += names.h package: clean cd .. ; zip -9rz ./BUILD-engine-$(shell date +%m%d%Y).zip buildengine -x "*CVS*" < buildengine/FILEID.DIZ ifeq ($(strip $(cygwin)),true) msbins: win32bins dosbins win32bins: wmake -f Makefile.w32 clean wmake -f Makefile.w32 cp $(SDL_LIB_DIR)/SDL.dll . echo -e "\r\n\r\n\r\nHEY YOU.\r\n\r\n\r\nTake a look at README-win32bins.txt FIRST.\r\n\r\n\r\n--ryan. (icculus@clutteredmind.org)\r\n\r\n" |zip -9rz ../BUILD-win32bins-$(shell date +%m%d%Y).zip $(BINSCOMMON) SDL.dll README-win32bins.txt README CHANGELOG dosbins: wmake -f Makefile.dos clean wmake -f Makefile.dos cp C:/WATCOM/BINW/DOS4GW.EXE . echo -e "\r\n\r\n\r\nHEY YOU.\r\n\r\n\r\nTake a look at README-dosbins.txt FIRST.\r\n\r\n\r\n--ryan. (icculus@clutteredmind.org)\r\n\r\n" |zip -9rz ../BUILD-dosbins-$(shell date +%m%d%Y).zip $(BINSCOMMON) README-dosbins.txt README CHANGELOG DOS4GW.EXE else msbins: nocygwin win32bins: nocygwin dosbins: nocygwin endif nocygwin: @echo This must be done on a Windows box in the Cygwin environment. #-----------------------------------------------------------------------------# # End packaging section. #-----------------------------------------------------------------------------# # end of Makefile ...