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:
Ruben Ayrapetyan
2014-08-04 22:02:48 +04:00
parent 1834887a93
commit 304098a984
3 changed files with 128 additions and 63 deletions
+60 -13
View File
@@ -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
View File
@@ -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
View File
@@ -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