# Makefile for Visual Studio | |
# Written by Krzysztof Kowalczyk (http://blog.kowalczyk.info) | |
# This code is in public domain. | |
CC = cl.exe | |
LD = link.exe | |
ZLIB_DIR=ext\zlib | |
FREETYPE_DIR=ext\freetype231 | |
JPEG_DIR=ext\jpeg | |
VALID_TARGET=no | |
!if "$(TARGET)"=="rel" | |
OUTDIR=rel | |
#/Gy - separate functions for linker. Generates smaller code. | |
#/GL - enables link-time code generation. Requires /LTCG in linker. | |
# generates smaller and faster code | |
CFLAGS = $(CFLAGS) /D "NDEBUG" /D "_SECURE_CSL=0" /MD /Ox /Os /Gy /GL | |
# /Gr - __fastcall calling convention. Generates smaller and faster code. | |
#CFLAGS = $(CFLAGS) /Gr | |
# /Oy - omits frame pointers. Should generate smaller code but I'm not seeing that, | |
# so I'm not enabling this function. | |
#CFLAGS = $(CFLAGS) /Oy | |
VALID_TARGET=yes | |
!endif | |
!if "$(TARGET)"=="dbg" | |
OUTDIR=dbg | |
CFLAGS = $(CFLAGS) /D "_DEBUG" /MDd /Od | |
VALID_TARGET=yes | |
!endif | |
!if "$(ANALYZE)"=="yes" | |
CFLAGS = $(CFLAGS) /analyze | |
!endif | |
O=$(OUTDIR) | |
CFLAGS = $(CFLAGS) /nologo /c | |
# standard windows defines | |
CFLAGS = $(CFLAGS) /D "WIN32" /D "WINDOWS" /D "_WIN32_WINNT=0x0500" | |
#CFLAGS = $(CFLAGS) /D "WIN32_LEAN_AND_MEAN" | |
#CFLAGS = $(CFLAGS) /D "UNICODE" /D "_UNICODE" | |
CFLAGS = $(CFLAGS) /D "_SCL_SECURE_NO_DEPRECATE" /D "_CRT_SECURE_NO_DEPRECATE" | |
CFLAGS = $(CFLAGS) /D "_CRT_SECURE_NO_WARNINGS" | |
#CFLAGS = $(CFLAGS) /D "_DLL" | |
#CFLAGS = $(CFLAGS) /wd4996 | |
CFLAGS = $(CFLAGS) /W3 | |
#CFLAGS = $(CFLAGS) /Wall | |
# /GR- : disable C++ RTTI | |
CFLAGS = $(CFLAGS) /GR- | |
CFLAGS = $(CFLAGS) /Zi | |
# /FAscu - generate assembly listings | |
CFLAGS = $(CFLAGS) /FAscu | |
CFLAGS = $(CFLAGS) /Imsvc /Imsvc/poppler /I. /Igoo /Ipoppler /Isplash /Ifofi /Itest | |
CFLAGS = $(CFLAGS) /I$(ZLIB_DIR) /I$(JPEG_DIR) /I$(FREETYPE_DIR)\include | |
LIBS = $(LIBS) kernel32.lib advapi32.lib user32.lib gdi32.lib | |
LDFLAGS = $(LDFLAGS) /nologo /DEBUG | |
#CFLAGS = $(CFLAGS) /D "USE_FIXEDPOINT" | |
!if "$(TARGET)"=="rel" | |
# /opt:ref - removes unused functions | |
# /opt:icf - removes duplicate functions | |
# /ltcg - link-time code generation. Generates smaller and faster code. Requires /GL when compiling. | |
LDFLAGS = $(LDFLAGS) /opt:ref /opt:icf /opt:nowin98 /ltcg | |
LIBS = $(LIBS) $(ZLIB_DIR)\zlib_s.lib $(JPEG_DIR)\jpeg_s.lib $(FREETYPE_DIR)\freetype231mt.lib | |
LDFLAGS = $(LDFLAGS) /NODEFAULTLIB:libcmt | |
!else | |
LIBS = $(LIBS) $(ZLIB_DIR)\zlib_ds.lib $(JPEG_DIR)\jpeg_ds.lib $(FREETYPE_DIR)\freetype231mt_d.lib | |
LDFLAGS = $(LDFLAGS) /NODEFAULTLIB:libcmtd | |
!endif | |
FOFI_OBJS=$(O)\FoFiBase.obj $(O)\FoFiEncodings.obj $(O)\FoFiTrueType.obj \ | |
$(O)\FoFiType1.obj $(O)\FoFiType1C.obj | |
GOO_OBJS=$(O)\FixedPoint.obj $(O)\GooHash.obj $(O)\GooList.obj $(O)\GooString.obj \ | |
$(O)\GooTimer.obj $(O)\gfile.obj $(O)\gmem.obj $(O)\gmempp.obj | |
POPPLER_OBJS=$(O)\Annot.obj $(O)\Array.obj $(O)\BuiltinFont.obj $(O)\BuiltinFontTables.obj \ | |
$(O)\CMap.obj $(O)\Catalog.obj $(O)\CharCodeToUnicode.obj $(O)\DCTStream.obj \ | |
$(O)\Decrypt.obj $(O)\Dict.obj $(O)\Error.obj \ | |
$(O)\FontEncodingTables.obj $(O)\FontInfo.obj $(O)\Form.obj $(O)\Function.obj \ | |
$(O)\Gfx.obj $(O)\GfxFont.obj $(O)\GfxState.obj $(O)\GlobalParams.obj \ | |
$(O)\GlobalParamsWin.obj \ | |
$(O)\JArithmeticDecoder.obj $(O)\JBIG2Stream.obj $(O)\JPXStream.obj \ | |
$(O)\Lexer.obj $(O)\Link.obj $(O)\NameToCharCode.obj $(O)\Object.obj \ | |
$(O)\Outline.obj $(O)\OutputDev.obj $(O)\PDFDoc.obj $(O)\PDFDocEncoding.obj \ | |
$(O)\Page.obj $(O)\PageLabelInfo.obj $(O)\PageTransition.obj $(O)\Parser.obj \ | |
$(O)\PreScanOutputDev.obj $(O)\ProfileData.obj $(O)\PSTokenizer.obj \ | |
$(O)\SecurityHandler.obj $(O)\Sound.obj $(O)\SplashOutputDev.obj \ | |
$(O)\Stream.obj $(O)\TextOutputDev.obj $(O)\UnicodeMap.obj \ | |
$(O)\UnicodeTypeTable.obj $(O)\XRef.obj | |
# $(O)\FlateStream.obj | |
SPLASH_OBJS=$(O)\Splash.obj $(O)\SplashBitmap.obj $(O)\SplashClip.obj \ | |
$(O)\SplashFTFont.obj $(O)\SplashFTFontEngine.obj $(O)\SplashFTFontFile.obj \ | |
$(O)\SplashFont.obj $(O)\SplashFontEngine.obj $(O)\SplashFontFile.obj \ | |
$(O)\SplashFontFileID.obj $(O)\SplashPath.obj $(O)\SplashPattern.obj \ | |
$(O)\SplashScreen.obj $(O)\SplashState.obj $(O)\SplashT1Font.obj \ | |
$(O)\SplashT1FontEngine.obj $(O)\SplashT1FontFile.obj \ | |
$(O)\SplashXPath.obj $(O)\SplashXPathScanner.obj | |
OBJS = $(GOO_OBJS) $(POPPLER_OBJS) $(SPLASH_OBJS) $(FOFI_OBJS) | |
PERFTEST_EXE=$(O)\perftest.exe | |
PERFTEST_PDB=$(O)\perftest.pdb | |
PERFTEST_OBJS=$(OBJS) $(O)\perf-test.obj $(O)\perf-test-preview-win.obj | |
!if "$(VALID_TARGET)"=="yes" | |
all: $(OUTDIR) $(PERFTEST_EXE) | |
$(OUTDIR): force | |
@if not exist $(OUTDIR) mkdir $(OUTDIR) | |
clean: force | |
-rmdir /S /Q $(OUTDIR) | |
rebuild: clean all | |
!else | |
all clean: force | |
@echo TARGET must be set to dbg or rel | |
!endif | |
$(PERFTEST_EXE): $(PERFTEST_OBJS) | |
$(LD) $(LDFLAGS) /OUT:$@ \ | |
/PDB:$(PERFTEST_PDB) \ | |
$** $(LIBS) \ | |
/SUBSYSTEM:CONSOLE /MACHINE:X86 | |
{fofi\}.cc{$(OUTDIR)}.obj:: | |
$(CC) $(CFLAGS) -Fo$(OUTDIR)\ /Fd$(OUTDIR)\vc80.pdb /Fa$(OUTDIR)\ $< | |
{goo\}.cc{$(OUTDIR)}.obj:: | |
$(CC) $(CFLAGS) -Fo$(OUTDIR)\ /Fd$(OUTDIR)\vc80.pdb /Fa$(OUTDIR)\ $< | |
{poppler\}.cc{$(OUTDIR)}.obj:: | |
$(CC) $(CFLAGS) -Fo$(OUTDIR)\ /Fd$(OUTDIR)\vc80.pdb /Fa$(OUTDIR)\ $< | |
{splash\}.cc{$(OUTDIR)}.obj:: | |
$(CC) $(CFLAGS) -Fo$(OUTDIR)\ /Fd$(OUTDIR)\vc80.pdb /Fa$(OUTDIR)\ $< | |
{test\}.cc{$(OUTDIR)}.obj:: | |
$(CC) $(CFLAGS) -Fo$(OUTDIR)\ /Fd$(OUTDIR)\vc80.pdb /Fa$(OUTDIR)\ $< | |
force: ; |