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