# -*- 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) $< $@