rogue/Makefile
Yamagi Burmeister 6467137619 Switch from an arch whitelist to an "all archs are supported" approach.
The old whitelist was a leftover from the early days of YQ2. It should
run on most / all architectures, as long SDL supports them. As suggested
by smcv in issue #138 generate the OSTYPE and ARCH defines by the build
system instead of hardcoding it.

Savegame compatibility is provided by bumping the savegame version. Old
savegames are compared against the old OSTYPE and ARCH defined, new ones
against the new defines. This compatibility code should be removed
somewhere in the distant future.
2016-06-11 09:47:05 +02:00

236 lines
5.3 KiB
Makefile

# ----------------------------------------------------- #
# Makefile for the rogue game module for Quake II #
# #
# Just type "make" to compile the #
# - Ground Zero Game (game.so) #
# #
# Dependencies: #
# - None, but you need a Quake II to play. #
# While in theorie every client should work #
# Yamagi Quake II ist recommended. #
# #
# Platforms: #
# - FreeBSD #
# - Linux #
# - Mac OS X #
# - OpenBSD #
# - Windows #
# ----------------------------------------------------- #
# Detect the OS
ifdef SystemRoot
OSTYPE := Windows
else
OSTYPE := $(shell uname -s)
endif
# Special case for MinGW
ifneq (,$(findstring MINGW,$(OSTYPE)))
OSTYPE := Windows
endif
# Detect the architecture
ifeq ($(OSTYPE), Windows)
ifdef PROCESSOR_ARCHITEW6432
# 64 bit Windows
ARCH := $(PROCESSOR_ARCHITEW6432)
else
# 32 bit Windows
ARCH := $(PROCESSOR_ARCHITECTURE)
endif
else
# Normalize some abiguous ARCH strings
ARCH := $(shell uname -m | sed -e 's/i.86/i386/' -e 's/amd64/x86_64/' -e 's/^arm.*/arm/')
endif
# ----------
# Base CFLAGS.
#
# -O2 are enough optimizations.
#
# -fno-strict-aliasing since the source doesn't comply
# with strict aliasing rules and it's next to impossible
# to get it there...
#
# -fomit-frame-pointer since the framepointer is mostly
# useless for debugging Quake II and slows things down.
#
# -g to build allways with debug symbols. Please do not
# change this, since it's our only chance to debug this
# crap when random crashes happen!
#
# -fPIC for position independend code.
#
# -MMD to generate header dependencies.
ifeq ($(OSTYPE), Darwin)
CFLAGS := -O2 -fno-strict-aliasing -fomit-frame-pointer \
-Wall -pipe -g -fwrapv -arch i386 -arch x86_64
else
CFLAGS := -O2 -fno-strict-aliasing -fomit-frame-pointer \
-Wall -pipe -g -MMD -fwrapv
endif
# ----------
# Defines the operating system and architecture
CFLAGS += -DOSTYPE=\"$(OSTYPE)\" -DARCH=\"$(ARCH)\"
# ----------
# Base LDFLAGS.
ifeq ($(OSTYPE), Darwin)
LDFLAGS := -shared -arch i386 -arch x86_64
else
LDFLAGS := -shared
endif
# ----------
# Builds everything
all: rogue
# ----------
# When make is invoked by "make VERBOSE=1" print
# the compiler and linker commands.
ifdef VERBOSE
Q :=
else
Q := @
endif
# ----------
# Phony targets
.PHONY : all clean rogue
# ----------
# Cleanup
clean:
@echo "===> CLEAN"
${Q}rm -Rf build release
# ----------
# The rogue game
ifeq ($(OSTYPE), Windows)
rogue:
@echo "===> Building game.dll"
${Q}mkdir -p release
$(MAKE) release/game.dll
build/%.o: %.c
@echo "===> CC $<"
${Q}mkdir -p $(@D)
${Q}$(CC) -c $(CFLAGS) -o $@ $<
else
rogue:
@echo "===> Building game.so"
${Q}mkdir -p release
$(MAKE) release/game.so
build/%.o: %.c
@echo "===> CC $<"
${Q}mkdir -p $(@D)
${Q}$(CC) -c $(CFLAGS) -o $@ $<
release/game.so : CFLAGS += -fPIC
endif
# ----------
ROGUE_OBJS_ = \
src/g_ai.o \
src/g_chase.o \
src/g_cmds.o \
src/g_combat.o \
src/g_func.o \
src/g_items.o \
src/g_main.o \
src/g_misc.o \
src/g_monster.o \
src/g_newai.o \
src/g_newdm.o \
src/g_newfnc.o \
src/g_newtarg.o \
src/g_newtrig.o \
src/g_newweap.o \
src/g_phys.o \
src/g_spawn.o \
src/g_sphere.o \
src/g_svcmds.o \
src/g_target.o \
src/g_trigger.o \
src/g_turret.o \
src/g_utils.o \
src/g_weapon.o \
src/dm/ball.o \
src/dm/tag.o \
src/monster/berserker/berserker.o \
src/monster/boss2/boss2.o \
src/monster/boss3/boss3.o \
src/monster/boss3/boss31.o \
src/monster/boss3/boss32.o \
src/monster/brain/brain.o \
src/monster/carrier/carrier.o \
src/monster/chick/chick.o \
src/monster/flipper/flipper.o \
src/monster/float/float.o \
src/monster/flyer/flyer.o \
src/monster/gladiator/gladiator.o \
src/monster/gunner/gunner.o \
src/monster/hover/hover.o \
src/monster/infantry/infantry.o \
src/monster/insane/insane.o \
src/monster/medic/medic.o \
src/monster/misc/move.o \
src/monster/mutant/mutant.o \
src/monster/parasite/parasite.o \
src/monster/soldier/soldier.o \
src/monster/stalker/stalker.o \
src/monster/supertank/supertank.o \
src/monster/tank/tank.o \
src/monster/turret/turret.o \
src/monster/widow/widow.o \
src/monster/widow/widow2.o \
src/player/client.o \
src/player/hud.o \
src/player/trail.o \
src/player/view.o \
src/player/weapon.o \
src/savegame/savegame.o \
src/shared/flash.o \
src/shared/rand.o \
src/shared/shared.o
# ----------
# Rewrite pathes to our object directory
ROGUE_OBJS = $(patsubst %,build/%,$(ROGUE_OBJS_))
# ----------
# Generate header dependencies
ROGUE_DEPS= $(ROGUE_OBJS:.o=.d)
# ----------
# Suck header dependencies in
-include $(ROGUE_DEPS)
# ----------
ifeq ($(OSTYPE), Windows)
release/game.dll : $(ROGUE_OBJS)
@echo "===> LD $@"
${Q}$(CC) $(LDFLAGS) -o $@ $(ROGUE_OBJS)
else
release/game.so : $(ROGUE_OBJS)
@echo "===> LD $@"
${Q}$(CC) $(LDFLAGS) -o $@ $(ROGUE_OBJS)
endif
# ----------