# # Stem for static libs and DLLs # LIB_NAME = libwebp_a LIB_NAME_DEBUG = libwebp_a_debug # # Stem for DLL import libs # IMPLIB_NAME = libwebp IMPLIB_NAME_DEBUG = libwepb_debug !IFNDEF DEP_PATH DEPS_PATH = ../../deps !ENDIF !IFNDEF ARCH !IF ! [ cl 2>&1 | find "x86" > NUL ] ARCH = x86 !ELSE IF ! [ cl 2>&1 | find "x64" > NUL ] ARCH = x64 !ELSE !ERROR Unable to auto-detect toolchain architecture! \ If cl.exe is in your PATH rerun nmake with ARCH=. !ENDIF !ENDIF !IF "$(ARCH)" == "x86" PLATFORM_LDFLAGS = /SAFESEH !ENDIF ############################################################# ## Nothing more to do below this line! MT = mt.exe CCNODBG = cl.exe /nologo /O2 /DNDEBUG CCDEBUG = cl.exe /nologo /Od /Gm /Zi /D_DEBUG /RTC1 CFLAGS = /Isrc /nologo /W3 /EHsc /FD /c /GS CFLAGS = $(CFLAGS) /DWIN32 /D_CRT_SECURE_NO_WARNINGS /DHAVE_WINCODEC_H LDFLAGS = /LARGEADDRESSAWARE /MANIFEST /NXCOMPAT /DYNAMICBASE $(PLATFORM_LDFLAGS) CFLAGSLIB = /DLIBWEBP_STATICLIB LNKDLL = link.exe /DLL LNKLIB = link.exe /lib LNKEXE = link.exe LFLAGS = /nologo /machine:$(ARCH) CFGSET = FALSE !IF "$(OBJDIR)" == "" OUTDIR = ..\obj\ !ELSE OUTDIR = $(OBJDIR) !ENDIF ############################################################## # Runtime library configuration !IF "$(RTLIBCFG)" == "static" RTLIB = /MT RTLIBD = /MTd !ELSE RTLIB = /MD RTLIBD = /MDd !ENDIF DIRBASE = $(OUTDIR)\$(CFG)\$(ARCH) DIROBJ = $(DIRBASE)\obj DIRLIB = $(DIRBASE)\lib DIRINC = $(DIRBASE)\include DIRBIN = $(DIRBASE)\bin # release-static !IF "$(CFG)" == "release-static" TARGET = $(LIB_NAME).lib LNK = $(LNKLIB) /out:$(DIRLIB)\$(TARGET) CC = $(CCNODBG) $(RTLIB) $(CFLAGSLIB) CFGSET = TRUE !ENDIF # debug-static !IF "$(CFG)" == "debug-static" TARGET = $(LIB_NAME_DEBUG).lib LNK = $(LNKLIB) /out:$(DIRLIB)\$(TARGET) CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ####################### # Usage # !IF "$(CFGSET)" == "FALSE" !MESSAGE Usage: nmake /f Makefile.vc [CFG=] [OBJDIR=] [RTLIBCFG=] [] !MESSAGE where is one of: !MESSAGE - release-static - release static library !MESSAGE - debug-static - debug static library !MESSAGE may be: !MESSAGE - clean - perform a clean for CFG !MESSAGE - experimental - build CFG with experimental !MESSAGE . features enabled. Requires zlib. !MESSAGE !MESSAGE controls the runtime library linkage - can be 'static' or 'dynamic'. !MESSAGE can be left blank in which case all is assumed !MESSAGE is the path where you like to build (obj, bins, etc.) !MESSAGE default to ..\obj\ !IF "$(CFG)" != "" !MESSAGE !ERROR please choose a valid configuration instead of "$(CFG)" !ENDIF !ENDIF ####################### # Rules # !IF "$(CFGSET)" == "TRUE" # A config was provided, so the library can be built. # X_OBJS= \ $(DIROBJ)\dec\bits.obj \ $(DIROBJ)\dec\dsp.obj \ $(DIROBJ)\dec\dsp_sse2.obj \ $(DIROBJ)\dec\frame.obj \ $(DIROBJ)\dec\quant.obj \ $(DIROBJ)\dec\tree.obj \ $(DIROBJ)\dec\vp8.obj \ $(DIROBJ)\dec\webp.obj \ $(DIROBJ)\dec\io.obj \ $(DIROBJ)\dec\buffer.obj \ $(DIROBJ)\dec\yuv.obj \ $(DIROBJ)\dec\idec.obj \ $(DIROBJ)\dec\alpha.obj \ $(DIROBJ)\dec\layer.obj \ $(DIROBJ)\enc\analysis.obj \ $(DIROBJ)\enc\bit_writer.obj \ $(DIROBJ)\enc\config.obj \ $(DIROBJ)\enc\cost.obj \ $(DIROBJ)\enc\dsp.obj \ $(DIROBJ)\enc\dsp_sse2.obj \ $(DIROBJ)\enc\frame.obj \ $(DIROBJ)\enc\filter.obj \ $(DIROBJ)\enc\iterator.obj \ $(DIROBJ)\enc\picture.obj \ $(DIROBJ)\enc\quant.obj \ $(DIROBJ)\enc\syntax.obj \ $(DIROBJ)\enc\tree.obj \ $(DIROBJ)\enc\webpenc.obj \ $(DIROBJ)\enc\alpha.obj \ $(DIROBJ)\enc\layer.obj \ $(RESOURCE) EXAMPLES_OBJS = \ $(DIROBJ)\examples\cwebp.obj \ $(DIROBJ)\examples\dwebp.obj all: $(DIRLIB)\$(TARGET) $(DIRBIN)\dwebp.exe $(DIRBIN)\cwebp.exe # Additional include and library paths (for zlib) can be passed via the CL and # LINK environment variables respectively: # > set CL=/I\zlib\include # > set LINK=\zlib\zlib.lib # > nmake /f Makefile.vc CFG=release-static experimental experimental: $(MAKE) /f Makefile.vc \ CFG=$(CFG) CFLAGS="$(CFLAGS) /DWEBP_EXPERIMENTAL_FEATURES" /$(MAKEFLAGS) $(DIRLIB)\$(TARGET): $(X_OBJS) $(LNK) $(LFLAGS) $(X_OBJS) -xcopy $(DIROBJ)\$(LIB_NAME).dll $(DIRBIN) /y -xcopy $(DIROBJ)\$(LIB_NAME).lib $(DIRLIB) /y -xcopy $(DIROBJ)\$(LIB_NAME_DEBUG).dll $(DIRBIN) /y -xcopy $(DIROBJ)\$(LIB_NAME_DEBUG).lib $(DIRLIB) /y -xcopy $(DIROBJ)\$(IMPLIB_NAME).lib $(DIRLIB) /y -xcopy $(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib $(DIRLIB) /y -xcopy $(DIROBJ)\*.exp $(DIRLIB) /y -xcopy $(DIROBJ)\*.pdb $(DIRLIB) /y $(X_OBJS): $(DIROBJ)\enc $(DIROBJ)\dec $(DIRLIB) $(DIRINC) $(DIRBIN) $(EXAMPLES_OBJS): $(DIROBJ)\examples $(DIRLIB)\$(TARGET) $(DIROBJ)\enc: @if not exist "$(DIROBJ)\enc" mkdir $(DIROBJ)\enc $(DIROBJ)\examples: @if not exist "$(DIROBJ)\examples" mkdir $(DIROBJ)\examples $(DIROBJ)\dec: @if not exist "$(DIROBJ)\dec" mkdir $(DIROBJ)\dec $(DIRLIB): @if not exist "$(DIRLIB)" mkdir $(DIRLIB) $(DIRINC): @if not exist "$(DIRINC)" mkdir $(DIRINC) $(DIRBIN): @if not exist "$(DIRBIN)" mkdir $(DIRBIN) .SUFFIXES: .c .obj .res .exe {examples}.c{$(DIROBJ)\examples}.obj: $(CC) $(CFLAGS) /Fo"$@" $< {src\dec}.c{$(DIROBJ)\dec}.obj: $(CC) $(CFLAGS) /Fo"$@" $< {src\enc}.c{$(DIROBJ)\enc}.obj: $(CC) $(CFLAGS) /Fo"$@" $< {$(DIROBJ)\examples}.obj{$(DIRBIN)}.exe: $(LNKEXE) $(LDFLAGS) /OUT:"$@" $< ole32.lib windowscodecs.lib shlwapi.lib $(DIRLIB)\$(TARGET) $(MT) -manifest $@.manifest -outputresource:$@;1 del $@.manifest clean: @-erase /s $(DIROBJ)\*.dll 2> NUL @-erase /s $(DIROBJ)\*.exp 2> NUL @-erase /s $(DIROBJ)\*.idb 2> NUL @-erase /s $(DIROBJ)\*.lib 2> NUL @-erase /s $(DIROBJ)\*.obj 2> NUL @-erase /s $(DIROBJ)\*.pch 2> NUL @-erase /s $(DIROBJ)\*.pdb 2> NUL @-erase /s $(DIROBJ)\*.res 2> NUL !ENDIF # End of case where a config was provided.