more makefile tweaks to keep targets from being run when they don't need to be
[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 ifeq ($(findstring LOADABLE_MODULES,$(MENUSELECT_CFLAGS)),)
19   CFLAGS+=${GC_CFLAGS}
20 endif
21
22 ifneq ($(findstring STATIC_BUILD,$(MENUSELECT_CFLAGS)),)
23   STATIC_BUILD=-static
24 endif
25
26 include $(ASTTOPDIR)/Makefile.rules
27
28 comma:=,
29
30 define module_o_template
31 $(2): $(3)
32 $(2): CFLAGS+=-DAST_MODULE=\"$(1)\" $$(MENUSELECT_OPTS_$(1):%=-D%) $(foreach dep,$(MENUSELECT_DEPENDS_$(1)),$$(value $(dep)_INCLUDE))
33 endef
34
35 define module_so_template
36 $(1)=$(1).so
37 $(1).so: CFLAGS+=-fPIC
38 $(1).so: LIBS+=$(foreach dep,$(MENUSELECT_DEPENDS_$(1)),$$(value $(dep)_LIB))
39 $(1).so: LDFLAGS+=$(foreach dep,$(MENUSELECT_DEPENDS_$(1)),$$(value $(dep)_LDFLAGS))
40 $(1).so: $(2)
41 endef
42
43 define module_a_template
44 $(1)=modules.link
45 modules.link: $(2)
46 endef
47
48 $(foreach mod,$(C_MODS),$(eval $(call module_o_template,$(mod),$(mod).o,$(mod).c)))
49
50 $(foreach mod,$(CC_MODS),$(eval $(call module_o_template,$(mod),$(mod).oo,$(mod).cc)))
51
52 $(foreach mod,$(filter-out $(EMBEDDED_MODS),$(C_MODS)),$(eval $(call module_so_template,$(mod),$(mod).o)))
53
54 $(foreach mod,$(filter-out $(EMBEDDED_MODS),$(CC_MODS)),$(eval $(call module_so_template,$(mod),$(mod).oo)))
55
56 $(foreach mod,$(filter $(EMBEDDED_MODS),$(C_MODS)),$(eval $(call module_a_template,$(mod),$(mod).o)))
57
58 $(foreach mod,$(filter $(EMBEDDED_MODS),$(CC_MODS)),$(eval $(call module_a_template,$(mod),$(mod).oo)))
59
60 .PHONY: clean clean-depend depend uninstall _all
61
62 ifneq ($(LOADABLE_MODS),)
63 _all: $(LOADABLE_MODS:%=%.so)
64 endif
65
66 ifneq ($(EMBEDDED_MODS),)
67 _all: modules.link
68 __embed_ldscript:
69         @echo "../$(SUBDIR)/modules.link"
70 __embed_ldflags:
71         @echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(C_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LDFLAGS))"
72         @echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(CC_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LDFLAGS))"
73 __embed_libs:
74         @echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(C_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LIB))"
75         @echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(CC_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LIB))"
76 else
77 __embed_ldscript:
78 __embed_ldflags:
79 __embed_libs:
80 endif
81
82 modules.link:
83         @rm -f $@
84         @for file in $(patsubst $(ASTTOPDIR)/%,%,$(realpath $^)); do echo "INPUT (../$${file})" >> $@; done
85
86 clean-depend::
87         rm -f .depend
88
89 clean:: clean-depend
90         rm -f *.so *.o *.oo
91         rm -f modules.link
92
93 install:: all
94         for x in $(LOADABLE_MODS:%=%.so); do $(INSTALL) -m 755 $$x $(DESTDIR)$(MODULES_DIR) ; done
95
96 uninstall::
97
98 ifneq ($(wildcard .depend),)
99   include .depend
100 endif
101
102 depend: .depend
103
104 .depend:
105         ../build_tools/mkdep $(CFLAGS) `ls *.c *.cc 2> /dev/null`