# created on 4/12/2006 by James Bentler CXX ?= g++ CPPFLAGS ?= -Wall -Wno-unused -O2 -fomit-frame-pointer CXXFLAGS += -DHAVE_FILELENGTH -D__forceinline=inline -Izlib -IFLAC `sdl-config --cflags` CXXFLAGS += -Dstricmp=strcasecmp -Dstrnicmp=strncasecmp LDFLAGS += -lFLAC++ -lFLAC -lz -lfmod `sdl-config --libs` NASM ?= nasm NASMFLAGS += -f elf -DM_TARGET_LINUX SRCDIRS = src/ $(addprefix src/,g_doom/ g_heretic/ g_hexen/ g_raven/ g_shared/ g_strife/ oplsynth/ sound/ sdl/) INCLUDES = $(addprefix -I,$(SRCDIRS)) CXXFLAGS += $(INCLUDES) RELEASEOBJ ?= releaseobj DEBUGOBJ ?= debugobj CSRCS = $(wildcard $(addsuffix *.cpp,$(SRCDIRS))) ASRCS = $(wildcard src/*.nas) SRCS = $(ASRCS) $(CSRCS) COBJFILES = $(notdir $(patsubst %.cpp,%.o,$(CSRCS))) AOBJFILES = $(notdir $(patsubst %.nas,%.o,$(ASRCS))) ZDOOM = zdoom ZDOOMDEBUG = zdoomd ifndef DEBUG OBJDIR = $(RELEASEOBJ) CXXFLAGS += -DNDEBUG ZDOOMBIN = $(ZDOOM) else OBJDIR = $(DEBUGOBJ) CXXFLAGS += -g ZDOOMBIN = $(ZDOOMDEBUG) endif COBJS = $(addprefix $(OBJDIR)/,$(COBJFILES)) DEPS = $(patsubst %.o,%.d,$(COBJS)) OBJS = $(addprefix $(OBJDIR)/,$(AOBJFILES)) $(COBJS) # rule pattern for dependencies define DEPBUILD_PATTERN _dep_: _src_ echo "_dep_: _src_" $(CXX) _src_ -MM $(CXXFLAGS) -MT "$$(patsubst %.d,%.o,_dep_) _dep_" -MF _dep_ -include _dep_ endef # rule pattern for assembly files define ASMBUILD_PATTERN _obj_: _src_ echo "_obj_: _src_" $(NASM) -o _obj_ $(NASMFLAGS) _src_ endef all: $(ZDOOMBIN) zdoom.wad $(ZDOOMBIN): $(DEPS) $(OBJDIR) $(OBJS) $(CXX) $(LDFLAGS) $(OBJS) -o $(ZDOOMBIN) # textually substitute in the _obj_ and the _src_ it depends on to create rules $(foreach src,$(ASRCS), $(eval $(subst _src_,$(src),$(subst \ _obj_,$(OBJDIR)/$(patsubst %.nas,%.o,$(notdir $$$(src))),$(ASMBUILD_PATTERN))))) # textually substitute in the _dep_ and the _src_ it depends on to create rules $(foreach src,$(CSRCS), $(eval $(subst _src_,$(src),$(subst \ _dep_,$(OBJDIR)/$(patsubst %.cpp,%.d,$(notdir $$$(src))),$(DEPBUILD_PATTERN))))) $(OBJDIR)/%.o: $(CXX) -c $(CXXFLAGS) -o $@ -c $< -include $(DEPS) $(OBJDIR): mkdir -p $(OBJDIR) zdoom.wad: make -C wadsrc/ -f Makefile .PHONY : clean cleandeps cleanobjs clean: rm -f $(RELEASEOBJ)/* $(DEBUGOBJ)/* $(ZDOOMDEBUG) $(ZDOOM) cleandeps: rm -f $(RELEASEOBJ)/*.d $(DEBUGOBJ)/*.d cleanobjs: rm -f $(RELEASEOBJ)/*.o $(DEBUGOBJ)/*.o