X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=common.mak;h=03fae6f8057625caadbf0bf402c590de6d578ba6;hb=86b29553f86471719adfb4ba86eec0a82f1eb347;hp=2dc181bcb1f7ebfb676c6e0bb104546dbfc3aeda;hpb=9bcc2883ac3b3d1f5938db12cba64211b57a7c21;p=ffmpeg diff --git a/common.mak b/common.mak index 2dc181bcb1f..03fae6f8057 100644 --- a/common.mak +++ b/common.mak @@ -2,123 +2,113 @@ # common bits used by all libraries # -SRC_DIR = $(SRC_PATH_BARE)/lib$(NAME) - -LIBVERSION = $(lib$(NAME)_VERSION) -LIBMAJOR = $(lib$(NAME)_VERSION_MAJOR) - -vpath %.c $(SRC_DIR) -vpath %.h $(SRC_DIR) -vpath %.S $(SRC_DIR) +# first so "all" becomes default target +all: all-yes + +ifndef SUBDIR +vpath %.c $(SRC_DIR) +vpath %.h $(SRC_DIR) +vpath %.S $(SRC_DIR) +vpath %.asm $(SRC_DIR) +vpath %.v $(SRC_DIR) + +ifeq ($(SRC_DIR),$(SRC_PATH_BARE)) +BUILD_ROOT_REL = . +else +BUILD_ROOT_REL = .. +endif + +ifndef V +Q = @ +ECHO = printf "$(1)\t%s\n" $(2) +BRIEF = CC AS YASM AR LD HOSTCC +SILENT = DEPCC YASMDEP RM RANLIB +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 avutil postproc swscale -CFLAGS += $(CFLAGS-yes) -OBJS += $(OBJS-yes) -ASM_OBJS += $(ASM_OBJS-yes) -CPP_OBJS += $(CPP_OBJS-yes) -FFLIBS += $(FFLIBS-yes) - -CFLAGS += -DHAVE_AV_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \ - -D_ISOC9X_SOURCE -I$(BUILD_ROOT) -I$(SRC_PATH) \ - $(addprefix -I$(SRC_PATH)/lib,$(ALLFFLIBS)) $(OPTFLAGS) - -EXTRALIBS := $(addprefix -l,$(addsuffix $(BUILDSUF),$(FFLIBS))) $(EXTRALIBS) -LDFLAGS := $(addprefix -L$(BUILD_ROOT)/lib,$(FFLIBS)) $(LDFLAGS) - -SRCS := $(OBJS:.o=.c) $(ASM_OBJS:.o=.S) $(CPP_OBJS:.o=.cpp) -OBJS := $(OBJS) $(ASM_OBJS) $(CPP_OBJS) - -all: $(LIBNAME) $(SLIBNAME) - -$(LIBNAME)$(DISABLE): $(OBJS) - rm -f $@ - $(AR) rc $@ $^ $(EXTRAOBJS) - $(RANLIB) $@ +IFLAGS := -I$(BUILD_ROOT_REL) -I$(SRC_PATH) +CPPFLAGS := $(IFLAGS) $(CPPFLAGS) +CFLAGS += $(ECFLAGS) +YASMFLAGS += $(IFLAGS) -Pconfig.asm -$(SLIBNAME)$(DISABLE): $(SLIBNAME_WITH_MAJOR) - $(LN_S) $^ $@ - -$(SLIBNAME_WITH_MAJOR): $(OBJS) - $(SLIB_CREATE_DEF_CMD) - $(CC) $(SHFLAGS) $(LDFLAGS) -o $@ $^ $(EXTRALIBS) $(EXTRAOBJS) - $(SLIB_EXTRA_CMD) +HOSTCFLAGS += $(IFLAGS) %.o: %.c - $(CC) $(CFLAGS) $(LIBOBJFLAGS) -c -o $@ $< + $(CCDEP) + $(CC) $(CPPFLAGS) $(CFLAGS) $(CC_DEPFLAGS) -c $(CC_O) $< %.o: %.S - $(CC) $(CFLAGS) $(LIBOBJFLAGS) -c -o $@ $< - -%: %.o $(LIBNAME) - $(CC) $(LDFLAGS) -o $@ $^ $(EXTRALIBS) + $(ASDEP) + $(AS) $(CPPFLAGS) $(ASFLAGS) $(AS_DEPFLAGS) -c -o $@ $< %.ho: %.h - $(CC) $(CFLAGS) $(LIBOBJFLAGS) -Wno-unused -c -o $@ -x c $< + $(CC) $(CPPFLAGS) $(CFLAGS) -Wno-unused -c -o $@ -x c $< -ALLHEADERS = $(subst $(SRC_DIR)/,,$(wildcard $(SRC_DIR)/*.h)) -checkheaders: $(filter-out %_template.ho,$(ALLHEADERS:.h=.ho)) +%$(EXESUF): %.c -depend dep: .depend +%.ver: %.v + $(Q)sed 's/$$MAJOR/$($(basename $(@F))_VERSION_MAJOR)/' $^ > $@ -.depend: $(SRCS) - $(DEPEND_CMD) > .depend +%.c %.h: TAG = GEN -clean:: - rm -f *.o *~ *.a *.lib *.so *.so.* *.dylib *.dll \ - *.def *.dll.a *.exp *.ho *.map $(TESTS) +# Dummy rule to stop make trying to rebuild removed or renamed headers +%.h: + @: -distclean:: clean - rm -f .depend +install: install-libs install-headers +install-libs: install-libs-yes -INSTALL_LIB_TARGETS-$(BUILD_SHARED) += install-lib-shared -INSTALL_LIB_TARGETS-$(BUILD_STATIC) += install-lib-static +uninstall: uninstall-libs uninstall-headers -install: install-libs install-headers +.PHONY: all depend dep *clean install* uninstall* examples testprogs -install-libs$(DISABLE): $(INSTALL_LIB_TARGETS-yes) +# Disable suffix rules. Most of the builtin rules are suffix rules, +# so this saves some time on slow systems. +.SUFFIXES: -install-lib-shared: $(SLIBNAME) - install -d "$(SHLIBDIR)" - install -m 755 $(SLIBNAME) "$(SHLIBDIR)/$(SLIBNAME_WITH_VERSION)" - $(STRIP) "$(SHLIBDIR)/$(SLIBNAME_WITH_VERSION)" - cd "$(SHLIBDIR)" && \ - $(LN_S) $(SLIBNAME_WITH_VERSION) $(SLIBNAME_WITH_MAJOR) - cd "$(SHLIBDIR)" && \ - $(LN_S) $(SLIBNAME_WITH_VERSION) $(SLIBNAME) - $(SLIB_INSTALL_EXTRA_CMD) +# Do not delete intermediate files from chains of implicit rules +$(OBJS): +endif -install-lib-static: $(LIBNAME) - install -d "$(LIBDIR)" - install -m 644 $(LIBNAME) "$(LIBDIR)" - $(LIB_INSTALL_EXTRA_CMD) +OBJS-$(HAVE_MMX) += $(MMX-OBJS-yes) -INCINSTDIR = $(INCDIR)/lib$(NAME) +CFLAGS += $(CFLAGS-yes) +OBJS += $(OBJS-yes) +FFLIBS := $(FFLIBS-yes) $(FFLIBS) +TESTPROGS += $(TESTPROGS-yes) -install-headers$(DISABLE):: - install -d "$(INCINSTDIR)" - install -d "$(LIBDIR)/pkgconfig" - install -m 644 $(addprefix "$(SRC_DIR)"/,$(HEADERS)) "$(INCINSTDIR)" - install -m 644 $(BUILD_ROOT)/lib$(NAME).pc "$(LIBDIR)/pkgconfig" +FFEXTRALIBS := $(addprefix -l,$(addsuffix $(BUILDSUF),$(FFLIBS))) $(EXTRALIBS) +FFLDFLAGS := $(addprefix -L$(BUILD_ROOT)/lib,$(ALLFFLIBS)) $(LDFLAGS) -uninstall: uninstall-libs uninstall-headers +EXAMPLES := $(addprefix $(SUBDIR),$(addsuffix -example$(EXESUF),$(EXAMPLES))) +OBJS := $(addprefix $(SUBDIR),$(sort $(OBJS))) +TESTOBJS := $(addprefix $(SUBDIR),$(TESTOBJS) $(TESTPROGS:%=%-test.o)) +TESTPROGS := $(addprefix $(SUBDIR),$(addsuffix -test$(EXESUF),$(TESTPROGS))) +HOSTOBJS := $(addprefix $(SUBDIR),$(addsuffix .o,$(HOSTPROGS))) +HOSTPROGS := $(addprefix $(SUBDIR),$(addsuffix $(HOSTEXESUF),$(HOSTPROGS))) -uninstall-libs:: - -rm -f "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR)" \ - "$(SHLIBDIR)/$(SLIBNAME)" \ - "$(SHLIBDIR)/$(SLIBNAME_WITH_VERSION)" - -$(SLIB_UNINSTALL_EXTRA_CMD) - -rm -f "$(LIBDIR)/$(LIBNAME)" +DEP_LIBS := $(foreach NAME,$(FFLIBS),$(BUILD_ROOT_REL)/lib$(NAME)/$($(CONFIG_SHARED:yes=S)LIBNAME)) -uninstall-headers:: - rm -f $(addprefix "$(INCINSTDIR)/",$(HEADERS)) - rm -f "$(LIBDIR)/pkgconfig/lib$(NAME).pc" +ALLHEADERS := $(subst $(SRC_DIR)/,$(SUBDIR),$(wildcard $(SRC_DIR)/*.h $(SRC_DIR)/$(ARCH)/*.h)) +SKIPHEADERS += $(addprefix $(ARCH)/,$(ARCH_HEADERS)) +SKIPHEADERS := $(addprefix $(SUBDIR),$(SKIPHEADERS-) $(SKIPHEADERS)) +checkheaders: $(filter-out $(SKIPHEADERS:.h=.ho),$(ALLHEADERS:.h=.ho)) -tests: $(TESTS) +$(HOSTOBJS): %.o: %.c + $(HOSTCC) $(HOSTCFLAGS) -c -o $@ $< -%-test$(EXESUF): %.c $(LIBNAME) - $(CC) $(CFLAGS) $(LDFLAGS) -DTEST -o $@ $^ $(EXTRALIBS) +$(HOSTPROGS): %$(HOSTEXESUF): %.o + $(HOSTCC) $(HOSTLDFLAGS) -o $@ $< $(HOSTLIBS) -.PHONY: all depend dep clean distclean install* uninstall* tests +CLEANSUFFIXES = *.d *.o *~ *.ho *.map *.ver +DISTCLEANSUFFIXES = *.pc +LIBSUFFIXES = *.a *.lib *.so *.so.* *.dylib *.dll *.def *.dll.a *.exp --include .depend +-include $(wildcard $(OBJS:.o=.d) $(TESTOBJS:.o=.d))