mirror of
https://github.com/jerryscript-project/jerryscript.git
synced 2025-12-15 16:29:21 +00:00
99 lines
3.2 KiB
Makefile
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;
|