X-Git-Url: http://git.asterisk.org/gitweb/?p=asterisk%2Fasterisk.git;a=blobdiff_plain;f=Makefile.moddir_rules;h=6925636b9b03c0e5bae21a825298dc2defacaee5;hp=a82fc99be2d61fe4da967739ea8c70bceaba9be7;hb=018a9c86e46d1dc474515c9a034427ec7da2217b;hpb=748431f7b6375e0006937e8c9fbcdaed5779ca0a diff --git a/Makefile.moddir_rules b/Makefile.moddir_rules index a82fc99..6925636 100644 --- a/Makefile.moddir_rules +++ b/Makefile.moddir_rules @@ -1,7 +1,7 @@ # # Asterisk -- A telephony toolkit for Linux. # -# Makefile rules +# Makefile rules for subdirectories containing modules # # Copyright (C) 2006, Digium, Inc. # @@ -11,43 +11,79 @@ # the GNU General Public License # -define module_o_template -$(1).o: $(1).c - $$(CC) -c -o $$@ $$< $$(CFLAGS) $$(MENUSELECT_OPTS_$(1):%=-D%) $(foreach dep,$(MENUSELECT_DEPENDS_$(1)),$$(value $(dep)_INCLUDE)) -endef +ifneq ($(findstring MALLOC_DEBUG,$(MENUSELECT_CFLAGS)),) + ASTCFLAGS+=-include $(ASTTOPDIR)/include/asterisk/astmm.h +endif + +ifeq ($(findstring LOADABLE_MODULES,$(MENUSELECT_CFLAGS)),) + ASTCFLAGS+=${GC_CFLAGS} +endif + +ifneq ($(findstring STATIC_BUILD,$(MENUSELECT_CFLAGS)),) + STATIC_BUILD=-static +endif + +include $(ASTTOPDIR)/Makefile.rules -define module_so_template -$(1).so: $(1).o - $$(CC) $$(SOLINK) -o $$@ $$^ $(foreach dep,$(MENUSELECT_DEPENDS_$(1)),$$(value $(dep)_LIB)) -endef +comma:=, -%.o: %.c - $(CC) -c -o $@ $< $(CFLAGS) +$(addsuffix .o,$(C_MODS)): ASTCFLAGS+=-DAST_MODULE=\"$*\" $(MENUSELECT_OPTS_$*:%=-D%) $(foreach dep,$(MENUSELECT_DEPENDS_$*),$(value $(dep)_INCLUDE)) +$(addsuffix .oo,$(CC_MODS)): ASTCFLAGS+=-DAST_MODULE=\"$*\" $(MENUSELECT_OPTS_$*:%=-D%) $(foreach dep,$(MENUSELECT_DEPENDS_$*),$(value $(dep)_INCLUDE)) -$(foreach mod,$(SELECTED_MODS),$(eval $(call module_o_template,$(mod)))) +$(LOADABLE_MODS:%=%.so): ASTCFLAGS+=-fPIC +$(LOADABLE_MODS:%=%.so): LIBS+=$(foreach dep,$(MENUSELECT_DEPENDS_$*),$(value $(dep)_LIB)) +$(LOADABLE_MODS:%=%.so): ASTLDFLAGS+=$(foreach dep,$(MENUSELECT_DEPENDS_$*),$(value $(dep)_LDFLAGS)) -$(foreach mod,$(SELECTED_MODS),$(eval $(call module_so_template,$(mod)))) +$(addsuffix .so,$(filter $(LOADABLE_MODS),$(C_MODS))): %.so: %.o +$(addsuffix .so,$(filter $(LOADABLE_MODS),$(CC_MODS))): %.so: %.oo + +modules.link: $(addsuffix .o,$(filter $(EMBEDDED_MODS),$(C_MODS))) +modules.link: $(addsuffix .oo,$(filter $(EMBEDDED_MODS),$(CC_MODS))) .PHONY: clean clean-depend depend uninstall _all -_all: $(SELECTED_MODS:%=%.so) +ifneq ($(LOADABLE_MODS),) +_all: $(LOADABLE_MODS:%=%.so) +endif + +ifneq ($(EMBEDDED_MODS),) +_all: modules.link +__embed_ldscript: + @echo "../$(SUBDIR)/modules.link" +__embed_ldflags: + @echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(C_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LDFLAGS))" + @echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(CC_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LDFLAGS))" +__embed_libs: + @echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(C_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LIB))" + @echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(CC_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LIB))" +else +__embed_ldscript: +__embed_ldflags: +__embed_libs: +endif + +modules.link: + @rm -f $@ + @for file in $(patsubst %,$(SUBDIR)/%,$(filter %.o,$^)); do echo "INPUT (../$${file})" >> $@; done + @for file in $(patsubst %,$(SUBDIR)/%,$(filter-out %.o,$^)); do echo "INPUT (../$${file})" >> $@; done clean-depend:: rm -f .depend clean:: clean-depend - rm -f *.so *.o + rm -f *.so *.o *.oo + rm -f modules.link install:: all - for x in $(SELECTED_MODS:%=%.so); do $(INSTALL) -m 755 $$x $(DESTDIR)$(MODULES_DIR) ; done + for x in $(LOADABLE_MODS:%=%.so); do $(INSTALL) -m 755 $$x $(DESTDIR)$(MODULES_DIR) ; done uninstall:: ifneq ($(wildcard .depend),) - include .depend + include .depend endif depend: .depend .depend: - ../build_tools/mkdep $(CFLAGS) `ls *.c` + ../build_tools/mkdep $(ASTCFLAGS) `ls *.c *.cc 2> /dev/null`