summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source
diff options
context:
space:
mode:
authorSteven Noonan <steven@uplinklabs.net>2009-10-16 08:41:44 -0700
committerSteven Noonan <steven@uplinklabs.net>2009-10-16 09:55:46 -0700
commit37d39dff8f3762ea2b9a03bb8a8b66f7b055327c (patch)
treea678593dac20dddeb1a84d48cdd7ecd02b9849f8 /crawl-ref/source
parent0a624bcd948148817226c9585db7ce16bf5cb599 (diff)
downloadcrawl-ref-37d39dff8f3762ea2b9a03bb8a8b66f7b055327c.tar.gz
crawl-ref-37d39dff8f3762ea2b9a03bb8a8b66f7b055327c.zip
makefiles & contribs: add support for MinGW tiles builds
Incredibly hairy to get this to work, largely because MinGW's GCC is picky about the link order, among other things. But now we have a working build! Signed-off-by: Steven Noonan <steven@uplinklabs.net>
Diffstat (limited to 'crawl-ref/source')
-rw-r--r--crawl-ref/source/contrib/.gitignore9
-rw-r--r--crawl-ref/source/contrib/Makefile138
m---------crawl-ref/source/contrib/lua0
m---------crawl-ref/source/contrib/pcre0
m---------crawl-ref/source/contrib/sqlite0
m---------crawl-ref/source/contrib/zlib0
-rw-r--r--crawl-ref/source/makefile153
-rw-r--r--crawl-ref/source/rltiles/makefile.unix19
8 files changed, 235 insertions, 84 deletions
diff --git a/crawl-ref/source/contrib/.gitignore b/crawl-ref/source/contrib/.gitignore
index 4457c4298a..d6fb5fa154 100644
--- a/crawl-ref/source/contrib/.gitignore
+++ b/crawl-ref/source/contrib/.gitignore
@@ -1,6 +1,9 @@
# Xcode build outputs
-Frameworks
+/Frameworks
# Visual C++ outputs
-bin
-obj
+/bin
+/obj
+
+# Locally built contribs
+/install
diff --git a/crawl-ref/source/contrib/Makefile b/crawl-ref/source/contrib/Makefile
new file mode 100644
index 0000000000..77e97e5778
--- /dev/null
+++ b/crawl-ref/source/contrib/Makefile
@@ -0,0 +1,138 @@
+uname_S := $(shell uname -s)
+PREFIX:=$(shell pwd)/install
+
+all: lua sqlite sdl sdl-image freetype libpng pcre zlib
+
+.PHONY: lua sqlite sdl sdl-image freetype libpng pcre zlib
+
+clean:
+ rm -rf $(PREFIX)
+ -make -C freetype distclean
+ -make -C libpng distclean
+ -make -C lua clean
+ -make -C sdl distclean
+ -make -C sdl-image distclean
+ -make -C sqlite clean
+ -make -C pcre clean
+ -make -C zlib distclean
+
+#
+# Check for GNU Make >=3.80
+#
+eval_available :=
+$(eval eval_available := T)
+ifneq ($(eval_available),T)
+ifneq (,$(findstring MINGW,$(uname_S)))
+ $(error FreeType needs GNU Make 3.80 or later. Get this from http://prdownloads.sourceforge.net/mingw/make-3.81-MSYS-1.0.11-2.tar.bz2)
+else
+ $(error FreeType's build system needs GNU Make 3.80 or later)
+endif
+endif
+
+
+#
+# FreeType 2
+#
+freetype/objs/.libs/libfreetype.a: $(PREFIX)/lib/libz.a
+ cd freetype && ./configure --prefix=$(PREFIX) --with-zlib=$(PREFIX) --enable-static --disable-shared
+ @+$(MAKE) -C freetype
+
+$(PREFIX)/lib/libfreetype.a: freetype/objs/.libs/libfreetype.a
+ @$(MAKE) -C freetype install
+
+freetype: $(PREFIX)/lib/libfreetype.a
+
+
+#
+# Lua
+#
+lua/src/liblua.a:
+ @+$(MAKE) -C lua/src crawl_unix
+
+$(PREFIX)/lib/liblua.a: lua/src/liblua.a
+ @$(MAKE) -C lua/src install prefix=$(PREFIX)
+
+lua: $(PREFIX)/lib/liblua.a
+
+
+#
+# SQLite
+#
+sqlite/libsqlite3.a:
+ @+$(MAKE) -C sqlite
+
+$(PREFIX)/lib/libsqlite3.a: sqlite/libsqlite3.a
+ @$(MAKE) -C sqlite install prefix=$(PREFIX)
+
+sqlite: $(PREFIX)/lib/libsqlite3.a
+
+
+#
+# PCRE
+#
+pcre/libpcre.a:
+ @+$(MAKE) -C pcre
+
+$(PREFIX)/lib/libpcre.a: pcre/libpcre.a
+ @$(MAKE) -C pcre install prefix=$(PREFIX)
+
+pcre: $(PREFIX)/lib/libpcre.a
+
+
+#
+# libpng
+#
+libpng/.libs/libpng.a: $(PREFIX)/lib/libz.a
+ cd libpng && ./configure --prefix=$(PREFIX) --enable-static --disable-shared LDFLAGS="-L$(PREFIX)/lib"
+ @+$(MAKE) -C libpng
+
+$(PREFIX)/lib/libpng.a: libpng/.libs/libpng.a
+ @$(MAKE) -C libpng install
+
+libpng: $(PREFIX)/lib/libpng.a
+
+
+#
+# SDL
+#
+sdl/build/.libs/libSDL.a:
+ cd sdl && ./configure --prefix=$(PREFIX) --enable-static --disable-shared
+ @+$(MAKE) -C sdl
+
+$(PREFIX)/lib/libSDL.a: sdl/build/.libs/libSDL.a
+ @$(MAKE) -C sdl install
+ifneq (,$(findstring MINGW,$(uname_S)))
+#
+# Very hackish fix for MinGW
+ sed 's/-mwindows/-lwinmm -lpng -lz -mwindows/' install/bin/sdl-config > install/bin/sdl-config.fixed
+ mv install/bin/sdl-config.fixed install/bin/sdl-config
+ chmod 755 install/bin/sdl-config
+endif
+
+sdl: $(PREFIX)/lib/libSDL.a
+
+
+#
+# SDL_image
+#
+sdl-image/.libs/libSDL_image.a: $(PREFIX)/lib/libpng.a
+ cd sdl-image && ./configure --prefix=$(PREFIX) --with-sdl-prefix=$(PREFIX) --enable-static --disable-shared --enable-bmp --enable-png LDFLAGS="-L$(PREFIX)/lib -lpng -lz" CPPFLAGS="-I$(PREFIX)/include"
+ @+$(MAKE) -C sdl-image
+
+$(PREFIX)/lib/libSDL_image.a: sdl-image/.libs/libSDL_image.a
+ @$(MAKE) -C sdl-image install
+
+sdl-image: $(PREFIX)/lib/libSDL_image.a
+
+
+#
+# zlib
+#
+zlib/libz.a:
+ cd zlib && ./configure --prefix=$(PREFIX)
+ @+$(MAKE) -C zlib
+
+$(PREFIX)/lib/libz.a: zlib/libz.a
+ @$(MAKE) -C zlib install
+
+zlib: $(PREFIX)/lib/libz.a
diff --git a/crawl-ref/source/contrib/lua b/crawl-ref/source/contrib/lua
-Subproject 3a5124b6a7630ba5bb0226a20ae61561b06a7b0
+Subproject bdb641df6b1d7c73e2df36b0fc7e5baeeba5712
diff --git a/crawl-ref/source/contrib/pcre b/crawl-ref/source/contrib/pcre
-Subproject c530f39e65b1cb4a9a18b4557a1ec46e1a78a81
+Subproject ea54053156083f38f70c0f0355027e150717b9c
diff --git a/crawl-ref/source/contrib/sqlite b/crawl-ref/source/contrib/sqlite
-Subproject 6316c9fe38d295b36773db1bfcb2e7c8971cbe0
+Subproject 206ea07a66e23fe3322862e4140a3adc383b052
diff --git a/crawl-ref/source/contrib/zlib b/crawl-ref/source/contrib/zlib
-Subproject e8eae3783f019b8ebb7dcca47e61da41dbcae1b
+Subproject b28fa82dc33233e8239e0397dc58893eba0fc19
diff --git a/crawl-ref/source/makefile b/crawl-ref/source/makefile
index 55a516ea56..8aa6654d4a 100644
--- a/crawl-ref/source/makefile
+++ b/crawl-ref/source/makefile
@@ -37,7 +37,7 @@ MAKEFLAGS := --no-print-directory
#
# The GCC and GXX variables are set later.
#
-AR = ar rcu
+AR = ar
CC = $(GCC)
CXX = $(GXX)
RM = rm -f
@@ -50,6 +50,13 @@ export CXX
export CFLAGS
export MAKEFLAGS
+LIBPCRE := contrib/install/lib/libpcre.a
+LIBSDL := contrib/install/lib/libSDL.a
+LIBSDLIMAGE := contrib/install/lib/libSDL_image.a
+LIBFREETYPE := contrib/install/lib/libfreetype.a
+LIBSQLITE := contrib/install/lib/libsqlite3.a
+LIBLUA := contrib/install/lib/liblua.a
+
#
# Platform Detection
#
@@ -61,12 +68,12 @@ export MAKEFLAGS
# and non-translated values from other platforms (values from
# 'uname -s' call). So Linux is simply 'Linux', etc.
#
-UNAME_S := $(shell uname -s | cut -d'_' -f1)
+UNAME_S := $(shell uname -s)
OSNAME =
-ifeq ($(UNAME_S),MINGW32)
+ifneq (,$(findstring MINGW,$(UNAME_S)))
OSNAME = WIN32
endif
-ifeq ($(UNAME_S),CYGWIN)
+ifneq (,$(findstring CYGWIN,$(UNAME_S)))
OSNAME = WIN32
endif
ifeq ($(UNAME_S),Darwin)
@@ -94,7 +101,7 @@ OBJECTS += crash-u.o
ifneq ($(TILES),n)
OBJECTS += libgui.o tile2.o tilereg.o tilepick.o tilesdl.o tilefont.o tiletex.o tilemcache.o tilebuf.o
else
-ifneq ($(UNAME_S),MINGW32)
+ifeq (,$(findstring MINGW,$(UNAME_S)))
OBJECTS += libunix.o
else
OBJECTS += libw32c.o
@@ -147,31 +154,14 @@ INSTALLDIR := /usr/games/crawl
PCH := n
-# libpcre
-PCRESRC := contrib/pcre/
-PCRELIB := pcre
-PCRELIBA := lib$(PCRELIB).a
-FPCRELIBA := $(PCRESRC)$(PCRELIBA)
-
-# LUA
-LUASRC := contrib/lua/src/
-LUALIB := lua
-LUALIBA := lib$(LUALIB).a
-FLUALIBA := $(LUASRC)$(LUALIBA)
+LIBDBM := sqlite3
-# SQLite
-SQLSRC := contrib/sqlite/
-SQLLIB := sqlite3
-SQLLIBA := lib$(SQLLIB).a
-FSQLLIBA := $(SQLSRC)$(SQLLIBA)
+INCLUDES_L += -Icontrib/install/include
+LIB += -Lcontrib/install/lib
-LIBDBM := $(FSQLLIBA)
-EXTRA_INCLUDES += -I$(SQLSRC)
-EXTRA_DEPENDS += $(FSQLLIBA)
+LIB += -llua -l$(LIBDBM)
-LIB := -L$(LUASRC) -l$(LUALIB) $(LIBDBM)
-
-INCLUDES_L += -Iutil -I. -I$(LUASRC) $(EXTRA_INCLUDES)
+INCLUDES_L += -Iutil -I.
ifeq ($(OSNAME),MacOS)
APPLE_GCC=y
@@ -280,6 +270,10 @@ else # MacOS
# CFLAGS and LDFLAGS.
#
+ifneq (,$(findstring MINGW,$(UNAME_S)))
+CONTRIB_DEPENDS += $(LIBSDL) $(LIBSDLIMAGE) $(LIBFREETYPE)
+endif
+
ifneq ($(shell which pkg-config 2> /dev/null),)
# If pkg-config is available, it's the surest way to find where
@@ -309,17 +303,22 @@ PNG_INCLUDE := -I/opt/libpng/include
PNG_CFLAGS :=
PNG_LDFLAGS := -L/opt/libpng/lib -lpng
-FREETYPE_INCLUDE := -I/opt/freetype/include
+FREETYPE_INCLUDE := -I/opt/freetype/include -Icontrib/install/include/freetype2
FREETYPE_CFLAGS :=
FREETYPE_LDFLAGS := -L/opt/freetype/lib -lfreetype
-ifneq ($(which sdl-config 2> /dev/null),)
+SDLCONFIG := $(which sdl-config)
+ifeq ($(SDLCONFIG),)
+SDLCONFIG := $(shell pwd)/contrib/install/bin/sdl-config
+endif
+
+ifneq ($(SDLCONFIG),)
# sdl-config is our second best bet...
#
-SDL_INCLUDE := $(shell sdl-config --cflags | tr ' ' '\n' | grep ^[-]I | tr '\n' ' ')
-SDL_CFLAGS := $(shell sdl-config --cflags | tr ' ' '\n' | grep -v ^[-]I | tr '\n' ' ')
-SDL_LDFLAGS := $(shell sdl-config --libs)
+SDL_INCLUDE := $(shell $(SDLCONFIG) --cflags | tr ' ' '\n' | grep ^[-]I | tr '\n' ' ')
+SDL_CFLAGS := $(shell $(SDLCONFIG) --cflags | tr ' ' '\n' | grep -v ^[-]I | tr '\n' ' ')
+SDL_LDFLAGS := $(shell $(SDLCONFIG) --libs)
else # sdl-config
@@ -332,9 +331,13 @@ SDL_LDFLAGS := -L/opt/sdl/lib -lSDL -lSDLmain
endif # sdl-config
endif # pkg-config
-LIB += $(PNG_LDFLAGS) $(FREETYPE_LDFLAGS) $(SDL_LDFLAGS) -lSDL_image
+LIB += $(SDL_LDFLAGS) -lSDL_image $(PNG_LDFLAGS) $(FREETYPE_LDFLAGS) -lz
ifneq ($(OSNAME),MacOS)
+ifeq (,$(findstring MINGW,$(UNAME_S)))
LIB += -lGL -lGLU
+else
+LIB += -lopengl32 -lglu32
+endif
endif
DEFINES_L += $(PNG_CFLAGS) $(FREETYPE_CFLAGS) $(SDL_CFLAGS)
@@ -344,7 +347,6 @@ endif # MacOS
endif # TILES
-
ifeq ($(GCC_GTE_4_3_0),Yes)
CFWARN_L += -Wno-array-bounds
endif
@@ -413,7 +415,7 @@ endif
# Cygwin has a panic attack if we do this...
ifneq ($(OPTIMIZE),n)
-ifneq ($(UNAME_S),CYGWIN)
+ifneq (,$(findstring CYGWIN,$(UNAME_S)))
CFWARN_L += -Wuninitialized
else
CFWARN_L += -Wno-uninitialized
@@ -470,12 +472,11 @@ USE_PCRE := y
endif
ifneq ($(USE_PCRE),n)
-INCLUDES_L += -I$(PCRESRC)
DEFINES += -DREGEX_PCRE
-LIB += $(FPCRELIBA)
+LIB += -lpcre
endif
-ifneq ($(UNAME_S),MINGW32)
+ifeq (,$(findstring MINGW,$(UNAME_S)))
LIB += -l$(LIBCURS)
endif
@@ -540,27 +541,27 @@ TILEFILES = \
ORIGTILEFILES = $(TILEFILES:%=$(RLTILES)/%)
DESTTILEFILES = $(TILEFILES:%=dat/tiles/%)
-EXTRA_DEPENDS += $(DESTTILEFILES)
OBJECTS += $(TILEDEFOBJS)
endif
-GAME_DEPENDS := $(LUASRC)$(LUALIBA) $(EXTRA_DEPENDS) $(OBJECTS) $(EXTRA_OBJECTS)
+ifneq ($(USE_PCRE),n)
+CONTRIB_DEPENDS += $(LIBPCRE)
+endif
+
+CONTRIB_DEPENDS += $(LIBLUA) $(LIBSQLITE)
+
+GAME_DEPENDS := $(DESTTILEFILES) $(OBJECTS) $(EXTRA_OBJECTS) $(CONTRIB_DEPENDS)
SRC_PKG_BASE := stone_soup
SRC_VERSION := $(shell egrep 'VER_NUM *".*"' version.h | cut -d'"' -f2)
PKG_SRC_DIR := $(SRC_PKG_BASE)-$(SRC_VERSION)-src
SRC_PKG_TAR := $(PKG_SRC_DIR).tbz2
SRC_PKG_ZIP := $(PKG_SRC_DIR).zip
-ifneq ($(USE_PCRE),n)
-GAME_DEPENDS += $(FPCRELIBA)
-endif
-
PKG_TIDY_LIST := $(UTIL)*.o $(LEVCOMP) *.o \
$(UTIL)*.tab.cc $(UTIL)*.tab.h $(UTIL)*.lex.cc *.ixx
PKG_EXCLUDES := $(PWD)/misc/src-pkg-excludes.lst
-.PHONY: install clean clean-contrib clean-lua clean-sql clean-prce distclean \
- debug profile wizard
+.PHONY: all install clean clean-contrib distclean debug profile wizard
##########################################################################
@@ -601,14 +602,14 @@ endif
# The level compiler
#
+$(UTIL)levcomp.tab.cc: $(CONTRIB_DEPENDS)
+$(UTIL)levcomp.lex.cc: $(CONTRIB_DEPENDS)
+
ifeq ($(strip $(DOYACC)),y)
prebuildyacc: $(UTIL)levcomp.tab.cc $(UTIL)levcomp.tab.h $(UTIL)levcomp.lex.cc
$(QUIET_COPY)$(COPY) $^ prebuilt/
-$(UTIL)levcomp.tab.cc: .contrib-ok
-$(UTIL)levcomp.lex.cc: .contrib-ok
-
$(UTIL)levcomp.tab.cc: $(UTIL)levcomp.ypp
+@$(MAKE) -C $(UTIL) levcomp.tab.cc
@@ -667,22 +668,14 @@ clean:
+$(MAKE) -C $(UTIL) clean
$(RM) *.o *.ixx
-clean-lua:
- +$(MAKE) -C $(LUASRC) clean
-
-clean-sql:
- +$(MAKE) -C $(SQLSRC) clean
-
-clean-pcre:
- +$(MAKE) -C $(PCRESRC) clean
-
-clean-contrib: clean-lua clean-sql clean-pcre
+clean-contrib:
+ +$(MAKE) -C contrib clean
distclean: clean clean-contrib clean-rltiles
$(RM) bones.* morgue.txt scores $(GAME) *.sav core *.0* *.lab $(DEPENDENCY_MKF)
.contrib-ok:
- @for a in $(LUASRC)Makefile $(SQLSRC)Makefile $(PCRESRC)Makefile; do \
+ @for a in contrib/lua/src/Makefile contrib/sqlite/Makefile contrib/pcre/Makefile; do \
if [ ! -f $$a ]; then \
echo "The '$$a' file is missing. Have you run 'git submodule update --init'?"; \
exit 1; \
@@ -711,7 +704,7 @@ ifneq ($(PCH),n)
CC_DEP := AppHdr.h.gch
endif
-$(OBJECTS:%.o=%.cc): $(CC_DEP) $(TILEDEFHDRS)
+$(OBJECTS:%.o=%.cc): $(CC_DEP) $(TILEDEFHDRS) $(CONTRIB_DEPENDS)
%.o: %.m
$(QUIET_CXX)$(CC) $(CFLAGS) $(CFLAGS_L) -c $< -o $@
@@ -719,23 +712,35 @@ $(OBJECTS:%.o=%.cc): $(CC_DEP) $(TILEDEFHDRS)
%.o: %.cc
$(QUIET_CXX)$(CXX) $(CFLAGS) $(CFLAGS_L) -c $< -o $@
-#############################################################################
-# Build PCRE
+#
+# Contribs
+#
+.PHONY: pcre lua sqlite sdl sdl-image freetype
-$(FPCRELIBA): .contrib-ok
- +@$(MAKE) -C $(PCRESRC)
+$(LIBPCRE): .contrib-ok
+ +@$(MAKE) -C contrib pcre
+pcre: $(LIBPCRE)
-#############################################################################
-# Build Lua
+$(LIBLUA): .contrib-ok
+ +@$(MAKE) -C contrib lua
+lua: $(LIBLUA)
-$(FLUALIBA): .contrib-ok
- +@$(MAKE) -C $(LUASRC) crawl_unix
+$(LIBSQLITE): .contrib-ok
+ +@$(MAKE) -C contrib sqlite
+sqlite: $(LIBSQLITE)
-#############################################################################
-# Build SQLite
+$(LIBFREETYPE): .contrib-ok
+ +@$(MAKE) -C contrib freetype
+freetype: $(LIBFREETYPE)
+
+$(LIBSDL): .contrib-ok
+ +@$(MAKE) -C contrib sdl
+sdl: $(LIBSDL)
+
+$(LIBSDLIMAGE): .contrib-ok
+ +@$(MAKE) -C contrib sdl-image
+sdl-image: $(LIBSDLIMAGE)
-$(FSQLLIBA): .contrib-ok
- +@$(MAKE) -C $(SQLSRC)
#############################################################################
# Build unrandart data
@@ -747,7 +752,7 @@ art-data.h: art-data.txt util/art-data.pl art-func.h
#
.PHONY: rltile-build
-rltile-build:
+rltile-build: $(CONTRIB_DEPENDS)
$(MAKE) -C $(RLTILES) -f makefile.unix all
$(TILEDEFSRCS): rltile-build
diff --git a/crawl-ref/source/rltiles/makefile.unix b/crawl-ref/source/rltiles/makefile.unix
index b64c673966..7db3c36823 100644
--- a/crawl-ref/source/rltiles/makefile.unix
+++ b/crawl-ref/source/rltiles/makefile.unix
@@ -18,14 +18,19 @@ LDFLAGS := -F/Library/Frameworks $(SDL_LDFLAGS) $(PNG_LDFLAGS)
else
-SDL_CFLAGS := $(shell sdl-config --cflags)
-SDL_LDFLAGS := $(shell sdl-config --libs)
+SDLCONFIG := $(shell which sdl-config 2> /dev/null)
+ifeq ($(SDLCONFIG),)
+SDLCONFIG := $(shell pwd)/contrib/install/bin/sdl-config
+endif
+
+SDL_CFLAGS := $(shell $(SDLCONFIG) --cflags 2> /dev/null)
+SDL_LDFLAGS := $(shell $(SDLCONFIG) --libs 2> /dev/null)
-PNG_INCLUDE := $(shell pkg-config libpng --cflags)
-PNG_LIB := $(shell pkg-config libpng --libs)
+PNG_INCLUDE := $(shell pkg-config libpng --cflags 2> /dev/null)
+PNG_LIB := $(shell pkg-config libpng --libs 2> /dev/null)
-CFLAGS := $(SDL_CFLAGS) $(PNG_INCLUDE)
-LDFLAGS := $(SDL_LDFLAGS) $(PNGLIB) -lSDL_image -lpng
+CFLAGS := -I../contrib/install/include $(SDL_CFLAGS) $(PNG_INCLUDE)
+LDFLAGS := -L../contrib/install/lib $(SDL_LDFLAGS) -lSDL_image $(PNG_LIB) -lz
endif
@@ -68,4 +73,4 @@ distclean: clean
$(QUIET_CXX)$(CXX) $(CFLAGS) -c $< -o $@
$(TILEGEN): $(OBJECTS)
- $(QUIET_LINK)$(CXX) $(LDFLAGS) $(OBJECTS) -o $@
+ $(QUIET_LINK)$(CXX) $(OBJECTS) -o $@ $(LDFLAGS)