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