Makefile.vc (18990B)
1 # 2 # Stem for static libs and DLLs 3 # 4 LIBWEBPDECODER_BASENAME = libwebpdecoder 5 LIBWEBP_BASENAME = libwebp 6 LIBWEBPMUX_BASENAME = libwebpmux 7 LIBWEBPDEMUX_BASENAME = libwebpdemux 8 LIBSHARPYUV_BASENAME = libsharpyuv 9 10 !IFNDEF ARCH 11 !IF ! [ cl 2>&1 | find "x86" > NUL ] 12 ARCH = x86 13 !ELSE IF ! [ cl 2>&1 | find "x64" > NUL ] 14 ARCH = x64 15 !ELSE IF ! [ cl 2>&1 | find "ARM64" > NUL ] 16 ARCH = ARM64 17 !ELSE IF ! [ cl 2>&1 | find "ARM" > NUL ] 18 ARCH = ARM 19 !ELSE 20 !ERROR Unable to auto-detect toolchain architecture! \ 21 If cl.exe is in your PATH rerun nmake with ARCH=<arch>. 22 !ENDIF 23 !ENDIF 24 25 !IF "$(ARCH)" == "x86" 26 PLATFORM_LDFLAGS = /SAFESEH 27 !ENDIF 28 29 ############################################################# 30 ## Nothing more to do below this line! 31 32 NOLOGO = /nologo 33 CCNODBG = cl.exe $(NOLOGO) /O2 /DNDEBUG 34 CCDEBUG = cl.exe $(NOLOGO) /Od /Zi /D_DEBUG /RTC1 35 CFLAGS = /I. /Isrc $(NOLOGO) /MP /W3 /EHsc /c 36 CFLAGS = $(CFLAGS) /DWIN32 /D_CRT_SECURE_NO_WARNINGS /DWIN32_LEAN_AND_MEAN 37 LDFLAGS = /LARGEADDRESSAWARE /MANIFEST:EMBED /NXCOMPAT /DYNAMICBASE 38 LDFLAGS = $(LDFLAGS) $(PLATFORM_LDFLAGS) 39 LNKDLL = link.exe /DLL $(NOLOGO) 40 LNKEXE = link.exe $(NOLOGO) 41 LNKLIB = lib.exe $(NOLOGO) 42 RCNODBG = rc.exe $(NOLOGO) /l"0x0409" # 0x409 = U.S. English 43 RCDEBUG = $(RCNODBG) /D_DEBUG 44 45 !IF "$(ARCH)" == "ARM" 46 CFLAGS = $(CFLAGS) /DWINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP /DWEBP_USE_THREAD 47 !ELSE 48 CFLAGS = $(CFLAGS) /DHAVE_WINCODEC_H /DWEBP_USE_THREAD 49 !ENDIF 50 51 CFGSET = FALSE 52 !IF "$(OBJDIR)" == "" 53 OUTDIR = ..\obj\ 54 !ELSE 55 OUTDIR = $(OBJDIR) 56 !ENDIF 57 58 ############################################################## 59 # Runtime library configuration 60 !IF "$(RTLIBCFG)" == "static" 61 RTLIB = /MT 62 RTLIBD = /MTd 63 !ELSE IF "$(RTLIBCFG)" == "legacy" 64 RTLIBCFG = static 65 RTLIB = /MT 66 RTLIBD = /MTd 67 CFLAGS = $(CFLAGS) /GS- /arch:IA32 68 !ELSE 69 RTLIB = /MD 70 RTLIBD = /MDd 71 !ENDIF 72 DIRBASE = $(OUTDIR)\$(CFG)\$(ARCH) 73 DIROBJ = $(DIRBASE)\obj 74 DIRLIB = $(DIRBASE)\lib 75 DIRINC = $(DIRBASE)\include 76 DIRBIN = $(DIRBASE)\bin 77 LIBWEBP_PDBNAME = $(DIROBJ)\$(LIBWEBP_BASENAME).pdb 78 OUTPUT_DIRS = $(DIRBIN) $(DIRINC) $(DIRLIB) \ 79 $(DIROBJ)\dec \ 80 $(DIROBJ)\demux \ 81 $(DIROBJ)\dsp \ 82 $(DIROBJ)\enc \ 83 $(DIROBJ)\examples \ 84 $(DIROBJ)\extras \ 85 $(DIROBJ)\imageio \ 86 $(DIROBJ)\mux \ 87 $(DIROBJ)\sharpyuv \ 88 $(DIROBJ)\utils \ 89 90 # Target configuration 91 !IF "$(CFG)" == "release-static" 92 CC = $(CCNODBG) 93 STATICLIBBUILD = TRUE 94 !ELSE IF "$(CFG)" == "debug-static" 95 CC = $(CCDEBUG) 96 RTLIB = $(RTLIBD) 97 STATICLIBBUILD = TRUE 98 LIBWEBPDECODER_BASENAME = $(LIBWEBPDECODER_BASENAME)_debug 99 LIBWEBP_BASENAME = $(LIBWEBP_BASENAME)_debug 100 LIBWEBPMUX_BASENAME = $(LIBWEBPMUX_BASENAME)_debug 101 LIBWEBPDEMUX_BASENAME = $(LIBWEBPDEMUX_BASENAME)_debug 102 LIBSHARPYUV_BASENAME = $(LIBSHARPYUV_BASENAME)_debug 103 !ELSE IF "$(CFG)" == "release-dynamic" 104 CC = $(CCNODBG) 105 RC = $(RCNODBG) 106 DLLBUILD = TRUE 107 !ELSE IF "$(CFG)" == "debug-dynamic" 108 CC = $(CCDEBUG) 109 RC = $(RCDEBUG) 110 RTLIB = $(RTLIBD) 111 DLLBUILD = TRUE 112 LIBWEBPDECODER_BASENAME = $(LIBWEBPDECODER_BASENAME)_debug 113 LIBWEBP_BASENAME = $(LIBWEBP_BASENAME)_debug 114 LIBWEBPMUX_BASENAME = $(LIBWEBPMUX_BASENAME)_debug 115 LIBWEBPDEMUX_BASENAME = $(LIBWEBPDEMUX_BASENAME)_debug 116 LIBSHARPYUV_BASENAME = $(LIBSHARPYUV_BASENAME)_debug 117 !ENDIF 118 119 !IF "$(STATICLIBBUILD)" == "TRUE" 120 CC = $(CC) $(RTLIB) 121 CFGSET = TRUE 122 LIBWEBPDECODER = $(DIRLIB)\$(LIBWEBPDECODER_BASENAME).lib 123 LIBWEBP = $(DIRLIB)\$(LIBWEBP_BASENAME).lib 124 LIBWEBPMUX = $(DIRLIB)\$(LIBWEBPMUX_BASENAME).lib 125 LIBWEBPDEMUX = $(DIRLIB)\$(LIBWEBPDEMUX_BASENAME).lib 126 LIBSHARPYUV = $(DIRLIB)\$(LIBSHARPYUV_BASENAME).lib 127 !ELSE IF "$(DLLBUILD)" == "TRUE" 128 CC = $(CC) /I$(DIROBJ) $(RTLIB) /DWEBP_DLL 129 LIBWEBPDECODER = $(DIRLIB)\$(LIBWEBPDECODER_BASENAME)_dll.lib 130 LIBWEBP = $(DIRLIB)\$(LIBWEBP_BASENAME)_dll.lib 131 LIBWEBPMUX = $(DIRLIB)\$(LIBWEBPMUX_BASENAME)_dll.lib 132 LIBWEBPDEMUX = $(DIRLIB)\$(LIBWEBPDEMUX_BASENAME)_dll.lib 133 LIBSHARPYUV = $(DIRLIB)\$(LIBSHARPYUV_BASENAME)_dll.lib 134 LIBWEBP_PDBNAME = $(DIROBJ)\$(LIBWEBP_BASENAME)_dll.pdb 135 CFGSET = TRUE 136 !ENDIF 137 138 !IF "$(UNICODE)" == "1" 139 CFLAGS = $(CFLAGS) /D_UNICODE /DUNICODE 140 !ENDIF 141 142 ####################### 143 # Usage 144 # 145 !IF "$(CFGSET)" == "FALSE" 146 !MESSAGE Usage: nmake /f Makefile.vc [CFG=<config>] 147 !MESSAGE . [OBJDIR=<path>] [RTLIBCFG=<rtlib>] [UNICODE=1] [<target>] 148 !MESSAGE 149 !MESSAGE where <config> is one of: 150 !MESSAGE - release-static - release static library 151 !MESSAGE - debug-static - debug static library 152 !MESSAGE - release-dynamic - release dynamic link library (DLL) 153 !MESSAGE - debug-dynamic - debug dynamic link library (DLL) 154 !MESSAGE 155 !MESSAGE <target> may be: 156 !MESSAGE - clean - perform a clean for CFG 157 !MESSAGE - experimental - build CFG with experimental 158 !MESSAGE . features enabled. 159 !MESSAGE - (empty) - build libwebp-based targets for CFG 160 !MESSAGE - all - build (de)mux-based targets for CFG 161 !MESSAGE - gif2webp - requires libgif & >= VS2013 162 !MESSAGE - anim_diff - requires libgif & >= VS2013 163 !MESSAGE - anim_dump 164 !MESSAGE 165 !MESSAGE RTLIBCFG controls the runtime library linkage - 'static' or 'dynamic'. 166 !MESSAGE 'legacy' will produce a Windows 2000 compatible library. 167 !MESSAGE OBJDIR is the path where you like to build (obj, bins, etc.), 168 !MESSAGE defaults to ..\obj 169 170 !IF "$(CFG)" != "" 171 !MESSAGE 172 !ERROR please choose a valid configuration instead of "$(CFG)" 173 !ENDIF 174 !ENDIF 175 176 ####################### 177 # Rules 178 # 179 !IF "$(CFGSET)" == "TRUE" 180 # A config was provided, so the library can be built. 181 # 182 183 SHARPYUV_OBJS = \ 184 $(DIROBJ)\sharpyuv\sharpyuv.obj \ 185 $(DIROBJ)\sharpyuv\sharpyuv_cpu.obj \ 186 $(DIROBJ)\sharpyuv\sharpyuv_csp.obj \ 187 $(DIROBJ)\sharpyuv\sharpyuv_dsp.obj \ 188 $(DIROBJ)\sharpyuv\sharpyuv_gamma.obj \ 189 $(DIROBJ)\sharpyuv\sharpyuv_neon.obj \ 190 $(DIROBJ)\sharpyuv\sharpyuv_sse2.obj \ 191 192 DEC_OBJS = \ 193 $(DIROBJ)\dec\alpha_dec.obj \ 194 $(DIROBJ)\dec\buffer_dec.obj \ 195 $(DIROBJ)\dec\frame_dec.obj \ 196 $(DIROBJ)\dec\idec_dec.obj \ 197 $(DIROBJ)\dec\io_dec.obj \ 198 $(DIROBJ)\dec\quant_dec.obj \ 199 $(DIROBJ)\dec\tree_dec.obj \ 200 $(DIROBJ)\dec\vp8_dec.obj \ 201 $(DIROBJ)\dec\vp8l_dec.obj \ 202 $(DIROBJ)\dec\webp_dec.obj \ 203 204 DEMUX_OBJS = \ 205 $(DIROBJ)\demux\anim_decode.obj \ 206 $(DIROBJ)\demux\demux.obj \ 207 208 DSP_DEC_OBJS = \ 209 $(DIROBJ)\dsp\alpha_processing.obj \ 210 $(DIROBJ)\dsp\alpha_processing_mips_dsp_r2.obj \ 211 $(DIROBJ)\dsp\alpha_processing_neon.obj \ 212 $(DIROBJ)\dsp\alpha_processing_sse2.obj \ 213 $(DIROBJ)\dsp\alpha_processing_sse41.obj \ 214 $(DIROBJ)\dsp\cpu.obj \ 215 $(DIROBJ)\dsp\dec.obj \ 216 $(DIROBJ)\dsp\dec_clip_tables.obj \ 217 $(DIROBJ)\dsp\dec_mips32.obj \ 218 $(DIROBJ)\dsp\dec_mips_dsp_r2.obj \ 219 $(DIROBJ)\dsp\dec_msa.obj \ 220 $(DIROBJ)\dsp\dec_neon.obj \ 221 $(DIROBJ)\dsp\dec_sse2.obj \ 222 $(DIROBJ)\dsp\dec_sse41.obj \ 223 $(DIROBJ)\dsp\filters.obj \ 224 $(DIROBJ)\dsp\filters_mips_dsp_r2.obj \ 225 $(DIROBJ)\dsp\filters_msa.obj \ 226 $(DIROBJ)\dsp\filters_neon.obj \ 227 $(DIROBJ)\dsp\filters_sse2.obj \ 228 $(DIROBJ)\dsp\lossless.obj \ 229 $(DIROBJ)\dsp\lossless_mips_dsp_r2.obj \ 230 $(DIROBJ)\dsp\lossless_msa.obj \ 231 $(DIROBJ)\dsp\lossless_neon.obj \ 232 $(DIROBJ)\dsp\lossless_sse2.obj \ 233 $(DIROBJ)\dsp\lossless_sse41.obj \ 234 $(DIROBJ)\dsp\lossless_avx2.obj \ 235 $(DIROBJ)\dsp\rescaler.obj \ 236 $(DIROBJ)\dsp\rescaler_mips32.obj \ 237 $(DIROBJ)\dsp\rescaler_mips_dsp_r2.obj \ 238 $(DIROBJ)\dsp\rescaler_msa.obj \ 239 $(DIROBJ)\dsp\rescaler_neon.obj \ 240 $(DIROBJ)\dsp\rescaler_sse2.obj \ 241 $(DIROBJ)\dsp\upsampling.obj \ 242 $(DIROBJ)\dsp\upsampling_mips_dsp_r2.obj \ 243 $(DIROBJ)\dsp\upsampling_msa.obj \ 244 $(DIROBJ)\dsp\upsampling_neon.obj \ 245 $(DIROBJ)\dsp\upsampling_sse2.obj \ 246 $(DIROBJ)\dsp\upsampling_sse41.obj \ 247 $(DIROBJ)\dsp\yuv.obj \ 248 $(DIROBJ)\dsp\yuv_mips32.obj \ 249 $(DIROBJ)\dsp\yuv_mips_dsp_r2.obj \ 250 $(DIROBJ)\dsp\yuv_neon.obj \ 251 $(DIROBJ)\dsp\yuv_sse2.obj \ 252 $(DIROBJ)\dsp\yuv_sse41.obj \ 253 254 DSP_ENC_OBJS = \ 255 $(DIROBJ)\dsp\cost.obj \ 256 $(DIROBJ)\dsp\cost_mips32.obj \ 257 $(DIROBJ)\dsp\cost_mips_dsp_r2.obj \ 258 $(DIROBJ)\dsp\cost_neon.obj \ 259 $(DIROBJ)\dsp\cost_sse2.obj \ 260 $(DIROBJ)\dsp\enc.obj \ 261 $(DIROBJ)\dsp\enc_mips32.obj \ 262 $(DIROBJ)\dsp\enc_mips_dsp_r2.obj \ 263 $(DIROBJ)\dsp\enc_msa.obj \ 264 $(DIROBJ)\dsp\enc_neon.obj \ 265 $(DIROBJ)\dsp\enc_sse2.obj \ 266 $(DIROBJ)\dsp\enc_sse41.obj \ 267 $(DIROBJ)\dsp\lossless_enc.obj \ 268 $(DIROBJ)\dsp\lossless_enc_mips32.obj \ 269 $(DIROBJ)\dsp\lossless_enc_mips_dsp_r2.obj \ 270 $(DIROBJ)\dsp\lossless_enc_msa.obj \ 271 $(DIROBJ)\dsp\lossless_enc_neon.obj \ 272 $(DIROBJ)\dsp\lossless_enc_sse2.obj \ 273 $(DIROBJ)\dsp\lossless_enc_sse41.obj \ 274 $(DIROBJ)\dsp\lossless_enc_avx2.obj \ 275 $(DIROBJ)\dsp\ssim.obj \ 276 $(DIROBJ)\dsp\ssim_sse2.obj \ 277 278 EX_ANIM_UTIL_OBJS = \ 279 $(DIROBJ)\examples\anim_util.obj \ 280 281 IMAGEIO_DEC_OBJS = \ 282 $(DIROBJ)\imageio\image_dec.obj \ 283 $(DIROBJ)\imageio\jpegdec.obj \ 284 $(DIROBJ)\imageio\metadata.obj \ 285 $(DIROBJ)\imageio\pngdec.obj \ 286 $(DIROBJ)\imageio\pnmdec.obj \ 287 $(DIROBJ)\imageio\tiffdec.obj \ 288 $(DIROBJ)\imageio\webpdec.obj \ 289 $(DIROBJ)\imageio\wicdec.obj \ 290 291 IMAGEIO_ENC_OBJS = \ 292 $(DIROBJ)\imageio\image_enc.obj \ 293 294 EX_GIF_DEC_OBJS = \ 295 $(DIROBJ)\examples\gifdec.obj \ 296 297 EX_UTIL_OBJS = \ 298 $(DIROBJ)\examples\example_util.obj \ 299 300 ENC_OBJS = \ 301 $(DIROBJ)\enc\alpha_enc.obj \ 302 $(DIROBJ)\enc\analysis_enc.obj \ 303 $(DIROBJ)\enc\backward_references_cost_enc.obj \ 304 $(DIROBJ)\enc\backward_references_enc.obj \ 305 $(DIROBJ)\enc\config_enc.obj \ 306 $(DIROBJ)\enc\cost_enc.obj \ 307 $(DIROBJ)\enc\filter_enc.obj \ 308 $(DIROBJ)\enc\frame_enc.obj \ 309 $(DIROBJ)\enc\histogram_enc.obj \ 310 $(DIROBJ)\enc\iterator_enc.obj \ 311 $(DIROBJ)\enc\near_lossless_enc.obj \ 312 $(DIROBJ)\enc\picture_enc.obj \ 313 $(DIROBJ)\enc\picture_csp_enc.obj \ 314 $(DIROBJ)\enc\picture_psnr_enc.obj \ 315 $(DIROBJ)\enc\picture_rescale_enc.obj \ 316 $(DIROBJ)\enc\picture_tools_enc.obj \ 317 $(DIROBJ)\enc\predictor_enc.obj \ 318 $(DIROBJ)\enc\quant_enc.obj \ 319 $(DIROBJ)\enc\syntax_enc.obj \ 320 $(DIROBJ)\enc\token_enc.obj \ 321 $(DIROBJ)\enc\tree_enc.obj \ 322 $(DIROBJ)\enc\vp8l_enc.obj \ 323 $(DIROBJ)\enc\webp_enc.obj \ 324 325 EXTRAS_OBJS = \ 326 $(DIROBJ)\extras\extras.obj \ 327 $(DIROBJ)\extras\quality_estimate.obj \ 328 $(DIROBJ)\extras\sharpyuv_risk_table.obj \ 329 330 IMAGEIO_UTIL_OBJS = \ 331 $(DIROBJ)\imageio\imageio_util.obj \ 332 333 MUX_OBJS = \ 334 $(DIROBJ)\mux\anim_encode.obj \ 335 $(DIROBJ)\mux\muxedit.obj \ 336 $(DIROBJ)\mux\muxinternal.obj \ 337 $(DIROBJ)\mux\muxread.obj \ 338 339 UTILS_DEC_OBJS = \ 340 $(DIROBJ)\utils\bit_reader_utils.obj \ 341 $(DIROBJ)\utils\color_cache_utils.obj \ 342 $(DIROBJ)\utils\filters_utils.obj \ 343 $(DIROBJ)\utils\huffman_utils.obj \ 344 $(DIROBJ)\utils\palette.obj \ 345 $(DIROBJ)\utils\quant_levels_dec_utils.obj \ 346 $(DIROBJ)\utils\rescaler_utils.obj \ 347 $(DIROBJ)\utils\random_utils.obj \ 348 $(DIROBJ)\utils\thread_utils.obj \ 349 $(DIROBJ)\utils\utils.obj \ 350 351 UTILS_ENC_OBJS = \ 352 $(DIROBJ)\utils\bit_writer_utils.obj \ 353 $(DIROBJ)\utils\huffman_encode_utils.obj \ 354 $(DIROBJ)\utils\quant_levels_utils.obj \ 355 356 LIBWEBPDECODER_OBJS = $(DEC_OBJS) $(DSP_DEC_OBJS) $(UTILS_DEC_OBJS) 357 LIBWEBP_OBJS = $(LIBWEBPDECODER_OBJS) $(ENC_OBJS) \ 358 $(DSP_ENC_OBJS) $(UTILS_ENC_OBJS) $(DLL_OBJS) 359 LIBWEBPMUX_OBJS = $(MUX_OBJS) $(LIBWEBPMUX_OBJS) 360 LIBWEBPDEMUX_OBJS = $(DEMUX_OBJS) $(LIBWEBPDEMUX_OBJS) 361 LIBSHARPYUV_OBJS = $(SHARPYUV_OBJS) 362 363 OUT_LIBS = $(LIBWEBPDECODER) $(LIBWEBP) $(LIBSHARPYUV) 364 !IF "$(ARCH)" == "ARM" 365 ex: $(OUT_LIBS) 366 all: ex 367 !ELSE 368 OUT_EXAMPLES = $(DIRBIN)\cwebp.exe $(DIRBIN)\dwebp.exe 369 EXTRA_EXAMPLES = $(DIRBIN)\vwebp.exe $(DIRBIN)\webpmux.exe \ 370 $(DIRBIN)\img2webp.exe $(DIRBIN)\get_disto.exe \ 371 $(DIRBIN)\webp_quality.exe $(DIRBIN)\vwebp_sdl.exe \ 372 $(DIRBIN)\webpinfo.exe 373 374 ex: $(OUT_LIBS) $(OUT_EXAMPLES) 375 all: ex $(EXTRA_EXAMPLES) 376 # NB: gif2webp.exe and anim_diff.exe are excluded from 'all' as libgif requires 377 # C99 support which is only available from VS2013 onward. 378 gif2webp: $(DIRBIN)\gif2webp.exe 379 anim_diff: $(DIRBIN)\anim_diff.exe 380 anim_dump: $(DIRBIN)\anim_dump.exe 381 382 $(DIRBIN)\anim_diff.exe: $(DIROBJ)\examples\anim_diff.obj $(EX_ANIM_UTIL_OBJS) 383 $(DIRBIN)\anim_diff.exe: $(EX_UTIL_OBJS) $(IMAGEIO_UTIL_OBJS) 384 $(DIRBIN)\anim_diff.exe: $(EX_GIF_DEC_OBJS) $(LIBWEBPDEMUX) $(LIBWEBP) 385 $(DIRBIN)\anim_dump.exe: $(DIROBJ)\examples\anim_dump.obj $(EX_ANIM_UTIL_OBJS) 386 $(DIRBIN)\anim_dump.exe: $(EX_UTIL_OBJS) $(IMAGEIO_UTIL_OBJS) 387 $(DIRBIN)\anim_dump.exe: $(EX_GIF_DEC_OBJS) $(LIBWEBPDEMUX) $(LIBWEBP) 388 $(DIRBIN)\anim_dump.exe: $(IMAGEIO_ENC_OBJS) 389 $(DIRBIN)\cwebp.exe: $(DIROBJ)\examples\cwebp.obj $(IMAGEIO_DEC_OBJS) 390 $(DIRBIN)\cwebp.exe: $(IMAGEIO_UTIL_OBJS) 391 $(DIRBIN)\cwebp.exe: $(LIBWEBPDEMUX) $(LIBSHARPYUV) 392 $(DIRBIN)\dwebp.exe: $(DIROBJ)\examples\dwebp.obj $(IMAGEIO_DEC_OBJS) 393 $(DIRBIN)\dwebp.exe: $(IMAGEIO_ENC_OBJS) 394 $(DIRBIN)\dwebp.exe: $(IMAGEIO_UTIL_OBJS) 395 $(DIRBIN)\dwebp.exe: $(LIBWEBPDEMUX) 396 $(DIRBIN)\gif2webp.exe: $(DIROBJ)\examples\gif2webp.obj $(EX_GIF_DEC_OBJS) 397 $(DIRBIN)\gif2webp.exe: $(EX_UTIL_OBJS) $(IMAGEIO_UTIL_OBJS) $(LIBWEBPMUX) 398 $(DIRBIN)\gif2webp.exe: $(LIBWEBP) $(LIBSHARPYUV) 399 $(DIRBIN)\vwebp.exe: $(DIROBJ)\examples\vwebp.obj $(EX_UTIL_OBJS) 400 $(DIRBIN)\vwebp.exe: $(IMAGEIO_UTIL_OBJS) $(LIBWEBPDEMUX) $(LIBWEBP) 401 $(DIRBIN)\vwebp_sdl.exe: $(DIROBJ)\extras\vwebp_sdl.obj 402 $(DIRBIN)\vwebp_sdl.exe: $(DIROBJ)\extras\webp_to_sdl.obj 403 $(DIRBIN)\vwebp_sdl.exe: $(IMAGEIO_UTIL_OBJS) $(LIBWEBP) 404 $(DIRBIN)\webpmux.exe: $(DIROBJ)\examples\webpmux.obj $(LIBWEBPMUX) 405 $(DIRBIN)\webpmux.exe: $(EX_UTIL_OBJS) $(IMAGEIO_UTIL_OBJS) $(LIBWEBP) 406 $(DIRBIN)\img2webp.exe: $(DIROBJ)\examples\img2webp.obj $(LIBWEBPMUX) 407 $(DIRBIN)\img2webp.exe: $(IMAGEIO_DEC_OBJS) 408 $(DIRBIN)\img2webp.exe: $(EX_UTIL_OBJS) $(IMAGEIO_UTIL_OBJS) 409 $(DIRBIN)\img2webp.exe: $(LIBWEBPDEMUX) $(LIBWEBP) $(LIBSHARPYUV) 410 $(DIRBIN)\get_disto.exe: $(DIROBJ)\extras\get_disto.obj 411 $(DIRBIN)\get_disto.exe: $(IMAGEIO_DEC_OBJS) $(IMAGEIO_UTIL_OBJS) 412 $(DIRBIN)\get_disto.exe: $(LIBWEBPDEMUX) $(LIBWEBP) 413 $(DIRBIN)\webp_quality.exe: $(DIROBJ)\extras\webp_quality.obj 414 $(DIRBIN)\webp_quality.exe: $(IMAGEIO_UTIL_OBJS) 415 $(DIRBIN)\webp_quality.exe: $(EXTRAS_OBJS) 416 # EXTRA_OBJS requires private symbols from dsp. Explicitly add those when 417 # building libwebp as a dll. 418 !IF "$(DLLBUILD)" == "TRUE" 419 $(DIRBIN)\webp_quality.exe: $(DSP_DEC_OBJS) 420 !ENDIF 421 $(DIRBIN)\webp_quality.exe: $(LIBWEBP) 422 $(DIRBIN)\webpinfo.exe: $(DIROBJ)\examples\webpinfo.obj 423 $(DIRBIN)\webpinfo.exe: $(IMAGEIO_DEC_OBJS) 424 $(DIRBIN)\webpinfo.exe: $(EX_UTIL_OBJS) $(IMAGEIO_UTIL_OBJS) 425 $(DIRBIN)\webpinfo.exe: $(LIBWEBPDEMUX) $(LIBWEBP) 426 427 $(OUT_EXAMPLES): $(EX_UTIL_OBJS) $(LIBWEBP) 428 $(EX_UTIL_OBJS) $(IMAGEIO_UTIL_OBJS): $(OUTPUT_DIRS) 429 $(IMAGEIO_DEC_OBJS) $(IMAGEIO_ENC_OBJS) $(EXTRAS_OBJS): $(OUTPUT_DIRS) 430 !ENDIF # ARCH == ARM 431 432 $(LIBSHARPYUV): $(LIBSHARPYUV_OBJS) 433 $(LIBWEBPDECODER): $(LIBWEBPDECODER_OBJS) 434 $(LIBWEBP): $(LIBWEBP_OBJS) $(LIBSHARPYUV) 435 $(LIBWEBPMUX): $(LIBWEBPMUX_OBJS) 436 $(LIBWEBPDEMUX): $(LIBWEBPDEMUX_OBJS) 437 438 $(LIBWEBP_OBJS) $(LIBWEBPMUX_OBJS) $(LIBWEBPDEMUX_OBJS) $(LIBSHARPYUV_OBJS): \ 439 $(OUTPUT_DIRS) 440 441 !IF "$(DLLBUILD)" == "TRUE" 442 {$(DIROBJ)}.c{$(DIROBJ)}.obj: 443 $(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$@ $< 444 445 {src}.rc{$(DIROBJ)}.res: 446 $(RC) /fo$@ $< 447 {src\demux}.rc{$(DIROBJ)\demux}.res: 448 $(RC) /fo$@ $< 449 {src\mux}.rc{$(DIROBJ)\mux}.res: 450 $(RC) /fo$@ $< 451 {sharpyuv}.rc{$(DIROBJ)\sharpyuv}.res: 452 $(RC) /fo$@ $< 453 454 $(LIBSHARPYUV): $(DIROBJ)\sharpyuv\$(LIBSHARPYUV_BASENAME:_debug=).res 455 $(LIBWEBP): $(LIBSHARPYUV) $(DIROBJ)\$(LIBWEBP_BASENAME:_debug=).res 456 $(LIBWEBPDECODER): $(DIROBJ)\$(LIBWEBPDECODER_BASENAME:_debug=).res 457 $(LIBWEBPMUX): $(LIBWEBP) $(DIROBJ)\mux\$(LIBWEBPMUX_BASENAME:_debug=).res 458 $(LIBWEBPDEMUX): $(LIBWEBP) $(DIROBJ)\demux\$(LIBWEBPDEMUX_BASENAME:_debug=).res 459 460 $(LIBWEBPDECODER) $(LIBWEBP) $(LIBWEBPMUX) $(LIBWEBPDEMUX) $(LIBSHARPYUV): 461 $(LNKDLL) /out:$(DIRBIN)\$(@B:_dll=.dll) /implib:$@ $(LFLAGS) $** 462 -xcopy $(DIROBJ)\*.pdb $(DIRLIB) /y 463 !ELSE 464 $(LIBWEBPDECODER) $(LIBWEBP) $(LIBWEBPMUX) $(LIBWEBPDEMUX) $(LIBSHARPYUV): 465 $(LNKLIB) /out:$@ $** 466 -xcopy $(DIROBJ)\*.pdb $(DIRLIB) /y 467 !ENDIF 468 469 $(OUTPUT_DIRS): 470 @if not exist "$(@)" mkdir "$(@)" 471 472 .SUFFIXES: .c .obj .res .exe 473 # File-specific flag builds. Note batch rules take precedence over wildcards, 474 # so for now name each file individually. 475 $(DIROBJ)\examples\anim_diff.obj: examples\anim_diff.c 476 $(CC) $(CFLAGS) /DWEBP_HAVE_GIF /Fd$(LIBWEBP_PDBNAME) \ 477 /Fo$(DIROBJ)\examples\ examples\$(@B).c 478 $(DIROBJ)\examples\anim_dump.obj: examples\anim_dump.c 479 $(CC) $(CFLAGS) /DWEBP_HAVE_GIF /Fd$(LIBWEBP_PDBNAME) \ 480 /Fo$(DIROBJ)\examples\ examples\$(@B).c 481 $(DIROBJ)\examples\anim_util.obj: examples\anim_util.c 482 $(CC) $(CFLAGS) /DWEBP_HAVE_GIF /Fd$(LIBWEBP_PDBNAME) \ 483 /Fo$(DIROBJ)\examples\ examples\$(@B).c 484 $(DIROBJ)\examples\gif2webp.obj: examples\gif2webp.c 485 $(CC) $(CFLAGS) /DWEBP_HAVE_GIF /Fd$(LIBWEBP_PDBNAME) \ 486 /Fo$(DIROBJ)\examples\ examples\$(@B).c 487 $(DIROBJ)\examples\gifdec.obj: examples\gifdec.c 488 $(CC) $(CFLAGS) /DWEBP_HAVE_GIF /Fd$(LIBWEBP_PDBNAME) \ 489 /Fo$(DIROBJ)\examples\ examples\$(@B).c 490 # Batch rules 491 {examples}.c{$(DIROBJ)\examples}.obj:: 492 $(CC) $(CFLAGS) /Fd$(DIROBJ)\examples\ /Fo$(DIROBJ)\examples\ $< 493 {extras}.c{$(DIROBJ)\extras}.obj:: 494 $(CC) $(CFLAGS) /Fd$(DIROBJ)\extras\ /Fo$(DIROBJ)\extras\ $< 495 {imageio}.c{$(DIROBJ)\imageio}.obj:: 496 $(CC) $(CFLAGS) /Fd$(DIROBJ)\imageio\ /Fo$(DIROBJ)\imageio\ $< 497 {sharpyuv}.c{$(DIROBJ)\sharpyuv}.obj:: 498 $(CC) $(CFLAGS) /Fd$(DIROBJ)\sharpyuv\ /Fo$(DIROBJ)\sharpyuv\ $< 499 {src\dec}.c{$(DIROBJ)\dec}.obj:: 500 $(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$(DIROBJ)\dec\ $< 501 {src\demux}.c{$(DIROBJ)\demux}.obj:: 502 $(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$(DIROBJ)\demux\ $< 503 {src\dsp}.c{$(DIROBJ)\dsp}.obj:: 504 $(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$(DIROBJ)\dsp\ $< 505 {src\enc}.c{$(DIROBJ)\enc}.obj:: 506 $(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$(DIROBJ)\enc\ $< 507 {src\mux}.c{$(DIROBJ)\mux}.obj:: 508 $(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$(DIROBJ)\mux\ $< 509 {src\utils}.c{$(DIROBJ)\utils}.obj:: 510 $(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$(DIROBJ)\utils\ $< 511 512 LNKLIBS = ole32.lib windowscodecs.lib shlwapi.lib 513 !IF "$(UNICODE)" == "1" 514 LNKLIBS = $(LNKLIBS) Shell32.lib 515 !ENDIF 516 517 {$(DIROBJ)\examples}.obj{$(DIRBIN)}.exe: 518 $(LNKEXE) $(LDFLAGS) /OUT:$@ $** $(LNKLIBS) 519 520 {$(DIROBJ)\extras}.obj{$(DIRBIN)}.exe: 521 $(LNKEXE) $(LDFLAGS) /OUT:$@ $** $(LNKLIBS) 522 523 clean:: 524 @-erase /s $(DIROBJ)\*.dll 2> NUL 525 @-erase /s $(DIROBJ)\*.exp 2> NUL 526 @-erase /s $(DIROBJ)\*.idb 2> NUL 527 @-erase /s $(DIROBJ)\*.lib 2> NUL 528 @-erase /s $(DIROBJ)\*.obj 2> NUL 529 @-erase /s $(DIROBJ)\*.pch 2> NUL 530 @-erase /s $(DIROBJ)\*.pdb 2> NUL 531 @-erase /s $(DIROBJ)\*.res 2> NUL 532 533 !ENDIF # End of case where a config was provided.