1# 2# common bits used by all libraries 3# 4 5all: # make "all" default target 6 7ifndef SUBDIR 8vpath %.c $(SRC_DIR) 9vpath %.h $(SRC_DIR) 10vpath %.S $(SRC_DIR) 11vpath %.asm $(SRC_DIR) 12vpath %.v $(SRC_DIR) 13 14ifeq ($(SRC_DIR),$(SRC_PATH_BARE)) 15BUILD_ROOT_REL = . 16else 17BUILD_ROOT_REL = .. 18endif 19 20ALLFFLIBS = avcodec avdevice avfilter avformat avutil postproc swscale 21 22CFLAGS := -DHAVE_AV_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \ 23 -I$(BUILD_ROOT_REL) -I$(SRC_PATH) $(OPTFLAGS) 24 25%.o: %.c 26 $(CC) $(CFLAGS) $(LIBOBJFLAGS) -c -o $@ $< 27 28%.o: %.S 29 $(CC) $(CFLAGS) $(LIBOBJFLAGS) -c -o $@ $< 30 31%.ho: %.h 32 $(CC) $(CFLAGS) $(LIBOBJFLAGS) -Wno-unused -c -o $@ -x c $< 33 34%.d: %.c 35 $(DEPEND_CMD) > $@ 36 37%.d: %.S 38 $(DEPEND_CMD) > $@ 39 40%.d: %.cpp 41 $(DEPEND_CMD) > $@ 42 43%.o: %.d 44 45%$(EXESUF): %.c 46 47%.ver: %.v 48 sed 's/$$MAJOR/$($(basename $(@F))_VERSION_MAJOR)/' $^ > $@ 49 50SVN_ENTRIES = $(SRC_PATH_BARE)/.svn/entries 51ifeq ($(wildcard $(SVN_ENTRIES)),$(SVN_ENTRIES)) 52$(BUILD_ROOT_REL)/version.h: $(SVN_ENTRIES) 53endif 54 55$(BUILD_ROOT_REL)/version.h: $(SRC_PATH_BARE)/version.sh 56 $< $(SRC_PATH) $@ $(EXTRA_VERSION) 57 58install: install-libs install-headers 59 60uninstall: uninstall-libs uninstall-headers 61 62.PHONY: all depend dep clean distclean install* uninstall* tests 63endif 64 65CFLAGS += $(CFLAGS-yes) 66OBJS += $(OBJS-yes) 67FFLIBS := $(FFLIBS-yes) $(FFLIBS) 68TESTS += $(TESTS-yes) 69 70FFEXTRALIBS := $(addprefix -l,$(addsuffix $(BUILDSUF),$(FFLIBS))) $(EXTRALIBS) 71FFLDFLAGS := $(addprefix -L$(BUILD_ROOT)/lib,$(FFLIBS)) $(LDFLAGS) 72 73OBJS := $(addprefix $(SUBDIR),$(OBJS)) 74TESTS := $(addprefix $(SUBDIR),$(TESTS)) 75 76DEP_LIBS:=$(foreach NAME,$(FFLIBS),lib$(NAME)/$($(BUILD_SHARED:yes=S)LIBNAME)) 77 78ALLHEADERS := $(subst $(SRC_DIR)/,$(SUBDIR),$(wildcard $(SRC_DIR)/*.h $(SRC_DIR)/$(ARCH)/*.h)) 79checkheaders: $(filter-out %_template.ho,$(ALLHEADERS:.h=.ho)) 80 81DEPS := $(OBJS:.o=.d) 82depend dep: $(DEPS) 83 84CLEANSUFFIXES = *.o *~ *.ho *.ver 85LIBSUFFIXES = *.a *.lib *.so *.so.* *.dylib *.dll *.def *.dll.a *.exp *.map 86DISTCLEANSUFFIXES = *.d *.pc 87 88define RULES 89$(SUBDIR)%$(EXESUF): $(SUBDIR)%.o 90 $(CC) $(FFLDFLAGS) -o $$@ $$^ $(SUBDIR)$(LIBNAME) $(FFEXTRALIBS) 91 92$(SUBDIR)%-test.o: $(SUBDIR)%.c 93 $(CC) $(CFLAGS) -DTEST -c -o $$@ $$^ 94 95$(SUBDIR)%-test.o: $(SUBDIR)%-test.c 96 $(CC) $(CFLAGS) -DTEST -c -o $$@ $$^ 97 98$(SUBDIR)x86/%.o: $(SUBDIR)x86/%.asm 99 $(YASM) $(YASMFLAGS) -I $$(<D)/ -o $$@ $$< 100 101$(SUBDIR)x86/%.d: $(SUBDIR)x86/%.asm 102 $(YASM) $(YASMFLAGS) -I $$(<D)/ -M -o $$(@:%.d=%.o) $$< > $$@ 103 104clean:: 105 rm -f $(TESTS) $(addprefix $(SUBDIR),$(CLEANFILES) $(CLEANSUFFIXES) $(LIBSUFFIXES)) \ 106 $(addprefix $(SUBDIR), $(foreach suffix,$(CLEANSUFFIXES),$(addsuffix /$(suffix),$(DIRS)))) 107 108distclean:: clean 109 rm -f $(addprefix $(SUBDIR),$(DISTCLEANSUFFIXES)) \ 110 $(addprefix $(SUBDIR), $(foreach suffix,$(DISTCLEANSUFFIXES),$(addsuffix /$(suffix),$(DIRS)))) 111endef 112 113$(eval $(RULES)) 114 115tests: $(TESTS) 116 117-include $(DEPS) 118