Home | History | Annotate | Download | only in gregbook
      1 # Sample makefile for rpng-win / rpng2-win / wpng using mingw32-gcc and make.
      2 # Greg Roelofs
      3 # Last modified:  2 June 2007
      4 #
      5 #	The programs built by this makefile are described in the book,
      6 #	"PNG:  The Definitive Guide," by Greg Roelofs (O'Reilly and
      7 #	Associates, 1999).  Go buy a copy, eh?  Well, OK, it's not
      8 #	generally for sale anymore, but it's the thought that counts,
      9 #	right?  (Hint:  http://www.libpng.org/pub/png/book/ )
     10 #
     11 # Invoke this makefile from a DOS-prompt window via:
     12 #
     13 #	make -f Makefile.mingw32
     14 #
     15 # This makefile assumes libpng and zlib have already been built or downloaded
     16 # and are in subdirectories at the same level as the current subdirectory
     17 # (as indicated by the PNGDIR and ZDIR macros below).  It makes no assumptions
     18 # at all about the mingw32 installation tree (W32DIR).  Edit as appropriate.
     19 #
     20 # Note that the names of the dynamic and static libpng and zlib libraries
     21 # used below may change in later releases of the libraries.  This makefile
     22 # builds both statically and dynamically linked executables by default.
     23 # (You need only one set, but for testing it can be handy to have both.)
     24 
     25 
     26 # macros --------------------------------------------------------------------
     27 
     28 #PNGDIR = ../..#		for libpng-x.y.z/contrib/gregbook builds
     29 PNGDIR = ../libpng-win32
     30 PNGINC = -I$(PNGDIR)
     31 PNGLIBd = $(PNGDIR)/libpng.dll.a	# dynamically linked
     32 PNGLIBs = $(PNGDIR)/libpng.a		# statically linked, local libpng
     33 
     34 #ZDIR = ../../../zlib-win32#	for libpng-x.y.z/contrib/gregbook builds
     35 ZDIR = ../zlib-win32
     36 ZINC = -I$(ZDIR)
     37 ZLIBd = $(ZDIR)/libzdll.a
     38 ZLIBs = $(ZDIR)/libz.a
     39 
     40 # change this to be the path where mingw32 installs its stuff:
     41 W32DIR =
     42 #W32DIR = /usr/local/cross-tools/i386-mingw32msvc
     43 W32INC = -I$(W32DIR)/include
     44 W32LIB = $(W32DIR)/lib/libuser32.a $(W32DIR)/lib/libgdi32.a
     45 
     46 CC = gcc
     47 #CC = i386-mingw32msvc-gcc #	e.g., Linux -> Win32 cross-compilation
     48 LD = $(CC)
     49 RM = rm -f
     50 CFLAGS = -O -Wall $(INCS) $(MINGW_CCFLAGS)
     51 # [note that -Wall is a gcc-specific compilation flag ("most warnings on")]
     52 # [-ansi, -pedantic and -W can also be used]
     53 LDFLAGS = $(MINGW_LDFLAGS)
     54 O = .o
     55 E = .exe
     56 
     57 INCS = $(PNGINC) $(ZINC) $(W32INC)
     58 RLIBSd = $(PNGLIBd) $(ZLIBd) $(W32LIB) -lm
     59 RLIBSs = $(PNGLIBs) $(ZLIBs) $(W32LIB) -lm
     60 WLIBSd = $(PNGLIBd) $(ZLIBd)
     61 WLIBSs = $(PNGLIBs) $(ZLIBs)
     62 
     63 RPNG   = rpng-win
     64 RPNG2  = rpng2-win
     65 WPNG   = wpng
     66 
     67 ROBJSd  = $(RPNG)$(O) readpng.pic$(O)
     68 ROBJS2d = $(RPNG2)$(O) readpng2.pic$(O)
     69 WOBJSd  = $(WPNG)$(O) writepng.pic$(O)
     70 
     71 RPNGs  = $(RPNG)-static
     72 RPNG2s = $(RPNG2)-static
     73 WPNGs  = $(WPNG)-static
     74 
     75 ROBJSs  = $(RPNG)$(O) readpng$(O)
     76 ROBJS2s = $(RPNG2)$(O) readpng2$(O)
     77 WOBJSs  = $(WPNG)$(O) writepng$(O)
     78 
     79 STATIC_EXES  = $(RPNGs)$(E) $(RPNG2s)$(E) $(WPNGs)$(E)
     80 DYNAMIC_EXES = $(RPNG)$(E) $(RPNG2)$(E) $(WPNG)$(E)
     81 
     82 EXES = $(STATIC_EXES) $(DYNAMIC_EXES)
     83 
     84 
     85 # implicit make rules -------------------------------------------------------
     86 
     87 .c$(O):
     88 	$(CC) -c $(CFLAGS) $<
     89 
     90 %.pic$(O): %.c
     91 	$(CC) -c $(CFLAGS) -DPNG_BUILD_DLL -o $@ $<
     92 
     93 
     94 # dependencies --------------------------------------------------------------
     95 
     96 all:  $(EXES)
     97 
     98 $(RPNGs)$(E): $(ROBJSs)
     99 	$(LD) $(LDFLAGS) -o $@ $(ROBJSs) $(RLIBSs)
    100 
    101 $(RPNG)$(E): $(ROBJSd)
    102 	$(LD) $(LDFLAGS) -o $@ $(ROBJSd) $(RLIBSd)
    103 
    104 $(RPNG2s)$(E): $(ROBJS2s)
    105 	$(LD) $(LDFLAGS) -o $@ $(ROBJS2s) $(RLIBSs)
    106 
    107 $(RPNG2)$(E): $(ROBJS2d)
    108 	$(LD) $(LDFLAGS) -o $@ $(ROBJS2d) $(RLIBSd)
    109 
    110 $(WPNGs)$(E): $(WOBJSs)
    111 	$(LD) $(LDFLAGS) -o $@ $(WOBJSs) $(WLIBSs)
    112 
    113 $(WPNG)$(E): $(WOBJSd)
    114 	$(LD) $(LDFLAGS) -o $@ $(WOBJSd) $(WLIBSd)
    115 
    116 $(RPNG)$(O):	$(RPNG).c readpng.h
    117 $(RPNG2)$(O):	$(RPNG2).c readpng2.h
    118 $(WPNG)$(O):	$(WPNG).c writepng.h
    119 
    120 readpng$(O) readpng.pic$(O):	readpng.c readpng.h
    121 readpng2$(O) readpng2.pic$(O):	readpng2.c readpng2.h
    122 writepng$(O) writepng.pic$(O):	writepng.c writepng.h
    123 
    124 
    125 # maintenance ---------------------------------------------------------------
    126 
    127 clean:
    128 	$(RM) $(EXES)
    129 	$(RM) $(ROBJSs) $(ROBJS2s) $(WOBJSs)
    130 	$(RM) $(ROBJSd) $(ROBJS2d) $(WOBJSd)
    131