Lots of major build changes here:
Signed-off-by: Steven Noonan <steven@uplinklabs.net>
GL5T36G3A2LUTTYSL7ZQVUYONUCXL5DK36532FM6XRAQCLYDWW2QC
BDO6SJOEEVREHN3VB2VA6BB5AIL3IHIX2OZ3KMGG4ZYZ3UFB55PQC
24NJTUIRQWCZJGRMCEP6NAVN6H5QYLOBLQC7Q3TGARY3ZGIK6DDQC
COVZYBVKEG4JGPFOWPC56ZQNE2AV7CXB4YMRGILCWP7UGVJLJ6OAC
UVKOBD5ABJCD4WLZSAWNSGN35VXTJIBBQUV3S7JWDAYE74ZK7VTAC
HLUK5PTCV2DXDPRGTIFQOVGQGXAJJY6SFRXE72IBLACO74NTULEAC
WDPD4AXSBTRQTCAQH6T63ZY7LCR3WOHZAMRQ7OHWG3IYTDLOCT4AC
IIDUZBVBKRX2IUCBQXUVEXFPWNQGMF257OQLMWDGJV52DLRVA4YQC
LSMI37MKELA6OIYENRW73VOLH3XVZQEC5GWCDKLFM2WHQISLU76AC
X5GLORIBKYA6FBLJLOCXPEBJCMLH3U2ASJGFRHTBT742YVHVOIBAC
VKDFSMFEX27MB52A3IWK6VBOSQ4NBMW6O5X5ULVCAH7QSCLTCX7QC
YGK52WU752U3THU3FOEGX2WYJIJBWXXDCUAWVU63DEXTWNXLFDHQC
E3NIQ5J4A4NEHED5IG7AG2AX5BV7F7ANVBS53RXBO3EJ5U5CSMEAC
QJSVN6CHOX7HBKPADNK4DJEN2FLGT7IFT7EWUWGFCHU65O5JKQRQC
4RNX37THHYSRVHADJRXJCEAVFDY43ZBBAS3LFTWOWLY22RN4HQFAC
MKL266H3SU2ZFMSDTPBYELWHFKA6VH2CRCRP7PIHE5LXOT4N4ROAC
VJNOAT646TRVBR44TNKO4WHBO54I2U5GLRWTIVDVWHHQ6CNYQ5ZAC
ORBVTLWSVTJYVSCO2QXUKEXEF3GU2YUUNUP67EWFXRUIMFJ5VQJQC
C25ULNTKMNOXT72ERWSFQZQW5E2OIM3TOGAAA33Z7EZQMZHRS2MAC
4VPFI4QI3ZKC2JISFUWFS4PWOJBHZFBLYGWOUZGRUANS4TI4OQPQC
I7F3ARBYSHD2DGOSMJJKV3FEXJ6WVWKL5PJ3NRM3Q7HZD74QZ3CQC
I2HL3DGBDA4UEHJGGOVGZ5QWUP2YRPWU6CW5BZF76KG25DYTGBZQC
IBW33XSII77ZYMC4UXCODCEMIQTJHYQKFGD4KWSQEIRIIGLBTP3QC
UL7XFKMUX3WIU4O2LZANK4ECJ654UZPDBFGNXUEYZYOLKBYBCG6AC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
LS3DAZVRDCXVN2BKBC6RGCKO3R43Z7HKG4GXJWLBK4AKBL2G6QDQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
L2BH25YQXSIQ7B66SXO7Q3IWUFVX7HTERRJZ5ZJJZS54ZETVFP6AC
GJRMKM6IUTABRCU7T4MMFLZ3DDNUB6CHMA2DSD3WYKBES3VUI4XQC
D4SVSJGLI3SXM376WITGOB5VHEAPKYJ3YYC46LBT5HHR6XURFN4QC
3A537UMVZSYIFVKVO3SVK5JRSRLDN3YJKK3RKELHR2D4U6CMKM4QC
2D77G7XIIDVS2RUE33YH2NAPSXNLXKXXN3RP2TKPLWRXTEAVSZ3QC
DSEHSGOZ75YFYOVHTBE7JKA26A6ZFRSF7CYVBBPNGE7SZEZPSDJAC
NCDWWDJQLAU5ORSAQGZKJJ5E22VTDGGPJMVVBWQFHQ2B3U3UFHDQC
TRAWFIOUMHDLCRD56HPFEMPYWO4MZKZMIZODQ7Z2VJUPED5GWUFQC
HNXKX6ZDQJV33E7UKZOLBYWJMRZ4QLEMXVXJZNRCTOIG2KVRTIEAC
5GYEHDYGDBJ7IQN7FND3G4UJNXINRS5B37MWRMIH3ZBIGF7XLETAC
PCV44ADMK3UM2ANBGUCU4A6Q63MN5JY57SFE7LBFUCONWVS7DKKAC
ADDKHU5M4FZVGBWGSWZGXYAIGIUBIIYWBVNELDLLIPL6QY5Z3F6QC
IWFPY33RKYC6R54OBK5ZEMVSFBPYYYILOOCAA3NY6MDSNE73JP3AC
SXTWWMONWAVOGIYRQP6ALJLLNCDNT4NNDTE2HXCUOVP6HZ7XNXFQC
UB73UGG2GEG6AL4T76UILFLTELH4Z5WN54UROLJD6RDR3JG77CXAC
FL42U7W4FLFPPSBTLDNPCIRFJG6SU2X3GWWQBQPPE2EHZ72WOSOQC
DCZMEKDHQWSQCQYQD6ZXB3XOMWLVLPSPVSBVVMPXMSZF7GO3BVCAC
4QYXUNAH54YJPAHB42Z3PPG7MGWGZ3G6Q5V2GTVOAB4MWECG52IAC
FXY6BRPHZCE4PU4NFUVXYXF3BIOO4XVHOLRZELMJQL5EGYXD3HUAC
OIAQU4VDTZ3EHBNC7FZIOW2QEQLTDHZ7O46XW2YWM6JRVBC66UPQC
22RFWMSJGG26Z2MQEEXGKVTFSTLREHQIG46WYOTMDRKI5YVMRNVAC
MOT3YZFRY3JG2MH3GN2VD6IY3IJSAXJUXMXS222TXWKRFCENOCDQC
6NX75EOPSR6TBJ3NOR34ASWLIS3GU7O6J54S57VGDOS7Z4J55VTAC
MTVWMQ5HV5LGDRU53GJV45GTANABRJLNIECWT7ZH2MCLO53XLFXAC
S5TL2JAUMXGUGXV7HTDY7GUVOT4NTMJ6HZUMKTCFA2Z3NTYBZWQAC
Q3B3UVMYEVC4YJUPYVSNTR4DJH4E6J4JJDHZNT5LNOCHCPPMEMXAC
25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC
MADTICUXDKQB7EKTXG7J2OIJGUM7A437FRWIBRA3BIVEKXEXHO6AC
3SQQ4MM6YO4I37CQ6GIBIX6BXAEVHNVNHPVMR3PPBBNO454D6XWQC
V4TAUG2RU7M3IBHQCGH3BUQQLYSFNBU3AS66IPDLZ4GJ3M37YYMAC
I4M3O5UA4UOV35WFD435G3GP6RT3EZ5NPRZ645X22A2Z7CR2E2AAC
SXQ32Z7ZILMUYSDTK3WE6OOEBYZURCJIUDHT3PXVPV44CBZTPGJQC
AEPGJLX47SNMG4B25UWQXXIQTN4N7TCIVSENYVYAJEQFPTT2OP6AC
ODXSZBNRJW7RT2SQQLG4HFDMXVQFXQ4UXO4XRLB6POMI34N6QI5QC
V46VVQZTXI2RGSXA7GLBFUQ37WFNPAR6E4WO4Q277EX7ZQCXYN6AC
HBXWZNXAJ7LUX7FYUIHQYBTRMWVJC6CAQQL3NNZHK5ETLIFEZJ7QC
JXFWRLWT7H34YXSOP2QYA422N2K3REDHBBDGTUSFR2TIQ4ZBNGAQC
NIBZLTD56AH3S4E6RNBSZFTLPPLB2CUC5CKAEUHTL3HEFODMBHYQC
ZIWGOQJ73QVKKG7UDUKHJ5BSCUFHWYNXUF342OO4CROUX6XPBVOAC
EOGCYAOXAXL6KFP6VIJ62CEUAU5OHC2RR45BEW35S4NWIS3ZZ3JQC
PHZTAI6CW7JHKFW77MKDK75UCNWBXFK7VDD3D5ORVXUFWV3C3EVQC
BV4BW243OWMFTCP24H7QDAJLESNTDSR2A6KFLC7M36LZOAF44EKAC
LV5VQHTUP5OPVIV6FGDX5EJTHT6UJYU7MDPNYSEWQRK3GTDIJ6MAC
KOMZPTDEZP3P6EWBUECWDY7OWELOUTMAUKNEOJ7PWX5LJBTMRVQAC
PL6I2CMSTHY5ZHWVMIQE5YTM5S5VPKBNZM6QJVHZSSKOJGIJ5W4AC
KR655YT3I3U5DMN5NS3FPUGMDNT4BI56K3SFF2FNJ77C45NFKL5AC
ADH3ZALVXLNZ3Q7L3CDCZOZFXHVWOVDM2RJLEMUCS4ROWCU676VAC
WIJI6Q5CWCIYSKCCSIZJDJHXV7MFATDKDSH6WOQ7CB7FFDPXZYSQC
3JPTKQ6Z5GW7ZBUWQCLOUJSUN2CDLN4JL7BMKSHV4MA3BSXRTWYQC
LVP5I5DHJGY3DG3DLIYBDVNULBCM7CD3HF4E5DW5QHCM6P2UZEJQC
22OOKSGMKOTQZNN7SDZOWC7WBKUWSIULH4GFSO45OSHCB3LK53TQC
TJISAZK5RWKXIIC5UTQNY4KT3UX3ASGBUQQNWZ7ZDULPRYFRZXQQC
3DMAYDA3C6SBPOEOLKV33FNEUTXV43BHQFXBZIJ6CT5P4QFZJT5QC
6QJC4NUZIHK6QHDMIFBBOO3K2VF5TZ5BDN5NXJKOK6S5FPW3XBXQC
KXUQB3WNWC5IFL6VFWADEPQMMU3VV3NDI5FLA666PGOEWFYUHCLQC
RC6L3CIBLJEH4GWRFD7UQNGI6PZT74FRUVOYHSAN2XCC74NZUASQC
4EWXDZSMYTEINQRUL4OHRUZVWMKCWEPYVJVGENQPBWUYU37SP63QC
IOVEJGOB3UPGG7YZLZC7VZGAPASFQ4GBIPFFRDBWHAO66NV6UE6AC
QXQE7C5XDYNF4JSHGDAVMS7HYLOC6YEZFOVFJ3RD7RB6U4AJSFIQC
5HVR2EAVL7HMHVZXGGUWIGSWERR5VKZWWKZXLQZFYZ2XNASMEGEQC
23GPKC7HCKVIPRMF4HPUROSVFVL4NQMRQQD5FUAFRLNZPYLZ4EEAC
DOZORMA366M4HB5JKSS27BMCR6ET7QNZNND2B7KV3NVEEPR5H7EAC
ZGM2JSUXIFZJOHJSZA2RT6RFP6AVY3UVSIXFFIUDAMWHT3ONNHGQC
C3PLBBUOOQCXSVFKBWVMO2P3HA6Q2TQIDYAP67PILYOEKQMMPTYAC
5HRXXWHM5JHDZBCSUD65GYSQIFRD77DYV5PDAJZU4JTE4ZPH3LQAC
BGPUXHZ2FDUKA6LAFNBDQJOT3XQGTZQDYBPU7Z6H5HTXZK2EG2BAC
AGHYY44SI6QZHIMOCFTA6CN7NQGHQFJFZ32VJQGM3DMUQLTBGYRQC
MWS346AS2OCQYDQ64HRT3U47NJCRGEYBLMT5K7DWSWT7ULMA4WLAC
5DAB7SLLJSAFRFYYSBGOUVCPSCTITT6L4V433HT5MTLSQ2LSUXFAC
include makefile.obj
ifeq ($(DEBUG_CRAWL),)
OPATH := rel
else
OPATH := dbg
endif
# need .exe so make will find the right file
CXX = g++
COPY = copy
OS_TYPE = WIN32CONSOLE
#LIB = -lcurso -lpano
# Do the levcomp stuff first because that's the most likely to fail.
OBJECTS := $(foreach file,$(OBJECTS),$(OPATH)/$(file))
##########################################################################
GAME_DEPENDS := prepare $(LUASRC)\$(LUALIBA) $(FSQLLIBA) $(PCRESRC)\$(PCRELIBA) $(OBJECTS)
OBJECTS := levcomp.tab.o levcomp.lex.o \
$(OBJECTS) $(RESOURCEOBJ)
all: $(APPNAME)
prepare:
if not exist $(OPATH) mkdir $(OPATH)
##########################################################################
# 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
$(subst /,\,for %%f in ($^) do $(COPY) %%f prebuilt)
$(UTIL)levcomp.tab.cc: $(UTIL)levcomp.ypp
$(subst /,\, cd $(UTIL)) && $(YACC) -d -b levcomp levcomp.ypp
$(subst /,\, cd $(UTIL)) && move $(YTABC) levcomp.tab.cc
$(UTIL)levcomp.lex.cc: $(UTIL)levcomp.lpp
$(subst /,\, cd $(UTIL) && $(LEX) -olevcomp.lex.cc levcomp.lpp)
else
$(UTIL)levcomp.tab.cc: prebuilt/levcomp.tab.cc
$(subst /,\,$(COPY) prebuilt/*.h $(UTIL))
$(subst /,\,$(COPY) $< $@)
$(UTIL)levcomp.lex.cc: prebuilt/levcomp.lex.cc
$(subst /,\,$(COPY) $< $@)
endif
##########################################################################
DEPENDENCY_MKF := makefile.dep
-include $(DEPENDENCY_MKF)
install: $(APPNAME)
ifneq ($(OPATH),$(INSTALLDIR))
$(COPY) $(APPNAME) ${INSTALLDIR}
endif
mkdir $(INSTALLDIR)\dat 2>nul || echo "" >nul
mkdir $(INSTALLDIR)\dat\lua 2>null || echo "">nul
mkdir $(INSTALLDIR)\dat\clua 2>null || echo "">nul
mkdir $(INSTALLDIR)\dat\descript 2>null || echo "">nul
mkdir $(INSTALLDIR)\dat\database 2>null || echo "">nul
mkdir $(INSTALLDIR)\settings 2>null || echo "">nul
mkdir $(INSTALLDIR)\docs 2>null || echo "">nul
copy /y dat\*.des $(INSTALLDIR)\dat
copy /y dat\clua\*.lua $(INSTALLDIR)\dat\clua
copy /y dat\descript\*.txt $(INSTALLDIR)\dat\descript
copy /y dat\database\*.txt $(INSTALLDIR)\dat\database
copy /y ..\settings\* $(INSTALLDIR)\settings
copy /y ..\docs\* $(INSTALLDIR)\docs
copy /y ..\* $(INSTALLDIR)
$(DELETE) $(INSTALLDIR)\*.sh
copy /y dat\lua\*.lua $(INSTALLDIR)\dat\lua
clean:
$(DELETE) *.o
$(DELETE) bones.*
$(DELETE) $(OPATH)\bones.*
$(DELETE) morgue.txt
$(DELETE) crawl.exe
$(DELETE) $(subst /,\,$(APPNAME))
$(DELETE) *.sav
$(DELETE) $(OPATH)\*.sav
$(DELETE) core
$(DELETE) $(OPATH)\core
$(DELETE) *.0*
$(DELETE) $(OPATH)\*.0*
$(DELETE) *.lab
$(DELETE) $(OPATH)\*.lab
strip $(APPNAME)
$(OPATH)/%.o: %.cc
$(OPATH)/%.o: $(UTIL)%.cc
$(CXX) $(YCFLAGS) -o $@ -c $<
#############################################################################
# Build Lua
@echo Building Lua...
@cd $(LUASRC) && $(MAKE) crawl_mingw
#############################################################################
# Build SQLite
$(FSQLLIBA):
@echo Building SQLite
cd $(SQLSRC) && $(MAKE)
#############################################################################
# Build PCRE
$(PCRESRC)\$(PCRELIBA):
@echo Building PCRE...
@cd $(PCRESRC) && $(MAKE)
##########################################################################
# Resources
#
$(OPATH)/$(RESOURCEOBJ): $(RESOURCE)
$(WINDRES) $< $@
#############################################################################
# Build unrandart data
util/art-data.pl
art-data.h: art-data.txt util/art-data.pl art-func.h
$(LUASRC)\$(LUALIBA):
${CXX} ${CFLAGS} -o $@ -c $<
profile: $(GAME_DEPENDS)
${CXX} -g -p ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(APPNAME) $(LIB)
debug: $(GAME_DEPENDS)
${CXX} ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(APPNAME) $(LIB)
$(APPNAME): $(GAME_DEPENDS)
${CXX} ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(APPNAME) $(LIB)
$(DELETE) $(OPATH)\morgue.txt
$(DELETE) scores
$(DELETE) $(OPATH)\scores
clean-lua:
cd $(LUASRC) && $(MAKE) clean_win
clean-sql:
cd $(SQLSRC) && $(MAKE) "RM_F=del /f" clean
$(DELETE) $(OPATH)\*.o
clean-pcre:
cd $(PCRESRC) && $(MAKE) clean
distclean: clean clean-lua clean-sql clean-pcre
$(DELETE) $(OPATH)\*.o
$(subst /,\,$(DELETE) $(UTIL)*.o)
$(subst /,\,$(DELETE) $(UTIL)*.exe)
$(subst /,\,$(DELETE) $(UTIL)*.lex.cc)
$(subst /,\,$(DELETE) $(UTIL)*.tab.cc)
$(subst /,\,$(DELETE) $(UTIL)*.tab.h)
$(subst /,\,$(DELETE) $(UTIL)*.tab.c)
$(subst /,\,$(DELETE) *.ixx)
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 := windres.exe
INSTALLDIR := $(OPATH)
CFOTHERS := -fsigned-char \
-fstrict-aliasing \
-pedantic \
-D$(OS_TYPE) $(EXTRA_FLAGS) \
CFLAGS := $(INCLUDES) $(CFWARN) $(CFOTHERS)
YCFLAGS := $(INCLUDES) $(CFOTHERS)
LDFLAGS =
OBJECTS := $(OBJECTS) libw32c.o crash-w.o
-DWINMM_PLAY_SOUNDS -DCLUA_BINDINGS
-O2 \
CFWARN := -Wall -Wwrite-strings -Wshadow -pedantic
# If you don't have flex or bison, set DOYACC to N or empty.
DOYACC := n
LEX := flex
YACC := bison -y
ifeq ($(LUASRC),)
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 -lwinmm -L$(LUASRC) -l$(LUALIB) -L$(SQLSRC) -l$(SQLLIB) -L$(PCRESRC) -lpcre
INCLUDES := -Iutil -I. -I$(LUASRC) -I$(SQLSRC) -I$(PCRESRC)
LUASRC := util\lua\src
DELETE = del
APPNAME = $(OPATH)\crawl.exe
# makefile.obj includes a list of object files needed to build Crawl.
# -*- Makefile -*- for Dungeon Crawl (Win32, MinGW)
all: $(GAME)
devclean:
xcodebuild -project $(PROJECT) -target $(GAME) -configuration Development clean
devel:
xcodebuild -project $(PROJECT) -target $(GAME) -configuration Development build
wizard:
xcodebuild -project $(PROJECT) -target $(GAME) -configuration Wizard build
xcodebuild -project $(PROJECT) -target $(GAME) -configuration Debug build
debug:
$(GAME):
xcodebuild -project $(PROJECT) -target $(GAME) -configuration Release build
distclean: clean
rm -f bones.*
rm -f morgue.txt
rm -f scores
rm -f $(GAME)
rm -f *.sav
rm -f core
rm -f *.0*
rm -f *.lab
xcodebuild -project $(PROJECT) -target $(GAME) -configuration Release clean
xcodebuild -project $(PROJECT) -target $(GAME) -configuration Debug clean
xcodebuild -project $(PROJECT) -target $(GAME) -configuration Wizard clean
clean:
# Xcode handles dependencies, so install does _not_ have to depend on building.
install:
xcodebuild -project $(PROJECT) -target $(GAME) -configuration Release install
PROJECT = Crawl.xcodeproj
GAME = Crawl
# -*- Makefile -*- for Dungeon Crawl
# -*- 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) $< $@
# -*- 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)
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
$(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) $< $@
${CXX} ${CFLAGS} -o $@ -c $<
CFWARN := -Wwrite-strings
# -*- Makefile -*- for Dungeon Crawl (unix)
GAME = crawl
# this file contains a list of the libraries.
# it will make a variable called OBJECTS that contains all the libraries
include makefile.obj
DELETE = rm -f
COPY = cp
OS_TYPE = UNIX
# If you have lex and yacc, set DOYACC to y (lowercase y).
DOYACC := y
# Permissions to set on the game executable.
MCHMOD := 2755
# Permissions to set on the save directory.
MCHMOD_SAVEDIR := 775
# If you're installing Crawl for multiple users, you *must* set this to a
# valid path before building Crawl. This is not necessary if you are building
# Crawl for a single user.
# SAVEDIR := /usr/games/crawl/saves/
# DATADIR := /usr/games/crawl/data/
LEX := flex
YACC := bison -y
LUASRC := util/lua/src
LUALIB = lua
LUALIBA = l$(LUALIB).a
SQLSRC := util/sqlite
SQLLIB := sqlite3
SQLLIBA := lib$(SQLLIB).a
FSQLLIBA := $(SQLSRC)/$(SQLLIBA)
EXTRA_INCLUDES += -I$(SQLSRC)
EXTRA_DEPENDS += $(FSQLLIBA)
endif
YCFLAGS := $(INCLUDES) $(CFOTHERS)
UTIL = util/
YTABC := levcomp.tab.c
YTABH := levcomp.tab.h
OBJECTS := $(UTIL)levcomp.tab.o $(UTIL)levcomp.lex.o $(OBJECTS)
DOYACC :=
endif
DOYACC :=
endif
SRC_PKG_BASE := stone_soup
SRC_VERSION := $(shell egrep 'VER_NUM *".*"' version.h | \
egrep -o '[0-9]\.[0-9](\.[0-9])?')
PKG_SRC_DIR := $(SRC_PKG_BASE)-$(SRC_VERSION)-src
SRC_PKG_TAR := $(PKG_SRC_DIR).tbz2
SRC_PKG_ZIP := $(PKG_SRC_DIR).zip
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
##########################################################################
all: $(GAME)
##########################################################################
# Dependencies
DEPENDENCY_MKF := makefile.dep
depend: $(OBJECTS:.o=.cc)
@for i in $^; do \
echo "Updating dependencies for $$i"; \
done
-include $(DEPENDENCY_MKF)
##########################################################################
# The level compiler
#
ifeq ($(DOYACC),y)
prebuildyacc: $(UTIL)levcomp.tab.cc $(UTIL)levcomp.tab.h $(UTIL)levcomp.lex.cc
$(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
# Pull the level-compiler stuff up from prebuilt/
$(UTIL)levcomp.tab.cc: prebuilt/levcomp.tab.cc
$(UTIL)levcomp.lex.cc: prebuilt/levcomp.lex.cc
endif
##########################################################################
# RLTiles
#
makerltiles:
$(ORIGTILEFILES): makerltiles
$(COPY) $< $@
clean-rltiles:
##########################################################################
##########################################################################
# The actual build targets
#
install: $(GAME)
[ -d $(INSTALLDIR) ] || mkdir -p $(INSTALLDIR)
$(COPY) $(GAME) $(INSTALLDIR)
chown $(INSTALL_UGRP) $(INSTALLDIR)/$(GAME)
chmod ${MCHMOD} ${INSTALLDIR}/$(GAME)
mkdir -p $(DATADIR)/dat/clua
mkdir -p $(DATADIR)/docs
mkdir -p $(DATADIR)/dat/tiles
chown -R $(INSTALL_UGRP) $(DATADIR)
ifneq ($(SAVEDIR),)
mkdir -p $(SAVEDIR)
chown $(INSTALL_UGRP) $(SAVEDIR)
chmod $(MCHMOD_SAVEDIR) $(SAVEDIR)
endif
clean:
$(DELETE) *.o
$(DELETE) $(UTIL)*.o
$(DELETE) $(LEVCOMP)
$(DELETE) $(UTIL)*.tab.cc $(UTIL)*.tab.c $(UTIL)*.tab.h $(UTIL)*.lex.cc
$(DELETE) *.ixx
clean-lua:
clean-sql:
distclean: clean clean-lua clean-sql clean-rltiles
$(DELETE) bones.*
$(DELETE) morgue.txt
$(DELETE) scores
$(DELETE) $(GAME)
$(DELETE) *.sav
$(DELETE) core
$(DELETE) *.0*
$(DELETE) *.lab
$(DELETE) $(DEPENDENCY_MKF)
$(GAME): $(GAME_DEPENDS)
${CXX} ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(GAME) $(LIB)
profile: $(GAME_DEPENDS)
${CXX} -g -p ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(GAME) $(LIB)
# [ds] Note we don't use the standard CFLAGS here; that's intentional, most
# flex/bison combos I've tried don't produce code that passes the warnings
# test.
$(CXX) $(YCFLAGS) -o $@ -c $<
#############################################################################
# Build Lua
$(LUASRC)$(LUALIBA):
echo Building Lua...
#############################################################################
# Build SQLite
$(FSQLLIBA):
echo Building SQLite
#############################################################################
# Packaging a source tarball for release
#
# To package, you *must* have lex and yacc to generate the intermediates.
ifeq ($(DOYACC),y)
package-source: distclean prebuildyacc pkgtidy depend removeold vlink \
pkgtarbz2 pkgzip
pkgtidy:
$(DELETE) $(PKG_TIDY_LIST)
removeold:
if [ -f ../../$(SRC_PKG_TAR) ]; then $(DELETE) ../../$(SRC_PKG_TAR); fi
if [ -f ../../$(SRC_PKG_ZIP) ]; then $(DELETE) ../../$(SRC_PKG_ZIP); fi
# [ds] Existing directory names could produce a bad package!
vlink:
cd .. && WHERE=$$PWD && cd .. && \
( [ -e $(PKG_SRC_DIR) ] || ln -sf $$WHERE $(PKG_SRC_DIR) )
pkgtarbz2:
cd ../.. && tar -ch --bzip2 -f $(SRC_PKG_TAR) \
-X $(PKG_EXCLUDES) $(PKG_SRC_DIR)
pkgzip:
cd ../.. && zip -rq $(SRC_PKG_ZIP) $(PKG_SRC_DIR) \
-x@$(PKG_EXCLUDES)
endif
#############################################################################
# Build unrandart data
util/art-data.pl
art-data.h: art-data.txt util/art-data.pl art-func.h
+$(MAKE) -C $(SQLSRC)
+$(MAKE) -C $(LUASRC) crawl_unix
$(UTIL)%.o: $(UTIL)%.cc $(TILEDEFHDRS)
${CXX} ${CFLAGS} -c $< -o $@
# STL is bad in debug. Always compile this file with optimizations.
tilebuf.o: tilebuf.cc $(TILEDEFHDRS)
${CXX} ${CFLAGS} -O2 -c $< -o $@
%.o: %.cc $(TILEDEFHDRS)
debug: $(GAME)
.PHONY : debug
+$(MAKE) -C $(SQLSRC) clean
+$(MAKE) -C $(LUASRC) clean
$(COPY) dat/tiles/* $(DATADIR)/dat/tiles
$(COPY) ../docs/*.txt $(DATADIR)/docs
mkdir -p $(DATADIR)/settings
$(COPY) ../settings/* $(DATADIR)/settings/
mkdir -p $(DATADIR)/dat/descript
mkdir -p $(DATADIR)/dat/database
$(COPY) dat/*.des $(DATADIR)/dat
$(COPY) dat/lua/*.lua $(DATADIR)/dat/lua
$(COPY) dat/clua/*.lua $(DATADIR)/dat/clua
$(COPY) dat/descript/*.txt $(DATADIR)/dat/descript
$(COPY) dat/database/*.txt $(DATADIR)/dat/database
mkdir -p $(DATADIR)/dat
mkdir -p $(DATADIR)/dat/lua
ifeq ($(DATADIR),)
$(error DATADIR not set! Set DATADIR and run make clean install again)
endif
+$(MAKE) -C $(RLTILES) -f makefile.unix distclean && cd ..
dat/tiles/%.png: $(RLTILES)/%.png
$(TILEDEFSRCS): makerltiles
$(TILEDEFHDRS): makerltiles
+$(MAKE) -C rltiles -f makefile.unix all
ORIGTILEFILES = $(TILEFILES:%=$(RLTILES)/%)
$(COPY) $< $@
$(COPY) prebuilt/*.h $(UTIL)
$(COPY) $< $@
$(COPY) $^ prebuilt/
mv -f $(DEPENDENCY_MKF).tmp $(DEPENDENCY_MKF)
$(CXX) -MM $(CFLAGS) $$i >>$(DEPENDENCY_MKF).tmp 2>/dev/null; \
rm -f $(DEPENDENCY_MKF).tmp
GAME_DEPENDS := $(LUASRC)$(LUALIBA) $(EXTRA_DEPENDS) $(OBJECTS)
ifeq ($(strip $(YACC)),)
ifeq ($(strip $(LEX)),)
CFLAGS := $(INCLUDES) $(CFWARN) $(CFOTHERS) $(SDL_CFLAGS)
ifneq ($(strip $(SAVEDIR)),)
CFOTHERS += '-DSAVE_DIR_PATH="$(strip $(SAVEDIR))"'
endif
ifneq ($(strip $(DATADIR)),)
CFOTHERS += '-DDATA_DIR_PATH="$(strip $(DATADIR))"'
ifneq ($(HURRY),y)
CFWARN += -Wuninitialized
CFOTHERS += -O2
endif
endif
ifneq ($(DEBUG_CRAWL),y)
CFOTHERS := -fsigned-char -D$(OS_TYPE) $(EXTRA_FLAGS) -DCLUA_BINDINGS
CFWARN := -Wall -Wwrite-strings -Wshadow -pedantic -Wno-parentheses
INCLUDES := $(INCLUDES) -Iutil -I. -I$(LUASRC) $(EXTRA_INCLUDES) $(PNG_INCLUDE) $(FREETYPE_INCLUDE)
EXTRA_INCLUDES += -I$(RLTILES)
TILEFILES = \
main.png \
player.png \
DESTTILEFILES = $(TILEFILES:%=dat/tiles/%)
EXTRA_DEPENDS += $(DESTTILEFILES)
LIB = -L$(LUASRC) -l$(LUALIB) $(LIBDBM) $(EXTRA_LIBS)
dngn.png \
gui.png
TILEDEFPRES = $(TILEDEFS:%=$(RLTILES)/tiledef-%)
TILEDEFOBJS = $(TILEDEFPRES:%=%.o)
TILEDEFSRCS = $(TILEDEFPRES:%=%.cc)
TILEDEFHDRS = $(TILEDEFPRES:%=%.h)
OBJECTS += $(TILEDEFOBJS)
TILEDEFS = dngn main player gui unrand
RLTILES = rltiles
# Note: link sqlite with the full path to the .a, so OSX uses the right one.
LIBDBM := $(FSQLLIBA)
# The user:group to install the game as.
INSTALL_UGRP := games:games
INSTALLDIR := /usr/games/crawl
# Change this to y if you want to use Unicode glyphs in the map, and you have
# libncursesw available.
UNICODE_GLYPHS = n
# OSX vs. Linux differences:
ifeq ($(strip $(OSX)),y)
PNG_INCLUDE := -I/sw/include
FREETYPE_INCLUDE := -I/sw/include/freetype2
EXTRA_INCLUDES += -I/sw/include
else
SDL_LDFLAGS := $(shell sdl-config --libs) -lSDLmain
endif
EXTRA_LIBS := $(PNG_LDFLAGS) $(SDL_LDFLAGS) $(FREETYPE_LDFLAGS) -lGL -lGLU -lSDL_image
PNG_INCLUDE := $(shell pkg-config libpng --cflags)
PNG_LDFLAGS := $(shell pkg-config libpng --libs)
FREETYPE_INCLUDE := $(shell pkg-config freetype2 --cflags)
FREETYPE_LDFLAGS := $(shell pkg-config freetype2 --libs)
EXTRA_LIBS := $(FRAMEWORK_LIST:%=-Wl,-framework,%) $(LIB_LIST) -lz
SW_LIB_LIST := SDL SDL_image SDLmain png tiff jpeg
LIB_LIST := $(SW_LIB_LIST:%=$(LIB_BASE)/lib%.a) $(FREETYPE_LIB)
# The list of frameworks that SDL would normally dynamically load and need to
# be included explicitly if SDL is linked statically.
FRAMEWORK_LIST := Cocoa Carbon AudioUnit IOKit OpenGL QuickTime
# Note: gcc on OS X will *always* include the dynamic library
# version of any lib if it exists in the path. Therefore, all non-standard
# libraries have to be linked explicitly by full path rather than searched
# for.
LIB_BASE := /sw/lib
FREETYPE_LIB := $(LIB_BASE)/freetype2/lib/libfreetype.a
EXTRA_INCLUDES := -DUSE_TILE -DCLUA_BINDINGS
# To get stack trace symbols.
LDFLAGS = -rdynamic
CXX = g++
SDL_CFLAGS := $(shell sdl-config --cflags)
OBJECTS += libgui.o tilepick.o tile2.o tilereg.o tilesdl.o tilefont.o tiletex.o tilemcache.o tilebuf.o crash-u.o
GAME = crawl
# this file contains a list of the libraries.
# it will make a variable called OBJECTS that contains all the libraries
include makefile.obj
DELETE = rm -f
COPY = cp
OS_TYPE = UNIX
# If you're installing Crawl for multiple users, you *must* set this to a
SQLSRC := util/sqlite
SQLLIB := sqlite3
SQLLIBA := lib$(SQLLIB).a
FSQLLIBA := $(SQLSRC)/$(SQLLIBA)
EXTRA_INCLUDES += -I$(SQLSRC)
EXTRA_DEPENDS += $(FSQLLIBA)
CFLAGS := $(INCLUDES) $(CFWARN) $(CFOTHERS)
YCFLAGS := $(INCLUDES) $(CFOTHERS)
UTIL = util/
YTABC := levcomp.tab.c
YTABH := levcomp.tab.h
DOYACC :=
endif
DOYACC :=
endif
SRC_PKG_BASE := stone_soup
egrep -o '[0-9]\.[0-9](\.[0-9])?')
PKG_SRC_DIR := $(SRC_PKG_BASE)-$(SRC_VERSION)-src
SRC_PKG_TAR := $(PKG_SRC_DIR).tbz2
SRC_PKG_ZIP := $(PKG_SRC_DIR).zip
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
##########################################################################
all: $(GAME)
##########################################################################
# The level compiler
#
ifeq ($(DOYACC),y)
prebuildyacc: $(UTIL)levcomp.tab.cc $(UTIL)levcomp.tab.h $(UTIL)levcomp.lex.cc
$(UTIL)levcomp.tab.cc: $(UTIL)levcomp.ypp
cd $(UTIL) && $(YACC) -d -b levcomp levcomp.ypp \
$(UTIL)levcomp.lex.cc: $(UTIL)levcomp.lpp
cd $(UTIL) && $(LEX) -olevcomp.lex.cc levcomp.lpp
else
# Pull the level-compiler stuff up from prebuilt/
$(UTIL)levcomp.tab.cc: prebuilt/levcomp.tab.cc
$(UTIL)levcomp.lex.cc: prebuilt/levcomp.lex.cc
endif
##########################################################################
##########################################################################
# The actual build targets
#
install: $(GAME)
chmod ${MCHMOD} ${INSTALLDIR}/$(GAME)
clean:
$(DELETE) *.o
$(DELETE) $(UTIL)*.o
$(DELETE) $(LEVCOMP)
$(DELETE) $(UTIL)*.tab.cc $(UTIL)*.tab.c $(UTIL)*.tab.h $(UTIL)*.lex.cc
$(DELETE) *.ixx
$(DELETE) bones.*
$(DELETE) morgue.txt
$(DELETE) scores
$(DELETE) $(GAME)
$(DELETE) *.sav
$(DELETE) core
$(DELETE) *.0*
$(DELETE) *.lab
${CXX} ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(GAME) $(LIB)
profile: $(GAME_DEPENDS)
${CXX} -g -p ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(GAME) $(LIB)
.cc.o:
${CXX} ${CFLAGS} -c $<
# [ds] Note we don't use the standard CFLAGS here; that's intentional, most
# flex/bison combos I've tried don't produce code that passes the warnings
# test.
$(UTIL)%.o: $(UTIL)%.cc
$(CXX) $(YCFLAGS) -o $@ -c $<
#############################################################################
# Build Lua
$(LUASRC)$(LUALIBA):
echo Building Lua...
#############################################################################
# Build SQLite
$(FSQLLIBA):
echo Building SQLite
#############################################################################
# Build unrandart data
util/art-data.pl
art-data.h: art-data.txt util/art-data.pl art-func.h
+$(MAKE) -C $(SQLSRC)
#############################################################################
+$(MAKE) -C $(LUASRC) crawl_unix
# Packaging a source tarball for release
#
# To package, you *must* have lex and yacc to generate the intermediates.
ifeq ($(DOYACC),y)
pkgtidy:
$(DELETE) $(PKG_TIDY_LIST)
removeold:
if [ -f ../../$(SRC_PKG_TAR) ]; then $(DELETE) ../../$(SRC_PKG_TAR); fi
if [ -f ../../$(SRC_PKG_ZIP) ]; then $(DELETE) ../../$(SRC_PKG_ZIP); fi
# [ds] Existing directory names could produce a bad package!
vlink:
cd .. && WHERE=$$PWD && cd .. && \
( [ -e $(PKG_SRC_DIR) ] || ln -sf $$WHERE $(PKG_SRC_DIR) )
pkgtarbz2:
cd ../.. && tar -ch --bzip2 -f $(SRC_PKG_TAR) \
-X $(PKG_EXCLUDES) $(PKG_SRC_DIR)
pkgzip:
cd ../.. && zip -rq $(SRC_PKG_ZIP) $(PKG_SRC_DIR) \
-x@$(PKG_EXCLUDES)
endif
package-source: distclean prebuildyacc pkgtidy depend removeold vlink \
pkgtarbz2 pkgzip
debug: $(GAME)
.PHONY : debug
$(GAME): $(GAME_DEPENDS)
$(DELETE) $(DEPENDENCY_MKF)
clean-lua:
clean-sql:
distclean: clean clean-lua clean-sql
+$(MAKE) -C $(SQLSRC) clean
+$(MAKE) -C $(LUASRC) clean
mkdir -p $(DATADIR)/settings
$(COPY) ../settings/* $(DATADIR)/settings/
mkdir -p $(DATADIR)/dat
mkdir -p $(DATADIR)/dat/lua
mkdir -p $(DATADIR)/dat/clua
mkdir -p $(DATADIR)/dat/descript
mkdir -p $(DATADIR)/dat/database
$(COPY) dat/*.des $(DATADIR)/dat
$(COPY) dat/lua/*.lua $(DATADIR)/dat/lua
$(COPY) dat/clua/*.lua $(DATADIR)/dat/clua
$(COPY) dat/descript/*.txt $(DATADIR)/dat/descript
$(COPY) dat/database/*.txt $(DATADIR)/dat/database
mkdir -p $(DATADIR)/docs
chown -R $(INSTALL_UGRP) $(DATADIR)
ifneq ($(SAVEDIR),)
mkdir -p $(SAVEDIR)
chown $(INSTALL_UGRP) $(SAVEDIR)
chmod $(MCHMOD_SAVEDIR) $(SAVEDIR)
endif
$(COPY) ../docs/*.txt $(DATADIR)/docs
chown $(INSTALL_UGRP) $(INSTALLDIR)/$(GAME)
ifeq ($(DATADIR),)
$(error DATADIR not set! Set DATADIR and run make clean install again)
endif
[ -d $(INSTALLDIR) ] || mkdir -p $(INSTALLDIR)
$(COPY) $(GAME) $(INSTALLDIR)
$(COPY) $< $@
$(COPY) prebuilt/*.h $(UTIL)
$(COPY) $< $@
&& mv $(YTABC) levcomp.tab.cc || false
$(COPY) $^ prebuilt/
# Dependencies
depend: $(OBJECTS:.o=.cc)
@for i in $^; do \
echo "Updating dependencies for $$i"; \
done
mv -f $(DEPENDENCY_MKF).tmp $(DEPENDENCY_MKF)
-include $(DEPENDENCY_MKF)
##########################################################################
$(CXX) -MM $(CFLAGS) $$i >>$(DEPENDENCY_MKF).tmp 2>/dev/null; \
rm -f $(DEPENDENCY_MKF).tmp
DEPENDENCY_MKF := makefile.dep
test: $(GAME)
$(PWD)/$(GAME) -test
SRC_VERSION := $(shell egrep 'VER_NUM *".*"' version.h | \
GAME_DEPENDS := $(LUASRC)$(LUALIBA) $(EXTRA_DEPENDS) $(OBJECTS)
ifeq ($(strip $(YACC)),)
ifeq ($(strip $(LEX)),)
OBJECTS := $(UTIL)levcomp.tab.o $(UTIL)levcomp.lex.o $(OBJECTS)
endif
ifneq ($(strip $(DATADIR)),)
CFOTHERS += '-DDATA_DIR_PATH="$(strip $(DATADIR))"'
endif
# Include path for (n)curses with Unicode support.
INCLUDES += -I/usr/include/ncursesw
# Your ncurses library may include Unicode support, and you may not have a
# separate libncursesw; in that case, change this line accordingly.
LIBCURS = ncursesw
CFOTHERS += -DUNICODE_GLYPHS
endif
# The standard ncurses library also supports Unicode on Mac OS/Darwin.
ifeq ($(shell uname),Darwin)
LIBCURS = ncurses
endif
else
# Include path for curses or ncurses (non-Unicode).
INCLUDES += -I/usr/include/ncurses
LIBCURS = ncurses
endif
ifneq ($(strip $(UNICODE_LOCALE)),)
ifneq ($(strip $(UNICODE_LOCALE)),.)
CFOTHERS += -DUNICODE_LOCALE=\"$(strip $(UNICODE_LOCALE))\"
else
CFOTHERS += -DUNICODE_LOCALE=\"\"
endif
ifeq ($(strip $(UNICODE_GLYPHS)),y)
ifneq ($(strip $(SAVEDIR)),)
CFOTHERS += '-DSAVE_DIR_PATH="$(strip $(SAVEDIR))"'
ifneq ($(HURRY),y)
ifneq ($(DEBUG_CRAWL),y)
CFWARN += -Wuninitialized
CFOTHERS += -O2
endif
endif
CFOTHERS := -fsigned-char -D$(OS_TYPE) $(EXTRA_FLAGS) -DCLUA_BINDINGS
INCLUDES := $(INCLUDES) -Iutil -I. -I$(LUASRC) $(EXTRA_INCLUDES)
CFWARN := -Wall -Wno-parentheses -Wwrite-strings -Wshadow -pedantic
LIB = -l$(LIBCURS) -L$(LUASRC) -l$(LUALIB) $(LIBDBM)
LIBDBM := $(FSQLLIBA)
# valid path before building Crawl. This is not necessary if you are building
# Crawl for a single user.
LUASRC := util/lua/src
LUALIB = lua
LUALIBA = l$(LUALIB).a
LEX := flex
YACC := bison -y
# SAVEDIR := /usr/games/crawl/saves/
# DATADIR := /usr/games/crawl/data/
# If you have lex and yacc, set DOYACC to y (lowercase y).
DOYACC := y
# Permissions to set on the game executable.
MCHMOD := 2755
# Permissions to set on the save directory.
MCHMOD_SAVEDIR := 775
# The user:group to install the game as.
INSTALL_UGRP := games:games
INSTALLDIR := /usr/games/crawl
# If you're using UNICODE_GLYPHS=y, and have a preferred Unicode
# (UTF-8) locale you want Crawl to use, you can set it here. The
UNICODE_LOCALE =
# default is en_US.UTF-8. If you'd prefer that Crawl use the locale
# as set in your environment LC_* variables, use UNICODE_LOCALE = .
UNICODE_GLYPHS = n
# Change this to y (case-sensitive!) if you want to use Unicode glyphs
# in the map, and you have libncursesw available.
# To get stack trace symbols.
LDFLAGS = -rdynamic
CXX = g++
OBJECTS += libunix.o crash-u.o
# -*- Makefile -*- for Dungeon Crawl (unix)
# -*- Makefile -*- for Dungeon Crawl (Win32, MinGW)
# makefile.obj includes a list of object files needed to build Crawl.
include makefile.obj
ifeq ($(DEBUG_CRAWL),)
OPATH := rel
else
OPATH := dbg
endif
# need .exe so make will find the right file
APPNAME = $(OPATH)\crawl.exe
DELETE = del
COPY = copy
OS_TYPE = WIN32TILES
INSTALLDIR := $(OPATH)
# 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)
CFOTHERS := -fsigned-char \
-fstrict-aliasing \
-pedantic \
-D$(OS_TYPE) $(EXTRA_FLAGS) \
-DWINMM_PLAY_SOUNDS -DCLUA_BINDINGS \
YCFLAGS := $(INCLUDES) $(CFOTHERS)
UTIL = util/
YTABC := levcomp.tab.c
YTABH := levcomp.tab.h
ifeq ($(LEX),)
DOYACC :=
endif
ifeq ($(YACC),)
DOYACC :=
endif
# Do the levcomp stuff first because that's the most likely to fail.
OBJECTS := levcomp.tab.o levcomp.lex.o \
OBJECTS := $(foreach file,$(OBJECTS),$(OPATH)/$(file))
##########################################################################
all: $(APPNAME)
prepare:
if not exist $(OPATH) mkdir $(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
$(subst /,\,for %%f in ($^) do $(COPY) %%f prebuilt)
$(UTIL)levcomp.tab.cc: $(UTIL)levcomp.ypp
$(subst /,\, cd $(UTIL)) && $(YACC) -d -b levcomp levcomp.ypp
$(subst /,\, cd $(UTIL)) && move $(YTABC) levcomp.tab.cc
$(UTIL)levcomp.lex.cc: $(UTIL)levcomp.lpp
$(subst /,\, cd $(UTIL) && $(LEX) -olevcomp.lex.cc levcomp.lpp)
else
$(UTIL)levcomp.tab.cc: prebuilt/levcomp.tab.cc
$(subst /,\,$(COPY) prebuilt/*.h $(UTIL))
$(subst /,\,$(COPY) $< $@)
$(UTIL)levcomp.lex.cc: prebuilt/levcomp.lex.cc
$(subst /,\,$(COPY) $< $@)
endif
##########################################################################
# RLTiles
#
makerltiles:
$(ORIGTILEFILES): makerltiles
clean-rltiles:
##########################################################################
##########################################################################
install: $(APPNAME)
ifneq ($(OPATH),$(INSTALLDIR))
$(COPY) $(APPNAME) ${INSTALLDIR}
endif
mkdir $(INSTALLDIR)\dat 2>nul || echo "" >nul
mkdir $(INSTALLDIR)\dat\clua 2>null || echo "">nul
copy /y dat\*.des $(INSTALLDIR)\dat
copy /y dat\clua\*.lua $(INSTALLDIR)\dat\clua
mkdir $(INSTALLDIR)\dat\tiles 2>nul || echo "" > nul
clean:
$(DELETE) $(OPATH)\*.o
$(subst /,\,$(DELETE) $(UTIL)*.o)
$(subst /,\,$(DELETE) $(UTIL)*.exe)
$(subst /,\,$(DELETE) $(UTIL)*.lex.cc)
$(subst /,\,$(DELETE) $(UTIL)*.tab.cc)
$(subst /,\,$(DELETE) $(UTIL)*.tab.h)
$(subst /,\,$(DELETE) $(UTIL)*.tab.c)
$(subst /,\,$(DELETE) *.ixx)
clean-lua:
cd $(LUASRC) && $(MAKE) clean_win
clean-sql:
cd $(SQLSRC) && $(MAKE) "RM_F=del /f" clean
$(DELETE) *.o
$(DELETE) bones.*
$(DELETE) $(OPATH)\bones.*
$(DELETE) morgue.txt
$(DELETE) $(OPATH)\morgue.txt
$(DELETE) crawl.exe
$(DELETE) $(subst /,\,$(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)
strip $(APPNAME)
debug: $(GAME_DEPENDS)
${CXX} ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(APPNAME) $(LIB)
profile: $(GAME_DEPENDS)
${CXX} -g -p ${LDFLAGS} $(CFLAGS) $(OBJECTS) -o $(APPNAME) $(LIB)
$(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 PCRE
$(PCRESRC)\$(PCRELIBA):
@echo Building PCRE...
@cd $(PCRESRC) && $(MAKE)
##########################################################################
# Resources
#
$(OPATH)/$(RESOURCEOBJ): $(RESOURCE)
$(WINDRES) $< $@
#############################################################################
# Build unrandart data
util/art-data.pl
art-data.h: art-data.txt util/art-data.pl art-func.h
# 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} ${CFLAGS} -o $@ -c $<
$(OPATH)/%.o: %.cc $(TILEDEFHDRS)
$(DELETE) scores
$(DELETE) $(OPATH)\scores
distclean: clean clean-lua clean-sql clean-pcre clean-rltiles
$(DELETE) dbg\*.o
$(DELETE) rel\*.o
clean-pcre:
cd $(PCRESRC) && $(MAKE)
copy /y ..\* $(INSTALLDIR)
$(DELETE) $(INSTALLDIR)\*.sh
copy /y dat\tiles\*.* $(INSTALLDIR)\dat\tiles
copy /y dat\descript\*.txt $(INSTALLDIR)\dat\descript
copy /y dat\database\*.txt $(INSTALLDIR)\dat\database
copy /y ..\settings\* $(INSTALLDIR)\settings
copy /y ..\docs\* $(INSTALLDIR)\docs
copy /y dat\lua\*.lua $(INSTALLDIR)\dat\lua
mkdir $(INSTALLDIR)\dat\descript 2>null || echo "">nul
mkdir $(INSTALLDIR)\dat\database 2>null || echo "">nul
mkdir $(INSTALLDIR)\settings 2>null || echo "">nul
mkdir $(INSTALLDIR)\docs 2>null || echo "">nul
mkdir $(INSTALLDIR)\dat\lua 2>null || echo "">nul
pushd $(RLTILES) && $(MAKE) -f makefile.mgw distclean
$(subst /,\,$(COPY) $< $@)
dat/tiles/%.png: rltiles/%.png
pushd $(RLTILES) && $(MAKE) -f makefile.mgw all
mkdir $(OPATH)\rltiles 2>nul || echo.>nul
$(TILEDEFSRCS): makerltiles
$(TILEDEFHDRS): makerltiles
ORIGTILEFILES = $(TILEFILES:%=$(RLTILES)/%)
GAME_DEPENDS := prepare $(LUASRC)\$(LUALIBA) $(FSQLLIBA) $(PCRESRC)\$(PCRELIBA) $(TILEHEADERS) $(DESTTILEFILES) $(OBJECTS)
$(OBJECTS) $(RESOURCEOBJ)
RESOURCE := $(UTIL)crawl.rc
RESOURCEOBJ := crawlres.o
WINDRES := windres.exe
LDFLAGS =
OBJECTS := $(OBJECTS) libgui.o tilepick.o tile2.o tilereg.o tilesdl.o tilefont.o tiletex.o tilemcache.o tilebuf.o crash-w.o
CFLAGS := $(INCLUDES) $(CFWARN) $(CFOTHERS) $(SDL_CFLAGS)
-DWINVER=0x0400 -D_WIN32_IE=0x0400 \
$(EXTRA_DEFINES) \
-O2 \
CFWARN := -Wall -Wwrite-strings -pedantic
LIB = -lwinmm -mwindows -lcomctl32 -L$(LUASRC) -l$(LUALIB) -L$(SQLSRC) -l$(SQLLIB) -L$(PCRESRC) -l$(PCRELIB) -lpng $(SDL_LDFLAGS) -lopengl32 -lglu32 -lSDL_image -lfreetype
INCLUDES := -Iutil -I. -I$(LUASRC) -I$(SQLSRC) -I$(PCRESRC) $(EXTRA_INCLUDES)
RLTILES = rltiles
EXTRA_INCLUDES += -I$(RLTILES)
TILEFILES = \
main.png \
player.png \
DESTTILEFILES = $(TILEFILES:%=dat/tiles/%)
dngn.png \
gui.png
TILEDEFPRES = $(TILEDEFS:%=$(RLTILES)/tiledef-%)
TILEDEFOBJS = $(TILEDEFPRES:%=%.o)
TILEDEFSRCS = $(TILEDEFPRES:%=%.cc)
TILEDEFHDRS = $(TILEDEFPRES:%=%.h)
OBJECTS += $(TILEDEFOBJS)
TILEDEFS = dngn main player gui unrand
PCRESRC := util\pcre
PCRELIB := pcre
PCRELIBA := lib$(PCRELIB).a
EXTRA_DEFINES = -DUSE_TILE -DCLUA_BINDINGS
SDL_PREFIX ?= C:/mingw
SDL_CFLAGS := -D_GNU_SOURCE=1 -Dmain=SDL_main -I$(SDL_PREFIX)/include/SDL
SDL_LDFLAGS := -lmingw32 -lSDLmain -lSDL -mwindows
CXX = g++
YACC := bison -y
LEX := flex
ifneq ($(findstring $(MAKEFLAGS),s),s)
ifndef V
QUIET_YACC = @echo ' ' YACC $@;
QUIET_LEX = @echo ' ' LEX $@;
export V
endif
endif
all: levcomp.tab.cc levcomp.lex.cc
clean:
rm -f levcomp.tab.cc levcomp.tab.h
rm -f levcomp.lex.cc
rm -f *.o
%.tab.cc: %.tab.c
@mv $< $@
%.lex.cc: %.lpp
$(QUIET_LEX)$(LEX) -o$@ $<
%.tab.c: %.ypp
$(QUIET_YACC)$(YACC) -d -b $* $<
#Makefile chooser. Choose one:
#
# Dungeon Crawl Stone Soup
# GNU Makefile
#
# largely written by Steven Noonan <steven@uplinklabs.net>
# (if something breaks, blame him.)
#
GAME = crawl
CC = gcc
CXX = g++
DELETE = rm -f
COPY = cp
#
# Platform Detection
#
# Use the variable OSNAME if you need to add something that's
# platform-specific.
# The valid OSNAME values are currently:
# 'WIN32': alias for MinGW and Cygwin
# 'MacOS': alias for Darwin (Mac OS X)
# 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)
OSNAME =
ifeq ($(UNAME_S),MINGW32)
OSNAME = WIN32
endif
ifeq ($(UNAME_S),CYGWIN)
OSNAME = WIN32
endif
ifeq ($(UNAME_S),Darwin)
OSNAME = MacOS
endif
ifeq ($(OSNAME),)
OSNAME = $(UNAME_S)
endif
ifeq ($(OSNAME),WIN32)
GAME = crawl.exe
endif
TILES = n
#
# Set up object file dependencies for $(GAME) target.
#
include makefile.obj
# Works for Mac OS X and Linux.
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)
OBJECTS += libunix.o
else
OBJECTS += libw32c.o
endif
endif
# To get stack trace symbols.
# Note that MinGW doesn't support -rdynamic.
ifeq ($(OSNAME),WIN32)
LDFLAGS :=
else
LDFLAGS := -rdynamic
endif
# Change this to y (case-sensitive!) if you want to use Unicode glyphs
# in the map, and you have libncursesw available.
UNICODE_GLYPHS = n
# If you're using UNICODE_GLYPHS=y, and have a preferred Unicode
# (UTF-8) locale you want Crawl to use, you can set it here. The
# default is en_US.UTF-8. If you'd prefer that Crawl use the locale
# as set in your environment LC_* variables, use UNICODE_LOCALE = .
UNICODE_LOCALE =
# If you have lex and yacc, set DOYACC to y (lowercase y).
DOYACC := y
# Permissions to set on the game executable.
MCHMOD := 2755
# Permissions to set on the save directory.
MCHMOD_SAVEDIR := 775
# The user:group to install the game as.
INSTALL_UGRP := games:games
INSTALLDIR := /usr/games/crawl
# If you're installing Crawl for multiple users, you *must* set this to a
# valid path before building Crawl. This is not necessary if you are building
# Crawl for a single user.
# SAVEDIR := /usr/games/crawl/saves/
# DATADIR := /usr/games/crawl/data/
PCH := n
# libpcre
PCRESRC := util/pcre/
PCRELIB := pcre
PCRELIBA := lib$(PCRELIB).a
FPCRELIBA := $(PCRESRC)$(PCRELIBA)
# LUA
LUASRC := util/lua/src/
LUALIB := lua
LUALIBA := lib$(LUALIB).a
FLUALIBA := $(LUASRC)$(LUALIBA)
# SQLite
SQLSRC := util/sqlite/
SQLLIB := sqlite3
SQLLIBA := lib$(SQLLIB).a
FSQLLIBA := $(SQLSRC)$(SQLLIBA)
LIBDBM := $(FSQLLIBA)
EXTRA_INCLUDES += -I$(SQLSRC)
EXTRA_DEPENDS += $(FSQLLIBA)
LIB := -L$(LUASRC) -l$(LUALIB) $(LIBDBM)
INCLUDES += -Iutil -I. -I$(LUASRC) $(EXTRA_INCLUDES)
ifneq ($(TILES),n)
RLTILES = rltiles
ifneq ($(shell which pkg-config 2> /dev/null),)
# If pkg-config is available, it's the surest way to find where
# the contributing libraries are located.
#
PNG_INCLUDE := $(shell pkg-config libpng --cflags-only-I)
PNG_CFLAGS := $(shell pkg-config libpng --cflags-only-other)
PNG_LDFLAGS := $(shell pkg-config libpng --libs)
FREETYPE_INCLUDE := $(shell pkg-config freetype2 --cflags-only-I)
FREETYPE_CFLAGS := $(shell pkg-config freetype2 --cflags-only-other)
FREETYPE_LDFLAGS := $(shell pkg-config freetype2 --libs)
SDL_INCLUDE := $(shell pkg-config sdl --cflags-only-I)
SDL_CFLAGS := $(shell pkg-config sdl --cflags-only-other)
SDL_LDFLAGS := $(shell pkg-config sdl --libs)
else # pkg-config
# Ugh, pkg-config isn't available. We're probably on MinGW, Cygwin,
# or some other stupid platform. We've got to assume that the
# libraries are either in the standard paths or are in /opt/<lib>/.
#
PNG_INCLUDE := -I/opt/libpng/include
PNG_CFLAGS :=
PNG_LDFLAGS := -L/opt/libpng/lib -lpng
FREETYPE_INCLUDE := -I/opt/freetype/include
FREETYPE_CFLAGS :=
FREETYPE_LDFLAGS := -L/opt/freetype/lib -lfreetype
ifneq ($(which sdl-config 2> /dev/null),)
# 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)
else # sdl-config
# Fine, we have to make some REALLY ugly assumptions...
#
SDL_INCLUDE := -I/opt/sdl/include/SDL
SDL_CFLAGS :=
SDL_LDFLAGS := -L/opt/sdl/lib -lSDL -lSDLmain
endif # sdl-config
endif # pkg-config
LIB += $(PNG_LDFLAGS) $(FREETYPE_LDFLAGS) $(SDL_LDFLAGS) -lSDL_image
ifeq ($(OSNAME),MacOS)
LIB += -framework OpenGL -framework AppKit
else
LIB += -lGL -lGLU
endif
EXTRA_FLAGS += -DUSE_TILE $(PNG_CFLAGS) $(FREETYPE_CFLAGS) $(SDL_CFLAGS)
INCLUDES += -I$(RLTILES) $(PNG_INCLUDE) $(FREETYPE_INCLUDE) $(SDL_INCLUDE)
endif # TILES
CFWARN := -Wall -Wno-parentheses -Wwrite-strings -Wshadow -pedantic
CFOTHERS = -fno-strict-aliasing -fsigned-char $(EXTRA_FLAGS) -DCLUA_BINDINGS -pipe $(SDL_CFLAGS)
#
# Figure out the build settings for this type of build
#
# Crawl defaults
# Optimized, no debugging.
FULLDEBUG=n
WIZARD=n
DEBUG=n
OPTIMIZE=y
# Debug
# No optimization, full debugging.
ifeq ($(MAKECMDGOALS),debug)
FULLDEBUG=y
WIZARD=y
DEBUG=y
OPTIMIZE=n
endif
# Wizard
# Optimized, with wizard mode.
ifeq ($(MAKECMDGOALS),wizard)
FULLDEBUG=n
WIZARD=y
DEBUG=y
OPTIMIZE=y
endif
# Profile
# Optimized, with full debugging.
ifeq ($(MAKECMDGOALS),profile)
FULLDEBUG=y
WIZARD=y
DEBUG=y
OPTIMIZE=y
endif
ifeq ($(FULLDEBUG),y)
EXTRA_FLAGS += -DFULLDEBUG
endif
ifeq ($(DEBUG),y)
EXTRA_FLAGS += -ggdb
endif
ifeq ($(WIZARD),y)
EXTRA_FLAGS += -DWIZARD
endif
ifeq ($(OPTIMIZE),y)
CFOPTIMIZE := -O2
else
CFOPTIMIZE := -O0
endif
ifneq ($(PCH),n)
CFWARN += -Winvalid-pch
endif
# Cygwin has a panic attack if we do this...
ifneq ($(UNAME_S),CYGWIN)
CFWARN += -Wuninitialized
else
CFWARN += -Wno-uninitialized
endif
ifneq ($(strip $(SAVEDIR)),)
CFOTHERS += '-DSAVE_DIR_PATH="$(strip $(SAVEDIR))"'
endif
ifneq ($(strip $(DATADIR)),)
CFOTHERS += '-DDATA_DIR_PATH="$(strip $(DATADIR))"'
endif
ifeq ($(strip $(UNICODE_GLYPHS)),y)
# Include path for (n)curses with Unicode support.
INCLUDES += -I/usr/include/ncursesw
# Your ncurses library may include Unicode support, and you may not have a
# separate libncursesw; in that case, change this line accordingly.
LIBCURS = ncursesw
CFOTHERS += -DUNICODE_GLYPHS
ifneq ($(strip $(UNICODE_LOCALE)),)
ifneq ($(strip $(UNICODE_LOCALE)),.)
CFOTHERS += -DUNICODE_LOCALE=\"$(strip $(UNICODE_LOCALE))\"
else
CFOTHERS += -DUNICODE_LOCALE=\"\"
endif
endif
# The standard ncurses library also supports Unicode on Mac OS/Darwin.
ifeq ($(shell uname),Darwin)
LIBCURS = ncurses
endif
else
# Include path for curses or ncurses (non-Unicode).
INCLUDES += -I/usr/include/ncurses
LIBCURS = ncurses
endif
ifeq ($(OSNAME),WIN32)
ifneq ($(TILES),n)
CFOTHERS += -DWIN32TILES
else
CFOTHERS += -DWIN32CONSOLE
endif
endif
ifeq ($(OSNAME),WIN32)
INCLUDES += -Iutil/pcre
LIB += $(FPCRELIBA)
else
LIB += -l$(LIBCURS)
endif
CFLAGS := $(CFOPTIMIZE) $(CFWARN) $(INCLUDES) $(CFOTHERS)
YCFLAGS := $(CFOPTIMIZE) $(CFOTHERS) $(INCLUDES)
UTIL = util/
OBJECTS := $(UTIL)levcomp.tab.o $(UTIL)levcomp.lex.o $(OBJECTS)
LEX := $(shell which flex 2> /dev/null)
YACC := $(shell which bison 2> /dev/null)
ifeq ($(strip $(LEX)),)
DOYACC := n
endif
ifeq ($(strip $(YACC)),)
DOYACC := n
endif
ifneq ($(findstring $(MAKEFLAGS),s),s)
ifndef V
QUIET_CC = @echo ' ' CC $@;
QUIET_CXX = @echo ' ' CXX $@;
QUIET_PCH = @echo ' ' PCH $@;
QUIET_LINK = @echo ' ' LINK $@;
QUIET_COPY = @echo ' ' COPY $@;
QUIET_DEPEND = @echo ' ' DEPEND $@;
export V
endif
endif
MAKEFILE ?= makefile.unix
#MAKEFILE ?= makefile.dos
#MAKEFILE ?= makefile.osx
#MAKEFILE ?= makefile.mgw
#MAKEFILE ?= makefile_tiles.mgw
#MAKEFILE ?= makefile_tiles.unix
ifneq ($(TILES),n)
TILEDEFS = dngn main player gui unrand
TILEDEFPRES = $(TILEDEFS:%=$(RLTILES)/tiledef-%)
TILEDEFTXTS = $(TILEDEFPRES:%=%.txt)
TILEDEFOBJS = $(TILEDEFPRES:%=%.o)
TILEDEFSRCS = $(TILEDEFPRES:%=%.cc)
TILEDEFHDRS = $(TILEDEFPRES:%=%.h)
all:
+$(MAKE) -f $(MAKEFILE)
GAME_DEPENDS := $(LUASRC)$(LUALIBA) $(EXTRA_DEPENDS) $(OBJECTS)
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
noopt:
+$(MAKE) -f $(MAKEFILE)
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
##########################################################################
all: $(GAME)
test: $(GAME)
$(PWD)/$(GAME) -test
##########################################################################
# Dependencies
DEPENDENCY_MKF := makefile.dep
install:
+$(MAKE) -f $(MAKEFILE) install
ifeq ($(shell which fastdep 2> /dev/null),)
depend: $(OBJECTS:.o=.cc)
rm -f $(DEPENDENCY_MKF).tmp
@for i in $^; do \
echo ' ' DEP $$i; \
$(CXX) -MM $(CFLAGS) $$i >>$(DEPENDENCY_MKF).tmp 2>/dev/null; \
done
mv -f $(DEPENDENCY_MKF).tmp $(DEPENDENCY_MKF)
else
depend: $(DEPENDENCY_MKF)
%.dep: $(OBJECTS:.o=.cc)
$(QUIET_DEPEND)fastdep $(INCLUDES) *.h $(OBJECTS:.o=.cc) > $@
endif
-include $(DEPENDENCY_MKF)
##########################################################################
# The level compiler
#
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: $(UTIL)levcomp.ypp
+@$(MAKE) -C $(UTIL) levcomp.tab.cc
$(UTIL)levcomp.lex.cc: $(UTIL)levcomp.lpp
+@$(MAKE) -C $(UTIL) levcomp.lex.cc
else
# Pull the level-compiler stuff up from prebuilt/
$(UTIL)levcomp.tab.cc: prebuilt/levcomp.tab.cc
$(QUIET_COPY)$(COPY) prebuilt/*.h $(UTIL)
$(QUIET_COPY)$(COPY) $< $@
$(UTIL)levcomp.lex.cc: prebuilt/levcomp.lex.cc
$(QUIET_COPY)$(COPY) $< $@
endif
##########################################################################
##########################################################################
# The actual build targets
#
install: $(GAME)
ifeq ($(DATADIR),)
$(error DATADIR not set! Set DATADIR and run make clean install again)
endif
[ -d $(INSTALLDIR) ] || mkdir -p $(INSTALLDIR)
$(COPY) $(GAME) $(INSTALLDIR)
chown $(INSTALL_UGRP) $(INSTALLDIR)/$(GAME)
chmod $(MCHMOD) $(INSTALLDIR)/$(GAME)
mkdir -p $(DATADIR)/dat
mkdir -p $(DATADIR)/dat/lua
mkdir -p $(DATADIR)/dat/clua
mkdir -p $(DATADIR)/dat/descript
mkdir -p $(DATADIR)/dat/database
$(COPY) dat/*.des $(DATADIR)/dat
$(COPY) dat/lua/*.lua $(DATADIR)/dat/lua
$(COPY) dat/clua/*.lua $(DATADIR)/dat/clua
$(COPY) dat/descript/*.txt $(DATADIR)/dat/descript
$(COPY) dat/database/*.txt $(DATADIR)/dat/database
mkdir -p $(DATADIR)/settings
$(COPY) ../settings/* $(DATADIR)/settings/
mkdir -p $(DATADIR)/docs
$(COPY) ../docs/*.txt $(DATADIR)/docs
chown -R $(INSTALL_UGRP) $(DATADIR)
ifneq ($(SAVEDIR),)
mkdir -p $(SAVEDIR)
chown $(INSTALL_UGRP) $(SAVEDIR)
chmod $(MCHMOD_SAVEDIR) $(SAVEDIR)
endif
+$(MAKE) -f $(MAKEFILE) clean
+$(MAKE) -C $(UTIL) clean
$(DELETE) *.o
$(DELETE) *.ixx
clean-lua:
+$(MAKE) -C $(LUASRC) clean
clean-sql:
+$(MAKE) -C $(SQLSRC) clean
distclean: clean clean-lua clean-sql clean-rltiles
$(DELETE) bones.*
$(DELETE) morgue.txt
$(DELETE) scores
$(DELETE) $(GAME)
$(DELETE) *.sav
$(DELETE) core
$(DELETE) *.0*
$(DELETE) *.lab
$(DELETE) $(DEPENDENCY_MKF)
$(GAME): $(GAME_DEPENDS)
$(QUIET_LINK)$(CXX) $(LDFLAGS) $(CFLAGS) $(OBJECTS) -o $(GAME) $(LIB)
.PHONY : debug profile wizard
debug: $(GAME)
profile: $(GAME)
wizard: $(GAME)
# [ds] Note we don't use the standard CFLAGS here; that's intentional, most
# flex/bison combos I've tried don't produce code that passes the warnings
# test.
$(UTIL)%.o: $(UTIL)%.cc
$(QUIET_CXX)$(CXX) $(YCFLAGS) -o $@ -c $<
ifneq ($(PCH),n)
%.h.gch: %.h
$(QUIET_PCH)$(CXX) $(CFLAGS) -c $< -o $@
CC_DEP := AppHdr.h.gch
endif
$(OBJECTS:%.o=%.cc): $(CC_DEP) $(TILEDEFHDRS)
%.o: %.m
$(QUIET_CXX)$(CC) $(CFLAGS) -c $< -o $@
%.o: %.cc
$(QUIET_CXX)$(CXX) $(CFLAGS) -c $< -o $@
#############################################################################
# Build PCRE
$(FPCRELIBA):
+@$(MAKE) -C $(PCRESRC)
# WIZARD mode currently includes asserts, bounds checking, item checking and
# monster checking.
wizard:
+$(MAKE) -f $(MAKEFILE) debug EXTRA_FLAGS='-g -DWIZARD -DDEBUG -DDEBUG_ITEM_SCAN -DDEBUG_MONS_SCAN'
#############################################################################
# Build SQLite
# [dshaligram] The individual makefile need not necessarily support
# package-source; only makefile.unix does at the moment.
package-source:
+$(MAKE) -f $(MAKEFILE) package-source
#############################################################################
# Build unrandart data
art-data.h: art-data.txt util/art-data.pl art-func.h
util/art-data.pl
#############################################################################
# RLTiles
#
# DO NOT DELETE THIS LINE -- $(MAKE) depend depends on it.
$(TILEDEFSRCS): rltile-build
$(TILEDEFHDRS): rltile-build
$(ORIGTILEFILES): rltile-build
dat/tiles/%.png: $(RLTILES)/%.png
$(QUIET_COPY)$(COPY) $< $@
clean-rltiles:
+$(MAKE) -C $(RLTILES) -f makefile.unix distclean
#############################################################################
# Packaging a source tarball for release
#
# To package, you *must* have lex and yacc to generate the intermediates.
ifeq ($(DOYACC),y)
package-source: distclean prebuildyacc pkgtidy depend removeold vlink \
pkgtarbz2 pkgzip
pkgtidy:
$(DELETE) $(PKG_TIDY_LIST)
removeold:
if [ -f ../../$(SRC_PKG_TAR) ]; then $(DELETE) ../../$(SRC_PKG_TAR); fi
if [ -f ../../$(SRC_PKG_ZIP) ]; then $(DELETE) ../../$(SRC_PKG_ZIP); fi
pkgtarbz2:
cd ../.. && tar -ch --bzip2 -f $(SRC_PKG_TAR) \
-X $(PKG_EXCLUDES) $(PKG_SRC_DIR)
pkgzip:
cd ../.. && zip -rq $(SRC_PKG_ZIP) $(PKG_SRC_DIR) \
-x@$(PKG_EXCLUDES)
endif