gzdoom/Makefile.mingw
Randy Heit 9cb674c60c - Added an assembly version of rt_shaded4cols, since that's the main decal
drawing function. The most improvement came from being able to turn some
  constant variables into immediate values with self-modifying code, but I
  also managed to reorder it to make it a little faster. It's about 9% faster
  than VC++'s code and 19% faster than GCC's code. That's not a huge
  improvement (for VC++), but at least it's measurable.
- Removed the solid fill "optimization" from rt_shaded4cols(), because in my
  testing, it didn't help any and in fact, hurt just a little bit.
- In the name of simplification, all the rt_tlate* drawers were changed to do
  the translation in one step and the drawing in another. This lets me call
  the untranslated drawer to do the real drawing instead of mostly duplicating
  them. Performance wise, there is practically no difference from before.


SVN r771 (trunk)
2008-02-27 03:11:35 +00:00

150 lines
4.6 KiB
Text

# This makefile makes zdoom(d).exe only.
# Makefile.mgw builds this plus everything else.
# 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"
ifeq ($(findstring msys,$(shell sh --version 2>nul)),msys)
WINCMD=0
else
WINCMD=1
endif
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 -Ijpeg-6b -Isrc -Isrc/win32 -Isrc/g_doom -Isrc/g_heretic -Isrc/g_hexen -Isrc/g_raven -Isrc/g_strife -Isrc/g_shared -Isrc/oplsynth -Isrc/sound -Isrc/textures -Isrc/thingdef
LDFLAGS += flac/libflac.a zlib/libz.a jpeg-6b/libjpeg.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/ textures/ thingdef/)
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))
# win32/wrappers.nas should be built *only* for Visual C++ 2005 to enable execution on Windows 95
AOBJFILES = $(filter-out %/wrappers.o,$(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 $@ $<
# This file needs special handling because GCC misoptimizes it otherwise.
$(OBJDIR)/fmopl.o: src/oplsynth/fmopl.cpp
$(CCDV) $(CXX) $(CXXFLAGS) -fno-tree-dominator-opts -fno-tree-fre -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) nasm -o $@ -f win32 $<
@tools/fixrtext/fixrtext $@
$(OBJDIR)/%.o : %.rc
$(CCDV) windres --include-dir=src/win32 -o $@ -i $<
$(TARGET): testobjdir updaterev $(OBJS)
$(CCDV) $(CXX) -o $@ $(OBJS) $(LDFLAGS)
ifeq (1,$(WINCMD))
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
else
clean:
rm -f $(RELEASETARGET)
rm -f $(DEBUGTARGET)
rm -fr $(DEBUGOBJDIR)
rm -fr $(RELEASEOBJDIR)
cleandep:
rm -f $(DEBUGOBJDIR)\*.d
rm -f $(RELEASEOBJDIR)\*.d
endif
testobjdir:
ifeq (1,$(WINCMD))
-@if not exist $(OBJDIR) mkdir $(OBJDIR)
else
-@if [ ! -e $(OBJDIR) ]; then mkdir $(OBJDIR); fi
endif
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