Revert ea2412ea.
[opusfile.git] / unix / Makefile
1 # NOTE: This Makefile requires GNU make
2 # Location to put the targets.
3 TARGETBINDIR = .
4 TESTBINDIR = tests
5 TARGETLIBDIR = .
6 # Name of the targets
7 LIBOPUSFILE_TARGET = libopusfile.a
8 OPUSFILE_EXAMPLE_TARGET = opusfile_example
9 SEEKING_EXAMPLE_TARGET = seeking_example
10 # Test targets
11 #TODO: tests
12 FOO_TARGET = foo
13 # The command to use to generate dependency information
14 MAKEDEPEND = ${CC} -MM
15 #MAKEDEPEND = makedepend -f- -Y --
16 # The location of include files.
17 # Modify these to point to your Ogg and Vorbis include directories if they are
18 #  not installed in a standard location.
19 CINCLUDE = `pkg-config --cflags ogg opus`
20 # These are gcc-only, but not actually critical.
21 # Extra compilation flags.
22 # You may get speed increases by including flags such as -O2 or -O3 or
23 #  -ffast-math, or additional flags, depending on your system and compiler.
24 # The -g flag will generally include debugging information.
25 CFLAGS := -g $(CFLAGS)
26 CFLAGS := -DOP_ENABLE_ASSERTIONS $(CFLAGS)
27 CFLAGS := -fPIC $(CFLAGS)
28 CFLAGS := -std=c89 -pedantic $(CFLAGS)
29 CFLAGS := -fvisibility=hidden $(CFLAGS)
30 CFLAGS := -Wextra -Wno-parentheses -Wno-long-long $(CFLAGS)
31 CFLAGS := -Wall $(CFLAGS)
32
33 # Libraries to link with, and the location of library files.
34 LIBS = `pkg-config --libs ogg opus`
35
36 #TODO: tests
37 FOO_LIBS =
38
39 # ANYTHING BELOW THIS LINE PROBABLY DOES NOT NEED EDITING
40 CINCLUDE := -I../include ${CINCLUDE}
41 LIBSRCDIR = ../src
42 BINSRCDIR = ../examples
43 TESTSRCDIR = ${LIBSRCDIR}
44 WORKDIR = objs
45
46 # C source file lists
47 LIBOPUSFILE_CSOURCES = \
48 info.c \
49 internal.c \
50 opusfile.c \
51 stream.c \
52
53 LIBOPUSFILE_CHEADERS = \
54 internal.h \
55
56 OPUSFILE_EXAMPLE_CSOURCES = opusfile_example.c
57
58 SEEKING_EXAMPLE_CSOURCES = seeking_example.c
59
60 FOO_CSOURCES = tests/foo.c
61
62 # Create object file list.
63 LIBOPUSFILE_OBJS:= ${LIBOPUSFILE_CSOURCES:%.c=${WORKDIR}/%.o}
64 LIBOPUSFILE_ASMS:= ${LIBOPUSFILE_OBJS:%.o=%.s}
65 LIBOPUSFILE_DEPS:= ${LIBOPUSFILE_OBJS:%.o=%.d}
66 OPUSFILE_EXAMPLE_OBJS:= ${OPUSFILE_EXAMPLE_CSOURCES:%.c=${WORKDIR}/%.o}
67 SEEKING_EXAMPLE_OBJS:= ${SEEKING_EXAMPLE_CSOURCES:%.c=${WORKDIR}/%.o}
68 #TODO: tests
69 FOO_OBJS:= ${FOO_CSOURCES:%.c=${WORKDIR}/%.o}
70 ALL_OBJS:= \
71  ${LIBOPUSFILE_OBJS} \
72  ${OPUSFILE_EXAMPLE_OBJS} \
73  ${SEEKING_EXAMPLE_OBJS} \
74
75 #TODO: tests
76 # ${FOO_OBJS}
77
78 # Create the dependency file list
79 ALL_DEPS:= ${ALL_OBJS:%.o=%.d}
80 # Prepend source path to file names.
81 LIBOPUSFILE_CSOURCES:= ${LIBOPUSFILE_CSOURCES:%=${LIBSRCDIR}/%}
82 LIBOPUSFILE_CHEADERS:= ${LIBOPUSFILE_CHEADERS:%=${LIBSRCDIR}/%}
83 OPUSFILE_EXAMPLE_CSOURCES:= ${OPUSFILE_EXAMPLE_CSOURCES:%=${BINSRCDIR}/%}
84 SEEKING_EXAMPLE_CSOURCES:= ${SEEKING_EXAMPLE_CSOURCES:%=${BINSRCDIR}/%}
85 #TODO: tests
86 FOO_CSOURCES:= ${FOO_CSOURCES:%=${TESTSRCDIR}/%}
87 ALL_CSOURCES:= \
88  ${LIBOPUSFILE_CSOURCES} \
89  ${OPUSFILE_EXAMPLE_CSOURCES} \
90  ${SEEKING_EXAMPLE_CSOURCES} \
91
92 #TODO: tests
93 # ${FOO_CSOURCES} \
94 # Prepand target path to file names.
95 LIBOPUSFILE_TARGET:= ${TARGETLIBDIR}/${LIBOPUSFILE_TARGET}
96 OPUSFILE_EXAMPLE_TARGET:= ${TARGETBINDIR}/${OPUSFILE_EXAMPLE_TARGET}
97 SEEKING_EXAMPLE_TARGET:= ${TARGETBINDIR}/${SEEKING_EXAMPLE_TARGET}
98 # Prepend test path to file names.
99 #TODO: tests
100 FOO_TARGET:= ${TESTBINDIR}/${FOO_TARGET}
101 # Complete set of targets
102 ALL_TARGETS:= \
103  ${LIBOPUSFILE_TARGET} \
104  ${OPUSFILE_EXAMPLE_TARGET} \
105  ${SEEKING_EXAMPLE_TARGET} \
106
107 #TODO: tests
108 # ${FOO_TARGET} \
109
110 # Targets:
111 # Everything (default)
112 all: ${ALL_TARGETS}
113
114 # libopusfile
115 ${LIBOPUSFILE_TARGET}: ${LIBOPUSFILE_OBJS}
116         mkdir -p ${TARGETLIBDIR}
117         ar cqs $@ ${LIBOPUSFILE_OBJS}
118
119 # opusfile_example
120 ${OPUSFILE_EXAMPLE_TARGET}: ${OPUSFILE_EXAMPLE_OBJS} ${LIBOPUSFILE_TARGET}
121         mkdir -p ${TARGETBINDIR}
122         ${CC} ${CFLAGS} ${OPUSFILE_EXAMPLE_OBJS} ${LIBOPUSFILE_TARGET} ${LIBS} \
123          -o $@
124
125 # seeking_example
126 ${SEEKING_EXAMPLE_TARGET}: ${SEEKING_EXAMPLE_OBJS} ${LIBOPUSFILE_TARGET}
127         mkdir -p ${TARGETBINDIR}
128         ${CC} ${CFLAGS} ${SEEKING_EXAMPLE_OBJS} ${LIBOPUSFILE_TARGET} ${LIBS} \
129          -o $@
130
131 #TODO: tests
132 # foo
133 #${FOO_TARGET}: ${FOO_OBJS}
134 #       mkdir -p ${TESTBINDIR}
135 #       ${CC} ${CFLAGS} ${FOO_OBJS} ${FOO_LIBS} -o $@
136
137 # Assembly listing
138 ALL_ASM := ${ALL_OBJS:%.o=%.s}
139 asm: ${ALL_ASM}
140
141 # Check that build is complete.
142 check: all
143 #TODO: tests
144 #       ${FOO_TARGET}
145
146 # Remove all targets.
147 clean:
148         ${RM} ${ALL_ASM} ${ALL_OBJS} ${ALL_DEPS}
149         ${RM} ${ALL_TARGETS}
150         -rmdir ${TESTBINDIR} ${WORKDIR}/tests ${WORKDIR}/x86 ${WORKDIR}
151
152 # Make everything depend on changes in the Makefile
153 ${ALL_ASM} ${ALL_OBJS} ${ALL_DEPS} ${ALL_TARGETS} : Makefile
154
155 # Specify which targets are phony for GNU make
156 .PHONY : all clean check
157
158 # Rules
159 ${WORKDIR}/%.d: ${LIBSRCDIR}/%.c
160         mkdir -p ${dir $@}
161         ${MAKEDEPEND} ${CINCLUDE} ${CFLAGS} $< -MT ${@:%.d=%.o} > $@
162         ${MAKEDEPEND} ${CINCLUDE} ${CFLAGS} $< -MT ${@:%.d=%.s} >> $@
163         ${MAKEDEPEND} ${CINCLUDE} ${CFLAGS} $< -MT $@ >> $@
164 ${WORKDIR}/%.s: ${LIBSRCDIR}/%.c
165         mkdir -p ${dir $@}
166         ${CC} ${CINCLUDE} ${CFLAGS} -S -o $@ $<
167 ${WORKDIR}/%.o: ${LIBSRCDIR}/%.c
168         mkdir -p ${dir $@}
169         ${CC} ${CINCLUDE} ${CFLAGS} -c -o $@ $<
170
171 ${WORKDIR}/%.d : ${BINSRCDIR}/%.c
172         mkdir -p ${dir $@}
173         ${MAKEDEPEND} ${CINCLUDE} ${CFLAGS} $< -MT ${@:%.d=%.o} > $@
174 ${WORKDIR}/%.s : ${BINSRCDIR}/%.c ${WORKDIR}/%.o
175         mkdir -p ${dir $@}
176         ${CC} ${CINCLUDE} ${CFLAGS} -S -o $@ $<
177 ${WORKDIR}/%.o : ${BINSRCDIR}/%.c
178         mkdir -p ${dir $@}
179         ${CC} ${CINCLUDE} ${CFLAGS} -c -o $@ $<
180
181 # Include header file dependencies
182 include ${ALL_DEPS}