# Make file 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 CXX = g++ DELETE = del COPY = copy OS_TYPE = WIN32CONSOLE INSTALLDIR := $(OPATH) LIB = -lwinmm -static CFWARN := -Wall -Wwrite-strings \ -Wshadow \ -Werror \ -pedantic INCLUDES := -Iutil -I. CFOTHERS := -fsigned-char \ -fstrict-aliasing \ -pedantic \ -D$(OS_TYPE) $(EXTRA_FLAGS) \ -DWINMM_PLAY_SOUNDS CFLAGS := $(INCLUDES) $(CFWARN) $(CFOTHERS) YCFLAGS := $(INCLUDES) $(CFOTHERS) OBJECTS := $(OBJECTS) libw32c.o LDFLAGS = #LIB = -lcurso -lpano UTIL = util/ # If you don't have flex or bison, set DOYACC to N or empty. DOYACC := n LEX := flex YACC := bison -y 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 levcomp.o \ $(OBJECTS) OBJECTS := $(foreach file,$(OBJECTS),$(OPATH)/$(file)) GAME_DEPENDS := prepare $(OBJECTS) ########################################################################## 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 ########################################################################## install: $(APPNAME) ifneq ($(OPATH),$(INSTALLDIR)) $(COPY) $(APPNAME) ${INSTALLDIR} endif mkdir $(INSTALLDIR)\dat 2>nul || echo "" >nul copy /y dat\*.des $(INSTALLDIR)\dat copy /y ..\init.txt $(INSTALLDIR) 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) distclean: clean $(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) $(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) $(OPATH)/%.o: %.cc ${CXX} ${CFLAGS} -o $@ -c $< $(OPATH)/%.o: $(UTIL)%.cc $(CXX) $(YCFLAGS) -o $@ -c $<