jw-pkg/make/run.mk
Jan Lindemann 5210ba2acf make: Improve dependency tracking for exe targets
- Add wildcarded linker scripts to dependencies
- Run flash-push only on current hex file

Signed-off-by: Jan Lindemann <jan@janware.com>
2019-03-29 16:44:42 +00:00

176 lines
4.9 KiB
Makefile

# generic utility modules
# (c) 2001 jannet it services
# contact@jannet.de
# $Id$
include $(MODDIR)/make/defs.mk
include $(MODDIR)/make/defs-cpp.mk
DIR_BASENAME = $(notdir $(CWD))
ifneq ($(TARGET_PRODUCT),)
EXE_BASENAME_PREFIX ?= $(TARGET_PRODUCT)-
endif
ifeq ($(EXE_BASENAME),)
ifneq ($(DIR_BASENAME),test)
EXE_BASENAME = $(EXE_BASENAME_PREFIX)$(DIR_BASENAME)
else
EXE_BASENAME = $(EXE_BASENAME_PREFIX)test-$(notdir $(shell cd ..; $(PWD)))
endif
endif
ifneq ($(EXE_BASENAME),)
ifneq ($(TARGET),mingw)
EXE ?= $(EXE_BASENAME)
SHORTCUT_SCRIPT ?= ./run.sh
else
EXE ?= $(EXE_BASENAME).exe
SHORTCUT_SCRIPT ?= run.bat
endif
endif
EXE_PATH ?= ./$(EXE)
CHECK_CONF_EXE ?= $(firstword $(wildcard $(PROJECTS_DIR)/valdi/bin/checkconf) checkconf)
LOCAL_CFLAGS += -DEXE_NAME=\"$(EXE)\"
LOCAL_CXXFLAGS += -DEXE_NAME=\"$(EXE)\"
# ----- linker scripts from tagged templates
#BUILD_LD_DIR = $(wildcard $(firstword $(call $(TAGGED_TMPL_DIRS),ld)))
#BUILD_LD_DIR = $(firstword $(foreach tag,$(TAGGED_TMPL_TAGS),$(foreach repo,$(TOPDIR)/tmpl/tagged $(MODDIR)/tmpl/tagged,$(wildcard $(repo)/$(tag)/ld))))
#BUILD_LD_DIR = $(firstword $(wildcard $(foreach tag,$(TAGGED_TMPL_TAGS),$(foreach repo,$(TOPDIR)/tmpl/tagged $(MODDIR)/tmpl/tagged,$(repo)/$(tag)/ld))))
#BUILD_LD_TMPL_DIRS ?= $(foreach tag,$(TAGGED_TMPL_TAGS),$(foreach repo,$(TOPDIR)/tmpl/tagged $(MODDIR)/tmpl/tagged,$(repo)/$(tag)/ld))
#BUILD_LD_DIRS += $(wildcard $(BUILD_LD_TMPL_DIRS))
#PROJECT_LDFLAGS += $(foreach d,$(BUILD_LD_DIRS),-L$(d) $(addprefix -T ,$(sort $(notdir $(wildcard $(d)/*.ld)))))
BUILD_LD_DIRS = $(call uniq,$(dir $(foreach d,$(BUILD_LD_CHECK_DIRS),$(wildcard $(d)/*.ld))))
LD_SCRIPTS = $(foreach d,$(BUILD_LD_DIRS),$(wildcard $(d)/*.ld))
PROJECT_LDFLAGS += $(foreach d,$(BUILD_LD_DIRS),-L$(d) $(addprefix -T ,$(sort $(notdir $(wildcard $(d)/*.ld)))))
include $(MODDIR)/make/profiler.mk
BUILD_HDR =
include $(MODDIR)/make/rules.mk
include $(MODDIR)/make/ldlibpath.mk
include $(MODDIR)/make/path-rules.mk
include $(MODDIR)/make/debugger.mk
EXE_ARGS += $(LOCAL_EXE_ARGS)
ifneq ($(wildcard local.supp),)
VALGRIND_OPTS += --suppressions=local.supp
endif
all:
install:
clean:
distclean:
run-prereq: all
ifeq ($(TARGET),mingw)
run test: run-prereq
@echo "wine $(EXE_PATH) $(EXE_ARGS)"
@echo -e "set PATH=%PATH;$(DLL_PATH)\n" \
"$(EXE_PATH) $(EXE_ARGS)" | wine cmd
start: run-prereq
@echo "wine $(EXE_PATH) $(EXE_ARGS)"
@echo -e "set PATH=%PATH;$(DLL_PATH)\n" \
"$(EXE_PATH) $(EXE_ARGS)" | wine cmd &
else
run test: run-prereq
$(RM) -f core.*
$(EXE_PATH) $(EXE_ARGS)
start: run-prereq
$(RM) -f core.*
$(EXE_PATH) $(EXE_ARGS) &
which:
/usr/bin/which $(EXE_PATH)
$(SHORTCUT_SCRIPT):
ifeq ($(TARGET),mingw)
echo "set PATH=%PATH;$(DLL_PATH)" > $@.tmp
echo "$(EXE_PATH) $(EXE_ARGS)" >> $@.tmp
else
echo -e "#!/bin/bash\n\n$(RM) -f core.*\nexport LD_LIBRARY_PATH=$(LD_LIBRARY_PATH)\nexport PATH=$(PATH)\n$(EXE_PATH) $(EXE_ARGS)" > $@.tmp
chmod 755 $@.tmp
endif
mv $@.tmp $@
shortcut: $(SHORTCUT_SCRIPT)
distclean.shortcut:
$(RM) -f $(SHORTCUT_SCRIPT)
distclean: distclean.shortcut
clean: vg-clean-supp clean.out
# unfortunately iwatch only supports one directory :-(
autorun:
make run &
iwatch -e close_write -c "$(HOME)/bin/run-once.sh make restart" \
$(BUILD_LIBDIR)
wait-stop:
while /sbin/checkproc $(notdir $(EXE_PATH)); do sleep 1; done
restart: stop wait-stop all start
valgrind: run-prereq
$(RM) -f core.*
valgrind $(VALGRIND_OPTS) $(EXE_PATH) $(EXE_ARGS)
valkyrie: run-prereq
$(RM) -f core.*
valkyrie $(VALGRIND_OPTS) $(EXE_PATH) $(EXE_ARGS)
efence: run-prereq
$(RM) -f core.*
ef $(EXE_PATH) $(EXE_ARGS)
supp.tmp:
valgrind --gen-suppressions=all $(EXE_PATH) $(EXE_ARGS) 2>$@.tmp; mv $@.tmp $@ || exit 0
vg-create-supp: supp.tmp
$(CAT) $< | $(MOD_SCRIPT_DIR)/parse-valgrind-suppressions.sh > local.supp
$(RM) -f supp.tmp
vg-add-supp:
$(CAT) | $(MOD_SCRIPT_DIR)/parse-valgrind-suppressions.sh >> local.supp
vg-clean-supp:
$(RM) -f local.supp
clean.out:
$(RM) -f run.out
snap:
killall -SIGUSR1 $(notdir $(EXE_PATH))
check-conf:
$(CHECK_CONF_EXE) -p --log-flags console \
$(shell echo $(EXE_ARGS) | sed 's/.*--config-file *//; s/ .*//')
endif
stop:
if /sbin/checkproc $(notdir $(EXE_PATH)); then killall $(notdir $(EXE_PATH)); fi
kill:
killall -9 $(notdir $(EXE_PATH))
abort:
killall -6 $(notdir $(EXE_PATH))
strace: $(EXE_PATH) $(EXE_BIN) run-prereq
strace -f $(STRACE_EXTRA_OPTS) $(EXE_PATH) $(EXE_ARGS)
tee: $(EXE_PATH) $(EXE_BIN) run-prereq
$(RM) -f core.*
$(EXE_PATH) $(EXE_ARGS) 2>&1 | tee run.out
kcg:
kcachegrind callgrind.*
clean: runclean localclean