github.com/cellofellow/gopkg@v0.0.0-20140722061823-eec0544a62ad/image/webp/libwebp/Makefile.vc (about) 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 9 !IFNDEF ARCH 10 !IF ! [ cl 2>&1 | find "x86" > NUL ] 11 ARCH = x86 12 !ELSE IF ! [ cl 2>&1 | find "x64" > NUL ] 13 ARCH = x64 14 !ELSE 15 !ERROR Unable to auto-detect toolchain architecture! \ 16 If cl.exe is in your PATH rerun nmake with ARCH=<arch>. 17 !ENDIF 18 !ENDIF 19 20 !IF "$(ARCH)" == "x86" 21 PLATFORM_LDFLAGS = /SAFESEH 22 !ENDIF 23 24 ############################################################# 25 ## Nothing more to do below this line! 26 27 NOLOGO = /nologo 28 CCNODBG = cl.exe $(NOLOGO) /O2 /DNDEBUG 29 CCDEBUG = cl.exe $(NOLOGO) /Od /Gm /Zi /D_DEBUG /RTC1 30 CFLAGS = /Isrc $(NOLOGO) /W3 /EHsc /c /GS 31 CFLAGS = $(CFLAGS) /DWIN32 /D_CRT_SECURE_NO_WARNINGS /DWIN32_LEAN_AND_MEAN 32 CFLAGS = $(CFLAGS) /DHAVE_WINCODEC_H /DWEBP_USE_THREAD 33 LDFLAGS = /LARGEADDRESSAWARE /MANIFEST /NXCOMPAT /DYNAMICBASE 34 LDFLAGS = $(LDFLAGS) $(PLATFORM_LDFLAGS) 35 LNKDLL = link.exe /DLL $(NOLOGO) 36 LNKEXE = link.exe $(NOLOGO) 37 LNKLIB = lib.exe $(NOLOGO) 38 MT = mt.exe $(NOLOGO) 39 40 CFGSET = FALSE 41 !IF "$(OBJDIR)" == "" 42 OUTDIR = ..\obj\ 43 !ELSE 44 OUTDIR = $(OBJDIR) 45 !ENDIF 46 47 ############################################################## 48 # Runtime library configuration 49 !IF "$(RTLIBCFG)" == "static" 50 RTLIB = /MT 51 RTLIBD = /MTd 52 !ELSE 53 RTLIB = /MD 54 RTLIBD = /MDd 55 !ENDIF 56 DIRBASE = $(OUTDIR)\$(CFG)\$(ARCH) 57 DIROBJ = $(DIRBASE)\obj 58 DIRLIB = $(DIRBASE)\lib 59 DIRINC = $(DIRBASE)\include 60 DIRBIN = $(DIRBASE)\bin 61 LIBWEBP_PDBNAME = $(DIROBJ)\$(LIBWEBP_BASENAME).pdb 62 OUTPUT_DIRS = $(DIRBIN) $(DIRINC) $(DIRLIB) \ 63 $(DIROBJ)\dec \ 64 $(DIROBJ)\demux \ 65 $(DIROBJ)\dsp \ 66 $(DIROBJ)\enc \ 67 $(DIROBJ)\examples \ 68 $(DIROBJ)\mux \ 69 $(DIROBJ)\utils \ 70 71 # Target configuration 72 !IF "$(CFG)" == "release-static" 73 CC = $(CCNODBG) 74 STATICLIBBUILD = TRUE 75 !ELSE IF "$(CFG)" == "debug-static" 76 CC = $(CCDEBUG) 77 RTLIB = $(RTLIBD) 78 STATICLIBBUILD = TRUE 79 LIBWEBPDECODER_BASENAME = $(LIBWEBPDECODER_BASENAME)_debug 80 LIBWEBP_BASENAME = $(LIBWEBP_BASENAME)_debug 81 LIBWEBPMUX_BASENAME = $(LIBWEBPMUX_BASENAME)_debug 82 LIBWEBPDEMUX_BASENAME = $(LIBWEBPDEMUX_BASENAME)_debug 83 !ELSE IF "$(CFG)" == "release-dynamic" 84 CC = $(CCNODBG) 85 DLLBUILD = TRUE 86 !ELSE IF "$(CFG)" == "debug-dynamic" 87 CC = $(CCDEBUG) 88 RTLIB = $(RTLIBD) 89 DLLBUILD = TRUE 90 LIBWEBPDECODER_BASENAME = $(LIBWEBPDECODER_BASENAME)_debug 91 LIBWEBP_BASENAME = $(LIBWEBP_BASENAME)_debug 92 LIBWEBPMUX_BASENAME = $(LIBWEBPMUX_BASENAME)_debug 93 LIBWEBPDEMUX_BASENAME = $(LIBWEBPDEMUX_BASENAME)_debug 94 !ENDIF 95 96 !IF "$(STATICLIBBUILD)" == "TRUE" 97 CC = $(CC) $(RTLIB) 98 CFGSET = TRUE 99 LIBWEBPDECODER = $(DIRLIB)\$(LIBWEBPDECODER_BASENAME).lib 100 LIBWEBP = $(DIRLIB)\$(LIBWEBP_BASENAME).lib 101 LIBWEBPMUX = $(DIRLIB)\$(LIBWEBPMUX_BASENAME).lib 102 LIBWEBPDEMUX = $(DIRLIB)\$(LIBWEBPDEMUX_BASENAME).lib 103 !ELSE IF "$(DLLBUILD)" == "TRUE" 104 DLLC = webp_dll.c 105 DLLINC = webp_dll.h 106 DLL_OBJS = $(DIROBJ)\$(DLLC:.c=.obj) 107 CC = $(CC) /I$(DIROBJ) /FI$(DLLINC) $(RTLIB) /DWEBP_DLL 108 LIBWEBPDECODER = $(DIRLIB)\$(LIBWEBPDECODER_BASENAME)_dll.lib 109 LIBWEBP = $(DIRLIB)\$(LIBWEBP_BASENAME)_dll.lib 110 LIBWEBPMUX = $(DIRLIB)\$(LIBWEBPMUX_BASENAME)_dll.lib 111 LIBWEBPDEMUX = $(DIRLIB)\$(LIBWEBPDEMUX_BASENAME)_dll.lib 112 LIBWEBP_PDBNAME = $(DIROBJ)\$(LIBWEBP_BASENAME)_dll.pdb 113 CFGSET = TRUE 114 !ENDIF 115 116 ####################### 117 # Usage 118 # 119 !IF "$(CFGSET)" == "FALSE" 120 !MESSAGE Usage: nmake /f Makefile.vc [CFG=<config>] 121 !MESSAGE . [OBJDIR=<path>] [RTLIBCFG=<rtlib>] [<target>] 122 !MESSAGE 123 !MESSAGE where <config> is one of: 124 !MESSAGE - release-static - release static library 125 !MESSAGE - debug-static - debug static library 126 !MESSAGE - release-dynamic - release dynamic link library (DLL) 127 !MESSAGE - debug-dynamic - debug dynamic link library (DLL) 128 !MESSAGE 129 !MESSAGE <target> may be: 130 !MESSAGE - clean - perform a clean for CFG 131 !MESSAGE - experimental - build CFG with experimental 132 !MESSAGE . features enabled. 133 !MESSAGE - (empty) - build libwebp-based targets for CFG 134 !MESSAGE - all - build (de)mux-based targets for CFG 135 !MESSAGE 136 !MESSAGE RTLIBCFG controls the runtime library linkage - 'static' or 'dynamic'. 137 !MESSAGE OBJDIR is the path where you like to build (obj, bins, etc.), 138 !MESSAGE defaults to ..\obj 139 140 !IF "$(CFG)" != "" 141 !MESSAGE 142 !ERROR please choose a valid configuration instead of "$(CFG)" 143 !ENDIF 144 !ENDIF 145 146 ####################### 147 # Rules 148 # 149 !IF "$(CFGSET)" == "TRUE" 150 # A config was provided, so the library can be built. 151 # 152 153 DEC_OBJS = \ 154 $(DIROBJ)\dec\alpha.obj \ 155 $(DIROBJ)\dec\buffer.obj \ 156 $(DIROBJ)\dec\frame.obj \ 157 $(DIROBJ)\dec\idec.obj \ 158 $(DIROBJ)\dec\io.obj \ 159 $(DIROBJ)\dec\layer.obj \ 160 $(DIROBJ)\dec\quant.obj \ 161 $(DIROBJ)\dec\tree.obj \ 162 $(DIROBJ)\dec\vp8.obj \ 163 $(DIROBJ)\dec\vp8l.obj \ 164 $(DIROBJ)\dec\webp.obj \ 165 166 DEMUX_OBJS = \ 167 $(DIROBJ)\demux\demux.obj \ 168 169 DSP_DEC_OBJS = \ 170 $(DIROBJ)\dsp\cpu.obj \ 171 $(DIROBJ)\dsp\dec.obj \ 172 $(DIROBJ)\dsp\dec_neon.obj \ 173 $(DIROBJ)\dsp\dec_sse2.obj \ 174 $(DIROBJ)\dsp\lossless.obj \ 175 $(DIROBJ)\dsp\upsampling.obj \ 176 $(DIROBJ)\dsp\upsampling_neon.obj \ 177 $(DIROBJ)\dsp\upsampling_sse2.obj \ 178 $(DIROBJ)\dsp\yuv.obj \ 179 180 DSP_ENC_OBJS = \ 181 $(DIROBJ)\dsp\enc.obj \ 182 $(DIROBJ)\dsp\enc_neon.obj \ 183 $(DIROBJ)\dsp\enc_sse2.obj \ 184 185 EX_FORMAT_DEC_OBJS = \ 186 $(DIROBJ)\examples\jpegdec.obj \ 187 $(DIROBJ)\examples\metadata.obj \ 188 $(DIROBJ)\examples\pngdec.obj \ 189 $(DIROBJ)\examples\tiffdec.obj \ 190 $(DIROBJ)\examples\wicdec.obj \ 191 192 EX_UTIL_OBJS = \ 193 $(DIROBJ)\examples\example_util.obj \ 194 195 ENC_OBJS = \ 196 $(DIROBJ)\enc\alpha.obj \ 197 $(DIROBJ)\enc\analysis.obj \ 198 $(DIROBJ)\enc\backward_references.obj \ 199 $(DIROBJ)\enc\config.obj \ 200 $(DIROBJ)\enc\cost.obj \ 201 $(DIROBJ)\enc\filter.obj \ 202 $(DIROBJ)\enc\frame.obj \ 203 $(DIROBJ)\enc\histogram.obj \ 204 $(DIROBJ)\enc\iterator.obj \ 205 $(DIROBJ)\enc\layer.obj \ 206 $(DIROBJ)\enc\picture.obj \ 207 $(DIROBJ)\enc\quant.obj \ 208 $(DIROBJ)\enc\syntax.obj \ 209 $(DIROBJ)\enc\token.obj \ 210 $(DIROBJ)\enc\tree.obj \ 211 $(DIROBJ)\enc\vp8l.obj \ 212 $(DIROBJ)\enc\webpenc.obj \ 213 214 MUX_OBJS = \ 215 $(DIROBJ)\mux\muxedit.obj \ 216 $(DIROBJ)\mux\muxinternal.obj \ 217 $(DIROBJ)\mux\muxread.obj \ 218 219 UTILS_DEC_OBJS = \ 220 $(DIROBJ)\utils\alpha_processing.obj \ 221 $(DIROBJ)\utils\bit_reader.obj \ 222 $(DIROBJ)\utils\color_cache.obj \ 223 $(DIROBJ)\utils\filters.obj \ 224 $(DIROBJ)\utils\huffman.obj \ 225 $(DIROBJ)\utils\quant_levels_dec.obj \ 226 $(DIROBJ)\utils\rescaler.obj \ 227 $(DIROBJ)\utils\random.obj \ 228 $(DIROBJ)\utils\thread.obj \ 229 $(DIROBJ)\utils\utils.obj \ 230 231 UTILS_ENC_OBJS = \ 232 $(DIROBJ)\utils\bit_writer.obj \ 233 $(DIROBJ)\utils\huffman_encode.obj \ 234 $(DIROBJ)\utils\quant_levels.obj \ 235 236 LIBWEBPDECODER_OBJS = $(DEC_OBJS) $(DSP_DEC_OBJS) $(UTILS_DEC_OBJS) 237 LIBWEBP_OBJS = $(LIBWEBPDECODER_OBJS) $(ENC_OBJS) $(DSP_ENC_OBJS) \ 238 $(UTILS_ENC_OBJS) $(DLL_OBJS) 239 LIBWEBPMUX_OBJS = $(MUX_OBJS) $(LIBWEBPMUX_OBJS) 240 LIBWEBPDEMUX_OBJS = $(DEMUX_OBJS) $(LIBWEBPDEMUX_OBJS) 241 242 OUT_LIBS = $(LIBWEBPDECODER) $(LIBWEBP) 243 OUT_EXAMPLES = $(DIRBIN)\cwebp.exe $(DIRBIN)\dwebp.exe 244 EXTRA_EXAMPLES = $(DIRBIN)\vwebp.exe $(DIRBIN)\webpmux.exe 245 246 ex: $(OUT_LIBS) $(OUT_EXAMPLES) 247 all: ex $(EXTRA_EXAMPLES) 248 $(DIRBIN)\cwebp.exe: $(DIROBJ)\examples\cwebp.obj $(EX_FORMAT_DEC_OBJS) 249 $(DIRBIN)\dwebp.exe: $(DIROBJ)\examples\dwebp.obj 250 $(DIRBIN)\vwebp.exe: $(DIROBJ)\examples\vwebp.obj 251 $(DIRBIN)\vwebp.exe: $(EX_UTIL_OBJS) $(LIBWEBPDEMUX) $(LIBWEBP) 252 $(DIRBIN)\webpmux.exe: $(DIROBJ)\examples\webpmux.obj $(LIBWEBPMUX) 253 $(DIRBIN)\webpmux.exe: $(EX_UTIL_OBJS) $(LIBWEBP) 254 $(OUT_EXAMPLES): $(EX_UTIL_OBJS) $(LIBWEBP) 255 $(EX_UTIL_OBJS) $(EX_FORMAT_DEC_OBJS): $(OUTPUT_DIRS) 256 257 experimental: 258 $(MAKE) /f Makefile.vc \ 259 CFG=$(CFG) \ 260 CFLAGS="$(CFLAGS) /DWEBP_EXPERIMENTAL_FEATURES" /$(MAKEFLAGS) 261 262 $(LIBWEBPDECODER): $(LIBWEBPDECODER_OBJS) 263 $(LIBWEBP): $(LIBWEBP_OBJS) 264 $(LIBWEBPMUX): $(LIBWEBPMUX_OBJS) 265 $(LIBWEBPDEMUX): $(LIBWEBPDEMUX_OBJS) 266 267 $(LIBWEBP_OBJS) $(LIBWEBPMUX_OBJS) $(LIBWEBPDEMUX_OBJS): $(OUTPUT_DIRS) 268 269 !IF "$(DLLBUILD)" == "TRUE" 270 $(LIBWEBP_OBJS) $(LIBWEBPMUX_OBJS) $(LIBWEBPDEMUX_OBJS): \ 271 $(DIROBJ)\$(DLLINC) $(DIROBJ)\$(DLLC) 272 273 {$(DIROBJ)}.c{$(DIROBJ)}.obj: 274 $(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$@ $< 275 276 $(LIBWEBPMUX): $(LIBWEBP) 277 $(LIBWEBPDEMUX): $(LIBWEBP) 278 279 $(LIBWEBPDECODER) $(LIBWEBP) $(LIBWEBPMUX) $(LIBWEBPDEMUX): 280 $(LNKDLL) /out:$(DIRBIN)\$(@B:_dll=.dll) /implib:$@ $(LFLAGS) $** 281 -xcopy $(DIROBJ)\*.pdb $(DIRLIB) /y 282 283 clean:: 284 @-erase /s $(DIROBJ)\$(DLLC) $(DIROBJ)\$(DLLINC) 2> NUL 285 !ELSE 286 $(LIBWEBPDECODER) $(LIBWEBP) $(LIBWEBPMUX) $(LIBWEBPDEMUX): 287 $(LNKLIB) /out:$@ $** 288 -xcopy $(DIROBJ)\*.pdb $(DIRLIB) /y 289 !ENDIF 290 291 $(OUTPUT_DIRS): 292 @if not exist "$(@)" mkdir "$(@)" 293 294 # generate a helper include to define WEBP_EXTERN suitable for the DLL build 295 $(DIROBJ)\$(DLLINC): 296 @echo #ifndef WEBP_DLL_H_ > $@ 297 @echo #define WEBP_DLL_H_ >> $@ 298 @echo #define WEBP_EXTERN(type) __declspec(dllexport) type >> $@ 299 @echo #endif /* WEBP_DLL_H_ */ >> $@ 300 301 # expose a WebPFree() function for use in managed code 302 $(DIROBJ)\$(DLLC): $(DIROBJ)\$(DLLINC) 303 @echo #include ^<stdlib.h^> > $@ 304 @echo #include "webp_dll.h" >> $@ 305 @echo // This function should be used in place of free() for memory >> $@ 306 @echo // returned by the WebP API. >> $@ 307 @echo WEBP_EXTERN(void) WebPFree(void* ptr) { >> $@ 308 @echo free(ptr); >> $@ 309 @echo } >> $@ 310 311 .SUFFIXES: .c .obj .res .exe 312 {examples}.c{$(DIROBJ)\examples}.obj:: 313 $(CC) $(CFLAGS) /Fd$(DIROBJ)\examples\ /Fo$(DIROBJ)\examples\ $< 314 {src\dec}.c{$(DIROBJ)\dec}.obj:: 315 $(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$(DIROBJ)\dec\ $< 316 {src\demux}.c{$(DIROBJ)\demux}.obj:: 317 $(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$(DIROBJ)\demux\ $< 318 {src\dsp}.c{$(DIROBJ)\dsp}.obj:: 319 $(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$(DIROBJ)\dsp\ $< 320 {src\enc}.c{$(DIROBJ)\enc}.obj:: 321 $(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$(DIROBJ)\enc\ $< 322 {src\mux}.c{$(DIROBJ)\mux}.obj:: 323 $(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$(DIROBJ)\mux\ $< 324 {src\utils}.c{$(DIROBJ)\utils}.obj:: 325 $(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$(DIROBJ)\utils\ $< 326 327 {$(DIROBJ)\examples}.obj{$(DIRBIN)}.exe: 328 $(LNKEXE) $(LDFLAGS) /OUT:$@ $** \ 329 ole32.lib windowscodecs.lib shlwapi.lib 330 $(MT) -manifest $@.manifest -outputresource:$@;1 331 del $@.manifest 332 333 clean:: 334 @-erase /s $(DIROBJ)\*.dll 2> NUL 335 @-erase /s $(DIROBJ)\*.exp 2> NUL 336 @-erase /s $(DIROBJ)\*.idb 2> NUL 337 @-erase /s $(DIROBJ)\*.lib 2> NUL 338 @-erase /s $(DIROBJ)\*.obj 2> NUL 339 @-erase /s $(DIROBJ)\*.pch 2> NUL 340 @-erase /s $(DIROBJ)\*.pdb 2> NUL 341 @-erase /s $(DIROBJ)\*.res 2> NUL 342 343 !ENDIF # End of case where a config was provided.