duke3d/Makefile

203 lines
4.7 KiB
Makefile
Executable File

#-----------------------------------------------------------------------------#
# 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 *~