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