From 4366acb6c0483018fc5ea545fbcd05b8c42b6ba7 Mon Sep 17 00:00:00 2001 From: Yamagi Burmeister Date: Wed, 27 Jun 2012 14:50:48 +0200 Subject: [PATCH] Rework Makefile and add support for Windows --- Makefile | 89 ++++++++++++++++++++++++++++++++++++------------ tools/mkdir.exe | Bin 0 -> 32768 bytes 2 files changed, 68 insertions(+), 21 deletions(-) create mode 100644 tools/mkdir.exe diff --git a/Makefile b/Makefile index 60f3e78..de8c919 100644 --- a/Makefile +++ b/Makefile @@ -10,28 +10,32 @@ # Yamagi Quake II ist recommended. # # # # Platforms: # -# - Linux # # - FreeBSD # +# - Linux # +# - Windows # # ----------------------------------------------------- # -# Check the OS type +# Detect the OS +ifdef SystemRoot +OSTYPE := Windows +else OSTYPE := $(shell uname -s) +endif -# Some plattforms call it "amd64" and some "x86_64" +# Detect the architecture +ifeq ($(OSTYPE), Windows) +# At this time only i386 is supported on Windows +ARCH := i386 +else +# Some platforms call it "amd64" and some "x86_64" ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/amd64/x86_64/) +endif -# Refuse all other plattforms as a firewall against PEBKAC +# Refuse all other platforms as a firewall against PEBKAC # (You'll need some #ifdef for your unsupported plattform!) -ifneq ($(ARCH),i386) -ifneq ($(ARCH),x86_64) +ifeq ($(findstring $(ARCH), i386 x86_64 sparc64),) $(error arch $(ARCH) is currently not supported) endif -endif - -# ---------- - -# The compiler -CC := gcc # ---------- @@ -54,7 +58,7 @@ CC := gcc # # -MMD to generate header dependencies. CFLAGS := -O2 -fno-strict-aliasing -fomit-frame-pointer \ - -fPIC -Wall -pipe -g -MMD + -Wall -pipe -g -MMD # ---------- @@ -68,24 +72,60 @@ 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 +ifeq ($(OSTYPE), Windows) clean: @echo "===> CLEAN" - @rm -Rf build release + @-rmdir /S /Q release build +else +clean: + @echo "===> CLEAN" + ${Q}rm -Rf build release +endif # ---------- # The rogue game +ifeq ($(OSTYPE), Windows) rogue: - @echo '===> Building game.so' - @mkdir -p release/ + @echo "===> Building game.dll" + ${Q}tools/mkdir.exe -p release + $(MAKE) release/game.dll + +build/%.o: %.c + @echo "===> CC $<" + ${Q}tools/mkdir.exe -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 $<' - @mkdir -p $(@D) - @$(CC) -c $(CFLAGS) -o $@ $< + @echo "===> CC $<" + ${Q}mkdir -p $(@D) + ${Q}$(CC) -c $(CFLAGS) -o $@ $< +release/game.so : CFLAGS += -fPIC +endif + # ---------- ROGUE_OBJS_ = \ @@ -150,6 +190,7 @@ ROGUE_OBJS_ = \ src/player/weapon.o \ src/savegame/savegame.o \ src/shared/flash.o \ + src/shared/rand.o \ src/shared/shared.o # ---------- @@ -169,8 +210,14 @@ ROGUE_DEPS= $(ROGUE_OBJS:.o=.d) # ---------- +ifeq ($(OSTYPE), Windows) +release/game.dll : $(ROGUE_OBJS) + @echo "===> LD $@" + ${Q}$(CC) $(LDFLAGS) -o $@ $(ROGUE_OBJS) +else release/game.so : $(ROGUE_OBJS) - @echo '===> LD $@' - @$(CC) $(LDFLAGS) -o $@ $(ROGUE_OBJS) + @echo "===> LD $@" + ${Q}$(CC) $(LDFLAGS) -o $@ $(ROGUE_OBJS) +endif # ---------- diff --git a/tools/mkdir.exe b/tools/mkdir.exe new file mode 100644 index 0000000000000000000000000000000000000000..83e57d97a13bc1393cfea0d0c48470fdee43e0e6 GIT binary patch literal 32768 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 D*J?Bb literal 0 HcmV?d00001