jerryscript/Makefile.mk
2015-02-10 20:21:01 +03:00

99 lines
3.2 KiB
Makefile

export SHELL=/bin/bash
ifeq ($(TARGET),)
$(error TARGET not set)
endif
ENGINE_NAME ?= jerry
# Parsing target
# '.' -> ' '
TARGET_SPACED := $(subst ., ,$(TARGET))
# extract target mode part
TARGET_MODE := $(word 1,$(TARGET_SPACED))
# extract target system part with modifiers
TARGET_SYSTEM_AND_MODS := $(word 2,$(TARGET_SPACED))
TARGET_SYSTEM_AND_MODS_SPACED := $(subst -, ,$(TARGET_SYSTEM_AND_MODS))
# extract target system part
TARGET_SYSTEM := $(word 1,$(TARGET_SYSTEM_AND_MODS_SPACED))
# extract modifiers
TARGET_MODS := $(wordlist 2, $(words $(TARGET_SYSTEM_AND_MODS_SPACED)), $(TARGET_SYSTEM_AND_MODS_SPACED))
# extract optional action part
TARGET_ACTION := $(word 3,$(TARGET_SPACED))
# Target used as dependency of an action (check, flash, etc.)
TARGET_OF_ACTION := $(TARGET_MODE).$(TARGET_SYSTEM_AND_MODS)
# target folder name in $(OUT_DIR)
TARGET_DIR=$(OUT_DIR)/$(TARGET_MODE).$(TARGET_SYSTEM_AND_MODS)
# unittests mode -> linux system
ifeq ($(TARGET_MODE),unittests_run)
TARGET_SYSTEM := linux
TARGET_SYSTEM_AND_MODS := $(TARGET_SYSTEM)
TARGET_DIR := $(OUT_DIR)/unittests
endif
ifeq ($(filter valgrind,$(TARGET_MODS)), valgrind)
OPTION_VALGRIND := enable
ifeq ($(OPTION_SANITIZE),enable)
$(error ASAN and Valgrind are mutually exclusive)
endif
else
OPTION_VALGRIND := disable
endif
ifeq ($(OPTION_VALGRIND),enable)
VALGRIND_CMD := "valgrind --error-exitcode=254 --track-origins=yes"
VALGRIND_TIMEOUT := 60
else
VALGRIND_CMD :=
VALGRIND_TIMEOUT :=
endif
.PHONY: unittests_run $(CHECK_TARGETS)
unittests_run:
@ VALGRIND=$(VALGRIND_CMD) ./tools/runners/run-unittests.sh $(TARGET_DIR) $(TESTS_OPTS)
$(CHECK_TARGETS):
@ if [ ! -f $(TARGET_DIR)/$(ENGINE_NAME) ]; then echo $(TARGET_OF_ACTION) is not built yet; exit 1; fi;
@ if [[ ! -d "$(TESTS)" && ! -f "$(TESTS)" ]]; then echo \"$(TESTS)\" is not a directory and not a file; exit 1; fi;
@ rm -rf $(TARGET_DIR)/check
@ mkdir -p $(TARGET_DIR)/check
@ if [ "$(OUTPUT_TO_LOG)" = "enable" ]; \
then \
ADD_OPTS="--output-to-log"; \
fi; \
VALGRIND=$(VALGRIND_CMD) TIMEOUT=$(VALGRIND_TIMEOUT) ./tools/runners/run-test-pass.sh $(TARGET_DIR)/$(ENGINE_NAME) $(TARGET_DIR)/check $(TESTS) $(TESTS_OPTS) $$ADD_OPTS; \
status_code=$$?; \
if [ $$status_code -ne 0 ]; \
then \
echo $(TARGET) failed; \
if [ "$(OUTPUT_TO_LOG)" = "enable" ]; \
then \
echo See log in $(TARGET_DIR)/check directory for details.; \
fi; \
\
exit $$status_code; \
fi; \
if [ -d $(TESTS_DIR)/fail/ ]; \
then \
VALGRIND=$(VALGRIND_CMD) TIMEOUT=$(VALGRIND_TIMEOUT) ./tools/runners/run-test-xfail.sh $(TARGET_DIR)/$(ENGINE_NAME) $(TARGET_DIR)/check $(PARSER_ERROR_CODE) $(TESTS_DIR) $(TESTS_OPTS) $$ADD_OPTS; \
status_code=$$?; \
if [ $$status_code -ne 0 ]; \
then \
echo $(TARGET) failed; \
if [ "$(OUTPUT_TO_LOG)" = "enable" ]; \
then \
echo See log in $(TARGET_DIR)/check directory for details.; \
fi; \
\
exit $$status_code; \
fi; \
fi;