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 |