8e9c082fe860497f7c62396e1dd03bc39b581455
[asterisk/asterisk.git] / Makefile.moddir_rules
1 #
2 # Asterisk -- A telephony toolkit for Linux.
3
4 # Makefile rules for subdirectories containing modules
5 #
6 # Copyright (C) 2006, Digium, Inc.
7 #
8 # Kevin P. Fleming <kpfleming@digium.com>
9 #
10 # This program is free software, distributed under the terms of
11 # the GNU General Public License
12 #
13
14 ifneq ($(findstring MALLOC_DEBUG,$(MENUSELECT_CFLAGS)),)
15   CFLAGS+=-include $(ASTTOPDIR)/include/asterisk/astmm.h
16 endif
17
18 ifneq ($(findstring STATIC_BUILD,$(MENUSELECT_CFLAGS)),)
19   STATIC_BUILD=-static
20 endif
21
22 include $(ASTTOPDIR)/Makefile.rules
23
24 comma:=,
25
26 define module_o_template
27 $(2): $(3)
28 $(2): CFLAGS+=-DAST_MODULE=\"$(1)\" $$(MENUSELECT_OPTS_$(1):%=-D%) $(foreach dep,$(MENUSELECT_DEPENDS_$(1)),$$(value $(dep)_INCLUDE))
29 endef
30
31 define module_so_template
32 $(1)=$(1).so
33 $(1).so: CFLAGS+=-fPIC
34 $(1).so: LIBS+=$(foreach dep,$(MENUSELECT_DEPENDS_$(1)),$$(value $(dep)_LIB))
35 $(1).so: LDFLAGS+=$(foreach dep,$(MENUSELECT_DEPENDS_$(1)),$$(value $(dep)_LDFLAGS))
36 $(1).so: $(2)
37 endef
38
39 define module_a_template
40 $(1)=modules.link
41 modules.link: $(2)
42 endef
43
44 $(foreach mod,$(C_MODS),$(eval $(call module_o_template,$(mod),$(mod).o,$(mod).c)))
45
46 $(foreach mod,$(CC_MODS),$(eval $(call module_o_template,$(mod),$(mod).oo,$(mod).cc)))
47
48 $(foreach mod,$(filter-out $(EMBEDDED_MODS),$(C_MODS)),$(eval $(call module_so_template,$(mod),$(mod).o)))
49
50 $(foreach mod,$(filter-out $(EMBEDDED_MODS),$(CC_MODS)),$(eval $(call module_so_template,$(mod),$(mod).oo)))
51
52 $(foreach mod,$(filter $(EMBEDDED_MODS),$(C_MODS)),$(eval $(call module_a_template,$(mod),$(mod).o)))
53
54 $(foreach mod,$(filter $(EMBEDDED_MODS),$(CC_MODS)),$(eval $(call module_a_template,$(mod),$(mod).oo)))
55
56 .PHONY: clean clean-depend depend uninstall _all
57
58 ifneq ($(LOADABLE_MODS),)
59 _all: $(LOADABLE_MODS:%=%.so)
60 endif
61
62 ifneq ($(EMBEDDED_MODS),)
63 _all: modules.link
64 __embed_ldscript:
65         @echo "../$(SUBDIR)/modules.link"
66 __embed_ldflags:
67         @echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(C_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LDFLAGS))"
68         @echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(CC_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LDFLAGS))"
69 __embed_libs:
70         @echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(C_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LIB))"
71         @echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(CC_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LIB))"
72 else
73 __embed_ldscript:
74 __embed_ldflags:
75 __embed_libs:
76 endif
77
78 modules.link:
79         @rm -f $@
80         @for file in $(patsubst $(ASTTOPDIR)/%,%,$(realpath $^)); do echo "INPUT (../$${file})" >> $@; done
81
82 clean-depend::
83         rm -f .depend
84
85 clean:: clean-depend
86         rm -f *.so *.o *.oo
87         rm -f modules.link
88
89 install:: all
90         for x in $(LOADABLE_MODS:%=%.so); do $(INSTALL) -m 755 $$x $(DESTDIR)$(MODULES_DIR) ; done
91
92 uninstall::
93
94 ifneq ($(wildcard .depend),)
95  include .depend
96 endif
97
98 depend: .depend
99
100 .depend:
101         ../build_tools/mkdep $(CFLAGS) `ls *.c *.cc 2> /dev/null`