From 81f3da48038d6db0edcd026f77616aee71bb1bed Mon Sep 17 00:00:00 2001 From: evktalo Date: Sun, 19 Jul 2009 15:00:53 +0000 Subject: Separate makefiles for cross-compiling the Windows builds on crawl.develz.org. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@10322 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/source/makefile | 7 +- crawl-ref/source/makefile.mgw_unix | 238 +++++++++++++++++++++++++++ crawl-ref/source/makefile_tiles.mgw_unix | 274 +++++++++++++++++++++++++++++++ 3 files changed, 518 insertions(+), 1 deletion(-) create mode 100644 crawl-ref/source/makefile.mgw_unix create mode 100644 crawl-ref/source/makefile_tiles.mgw_unix diff --git a/crawl-ref/source/makefile b/crawl-ref/source/makefile index 03cc3dba7a..5d809d31c9 100644 --- a/crawl-ref/source/makefile +++ b/crawl-ref/source/makefile @@ -11,11 +11,16 @@ MAKEFILE ?= makefile.unix #MAKEFILE ?= makefile_tiles.mgw #MAKEFILE ?= makefile_tiles.unix +#These are for cross-compiling purposes on crawl.develz.org, here for convenience: + +#MAKEFILE ?= makefile.mgw_unix +#MAKEFILE ?= makefile_tiles.mgw_unix + # number of concurrent jobs -- good value is (#_of_CPUs * 2) + 1 # cuts build time a lot on multi-cpu machines # Note: do not use enable this for builds of the tiles version. #OTHER=-j2 - + all: $(MAKE) $(OTHER) -f $(MAKEFILE) diff --git a/crawl-ref/source/makefile.mgw_unix b/crawl-ref/source/makefile.mgw_unix new file mode 100644 index 0000000000..22399d06cf --- /dev/null +++ b/crawl-ref/source/makefile.mgw_unix @@ -0,0 +1,238 @@ +# -*- Makefile -*- for Dungeon Crawl (Cross-compiling MinGW for crawl.develz.org) + +# makefile.obj includes a list of object files needed to build Crawl. +include makefile.obj + +OPATH := build + +# need .exe so make will find the right file +APPNAME = $(OPATH)/crawl.exe +CXX = i586-mingw32msvc-g++ +DELETE = rm -f +COPY = cp +OS_TYPE = WIN32CONSOLE + +ifeq ($(INSTALLDIR),) +INSTALLDIR := crawl-mingw32 +endif + +# If you don't have flex or bison, set DOYACC to N or empty. +DOYACC := n + +LEX := flex +YACC := bison -y + +ifeq ($(LUASRC),) +LUASRC := util/lua/src +endif + +LUALIB = lua +LUALIBA = lib$(LUALIB).a + +SQLSRC := util/sqlite +SQLLIB := sqlite3 +SQLIBA := lib$(SQLLIB).a +FSQLLIBA := $(SQLLIB)/$(SQLIBA) + +PCRESRC := util/pcre +PCRELIB := pcre +PCRELIBA := lib$(PCRELIB).a + +LIB = -static -L$(HOME)/source/mingw32/lib -lwinmm -L$(LUASRC) -l$(LUALIB) -L$(SQLSRC) -l$(SQLLIB) -L$(PCRESRC) -l$(PCRELIB) +INCLUDES := -Iutil -I. -I$(HOME)/source/mingw32/include -I$(LUASRC) -I$(SQLSRC) -I$(PCRESRC) + +CFWARN := -Wwrite-strings + +CFOTHERS := -fsigned-char \ + -fstrict-aliasing \ + -pedantic \ + -O2 \ + -D$(OS_TYPE) $(EXTRA_FLAGS) \ + -DWINMM_PLAY_SOUNDS -DCLUA_BINDINGS -DWIZARD + +CFLAGS := $(INCLUDES) $(CFWARN) $(CFOTHERS) +YCFLAGS := $(INCLUDES) $(CFOTHERS) + +OBJECTS := $(OBJECTS) libw32c.o crash-w.o + +LDFLAGS = + +#LIB = -lcurso -lpano + +UTIL = util/ + +YTABC := levcomp.tab.c +YTABH := levcomp.tab.h + + +ifeq ($(LEX),) +DOYACC := +endif + +ifeq ($(YACC),) +DOYACC := +endif + +RESOURCE := $(UTIL)crawl.rc +RESOURCEOBJ := crawlres.o +WINDRES := i586-mingw32msvc-windres + +# Do the levcomp stuff first because that's the most likely to fail. +OBJECTS := levcomp.tab.o levcomp.lex.o \ + $(OBJECTS) $(RESOURCEOBJ) + +OBJECTS := $(foreach file,$(OBJECTS),$(OPATH)/$(file)) + +GAME_DEPENDS := prepare $(LUASRC)/$(LUALIBA) $(FSQLLIBA) $(PCRESRC)/$(PCRELIBA) $(OBJECTS) + +########################################################################## + +all: $(APPNAME) + +prepare: + mkdir -p $(OPATH) + +DEPENDENCY_MKF := makefile.dep +-include $(DEPENDENCY_MKF) + +########################################################################## +# The level compiler +# +ifeq ($(DOYACC),y) + +# [ds] A plague on the broken copy command on Windoze. +prebuildyacc: $(UTIL)levcomp.lex.cc $(UTIL)levcomp.tab.cc $(UTIL)levcomp.tab.h + $(COPY) $^ prebuilt/ + +$(UTIL)levcomp.tab.cc: $(UTIL)levcomp.ypp + cd $(UTIL) && $(YACC) -d -b levcomp levcomp.ypp \ + && mv $(YTABC) levcomp.tab.cc || false + +$(UTIL)levcomp.lex.cc: $(UTIL)levcomp.lpp + cd $(UTIL) && $(LEX) -olevcomp.lex.cc levcomp.lpp + +else + +$(UTIL)levcomp.tab.cc: prebuilt/levcomp.tab.cc + $(COPY) prebuilt/*.h $(UTIL) + $(COPY) $< $@ + +$(UTIL)levcomp.lex.cc: prebuilt/levcomp.lex.cc + $(COPY) $< $@ + +endif + +########################################################################## + +install: $(APPNAME) +ifneq ($(OPATH),$(INSTALLDIR)) + mkdir -p $(INSTALLDIR) + $(COPY) $(APPNAME) ${INSTALLDIR} +endif + mkdir -p $(INSTALLDIR)/dat + mkdir -p $(INSTALLDIR)/dat/clua + mkdir -p $(INSTALLDIR)/dat/database + mkdir -p $(INSTALLDIR)/dat/descript + mkdir -p $(INSTALLDIR)/dat/lua + mkdir -p $(INSTALLDIR)/docs + mkdir -p $(INSTALLDIR)/settings + $(COPY) dat/*.des $(INSTALLDIR)/dat/ + $(COPY) dat/clua/*.lua $(INSTALLDIR)/dat/clua/ + $(COPY) dat/database/*.txt $(INSTALLDIR)/dat/database/ + $(COPY) dat/descript/*.txt $(INSTALLDIR)/dat/descript/ + $(COPY) dat/lua/*.lua $(INSTALLDIR)/dat/lua/ + $(COPY) ../docs/*.txt $(INSTALLDIR)/docs/ + $(COPY) ../docs/changes.stone_soup $(INSTALLDIR)/docs/ + $(COPY) ../CREDITS.txt $(INSTALLDIR)/ + $(COPY) ../README.txt ../README.pdf $(INSTALLDIR)/ + $(COPY) ../licence.txt $(INSTALLDIR)/LICENCE.txt + $(COPY) ../settings/* $(INSTALLDIR)/settings/ + +clean: + $(DELETE) $(OPATH)/*.o + $(DELETE) $(UTIL)*.o + $(DELETE) $(UTIL)*.exe + $(DELETE) $(UTIL)*.lex.cc + $(DELETE) $(UTIL)*.tab.cc + $(DELETE) $(UTIL)*.tab.h + $(DELETE) $(UTIL)*.tab.c + $(DELETE) *.ixx + +clean-lua: + cd $(LUASRC) && $(MAKE) clean_win + +clean-sql: + cd $(SQLSRC) && $(MAKE) clean + +clean-pcre: + cd $(PCRESRC) && $(MAKE) clean + +distclean: clean clean-lua clean-sql clean-pcre + $(DELETE) $(OPATH)/*.o + $(DELETE) *.o + $(DELETE) bones.* + $(DELETE) $(OPATH)/bones.* + $(DELETE) morgue.txt + $(DELETE) $(OPATH)/morgue.txt + $(DELETE) scores + $(DELETE) $(OPATH)/scores + $(DELETE) crawl.exe + $(DELETE) $(APPNAME) + $(DELETE) *.sav + $(DELETE) $(OPATH)/*.sav + $(DELETE) core + $(DELETE) $(OPATH)/core + $(DELETE) *.0* + $(DELETE) $(OPATH)/*.0* + $(DELETE) *.lab + $(DELETE) $(OPATH)/*.lab + +$(APPNAME): $(GAME_DEPENDS) + ${CXX} ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(APPNAME) $(LIB) + i586-mingw32msvc-strip $(APPNAME) + +debug: $(GAME_DEPENDS) + ${CXX} ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(APPNAME) $(LIB) + +profile: $(GAME_DEPENDS) + ${CXX} -g -p ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(APPNAME) $(LIB) + +$(OPATH)/%.o: %.cc + ${CXX} ${CFLAGS} -o $@ -c $< + +$(OPATH)/%.o: $(UTIL)%.cc + $(CXX) $(YCFLAGS) -o $@ -c $< + +############################################################################# +# Build Lua + +$(LUASRC)/$(LUALIBA): + @echo Building Lua... + @cd $(LUASRC) && $(MAKE) crawl_mingw + +############################################################################# +# Build SQLite + +$(FSQLLIBA): + @echo Building SQLite + cd $(SQLSRC) && $(MAKE) + +############################################################################# +# Build unrandart data +art-data.h: art-data.txt util/art-data.pl art-func.h + util/art-data.pl + +############################################################################# +# Build PCRE + +$(PCRESRC)/$(PCRELIBA): + @echo Building PCRE... + @cd $(PCRESRC) && $(MAKE) + +########################################################################## +# Resources +# + +$(OPATH)/$(RESOURCEOBJ): $(RESOURCE) + $(WINDRES) $< $@ + diff --git a/crawl-ref/source/makefile_tiles.mgw_unix b/crawl-ref/source/makefile_tiles.mgw_unix new file mode 100644 index 0000000000..e1c5996b95 --- /dev/null +++ b/crawl-ref/source/makefile_tiles.mgw_unix @@ -0,0 +1,274 @@ +# -*- Makefile -*- for Dungeon Crawl (Cross-compiling MinGW for crawl.develz.org) + +# makefile.obj includes a list of object files needed to build Crawl. +include makefile.obj + +OPATH := build + +# need .exe so make will find the right file +APPNAME = $(OPATH)/crawl.exe +CXX = i586-mingw32msvc-g++ +DELETE = rm -f +COPY = cp +OS_TYPE = WIN32TILES +EXTRA_DEFINES = -DUSE_TILE -DCLUA_BINDINGS -DWIZARD + +SDL_PREFIX ?= $(HOME)/source/mingw32 +SDL_CFLAGS := -D_GNU_SOURCE=1 -Dmain=SDL_main -I$(SDL_PREFIX)/include/SDL +SDL_LDFLAGS := -lmingw32 -lSDLmain -lSDL.dll -lSDL_image -lopengl32 -lglu32 + +ifeq ($(INSTALLDIR),) +INSTALLDIR := crawl-mingw32 +endif + +# If you don't have flex or bison, set DOYACC to N or empty. +DOYACC := n + +LEX := flex +YACC := bison -y + +ifeq ($(LUASRC),) +LUASRC := util/lua/src +endif + +LUALIB = lua +LUALIBA = lib$(LUALIB).a + +SQLSRC := util/sqlite +SQLLIB := sqlite3 +SQLIBA := lib$(SQLLIB).a +FSQLLIBA := $(SQLLIB)/$(SQLIBA) + +PCRESRC := util/pcre +PCRELIB := pcre +PCRELIBA := lib$(PCRELIB).a + +RLTILES = rltiles +EXTRA_INCLUDES += -I$(RLTILES) + +TILEDEFS = dngn main player unrand +TILEDEFPRES = $(TILEDEFS:%=$(RLTILES)/tiledef-%) +TILEDEFOBJS = $(TILEDEFPRES:%=%.o) +TILEDEFSRCS = $(TILEDEFPRES:%=%.cc) +TILEDEFHDRS = $(TILEDEFPRES:%=%.h) + +OBJECTS += $(TILEDEFOBJS) + +TILEFILES = \ + main.png \ + player.png \ + dngn.png + +DESTTILEFILES = $(TILEFILES:%=dat/tiles/%) + +LIB = -static -L$(HOME)/source/mingw32/lib -lwinmm -mwindows -lcomctl32 -L$(LUASRC) -l$(LUALIB) -L$(SQLSRC) -l$(SQLLIB) -L$(PCRESRC) -l$(PCRELIB) $(SDL_LDFLAGS) -lfreetype +INCLUDES := -Iutil -I. -I$(HOME)/source/mingw32/include -I$(LUASRC) -I$(SQLSRC) -I$(PCRESRC) $(EXTRA_INCLUDES) + +CFWARN := -Wwrite-strings + +CFOTHERS := -fsigned-char \ + -fstrict-aliasing \ + -pedantic \ + -O2 \ + -D$(OS_TYPE) $(EXTRA_FLAGS) \ + -DWINMM_PLAY_SOUNDS -DCLUA_BINDINGS \ + -DWINVER=0x0400 -D_WIN32_IE=0x0400 \ + $(EXTRA_DEFINES) + +CFLAGS := $(INCLUDES) $(CFWARN) $(CFOTHERS) $(SDL_CFLAGS) +YCFLAGS := $(INCLUDES) $(CFOTHERS) + +OBJECTS := $(OBJECTS) libgui.o tilepick.o tile2.o tilereg.o tilesdl.o tilefont.o tiletex.o tilemcache.o tilebuf.o crash-w.o + +LDFLAGS = + +UTIL = util/ + +YTABC := levcomp.tab.c +YTABH := levcomp.tab.h + +ifeq ($(LEX),) +DOYACC := +endif + +ifeq ($(YACC),) +DOYACC := +endif + +RESOURCE := $(UTIL)crawl.rc +RESOURCEOBJ := crawlres.o +WINDRES := i586-mingw32msvc-windres + +# Do the levcomp stuff first because that's the most likely to fail. +OBJECTS := levcomp.tab.o levcomp.lex.o \ + $(OBJECTS) $(RESOURCEOBJ) + +OBJECTS := $(foreach file,$(OBJECTS),$(OPATH)/$(file)) + +GAME_DEPENDS := prepare $(LUASRC)/$(LUALIBA) $(FSQLLIBA) $(PCRESRC)/$(PCRELIBA) $(TILEHEADERS) $(DESTTILEFILES) $(OBJECTS) + +########################################################################## + +all: $(APPNAME) + +prepare: + mkdir -p $(OPATH) + +DEPENDENCY_MKF := makefile.dep +-include $(DEPENDENCY_MKF) + +########################################################################## +# The level compiler +# +ifeq ($(DOYACC),y) + +# [ds] A plague on the broken copy command on Windoze. +prebuildyacc: $(UTIL)levcomp.lex.cc $(UTIL)levcomp.tab.cc $(UTIL)levcomp.tab.h + $(COPY) $^ prebuilt/ + +$(UTIL)levcomp.tab.cc: $(UTIL)levcomp.ypp + cd $(UTIL) && $(YACC) -d -b levcomp levcomp.ypp \ + && mv $(YTABC) levcomp.tab.cc || false + +$(UTIL)levcomp.lex.cc: $(UTIL)levcomp.lpp + cd $(UTIL) && $(LEX) -olevcomp.lex.cc levcomp.lpp + +else + +$(UTIL)levcomp.tab.cc: prebuilt/levcomp.tab.cc + $(COPY) prebuilt/*.h $(UTIL) + $(COPY) $< $@ + +$(UTIL)levcomp.lex.cc: prebuilt/levcomp.lex.cc + $(COPY) $< $@ +endif + +########################################################################## +# RLTiles +# + +ORIGTILEFILES = $(TILEFILES:%=$(RLTILES)/%) + +makerltiles: + pushd $(RLTILES) && $(MAKE) -f makefile.unix all + mkdir -p $(OPATH)/rltiles + +$(TILEDEFSRCS): makerltiles + +$(TILEDEFHDRS): makerltiles + +$(ORIGTILEFILES): makerltiles + +dat/tiles/%.png: rltiles/%.png + mkdir -p dat/tiles + $(COPY) $< $@ + +clean-rltiles: + pushd $(RLTILES) && $(MAKE) -f makefile.unix distclean + +########################################################################## + + +########################################################################## + +install: $(APPNAME) +ifneq ($(OPATH),$(INSTALLDIR)) + mkdir -p $(INSTALLDIR) + $(COPY) $(APPNAME) ${INSTALLDIR} +endif + mkdir -p $(INSTALLDIR)/dat + mkdir -p $(INSTALLDIR)/dat/clua + mkdir -p $(INSTALLDIR)/dat/database + mkdir -p $(INSTALLDIR)/dat/descript + mkdir -p $(INSTALLDIR)/dat/lua + mkdir -p $(INSTALLDIR)/dat/tiles + mkdir -p $(INSTALLDIR)/docs + mkdir -p $(INSTALLDIR)/settings + $(COPY) dat/*.des $(INSTALLDIR)/dat/ + $(COPY) dat/clua/*.lua $(INSTALLDIR)/dat/clua/ + $(COPY) dat/database/*.txt $(INSTALLDIR)/dat/database/ + $(COPY) dat/descript/*.txt $(INSTALLDIR)/dat/descript/ + $(COPY) dat/lua/*.lua $(INSTALLDIR)/dat/lua/ + $(COPY) dat/tiles/*.png dat/tiles/*.ttf $(INSTALLDIR)/dat/tiles/ + $(COPY) ../docs/*.txt $(INSTALLDIR)/docs/ + $(COPY) ../docs/changes.stone_soup $(INSTALLDIR)/docs/ + $(COPY) ../CREDITS.txt $(INSTALLDIR)/ + $(COPY) ../README.txt ../README.pdf $(INSTALLDIR)/ + $(COPY) ../licence.txt $(INSTALLDIR)/LICENCE.txt + $(COPY) ../settings/* $(INSTALLDIR)/settings/ + +clean: + $(DELETE) $(OPATH)/*.o + $(DELETE) $(UTIL)*.o + $(DELETE) $(UTIL)*.exe + $(DELETE) $(UTIL)*.lex.cc + $(DELETE) $(UTIL)*.tab.cc + $(DELETE) $(UTIL)*.tab.h + $(DELETE) $(UTIL)*.tab.c + $(DELETE) *.ixx + +clean-lua: + cd $(LUASRC) && $(MAKE) clean_win + +clean-sql: + cd $(SQLSRC) && $(MAKE) clean + +clean-pcre: + cd $(PCRESRC) && $(MAKE) clean + +distclean: clean clean-lua clean-sql clean-pcre clean-rltiles + +$(APPNAME): $(GAME_DEPENDS) + ${CXX} ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(APPNAME) $(LIB) + i586-mingw32msvc-strip $(APPNAME) + +debug: $(GAME_DEPENDS) + ${CXX} ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(APPNAME) $(LIB) + +profile: $(GAME_DEPENDS) + ${CXX} -g -p ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(APPNAME) $(LIB) + +$(OPATH)/%.o: %.cc $(TILEDEFHDRS) + ${CXX} ${CFLAGS} -o $@ -c $< + +# STL is bad in debug. Always compile this file with optimizations. +$(OPATH)/tilebuf.o: tilebuf.cc $(TILEDEFHDRS) + ${CXX} ${CFLAGS} -O2 -o $@ -c $< + + +$(OPATH)/%.o: $(UTIL)%.cc $(TILEDEFHDRS) + $(CXX) $(YCFLAGS) -o $@ -c $< + +############################################################################# +# Build Lua + +$(LUASRC)/$(LUALIBA): + @echo Building Lua... + @cd $(LUASRC) && $(MAKE) crawl_mingw + +############################################################################# +# Build SQLite + +$(FSQLLIBA): + @echo Building SQLite + cd $(SQLSRC) && $(MAKE) + +############################################################################# +# Build unrandart data +art-data.h: art-data.txt util/art-data.pl art-func.h + util/art-data.pl + +############################################################################# +# Build PCRE + +$(PCRESRC)/$(PCRELIBA): + @echo Building PCRE... + @cd $(PCRESRC) && $(MAKE) + +########################################################################## +# Resources +# + +$(OPATH)/$(RESOURCEOBJ): $(RESOURCE) + $(WINDRES) $< $@ + -- cgit v1.2.3-54-g00ecf