Commit | Line | Data |
---|---|---|
2ba45a60 DM |
1 | # |
2 | # common bits used by all libraries | |
3 | # | |
4 | ||
5 | # first so "all" becomes default target | |
6 | all: all-yes | |
7 | ||
8 | ifndef SUBDIR | |
9 | ||
10 | ifndef V | |
11 | Q = @ | |
12 | ECHO = printf "$(1)\t%s\n" $(2) | |
13 | BRIEF = CC CXX HOSTCC HOSTLD AS YASM AR LD STRIP CP WINDRES | |
14 | SILENT = DEPCC DEPHOSTCC DEPAS DEPYASM RANLIB RM | |
15 | ||
16 | MSG = $@ | |
17 | M = @$(call ECHO,$(TAG),$@); | |
18 | $(foreach VAR,$(BRIEF), \ | |
19 | $(eval override $(VAR) = @$$(call ECHO,$(VAR),$$(MSG)); $($(VAR)))) | |
20 | $(foreach VAR,$(SILENT),$(eval override $(VAR) = @$($(VAR)))) | |
21 | $(eval INSTALL = @$(call ECHO,INSTALL,$$(^:$(SRC_DIR)/%=%)); $(INSTALL)) | |
22 | endif | |
23 | ||
24 | ALLFFLIBS = avcodec avdevice avfilter avformat avresample avutil postproc swscale swresample | |
25 | ||
26 | # NASM requires -I path terminated with / | |
27 | IFLAGS := -I. -I$(SRC_PATH)/ | |
28 | CPPFLAGS := $(IFLAGS) $(CPPFLAGS) | |
29 | CFLAGS += $(ECFLAGS) | |
30 | CCFLAGS = $(CPPFLAGS) $(CFLAGS) | |
31 | ASFLAGS := $(CPPFLAGS) $(ASFLAGS) | |
32 | CXXFLAGS += $(CPPFLAGS) $(CFLAGS) | |
33 | YASMFLAGS += $(IFLAGS:%=%/) -Pconfig.asm | |
34 | ||
35 | HOSTCCFLAGS = $(IFLAGS) $(HOSTCPPFLAGS) $(HOSTCFLAGS) | |
36 | LDFLAGS := $(ALLFFLIBS:%=$(LD_PATH)lib%) $(LDFLAGS) | |
37 | ||
38 | define COMPILE | |
39 | $(call $(1)DEP,$(1)) | |
40 | $($(1)) $($(1)FLAGS) $($(1)_DEPFLAGS) $($(1)_C) $($(1)_O) $< | |
41 | endef | |
42 | ||
43 | COMPILE_C = $(call COMPILE,CC) | |
44 | COMPILE_CXX = $(call COMPILE,CXX) | |
45 | COMPILE_S = $(call COMPILE,AS) | |
46 | COMPILE_HOSTC = $(call COMPILE,HOSTCC) | |
47 | ||
48 | %.o: %.c | |
49 | $(COMPILE_C) | |
50 | ||
51 | %.o: %.cpp | |
52 | $(COMPILE_CXX) | |
53 | ||
54 | %.o: %.m | |
55 | $(COMPILE_C) | |
56 | ||
57 | %.s: %.c | |
58 | $(CC) $(CPPFLAGS) $(CFLAGS) -S -o $@ $< | |
59 | ||
60 | %.o: %.S | |
61 | $(COMPILE_S) | |
62 | ||
63 | %_host.o: %.c | |
64 | $(COMPILE_HOSTC) | |
65 | ||
66 | %.o: %.rc | |
67 | $(WINDRES) $(IFLAGS) --preprocessor "$(DEPWINDRES) -E -xc-header -DRC_INVOKED $(CC_DEPFLAGS)" -o $@ $< | |
68 | ||
69 | %.i: %.c | |
70 | $(CC) $(CCFLAGS) $(CC_E) $< | |
71 | ||
72 | %.h.c: | |
73 | $(Q)echo '#include "$*.h"' >$@ | |
74 | ||
75 | %.ver: %.v | |
76 | $(Q)sed 's/$$MAJOR/$($(basename $(@F))_VERSION_MAJOR)/' $^ > $@ | |
77 | ||
78 | %.c %.h: TAG = GEN | |
79 | ||
80 | # Dummy rule to stop make trying to rebuild removed or renamed headers | |
81 | %.h: | |
82 | @: | |
83 | ||
84 | # Disable suffix rules. Most of the builtin rules are suffix rules, | |
85 | # so this saves some time on slow systems. | |
86 | .SUFFIXES: | |
87 | ||
88 | # Do not delete intermediate files from chains of implicit rules | |
89 | $(OBJS): | |
90 | endif | |
91 | ||
92 | include $(SRC_PATH)/arch.mak | |
93 | ||
94 | OBJS += $(OBJS-yes) | |
95 | SLIBOBJS += $(SLIBOBJS-yes) | |
96 | FFLIBS := $($(NAME)_FFLIBS) $(FFLIBS-yes) $(FFLIBS) | |
97 | TESTPROGS += $(TESTPROGS-yes) | |
98 | ||
99 | LDLIBS = $(FFLIBS:%=%$(BUILDSUF)) | |
100 | FFEXTRALIBS := $(LDLIBS:%=$(LD_LIB)) $(EXTRALIBS) | |
101 | ||
102 | OBJS := $(sort $(OBJS:%=$(SUBDIR)%)) | |
103 | SLIBOBJS := $(sort $(SLIBOBJS:%=$(SUBDIR)%)) | |
104 | TESTOBJS := $(TESTOBJS:%=$(SUBDIR)%) $(TESTPROGS:%=$(SUBDIR)%-test.o) | |
105 | TESTPROGS := $(TESTPROGS:%=$(SUBDIR)%-test$(EXESUF)) | |
106 | HOSTOBJS := $(HOSTPROGS:%=$(SUBDIR)%.o) | |
107 | HOSTPROGS := $(HOSTPROGS:%=$(SUBDIR)%$(HOSTEXESUF)) | |
108 | TOOLS += $(TOOLS-yes) | |
109 | TOOLOBJS := $(TOOLS:%=tools/%.o) | |
110 | TOOLS := $(TOOLS:%=tools/%$(EXESUF)) | |
111 | HEADERS += $(HEADERS-yes) | |
112 | ||
113 | PATH_LIBNAME = $(foreach NAME,$(1),lib$(NAME)/$($(CONFIG_SHARED:yes=S)LIBNAME)) | |
114 | DEP_LIBS := $(foreach lib,$(FFLIBS),$(call PATH_LIBNAME,$(lib))) | |
115 | ||
116 | SRC_DIR := $(SRC_PATH)/lib$(NAME) | |
117 | ALLHEADERS := $(subst $(SRC_DIR)/,$(SUBDIR),$(wildcard $(SRC_DIR)/*.h $(SRC_DIR)/$(ARCH)/*.h)) | |
118 | SKIPHEADERS += $(ARCH_HEADERS:%=$(ARCH)/%) $(SKIPHEADERS-) | |
119 | SKIPHEADERS := $(SKIPHEADERS:%=$(SUBDIR)%) | |
120 | HOBJS = $(filter-out $(SKIPHEADERS:.h=.h.o),$(ALLHEADERS:.h=.h.o)) | |
121 | checkheaders: $(HOBJS) | |
122 | .SECONDARY: $(HOBJS:.o=.c) | |
123 | ||
124 | alltools: $(TOOLS) | |
125 | ||
126 | $(HOSTOBJS): %.o: %.c | |
127 | $(COMPILE_HOSTC) | |
128 | ||
129 | $(HOSTPROGS): %$(HOSTEXESUF): %.o | |
130 | $(HOSTLD) $(HOSTLDFLAGS) $(HOSTLD_O) $^ $(HOSTLIBS) | |
131 | ||
132 | $(OBJS): | $(sort $(dir $(OBJS))) | |
133 | $(HOBJS): | $(sort $(dir $(HOBJS))) | |
134 | $(HOSTOBJS): | $(sort $(dir $(HOSTOBJS))) | |
135 | $(SLIBOBJS): | $(sort $(dir $(SLIBOBJS))) | |
136 | $(TESTOBJS): | $(sort $(dir $(TESTOBJS))) | |
137 | $(TOOLOBJS): | tools | |
138 | ||
139 | OBJDIRS := $(OBJDIRS) $(dir $(OBJS) $(HOBJS) $(HOSTOBJS) $(SLIBOBJS) $(TESTOBJS)) | |
140 | ||
141 | CLEANSUFFIXES = *.d *.o *~ *.h.c *.map *.ver *.ho *.gcno *.gcda | |
142 | DISTCLEANSUFFIXES = *.pc | |
143 | LIBSUFFIXES = *.a *.lib *.so *.so.* *.dylib *.dll *.def *.dll.a | |
144 | ||
145 | define RULES | |
146 | clean:: | |
147 | $(RM) $(OBJS) $(OBJS:.o=.d) | |
148 | $(RM) $(HOSTPROGS) | |
149 | $(RM) $(TOOLS) | |
150 | endef | |
151 | ||
152 | $(eval $(RULES)) | |
153 | ||
154 | -include $(wildcard $(OBJS:.o=.d) $(HOSTOBJS:.o=.d) $(TESTOBJS:.o=.d) $(HOBJS:.o=.d) $(SLIBOBJS:.o=.d)) |