Makefile
author Tero Marttila <terom@qmsk.net>
Sat, 04 Oct 2014 03:03:17 +0300
changeset 174 58c9e2de0dd4
parent 162 dd922b16220d
permissions -rw-r--r--
pngtile.cache: set last_modified/cache-control in 304 response as well..
PREFIX = opt

# debug
CFLAGS_DEV = -g
LDFLAGS_DEV = -Wl,-Rlib

# profile
CFLAGS_PRF = -g -O2 -pg
LDFLAGS_PRF = -pg

# release
CFLAGS_REL = -O2
LDFLAGS_REL = -Wl,-R${PREFIX}/lib

# preprocessor flags
CPPFLAGS = -Iinclude -Isrc
CFLAGS = -Wall -std=gnu99 -fPIC -pthread ${CFLAGS_REL}
LDFLAGS = -Llib ${LDFLAGS_REL}
LDLIBS_LIB = -lpng -lpthread
LDLIBS_BIN = -lpngtile

DIRS = build lib bin
all: $(DIRS) lib/libpngtile.so bin/pngtile

# binary deps
lib/libpngtile.so: \
	build/lib/ctx.o build/lib/image.o build/lib/cache.o build/lib/tile.o build/lib/png.o build/lib/error.o \
	build/shared/util.o build/shared/log.o

lib/libpngtile.a: \
	build/lib/ctx.o build/lib/image.o build/lib/cache.o build/lib/tile.o build/lib/png.o build/lib/error.o \
	build/shared/util.o build/shared/log.o

bin/pngtile: \
	build/pngtile/main.o \
	build/shared/log.o

bin/pngtile-static: \
	build/pngtile/main.o \
	lib/libpngtile.a

SRC_PATHS = $(wildcard src/*/*.c)
SRC_DIRS = $(dir $(SRC_PATHS))


build:
	mkdir -p $(SRC_DIRS:src/%=build/%)

lib: 
	mkdir -p lib 

bin: 
	mkdir -p bin

# build obj files from src, with header deps
build/%.o: src/%.c
	$(CC) -c $(CPPFLAGS) $(CFLAGS) src/$*.c -o build/$*.o
	$(CC) -MM $(CPPFLAGS) src/$*.c -MT build/$*.o -MF build/$*.d

-include $(wildcard build/*/*.d)

# output libraries
lib/lib%.so:
	$(CC) -shared $(LDFLAGS) $+ $(LDLIBS_LIB) -o $@

lib/lib%.a:
	$(AR) rc $@ $+

# output binaries
bin/%:
	$(CC) $(LDFLAGS) $+ -o $@ $(LDLIBS_BIN)

clean:
	rm -f build/*/*.o build/*/*.d
	rm -f bin/pngtile bin/pngtile-static lib/*.so lib/*.a

# install
INSTALL_INCLUDE = include/pngtile.h
INSTALL_LIB = lib/libpngtile.so
INSTALL_BIN = bin/pngtile

install: $(DIRS) $(INSTALL_INCLUDE) $(INSTALL_LIB) $(INSTALL_BIN)
	install -d $(PREFIX)/bin $(PREFIX)/lib $(PREFIX)/include
	install -t $(PREFIX)/include $(INSTALL_INCLUDE)
	install -t $(PREFIX)/lib $(INSTALL_LIB)
	install -t $(PREFIX)/bin $(INSTALL_BIN)

# dist builds
DIST_NAME = pngtile-${shell hg id -i}
DIST_DEPS = 
DIST_RESOURCES = README pngtile/ static/ bin/

dist-clean: clean dirs

dist: dist-clean $(DIST_DEPS)
	mkdir -p dist
	rm -rf dist/$(DIST_NAME)
	mkdir -p dist/$(DIST_NAME)
	cp -rv Makefile $(DIST_RESOURCES) src/ include/  dist/$(DIST_NAME)/
	make -C dist/$(DIST_NAME) dist-clean
	tar -C dist -czvf dist/$(DIST_NAME).tar.gz $(DIST_NAME)
	@echo "*** Output at dist/$(DIST_NAME).tar.gz"

.PHONY : dirs clean depend dist-clean dist