#-----------------------------------------------------------------------------# # Duke3D makefile. #-----------------------------------------------------------------------------# linux_ppc := false beos := false macosx := false freebsd := false solaris := false shareware := false controls_menu := true #use_asm := true #-----------------------------------------------------------------------------# # 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 these for Cygwin at the moment. SDL_INC_DIR = /cygdrive/c/SDL/include SDL_LIB_DIR = /cygdrive/c/SDL/lib CC = gcc # need this for now. ifeq ($(strip $(beos)),true) use_asm := false endif # Don't touch anything below this line unless you know what you're doing. ifeq ($(strip $(cygwin)),autodetect) ifneq ($(strip $(shell gcc -v 2>&1 |grep "cygwin")),) cygwin := true else cygwin := false endif endif ifeq ($(strip $(cygwin)),true) 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 sdl-config --cflags) SDL_LDFLAGS := $(shell sdl-config --libs) -L. endif endif ifeq ($(strip $(macosx)),true) EXTRACFLAGS += -DPLATFORM_MACOSX=1 EXTRALDFLAGS += -lSDLmain endif ifeq ($(strip $(freebsd)),true) EXTRACFLAGS += -DPLATFORM_FREEBSD=1 SDL_CFLAGS := $(shell sdl11-config --cflags) SDL_LDFLAGS := $(shell sdl11-config --libs) -L. endif ifeq ($(strip $(linux_ppc)),true) EXTRACFLAGS += -DPLATFORM_LINUXPPC=1 endif ifneq ($(strip $(cygwin)),true) ifneq ($(strip $(macosx)),true) ifneq ($(strip $(beos)),true) EXTRACFLAGS += -DUSE_EXECINFO=1 endif endif endif ifeq ($(strip $(solaris)),true) CC = cc EXTRALDFLAGS += -lsocket -lnsl CFLAGS += -DPLATFORM_SOLARIS endif ifeq ($(strip $(shareware)),true) EXTRACFLAGS += -DVOLUMEONE else EXTRACFLAGS += -DVOLUMEALL endif ifeq ($(strip $(controls_menu)),true) EXTRACFLAGS += -DCONTROLS_CONFIG_MENU=1 endif BUILDOBJS := \ buildengine/cache1d.o \ buildengine/engine.o \ buildengine/sdl_driver.o \ buildengine/mmulti.o \ buildengine/pragmas.o \ buildengine/unix_compat.o ifeq ($(strip $(use_asm)),true) BUILDOBJS += buildengine/a_gnu.o buildengine/a_nasm.o else BUILDOBJS += buildengine/a.o endif CFLAGS=-m32 -c -g $(SDL_CFLAGS) -DUSE_SDL=1 -DPLATFORM_UNIX=1 $(EXTRACFLAGS) 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 += -W -Wall -Wno-unused -funsigned-char ifeq ($(strip $(macosx)),true) OPTIMIZE = -O3 -mdynamic-no-pic -falign-loops=16 else OPTIMIZE = -O2 endif endif # Uncomment this to compile with the Intel compiler (v6.0) #CC = icc #CFLAGS = -g $(SDL_CFLAGS) -DUSE_SDL=1 -DPLATFORM_UNIX=1 -DUSE_I386_ASM=1 $(EXTRACFLAGS) -O2 LDLIBS = -lSDL -lSDL_mixer $(EXTRALDFLAGS) ifeq ($(strip $(freebsd)),true) LDLIBS = -lSDL_mixer $(EXTRALDFLAGS) endif # !!! FIXME: Do we even need this? It doesn't fly on MacOS X. --ryan. #LDLIBS += -Wl,-E .PHONY: duke3d build buildengine clean distclean all: buildengine duke3d build %.o : %.c $(CC) $(CFLAGS) $(OPTIMIZE) -o $@ $< # Animation playback crashes due to optimization error on MacOS X. --ryan. ifeq ($(strip $(macosx)),true) animlib.o : animlib.c $(CC) $(CFLAGS) -o $@ $< endif # Animation playback crashes due to optimization error on Linux PPC. --Felipe Barriga. ifeq ($(strip $(linux_ppc)),true) animlib.o : animlib.c $(CC) $(CFLAGS) -o $@ $< endif audiolib/audiolib.a: $(MAKE) -C audiolib CC="$(CC)" CFLAGS="$(CFLAGS)" LDLIBS="$(LDLIBS)" buildengine: make -C buildengine duke3d: \ actors.o \ animlib.o \ control.o \ config.o \ game.o \ gamedef.o \ global.o \ keyboard.o \ menues.o \ player.o \ premap.o \ rts.o \ scriplib.o \ sector.o \ sounds.o \ dukemusc.o \ audiolib/audiolib.a $(CC) -m32 $^ $(BUILDOBJS) $(LDLIBS) -o $@ build: astub.o $(CC) -m32 $^ $(BUILDOBJS) buildengine/build.o $(LDLIBS) -o $@ clean: $(MAKE) -C audiolib clean $(MAKE) -C buildengine clean rm -rf duke3d build *.o distclean: clean $(MAKE) -C audiolib distclean $(MAKE) -C buildengine distclean rm -rf *~