022d2f886c
The 'inverse' variants are harder to parallelize, since the result of filtering is used for prediction. The 'direct' way is relatively easier. The heavy bottleneck left for optimization is still GradientUnfilter() Change-Id: I358008f492a887e8fff6600cb27857b18dee86e9
416 lines
13 KiB
Makefile
416 lines
13 KiB
Makefile
#
|
|
# Stem for static libs and DLLs
|
|
#
|
|
LIBWEBPDECODER_BASENAME = libwebpdecoder
|
|
LIBWEBP_BASENAME = libwebp
|
|
LIBWEBPMUX_BASENAME = libwebpmux
|
|
LIBWEBPDEMUX_BASENAME = libwebpdemux
|
|
|
|
!IFNDEF ARCH
|
|
!IF ! [ cl 2>&1 | find "x86" > NUL ]
|
|
ARCH = x86
|
|
!ELSE IF ! [ cl 2>&1 | find "x64" > NUL ]
|
|
ARCH = x64
|
|
!ELSE IF ! [ cl 2>&1 | find "ARM" > NUL ]
|
|
ARCH = ARM
|
|
!ELSE
|
|
!ERROR Unable to auto-detect toolchain architecture! \
|
|
If cl.exe is in your PATH rerun nmake with ARCH=<arch>.
|
|
!ENDIF
|
|
!ENDIF
|
|
|
|
!IF "$(ARCH)" == "x86"
|
|
PLATFORM_LDFLAGS = /SAFESEH
|
|
!ENDIF
|
|
|
|
#############################################################
|
|
## Nothing more to do below this line!
|
|
|
|
NOLOGO = /nologo
|
|
CCNODBG = cl.exe $(NOLOGO) /O2 /DNDEBUG
|
|
CCDEBUG = cl.exe $(NOLOGO) /Od /Gm /Zi /D_DEBUG /RTC1
|
|
CFLAGS = /Isrc $(NOLOGO) /W3 /EHsc /c
|
|
CFLAGS = $(CFLAGS) /DWIN32 /D_CRT_SECURE_NO_WARNINGS /DWIN32_LEAN_AND_MEAN
|
|
LDFLAGS = /LARGEADDRESSAWARE /MANIFEST /NXCOMPAT /DYNAMICBASE
|
|
LDFLAGS = $(LDFLAGS) $(PLATFORM_LDFLAGS)
|
|
LNKDLL = link.exe /DLL $(NOLOGO)
|
|
LNKEXE = link.exe $(NOLOGO)
|
|
LNKLIB = lib.exe $(NOLOGO)
|
|
MT = mt.exe $(NOLOGO)
|
|
|
|
!IF "$(ARCH)" == "ARM"
|
|
CFLAGS = $(CFLAGS) /DWINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP
|
|
!ELSE
|
|
CFLAGS = $(CFLAGS) /DHAVE_WINCODEC_H /DWEBP_USE_THREAD
|
|
!ENDIF
|
|
|
|
CFGSET = FALSE
|
|
!IF "$(OBJDIR)" == ""
|
|
OUTDIR = ..\obj\
|
|
!ELSE
|
|
OUTDIR = $(OBJDIR)
|
|
!ENDIF
|
|
|
|
!IF "$(HAVE_AVX2)" == "1"
|
|
CFLAGS = $(CFLAGS) /DWEBP_HAVE_AVX2
|
|
AVX2_FLAGS = /arch:AVX2
|
|
!ENDIF
|
|
|
|
##############################################################
|
|
# Runtime library configuration
|
|
!IF "$(RTLIBCFG)" == "static"
|
|
RTLIB = /MT
|
|
RTLIBD = /MTd
|
|
!ELSE IF "$(RTLIBCFG)" == "legacy"
|
|
RTLIBCFG = static
|
|
RTLIB = /MT
|
|
RTLIBD = /MTd
|
|
CFLAGS = $(CFLAGS) /GS- /arch:IA32
|
|
!ELSE
|
|
RTLIB = /MD
|
|
RTLIBD = /MDd
|
|
!ENDIF
|
|
DIRBASE = $(OUTDIR)\$(CFG)\$(ARCH)
|
|
DIROBJ = $(DIRBASE)\obj
|
|
DIRLIB = $(DIRBASE)\lib
|
|
DIRINC = $(DIRBASE)\include
|
|
DIRBIN = $(DIRBASE)\bin
|
|
LIBWEBP_PDBNAME = $(DIROBJ)\$(LIBWEBP_BASENAME).pdb
|
|
OUTPUT_DIRS = $(DIRBIN) $(DIRINC) $(DIRLIB) \
|
|
$(DIROBJ)\dec \
|
|
$(DIROBJ)\demux \
|
|
$(DIROBJ)\dsp \
|
|
$(DIROBJ)\enc \
|
|
$(DIROBJ)\examples \
|
|
$(DIROBJ)\mux \
|
|
$(DIROBJ)\utils \
|
|
|
|
# Target configuration
|
|
!IF "$(CFG)" == "release-static"
|
|
CC = $(CCNODBG)
|
|
STATICLIBBUILD = TRUE
|
|
!ELSE IF "$(CFG)" == "debug-static"
|
|
CC = $(CCDEBUG)
|
|
RTLIB = $(RTLIBD)
|
|
STATICLIBBUILD = TRUE
|
|
LIBWEBPDECODER_BASENAME = $(LIBWEBPDECODER_BASENAME)_debug
|
|
LIBWEBP_BASENAME = $(LIBWEBP_BASENAME)_debug
|
|
LIBWEBPMUX_BASENAME = $(LIBWEBPMUX_BASENAME)_debug
|
|
LIBWEBPDEMUX_BASENAME = $(LIBWEBPDEMUX_BASENAME)_debug
|
|
!ELSE IF "$(CFG)" == "release-dynamic"
|
|
CC = $(CCNODBG)
|
|
DLLBUILD = TRUE
|
|
!ELSE IF "$(CFG)" == "debug-dynamic"
|
|
CC = $(CCDEBUG)
|
|
RTLIB = $(RTLIBD)
|
|
DLLBUILD = TRUE
|
|
LIBWEBPDECODER_BASENAME = $(LIBWEBPDECODER_BASENAME)_debug
|
|
LIBWEBP_BASENAME = $(LIBWEBP_BASENAME)_debug
|
|
LIBWEBPMUX_BASENAME = $(LIBWEBPMUX_BASENAME)_debug
|
|
LIBWEBPDEMUX_BASENAME = $(LIBWEBPDEMUX_BASENAME)_debug
|
|
!ENDIF
|
|
|
|
!IF "$(STATICLIBBUILD)" == "TRUE"
|
|
CC = $(CC) $(RTLIB)
|
|
CFGSET = TRUE
|
|
LIBWEBPDECODER = $(DIRLIB)\$(LIBWEBPDECODER_BASENAME).lib
|
|
LIBWEBP = $(DIRLIB)\$(LIBWEBP_BASENAME).lib
|
|
LIBWEBPMUX = $(DIRLIB)\$(LIBWEBPMUX_BASENAME).lib
|
|
LIBWEBPDEMUX = $(DIRLIB)\$(LIBWEBPDEMUX_BASENAME).lib
|
|
!ELSE IF "$(DLLBUILD)" == "TRUE"
|
|
DLLC = webp_dll.c
|
|
DLLINC = webp_dll.h
|
|
DLL_OBJS = $(DIROBJ)\$(DLLC:.c=.obj)
|
|
CC = $(CC) /I$(DIROBJ) /FI$(DLLINC) $(RTLIB) /DWEBP_DLL
|
|
LIBWEBPDECODER = $(DIRLIB)\$(LIBWEBPDECODER_BASENAME)_dll.lib
|
|
LIBWEBP = $(DIRLIB)\$(LIBWEBP_BASENAME)_dll.lib
|
|
LIBWEBPMUX = $(DIRLIB)\$(LIBWEBPMUX_BASENAME)_dll.lib
|
|
LIBWEBPDEMUX = $(DIRLIB)\$(LIBWEBPDEMUX_BASENAME)_dll.lib
|
|
LIBWEBP_PDBNAME = $(DIROBJ)\$(LIBWEBP_BASENAME)_dll.pdb
|
|
CFGSET = TRUE
|
|
!ENDIF
|
|
|
|
#######################
|
|
# Usage
|
|
#
|
|
!IF "$(CFGSET)" == "FALSE"
|
|
!MESSAGE Usage: nmake /f Makefile.vc [CFG=<config>]
|
|
!MESSAGE . [OBJDIR=<path>] [RTLIBCFG=<rtlib>] [<target>]
|
|
!MESSAGE
|
|
!MESSAGE where <config> is one of:
|
|
!MESSAGE - release-static - release static library
|
|
!MESSAGE - debug-static - debug static library
|
|
!MESSAGE - release-dynamic - release dynamic link library (DLL)
|
|
!MESSAGE - debug-dynamic - debug dynamic link library (DLL)
|
|
!MESSAGE
|
|
!MESSAGE <target> may be:
|
|
!MESSAGE - clean - perform a clean for CFG
|
|
!MESSAGE - experimental - build CFG with experimental
|
|
!MESSAGE . features enabled.
|
|
!MESSAGE - (empty) - build libwebp-based targets for CFG
|
|
!MESSAGE - all - build (de)mux-based targets for CFG
|
|
!MESSAGE - gif2webp - requires libgif & >= VS2013
|
|
!MESSAGE
|
|
!MESSAGE RTLIBCFG controls the runtime library linkage - 'static' or 'dynamic'.
|
|
!MESSAGE 'legacy' will produce a Windows 2000 compatible library.
|
|
!MESSAGE OBJDIR is the path where you like to build (obj, bins, etc.),
|
|
!MESSAGE defaults 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.
|
|
#
|
|
|
|
DEC_OBJS = \
|
|
$(DIROBJ)\dec\alpha.obj \
|
|
$(DIROBJ)\dec\buffer.obj \
|
|
$(DIROBJ)\dec\frame.obj \
|
|
$(DIROBJ)\dec\idec.obj \
|
|
$(DIROBJ)\dec\io.obj \
|
|
$(DIROBJ)\dec\quant.obj \
|
|
$(DIROBJ)\dec\tree.obj \
|
|
$(DIROBJ)\dec\vp8.obj \
|
|
$(DIROBJ)\dec\vp8l.obj \
|
|
$(DIROBJ)\dec\webp.obj \
|
|
|
|
DEMUX_OBJS = \
|
|
$(DIROBJ)\demux\demux.obj \
|
|
|
|
DSP_DEC_OBJS = \
|
|
$(DIROBJ)\dsp\alpha_processing.obj \
|
|
$(DIROBJ)\dsp\alpha_processing_mips_dsp_r2.obj \
|
|
$(DIROBJ)\dsp\alpha_processing_sse2.obj \
|
|
$(DIROBJ)\dsp\cpu.obj \
|
|
$(DIROBJ)\dsp\dec.obj \
|
|
$(DIROBJ)\dsp\dec_clip_tables.obj \
|
|
$(DIROBJ)\dsp\dec_mips32.obj \
|
|
$(DIROBJ)\dsp\dec_mips_dsp_r2.obj \
|
|
$(DIROBJ)\dsp\dec_neon.obj \
|
|
$(DIROBJ)\dsp\dec_sse2.obj \
|
|
$(DIROBJ)\dsp\filters.obj \
|
|
$(DIROBJ)\dsp\filters_mips_dsp_r2.obj \
|
|
$(DIROBJ)\dsp\filters_sse2.obj \
|
|
$(DIROBJ)\dsp\lossless.obj \
|
|
$(DIROBJ)\dsp\lossless_mips32.obj \
|
|
$(DIROBJ)\dsp\lossless_mips_dsp_r2.obj \
|
|
$(DIROBJ)\dsp\lossless_neon.obj \
|
|
$(DIROBJ)\dsp\lossless_sse2.obj \
|
|
$(DIROBJ)\dsp\rescaler.obj \
|
|
$(DIROBJ)\dsp\rescaler_mips32.obj \
|
|
$(DIROBJ)\dsp\rescaler_mips_dsp_r2.obj \
|
|
$(DIROBJ)\dsp\upsampling.obj \
|
|
$(DIROBJ)\dsp\upsampling_mips_dsp_r2.obj \
|
|
$(DIROBJ)\dsp\upsampling_neon.obj \
|
|
$(DIROBJ)\dsp\upsampling_sse2.obj \
|
|
$(DIROBJ)\dsp\yuv.obj \
|
|
$(DIROBJ)\dsp\yuv_mips32.obj \
|
|
$(DIROBJ)\dsp\yuv_mips_dsp_r2.obj \
|
|
$(DIROBJ)\dsp\yuv_sse2.obj \
|
|
|
|
DSP_ENC_OBJS = \
|
|
$(DIROBJ)\dsp\argb.obj \
|
|
$(DIROBJ)\dsp\argb_mips_dsp_r2.obj \
|
|
$(DIROBJ)\dsp\argb_sse2.obj \
|
|
$(DIROBJ)\dsp\enc.obj \
|
|
$(DIROBJ)\dsp\enc_avx2.obj \
|
|
$(DIROBJ)\dsp\enc_mips32.obj \
|
|
$(DIROBJ)\dsp\enc_mips_dsp_r2.obj \
|
|
$(DIROBJ)\dsp\enc_neon.obj \
|
|
$(DIROBJ)\dsp\enc_sse2.obj \
|
|
|
|
EX_FORMAT_DEC_OBJS = \
|
|
$(DIROBJ)\examples\jpegdec.obj \
|
|
$(DIROBJ)\examples\metadata.obj \
|
|
$(DIROBJ)\examples\pngdec.obj \
|
|
$(DIROBJ)\examples\tiffdec.obj \
|
|
$(DIROBJ)\examples\webpdec.obj \
|
|
$(DIROBJ)\examples\wicdec.obj \
|
|
|
|
EX_GIF_DEC_OBJS = \
|
|
$(DIROBJ)\examples\gifdec.obj \
|
|
|
|
EX_UTIL_OBJS = \
|
|
$(DIROBJ)\examples\example_util.obj \
|
|
|
|
ENC_OBJS = \
|
|
$(DIROBJ)\enc\alpha.obj \
|
|
$(DIROBJ)\enc\analysis.obj \
|
|
$(DIROBJ)\enc\backward_references.obj \
|
|
$(DIROBJ)\enc\config.obj \
|
|
$(DIROBJ)\enc\cost.obj \
|
|
$(DIROBJ)\enc\filter.obj \
|
|
$(DIROBJ)\enc\frame.obj \
|
|
$(DIROBJ)\enc\histogram.obj \
|
|
$(DIROBJ)\enc\iterator.obj \
|
|
$(DIROBJ)\enc\near_lossless.obj \
|
|
$(DIROBJ)\enc\picture.obj \
|
|
$(DIROBJ)\enc\picture_csp.obj \
|
|
$(DIROBJ)\enc\picture_psnr.obj \
|
|
$(DIROBJ)\enc\picture_rescale.obj \
|
|
$(DIROBJ)\enc\picture_tools.obj \
|
|
$(DIROBJ)\enc\quant.obj \
|
|
$(DIROBJ)\enc\syntax.obj \
|
|
$(DIROBJ)\enc\token.obj \
|
|
$(DIROBJ)\enc\tree.obj \
|
|
$(DIROBJ)\enc\vp8l.obj \
|
|
$(DIROBJ)\enc\webpenc.obj \
|
|
|
|
MUX_OBJS = \
|
|
$(DIROBJ)\mux\anim_encode.obj \
|
|
$(DIROBJ)\mux\muxedit.obj \
|
|
$(DIROBJ)\mux\muxinternal.obj \
|
|
$(DIROBJ)\mux\muxread.obj \
|
|
|
|
UTILS_DEC_OBJS = \
|
|
$(DIROBJ)\utils\bit_reader.obj \
|
|
$(DIROBJ)\utils\color_cache.obj \
|
|
$(DIROBJ)\utils\filters.obj \
|
|
$(DIROBJ)\utils\huffman.obj \
|
|
$(DIROBJ)\utils\quant_levels_dec.obj \
|
|
$(DIROBJ)\utils\rescaler.obj \
|
|
$(DIROBJ)\utils\random.obj \
|
|
$(DIROBJ)\utils\thread.obj \
|
|
$(DIROBJ)\utils\utils.obj \
|
|
|
|
UTILS_ENC_OBJS = \
|
|
$(DIROBJ)\utils\bit_writer.obj \
|
|
$(DIROBJ)\utils\huffman_encode.obj \
|
|
$(DIROBJ)\utils\quant_levels.obj \
|
|
|
|
LIBWEBPDECODER_OBJS = $(DEC_OBJS) $(DSP_DEC_OBJS) $(UTILS_DEC_OBJS)
|
|
LIBWEBP_OBJS = $(LIBWEBPDECODER_OBJS) $(ENC_OBJS) $(DSP_ENC_OBJS) \
|
|
$(UTILS_ENC_OBJS) $(DLL_OBJS)
|
|
LIBWEBPMUX_OBJS = $(MUX_OBJS) $(LIBWEBPMUX_OBJS)
|
|
LIBWEBPDEMUX_OBJS = $(DEMUX_OBJS) $(LIBWEBPDEMUX_OBJS)
|
|
|
|
OUT_LIBS = $(LIBWEBPDECODER) $(LIBWEBP)
|
|
!IF "$(ARCH)" == "ARM"
|
|
ex: $(OUT_LIBS)
|
|
all: ex
|
|
!ELSE
|
|
OUT_EXAMPLES = $(DIRBIN)\cwebp.exe $(DIRBIN)\dwebp.exe
|
|
EXTRA_EXAMPLES = $(DIRBIN)\vwebp.exe $(DIRBIN)\webpmux.exe
|
|
|
|
ex: $(OUT_LIBS) $(OUT_EXAMPLES)
|
|
all: ex $(EXTRA_EXAMPLES)
|
|
# NB: gif2webp.exe is excluded from 'all' as libgif requires C99 support which
|
|
# is only available from VS2013 onward.
|
|
gif2webp: $(DIRBIN)\gif2webp.exe
|
|
|
|
$(DIRBIN)\cwebp.exe: $(DIROBJ)\examples\cwebp.obj $(EX_FORMAT_DEC_OBJS)
|
|
$(DIRBIN)\dwebp.exe: $(DIROBJ)\examples\dwebp.obj
|
|
$(DIRBIN)\gif2webp.exe: $(DIROBJ)\examples\gif2webp.obj $(EX_GIF_DEC_OBJS)
|
|
$(DIRBIN)\gif2webp.exe: $(EX_UTIL_OBJS) $(LIBWEBPMUX) $(LIBWEBP)
|
|
$(DIRBIN)\vwebp.exe: $(DIROBJ)\examples\vwebp.obj
|
|
$(DIRBIN)\vwebp.exe: $(EX_UTIL_OBJS) $(LIBWEBPDEMUX) $(LIBWEBP)
|
|
$(DIRBIN)\webpmux.exe: $(DIROBJ)\examples\webpmux.obj $(LIBWEBPMUX)
|
|
$(DIRBIN)\webpmux.exe: $(EX_UTIL_OBJS) $(LIBWEBP)
|
|
$(OUT_EXAMPLES): $(EX_UTIL_OBJS) $(LIBWEBP)
|
|
$(EX_UTIL_OBJS) $(EX_FORMAT_DEC_OBJS): $(OUTPUT_DIRS)
|
|
!ENDIF # ARCH == ARM
|
|
|
|
experimental:
|
|
$(MAKE) /f Makefile.vc \
|
|
CFG=$(CFG) \
|
|
CFLAGS="$(CFLAGS) /DWEBP_EXPERIMENTAL_FEATURES" /$(MAKEFLAGS)
|
|
|
|
$(LIBWEBPDECODER): $(LIBWEBPDECODER_OBJS)
|
|
$(LIBWEBP): $(LIBWEBP_OBJS)
|
|
$(LIBWEBPMUX): $(LIBWEBPMUX_OBJS)
|
|
$(LIBWEBPDEMUX): $(LIBWEBPDEMUX_OBJS)
|
|
|
|
$(LIBWEBP_OBJS) $(LIBWEBPMUX_OBJS) $(LIBWEBPDEMUX_OBJS): $(OUTPUT_DIRS)
|
|
|
|
!IF "$(DLLBUILD)" == "TRUE"
|
|
$(LIBWEBP_OBJS) $(LIBWEBPMUX_OBJS) $(LIBWEBPDEMUX_OBJS): \
|
|
$(DIROBJ)\$(DLLINC) $(DIROBJ)\$(DLLC)
|
|
|
|
{$(DIROBJ)}.c{$(DIROBJ)}.obj:
|
|
$(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$@ $<
|
|
|
|
$(LIBWEBPMUX): $(LIBWEBP)
|
|
$(LIBWEBPDEMUX): $(LIBWEBP)
|
|
|
|
$(LIBWEBPDECODER) $(LIBWEBP) $(LIBWEBPMUX) $(LIBWEBPDEMUX):
|
|
$(LNKDLL) /out:$(DIRBIN)\$(@B:_dll=.dll) /implib:$@ $(LFLAGS) $**
|
|
-xcopy $(DIROBJ)\*.pdb $(DIRLIB) /y
|
|
|
|
clean::
|
|
@-erase /s $(DIROBJ)\$(DLLC) $(DIROBJ)\$(DLLINC) 2> NUL
|
|
!ELSE
|
|
$(LIBWEBPDECODER) $(LIBWEBP) $(LIBWEBPMUX) $(LIBWEBPDEMUX):
|
|
$(LNKLIB) /out:$@ $**
|
|
-xcopy $(DIROBJ)\*.pdb $(DIRLIB) /y
|
|
!ENDIF
|
|
|
|
$(OUTPUT_DIRS):
|
|
@if not exist "$(@)" mkdir "$(@)"
|
|
|
|
# generate a helper include to define WEBP_EXTERN suitable for the DLL build
|
|
$(DIROBJ)\$(DLLINC):
|
|
@echo #ifndef WEBP_DLL_H_ > $@
|
|
@echo #define WEBP_DLL_H_ >> $@
|
|
@echo #define WEBP_EXTERN(type) __declspec(dllexport) type >> $@
|
|
@echo #endif /* WEBP_DLL_H_ */ >> $@
|
|
|
|
# expose a WebPFree() function for use in managed code
|
|
$(DIROBJ)\$(DLLC): $(DIROBJ)\$(DLLINC)
|
|
@echo #include ^<stdlib.h^> > $@
|
|
@echo #include "webp_dll.h" >> $@
|
|
@echo // This function should be used in place of free() for memory >> $@
|
|
@echo // returned by the WebP API. >> $@
|
|
@echo WEBP_EXTERN(void) WebPFree(void* ptr) { >> $@
|
|
@echo free(ptr); >> $@
|
|
@echo } >> $@
|
|
|
|
.SUFFIXES: .c .obj .res .exe
|
|
# File-specific flag builds. Note batch rules take precedence over wildcards,
|
|
# so for now name each file individually.
|
|
$(DIROBJ)\dsp\enc_avx2.obj: src\dsp\enc_avx2.c
|
|
$(CC) $(CFLAGS) $(AVX2_FLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$(DIROBJ)\dsp\ \
|
|
src\dsp\$(@B).c
|
|
$(DIROBJ)\examples\gif2webp.obj: examples\gif2webp.c
|
|
$(CC) $(CFLAGS) /DWEBP_HAVE_GIF /Fd$(LIBWEBP_PDBNAME) \
|
|
/Fo$(DIROBJ)\examples\ examples\$(@B).c
|
|
# Batch rules
|
|
{examples}.c{$(DIROBJ)\examples}.obj::
|
|
$(CC) $(CFLAGS) /Fd$(DIROBJ)\examples\ /Fo$(DIROBJ)\examples\ $<
|
|
{src\dec}.c{$(DIROBJ)\dec}.obj::
|
|
$(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$(DIROBJ)\dec\ $<
|
|
{src\demux}.c{$(DIROBJ)\demux}.obj::
|
|
$(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$(DIROBJ)\demux\ $<
|
|
{src\dsp}.c{$(DIROBJ)\dsp}.obj::
|
|
$(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$(DIROBJ)\dsp\ $<
|
|
{src\enc}.c{$(DIROBJ)\enc}.obj::
|
|
$(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$(DIROBJ)\enc\ $<
|
|
{src\mux}.c{$(DIROBJ)\mux}.obj::
|
|
$(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$(DIROBJ)\mux\ $<
|
|
{src\utils}.c{$(DIROBJ)\utils}.obj::
|
|
$(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$(DIROBJ)\utils\ $<
|
|
|
|
{$(DIROBJ)\examples}.obj{$(DIRBIN)}.exe:
|
|
$(LNKEXE) $(LDFLAGS) /OUT:$@ $** \
|
|
ole32.lib windowscodecs.lib shlwapi.lib
|
|
$(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.
|