blob: 4fe0cdae35689388d50faa47bc8bafd42b7dbc9a
1 | MAIN_MAKEFILE=1 |
2 | include config.mak |
3 | |
4 | vpath %.c $(SRC_PATH) |
5 | vpath %.cpp $(SRC_PATH) |
6 | vpath %.h $(SRC_PATH) |
7 | vpath %.inc $(SRC_PATH) |
8 | vpath %.m $(SRC_PATH) |
9 | vpath %.S $(SRC_PATH) |
10 | vpath %.asm $(SRC_PATH) |
11 | vpath %.rc $(SRC_PATH) |
12 | vpath %.v $(SRC_PATH) |
13 | vpath %.texi $(SRC_PATH) |
14 | vpath %/fate_config.sh.template $(SRC_PATH) |
15 | |
16 | AVPROGS-$(CONFIG_FFMPEG) += ffmpeg |
17 | AVPROGS-$(CONFIG_FFPLAY) += ffplay |
18 | AVPROGS-$(CONFIG_FFPROBE) += ffprobe |
19 | AVPROGS-$(CONFIG_FFSERVER) += ffserver |
20 | |
21 | AVPROGS := $(AVPROGS-yes:%=%$(PROGSSUF)$(EXESUF)) |
22 | INSTPROGS = $(AVPROGS-yes:%=%$(PROGSSUF)$(EXESUF)) |
23 | PROGS += $(AVPROGS) |
24 | |
25 | AVBASENAMES = ffmpeg ffplay ffprobe ffserver |
26 | ALLAVPROGS = $(AVBASENAMES:%=%$(PROGSSUF)$(EXESUF)) |
27 | ALLAVPROGS_G = $(AVBASENAMES:%=%$(PROGSSUF)_g$(EXESUF)) |
28 | |
29 | $(foreach prog,$(AVBASENAMES),$(eval OBJS-$(prog) += cmdutils.o)) |
30 | $(foreach prog,$(AVBASENAMES),$(eval OBJS-$(prog)-$(CONFIG_OPENCL) += cmdutils_opencl.o)) |
31 | |
32 | OBJS-ffmpeg += ffmpeg_opt.o ffmpeg_filter.o |
33 | OBJS-ffmpeg-$(CONFIG_VIDEOTOOLBOX) += ffmpeg_videotoolbox.o |
34 | OBJS-ffmpeg-$(CONFIG_LIBMFX) += ffmpeg_qsv.o |
35 | OBJS-ffmpeg-$(CONFIG_VAAPI) += ffmpeg_vaapi.o |
36 | ifndef CONFIG_VIDEOTOOLBOX |
37 | OBJS-ffmpeg-$(CONFIG_VDA) += ffmpeg_videotoolbox.o |
38 | endif |
39 | OBJS-ffmpeg-$(CONFIG_CUVID) += ffmpeg_cuvid.o |
40 | OBJS-ffmpeg-$(HAVE_DXVA2_LIB) += ffmpeg_dxva2.o |
41 | OBJS-ffmpeg-$(HAVE_VDPAU_X11) += ffmpeg_vdpau.o |
42 | OBJS-ffserver += ffserver_config.o |
43 | |
44 | TESTTOOLS = audiogen videogen rotozoom tiny_psnr tiny_ssim base64 audiomatch |
45 | HOSTPROGS := $(TESTTOOLS:%=tests/%) doc/print_options |
46 | TOOLS = qt-faststart trasher uncoded_frame |
47 | TOOLS-$(CONFIG_ZLIB) += cws2fws |
48 | |
49 | # $(FFLIBS-yes) needs to be in linking order |
50 | FFLIBS-$(CONFIG_AVDEVICE) += avdevice |
51 | FFLIBS-$(CONFIG_AVFILTER) += avfilter |
52 | FFLIBS-$(CONFIG_AVFORMAT) += avformat |
53 | FFLIBS-$(CONFIG_AVCODEC) += avcodec |
54 | FFLIBS-$(CONFIG_AVRESAMPLE) += avresample |
55 | FFLIBS-$(CONFIG_POSTPROC) += postproc |
56 | FFLIBS-$(CONFIG_SWRESAMPLE) += swresample |
57 | FFLIBS-$(CONFIG_SWSCALE) += swscale |
58 | |
59 | FFLIBS := avutil |
60 | |
61 | DATA_FILES := $(wildcard $(SRC_PATH)/presets/*.ffpreset) $(SRC_PATH)/doc/ffprobe.xsd |
62 | EXAMPLES_FILES := $(wildcard $(SRC_PATH)/doc/examples/*.c) $(SRC_PATH)/doc/examples/Makefile $(SRC_PATH)/doc/examples/README |
63 | |
64 | SKIPHEADERS = cmdutils_common_opts.h \ |
65 | compat/w32pthreads.h |
66 | |
67 | include $(SRC_PATH)/common.mak |
68 | |
69 | FF_EXTRALIBS := $(FFEXTRALIBS) |
70 | FF_DEP_LIBS := $(DEP_LIBS) |
71 | FF_STATIC_DEP_LIBS := $(STATIC_DEP_LIBS) |
72 | |
73 | all: $(AVPROGS) |
74 | |
75 | $(TOOLS): %$(EXESUF): %.o $(EXEOBJS) |
76 | $(LD) $(LDFLAGS) $(LDEXEFLAGS) $(LD_O) $^ $(ELIBS) |
77 | |
78 | tools/cws2fws$(EXESUF): ELIBS = $(ZLIB) |
79 | tools/uncoded_frame$(EXESUF): $(FF_DEP_LIBS) |
80 | tools/uncoded_frame$(EXESUF): ELIBS = $(FF_EXTRALIBS) |
81 | |
82 | CONFIGURABLE_COMPONENTS = \ |
83 | $(wildcard $(FFLIBS:%=$(SRC_PATH)/lib%/all*.c)) \ |
84 | $(SRC_PATH)/libavcodec/bitstream_filters.c \ |
85 | $(SRC_PATH)/libavformat/protocols.c \ |
86 | |
87 | config.h: .config |
88 | .config: $(CONFIGURABLE_COMPONENTS) |
89 | @-tput bold 2>/dev/null |
90 | @-printf '\nWARNING: $(?F) newer than config.h, rerun configure\n\n' |
91 | @-tput sgr0 2>/dev/null |
92 | |
93 | SUBDIR_VARS := CLEANFILES EXAMPLES FFLIBS HOSTPROGS TESTPROGS TOOLS \ |
94 | HEADERS ARCH_HEADERS BUILT_HEADERS SKIPHEADERS \ |
95 | ARMV5TE-OBJS ARMV6-OBJS ARMV8-OBJS VFP-OBJS NEON-OBJS \ |
96 | ALTIVEC-OBJS VSX-OBJS MMX-OBJS YASM-OBJS \ |
97 | MIPSFPU-OBJS MIPSDSPR2-OBJS MIPSDSP-OBJS MSA-OBJS \ |
98 | MMI-OBJS OBJS SLIBOBJS HOSTOBJS TESTOBJS |
99 | |
100 | define RESET |
101 | $(1) := |
102 | $(1)-yes := |
103 | endef |
104 | |
105 | define DOSUBDIR |
106 | $(foreach V,$(SUBDIR_VARS),$(eval $(call RESET,$(V)))) |
107 | SUBDIR := $(1)/ |
108 | include $(SRC_PATH)/$(1)/Makefile |
109 | -include $(SRC_PATH)/$(1)/$(ARCH)/Makefile |
110 | -include $(SRC_PATH)/$(1)/$(INTRINSICS)/Makefile |
111 | include $(SRC_PATH)/library.mak |
112 | endef |
113 | |
114 | $(foreach D,$(FFLIBS),$(eval $(call DOSUBDIR,lib$(D)))) |
115 | |
116 | include $(SRC_PATH)/doc/Makefile |
117 | |
118 | define DOPROG |
119 | OBJS-$(1) += $(1).o $(EXEOBJS) $(OBJS-$(1)-yes) |
120 | $(1)$(PROGSSUF)_g$(EXESUF): $$(OBJS-$(1)) |
121 | $$(OBJS-$(1)): CFLAGS += $(CFLAGS-$(1)) |
122 | $(1)$(PROGSSUF)_g$(EXESUF): LDFLAGS += $(LDFLAGS-$(1)) |
123 | $(1)$(PROGSSUF)_g$(EXESUF): FF_EXTRALIBS += $(LIBS-$(1)) |
124 | -include $$(OBJS-$(1):.o=.d) |
125 | endef |
126 | |
127 | $(foreach P,$(PROGS),$(eval $(call DOPROG,$(P:$(PROGSSUF)$(EXESUF)=)))) |
128 | |
129 | ffprobe.o cmdutils.o libavcodec/utils.o libavformat/utils.o libavdevice/avdevice.o libavfilter/avfilter.o libavutil/utils.o libpostproc/postprocess.o libswresample/swresample.o libswscale/utils.o : libavutil/ffversion.h |
130 | |
131 | $(PROGS): %$(PROGSSUF)$(EXESUF): %$(PROGSSUF)_g$(EXESUF) |
132 | $(CP) $< $@ |
133 | $(STRIP) $@ |
134 | |
135 | %$(PROGSSUF)_g$(EXESUF): %.o $(FF_DEP_LIBS) |
136 | $(LD) $(LDFLAGS) $(LDEXEFLAGS) $(LD_O) $(OBJS-$*) $(FF_EXTRALIBS) |
137 | |
138 | OBJDIRS += tools |
139 | |
140 | -include $(wildcard tools/*.d) |
141 | |
142 | VERSION_SH = $(SRC_PATH)/version.sh |
143 | GIT_LOG = $(SRC_PATH)/.git/logs/HEAD |
144 | |
145 | .version: $(wildcard $(GIT_LOG)) $(VERSION_SH) config.mak |
146 | .version: M=@ |
147 | |
148 | libavutil/ffversion.h .version: |
149 | $(M)$(VERSION_SH) $(SRC_PATH) libavutil/ffversion.h $(EXTRA_VERSION) |
150 | $(Q)touch .version |
151 | |
152 | # force version.sh to run whenever version might have changed |
153 | -include .version |
154 | |
155 | ifdef AVPROGS |
156 | install: install-progs install-data |
157 | endif |
158 | |
159 | install: install-libs install-headers |
160 | |
161 | install-libs: install-libs-yes |
162 | |
163 | install-progs-yes: |
164 | install-progs-$(CONFIG_SHARED): install-libs |
165 | |
166 | install-progs: install-progs-yes $(AVPROGS) |
167 | $(Q)mkdir -p "$(BINDIR)" |
168 | $(INSTALL) -c -m 755 $(INSTPROGS) "$(BINDIR)" |
169 | |
170 | install-data: $(DATA_FILES) $(EXAMPLES_FILES) |
171 | $(Q)mkdir -p "$(DATADIR)/examples" |
172 | $(INSTALL) -m 644 $(DATA_FILES) "$(DATADIR)" |
173 | $(INSTALL) -m 644 $(EXAMPLES_FILES) "$(DATADIR)/examples" |
174 | |
175 | uninstall: uninstall-libs uninstall-headers uninstall-progs uninstall-data |
176 | |
177 | uninstall-progs: |
178 | $(RM) $(addprefix "$(BINDIR)/", $(ALLAVPROGS)) |
179 | |
180 | uninstall-data: |
181 | $(RM) -r "$(DATADIR)" |
182 | |
183 | clean:: |
184 | $(RM) $(ALLAVPROGS) $(ALLAVPROGS_G) |
185 | $(RM) $(CLEANSUFFIXES) |
186 | $(RM) $(CLEANSUFFIXES:%=tools/%) |
187 | $(RM) $(CLEANSUFFIXES:%=compat/msvcrt/%) |
188 | $(RM) $(CLEANSUFFIXES:%=compat/atomics/pthread/%) |
189 | $(RM) $(CLEANSUFFIXES:%=compat/%) |
190 | $(RM) -r coverage-html |
191 | $(RM) -rf coverage.info coverage.info.in lcov |
192 | |
193 | distclean:: |
194 | $(RM) $(DISTCLEANSUFFIXES) |
195 | $(RM) config.* .config libavutil/avconfig.h .version mapfile avversion.h version.h libavutil/ffversion.h libavcodec/codec_names.h libavcodec/bsf_list.c libavformat/protocol_list.c |
196 | ifeq ($(SRC_LINK),src) |
197 | $(RM) src |
198 | endif |
199 | $(RM) -rf doc/examples/pc-uninstalled |
200 | |
201 | config: |
202 | $(SRC_PATH)/configure $(value FFMPEG_CONFIGURATION) |
203 | |
204 | check: all alltools examples testprogs fate |
205 | |
206 | include $(SRC_PATH)/tests/Makefile |
207 | |
208 | $(sort $(OBJDIRS)): |
209 | $(Q)mkdir -p $@ |
210 | |
211 | # Dummy rule to stop make trying to rebuild removed or renamed headers |
212 | %.h: |
213 | @: |
214 | |
215 | # Disable suffix rules. Most of the builtin rules are suffix rules, |
216 | # so this saves some time on slow systems. |
217 | .SUFFIXES: |
218 | |
219 | .PHONY: all all-yes alltools check *clean config install* |
220 | .PHONY: testprogs uninstall* |
221 |