# HG changeset patch # User Tero Marttila # Date 1412361248 -10800 # Node ID cda90b8d94b8ead208a91cd9a1a948eb2d8f6cab # Parent e9eef49f4d576c0a7ce2ee9b5e5c96de4e05f935 Makefile: cleanup diff -r e9eef49f4d57 -r cda90b8d94b8 Makefile --- a/Makefile Fri Oct 03 21:11:40 2014 +0300 +++ b/Makefile Fri Oct 03 21:34:08 2014 +0300 @@ -1,101 +1,83 @@ -# :set noexpandtab -CFLAGS_ALL = -Wall -std=gnu99 -LDFLAGS_ALL = +# debug CFLAGS_DBG = -g -CFLAGS_REL = -O2 +LDFLAGS_DBG = + +# profile CFLAGS_PRF = -g -O2 -pg LDFLAGS_PRF = -pg -CFLAGS_SEL = ${CFLAGS_REL} -LDFLAGS_SEL = ${LDFLAGS_REL} - -# warnings, and use C99 with GNU extensions -CFLAGS = ${CFLAGS_ALL} ${CFLAGS_SEL} -LDFLAGS = ${LDFLAGS_ALL} ${LDFLAGS_SEL} +# release +CFLAGS_REL = -O2 +LDFLAGS_REL = # preprocessor flags CPPFLAGS = -Iinclude -Isrc/ +CFLAGS = -Wall -std=gnu99 -fPIC -pthread ${CFLAGS_REL} +LDFLAGS = ${LDFLAGS_ALL} ${LDFLAGS_REL} +LDLIBS = -lpng -lpthread -# libraries to use -LOADLIBES = -lpng -lpthread +all: build lib bin lib/libpngtile.so bin/pngtile -# output name +# 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 \ + lib/libpngtile.so 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) -o $@ + +lib/lib%.a: + $(AR) rc $@ $+ + +# output binaries +bin/%: + $(CC) $(LDFLAGS) $+ -o $@ $(LDLIBS) + +clean: + rm -f build/*/*.o build/*/*.d + rm -f bin/pngtile bin/pngtile-static lib/*.so lib/*.a + +# dist builds DIST_NAME = pngtile-${shell hg id -i} DIST_DEPS = DIST_RESOURCES = README pngtile/ static/ bin/ -all: depend lib/libpngtile.so bin/pngtile - -lib/libpngtile.so : \ - 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 \ - build/obj/shared/util.o build/obj/shared/log.o - -lib/libpngtile.a : \ - 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 \ - build/obj/shared/util.o build/obj/shared/log.o - -bin/pngtile : \ - build/obj/pngtile/main.o \ - lib/libpngtile.so build/obj/shared/log.o - -bin/pngtile-static : \ - build/obj/pngtile/main.o \ - lib/libpngtile.a - -SRC_PATHS = $(wildcard src/*/*.c) -SRC_NAMES = $(patsubst src/%,%,$(SRC_PATHS)) -SRC_DIRS = $(dir $(SRC_NAMES)) - -.PHONY : dirs clean depend dist - -dist-clean : clean dirs - -dirs: - mkdir -p bin lib dist - mkdir -p $(SRC_DIRS:%=build/deps/%) - mkdir -p $(SRC_DIRS:%=build/obj/%) - -clean: - rm -f build/obj/*/*.o build/deps/*/*.d - rm -f bin/pngtile bin/pngtile-static lib/*.so lib/*.a - rm -f */.*.swp */*/.*.swp +dist-clean: clean dirs -# .h dependencies -depend: $(SRC_NAMES:%.c=build/deps/%.d) - -build/deps/%.d : src/%.c - @set -e; rm -f $@; \ - $(CC) -MM -MT __ $(CPPFLAGS) $< > $@.$$$$; \ - sed 's,__[ :]*,build/obj/$*.o $@ : ,g' < $@.$$$$ > $@; \ - rm -f $@.$$$$ - -include $(wildcard build/deps/*/*.d) - -# build (potential) library targets with specific cflags -# XXX: just build everything with -fPIC? -build/obj/shared/%.o : src/shared/%.c - $(CC) -c -fPIC $(CPPFLAGS) $(CFLAGS) $< -o $@ - -# XXX: hax in -pthread -build/obj/lib/%.o : src/lib/%.c - $(CC) -c -fPIC -pthread $(CPPFLAGS) $(CFLAGS) $< -o $@ - -# general binary objects -build/obj/%.o : src/%.c - $(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@ - -# output binaries -bin/% : - $(CC) $(LDFLAGS) $+ $(LOADLIBES) $(LDLIBS) -o $@ - -# output libraries -lib/lib%.so : - $(CC) -shared $(LDFLAGS) $+ $(LOADLIBES) $(LDLIBS) -o $@ - -lib/lib%.a : - $(AR) rc $@ $+ - -dist: $(DIST_DEPS) +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)/ @@ -103,3 +85,5 @@ 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