Introducing make target for precommit testing: 'make precommit' that also supports parallel run: 'make -j precommit'. Introducing set of modifiers for linux target: libc_raw, musl, sanitize, valgrind. For example: 'make debug.linux-libc_raw-sanitize' or 'make release.linux-valgrind'. Removing corresponding flags.
This commit is contained in:
@@ -22,9 +22,12 @@
|
||||
# debug_release: - JERRY_NDEBUG; + optimizations; + debug symbols; + -Werror | checked release build
|
||||
# release: + JERRY_NDEBUG; + optimizations; - debug symbols; + -Werror | release build
|
||||
#
|
||||
# Target system part (after first dot):
|
||||
# Target system and modifiers part (after first dot):
|
||||
# linux - target system is linux
|
||||
# stm32f{4} - target is STM32F{4} board
|
||||
# stm32f{4} - target is STM32F{4} board
|
||||
#
|
||||
# Modifiers can be added after '-' sign.
|
||||
# For list of modifiers for PC target - see TARGET_PC_MODS, for MCU target - TARGET_MCU_MODS.
|
||||
#
|
||||
# Target action part (optional, after second dot):
|
||||
# check - run cppcheck on src folder, unit and other tests
|
||||
@@ -41,12 +44,21 @@
|
||||
export TARGET_MODES = debug debug_release release
|
||||
export TARGET_PC_SYSTEMS = linux
|
||||
export TARGET_MCU_SYSTEMS = $(addprefix stm32f,4) # now only stm32f4 is supported, to add, for example, to stm32f3, change to $(addprefix stm32f,3 4)
|
||||
export TARGET_SYSTEMS = $(TARGET_PC_SYSTEMS) $(TARGET_MCU_SYSTEMS)
|
||||
|
||||
export TARGET_PC_MODS = libc_raw musl sanitize valgrind \
|
||||
libc_raw-sanitize libc_raw-valgrind \
|
||||
musl-valgrind
|
||||
|
||||
export TARGET_MCU_MODS =
|
||||
|
||||
export TARGET_SYSTEMS = $(TARGET_PC_SYSTEMS) \
|
||||
$(TARGET_MCU_SYSTEMS) \
|
||||
$(foreach __MOD,$(TARGET_PC_MODS),$(foreach __SYSTEM,$(TARGET_PC_SYSTEMS),$(__SYSTEM)-$(__MOD))) \
|
||||
$(foreach __MOD,$(TARGET_MCU_MODS),$(foreach __SYSTEM,$(TARGET_MCU_SYSTEMS),$(__SYSTEM)-$(__MOD)))
|
||||
|
||||
# Target list
|
||||
export JERRY_TARGETS = $(foreach __MODE,$(TARGET_MODES),$(foreach __SYSTEM,$(TARGET_SYSTEMS),$(__MODE).$(__SYSTEM)))
|
||||
export TESTS_TARGET = unittests
|
||||
export PARSER_TESTS_TARGET = testparser
|
||||
export CHECK_TARGETS = $(foreach __TARGET,$(JERRY_TARGETS),$(__TARGET).check)
|
||||
export FLASH_TARGETS = $(foreach __TARGET,$(foreach __MODE,$(TARGET_MODES),$(foreach __SYSTEM,$(TARGET_MCU_SYSTEMS),$(__MODE).$(__SYSTEM))),$(__TARGET).flash)
|
||||
|
||||
@@ -60,16 +72,51 @@ export echo
|
||||
export todo
|
||||
export fixme
|
||||
export color
|
||||
export sanitize
|
||||
export valgrind
|
||||
export musl
|
||||
export libc_raw
|
||||
|
||||
all: clean $(TESTS_TARGET) $(CHECK_TARGETS)
|
||||
build: clean $(JERRY_TARGETS)
|
||||
|
||||
$(JERRY_TARGETS) $(TESTS_TARGET) $(PARSER_TESTS_TARGET) $(FLASH_TARGETS) $(CHECK_TARGETS):
|
||||
@echo $@
|
||||
@$(MAKE) -f Makefile.mk TARGET=$@ $@
|
||||
all: clean $(JERRY_TARGETS) $(TESTS_TARGET) $(CHECK_TARGETS)
|
||||
|
||||
.SILENT: commit
|
||||
|
||||
GIT_STATUS_NOT_CLEAN_MSG="Git status of current directory is not clean"
|
||||
GIT_STATUS_CONSIDER_CLEAN_MSG="Consider removing all untracked files and locally commiting all changes and running \'make precommit\' again"
|
||||
PRECOMMIT_CHECK_TARGETS_LIST= debug.linux-sanitize.check \
|
||||
debug.linux-valgrind.check \
|
||||
debug_release.linux-sanitize.check \
|
||||
debug_release.linux-valgrind.check \
|
||||
release.linux-sanitize.check \
|
||||
release.linux-musl-valgrind.check \
|
||||
release.linux-libc_raw-valgrind.check
|
||||
|
||||
git_status_pre_test_check:
|
||||
@ clear
|
||||
@ if [ "`git status --porcelain 2>&1 | wc -l`" != "0" ]; \
|
||||
then \
|
||||
echo -e "\n \e[1;90m$(GIT_STATUS_NOT_CLEAN_MSG):\n"; \
|
||||
git status ; \
|
||||
echo -e "\n\n $(GIT_STATUS_CONSIDER_CLEAN_MSG).\e[0m\n"; \
|
||||
fi
|
||||
|
||||
precommit: clean git_status_pre_test_check build
|
||||
@ echo -e "\n================ Build completed successfully. Running precommit tests ================\n"
|
||||
@ echo -e "All targets were built successfully. Starting unit tests' build and run.\n"
|
||||
@ $(MAKE) -s unittests TESTS_OPTS="--silent"
|
||||
@ echo -e "Unit tests completed successfully. Starting parse-only testing.\n"
|
||||
@ $(MAKE) -s $(PRECOMMIT_CHECK_TARGETS_LIST) TESTS_DIR=./tests/jerry TESTS_OPTS="--parse-only" OUTPUT_TO_LOG=enable
|
||||
@ echo -e "\e[0;31mFIXME:\e[0m './benchmarks/jerry parse-only' testing skipped.\n"; # $(MAKE) -s $(PRECOMMIT_CHECK_TARGETS_LIST) TESTS_DIR=./benchmarks/jerry TESTS_OPTS="--parse-only" OUTPUT_TO_LOG=enable
|
||||
@ echo -e "Parse-only testing completed successfully. Starting full tests run.\n"
|
||||
@ echo -e "\e[0;31mFIXME:\e[0m Full testing skipped.\n"; # $(MAKE) -s $(PRECOMMIT_CHECK_TARGETS_LIST) TESTS_DIR=./tests/jerry OUTPUT_TO_LOG=enable
|
||||
@ echo -e "Full testing completed successfully\n\n================\n\n"
|
||||
@ if [ "`git status --porcelain 2>&1 | grep -v -e '^?? out/$' | wc -l`" == "0" ]; \
|
||||
then \
|
||||
echo -e "\e[0;32m OK to push\e[0m"; \
|
||||
else \
|
||||
echo -e "\e[1;33m $(GIT_STATUS_NOT_CLEAN_MSG). $(GIT_STATUS_CONSIDER_CLEAN_MSG).\e[0m\n"; \
|
||||
fi;
|
||||
|
||||
$(JERRY_TARGETS) $(TESTS_TARGET) $(FLASH_TARGETS) $(CHECK_TARGETS):
|
||||
@$(MAKE) -s -f Makefile.mk TARGET=$@ $@
|
||||
|
||||
clean:
|
||||
rm -rf $(OUT_DIR)
|
||||
@ rm -rf $(OUT_DIR)
|
||||
|
||||
+53
-47
@@ -18,29 +18,33 @@ LNK_SCRIPT_STM32F4 = ./third-party/stm32f4.ld
|
||||
|
||||
# Parsing target
|
||||
# '.' -> ' '
|
||||
TARGET_SPACED = $(subst ., ,$(TARGET))
|
||||
TARGET_SPACED := $(subst ., ,$(TARGET))
|
||||
# extract target mode part
|
||||
TARGET_MODE = $(word 1,$(TARGET_SPACED))
|
||||
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 2,$(TARGET_SPACED))
|
||||
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_ACTION := $(word 3,$(TARGET_SPACED))
|
||||
|
||||
# Target used as dependency of an action (check, flash, etc.)
|
||||
TARGET_OF_ACTION = $(TARGET_MODE).$(TARGET_SYSTEM)
|
||||
|
||||
# target folder name in $(OUT_DIR)
|
||||
TARGET_DIR=$(OUT_DIR)/$(TARGET_MODE).$(TARGET_SYSTEM)
|
||||
TARGET_OF_ACTION := $(TARGET_MODE).$(TARGET_SYSTEM_AND_MODS)
|
||||
|
||||
# unittests mode -> linux system
|
||||
ifeq ($(TARGET_MODE),$(TESTS_TARGET))
|
||||
TARGET_SYSTEM = linux
|
||||
TARGET_SYSTEM := linux
|
||||
TARGET_SYSTEM_AND_MODS := $(TARGET_SYSTEM)
|
||||
endif
|
||||
|
||||
# parse-only mode -> linux system
|
||||
ifeq ($(TARGET_MODE),$(PARSER_TESTS_TARGET))
|
||||
TARGET_SYSTEM = linux
|
||||
endif
|
||||
# target folder name in $(OUT_DIR)
|
||||
TARGET_DIR=$(OUT_DIR)/$(TARGET_MODE).$(TARGET_SYSTEM_AND_MODS)
|
||||
|
||||
#
|
||||
# Options setup
|
||||
@@ -73,6 +77,13 @@ else
|
||||
OPTION_ECHO := disable
|
||||
endif
|
||||
|
||||
# -fdiagnostics-color=always
|
||||
ifeq ($(color),1)
|
||||
OPTION_COLOR := enable
|
||||
else
|
||||
OPTION_COLOR := disable
|
||||
endif
|
||||
|
||||
# JERRY_NDEBUG, debug symbols
|
||||
ifeq ($(TARGET_MODE),release)
|
||||
OPTION_NDEBUG = enable
|
||||
@@ -98,13 +109,13 @@ else
|
||||
OPTION_MCU = disable
|
||||
endif
|
||||
|
||||
ifeq ($(musl),1)
|
||||
ifeq ($(filter musl,$(TARGET_MODS)), musl)
|
||||
OPTION_LIBC_MUSL := enable
|
||||
else
|
||||
OPTION_LIBC_MUSL := disable
|
||||
endif
|
||||
|
||||
ifeq ($(libc_raw),1)
|
||||
ifeq ($(filter libc_raw,$(TARGET_MODS)), libc_raw)
|
||||
ifeq ($(OPTION_LIBC_MUSL),enable)
|
||||
$(error LIBC_RAW and LIBC_MUSL are mutually exclusive)
|
||||
endif
|
||||
@@ -114,13 +125,7 @@ else
|
||||
OPTION_LIBC_RAW := disable
|
||||
endif
|
||||
|
||||
ifeq ($(color),1)
|
||||
OPTION_COLOR := enable
|
||||
else
|
||||
OPTION_COLOR := disable
|
||||
endif
|
||||
|
||||
ifeq ($(sanitize),1)
|
||||
ifeq ($(filter sanitize,$(TARGET_MODS)), sanitize)
|
||||
ifeq ($(OPTION_LIBC_MUSL),enable)
|
||||
$(error ASAN and LIBC_MUSL are mutually exclusive)
|
||||
endif
|
||||
@@ -130,7 +135,7 @@ else
|
||||
OPTION_SANITIZE := disable
|
||||
endif
|
||||
|
||||
ifeq ($(valgrind),1)
|
||||
ifeq ($(filter valgrind,$(TARGET_MODS)), valgrind)
|
||||
OPTION_VALGRIND := enable
|
||||
|
||||
ifeq ($(OPTION_SANITIZE),enable)
|
||||
@@ -306,7 +311,7 @@ ifeq ($(OPTION_FIXME),enable)
|
||||
endif
|
||||
|
||||
ifeq ($(OPTION_VALGRIND),enable)
|
||||
VALGRIND_CMD := "valgrind --track-origins=yes"
|
||||
VALGRIND_CMD := "valgrind --error-exitcode=254 --track-origins=yes"
|
||||
else
|
||||
VALGRIND_CMD :=
|
||||
DEFINES_JERRY += -DJERRY_NVALGRIND
|
||||
@@ -351,11 +356,8 @@ all: clean $(JERRY_TARGETS)
|
||||
|
||||
$(JERRY_TARGETS):
|
||||
@rm -rf $(TARGET_DIR)
|
||||
@echo "=== Running cppcheck ==="
|
||||
@cppcheck $(DEFINES_JERRY) `find $(UNITTESTS_SRC_DIR) -name *.[c]` $(SOURCES_JERRY_C) $(INCLUDES_JERRY) $(INCLUDES_THIRDPARTY) \
|
||||
@cppcheck $(DEFINES_JERRY) $(SOURCES_JERRY_C) $(INCLUDES_JERRY) $(INCLUDES_THIRDPARTY) \
|
||||
--error-exitcode=1 --std=c99 --enable=all --suppress=missingIncludeSystem --suppress=unusedFunction 1>/dev/null
|
||||
@echo Done
|
||||
@echo
|
||||
@mkdir -p $(TARGET_DIR)
|
||||
@mkdir -p $(TARGET_DIR)/obj
|
||||
@source_index=0; \
|
||||
@@ -387,6 +389,8 @@ $(TESTS_TARGET):
|
||||
@rm -rf $(TARGET_DIR)
|
||||
@mkdir -p $(TARGET_DIR)
|
||||
@mkdir -p $(TARGET_DIR)/obj
|
||||
@cppcheck $(DEFINES_JERRY) `find $(UNITTESTS_SRC_DIR) -name *.[c]` $(SOURCES_JERRY_C) $(INCLUDES_JERRY) $(INCLUDES_THIRDPARTY) \
|
||||
--error-exitcode=1 --std=c99 --enable=all --suppress=missingIncludeSystem --suppress=unusedFunction 1>/dev/null
|
||||
@source_index=0; \
|
||||
for jerry_src in $(SOURCES_JERRY); \
|
||||
do \
|
||||
@@ -406,28 +410,30 @@ $(TESTS_TARGET):
|
||||
if [ $$? -ne 0 ]; then echo Failed "'$$cmd'"; exit 1; fi; \
|
||||
done
|
||||
@ rm -rf $(TARGET_DIR)/obj
|
||||
@ echo "=== Running unit tests ==="
|
||||
@ VALGRIND=$(VALGRIND_CMD) ./tools/jerry_unittest.sh $(TARGET_DIR)
|
||||
@ echo Done
|
||||
@ echo
|
||||
@ VALGRIND=$(VALGRIND_CMD) ./tools/jerry_unittest.sh $(TARGET_DIR) $(TESTS_OPTS)
|
||||
|
||||
$(PARSER_TESTS_TARGET): debug_release.$(TARGET_SYSTEM)
|
||||
$(CHECK_TARGETS):
|
||||
@ if [ ! -f $(TARGET_DIR)/$(ENGINE_NAME) ]; then echo $(TARGET_OF_ACTION) is not built yet; exit 1; fi;
|
||||
@ if [ ! -d "$(TESTS_DIR)" ]; then echo \"$(TESTS_DIR)\" is not a directory; exit 1; fi;
|
||||
@ rm -rf $(TARGET_DIR)/check
|
||||
@ mkdir -p $(TARGET_DIR)/check
|
||||
@ echo "=== Running parser tests ==="
|
||||
@ if [ -f $(TARGET_DIR)/$(ENGINE_NAME) ]; then \
|
||||
VALGRIND=$(VALGRIND_CMD) ./tools/jerry_test.sh $(TARGET_DIR)/$(ENGINE_NAME) $(TARGET_DIR)/check --parse-only; \
|
||||
fi
|
||||
@ if [ "$(OUTPUT_TO_LOG)" = "enable" ]; \
|
||||
then \
|
||||
ADD_OPTS="--output-to-log"; \
|
||||
fi; \
|
||||
VALGRIND=$(VALGRIND_CMD) ./tools/jerry_test.sh $(TARGET_DIR)/$(ENGINE_NAME) $(TARGET_DIR)/check $(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;
|
||||
|
||||
$(CHECK_TARGETS): $(TARGET_OF_ACTION)
|
||||
@ make unittests testparser
|
||||
@ mkdir -p $(TARGET_DIR)/check
|
||||
@ echo "=== Running js tests ==="
|
||||
@ if [ -f $(TARGET_DIR)/$(ENGINE_NAME) ]; then \
|
||||
VALGRIND=$(VALGRIND_CMD) ./tools/jerry_test.sh $(TARGET_DIR)/$(ENGINE_NAME) $(TARGET_DIR)/check; \
|
||||
fi
|
||||
|
||||
@echo Done
|
||||
@echo
|
||||
|
||||
$(FLASH_TARGETS): $(TARGET_OF_ACTION)
|
||||
st-flash write $(OUT_DIR)/$(TARGET_OF_ACTION)/jerry.bin 0x08000000 || exit $$?
|
||||
|
||||
+15
-3
@@ -15,6 +15,18 @@
|
||||
#!/bin/bash
|
||||
|
||||
DIR="$1"
|
||||
shift
|
||||
|
||||
OPTION_SILENT=disable
|
||||
while (( "$#" ))
|
||||
do
|
||||
if [ "$1" = "--silent" ]
|
||||
then
|
||||
OPTION_SILENT=enable
|
||||
fi
|
||||
|
||||
shift
|
||||
done
|
||||
|
||||
rm -f $DIR/unit_tests_run.log
|
||||
|
||||
@@ -22,7 +34,7 @@ UNITTESTS=$(ls $DIR)
|
||||
|
||||
for unit_test in $UNITTESTS;
|
||||
do
|
||||
echo -n "Running $unit_test... ";
|
||||
[ $OPTION_SILENT = "enable" ] || echo -n "Running $unit_test... ";
|
||||
|
||||
$VALGRIND $DIR/$unit_test >&$DIR/unit_tests_run.log.tmp;
|
||||
status_code=$?
|
||||
@@ -31,9 +43,9 @@ do
|
||||
|
||||
if [ $status_code -eq 0 ];
|
||||
then
|
||||
echo OK;
|
||||
[ $OPTION_SILENT = "enable" ] || echo OK;
|
||||
else
|
||||
echo FAILED;
|
||||
[ $OPTION_SILENT = "enable" ] || echo FAILED;
|
||||
exit 1;
|
||||
fi;
|
||||
done
|
||||
|
||||
Reference in New Issue
Block a user