# Sub-makefile autogenerated by premake
# And then tweaked by hand

# Where did you install the FMOD API to? Change this line so that the build process can find it.
FMODDIR = "c:/program files/fmodapi375win"

CC ?= gcc
CXX ?= g++

CONFIG ?= Release
OPTLEVEL ?= 2
ARCH_TYPE ?= pentium
TUNE_TYPE ?= i686
RELEASETARGET ?= zdoomgcc.exe
DEBUGTARGET ?= zdoomgccd.exe
DEBUGOBJDIR ?= debugobj
RELEASEOBJDIR ?= releaseobj

CCDV = @ccdv
RE2C = tools/re2c/re2c

CPPFLAGS = -DWIN32 -D_WIN32 -D_WINDOWS -DHAVE_STRUPR -DHAVE_FILELENGTH -DI_DO_NOT_LIKE_BIG_DOWNLOADS -D__forceinline=inline -MMD -Izlib -IFLAC -Isrc -Isrc/win32 -Isrc/g_doom -Isrc/g_heretic -I src/g_hexen -Isrc/g_raven -Isrc/g_strife -Isrc/g_shared -Isrc/oplsynth -Isrc/sound
LDFLAGS += flac/libflac.a zlib/libz.a -lfmod -lwsock32 -lwinmm -lddraw -ldsound -ldxguid -ldinput8 -lole32 -luser32 -lgdi32 -lcomctl32 -lcomdlg32 -lsetupapi -lws2_32 -Wl,--subsystem,windows

ifdef FMODDIR
  CPPFLAGS += -I$(FMODDIR)/api/inc
  LDFLAGS += -L$(FMODDIR)/api/lib
endif

CFLAGS += -fno-strict-aliasing

ifeq ($(CONFIG),Debug)
  OBJDIR = $(DEBUGOBJDIR)
  CFLAGS += $(CPPFLAGS) -Wall -Wno-unused -g3
  CPPFLAGS += -D_DEBUG
  CXXFLAGS = $(CFLAGS)
  TARGET = $(DEBUGTARGET)
endif
ifeq ($(CONFIG),Release)
  OBJDIR = $(RELEASEOBJDIR)
  CFLAGS += $(CPPFLAGS) -march=$(ARCH_TYPE) -mtune=$(TUNE_TYPE) -Wall -Wno-unused -O$(OPTLEVEL) -fomit-frame-pointer -pipe
  CFLAGS += -ffunction-sections -fno-rtti
  CPPFLAGS += -DNDEBUG
  CXXFLAGS = $(CFLAGS)
  LDFLAGS += -s -Wl,-Map=zdoomgcc.map -Wl,--gc-sections
  TARGET = $(RELEASETARGET)
endif

SRCDIRS = src/ $(addprefix src/,g_doom/ g_heretic/ g_hexen/ g_raven/ g_shared/ g_strife/ oplsynth/ sound/ win32/)
VPATH = $(SRCDIRS)

CPPSRCS = $(wildcard $(addsuffix *.cpp,$(SRCDIRS)))
CSRCS = $(wildcard $(addsuffix *.c,$(SRCDIRS)))
RCSRCS = $(wildcard $(addsuffix *.rc,$(SRCDIRS)))
ifdef NOASM
  CFLAGS += -DNOASM
else
  ASRCS = $(wildcard src/*.nas)
  CFLAGS += -DUSEASM=1
endif
SRCS = $(CSRCS) $(CPPSRCS) $(ASRCS)
CPPOBJFILES = $(notdir $(CPPSRCS:%.cpp=%.o))
COBJFILES = $(notdir $(CSRCS:%.c=%.o))
AOBJFILES = $(notdir $(ASRCS:%.nas=%.o))
RCOBJFILES = $(notdir $(RCSRCS:%.rc=%.o))

COBJS = $(addprefix $(OBJDIR)/,$(CPPOBJFILES) $(COBJFILES) $(RCOBJFILES))
DEPS = $(patsubst %.o,%.d,$(COBJS))
UNORDEREDOBJS = $(addprefix $(OBJDIR)/,$(AOBJFILES)) $(COBJS)

OBJS = $(OBJDIR)/autostart.o $(filter-out %/autostart.o %/autozend.o,$(UNORDEREDOBJS)) $(OBJDIR)/autozend.o

all: $(TARGET)

# This file needs special handling so that it actually gets compiled with SSE2 support.
$(OBJDIR)/nodebuild_classify_sse2.o: src/nodebuild_classify_sse2.cpp
	$(CCDV) $(CXX) $(CXXFLAGS) -msse2 -mfpmath=sse -c -o $@ $<

src/sc_man_scanner.h: src/sc_man_scanner.re
	$(CCDV) $(RE2C) -s -o $@ $<

$(OBJDIR)/%.o : %.cpp
	$(CCDV) $(CXX) $(CXXFLAGS) -o $@ -c $<

$(OBJDIR)/%.o : %.nas
	$(CCDV) nasmw -o $@ -f win32 $<

$(OBJDIR)/%.o : %.rc
	$(CCDV) windres --include-dir=src/win32 -o $@ -i $<


$(TARGET): testobjdir updaterev $(OBJS)
	$(CCDV) $(CXX) -o $@ $(OBJS) $(LDFLAGS)

clean:
	-del /q /f $(RELEASETARGET) 2>nul
	-del /q /f $(DEBUGTARGET) 2>nul
	-del /q /f $(DEBUGOBJDIR) 2>nul
	-del /q /f $(RELEASEOBJDIR) 2>nul

cleandep:
	-del /q /f $(DEBUGOBJDIR)\*.d 2>nul
	-del /q /f $(RELEASEOBJDIR)\*.d 2>nul
	
testobjdir:
	-@if not exist $(OBJDIR) mkdir $(OBJDIR)

updaterev: tools/updaterevision/updaterevision.exe
	@tools/updaterevision/updaterevision . src/svnrevision.h

tools/updaterevision/updaterevision.exe:
	$(MAKE) -C tools/updaterevision


ifeq (,$(findstring $(MAKECMDGOALS),clean cleandep updaterev))
-include $(DEPS)
endif

.PHONY: clean all updaterev testobjdir cleandep
