ffmpeg / Makefile @ bc604722
History | View | Annotate | Download (8.55 KB)
1 |
include config.mak |
---|---|
2 |
|
3 |
SRC_DIR = $(SRC_PATH_BARE) |
4 |
|
5 |
vpath %.texi $(SRC_PATH_BARE) |
6 |
|
7 |
PROGS-$(CONFIG_FFMPEG) += ffmpeg |
8 |
PROGS-$(CONFIG_FFPLAY) += ffplay |
9 |
PROGS-$(CONFIG_FFPROBE) += ffprobe |
10 |
PROGS-$(CONFIG_FFSERVER) += ffserver |
11 |
|
12 |
PROGS := $(PROGS-yes:%=%$(EXESUF)) |
13 |
PROGS_G = $(PROGS-yes:%=%_g$(EXESUF)) |
14 |
OBJS = $(PROGS-yes:%=%.o) cmdutils.o |
15 |
MANPAGES = $(PROGS-yes:%=doc/%.1) |
16 |
PODPAGES = $(PROGS-yes:%=doc/%.pod) |
17 |
HTMLPAGES = $(PROGS-yes:%=doc/%.html) |
18 |
TOOLS = $(addprefix tools/, $(addsuffix $(EXESUF), cws2fws graph2dot lavfi-showfiltfmts pktdumper probetest qt-faststart trasher)) |
19 |
TESTTOOLS = audiogen videogen rotozoom tiny_psnr base64 |
20 |
HOSTPROGS := $(TESTTOOLS:%=tests/%) |
21 |
|
22 |
BASENAMES = ffmpeg ffplay ffprobe ffserver |
23 |
ALLPROGS = $(BASENAMES:%=%$(EXESUF)) |
24 |
ALLPROGS_G = $(BASENAMES:%=%_g$(EXESUF)) |
25 |
ALLMANPAGES = $(BASENAMES:%=%.1) |
26 |
|
27 |
FFLIBS-$(CONFIG_AVDEVICE) += avdevice |
28 |
FFLIBS-$(CONFIG_AVFILTER) += avfilter |
29 |
FFLIBS-$(CONFIG_AVFORMAT) += avformat |
30 |
FFLIBS-$(CONFIG_AVCODEC) += avcodec |
31 |
FFLIBS-$(CONFIG_POSTPROC) += postproc |
32 |
FFLIBS-$(CONFIG_SWSCALE) += swscale |
33 |
|
34 |
FFLIBS := avutil |
35 |
|
36 |
DATA_FILES := $(wildcard $(SRC_DIR)/ffpresets/*.ffpreset) |
37 |
|
38 |
SKIPHEADERS = cmdutils_common_opts.h |
39 |
|
40 |
include common.mak |
41 |
|
42 |
FF_LDFLAGS := $(FFLDFLAGS) |
43 |
FF_EXTRALIBS := $(FFEXTRALIBS) |
44 |
FF_DEP_LIBS := $(DEP_LIBS) |
45 |
|
46 |
ALL_TARGETS-$(CONFIG_DOC) += documentation |
47 |
|
48 |
ifdef PROGS |
49 |
INSTALL_TARGETS-yes += install-progs install-data |
50 |
INSTALL_TARGETS-$(CONFIG_DOC) += install-man |
51 |
endif |
52 |
INSTALL_PROGS_TARGETS-$(CONFIG_SHARED) = install-libs |
53 |
|
54 |
all: $(FF_DEP_LIBS) $(PROGS) $(ALL_TARGETS-yes) |
55 |
|
56 |
$(PROGS): %$(EXESUF): %_g$(EXESUF) |
57 |
$(CP) $< $@ |
58 |
$(STRIP) $@ |
59 |
|
60 |
config.h: .config |
61 |
.config: $(wildcard $(FFLIBS:%=$(SRC_DIR)/lib%/all*.c)) |
62 |
@-tput bold 2>/dev/null |
63 |
@-printf '\nWARNING: $(?F) newer than config.h, rerun configure\n\n' |
64 |
@-tput sgr0 2>/dev/null |
65 |
|
66 |
SUBDIR_VARS := OBJS FFLIBS CLEANFILES DIRS TESTPROGS EXAMPLES SKIPHEADERS \ |
67 |
ALTIVEC-OBJS MMX-OBJS NEON-OBJS X86-OBJS YASM-OBJS-FFT YASM-OBJS \ |
68 |
HOSTPROGS BUILT_HEADERS TESTOBJS ARCH_HEADERS ARMV6-OBJS |
69 |
|
70 |
define RESET |
71 |
$(1) := |
72 |
$(1)-yes := |
73 |
endef |
74 |
|
75 |
define DOSUBDIR |
76 |
$(foreach V,$(SUBDIR_VARS),$(eval $(call RESET,$(V)))) |
77 |
SUBDIR := $(1)/ |
78 |
include $(1)/Makefile |
79 |
endef |
80 |
|
81 |
$(foreach D,$(FFLIBS),$(eval $(call DOSUBDIR,lib$(D)))) |
82 |
|
83 |
ffplay_g$(EXESUF): FF_EXTRALIBS += $(SDL_LIBS) |
84 |
ffserver_g$(EXESUF): FF_LDFLAGS += $(FFSERVERLDFLAGS) |
85 |
|
86 |
%_g$(EXESUF): %.o cmdutils.o $(FF_DEP_LIBS) |
87 |
$(LD) $(FF_LDFLAGS) -o $@ $< cmdutils.o $(FF_EXTRALIBS) |
88 |
|
89 |
tools/%$(EXESUF): tools/%.o |
90 |
$(LD) $(FF_LDFLAGS) -o $@ $< $(FF_EXTRALIBS) |
91 |
|
92 |
tools/%.o: tools/%.c |
93 |
$(CC) $(CPPFLAGS) $(CFLAGS) -c $(CC_O) $< |
94 |
|
95 |
-include $(wildcard tools/*.d) |
96 |
|
97 |
ffplay.o: CFLAGS += $(SDL_CFLAGS) |
98 |
|
99 |
VERSION_SH = $(SRC_PATH_BARE)/version.sh |
100 |
GIT_LOG = $(SRC_PATH_BARE)/.git/logs/HEAD |
101 |
|
102 |
.version: $(wildcard $(GIT_LOG)) $(VERSION_SH) config.mak |
103 |
.version: M=@ |
104 |
|
105 |
version.h .version: |
106 |
$(M)$(VERSION_SH) $(SRC_PATH) version.h $(EXTRA_VERSION) |
107 |
$(Q)touch .version |
108 |
|
109 |
# force version.sh to run whenever version might have changed |
110 |
-include .version |
111 |
|
112 |
alltools: $(TOOLS) |
113 |
|
114 |
DOCS = $(addprefix doc/, developer.html faq.html general.html libavfilter.html) $(HTMLPAGES) $(MANPAGES) $(PODPAGES) |
115 |
|
116 |
documentation: $(DOCS) |
117 |
|
118 |
-include $(wildcard $(DOCS:%=%.d)) |
119 |
|
120 |
TEXIDEP = awk '/^@include/ { printf "$@: $(@D)/%s\n", $$2 }' <$< >$(@:%=%.d) |
121 |
|
122 |
doc/%.html: TAG = HTML |
123 |
doc/%.html: doc/%.texi $(SRC_PATH_BARE)/doc/t2h.init |
124 |
$(Q)$(TEXIDEP) |
125 |
$(M)cd doc && texi2html -monolithic --init-file $(SRC_PATH_BARE)/doc/t2h.init $(<:doc/%=%) |
126 |
|
127 |
doc/%.pod: TAG = POD |
128 |
doc/%.pod: doc/%.texi |
129 |
$(Q)$(TEXIDEP) |
130 |
$(M)doc/texi2pod.pl $< $@ |
131 |
|
132 |
doc/%.1: TAG = MAN |
133 |
doc/%.1: doc/%.pod |
134 |
$(M)pod2man --section=1 --center=" " --release=" " $< > $@ |
135 |
|
136 |
install: $(INSTALL_TARGETS-yes) |
137 |
|
138 |
install-progs: $(PROGS) $(INSTALL_PROGS_TARGETS-yes) |
139 |
$(Q)mkdir -p "$(BINDIR)" |
140 |
$(INSTALL) -c -m 755 $(PROGS) "$(BINDIR)" |
141 |
|
142 |
install-data: $(DATA_FILES) |
143 |
$(Q)mkdir -p "$(DATADIR)" |
144 |
$(INSTALL) -m 644 $(DATA_FILES) "$(DATADIR)" |
145 |
|
146 |
install-man: $(MANPAGES) |
147 |
$(Q)mkdir -p "$(MANDIR)/man1" |
148 |
$(INSTALL) -m 644 $(MANPAGES) "$(MANDIR)/man1" |
149 |
|
150 |
uninstall: uninstall-progs uninstall-data uninstall-man |
151 |
|
152 |
uninstall-progs: |
153 |
$(RM) $(addprefix "$(BINDIR)/", $(ALLPROGS)) |
154 |
|
155 |
uninstall-data: |
156 |
$(RM) -r "$(DATADIR)" |
157 |
|
158 |
uninstall-man: |
159 |
$(RM) $(addprefix "$(MANDIR)/man1/",$(ALLMANPAGES)) |
160 |
|
161 |
testclean: |
162 |
$(RM) -r tests/vsynth1 tests/vsynth2 tests/data |
163 |
$(RM) $(addprefix tests/,$(CLEANSUFFIXES)) |
164 |
$(RM) tests/seek_test$(EXESUF) tests/seek_test.o |
165 |
$(RM) $(TESTTOOLS:%=tests/%$(HOSTEXESUF)) |
166 |
|
167 |
clean:: testclean |
168 |
$(RM) $(ALLPROGS) $(ALLPROGS_G) |
169 |
$(RM) $(CLEANSUFFIXES) |
170 |
$(RM) doc/*.html doc/*.pod doc/*.1 |
171 |
$(RM) $(TOOLS) |
172 |
$(RM) $(CLEANSUFFIXES:%=tools/%) |
173 |
|
174 |
distclean:: |
175 |
$(RM) $(DISTCLEANSUFFIXES) |
176 |
$(RM) version.h config.* libavutil/avconfig.h |
177 |
|
178 |
config: |
179 |
$(SRC_PATH)/configure $(value FFMPEG_CONFIGURATION) |
180 |
|
181 |
# regression tests |
182 |
|
183 |
check: test |
184 |
|
185 |
fulltest test: codectest lavftest lavfitest seektest |
186 |
|
187 |
FFSERVER_REFFILE = $(SRC_PATH)/tests/ffserver.regression.ref |
188 |
SEEK_REFFILE = $(SRC_PATH)/tests/seek.regression.ref |
189 |
|
190 |
codectest: fate-codec |
191 |
lavftest: fate-lavf |
192 |
lavfitest: fate-lavfi |
193 |
seektest: fate-seek |
194 |
|
195 |
AREF = tests/data/acodec.ref.wav |
196 |
VREF = tests/data/vsynth1.ref.yuv |
197 |
REFS = $(AREF) $(VREF) |
198 |
|
199 |
$(REFS): TAG = GEN |
200 |
|
201 |
$(VREF): ffmpeg$(EXESUF) tests/vsynth1/00.pgm tests/vsynth2/00.pgm |
202 |
$(M)$(SRC_PATH)/tests/codec-regression.sh vref vsynth1 tests/vsynth1 "$(TARGET_EXEC)" "$(TARGET_PATH)" |
203 |
$(Q)$(SRC_PATH)/tests/codec-regression.sh vref vsynth2 tests/vsynth2 "$(TARGET_EXEC)" "$(TARGET_PATH)" |
204 |
|
205 |
$(AREF): ffmpeg$(EXESUF) tests/data/asynth1.sw |
206 |
$(M)$(SRC_PATH)/tests/codec-regression.sh aref acodec tests/acodec "$(TARGET_EXEC)" "$(TARGET_PATH)" |
207 |
|
208 |
ffservertest: ffserver$(EXESUF) tests/vsynth1/00.pgm tests/data/asynth1.sw |
209 |
@echo |
210 |
@echo "Unfortunately ffserver is broken and therefore its regression" |
211 |
@echo "test fails randomly. Treat the results accordingly." |
212 |
@echo |
213 |
$(SRC_PATH)/tests/ffserver-regression.sh $(FFSERVER_REFFILE) $(SRC_PATH)/tests/ffserver.conf |
214 |
|
215 |
tests/vsynth1/00.pgm: tests/videogen$(HOSTEXESUF) |
216 |
@mkdir -p tests/vsynth1 |
217 |
$(M)$(BUILD_ROOT)/$< 'tests/vsynth1/' |
218 |
|
219 |
tests/vsynth2/00.pgm: tests/rotozoom$(HOSTEXESUF) |
220 |
@mkdir -p tests/vsynth2 |
221 |
$(M)$(BUILD_ROOT)/$< 'tests/vsynth2/' $(SRC_PATH)/tests/lena.pnm |
222 |
|
223 |
tests/data/asynth1.sw: tests/audiogen$(HOSTEXESUF) |
224 |
@mkdir -p tests/data |
225 |
$(M)$(BUILD_ROOT)/$< $@ |
226 |
|
227 |
tests/data/asynth1.sw tests/vsynth%/00.pgm: TAG = GEN |
228 |
|
229 |
tests/seek_test$(EXESUF): tests/seek_test.o $(FF_DEP_LIBS) |
230 |
$(LD) $(FF_LDFLAGS) -o $@ $< $(FF_EXTRALIBS) |
231 |
|
232 |
tools/lavfi-showfiltfmts$(EXESUF): tools/lavfi-showfiltfmts.o $(FF_DEP_LIBS) |
233 |
$(LD) $(FF_LDFLAGS) -o $@ $< $(FF_EXTRALIBS) |
234 |
|
235 |
include $(SRC_PATH_BARE)/tests/fate.mak |
236 |
include $(SRC_PATH_BARE)/tests/fate2.mak |
237 |
|
238 |
include $(SRC_PATH_BARE)/tests/fate/aac.mak |
239 |
include $(SRC_PATH_BARE)/tests/fate/als.mak |
240 |
include $(SRC_PATH_BARE)/tests/fate/fft.mak |
241 |
include $(SRC_PATH_BARE)/tests/fate/h264.mak |
242 |
include $(SRC_PATH_BARE)/tests/fate/mp3.mak |
243 |
include $(SRC_PATH_BARE)/tests/fate/vorbis.mak |
244 |
include $(SRC_PATH_BARE)/tests/fate/vp8.mak |
245 |
|
246 |
FATE_ACODEC = $(ACODEC_TESTS:%=fate-acodec-%) |
247 |
FATE_VSYNTH1 = $(VCODEC_TESTS:%=fate-vsynth1-%) |
248 |
FATE_VSYNTH2 = $(VCODEC_TESTS:%=fate-vsynth2-%) |
249 |
FATE_VCODEC = $(FATE_VSYNTH1) $(FATE_VSYNTH2) |
250 |
FATE_LAVF = $(LAVF_TESTS:%=fate-lavf-%) |
251 |
FATE_LAVFI = $(LAVFI_TESTS:%=fate-lavfi-%) |
252 |
FATE_SEEK = $(SEEK_TESTS:seek_%=fate-seek-%) |
253 |
|
254 |
FATE = $(FATE_ACODEC) \ |
255 |
$(FATE_VCODEC) \ |
256 |
$(FATE_LAVF) \ |
257 |
$(FATE_LAVFI) \ |
258 |
$(FATE_SEEK) \ |
259 |
|
260 |
$(FATE_ACODEC): $(AREF) |
261 |
$(FATE_VCODEC): $(VREF) |
262 |
$(FATE_LAVF): $(REFS) |
263 |
$(FATE_LAVFI): $(REFS) tools/lavfi-showfiltfmts$(EXESUF) |
264 |
$(FATE_SEEK): fate-codec fate-lavf tests/seek_test$(EXESUF) |
265 |
|
266 |
$(FATE_ACODEC): CMD = codectest acodec |
267 |
$(FATE_VSYNTH1): CMD = codectest vsynth1 |
268 |
$(FATE_VSYNTH2): CMD = codectest vsynth2 |
269 |
$(FATE_LAVF): CMD = lavftest |
270 |
$(FATE_LAVFI): CMD = lavfitest |
271 |
$(FATE_SEEK): CMD = seektest |
272 |
|
273 |
fate-codec: fate-acodec fate-vcodec |
274 |
fate-acodec: $(FATE_ACODEC) |
275 |
fate-vcodec: $(FATE_VCODEC) |
276 |
fate-lavf: $(FATE_LAVF) |
277 |
fate-lavfi: $(FATE_LAVFI) |
278 |
fate-seek: $(FATE_SEEK) |
279 |
|
280 |
ifdef SAMPLES |
281 |
FATE += $(FATE_TESTS) |
282 |
else |
283 |
$(FATE_TESTS): |
284 |
@echo "SAMPLES not specified, cannot run FATE" |
285 |
endif |
286 |
|
287 |
FATE_UTILS = base64 tiny_psnr |
288 |
|
289 |
fate: $(FATE) |
290 |
|
291 |
$(FATE): ffmpeg$(EXESUF) $(FATE_UTILS:%=tests/%$(HOSTEXESUF)) |
292 |
@echo "TEST $(@:fate-%=%)" |
293 |
$(Q)$(SRC_PATH)/tests/fate-run.sh $@ "$(SAMPLES)" "$(TARGET_EXEC)" "$(TARGET_PATH)" '$(CMD)' '$(CMP)' '$(REF)' '$(FUZZ)' '$(THREADS)' |
294 |
|
295 |
fate-list: |
296 |
@printf '%s\n' $(sort $(FATE)) |
297 |
|
298 |
.PHONY: documentation *test regtest-* alltools check config |