X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=common.mak;h=8f6a61f905d4e7f4f597ffd763a57202d2f6dc9e;hb=99434f4df81b6801b2b535d5b9143305595784f6;hp=03bc8b1a59b9ca7c0e51402e33ef3bdee2beb570;hpb=db671614cce86d6ba7eaacb774569b7dc7656ec7;p=ffmpeg diff --git a/common.mak b/common.mak index 03bc8b1a59b..8f6a61f905d 100644 --- a/common.mak +++ b/common.mak @@ -2,98 +2,65 @@ # common bits used by all libraries # -SRC_DIR = $(SRC_PATH)/lib$(NAME) -VPATH = $(SRC_DIR) +# first so "all" becomes default target +all: all-yes -SRCS := $(OBJS:.o=.c) $(ASM_OBJS:.o=.S) $(CPPOBJS:.o=.cpp) -OBJS := $(OBJS) $(ASM_OBJS) $(CPPOBJS) -STATIC_OBJS := $(OBJS) $(STATIC_OBJS) -SHARED_OBJS := $(OBJS) $(SHARED_OBJS) +include $(SRC_PATH)/arch.mak -EXTRALIBS := -L$(SRC_PATH)/libavutil -lavutil$(BUILDSUF) $(EXTRALIBS) +OBJS += $(OBJS-yes) +FFLIBS := $($(NAME)_FFLIBS) $(FFLIBS-yes) $(FFLIBS) +TESTPROGS += $(TESTPROGS-yes) -all: $(EXTRADEPS) $(LIB) $(SLIBNAME) +LDLIBS = $(FFLIBS:%=%$(BUILDSUF)) +FFEXTRALIBS := $(LDLIBS:%=$(LD_LIB)) $(EXTRALIBS) -$(LIB): $(STATIC_OBJS) - rm -f $@ - $(AR) rc $@ $^ $(EXTRAOBJS) - $(RANLIB) $@ +OBJS := $(sort $(OBJS:%=$(SUBDIR)%)) +TESTOBJS := $(TESTOBJS:%=$(SUBDIR)tests/%) $(TESTPROGS:%=$(SUBDIR)tests/%.o) +TESTPROGS := $(TESTPROGS:%=$(SUBDIR)tests/%$(EXESUF)) +HOSTOBJS := $(HOSTPROGS:%=$(SUBDIR)%.o) +HOSTPROGS := $(HOSTPROGS:%=$(SUBDIR)%$(HOSTEXESUF)) +TOOLS += $(TOOLS-yes) +TOOLOBJS := $(TOOLS:%=tools/%.o) +TOOLS := $(TOOLS:%=tools/%$(EXESUF)) +HEADERS += $(HEADERS-yes) -$(SLIBNAME): $(SLIBNAME_WITH_MAJOR) - ln -sf $^ $@ +PATH_LIBNAME = $(foreach NAME,$(1),lib$(NAME)/$($(2)LIBNAME)) +DEP_LIBS := $(foreach lib,$(FFLIBS),$(call PATH_LIBNAME,$(lib),$(CONFIG_SHARED:yes=S))) +STATIC_DEP_LIBS := $(foreach lib,$(FFLIBS),$(call PATH_LIBNAME,$(lib))) -$(SLIBNAME_WITH_MAJOR): $(SHARED_OBJS) - $(CC) $(SHFLAGS) $(LDFLAGS) -o $@ $^ $(EXTRALIBS) $(EXTRAOBJS) - $(SLIB_EXTRA_CMD) +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) -%.o: %.c - $(CC) $(CFLAGS) $(LIBOBJFLAGS) -c -o $@ $< +alltools: $(TOOLS) -%.o: %.S - $(CC) $(CFLAGS) $(LIBOBJFLAGS) -c -o $@ $< +$(HOSTOBJS): %.o: %.c + $(COMPILE_HOSTC) -# BeOS: remove -Wall to get rid of all the "multibyte constant" warnings -%.o: %.cpp - g++ $(subst -Wall,,$(CFLAGS)) -c -o $@ $< +$(HOSTPROGS): %$(HOSTEXESUF): %.o + $(HOSTLD) $(HOSTLDFLAGS) $(HOSTLD_O) $^ $(HOSTLIBS) -depend dep: $(SRCS) - $(CC) -MM $(CFLAGS) $^ 1>.depend +$(OBJS): | $(sort $(dir $(OBJS))) +$(HOBJS): | $(sort $(dir $(HOBJS))) +$(HOSTOBJS): | $(sort $(dir $(HOSTOBJS))) +$(TESTOBJS): | $(sort $(dir $(TESTOBJS))) +$(TOOLOBJS): | tools -clean:: - rm -f *.o *.d *~ *.a *.lib *.so *.so.* *.dylib *.dll \ - *.lib *.def *.dll.a *.exp - -distclean: clean - rm -f .depend - -ifeq ($(BUILD_SHARED),yes) -INSTLIBTARGETS += install-lib-shared -endif -ifeq ($(BUILD_STATIC),yes) -INSTLIBTARGETS += install-lib-static -endif - -install: install-libs install-headers - -install-libs: $(INSTLIBTARGETS) - -install-lib-shared: $(SLIBNAME) - install -d "$(shlibdir)" - install $(INSTALLSTRIP) -m 755 $(SLIBNAME) \ - "$(shlibdir)/$(SLIBNAME_WITH_VERSION)" - cd "$(shlibdir)" && \ - ln -sf $(SLIBNAME_WITH_VERSION) $(SLIBNAME_WITH_MAJOR) - cd "$(shlibdir)" && \ - ln -sf $(SLIBNAME_WITH_VERSION) $(SLIBNAME) +OBJDIRS := $(OBJDIRS) $(dir $(OBJS) $(HOBJS) $(HOSTOBJS) $(TESTOBJS)) -install-lib-static: $(LIB) - install -d "$(libdir)" - install -m 644 $(LIB) "$(libdir)" - $(LIB_INSTALL_EXTRA_CMD) +CLEANSUFFIXES = *.d *.o *~ *.h.c *.gcda *.gcno *.map *.ver +DISTCLEANSUFFIXES = *.pc +LIBSUFFIXES = *.a *.lib *.so *.so.* *.dylib *.dll *.def *.dll.a -install-headers: - install -d "$(incdir)" - install -d "$(libdir)/pkgconfig" - install -m 644 $(addprefix "$(SRC_DIR)"/,$(HEADERS)) "$(incdir)" - install -m 644 $(BUILD_ROOT)/lib$(NAME).pc "$(libdir)/pkgconfig" - -uninstall: uninstall-libs uninstall-headers - -uninstall-libs: - -rm -f "$(shlibdir)/$(SLIBNAME_WITH_MAJOR)" \ - "$(shlibdir)/$(SLIBNAME)" \ - "$(shlibdir)/$(SLIBNAME_WITH_VERSION)" - -rm -f "$(libdir)/$(LIB)" - -uninstall-headers: - rm -f "$(addprefix $(incdir)/,$(HEADERS))" - rm -f "$(libdir)/pkgconfig/lib$(NAME).pc" +define RULES +clean:: + $(RM) $(HOSTPROGS) $(TESTPROGS) $(TOOLS) +endef -.PHONY: all depend dep clean distclean install* uninstall* +$(eval $(RULES)) -# -# include dependency files if they exist -# -ifneq ($(wildcard .depend),) -include .depend -endif +-include $(wildcard $(OBJS:.o=.d) $(HOSTOBJS:.o=.d) $(TESTOBJS:.o=.d) $(HOBJS:.o=.d))