]> git.sesse.net Git - vlc/blob - Makefile.modules
2a54e0037bf6a5234072ed47e1f0c10984ada746
[vlc] / Makefile.modules
1 ###############################################################################
2 # vlc (VideoLAN Client) common module Makefile
3 # (c)2001 VideoLAN
4 ###############################################################################
5 # This file should be included by all module Makefiles
6 ###############################################################################
7
8 #
9 # include the local Makefile
10 #
11 include Makefile
12
13 #
14 # Analyze the target we are asked to build
15 #
16 module_name := $(shell echo $(MAKECMDGOALS) | sed 's@\..*@@')
17 suff := $(shell echo $(MAKECMDGOALS) | sed 's@.*\.@@' | tr so/a lo/o)
18
19 #
20 # Compiler flags
21 #
22 SRC_C := $(filter %.c,$($(module_name)_SOURCES))
23 SRC_CPP := $(filter %.cpp,$($(module_name)_SOURCES))
24 SRC_M := $(filter %.m,$($(module_name)_SOURCES))
25
26 plugins_CFLAGS += -D__PLUGIN__ -I$(PARENT) -I$(PARENT)/include -I$(PARENT)/extras
27 builtins_CFLAGS += -D__BUILTIN__ -I$(PARENT) -I$(PARENT)/include -I$(PARENT)/extras
28
29 ifeq (lo,$(suff))
30 extra_CFLAGS := $(plugins_CFLAGS) $($(module_name)_CFLAGS) \
31                 -DMODULE_NAME=$(module_name) -DMODULE_NAME_IS_$(module_name) \
32                 -DMODULE_PATH=$(MODULE_PATH) $($(module_name)_so_CFLAGS)
33 OBJ_ALL := $(SRC_C:%.c=%.lo.$(module_name)) $(SRC_CPP:%.cpp=%.lo.$(module_name))
34 else
35 extra_CFLAGS := $(builtins_CFLAGS) $($(module_name)_CFLAGS) \
36                 -DMODULE_NAME=$(module_name) -DMODULE_NAME_IS_$(module_name) \
37                 -DMODULE_PATH=$(MODULE_PATH) $($(module_name)_a_CFLAGS)
38 OBJ_ALL := $(SRC_C:%.c=%.o.$(module_name)) $(SRC_CPP:%.cpp=%.o.$(module_name)) \
39                 $(SRC_M:%.m=%.o.$(module_name))
40 endif
41
42
43 # Standard dependencies
44 #
45 C_DEP := $(SRC_C:%.c=.dep/%.d)
46 CPP_DEP := $(SRC_CPP:%.cpp=.dep/%.dpp)
47 M_DEP := $(SRC_M:%.m=.dep/%.dm)
48
49 export
50
51 #
52 # Virtual targets
53 #
54 all:
55
56 clean:
57 #       rm -f $(PLUGIN_ALL) $(BUILTIN_ALL)
58         rm -f *.a *.so *.o *.o.* *.lo.* *.obj *.moc *.moc.* *.bak
59         rm -Rf .dep
60
61 FORCE:
62
63 $(OBJ_ALL): $(PARENT)/Makefile.modules $(PARENT)/Makefile.dep $(PARENT)/Makefile $(PARENT)/Makefile.opts Makefile
64 $(OBJ_ALL): $(H_DEP:%=$(PARENT)/include/%)
65
66 $(C_DEP): %.d: FORCE
67         @$(MAKE) -s --no-print-directory -f $(PARENT)/Makefile.dep $@ CFLAGS="$(CFLAGS) $(extra_CFLAGS)"
68
69 $(CPP_DEP): %.dpp: FORCE
70         @$(MAKE) -s --no-print-directory -f $(PARENT)/Makefile.dep $@ CFLAGS="$(CFLAGS) $(extra_CFLAGS)"
71
72 $(M_DEP): %.dm: FORCE
73         @$(MAKE) -s --no-print-directory -f $(PARENT)/Makefile.dep $@ CFLAGS="$(CFLAGS) $(extra_CFLAGS)"
74
75 $(SRC_C:%.c=%.$(suff).$(module_name)): %.$(suff).$(module_name): .dep/%.d
76 $(SRC_C:%.c=%.$(suff).$(module_name)): %.$(suff).$(module_name): %.c
77         $(CC) $(CFLAGS) $(extra_CFLAGS) -c $< -o $@
78
79 $(SRC_CPP:%.cpp=%.$(suff).$(module_name)): %.$(suff).$(module_name): .dep/%.dpp
80 $(SRC_CPP:%.cpp=%.$(suff).$(module_name)): %.$(suff).$(module_name): %.cpp
81         $(CC) $(CFLAGS) $(extra_CFLAGS) -c $< -o $@
82
83 $(SRC_M:%.m=%.$(suff).$(module_name)): %.$(suff).$(module_name): .dep/%.dm
84 $(SRC_M:%.m=%.$(suff).$(module_name)): %.$(suff).$(module_name): %.m
85         $(CC) $(CFLAGS) $(extra_CFLAGS) -c $< -o $@
86
87 # foo_CUSTOM lets us override all target rules for foo.so and foo.a
88 ifeq (,$($(module_name)_CUSTOM))
89 $(module_name).so: $(EXTRA_DEP) $(OBJ_ALL)
90         $(CC) $(OBJ_ALL) $(LDFLAGS) $(plugins_LDFLAGS) $($(module_name)_LDFLAGS) -o $@
91
92 $(module_name).a: $(EXTRA_DEP) $(OBJ_ALL)
93         rm -f $@
94         ar rc $@ $(OBJ_ALL)
95         $(RANLIB) $@
96 endif
97