comparison Makefile @ 90:a6d6497adb60

make: cleanup a bit and add appropriate dependencies
author David Demelier <markand@malikania.fr>
date Thu, 12 Mar 2020 20:31:50 +0100
parents 30baadb6f6a2
children d4a72fa16225
comparison
equal deleted inserted replaced
89:30baadb6f6a2 90:a6d6497adb60
17 # 17 #
18 18
19 .POSIX: 19 .POSIX:
20 20
21 CC= cc 21 CC= cc
22 CFLAGS= -O0 -std=c11 -Wall -Wextra -g -ggdb 22 AR= ar
23 CFLAGS= -O0 -std=c11 -g
23 # Use this instead to build a release. 24 # Use this instead to build a release.
24 # CFLAGS= -O3 -DNDEBUG -std=c11 -Wall -Wextra 25 # CFLAGS= -O3 -DNDEBUG -std=c11 -Wall -Wextra
25 PROG= molko 26 PROG= molko
26 LIB= libmolko.a 27 LIB= libmolko.a
27 28
31 SQLITE_FLAGS= -DSQLITE_THREADSAFE=0 \ 32 SQLITE_FLAGS= -DSQLITE_THREADSAFE=0 \
32 -DSQLITE_OMIT_LOAD_EXTENSION \ 33 -DSQLITE_OMIT_LOAD_EXTENSION \
33 -DSQLITE_OMIT_DEPRECATED \ 34 -DSQLITE_OMIT_DEPRECATED \
34 -DSQLITE_DEFAULT_FOREIGN_KEYS=1 35 -DSQLITE_DEFAULT_FOREIGN_KEYS=1
35 36
36 CORE_SRCS= src/core/animation.c \ 37 CORE_SRCS= src/core/animation.c \
37 src/core/clock.c \ 38 src/core/clock.c \
38 src/core/debug.c \ 39 src/core/debug.c \
39 src/core/error.c \ 40 src/core/error.c \
40 src/core/event.c \ 41 src/core/event.c \
41 src/core/font.c \ 42 src/core/font.c \
42 src/core/game.c \ 43 src/core/game.c \
43 src/core/image.c \ 44 src/core/image.c \
44 src/core/inhibit.c \ 45 src/core/inhibit.c \
45 src/core/inventory.c \ 46 src/core/inventory.c \
46 src/core/map.c \ 47 src/core/map.c \
47 src/core/map_state.c \ 48 src/core/map_state.c \
48 src/core/message.c \ 49 src/core/message.c \
49 src/core/painter.c \ 50 src/core/painter.c \
50 src/core/panic.c \ 51 src/core/panic.c \
51 src/core/save.c \ 52 src/core/save.c \
52 src/core/script.c \ 53 src/core/script.c \
53 src/core/sprite.c \ 54 src/core/sprite.c \
54 src/core/sys.c \ 55 src/core/sys.c \
55 src/core/texture.c \ 56 src/core/texture.c \
56 src/core/util.c \ 57 src/core/util.c \
57 src/core/walksprite.c \ 58 src/core/walksprite.c \
58 src/core/wait.c \ 59 src/core/wait.c \
59 src/core/window.c 60 src/core/window.c
60 CORE_OBJS= ${CORE_SRCS:.c=.o} 61 CORE_OBJS= ${CORE_SRCS:.c=.o}
61 CORE_DEPS= ${CORE_SRCS:.c=.d} 62 CORE_DEPS= ${CORE_SRCS:.c=.d}
62 63
63 ADV_SRCS= src/adventure/main.c \ 64 ADV_SRCS= src/adventure/main.c \
64 src/adventure/panic_state.c \ 65 src/adventure/panic_state.c \
65 src/adventure/splashscreen_state.c \ 66 src/adventure/splashscreen_state.c \
66 src/adventure/mainmenu_state.c 67 src/adventure/mainmenu_state.c
67 ADV_OBJS= ${ADV_SRCS:.c=.o} 68 ADV_OBJS= ${ADV_SRCS:.c=.o}
68 ADV_DEPS= ${ADV_SRCS:.c=.d} 69 ADV_DEPS= ${ADV_SRCS:.c=.d}
69 70
70 PREFIX= /usr/local 71 PREFIX= /usr/local
75 SDL_LDFLAGS= `pkg-config --libs sdl2 SDL2_image SDL2_mixer SDL2_ttf` 76 SDL_LDFLAGS= `pkg-config --libs sdl2 SDL2_image SDL2_mixer SDL2_ttf`
76 77
77 JANSSON_CFLAGS= `pkg-config --cflags jansson` 78 JANSSON_CFLAGS= `pkg-config --cflags jansson`
78 JANSSON_LDFLAGS=`pkg-config --libs jansson` 79 JANSSON_LDFLAGS=`pkg-config --libs jansson`
79 80
80 TESTS= tests/test-color.c \ 81 TESTS= tests/test-color.c \
81 tests/test-error.c \ 82 tests/test-error.c \
82 tests/test-inventory.c \ 83 tests/test-inventory.c \
83 tests/test-map.c \ 84 tests/test-map.c \
84 tests/test-panic.c \ 85 tests/test-panic.c \
85 tests/test-save.c \ 86 tests/test-save.c \
86 tests/test-script.c 87 tests/test-script.c
87 TESTS_INCS= -I extern/libgreatest -I src/core ${SDL_CFLAGS} 88 TESTS_INCS= -I extern/libgreatest -I src/core ${SDL_CFLAGS}
88 TESTS_LIBS= ${LIB} ${SDL_LDFLAGS} ${LDFLAGS} 89 TESTS_PRGS= ${TESTS:.c=}
89 TESTS_OBJS= ${TESTS:.c=} 90 TESTS_OBJS= ${TESTS:.c=.o}
90 TESTS_DEPS= ${TESTS:.c=.d} 91 TESTS_DEPS= ${TESTS:.c=.d}
91 92
92 TOOLS= tools/molko-map.c 93 TOOLS= tools/molko-map.c
93 TOOLS_OBJS= ${TOOLS:.c=} 94 TOOLS_PRGS= ${TOOLS:.c=}
94 TOOLS_DEPS= ${TOOLS:.c=.d} 95 TOOLS_DEPS= ${TOOLS:.c=.d}
95 96
96 FLAGS= -MMD -D_XOPEN_SOURCE=700 97 MY_CFLAGS= -D_XOPEN_SOURCE=700 \
97 DEFINES= -DPREFIX=\""${PREFIX}"\" \ 98 -DPREFIX=\""${PREFIX}"\" \
98 -DBINDIR=\""${BINDIR}"\" \ 99 -DBINDIR=\""${BINDIR}"\" \
99 -DSHAREDIR=\""${SHAREDIR}"\" 100 -DSHAREDIR=\""${SHAREDIR}"\" \
100 INCLUDES= -I extern/libsqlite -I src/core -I src/adventure 101 -Iextern/libsqlite \
102 -Iextern/libgreatest \
103 -Isrc/core \
104 -Isrc/adventure
101 105
102 .SUFFIXES: 106 .SUFFIXES:
103 .SUFFIXES: .c .o 107 .SUFFIXES: .o .c
104 108
105 all: ${PROG} 109 all: ${PROG}
106 110
107 -include ${CORE_DEPS} ${ADV_DEPS} ${TESTS_DEPS} ${TOOLS_DEPS} 111 -include ${CORE_DEPS} ${ADV_DEPS} ${TESTS_DEPS} ${TOOLS_DEPS}
108 112
109 .c.o: 113 .c.o:
110 ${CC} ${FLAGS} ${DEFINES} ${INCLUDES} ${SDL_CFLAGS} ${CFLAGS} -MMD -c $< -o $@ 114 ${CC} ${MY_CFLAGS} ${SDL_CFLAGS} ${CFLAGS} -MMD -c $< -o $@
111 115
112 .c: 116 .c:
113 ${CC} ${FLAGS} ${TESTS_INCS} -o $@ ${CFLAGS} $< ${TESTS_LIBS} ${SQLITE_LIB} 117 ${CC} ${MY_CFLAGS} -o $@ ${CFLAGS} $< ${LIB} ${SQLITE_LIB} ${SDL_LDFLAGS} ${LDFLAGS}
118
119 .o:
120 ${CC} -o $@ $< ${LIB} ${SQLITE_LIB} ${SDL_LDFLAGS} ${LDFLAGS}
114 121
115 ${SQLITE_OBJ}: ${SQLITE_SRC} 122 ${SQLITE_OBJ}: ${SQLITE_SRC}
116 ${CC} ${CFLAGS} ${SQLITE_FLAGS} -c ${SQLITE_SRC} -o $@ 123 ${CC} ${CFLAGS} ${SQLITE_FLAGS} -c ${SQLITE_SRC} -o $@
117 124
118 ${SQLITE_LIB}: ${SQLITE_OBJ} 125 ${SQLITE_LIB}: ${SQLITE_OBJ}
119 ${AR} -rc $@ ${SQLITE_OBJ} 126 ${AR} -rc $@ ${SQLITE_OBJ}
120 127
121 ${LIB}: ${CORE_OBJS} 128 ${LIB}: ${CORE_OBJS} ${SQLITE_LIB}
122 ${AR} -rc $@ ${CORE_OBJS} 129 ${AR} -rc $@ ${CORE_OBJS}
123 130
124 ${PROG}: ${LIB} ${ADV_OBJS} ${SQLITE_LIB} 131 ${PROG}: ${LIB} ${ADV_OBJS}
125 ${CC} -o $@ ${ADV_OBJS} ${LIB} ${SQLITE_LIB} ${SDL_LDFLAGS} ${LDFLAGS} 132 ${CC} -o $@ ${ADV_OBJS} ${LIB} ${SQLITE_LIB} ${SDL_LDFLAGS} ${LDFLAGS}
126 133
127 ${TESTS_OBJS}: ${LIB} ${SQLITE_LIB} 134 ${TESTS_OBJS}: ${LIB}
128 135
129 tests: ${TESTS_OBJS} 136 tests: ${TESTS_PRGS}
130 for t in $?; do ./$$t; done 137 for t in ${TESTS_PRGS}; do ./$$t; done
131 138
132 tools: ${TOOLS_OBJS} 139 tools: ${TOOLS_PRGS}
133 140
141 # Custom rule: does not depend on anything else than jansson.
134 tools/molko-map: tools/molko-map.c 142 tools/molko-map: tools/molko-map.c
135 ${CC} -o $@ $< ${CFLAGS} ${JANSSON_CFLAGS} ${JANSSON_LDFLAGS} 143 ${CC} ${MY_CFLAGS} -o $@ $< ${CFLAGS} ${JANSSON_CFLAGS} ${JANSSON_LDFLAGS}
136 144
137 doxygen: 145 doxygen:
138 doxygen doxygen/Doxyfile 146 doxygen doxygen/Doxyfile
147
148 everything: ${PROG} ${TOOLS_PRGS} ${TESTS_PRGS}
139 149
140 install: 150 install:
141 mkdir -p ${DESTDIR}${BINDIR} 151 mkdir -p ${DESTDIR}${BINDIR}
142 cp molko ${DESTDIR}${BINDIR} 152 cp molko ${DESTDIR}${BINDIR}
143 chmod 755 ${DESTDIR}${BINDIR}/molko 153 chmod 755 ${DESTDIR}${BINDIR}/molko
148 rm -rf doxygen/html doxygen/man 158 rm -rf doxygen/html doxygen/man
149 rm -f ${SQLITE_OBJ} ${SQLITE_LIB} 159 rm -f ${SQLITE_OBJ} ${SQLITE_LIB}
150 rm -f ${LIB} ${PROG} 160 rm -f ${LIB} ${PROG}
151 rm -f ${CORE_OBJS} ${CORE_DEPS} 161 rm -f ${CORE_OBJS} ${CORE_DEPS}
152 rm -f ${ADV_OBJS} ${ADV_DEPS} 162 rm -f ${ADV_OBJS} ${ADV_DEPS}
153 rm -f ${TESTS_OBJS} ${TESTS_DEPS} 163 rm -f ${TESTS_PRGS} ${TESTS_OBJS} ${TESTS_DEPS}
154 rm -f ${TOOLS_OBJS} ${TOOLS_DEPS} 164 rm -f ${TOOLS_PRGS} ${TOOLS_DEPS}
155 165
156 .PHONY: all clean doxygen tests tools 166 .PHONY: all clean doxygen everything tests tools