cannam@154
|
1 # NOTE: This Makefile requires GNU make
|
cannam@154
|
2 # Location to put the targets.
|
cannam@154
|
3 TARGETBINDIR = .
|
cannam@154
|
4 TESTBINDIR = tests
|
cannam@154
|
5 TARGETLIBDIR = .
|
cannam@154
|
6 # Name of the targets
|
cannam@154
|
7 LIBOPUSFILE_TARGET = libopusfile.a
|
cannam@154
|
8 LIBOPUSURL_TARGET = libopusurl.a
|
cannam@154
|
9 OPUSFILE_EXAMPLE_TARGET = opusfile_example
|
cannam@154
|
10 SEEKING_EXAMPLE_TARGET = seeking_example
|
cannam@154
|
11 # Test targets
|
cannam@154
|
12 #TODO: tests
|
cannam@154
|
13 FOO_TARGET = foo
|
cannam@154
|
14 # The command to use to generate dependency information
|
cannam@154
|
15 MAKEDEPEND = ${CC} -MM
|
cannam@154
|
16 #MAKEDEPEND = makedepend -f- -Y --
|
cannam@154
|
17 # Optional features to enable
|
cannam@154
|
18 #CFLAGS := $(CFLAGS) -DOP_HAVE_LRINTF
|
cannam@154
|
19 CFLAGS := $(CFLAGS) -DOP_ENABLE_HTTP
|
cannam@154
|
20 # Extra compilation flags.
|
cannam@154
|
21 # You may get speed increases by including flags such as -O2 or -O3 or
|
cannam@154
|
22 # -ffast-math, or additional flags, depending on your system and compiler.
|
cannam@154
|
23 # The -g flag will generally include debugging information.
|
cannam@154
|
24 CFLAGS := -g $(CFLAGS)
|
cannam@154
|
25 CFLAGS := -DOP_ENABLE_ASSERTIONS $(CFLAGS)
|
cannam@154
|
26 # These are gcc-only, but not actually critical.
|
cannam@154
|
27 CFLAGS := -fPIC $(CFLAGS)
|
cannam@154
|
28 CFLAGS := -std=c89 -pedantic $(CFLAGS)
|
cannam@154
|
29 CFLAGS := -fvisibility=hidden $(CFLAGS)
|
cannam@154
|
30 CFLAGS := -Wextra -Wno-parentheses -Wno-long-long $(CFLAGS)
|
cannam@154
|
31 CFLAGS := -Wall $(CFLAGS)
|
cannam@154
|
32 # The list of pkg-config packages we depend on.
|
cannam@154
|
33 PACKAGES := ogg opus
|
cannam@154
|
34 ifeq ($(findstring -DOP_ENABLE_HTTP,${CFLAGS}),-DOP_ENABLE_HTTP)
|
cannam@154
|
35 PACKAGES += openssl
|
cannam@154
|
36 endif
|
cannam@154
|
37 # The location of include files.
|
cannam@154
|
38 # Modify these to point to your Ogg and Opus include directories if they are
|
cannam@154
|
39 # not installed in a standard location.
|
cannam@154
|
40 CINCLUDE := `pkg-config --cflags ${PACKAGES}`
|
cannam@154
|
41
|
cannam@154
|
42 # Libraries to link with, and the location of library files.
|
cannam@154
|
43 LIBS := `pkg-config --libs ${PACKAGES}`
|
cannam@154
|
44 ifeq ($(findstring -DOP_HAVE_LRINTF,${CFLAGS}),-DOP_HAVE_LRINTF)
|
cannam@154
|
45 LIBS := -lm $(LIBS)
|
cannam@154
|
46 endif
|
cannam@154
|
47
|
cannam@154
|
48 # Extras for the MS target
|
cannam@154
|
49 ifneq ($(findstring mingw,${CC}),)
|
cannam@154
|
50 LIBS += -lwsock32 -lws2_32 -lgdi32 -lcrypt32
|
cannam@154
|
51 EXEEXT := .exe
|
cannam@154
|
52 endif
|
cannam@154
|
53
|
cannam@154
|
54 RANLIB ?= ranlib
|
cannam@154
|
55
|
cannam@154
|
56 #TODO: tests
|
cannam@154
|
57 FOO_LIBS =
|
cannam@154
|
58
|
cannam@154
|
59 # ANYTHING BELOW THIS LINE PROBABLY DOES NOT NEED EDITING
|
cannam@154
|
60 CINCLUDE := -I../include ${CINCLUDE}
|
cannam@154
|
61 LIBSRCDIR = ../src
|
cannam@154
|
62 BINSRCDIR = ../examples
|
cannam@154
|
63 TESTSRCDIR = ${LIBSRCDIR}
|
cannam@154
|
64 WORKDIR = objs
|
cannam@154
|
65
|
cannam@154
|
66 # C source file lists
|
cannam@154
|
67 LIBOPUSFILE_CSOURCES = \
|
cannam@154
|
68 http.c \
|
cannam@154
|
69 info.c \
|
cannam@154
|
70 internal.c \
|
cannam@154
|
71 opusfile.c \
|
cannam@154
|
72 stream.c \
|
cannam@154
|
73
|
cannam@154
|
74 LIBOPUSFILE_CHEADERS = \
|
cannam@154
|
75 internal.h \
|
cannam@154
|
76
|
cannam@154
|
77 LIBOPUSURL_CSOURCES = \
|
cannam@154
|
78 internal.c \
|
cannam@154
|
79 http.c \
|
cannam@154
|
80
|
cannam@154
|
81 ifneq ($(findstring mingw,${CC}),)
|
cannam@154
|
82 LIBOPUSURL_CSOURCES += wincerts.c
|
cannam@154
|
83 endif
|
cannam@154
|
84
|
cannam@154
|
85 LIBOPUSURL_CHEADERS = \
|
cannam@154
|
86 internal.h \
|
cannam@154
|
87
|
cannam@154
|
88 OPUSFILE_EXAMPLE_CSOURCES = opusfile_example.c
|
cannam@154
|
89
|
cannam@154
|
90 SEEKING_EXAMPLE_CSOURCES = seeking_example.c
|
cannam@154
|
91
|
cannam@154
|
92 ifneq ($(findstring mingw,${CC}),)
|
cannam@154
|
93 OPUSFILE_EXAMPLE_CSOURCES += win32utf8.c
|
cannam@154
|
94 SEEKING_EXAMPLE_CSOURCES += win32utf8.c
|
cannam@154
|
95 endif
|
cannam@154
|
96
|
cannam@154
|
97 FOO_CSOURCES = tests/foo.c
|
cannam@154
|
98
|
cannam@154
|
99 # Create object file list.
|
cannam@154
|
100 LIBOPUSFILE_OBJS:= ${LIBOPUSFILE_CSOURCES:%.c=${WORKDIR}/%.o}
|
cannam@154
|
101 LIBOPUSFILE_ASMS:= ${LIBOPUSFILE_OBJS:%.o=%.s}
|
cannam@154
|
102 LIBOPUSFILE_DEPS:= ${LIBOPUSFILE_OBJS:%.o=%.d}
|
cannam@154
|
103 LIBOPUSURL_OBJS:= ${LIBOPUSURL_CSOURCES:%.c=${WORKDIR}/%.o}
|
cannam@154
|
104 LIBOPUSURL_ASMS:= ${LIBOPUSURL_OBJS:%.o=%.s}
|
cannam@154
|
105 LIBOPUSURL_DEPS:= ${LIBOPUSURL_OBJS:%.o=%.d}
|
cannam@154
|
106 OPUSFILE_EXAMPLE_OBJS:= ${OPUSFILE_EXAMPLE_CSOURCES:%.c=${WORKDIR}/%.o}
|
cannam@154
|
107 SEEKING_EXAMPLE_OBJS:= ${SEEKING_EXAMPLE_CSOURCES:%.c=${WORKDIR}/%.o}
|
cannam@154
|
108 #TODO: tests
|
cannam@154
|
109 FOO_OBJS:= ${FOO_CSOURCES:%.c=${WORKDIR}/%.o}
|
cannam@154
|
110 ALL_OBJS:= \
|
cannam@154
|
111 ${LIBOPUSFILE_OBJS} \
|
cannam@154
|
112 ${LIBOPUSURL_OBJS} \
|
cannam@154
|
113 ${OPUSFILE_EXAMPLE_OBJS} \
|
cannam@154
|
114 ${SEEKING_EXAMPLE_OBJS} \
|
cannam@154
|
115
|
cannam@154
|
116 #TODO: tests
|
cannam@154
|
117 # ${FOO_OBJS}
|
cannam@154
|
118
|
cannam@154
|
119 # Create the dependency file list
|
cannam@154
|
120 ALL_DEPS:= ${ALL_OBJS:%.o=%.d}
|
cannam@154
|
121 # Prepend source path to file names.
|
cannam@154
|
122 LIBOPUSFILE_CSOURCES:= ${LIBOPUSFILE_CSOURCES:%=${LIBSRCDIR}/%}
|
cannam@154
|
123 LIBOPUSFILE_CHEADERS:= ${LIBOPUSFILE_CHEADERS:%=${LIBSRCDIR}/%}
|
cannam@154
|
124 LIBOPUSURL_CSOURCES:= ${LIBOPUSURL_CSOURCES:%=${LIBSRCDIR}/%}
|
cannam@154
|
125 LIBOPUSURL_CHEADERS:= ${LIBOPUSURL_CHEADERS:%=${LIBSRCDIR}/%}
|
cannam@154
|
126 OPUSFILE_EXAMPLE_CSOURCES:= ${OPUSFILE_EXAMPLE_CSOURCES:%=${BINSRCDIR}/%}
|
cannam@154
|
127 SEEKING_EXAMPLE_CSOURCES:= ${SEEKING_EXAMPLE_CSOURCES:%=${BINSRCDIR}/%}
|
cannam@154
|
128 #TODO: tests
|
cannam@154
|
129 FOO_CSOURCES:= ${FOO_CSOURCES:%=${TESTSRCDIR}/%}
|
cannam@154
|
130 ALL_CSOURCES:= \
|
cannam@154
|
131 ${LIBOPUSFILE_CSOURCES} \
|
cannam@154
|
132 ${LIBOPUSURL_CSOURCES} \
|
cannam@154
|
133 ${OPUSFILE_EXAMPLE_CSOURCES} \
|
cannam@154
|
134 ${SEEKING_EXAMPLE_CSOURCES} \
|
cannam@154
|
135
|
cannam@154
|
136 #TODO: tests
|
cannam@154
|
137 # ${FOO_CSOURCES} \
|
cannam@154
|
138 # Prepand target path to file names.
|
cannam@154
|
139 LIBOPUSFILE_TARGET:= ${TARGETLIBDIR}/${LIBOPUSFILE_TARGET}
|
cannam@154
|
140 LIBOPUSURL_TARGET:= ${TARGETLIBDIR}/${LIBOPUSURL_TARGET}
|
cannam@154
|
141 OPUSFILE_EXAMPLE_TARGET:= ${TARGETBINDIR}/${OPUSFILE_EXAMPLE_TARGET}${EXEEXT}
|
cannam@154
|
142 SEEKING_EXAMPLE_TARGET:= ${TARGETBINDIR}/${SEEKING_EXAMPLE_TARGET}${EXEEXT}
|
cannam@154
|
143 # Prepend test path to file names.
|
cannam@154
|
144 #TODO: tests
|
cannam@154
|
145 FOO_TARGET:= ${TESTBINDIR}/${FOO_TARGET}
|
cannam@154
|
146 # Complete set of targets
|
cannam@154
|
147 ALL_TARGETS:= \
|
cannam@154
|
148 ${LIBOPUSFILE_TARGET} \
|
cannam@154
|
149 ${LIBOPUSURL_TARGET} \
|
cannam@154
|
150 ${OPUSFILE_EXAMPLE_TARGET} \
|
cannam@154
|
151 ${SEEKING_EXAMPLE_TARGET} \
|
cannam@154
|
152
|
cannam@154
|
153 #TODO: tests
|
cannam@154
|
154 # ${FOO_TARGET} \
|
cannam@154
|
155
|
cannam@154
|
156 # Targets:
|
cannam@154
|
157 # Everything (default)
|
cannam@154
|
158 all: ${ALL_TARGETS}
|
cannam@154
|
159
|
cannam@154
|
160 # libopusfile
|
cannam@154
|
161 ${LIBOPUSFILE_TARGET}: ${LIBOPUSFILE_OBJS}
|
cannam@154
|
162 mkdir -p ${TARGETLIBDIR}
|
cannam@154
|
163 $(AR) cqs $@ ${LIBOPUSFILE_OBJS}
|
cannam@154
|
164 -$(RANLIB) $@
|
cannam@154
|
165
|
cannam@154
|
166 # libopusurl
|
cannam@154
|
167 ${LIBOPUSURL_TARGET}: ${LIBOPUSURL_OBJS}
|
cannam@154
|
168 mkdir -p ${TARGETLIBDIR}
|
cannam@154
|
169 $(AR) cqs $@ ${LIBOPUSURL_OBJS}
|
cannam@154
|
170 -$(RANLIB) $@
|
cannam@154
|
171
|
cannam@154
|
172 # opusfile_example
|
cannam@154
|
173 ${OPUSFILE_EXAMPLE_TARGET}: ${OPUSFILE_EXAMPLE_OBJS} ${LIBOPUSFILE_TARGET} \
|
cannam@154
|
174 ${LIBOPUSURL_TARGET}
|
cannam@154
|
175 mkdir -p ${TARGETBINDIR}
|
cannam@154
|
176 ${CC} ${CFLAGS} ${OPUSFILE_EXAMPLE_OBJS} ${LIBOPUSFILE_TARGET} \
|
cannam@154
|
177 ${LIBOPUSURL_TARGET} ${LIBS} -o $@
|
cannam@154
|
178
|
cannam@154
|
179 # seeking_example
|
cannam@154
|
180 ${SEEKING_EXAMPLE_TARGET}: ${SEEKING_EXAMPLE_OBJS} ${LIBOPUSFILE_TARGET} \
|
cannam@154
|
181 ${LIBOPUSURL_TARGET}
|
cannam@154
|
182 mkdir -p ${TARGETBINDIR}
|
cannam@154
|
183 ${CC} ${CFLAGS} ${SEEKING_EXAMPLE_OBJS} ${LIBOPUSFILE_TARGET} \
|
cannam@154
|
184 ${LIBOPUSURL_TARGET} ${LIBS} -o $@
|
cannam@154
|
185
|
cannam@154
|
186 #TODO:
|
cannam@154
|
187 #tests: foo
|
cannam@154
|
188 #
|
cannam@154
|
189 #${FOO_TARGET}: ${FOO_OBJS}
|
cannam@154
|
190 # mkdir -p ${TESTBINDIR}
|
cannam@154
|
191 # ${CC} ${CFLAGS} ${FOO_OBJS} ${FOO_LIBS} -o $@
|
cannam@154
|
192 #
|
cannam@154
|
193 #tests-clean:
|
cannam@154
|
194 # -rmdir ${TESTBINDIR}
|
cannam@154
|
195
|
cannam@154
|
196 # Assembly listing
|
cannam@154
|
197 ALL_ASM := ${ALL_OBJS:%.o=%.s}
|
cannam@154
|
198 asm: ${ALL_ASM}
|
cannam@154
|
199
|
cannam@154
|
200 # Check that build is complete.
|
cannam@154
|
201 check: all
|
cannam@154
|
202
|
cannam@154
|
203 # Remove all targets.
|
cannam@154
|
204 clean:
|
cannam@154
|
205 ${RM} ${ALL_ASM} ${ALL_OBJS} ${ALL_DEPS}
|
cannam@154
|
206 ${RM} ${ALL_TARGETS}
|
cannam@154
|
207 -rmdir ${WORKDIR}
|
cannam@154
|
208
|
cannam@154
|
209 # Make everything depend on changes in the Makefile
|
cannam@154
|
210 # This vpath directive needs to be before any include statements
|
cannam@154
|
211 vpath Makefile $(dir $(lastword $(MAKEFILE_LIST)))
|
cannam@154
|
212 ${ALL_ASM} ${ALL_OBJS} ${ALL_DEPS} ${ALL_TARGETS} : Makefile
|
cannam@154
|
213
|
cannam@154
|
214 # Specify which targets are phony for GNU make
|
cannam@154
|
215 .PHONY : all clean check
|
cannam@154
|
216
|
cannam@154
|
217 # Rules
|
cannam@154
|
218 ${WORKDIR}/%.d: ${LIBSRCDIR}/%.c
|
cannam@154
|
219 mkdir -p ${dir $@}
|
cannam@154
|
220 ${MAKEDEPEND} ${CINCLUDE} ${CFLAGS} $< -MT ${@:%.d=%.o} > $@
|
cannam@154
|
221 ${MAKEDEPEND} ${CINCLUDE} ${CFLAGS} $< -MT ${@:%.d=%.s} >> $@
|
cannam@154
|
222 ${MAKEDEPEND} ${CINCLUDE} ${CFLAGS} $< -MT $@ >> $@
|
cannam@154
|
223 ${WORKDIR}/%.s: ${LIBSRCDIR}/%.c
|
cannam@154
|
224 mkdir -p ${dir $@}
|
cannam@154
|
225 ${CC} ${CINCLUDE} ${CFLAGS} -S -o $@ $<
|
cannam@154
|
226 ${WORKDIR}/%.o: ${LIBSRCDIR}/%.c
|
cannam@154
|
227 mkdir -p ${dir $@}
|
cannam@154
|
228 ${CC} ${CINCLUDE} ${CFLAGS} -c -o $@ $<
|
cannam@154
|
229
|
cannam@154
|
230 ${WORKDIR}/%.d : ${BINSRCDIR}/%.c
|
cannam@154
|
231 mkdir -p ${dir $@}
|
cannam@154
|
232 ${MAKEDEPEND} ${CINCLUDE} ${CFLAGS} $< -MT ${@:%.d=%.o} > $@
|
cannam@154
|
233 ${WORKDIR}/%.s : ${BINSRCDIR}/%.c ${WORKDIR}/%.o
|
cannam@154
|
234 mkdir -p ${dir $@}
|
cannam@154
|
235 ${CC} ${CINCLUDE} ${CFLAGS} -S -o $@ $<
|
cannam@154
|
236 ${WORKDIR}/%.o : ${BINSRCDIR}/%.c
|
cannam@154
|
237 mkdir -p ${dir $@}
|
cannam@154
|
238 ${CC} ${CINCLUDE} ${CFLAGS} -c -o $@ $<
|
cannam@154
|
239
|
cannam@154
|
240 # Include header file dependencies, except when cleaning
|
cannam@154
|
241 ifneq ($(MAKECMDGOALS),clean)
|
cannam@154
|
242 include ${ALL_DEPS}
|
cannam@154
|
243 endif
|