terom@156: PREFIX = opt terom@156: terom@155: # debug terom@156: CFLAGS_DEV = -g terom@156: LDFLAGS_DEV = -Wl,-Rlib terom@155: terom@155: # profile terom@99: CFLAGS_PRF = -g -O2 -pg terom@99: LDFLAGS_PRF = -pg terom@35: terom@155: # release terom@155: CFLAGS_REL = -O2 terom@156: LDFLAGS_REL = -Wl,-R${PREFIX}/lib terom@0: terom@0: # preprocessor flags terom@156: CPPFLAGS = -Iinclude -Isrc terom@155: CFLAGS = -Wall -std=gnu99 -fPIC -pthread ${CFLAGS_REL} terom@156: LDFLAGS = -Llib ${LDFLAGS_REL} terom@156: LDLIBS_LIB = -lpng -lpthread terom@156: LDLIBS_BIN = -lpngtile terom@0: terom@162: DIRS = build lib bin terom@162: all: $(DIRS) lib/libpngtile.so bin/pngtile terom@1: terom@155: # binary deps terom@156: lib/libpngtile.so: \ terom@155: build/lib/ctx.o build/lib/image.o build/lib/cache.o build/lib/tile.o build/lib/png.o build/lib/error.o \ terom@155: build/shared/util.o build/shared/log.o terom@155: terom@156: lib/libpngtile.a: \ terom@155: build/lib/ctx.o build/lib/image.o build/lib/cache.o build/lib/tile.o build/lib/png.o build/lib/error.o \ terom@155: build/shared/util.o build/shared/log.o terom@155: terom@156: bin/pngtile: \ terom@155: build/pngtile/main.o \ terom@158: build/shared/log.o terom@155: terom@156: bin/pngtile-static: \ terom@155: build/pngtile/main.o \ terom@155: lib/libpngtile.a terom@155: terom@155: SRC_PATHS = $(wildcard src/*/*.c) terom@155: SRC_DIRS = $(dir $(SRC_PATHS)) terom@155: terom@162: terom@155: build: terom@155: mkdir -p $(SRC_DIRS:src/%=build/%) terom@155: terom@155: lib: terom@155: mkdir -p lib terom@155: terom@155: bin: terom@155: mkdir -p bin terom@155: terom@155: # build obj files from src, with header deps terom@155: build/%.o: src/%.c terom@155: $(CC) -c $(CPPFLAGS) $(CFLAGS) src/$*.c -o build/$*.o terom@155: $(CC) -MM $(CPPFLAGS) src/$*.c -MT build/$*.o -MF build/$*.d terom@155: terom@155: -include $(wildcard build/*/*.d) terom@155: terom@155: # output libraries terom@155: lib/lib%.so: terom@156: $(CC) -shared $(LDFLAGS) $+ $(LDLIBS_LIB) -o $@ terom@155: terom@155: lib/lib%.a: terom@155: $(AR) rc $@ $+ terom@155: terom@155: # output binaries terom@155: bin/%: terom@156: $(CC) $(LDFLAGS) $+ -o $@ $(LDLIBS_BIN) terom@155: terom@155: clean: terom@155: rm -f build/*/*.o build/*/*.d terom@155: rm -f bin/pngtile bin/pngtile-static lib/*.so lib/*.a terom@155: terom@156: # install terom@156: INSTALL_INCLUDE = include/pngtile.h terom@156: INSTALL_LIB = lib/libpngtile.so terom@156: INSTALL_BIN = bin/pngtile terom@156: terom@162: install: $(DIRS) $(INSTALL_INCLUDE) $(INSTALL_LIB) $(INSTALL_BIN) terom@156: install -d $(PREFIX)/bin $(PREFIX)/lib $(PREFIX)/include terom@156: install -t $(PREFIX)/include $(INSTALL_INCLUDE) terom@156: install -t $(PREFIX)/lib $(INSTALL_LIB) terom@156: install -t $(PREFIX)/bin $(INSTALL_BIN) terom@156: terom@155: # dist builds terom@119: DIST_NAME = pngtile-${shell hg id -i} terom@132: DIST_DEPS = terom@132: DIST_RESOURCES = README pngtile/ static/ bin/ terom@0: terom@155: dist-clean: clean dirs terom@0: terom@155: dist: dist-clean $(DIST_DEPS) terom@155: mkdir -p dist terom@118: rm -rf dist/$(DIST_NAME) terom@0: mkdir -p dist/$(DIST_NAME) terom@118: cp -rv Makefile $(DIST_RESOURCES) src/ include/ dist/$(DIST_NAME)/ terom@118: make -C dist/$(DIST_NAME) dist-clean terom@0: tar -C dist -czvf dist/$(DIST_NAME).tar.gz $(DIST_NAME) terom@0: @echo "*** Output at dist/$(DIST_NAME).tar.gz" terom@0: terom@155: .PHONY : dirs clean depend dist-clean dist