gzdoom/Makefile.mingw
Randy Heit 087e34bbb3 - Fixed: The source no longer built with GCC.
- Added a cheap pitch shifting for underwater environments that should be fairly
  close to Duke's. It sounds okay for some sounds, but others like the BFG, where
  the timing of the sound actually matters, don't sound good. I shall have to
  replace it with a real pitch shifter DSP unit.


SVN r819 (trunk)
2008-03-19 23:03:14 +00:00

158 lines
5 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 = "e:/program files (x86)/FMOD SoundSystem/FMOD Programmers API Win32"
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
LEMON = tools/lemon/lemon
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 -Isnes_spc/snes_spc
LDFLAGS += zlib/libz.a jpeg-6b/libjpeg.a snes_spc/libsnes_spc.a -lfmodex -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))) src/xlat/parse_xlat.cpp
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 $@ $<
src/xlat/xlat_parser.c: src/xlat/xlat_parser.y
$(CCDV) $(LEMON) -s src/xlat/xlat_parser.y
# Dunno why make isn't picking this stuff up automatically for this file.
$(OBJDIR)/parse_xlat.o: src/xlat/parse_xlat.cpp src/xlat/xlat.h src/xlat/xlat_parser.c src/xlat/xlat_parser.h
$(CCDV) $(CXX) $(CXXFLAGS) -o $@ -c $<
$(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