mirror of
https://git.videolan.org/git/ffmpeg.git
synced 2024-08-30 13:16:13 +02:00
![Christophe Gisquet](/assets/img/avatar_default.png)
The macro hell sometimes make it difficult to trace the source of an error, so it is easier to analyze the preprocessed output. This patch makes this automatical by specifying DBG=1 on the command line: a file ffmpeg/dir/file.asm gets preprocessed to builddir/dir/file.dbg.asm, which is then compiled. Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
163 lines
4.1 KiB
Makefile
163 lines
4.1 KiB
Makefile
#
|
|
# common bits used by all libraries
|
|
#
|
|
|
|
# first so "all" becomes default target
|
|
all: all-yes
|
|
|
|
DEFAULT_YASMD=.dbg
|
|
|
|
ifndef DBG
|
|
YASMD=
|
|
else
|
|
YASMD=$(DEFAULT_YASMD)
|
|
endif
|
|
|
|
ifndef SUBDIR
|
|
|
|
ifndef V
|
|
Q = @
|
|
ECHO = printf "$(1)\t%s\n" $(2)
|
|
BRIEF = CC CXX HOSTCC HOSTLD AS YASM AR LD STRIP CP WINDRES
|
|
SILENT = DEPCC DEPHOSTCC DEPAS DEPYASM RANLIB RM
|
|
|
|
MSG = $@
|
|
M = @$(call ECHO,$(TAG),$@);
|
|
$(foreach VAR,$(BRIEF), \
|
|
$(eval override $(VAR) = @$$(call ECHO,$(VAR),$$(MSG)); $($(VAR))))
|
|
$(foreach VAR,$(SILENT),$(eval override $(VAR) = @$($(VAR))))
|
|
$(eval INSTALL = @$(call ECHO,INSTALL,$$(^:$(SRC_DIR)/%=%)); $(INSTALL))
|
|
endif
|
|
|
|
ALLFFLIBS = avcodec avdevice avfilter avformat avresample avutil postproc swscale swresample
|
|
|
|
# NASM requires -I path terminated with /
|
|
IFLAGS := -I. -I$(SRC_PATH)/
|
|
CPPFLAGS := $(IFLAGS) $(CPPFLAGS)
|
|
CFLAGS += $(ECFLAGS)
|
|
CCFLAGS = $(CPPFLAGS) $(CFLAGS)
|
|
ASFLAGS := $(CPPFLAGS) $(ASFLAGS)
|
|
CXXFLAGS += $(CPPFLAGS) $(CFLAGS)
|
|
YASMFLAGS += $(IFLAGS:%=%/) -Pconfig.asm
|
|
|
|
HOSTCCFLAGS = $(IFLAGS) $(HOSTCPPFLAGS) $(HOSTCFLAGS)
|
|
LDFLAGS := $(ALLFFLIBS:%=$(LD_PATH)lib%) $(LDFLAGS)
|
|
|
|
define COMPILE
|
|
$(call $(1)DEP,$(1))
|
|
$($(1)) $($(1)FLAGS) $($(1)_DEPFLAGS) $($(1)_C) $($(1)_O) $<
|
|
endef
|
|
|
|
COMPILE_C = $(call COMPILE,CC)
|
|
COMPILE_CXX = $(call COMPILE,CXX)
|
|
COMPILE_S = $(call COMPILE,AS)
|
|
COMPILE_HOSTC = $(call COMPILE,HOSTCC)
|
|
|
|
%.o: %.c
|
|
$(COMPILE_C)
|
|
|
|
%.o: %.cpp
|
|
$(COMPILE_CXX)
|
|
|
|
%.o: %.m
|
|
$(COMPILE_C)
|
|
|
|
%.s: %.c
|
|
$(CC) $(CPPFLAGS) $(CFLAGS) -S -o $@ $<
|
|
|
|
%.o: %.S
|
|
$(COMPILE_S)
|
|
|
|
%_host.o: %.c
|
|
$(COMPILE_HOSTC)
|
|
|
|
%.o: %.rc
|
|
$(WINDRES) $(IFLAGS) --preprocessor "$(DEPWINDRES) -E -xc-header -DRC_INVOKED $(CC_DEPFLAGS)" -o $@ $<
|
|
|
|
%.i: %.c
|
|
$(CC) $(CCFLAGS) $(CC_E) $<
|
|
|
|
%.h.c:
|
|
$(Q)echo '#include "$*.h"' >$@
|
|
|
|
%.ver: %.v
|
|
$(Q)sed 's/$$MAJOR/$($(basename $(@F))_VERSION_MAJOR)/' $^ > $@
|
|
|
|
%.c %.h: TAG = GEN
|
|
|
|
# Dummy rule to stop make trying to rebuild removed or renamed headers
|
|
%.h:
|
|
@:
|
|
|
|
# Disable suffix rules. Most of the builtin rules are suffix rules,
|
|
# so this saves some time on slow systems.
|
|
.SUFFIXES:
|
|
|
|
# Do not delete intermediate files from chains of implicit rules
|
|
$(OBJS):
|
|
endif
|
|
|
|
include $(SRC_PATH)/arch.mak
|
|
|
|
OBJS += $(OBJS-yes)
|
|
SLIBOBJS += $(SLIBOBJS-yes)
|
|
FFLIBS := $($(NAME)_FFLIBS) $(FFLIBS-yes) $(FFLIBS)
|
|
TESTPROGS += $(TESTPROGS-yes)
|
|
|
|
LDLIBS = $(FFLIBS:%=%$(BUILDSUF))
|
|
FFEXTRALIBS := $(LDLIBS:%=$(LD_LIB)) $(EXTRALIBS)
|
|
|
|
OBJS := $(sort $(OBJS:%=$(SUBDIR)%))
|
|
SLIBOBJS := $(sort $(SLIBOBJS:%=$(SUBDIR)%))
|
|
TESTOBJS := $(TESTOBJS:%=$(SUBDIR)%) $(TESTPROGS:%=$(SUBDIR)%-test.o)
|
|
TESTPROGS := $(TESTPROGS:%=$(SUBDIR)%-test$(EXESUF))
|
|
HOSTOBJS := $(HOSTPROGS:%=$(SUBDIR)%.o)
|
|
HOSTPROGS := $(HOSTPROGS:%=$(SUBDIR)%$(HOSTEXESUF))
|
|
TOOLS += $(TOOLS-yes)
|
|
TOOLOBJS := $(TOOLS:%=tools/%.o)
|
|
TOOLS := $(TOOLS:%=tools/%$(EXESUF))
|
|
HEADERS += $(HEADERS-yes)
|
|
|
|
PATH_LIBNAME = $(foreach NAME,$(1),lib$(NAME)/$($(CONFIG_SHARED:yes=S)LIBNAME))
|
|
DEP_LIBS := $(foreach lib,$(FFLIBS),$(call PATH_LIBNAME,$(lib)))
|
|
|
|
SRC_DIR := $(SRC_PATH)/lib$(NAME)
|
|
ALLHEADERS := $(subst $(SRC_DIR)/,$(SUBDIR),$(wildcard $(SRC_DIR)/*.h $(SRC_DIR)/$(ARCH)/*.h))
|
|
SKIPHEADERS += $(ARCH_HEADERS:%=$(ARCH)/%) $(SKIPHEADERS-)
|
|
SKIPHEADERS := $(SKIPHEADERS:%=$(SUBDIR)%)
|
|
HOBJS = $(filter-out $(SKIPHEADERS:.h=.h.o),$(ALLHEADERS:.h=.h.o))
|
|
checkheaders: $(HOBJS)
|
|
.SECONDARY: $(HOBJS:.o=.c)
|
|
|
|
alltools: $(TOOLS)
|
|
|
|
$(HOSTOBJS): %.o: %.c
|
|
$(COMPILE_HOSTC)
|
|
|
|
$(HOSTPROGS): %$(HOSTEXESUF): %.o
|
|
$(HOSTLD) $(HOSTLDFLAGS) $(HOSTLD_O) $^ $(HOSTLIBS)
|
|
|
|
$(OBJS): | $(sort $(dir $(OBJS)))
|
|
$(HOBJS): | $(sort $(dir $(HOBJS)))
|
|
$(HOSTOBJS): | $(sort $(dir $(HOSTOBJS)))
|
|
$(SLIBOBJS): | $(sort $(dir $(SLIBOBJS)))
|
|
$(TESTOBJS): | $(sort $(dir $(TESTOBJS)))
|
|
$(TOOLOBJS): | tools
|
|
|
|
OBJDIRS := $(OBJDIRS) $(dir $(OBJS) $(HOBJS) $(HOSTOBJS) $(SLIBOBJS) $(TESTOBJS))
|
|
|
|
CLEANSUFFIXES = *.d *.o *~ *.h.c *.map *.ver *.ho *.gcno *.gcda *$(DEFAULT_YASMD).asm
|
|
DISTCLEANSUFFIXES = *.pc
|
|
LIBSUFFIXES = *.a *.lib *.so *.so.* *.dylib *.dll *.def *.dll.a
|
|
|
|
define RULES
|
|
clean::
|
|
$(RM) $(OBJS) $(OBJS:.o=.d)
|
|
$(RM) $(HOSTPROGS)
|
|
$(RM) $(TOOLS)
|
|
endef
|
|
|
|
$(eval $(RULES))
|
|
|
|
-include $(wildcard $(OBJS:.o=.d) $(HOSTOBJS:.o=.d) $(TESTOBJS:.o=.d) $(HOBJS:.o=.d) $(SLIBOBJS:.o=.d))
|