Makefile
changeset 155 cda90b8d94b8
parent 132 0260aeca943c
child 156 01a05c807e82
equal deleted inserted replaced
154:e9eef49f4d57 155:cda90b8d94b8
     1 # :set noexpandtab
     1 # debug
     2 CFLAGS_ALL = -Wall -std=gnu99
       
     3 LDFLAGS_ALL =
       
     4 CFLAGS_DBG = -g
     2 CFLAGS_DBG = -g
     5 CFLAGS_REL = -O2
     3 LDFLAGS_DBG = 
       
     4 
       
     5 # profile
     6 CFLAGS_PRF = -g -O2 -pg
     6 CFLAGS_PRF = -g -O2 -pg
     7 LDFLAGS_PRF = -pg
     7 LDFLAGS_PRF = -pg
     8 
     8 
     9 CFLAGS_SEL = ${CFLAGS_REL}
     9 # release
    10 LDFLAGS_SEL = ${LDFLAGS_REL}
    10 CFLAGS_REL = -O2
    11 
    11 LDFLAGS_REL =
    12 # warnings, and use C99 with GNU extensions
       
    13 CFLAGS = ${CFLAGS_ALL} ${CFLAGS_SEL}
       
    14 LDFLAGS = ${LDFLAGS_ALL} ${LDFLAGS_SEL}
       
    15 
    12 
    16 # preprocessor flags
    13 # preprocessor flags
    17 CPPFLAGS = -Iinclude -Isrc/
    14 CPPFLAGS = -Iinclude -Isrc/
       
    15 CFLAGS = -Wall -std=gnu99 -fPIC -pthread ${CFLAGS_REL}
       
    16 LDFLAGS = ${LDFLAGS_ALL} ${LDFLAGS_REL}
       
    17 LDLIBS = -lpng -lpthread
    18 
    18 
    19 # libraries to use
    19 all: build lib bin lib/libpngtile.so bin/pngtile
    20 LOADLIBES = -lpng -lpthread
       
    21 
    20 
    22 # output name
    21 # binary deps
       
    22 lib/libpngtile.so : \
       
    23 	build/lib/ctx.o build/lib/image.o build/lib/cache.o build/lib/tile.o build/lib/png.o build/lib/error.o \
       
    24 	build/shared/util.o build/shared/log.o
       
    25 
       
    26 lib/libpngtile.a : \
       
    27 	build/lib/ctx.o build/lib/image.o build/lib/cache.o build/lib/tile.o build/lib/png.o build/lib/error.o \
       
    28 	build/shared/util.o build/shared/log.o
       
    29 
       
    30 bin/pngtile : \
       
    31 	build/pngtile/main.o \
       
    32 	lib/libpngtile.so build/shared/log.o
       
    33 
       
    34 bin/pngtile-static : \
       
    35 	build/pngtile/main.o \
       
    36 	lib/libpngtile.a
       
    37 
       
    38 SRC_PATHS = $(wildcard src/*/*.c)
       
    39 SRC_DIRS = $(dir $(SRC_PATHS))
       
    40 
       
    41 build:
       
    42 	mkdir -p $(SRC_DIRS:src/%=build/%)
       
    43 
       
    44 lib: 
       
    45 	mkdir -p lib 
       
    46 
       
    47 bin: 
       
    48 	mkdir -p bin
       
    49 
       
    50 # build obj files from src, with header deps
       
    51 build/%.o: src/%.c
       
    52 	$(CC) -c $(CPPFLAGS) $(CFLAGS) src/$*.c -o build/$*.o
       
    53 	$(CC) -MM $(CPPFLAGS) src/$*.c -MT build/$*.o -MF build/$*.d
       
    54 
       
    55 -include $(wildcard build/*/*.d)
       
    56 
       
    57 # output libraries
       
    58 lib/lib%.so:
       
    59 	$(CC) -shared $(LDFLAGS) $+ $(LDLIBS) -o $@
       
    60 
       
    61 lib/lib%.a:
       
    62 	$(AR) rc $@ $+
       
    63 
       
    64 # output binaries
       
    65 bin/%:
       
    66 	$(CC) $(LDFLAGS) $+ -o $@ $(LDLIBS)
       
    67 
       
    68 clean:
       
    69 	rm -f build/*/*.o build/*/*.d
       
    70 	rm -f bin/pngtile bin/pngtile-static lib/*.so lib/*.a
       
    71 
       
    72 # dist builds
    23 DIST_NAME = pngtile-${shell hg id -i}
    73 DIST_NAME = pngtile-${shell hg id -i}
    24 DIST_DEPS = 
    74 DIST_DEPS = 
    25 DIST_RESOURCES = README pngtile/ static/ bin/
    75 DIST_RESOURCES = README pngtile/ static/ bin/
    26 
    76 
    27 all: depend lib/libpngtile.so bin/pngtile
    77 dist-clean: clean dirs
    28 
    78 
    29 lib/libpngtile.so : \
    79 dist: dist-clean $(DIST_DEPS)
    30 	build/obj/lib/ctx.o build/obj/lib/image.o build/obj/lib/cache.o build/obj/lib/tile.o build/obj/lib/png.o build/obj/lib/error.o \
    80 	mkdir -p dist
    31 	build/obj/shared/util.o build/obj/shared/log.o
       
    32 
       
    33 lib/libpngtile.a : \
       
    34 	build/obj/lib/ctx.o build/obj/lib/image.o build/obj/lib/cache.o build/obj/lib/tile.o build/obj/lib/png.o build/obj/lib/error.o \
       
    35 	build/obj/shared/util.o build/obj/shared/log.o
       
    36 
       
    37 bin/pngtile : \
       
    38 	build/obj/pngtile/main.o \
       
    39 	lib/libpngtile.so build/obj/shared/log.o
       
    40 
       
    41 bin/pngtile-static : \
       
    42 	build/obj/pngtile/main.o \
       
    43 	lib/libpngtile.a
       
    44 
       
    45 SRC_PATHS = $(wildcard src/*/*.c)
       
    46 SRC_NAMES = $(patsubst src/%,%,$(SRC_PATHS))
       
    47 SRC_DIRS = $(dir $(SRC_NAMES))
       
    48 
       
    49 .PHONY : dirs clean depend dist
       
    50 
       
    51 dist-clean : clean dirs
       
    52 
       
    53 dirs: 
       
    54 	mkdir -p bin lib dist
       
    55 	mkdir -p $(SRC_DIRS:%=build/deps/%)
       
    56 	mkdir -p $(SRC_DIRS:%=build/obj/%)
       
    57 
       
    58 clean:
       
    59 	rm -f build/obj/*/*.o build/deps/*/*.d
       
    60 	rm -f bin/pngtile bin/pngtile-static lib/*.so lib/*.a
       
    61 	rm -f */.*.swp */*/.*.swp
       
    62 
       
    63 # .h dependencies
       
    64 depend: $(SRC_NAMES:%.c=build/deps/%.d)
       
    65 
       
    66 build/deps/%.d : src/%.c
       
    67 	@set -e; rm -f $@; \
       
    68 	 $(CC) -MM -MT __ $(CPPFLAGS) $< > $@.$$$$; \
       
    69 	 sed 's,__[ :]*,build/obj/$*.o $@ : ,g' < $@.$$$$ > $@; \
       
    70 	 rm -f $@.$$$$
       
    71 
       
    72 include $(wildcard build/deps/*/*.d)
       
    73 
       
    74 # build (potential) library targets with specific cflags
       
    75 # XXX: just build everything with -fPIC?
       
    76 build/obj/shared/%.o : src/shared/%.c
       
    77 	$(CC) -c -fPIC $(CPPFLAGS) $(CFLAGS) $< -o $@
       
    78 
       
    79 # XXX: hax in -pthread
       
    80 build/obj/lib/%.o : src/lib/%.c
       
    81 	$(CC) -c -fPIC -pthread $(CPPFLAGS) $(CFLAGS) $< -o $@
       
    82 
       
    83 # general binary objects
       
    84 build/obj/%.o : src/%.c
       
    85 	$(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@
       
    86 
       
    87 # output binaries
       
    88 bin/% :
       
    89 	$(CC) $(LDFLAGS) $+ $(LOADLIBES) $(LDLIBS) -o $@
       
    90 
       
    91 # output libraries
       
    92 lib/lib%.so :
       
    93 	$(CC) -shared $(LDFLAGS) $+ $(LOADLIBES) $(LDLIBS) -o $@
       
    94 
       
    95 lib/lib%.a :
       
    96 	$(AR) rc $@ $+
       
    97 
       
    98 dist: $(DIST_DEPS)
       
    99 	rm -rf dist/$(DIST_NAME)
    81 	rm -rf dist/$(DIST_NAME)
   100 	mkdir -p dist/$(DIST_NAME)
    82 	mkdir -p dist/$(DIST_NAME)
   101 	cp -rv Makefile $(DIST_RESOURCES) src/ include/  dist/$(DIST_NAME)/
    83 	cp -rv Makefile $(DIST_RESOURCES) src/ include/  dist/$(DIST_NAME)/
   102 	make -C dist/$(DIST_NAME) dist-clean
    84 	make -C dist/$(DIST_NAME) dist-clean
   103 	tar -C dist -czvf dist/$(DIST_NAME).tar.gz $(DIST_NAME)
    85 	tar -C dist -czvf dist/$(DIST_NAME).tar.gz $(DIST_NAME)
   104 	@echo "*** Output at dist/$(DIST_NAME).tar.gz"
    86 	@echo "*** Output at dist/$(DIST_NAME).tar.gz"
   105 
    87 
       
    88 
       
    89 .PHONY : dirs clean depend dist-clean dist