https://bitbucket.org/hudson/magic-lantern
Raw File
Tip revision: 1f8e5d76d13c5e0d5ebdc4873f0902727fde240c authored by a1ex on 06 January 2014, 20:47:14 UTC
Close branch maintain
Tip revision: 1f8e5d7
Makefile.modules
TOP_DIR?=../..
ML_SETUP_DISABLE_USER_CONFIGS=y
ML_SETUP_EXTENSION=modules

include $(TOP_DIR)/Makefile.setup

# should we define a platform for modules? for now use 'all' platform
PLATFORM_INC=$(TOP_DIR)/platform/all
CFLAGS += -DMODULE -DMODULE_NAME=$(MODULE_NAME) $(MODULE_CFLAGS) -I.

MODULE_SRC    = $(MODULE_NAME).c
MODULE_OUTPUT = $(MODULE_NAME).mo
MODULE_SYM    = $(MODULE_NAME).sym
MODULE_DEP    = $(MODULE_NAME).dep
MODULE_DEPS   = $(MODULE_NAME).d

MODULE_STRINGS   = module_strings.h

all:: rebuild_hgstamp $(MODULE_OUTPUT) $(MODULE_SYM) $(MODULE_DEP)
nodep:: rebuild_hgstamp $(MODULE_OUTPUT) $(MODULE_SYM)
delete_if_failed:
	@echo ""
	@echo "Building module $(MODULE_NAME)..."
	@make all --no-print-directory || { \
		echo ""; \
		echo "********************************************************"; \
		echo "WARNING: module $(MODULE_NAME) failed to build, deleting"; \
		echo "********************************************************"; \
		echo ""; \
		make clean; \
	 }

-include $(MODULE_DEPS)

clean::
	$(call rm_files, $(MODULE_OBJS) $(MODULE_OUTPUT) $(MODULE_SYM) $(MODULE_DEP) $(MODULE_STRINGS) *.o *.d *.bmp *.dep *.sym hgstamp)

module_strings.h: README.rst hgstamp
	$(call build,README, $(PYTHON) ../readme2modulestrings.py > $@)

README.rst:
	$(call build,README,echo -e "$(MODULE_NAME)\n========\n\nPlease write a one-page description for your module here.\n\nYou may also add some metadata:\n\n:Author: <your name here>\n:License: <your license here>\n:Website: <your website here>\n\n" > $@)

$(MODULE_OUTPUT): $(MODULE_STRINGS) $(MODULE_OBJS)
	$(call build,MODULE,$(LD_REAL) -r -o $@ $(MODULE_OBJS))
	$(call build,STRIP,$(STRIP) --strip-debug --strip-unneeded --discard-all --discard-locals $@)

# tag any function with DUMP_ASM, then run "make dump_asm" from module directory
dump_asm: all
	$(OBJDUMP) -d -M reg-names-raw --section=.dump_asm $(MODULE_OBJS)

%.sym: %.mo
	$(call build,EXPORTS,$(READELF) -sW $< | grep GLOBAL | grep -v UND | grep -v COM | grep -v "__module_.*$(MODULE_NAME)" | $(AWK) '{print $$2 " " $$8;}' | sort > $@ && cat $@)
%.dep: %.mo
	$(call build,DEPENDS,$(READELF) -sW $< | $(GREP) GLOBAL | $(GREP) 00000000 | $(GREP) UND | $(AWK) '{print $$8;}' | sort > $@ && cd $(MODULES_DIR) && $(PYTHON) checkdep.py $(MODULE_NAME))

install:: all
	$(CP) $(PWD)/$(MODULE_OUTPUT) $(INSTALL_MODULES_DIR)/

FORCE:

include $(TOP_DIR)/Makefile.filerules

# force recompiling whenever hg history changes (for autogenerated strings)
# http://mercurial.selenic.com/wiki/VersioningWithMake
# the original trick didn't work, it rebuilds every time, figure out why
HGVERSION:= $(shell hg parents --template 'hgid: {node|short}')
.PHONY: rebuild_hgstamp
rebuild_hgstamp:
	@[ -f $hgstamp ] || touch $hgstamp
	@echo $(HGVERSION) | cmp -s hgstamp - || echo $(HGVERSION) > hgstamp
back to top