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.